1N/A:
1N/A# Glenn Fowler
1N/A# AT&T Research
1N/A#
1N/A# @(#)pp.probe (AT&T Research) 2009-02-02
1N/A#
1N/A# C probe for libpp
1N/A#
1N/A# NOTE: C.probe must be included or .'d here
1N/A#
1N/A
1N/Appdef=$dir/pp.def
1N/Appkey=$dir/pp.key
1N/Appsym=$dir/ppsym
1N/Afor f in $ppdef $ppkey $ppsym
1N/Ado test -f $f || { echo "$0: $f: not found" >&4; exit 1 ;}
1N/Adone
1N/A
1N/Ased -e "/^#/d" -e "s/[ ].*//" < $ppdef > all.pp
1N/A
1N/Asystem=
1N/Arelease=
1N/Aversion=
1N/Aarchitecture=
1N/Acpu=
1N/Amodel=
1N/Amachine=
1N/Aundef_predef=
1N/A
1N/A#
1N/A# path cleanup
1N/A#
1N/A
1N/Afor i in stdinclude usrinclude
1N/Ado eval o='$'$i
1N/A v=$o
1N/A case $v in
1N/A *//*) v=`echo $v | sed 's,///*,/,g'` ;;
1N/A esac
1N/A if (test . -ef "`pwd`")
1N/A then k=
1N/A for x in $v
1N/A do case $x in
1N/A */../*|*/..)
1N/A case $x in
1N/A /*) a=/ ;;
1N/A *) a= ;;
1N/A esac
1N/A IFS=/
1N/A set '' $x
1N/A IFS=$ifs
1N/A r=
1N/A for d
1N/A do r="$d $r"
1N/A done
1N/A p=
1N/A g=
1N/A for d in $r
1N/A do case $d in
1N/A ..) g="$g $d" ;;
1N/A *) case $g in
1N/A '') case $p in
1N/A '') p=$d ;;
1N/A *) p=$d/$p ;;
1N/A esac
1N/A ;;
1N/A *) set $g
1N/A shift
1N/A g=$*
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A case $a in
1N/A '') for d in $g
1N/A do p=$d/$p
1N/A done
1N/A ;;
1N/A *) p=$a$p
1N/A ;;
1N/A esac
1N/A case $p in
1N/A /) continue ;;
1N/A esac
1N/A test $x -ef $p && x=$p
1N/A ;;
1N/A esac
1N/A k="$k $x"
1N/A done
1N/A set '' $k
1N/A shift
1N/A v=$1
1N/A case $# in
1N/A 0) ;;
1N/A *) shift
1N/A while :
1N/A do case $# in
1N/A 0) break ;;
1N/A esac
1N/A k=
1N/A for d
1N/A do for j in $v
1N/A do test $d -ef $j && continue 2
1N/A done
1N/A k="$k $d"
1N/A done
1N/A set '' $k
1N/A case $# in
1N/A 1) break ;;
1N/A esac
1N/A shift
1N/A v="$v $1"
1N/A shift
1N/A done
1N/A ;;
1N/A esac
1N/A fi
1N/A case $v in
1N/A $o) ;;
1N/A *) eval $i='$'v ;;
1N/A esac
1N/Adone
1N/A
1N/Aid="::IDENT::`date`::IDENT::"
1N/Aecho '#assert test(ok)
1N/A#if #test(ok)
1N/A#else
1N/A(
1N/A#endif' > assert.$src
1N/Aecho '#ifdef __BASE_FILE__
1N/Aint ok;
1N/A#else
1N/A(
1N/A#endif' > basefile.$src
1N/Acat > catlit1.i <<'!'
1N/Achar test[] = "te"
1N/A"st";
1N/A!
1N/Acat > catlit2.i <<'!'
1N/Achar test[] = "te\
1N/Ast";
1N/A!
1N/Aecho '#define g(a,b) a ## b
1N/Avolatile int a;
1N/Aconst int g(x,y)=1;
1N/Aextern int c(int);' > compat.$src
1N/Aecho > cpp.$src
1N/Aecho "#defincl <x.h>" > defincl.$src
1N/Aecho 'int a$b;' > dollar.$src
1N/Aecho "#eject" > eject.$src
1N/Aecho "#if 0
1N/A(
1N/A#else if 1
1N/Aint x;
1N/A#else
1N/A(
1N/A#endif" > elseif.$src
1N/Aecho "#define _CAT(a,b,c) a##b##c
1N/A#define hdra hdrx
1N/A#define hdr _CAT(<,hdra,.h>)
1N/A#include hdr" > hdra.$src
1N/Aecho "#define _XAT(a,b,c) a##b##c
1N/A#define _CAT(a,b,c) _XAT(a,b,c)
1N/A#define hdra hdrx
1N/A#define hdr _CAT(<,hdra,.h>)
1N/A#include hdr" > hdrx.$src
1N/Aecho "int f(){return 0;}" > hdrx.h
1N/Aecho "#ident \"$id\"" > ident.$src
1N/Aecho "#import \"import.h\"" > import.$src
1N/Aecho "int aaa;" > import.h
1N/Aecho "#include <inc_next.h>" > inc_next.$src
1N/Amkdir inc0 inc1
1N/Aecho "#include_next <inc_next.h>" > inc0/inc_next.h
1N/Aecho 'char s[] = "INCLUDE_NEXT";' > inc1/inc_next.h
1N/Aecho '# 1 "linefile.i"
1N/A
1N/A# 1 "linefile.i"
1N/A
1N/Aint i;' > linefile1.i
1N/Aecho '# 1 "linefile.i"
1N/A
1N/A# 1
1N/A
1N/Aint i;' > linefile2.i
1N/Aecho "int i = 0;" > lineid1.i
1N/Aecho '# 1 "t.c"
1N/Aint i = 0;' > lineid2.i
1N/Aecho '# 1 "t.c"
1N/Aint i = 0;' > lineid3.$src
1N/Aecho "#include <stdio.h>" > linetype.$src
1N/Aecho '#include <sys/types.h>
1N/Amain()
1N/A{
1N/A return sizeof(LONGLONG) != 8;
1N/A}' > longlong.$src
1N/Aecho '#include "once.h"
1N/A#include "once.h"' > once.$src
1N/Aecho '#ifdef once
1N/Aallmultiple
1N/A#else
1N/A#define once
1N/A#endif' > once.h
1N/Aecho "extern int a,b;int f(){return a + = b;}" > opspace.$src
1N/Aecho "int f(){return(0);} // ((" > pluscom.$src
1N/Aecho "class x {int n;} m;" > plusplus.$src
1N/Aecho > preinc.$src
1N/Aecho '// splice \
1N/A(
1N/Aint x = 1;' > plusspl.$src
1N/Aecho "int stdc_default_value = __STDC__ ;" > stdc.$src
1N/Aecho 'char xxx[] = "abc
1N/A(";' > span.$src
1N/Aecho '#define g(a,b) a\
1N/Ab
1N/Aint ab,xy;
1N/A#define xy XY
1N/Achar* g(x,y);' > splice.$src
1N/A{
1N/Aecho 'int a\ '
1N/Aecho 'b = 1;'
1N/A} > splicesp.$src
1N/Aecho '#define g(a,b) a/**/b
1N/Aint g(x,y)=1;' > trans.$src
1N/Aecho '#define m 65
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 65
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 64
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 62
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 61
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 60
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 59
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 58
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 56
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 55
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 54
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 52
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 51
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 50
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 49
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 48
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 47
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 46
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 45
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 44
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 42
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 41
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 40
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 39
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 38
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 37
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 36
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 35
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 34
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 31
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 30
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 29
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxxx 28
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxxx 27
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxxx 26
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxxx 25
1N/A#define xxxxxxxxxxxxxxxxxxxxxxxx 24
1N/A#define xxxxxxxxxxxxxxxxxxxxxxx 23
1N/A#define xxxxxxxxxxxxxxxxxxxxxx 22
1N/A#define xxxxxxxxxxxxxxxxxxxxx 21
1N/A#define xxxxxxxxxxxxxxxxxxxx 20
1N/A#define xxxxxxxxxxxxxxxxxxx 19
1N/A#define xxxxxxxxxxxxxxxxxx 18
1N/A#define xxxxxxxxxxxxxxxxx 17
1N/A#define xxxxxxxxxxxxxxxx 16
1N/A#define xxxxxxxxxxxxxxx 15
1N/A#define xxxxxxxxxxxxxx 14
1N/A#define xxxxxxxxxxxxx 13
1N/A#define xxxxxxxxxxxx 12
1N/A#define xxxxxxxxxxx 11
1N/A#define xxxxxxxxxx 10
1N/A#define xxxxxxxxx 9
1N/A#define xxxxxxxx 8
1N/A#define xxxxxxx 7
1N/A#define xxxxxx 6
1N/A#define xxxxx 5
1N/A#define xxxx 4
1N/A#define xxx 3
1N/A#define xx 2
1N/A#define x 1
1N/A#if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx != m
1N/Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1N/A#endif' > truncate.$src
1N/Acat > zeof.c <<'!'
1N/Achar* foo = "az";
1N/A!
1N/A
1N/Aallmultiple=
1N/Aassert=
1N/Abasefile=
1N/Acompatibility=1
1N/Adefincl=
1N/Adollar=
1N/Aeject=
1N/Aelseif=
1N/Aheaderexpand=
1N/Aheaderexpandall=
1N/Ahostedtransition=
1N/Aident=
1N/Aimport=
1N/Ainclude_next=
1N/Alinefile=
1N/Alineid=
1N/Alinetype=
1N/Anocatliteral=
1N/Aopspace=
1N/Apluscom=
1N/Aplusplus=
1N/Aplussplice=
1N/Aredef=
1N/Areguard=
1N/Areserved=
1N/Aspaceout=
1N/Asplicecat=
1N/Asplicespace=
1N/Astrict=
1N/Astringspan=
1N/Atransition=
1N/Atruncate=
1N/Azeof=
1N/A
1N/A$cc -c assert.$src && assert=1
1N/A
1N/A$cc -c basefile.$src && basefile=__BASE_FILE__
1N/A
1N/Aif $cc -E defincl.$src
1N/Athen case "`$cc -E defincl.$src | grep -c 'defincl'`" in
1N/A 0) defincl=1 ;;
1N/A esac
1N/Afi
1N/A
1N/Aif $cc -c catlit1.i 2>e
1N/Athen if $cc -c catlit2.i 2>f
1N/A then if test `wc -c < f` -gt `wc -c < e`
1N/A then nocatliteral=1
1N/A fi
1N/A else nocatliteral=1
1N/A fi
1N/Afi
1N/A
1N/A$cc -c dollar.$src && dollar=1
1N/A
1N/A$cc -c elseif.$src && elseif=1
1N/A
1N/Aif $cc -I. -c hdra.$src
1N/Athen headerexpandall=1
1N/Aelif $cc -I. -c hdrx.$src
1N/Athen headerexpand=1
1N/Afi
1N/A
1N/Aif $cc -E eject.$src
1N/Athen case "`$cc -E eject.$src | grep -c 'eject'`" in
1N/A 0) eject=1 ;;
1N/A esac
1N/Afi
1N/A
1N/A$cc -S ident.$src && grep "$id" ident.s && ident=1
1N/A
1N/A{ $cc -E import.$src | grep aaa ;} && import=1
1N/A
1N/A{ $cc -E -Iinc0 -Iinc1 inc_next.$src | grep INCLUDE_NEXT ;} && include_next=1
1N/A
1N/Aif $cc -c linefile1.i
1N/Athen $cc -c linefile2.i
1N/A case $? in
1N/A 0) ;;
1N/A *) linefile=1 ;;
1N/A esac
1N/Afi
1N/A
1N/Aif $cc -c lineid1.i 2>b
1N/Athen $cc -c lineid2.i 2>e
1N/A c=$?
1N/Aelse $cc -c lineid3.c 2>e
1N/A c=$?
1N/Afi
1N/Acase $c in
1N/A0) case `wc -l < b` in
1N/A `wc -l < e`) ;;
1N/A *) lineid=line ;;
1N/A esac
1N/A ;;
1N/A*) lineid=line
1N/A ;;
1N/Aesac
1N/A
1N/Aif $cc -E linetype.$src | grep '^[ ]*#[ ]*[0123456789]*[ ]*".*"[ ]*[12]' > linetype
1N/Athen if grep '^[ ]*#[ ]*[0123456789]*[ ]*".*"[ ]*[12][ ][ ]*3' linetype
1N/A then linetype=2
1N/A else linetype=1
1N/A fi
1N/Afi
1N/A
1N/A{ $cc -E once.$src | grep allmultiple ;} && allmultiple=1
1N/A
1N/A$cc -c plusplus.$src && plusplus=1
1N/A
1N/A$cc -c span.$src && stringspan=1
1N/A
1N/A$cc -c splice.$src && splicecat=1
1N/A
1N/A$cc -c splicesp.$src && splicespace=1
1N/A
1N/Aexec < $ppkey
1N/Awhile read keyword type alternate comment
1N/Ado case $keyword in
1N/A .) break ;;
1N/A ""|"#") continue ;;
1N/A esac
1N/A case $type in
1N/A ""|".") type= ;;
1N/A *) type="=$type" ;;
1N/A esac
1N/A for pre in '' _ __
1N/A do for suf in '' _ __
1N/A do case $suf in
1N/A '') sep= ;;
1N/A *) sep=. ;;
1N/A esac
1N/A case ,,$alternate, in
1N/A *,$pre$sep$suf,*)
1N/A key=$pre$keyword$suf
1N/A undef="$undef $key"
1N/A echo "int f(){
1N/A int $key = 0;
1N/A return $key;
1N/A}
1N/A#undef $key
1N/Aint g(){
1N/A int $key = 0;
1N/A return $key;
1N/A}" > key.$src
1N/A $cc -c key.$src >/dev/null 2>&1 || reserved="$reserved $key$type"
1N/A ;;
1N/A esac
1N/A done
1N/A done
1N/Adone
1N/A
1N/A$cc -c opspace.$src && opspace=1
1N/A
1N/Acase $plusplus in
1N/A"") $cc -c compat.$src && compatibility=
1N/A $cc -c pluscom.$src && pluscom=1
1N/A ;;
1N/Aesac
1N/Acase $plusplus$pluscom in
1N/A?*) $cc -c plusspl.$src || plussplice=1 ;;
1N/Aesac
1N/Acase $plusplus in
1N/A?*) mkdir reguard
1N/A cd reguard
1N/A echo '#include "ptrone.h"
1N/A#include "ptrdef.h"
1N/Aint main () { return gt(2,1) + gt(2.0,1.0); }' > ptr.$src
1N/A echo '#include "ptrone.h"
1N/Atemplate<class T> int gt(T a, T b) { return a > b; }' > ptrdef.$src
1N/A echo 'template<class T> int gt(T a, T b);' > ptrdef.h
1N/A echo '/* empty */' > ptrone.h
1N/A if $cc -E ptr.$src > x.i && $cc x.i
1N/A then echo '#ifndef _PTRONE_H
1N/A#define _PTRONE_H
1N/Astatic int xxx;
1N/A#endif' > ptrone.h
1N/A if $cc -E ptr.$src > x.i && echo "#define _PTRONE_H" >> x.i && $cc x.i
1N/A then reguard=1
1N/A fi
1N/A fi
1N/A cd ..
1N/A rm -rf reguard
1N/A ;;
1N/Aesac
1N/A
1N/Astdc=`$cc -E stdc.$src | sed -e '/stdc_default_value/!d' -e 's/.*=[ ]*//' -e 's/[ ]*;.*//'`
1N/Acase $stdc in
1N/A0) $cc -c trans.$src && transition=1 ;;
1N/A[0123456789]*) ;;
1N/A*) stdc= ;;
1N/Aesac
1N/A
1N/Atruncate=`$cc -E truncate.$src | grep '^[ ]*[0123456789]'`
1N/A$cc -c zeof.c || zeof=1
1N/A
1N/Aecho "$predef" >> all.pp
1N/A{
1N/A case $ppopt$ppenv in
1N/A ?*) ppcmd=cpp
1N/A ppdir=.
1N/A eval $ppenv '$'cc -Dmycpp -E '$'ppopt cpp.$src
1N/A ;;
1N/A esac
1N/A eval set x $probe_verbose
1N/A shift
1N/A x=
1N/A for o in "$@"
1N/A do set x `$cc $o -c cpp.$src 2>&1`
1N/A while :
1N/A do shift
1N/A case $# in
1N/A 0) break ;;
1N/A esac
1N/A case $1 in
1N/A *[\\/]rm)
1N/A ;;
1N/A [\\/]*) case " $x " in
1N/A *" $1 "*) ;;
1N/A *) test -x $1 && x="$x $1" ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A case $x in
1N/A ?*) for f in $x
1N/A do cp $f x && chmod u+w x && strip x && f=x
1N/A $ppsym < $f
1N/A done
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A} 3>&- 3>&1 >/dev/null |
1N/A sed -e '/^ppsymbol$/d' -e '/^.$/d' -e '/^..$/d' -e '/[ABCDEFGHIJKLMNOPQRSTUVWXYZ].*[abcdefghijklmnopqrstuvwxyz]/d' -e '/[abcdefghijklmnopqrstuvwxyz].*[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/d' |
1N/A cat - all.pp |
1N/A sort -u |
1N/A {
1N/A for i in 0 1 2 3 4 5
1N/A do echo "struct { char* name; long value; } predef[] = {" > cpp$i.$src
1N/A done
1N/A while read sym junk
1N/A do case $sym in
1N/A _*) set 0 ${sym}
1N/A ;;
1N/A *_) continue
1N/A ;;
1N/A [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
1N/A set 1 ${sym} 2 _${sym} 3 _${sym}_ 4 __${sym} 5 __${sym}__
1N/A ;;
1N/A *) continue
1N/A ;;
1N/A esac
1N/A while :
1N/A do case $# in
1N/A 0|1) break ;;
1N/A esac
1N/A {
1N/A echo "#ifdef $2"
1N/A echo "\"$2\" , (long) $2 -1,"
1N/A echo "#endif"
1N/A } >> cpp$1.$src
1N/A shift
1N/A shift
1N/A done
1N/A done
1N/A for i in 0 1 2 3 4 5
1N/A do echo "\"\", 0 };" >> cpp$i.$src
1N/A done
1N/A }
1N/Apreval="`for i in 0 1 2 3 4 5;do $cc -E cpp$i.$src;done | sed -e '/\".*\".*,.*,/!d' -e 's/[^\"]*\"\\([^\"]*\\)\"[ ]*,[ ]*([ ]*long[ ]*)[ ]*\\(.*\\)[ ]*-[ ]*1[ ]*,[ ]*\$/\\1 \\2 =/g'` `$cc -dM -E stdc.$src | sed -e '/[ ]*#[ ]*define/!d' -e '/\"/d' -e 's/[ ]*#[ ]*define[ ]*\\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)[ ]*\\(.*\\)/\\1 \\2 =/'`"
1N/A
1N/Afor i in bufld namei quota reboot utsname vfs
1N/Ado echo "#include <sys/$i.h>" > t.$src
1N/A if $cc -E t.$src
1N/A then x=1
1N/A else x=0
1N/A fi
1N/A eval sys_$i=$x
1N/Adone
1N/A
1N/Aecho "char* fun() { return (char*)__FUNCTION__; }
1N/Aint main() { return !fun(); }" > fun.$src
1N/Arm -f fun.exe
1N/Aif $cc -o fun.exe fun.$src && test -x fun.exe
1N/Athen undef_predef="$undef_predef __FUNCTION__"
1N/Afi
1N/A
1N/Acase "`grep -c '__STDC__[-0 ]*[=!]=[ ]*0' $usrinclude/stdio.h 2>/dev/null`" in
1N/A0) ;;
1N/A*) hostedtransition=1 ;;
1N/Aesac
1N/A
1N/Amapinclude=
1N/Afor i in builtins
1N/Ado echo "#include <$i.h>" > t.$src
1N/A if $cc -E t.$src
1N/A then mapinclude="$mapinclude <$i.h>=\".\""
1N/A fi
1N/Adone
1N/A
1N/A#
1N/A# the payoff
1N/A#
1N/A
1N/Aexec >&3
1N/A
1N/Acase "$compatibility:$transition:$dollar" in
1N/A::) strict=1 ;;
1N/Aesac
1N/Acase $version_stamp in
1N/A?*) echo "/* $version_stamp" ;;
1N/A*) echo "/* $cc" ;;
1N/Aesac
1N/Aecho "*/"
1N/Acase $plusplus:$stdc in
1N/A1:?*) preval="$preval = __STDC__ $stdc ="
1N/A redef="$redef __STDC__"
1N/A ;;
1N/Aesac
1N/Appbuiltin=0
1N/Aset x $preval
1N/Ashift
1N/Acase $# in
1N/A0) ;;
1N/A*) echo
1N/A echo "#pragma pp:predefined"
1N/A predef=
1N/A while :
1N/A do case $# in
1N/A 0) break ;;
1N/A esac
1N/A m=$1
1N/A shift
1N/A case $m in
1N/A *'('*) i=`echo "$m" | sed 's,(.*,,'` ;;
1N/A *) i=$m ;;
1N/A esac
1N/A predef="$predef
1N/A$i"
1N/A eval predef_$i=0
1N/A while :
1N/A do case $1 in
1N/A '=') break ;;
1N/A *) shift ;;
1N/A esac
1N/A done
1N/A while :
1N/A do case $1 in
1N/A '=') shift ;;
1N/A *) break ;;
1N/A esac
1N/A done
1N/A done
1N/A for i in $undef
1N/A do case " $redef " in
1N/A *" $i "*) ;;
1N/A *) eval predef_$i=3 ;;
1N/A esac
1N/A done
1N/A set $preval
1N/A while :
1N/A do case $# in
1N/A 0) break ;;
1N/A esac
1N/A m=$1
1N/A shift
1N/A case $m in
1N/A *'('*) i=`echo "$m" | sed 's,(.*,,'` ;;
1N/A *) i=$m ;;
1N/A esac
1N/A case $i in
1N/A '=') continue ;;
1N/A esac
1N/A v=
1N/A while :
1N/A do case $1 in
1N/A '=') break ;;
1N/A esac
1N/A v="$v $1"
1N/A shift
1N/A done
1N/A while :
1N/A do case $1 in
1N/A '=') shift ;;
1N/A *) break ;;
1N/A esac
1N/A done
1N/A case $i in
1N/A __LCC__)strict=2 ;;
1N/A _*) ;;
1N/A *) eval j=\$predef_$i
1N/A case $j in
1N/A 0) eval predef_$i=1
1N/A echo "#define $m$v"
1N/A case $strict in
1N/A 1) strict= ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A nopredef=0
1N/A while :
1N/A do set $preval
1N/A while :
1N/A do case $# in
1N/A 0) break ;;
1N/A esac
1N/A m=$1
1N/A shift
1N/A case $m in
1N/A *'('*) i=`echo "$m" | sed 's,(.*,,'` ;;
1N/A *) i=$m ;;
1N/A esac
1N/A v=
1N/A while :
1N/A do case $1 in
1N/A '=') break ;;
1N/A esac
1N/A v="$v $1"
1N/A shift
1N/A done
1N/A while :
1N/A do case $1 in
1N/A '=') shift ;;
1N/A *) break ;;
1N/A esac
1N/A done
1N/A case $nopredef in
1N/A 2) ;;
1N/A *) case $v in
1N/A ' '*' '*)
1N/A nopredef=1
1N/A continue
1N/A ;;
1N/A ' '[0123456789]*|' '"'"*"'"*)
1N/A ;;
1N/A *) case $1 in
1N/A _*) ;;
1N/A *) nopredef=1
1N/A continue
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A eval j=\$predef_$i
1N/A case $j in
1N/A 0) case $ppbuiltin in
1N/A 2) echo "#pragma pp:builtin"
1N/A ppbuiltin=1
1N/A ;;
1N/A esac
1N/A eval predef_$i=2
1N/A echo "#define $m$v"
1N/A ;;
1N/A 1) case $m in
1N/A $i) eval predef_$i=2
1N/A eval j=\$predef___${i}__
1N/A case $j in
1N/A [12]) ;;
1N/A *) case $ppbuiltin in
1N/A 2) echo "#pragma pp:builtin"
1N/A ppbuiltin=1
1N/A ;;
1N/A esac
1N/A eval predef___${i}__=2
1N/A echo "#define __${i}__$v"
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A case $nopredef in
1N/A 2) break ;;
1N/A esac
1N/A echo "#pragma pp:nopredefined"
1N/A case $nopredef in
1N/A 0) break ;;
1N/A esac
1N/A ppbuiltin=2
1N/A nopredef=2
1N/A done
1N/A ;;
1N/Aesac
1N/Acase $basefile in
1N/A?*) case $ppbuiltin in
1N/A 0|2) ppbuiltin=1
1N/A echo "#pragma pp:builtin"
1N/A ;;
1N/A esac
1N/A echo "#define $basefile #(BASE)"
1N/A ;;
1N/Aesac
1N/Acase $ppbuiltin in
1N/A1) echo "#pragma pp:nobuiltin" ;;
1N/Aesac
1N/A
1N/Aeval set x $probe_longlong
1N/Ashift
1N/Ax=
1N/Afor o in "$@"
1N/Ado rm -f longlong.$exe
1N/A if $cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
1N/A ./longlong.$exe
1N/A then x=1
1N/A break
1N/A fi
1N/Adone
1N/Acase $x in
1N/A'') eval set x $probe_longlong_t
1N/A shift
1N/A for o in "$@"
1N/A do rm -f longlong.$exe
1N/A if $cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
1N/A ./longlong.$exe
1N/A then echo "#define <long long> $o"
1N/A break
1N/A fi
1N/A done
1N/A ;;
1N/Aesac
1N/A
1N/Aecho
1N/Afor i in `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*[0123456789][abcdefghijklmnopqrstuvwxyz0123456789]*\$/!d'` `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*\$/!d'`
1N/Ado case $i in
1N/A *ix) ;;
1N/A *) architecture=$i
1N/A break
1N/A ;;
1N/A esac
1N/Adone
1N/Afor i in `sed -e '/^#/d' -e '/:architecture:/!d' -e 's/[ ].*//' < $ppdef`
1N/Ado eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
1N/A case $j in
1N/A *" 2 "*)architecture=$i
1N/A break
1N/A ;;
1N/A esac
1N/Adone
1N/Afor i in `sed -e '/^#/d' -e '/:machine:/!d' -e 's/[ ].*//' < $ppdef`
1N/Ado eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
1N/A case $j in
1N/A *" 2 "*)machine="$machine $i" ;;
1N/A esac
1N/Adone
1N/Acase $sys_bufld$sys_reboot$sys_utsname in
1N/A1??) release=research
1N/A version=9
1N/A ;;
1N/A01?) release=bsd
1N/A case $sys_quota in
1N/A 0) case $sys_vfs in
1N/A 0) version=4.1
1N/A ;;
1N/A esac
1N/A ;;
1N/A 1) case $sys_namei in
1N/A 0) version=4.2
1N/A ;;
1N/A 1) version=4.3
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A001) release=V
1N/A ;;
1N/Aesac
1N/Afor i in `sed -e '/^#/d' -e '/:release:/!d' -e 's/[ ].*//' < $ppdef`
1N/Ado eval j=\$predef_$i
1N/A case $j in
1N/A 2) release="$release $i" ;;
1N/A esac
1N/Adone
1N/Afor i in `sed -e '/^#/d' -e '/:system:/!d' -e 's/[ ].*//' < $ppdef`
1N/Ado eval j=\$predef_$i
1N/A case $j in
1N/A 2) system="$system $i" ;;
1N/A esac
1N/Adone
1N/Acase $release in
1N/Atopix) release="$release V"
1N/A ;;
1N/Aesac
1N/Acase $assert in
1N/A?*) for i in $predef
1N/A do case $i in
1N/A _*|*_) ;;
1N/A *) for p in architecture cpu machine system
1N/A do echo "#if #$p($i)
1N/Aeval \"case \\\" \$$p \\\" in *\\\" $i \\\"*) ;; *) $p=\\\"$i \$$p\\\" ;; esac\"
1N/A: avoid string literal concatenation
1N/A#endif"
1N/A done
1N/A ;;
1N/A esac
1N/A done > t.$src
1N/A eval "`$cc -E t.$src`"
1N/A set x x $prepred
1N/A while :
1N/A do shift
1N/A shift
1N/A case $# in
1N/A [01]) break ;;
1N/A esac
1N/A eval "
1N/A case \" \$$1 \" in
1N/A *\" $2 \"*) ;;
1N/A *) $1=\"$2 \$$1\" ;;
1N/A esac
1N/A "
1N/A done
1N/A ;;
1N/Aesac
1N/Acase $system in
1N/A"") system=unix ;;
1N/Aesac
1N/Acase $architecture in
1N/Aibm|uts|u370) model=370
1N/A architecture=ibm
1N/A ;;
1N/Am*68*) architecture=m68000
1N/A for i in $predef
1N/A do case $i in
1N/A m*68*[123456789][0123456789])
1N/A model=`echo $i | sed 's/.*\(..\)/\1/'`
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/Au3b?*) model=`echo $architecture | sed 's/u3b//'`
1N/A architecture=3b
1N/A ;;
1N/Au3b) case $model in
1N/A "") model=20 ;;
1N/A esac
1N/A architecture=3b
1N/A ;;
1N/Avax[0123456789]*)
1N/A model=`echo $architecture | sed 's/vax//'`
1N/A architecture=vax
1N/A ;;
1N/Ahp[0123456789]*s[0123456789])
1N/A case $release in
1N/A [abcdefghijklmnopqrstuvwxyz]*.[abcdefghijklmnopqrstuvwxyz]*.*)
1N/A version=$release
1N/A release=V
1N/A ;;
1N/A esac
1N/A architecture="$architecture `echo $architecture | sed 's/s.*//'`"
1N/A ;;
1N/Aesac
1N/Acase $hosttype in
1N/A*.*) i=`echo $hosttype | sed -e 's,.*\.,,'` ;;
1N/A*) i=$hosttype ;;
1N/Aesac
1N/Acase $i in
1N/Aunknown);;
1N/A?*) case " $architecture " in
1N/A *" $i "*) ;;
1N/A *) architecture="$architecture $i" ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/Acase $architecture in
1N/A"") echo "$cc: warning: architecture not determined" >&4
1N/A set x $machine
1N/A architecture=$2
1N/A ;;
1N/Aesac
1N/Aecho "#define #hosttype($hosttype)"
1N/Afor i in $system
1N/Ado echo "#define #system($i)"
1N/Adone
1N/Acase $release in
1N/A"") echo "#define #release()" ;;
1N/A*) for i in $release
1N/A do echo "#define #release($i)"
1N/A case $i in
1N/A V) echo "#define #release(system5)" ;; # compatibility
1N/A esac
1N/A done
1N/A ;;
1N/Aesac
1N/Aecho "#define #version($version)"
1N/Acase $architecture in
1N/A"") echo "#define #architecture()" ;;
1N/A*) for i in `echo $architecture | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1N/A do echo "#define #architecture($i)"
1N/A done
1N/A ;;
1N/Aesac
1N/Aecho "#define #model($model)"
1N/Acase $machine in
1N/A"") case $architecture:$model in
1N/A ?*:?*) set x $architecture; machine="$2/$model $architecture" ;;
1N/A *) machine=$architecture ;;
1N/A esac
1N/A ;;
1N/A*) machine="$machine $architecture"
1N/A ;;
1N/Aesac
1N/Acase $machine in
1N/A"") echo "#define #machine()" ;;
1N/A*) j=
1N/A for i in `echo $machine | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1N/A do case " $i " in
1N/A *" $j "*)
1N/A ;;
1N/A *) j="$j $i"
1N/A echo "#define #machine($i)"
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/Aesac
1N/Afor i in $cpu
1N/Ado echo "#define #cpu($i)"
1N/Adone
1N/Aecho "#define #addressing()"
1N/Afor i in $ATTRIBUTES
1N/Ado eval d=\$$i
1N/A n=`echo $i | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1N/A echo "#define #$n($d)"
1N/Adone
1N/Acase $stdc in
1N/A?*) echo "#define #dialect(ansi)" ;;
1N/Aesac
1N/Acase $plusplus in
1N/A?*) echo "#define #dialect(C++)" ;;
1N/Aesac
1N/Acase $hosted in
1N/A"") echo "#define #dialect(cross)" ;;
1N/Aesac
1N/Acase $so:$dynamic:$static in
1N/A::) ;;
1N/A*) echo "#define #dialect(dynamic)" ;;
1N/Aesac
1N/Aecho
1N/Acase $undef_predef in
1N/A?*) for m in $undef_predef
1N/A do echo "#undef $m"
1N/A done
1N/A echo
1N/A ;;
1N/Aesac
1N/Acase $plusplus in
1N/A?*) echo "#pragma pp:plusplus" ;;
1N/Aesac
1N/Acase $reserved in
1N/A?*) echo "#pragma pp:reserved" $reserved ;;
1N/Aesac
1N/Acase $nocatliteral in
1N/A?*) echo "#pragma pp:nocatliteral" ;;
1N/Aesac
1N/Acase $opspace in
1N/A?*) echo "#pragma pp:opspace" ;;
1N/Aesac
1N/Acase $pluscom in
1N/A?*) echo "#pragma pp:pluscomment" ;;
1N/Aesac
1N/Acase $plussplice in
1N/A?*) echo "#pragma pp:plussplice" ;;
1N/Aesac
1N/Acase $reguard in
1N/A?*) echo "#pragma pp:reguard" ;;
1N/Aesac
1N/Acase $splicecat in
1N/A?*) echo "#pragma pp:splicecat" ;;
1N/Aesac
1N/Acase $splicespace in
1N/A?*) echo "#pragma pp:splicespace" ;;
1N/Aesac
1N/Acase $stringspan in
1N/A?*) echo "#pragma pp:stringspan" ;;
1N/Aesac
1N/Acase $stdc in
1N/A"") echo "#pragma pp:compatibility"
1N/A ;;
1N/A0) echo "#pragma pp:transition"
1N/A ;;
1N/A1) case $strict in
1N/A ?*) echo "#pragma pp:strict" ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/Acase $hostedtransition in
1N/A1) echo "#pragma pp:hostedtransition" ;;
1N/Aesac
1N/Acase $stdc in
1N/A?*) case $ppopt$ppenv in
1N/A "") spaceout=1
1N/A echo "#pragma pp:spaceout"
1N/A ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/Acase $truncate in
1N/A?*) echo "#pragma pp:truncate $truncate" ;;
1N/Aesac
1N/Acase $zeof in
1N/A?*) echo "#pragma pp:zeof" ;;
1N/Aesac
1N/Acase $dollar in
1N/A1) echo '#pragma pp:id "$"' ;;
1N/Aesac
1N/Acdir=-I+C
1N/Ahdir=-I+H
1N/Aset x $stdinclude
1N/Awhile :
1N/Ado shift
1N/A case $# in
1N/A 0) break ;;
1N/A esac
1N/A case $1 in
1N/A $cdir|$hdir)
1N/A ;;
1N/A -I+C) cdir=$1
1N/A echo "#pragma pp:nocdir"
1N/A ;;
1N/A -I-C) cdir=$1
1N/A echo "#pragma pp:cdir"
1N/A ;;
1N/A -I+H) hdir=$1
1N/A echo "#pragma pp:nohostdir"
1N/A ;;
1N/A -I-H) hdir=$1
1N/A echo "#pragma pp:hostdir"
1N/A ;;
1N/A -I*) ;;
1N/A *) echo "#pragma pp:include \"$1\""
1N/A ;;
1N/A esac
1N/Adone
1N/Acase $usrinclude in
1N/A/usr/include)
1N/A ;;
1N/A?*) echo "#pragma pp:standard \"$usrinclude\""
1N/A ;;
1N/Aesac
1N/Acase $plusplus in
1N/A?*) case $usrinclude in
1N/A ?*) if grep plusplus $usrinclude/ctype.h >/dev/null 2>&1
1N/A then echo '#pragma pp:nocdir "-"'
1N/A fi
1N/A ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/Acase $mapinclude in
1N/A?*) echo "#pragma pp:mapinclude hosted$mapinclude" ;;
1N/Aesac
1N/Acase $linefile in
1N/A?*) echo "#pragma pp:linefile" ;;
1N/Aesac
1N/Acase $lineid in
1N/A?*) echo "#pragma pp:lineid line" ;;
1N/Aesac
1N/Acase $linetype in
1N/A1) echo "#pragma pp:linetype" ;;
1N/A?*) echo "#pragma pp:linetype $linetype" ;;
1N/Aesac
1N/Acase $allmultiple in
1N/A"") echo "#pragma pp:noallmultiple" ;;
1N/Aesac
1N/Acase $defincl in
1N/A1) echo '#pragma pp:map "/#(pragma )?defincl>/"' ;;
1N/Aesac
1N/Acase $eject in
1N/A1) echo '#pragma pp:map "/#(pragma )?eject>/"' ;;
1N/Aesac
1N/Acase $elseif in
1N/A1) echo "#pragma pp:elseif" ;;
1N/Aesac
1N/Acase $headerexpand in
1N/A1) echo "#pragma pp:headerexpand" ;;
1N/Aesac
1N/Acase $headerexpandall in
1N/A1) echo "#pragma pp:headerexpandall" ;;
1N/Aesac
1N/Acase $ident in
1N/A1) echo '#pragma pp:map "/#(pragma )?ident>/" "/#(pragma )?/###/"' ;;
1N/A*) echo '#pragma pp:map "/#(pragma )?ident>/"' ;;
1N/Aesac
1N/Acase $import in
1N/A1) echo '#pragma pp:map "/#(pragma )?import>/" "/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/"
1N/A#macdef __STDPP__IMPORT__(x)
1N/A#pragma pp:noallmultiple
1N/A#include x
1N/A#pragma pp:allmultiple
1N/A#endmac' ;;
1N/Aesac
1N/Acase $include_next in
1N/A1) echo '#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"' ;;
1N/Aesac
1N/Aecho '#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"'
1N/Aecho '#pragma pp:map "/#(pragma )?sccs>/"'
1N/A
1N/Acase $stdc:$spaceout in
1N/A1:) case ' '$reserved' ' in
1N/A *' 'asm' '*|*' 'asm=*)
1N/A echo "#macdef asm"
1N/A echo "#pragma pp:spaceout"
1N/A echo "#undef asm"
1N/A echo "asm"
1N/A echo "#endmac"
1N/A ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/A
1N/Aif $cc -E preinc.$src > preinc.out
1N/Athen for f in `sed -e 's,\\\\,/,g' -e 's,"[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:/,"/,g' -e '/^#[line ]*[0123456789][0123456789]*[ ][ ]*"[\\/]/!d' -e 's/^#[line ]*[0123456789][0123456789]*[ ][ ]*".*[\\/]\(.*\)".*/\1/' preinc.out | sort -u`
1N/A do case $f in
1N/A *preinc.$src*)
1N/A ;;
1N/A *) echo "#include <$f>"
1N/A ;;
1N/A esac
1N/A done
1N/Afi