1*da2e3ebdSchin: 2*da2e3ebdSchin# Glenn Fowler 3*da2e3ebdSchin# AT&T Research 4*da2e3ebdSchin# 5*da2e3ebdSchin# @(#)pp.probe (AT&T Research) 2006-09-05 6*da2e3ebdSchin# 7*da2e3ebdSchin# C probe for libpp 8*da2e3ebdSchin# 9*da2e3ebdSchin# NOTE: C.probe must be included or .'d here 10*da2e3ebdSchin# 11*da2e3ebdSchin 12*da2e3ebdSchinppdef=$dir/pp.def 13*da2e3ebdSchinppkey=$dir/pp.key 14*da2e3ebdSchinppsym=$dir/ppsym 15*da2e3ebdSchinfor f in $ppdef $ppkey $ppsym 16*da2e3ebdSchindo test -f $f || { echo "$0: $f: not found" >&4; exit 1 ;} 17*da2e3ebdSchindone 18*da2e3ebdSchin 19*da2e3ebdSchinsed -e "/^#/d" -e "s/[ ].*//" < $ppdef > all.pp 20*da2e3ebdSchin 21*da2e3ebdSchinsystem= 22*da2e3ebdSchinrelease= 23*da2e3ebdSchinversion= 24*da2e3ebdSchinarchitecture= 25*da2e3ebdSchincpu= 26*da2e3ebdSchinmodel= 27*da2e3ebdSchinmachine= 28*da2e3ebdSchin 29*da2e3ebdSchin# 30*da2e3ebdSchin# path cleanup 31*da2e3ebdSchin# 32*da2e3ebdSchin 33*da2e3ebdSchinfor i in stdinclude usrinclude 34*da2e3ebdSchindo eval o='$'$i 35*da2e3ebdSchin v=$o 36*da2e3ebdSchin case $v in 37*da2e3ebdSchin *//*) v=`echo $v | sed 's,///*,/,g'` ;; 38*da2e3ebdSchin esac 39*da2e3ebdSchin if (test . -ef "`pwd`") 40*da2e3ebdSchin then k= 41*da2e3ebdSchin for x in $v 42*da2e3ebdSchin do case $x in 43*da2e3ebdSchin */../*|*/..) 44*da2e3ebdSchin case $x in 45*da2e3ebdSchin /*) a=/ ;; 46*da2e3ebdSchin *) a= ;; 47*da2e3ebdSchin esac 48*da2e3ebdSchin IFS=/ 49*da2e3ebdSchin set '' $x 50*da2e3ebdSchin IFS=$ifs 51*da2e3ebdSchin r= 52*da2e3ebdSchin for d 53*da2e3ebdSchin do r="$d $r" 54*da2e3ebdSchin done 55*da2e3ebdSchin p= 56*da2e3ebdSchin g= 57*da2e3ebdSchin for d in $r 58*da2e3ebdSchin do case $d in 59*da2e3ebdSchin ..) g="$g $d" ;; 60*da2e3ebdSchin *) case $g in 61*da2e3ebdSchin '') case $p in 62*da2e3ebdSchin '') p=$d ;; 63*da2e3ebdSchin *) p=$d/$p ;; 64*da2e3ebdSchin esac 65*da2e3ebdSchin ;; 66*da2e3ebdSchin *) set $g 67*da2e3ebdSchin shift 68*da2e3ebdSchin g=$* 69*da2e3ebdSchin ;; 70*da2e3ebdSchin esac 71*da2e3ebdSchin ;; 72*da2e3ebdSchin esac 73*da2e3ebdSchin done 74*da2e3ebdSchin case $a in 75*da2e3ebdSchin '') for d in $g 76*da2e3ebdSchin do p=$d/$p 77*da2e3ebdSchin done 78*da2e3ebdSchin ;; 79*da2e3ebdSchin *) p=$a$p 80*da2e3ebdSchin ;; 81*da2e3ebdSchin esac 82*da2e3ebdSchin case $p in 83*da2e3ebdSchin /) continue ;; 84*da2e3ebdSchin esac 85*da2e3ebdSchin test $x -ef $p && x=$p 86*da2e3ebdSchin ;; 87*da2e3ebdSchin esac 88*da2e3ebdSchin k="$k $x" 89*da2e3ebdSchin done 90*da2e3ebdSchin set '' $k 91*da2e3ebdSchin shift 92*da2e3ebdSchin v=$1 93*da2e3ebdSchin case $# in 94*da2e3ebdSchin 0) ;; 95*da2e3ebdSchin *) shift 96*da2e3ebdSchin while : 97*da2e3ebdSchin do case $# in 98*da2e3ebdSchin 0) break ;; 99*da2e3ebdSchin esac 100*da2e3ebdSchin k= 101*da2e3ebdSchin for d 102*da2e3ebdSchin do for j in $v 103*da2e3ebdSchin do test $d -ef $j && continue 2 104*da2e3ebdSchin done 105*da2e3ebdSchin k="$k $d" 106*da2e3ebdSchin done 107*da2e3ebdSchin set '' $k 108*da2e3ebdSchin case $# in 109*da2e3ebdSchin 1) break ;; 110*da2e3ebdSchin esac 111*da2e3ebdSchin shift 112*da2e3ebdSchin v="$v $1" 113*da2e3ebdSchin shift 114*da2e3ebdSchin done 115*da2e3ebdSchin ;; 116*da2e3ebdSchin esac 117*da2e3ebdSchin fi 118*da2e3ebdSchin case $v in 119*da2e3ebdSchin $o) ;; 120*da2e3ebdSchin *) eval $i='$'v ;; 121*da2e3ebdSchin esac 122*da2e3ebdSchindone 123*da2e3ebdSchin 124*da2e3ebdSchinid="::IDENT::`date`::IDENT::" 125*da2e3ebdSchinecho '#assert test(ok) 126*da2e3ebdSchin#if #test(ok) 127*da2e3ebdSchin#else 128*da2e3ebdSchin( 129*da2e3ebdSchin#endif' > assert.$src 130*da2e3ebdSchinecho '#ifdef __BASE_FILE__ 131*da2e3ebdSchinint ok; 132*da2e3ebdSchin#else 133*da2e3ebdSchin( 134*da2e3ebdSchin#endif' > basefile.$src 135*da2e3ebdSchincat > catlit1.i <<'!' 136*da2e3ebdSchinchar test[] = "te" 137*da2e3ebdSchin"st"; 138*da2e3ebdSchin! 139*da2e3ebdSchincat > catlit2.i <<'!' 140*da2e3ebdSchinchar test[] = "te\ 141*da2e3ebdSchinst"; 142*da2e3ebdSchin! 143*da2e3ebdSchinecho '#define g(a,b) a ## b 144*da2e3ebdSchinvolatile int a; 145*da2e3ebdSchinconst int g(x,y)=1; 146*da2e3ebdSchinextern int c(int);' > compat.$src 147*da2e3ebdSchinecho > cpp.$src 148*da2e3ebdSchinecho "#defincl <x.h>" > defincl.$src 149*da2e3ebdSchinecho 'int a$b;' > dollar.$src 150*da2e3ebdSchinecho "#eject" > eject.$src 151*da2e3ebdSchinecho "#if 0 152*da2e3ebdSchin( 153*da2e3ebdSchin#else if 1 154*da2e3ebdSchinint x; 155*da2e3ebdSchin#else 156*da2e3ebdSchin( 157*da2e3ebdSchin#endif" > elseif.$src 158*da2e3ebdSchinecho "#define _CAT(a,b,c) a##b##c 159*da2e3ebdSchin#define hdra hdrx 160*da2e3ebdSchin#define hdr _CAT(<,hdra,.h>) 161*da2e3ebdSchin#include hdr" > hdra.$src 162*da2e3ebdSchinecho "#define _XAT(a,b,c) a##b##c 163*da2e3ebdSchin#define _CAT(a,b,c) _XAT(a,b,c) 164*da2e3ebdSchin#define hdra hdrx 165*da2e3ebdSchin#define hdr _CAT(<,hdra,.h>) 166*da2e3ebdSchin#include hdr" > hdrx.$src 167*da2e3ebdSchinecho "int f(){return 0;}" > hdrx.h 168*da2e3ebdSchinecho "#ident \"$id\"" > ident.$src 169*da2e3ebdSchinecho "#import \"import.h\"" > import.$src 170*da2e3ebdSchinecho "int aaa;" > import.h 171*da2e3ebdSchinecho "#include <inc_next.h>" > inc_next.$src 172*da2e3ebdSchinmkdir inc0 inc1 173*da2e3ebdSchinecho "#include_next <inc_next.h>" > inc0/inc_next.h 174*da2e3ebdSchinecho 'char s[] = "INCLUDE_NEXT";' > inc1/inc_next.h 175*da2e3ebdSchinecho '# 1 "linefile.i" 176*da2e3ebdSchin 177*da2e3ebdSchin# 1 "linefile.i" 178*da2e3ebdSchin 179*da2e3ebdSchinint i;' > linefile1.i 180*da2e3ebdSchinecho '# 1 "linefile.i" 181*da2e3ebdSchin 182*da2e3ebdSchin# 1 183*da2e3ebdSchin 184*da2e3ebdSchinint i;' > linefile2.i 185*da2e3ebdSchinecho "int i = 0;" > lineid1.i 186*da2e3ebdSchinecho '# 1 "t.c" 187*da2e3ebdSchinint i = 0;' > lineid2.i 188*da2e3ebdSchinecho '# 1 "t.c" 189*da2e3ebdSchinint i = 0;' > lineid3.$src 190*da2e3ebdSchinecho "#include <stdio.h>" > linetype.$src 191*da2e3ebdSchinecho '#include <sys/types.h> 192*da2e3ebdSchinmain() 193*da2e3ebdSchin{ 194*da2e3ebdSchin return sizeof(LONGLONG) != 8; 195*da2e3ebdSchin}' > longlong.$src 196*da2e3ebdSchinecho '#include "once.h" 197*da2e3ebdSchin#include "once.h"' > once.$src 198*da2e3ebdSchinecho '#ifdef once 199*da2e3ebdSchinallmultiple 200*da2e3ebdSchin#else 201*da2e3ebdSchin#define once 202*da2e3ebdSchin#endif' > once.h 203*da2e3ebdSchinecho "extern int a,b;int f(){return a + = b;}" > opspace.$src 204*da2e3ebdSchinecho "int f(){return(0);} // ((" > pluscom.$src 205*da2e3ebdSchinecho "class x {int n;} m;" > plusplus.$src 206*da2e3ebdSchinecho > preinc.$src 207*da2e3ebdSchinecho '// splice \ 208*da2e3ebdSchin( 209*da2e3ebdSchinint x = 1;' > plusspl.$src 210*da2e3ebdSchinecho "int stdc_default_value = __STDC__ ;" > stdc.$src 211*da2e3ebdSchinecho 'char xxx[] = "abc 212*da2e3ebdSchin(";' > span.$src 213*da2e3ebdSchinecho '#define g(a,b) a\ 214*da2e3ebdSchinb 215*da2e3ebdSchinint ab,xy; 216*da2e3ebdSchin#define xy XY 217*da2e3ebdSchinchar* g(x,y);' > splice.$src 218*da2e3ebdSchin{ 219*da2e3ebdSchinecho 'int a\ ' 220*da2e3ebdSchinecho 'b = 1;' 221*da2e3ebdSchin} > splicesp.$src 222*da2e3ebdSchinecho '#define g(a,b) a/**/b 223*da2e3ebdSchinint g(x,y)=1;' > trans.$src 224*da2e3ebdSchinecho '#define m 65 225*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 65 226*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 64 227*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63 228*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 62 229*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 61 230*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 60 231*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 59 232*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 58 233*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57 234*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 56 235*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 55 236*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 54 237*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53 238*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 52 239*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 51 240*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 50 241*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 49 242*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 48 243*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 47 244*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 46 245*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 45 246*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 44 247*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43 248*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 42 249*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 41 250*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 40 251*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 39 252*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 38 253*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 37 254*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 36 255*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 35 256*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 34 257*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33 258*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32 259*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 31 260*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 30 261*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 29 262*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxx 28 263*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxxx 27 264*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxxx 26 265*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxxx 25 266*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxxx 24 267*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxxx 23 268*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxxx 22 269*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxxx 21 270*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxxx 20 271*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxxx 19 272*da2e3ebdSchin#define xxxxxxxxxxxxxxxxxx 18 273*da2e3ebdSchin#define xxxxxxxxxxxxxxxxx 17 274*da2e3ebdSchin#define xxxxxxxxxxxxxxxx 16 275*da2e3ebdSchin#define xxxxxxxxxxxxxxx 15 276*da2e3ebdSchin#define xxxxxxxxxxxxxx 14 277*da2e3ebdSchin#define xxxxxxxxxxxxx 13 278*da2e3ebdSchin#define xxxxxxxxxxxx 12 279*da2e3ebdSchin#define xxxxxxxxxxx 11 280*da2e3ebdSchin#define xxxxxxxxxx 10 281*da2e3ebdSchin#define xxxxxxxxx 9 282*da2e3ebdSchin#define xxxxxxxx 8 283*da2e3ebdSchin#define xxxxxxx 7 284*da2e3ebdSchin#define xxxxxx 6 285*da2e3ebdSchin#define xxxxx 5 286*da2e3ebdSchin#define xxxx 4 287*da2e3ebdSchin#define xxx 3 288*da2e3ebdSchin#define xx 2 289*da2e3ebdSchin#define x 1 290*da2e3ebdSchin#if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx != m 291*da2e3ebdSchinxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 292*da2e3ebdSchin#endif' > truncate.$src 293*da2e3ebdSchincat > zeof.c <<'!' 294*da2e3ebdSchinchar* foo = "az"; 295*da2e3ebdSchin! 296*da2e3ebdSchin 297*da2e3ebdSchinallmultiple= 298*da2e3ebdSchinassert= 299*da2e3ebdSchinbasefile= 300*da2e3ebdSchincompatibility=1 301*da2e3ebdSchindefincl= 302*da2e3ebdSchindollar= 303*da2e3ebdSchineject= 304*da2e3ebdSchinelseif= 305*da2e3ebdSchinheaderexpand= 306*da2e3ebdSchinheaderexpandall= 307*da2e3ebdSchinhostedtransition= 308*da2e3ebdSchinident= 309*da2e3ebdSchinimport= 310*da2e3ebdSchininclude_next= 311*da2e3ebdSchinlinefile= 312*da2e3ebdSchinlineid= 313*da2e3ebdSchinlinetype= 314*da2e3ebdSchinnocatliteral= 315*da2e3ebdSchinopspace= 316*da2e3ebdSchinpluscom= 317*da2e3ebdSchinplusplus= 318*da2e3ebdSchinplussplice= 319*da2e3ebdSchinredef= 320*da2e3ebdSchinreguard= 321*da2e3ebdSchinreserved= 322*da2e3ebdSchinspaceout= 323*da2e3ebdSchinsplicecat= 324*da2e3ebdSchinsplicespace= 325*da2e3ebdSchinstrict= 326*da2e3ebdSchinstringspan= 327*da2e3ebdSchintransition= 328*da2e3ebdSchintruncate= 329*da2e3ebdSchinzeof= 330*da2e3ebdSchin 331*da2e3ebdSchin$cc -c assert.$src && assert=1 332*da2e3ebdSchin 333*da2e3ebdSchin$cc -c basefile.$src && basefile=__BASE_FILE__ 334*da2e3ebdSchin 335*da2e3ebdSchinif $cc -E defincl.$src 336*da2e3ebdSchinthen case "`$cc -E defincl.$src | grep -c 'defincl'`" in 337*da2e3ebdSchin 0) defincl=1 ;; 338*da2e3ebdSchin esac 339*da2e3ebdSchinfi 340*da2e3ebdSchin 341*da2e3ebdSchinif $cc -c catlit1.i 2>e 342*da2e3ebdSchinthen if $cc -c catlit2.i 2>f 343*da2e3ebdSchin then if test `wc -c < f` -gt `wc -c < e` 344*da2e3ebdSchin then nocatliteral=1 345*da2e3ebdSchin fi 346*da2e3ebdSchin else nocatliteral=1 347*da2e3ebdSchin fi 348*da2e3ebdSchinfi 349*da2e3ebdSchin 350*da2e3ebdSchin$cc -c dollar.$src && dollar=1 351*da2e3ebdSchin 352*da2e3ebdSchin$cc -c elseif.$src && elseif=1 353*da2e3ebdSchin 354*da2e3ebdSchinif $cc -I. -c hdra.$src 355*da2e3ebdSchinthen headerexpandall=1 356*da2e3ebdSchinelif $cc -I. -c hdrx.$src 357*da2e3ebdSchinthen headerexpand=1 358*da2e3ebdSchinfi 359*da2e3ebdSchin 360*da2e3ebdSchinif $cc -E eject.$src 361*da2e3ebdSchinthen case "`$cc -E eject.$src | grep -c 'eject'`" in 362*da2e3ebdSchin 0) eject=1 ;; 363*da2e3ebdSchin esac 364*da2e3ebdSchinfi 365*da2e3ebdSchin 366*da2e3ebdSchin$cc -S ident.$src && grep "$id" ident.s && ident=1 367*da2e3ebdSchin 368*da2e3ebdSchin{ $cc -E import.$src | grep aaa ;} && import=1 369*da2e3ebdSchin 370*da2e3ebdSchin{ $cc -E -Iinc0 -Iinc1 inc_next.$src | grep INCLUDE_NEXT ;} && include_next=1 371*da2e3ebdSchin 372*da2e3ebdSchinif $cc -c linefile1.i 373*da2e3ebdSchinthen $cc -c linefile2.i 374*da2e3ebdSchin case $? in 375*da2e3ebdSchin 0) ;; 376*da2e3ebdSchin *) linefile=1 ;; 377*da2e3ebdSchin esac 378*da2e3ebdSchinfi 379*da2e3ebdSchin 380*da2e3ebdSchinif $cc -c lineid1.i 2>b 381*da2e3ebdSchinthen $cc -c lineid2.i 2>e 382*da2e3ebdSchin c=$? 383*da2e3ebdSchinelse $cc -c lineid3.c 2>e 384*da2e3ebdSchin c=$? 385*da2e3ebdSchinfi 386*da2e3ebdSchincase $c in 387*da2e3ebdSchin0) case `wc -l < b` in 388*da2e3ebdSchin `wc -l < e`) ;; 389*da2e3ebdSchin *) lineid=line ;; 390*da2e3ebdSchin esac 391*da2e3ebdSchin ;; 392*da2e3ebdSchin*) lineid=line 393*da2e3ebdSchin ;; 394*da2e3ebdSchinesac 395*da2e3ebdSchin 396*da2e3ebdSchinif $cc -E linetype.$src | grep '^[ ]*#[ ]*[0123456789]*[ ]*".*"[ ]*[12]' > linetype 397*da2e3ebdSchinthen if grep '^[ ]*#[ ]*[0123456789]*[ ]*".*"[ ]*[12][ ][ ]*3' linetype 398*da2e3ebdSchin then linetype=2 399*da2e3ebdSchin else linetype=1 400*da2e3ebdSchin fi 401*da2e3ebdSchinfi 402*da2e3ebdSchin 403*da2e3ebdSchin{ $cc -E once.$src | grep allmultiple ;} && allmultiple=1 404*da2e3ebdSchin 405*da2e3ebdSchin$cc -c plusplus.$src && plusplus=1 406*da2e3ebdSchin 407*da2e3ebdSchin$cc -c span.$src && stringspan=1 408*da2e3ebdSchin 409*da2e3ebdSchin$cc -c splice.$src && splicecat=1 410*da2e3ebdSchin 411*da2e3ebdSchin$cc -c splicesp.$src && splicespace=1 412*da2e3ebdSchin 413*da2e3ebdSchinexec < $ppkey 414*da2e3ebdSchinwhile read keyword type alternate comment 415*da2e3ebdSchindo case $keyword in 416*da2e3ebdSchin .) break ;; 417*da2e3ebdSchin ""|"#") continue ;; 418*da2e3ebdSchin esac 419*da2e3ebdSchin case $type in 420*da2e3ebdSchin ""|".") type= ;; 421*da2e3ebdSchin *) type="=$type" ;; 422*da2e3ebdSchin esac 423*da2e3ebdSchin for pre in '' _ __ 424*da2e3ebdSchin do for suf in '' _ __ 425*da2e3ebdSchin do case $suf in 426*da2e3ebdSchin '') sep= ;; 427*da2e3ebdSchin *) sep=. ;; 428*da2e3ebdSchin esac 429*da2e3ebdSchin case ,,$alternate, in 430*da2e3ebdSchin *,$pre$sep$suf,*) 431*da2e3ebdSchin key=$pre$keyword$suf 432*da2e3ebdSchin undef="$undef $key" 433*da2e3ebdSchin echo "int f(){ 434*da2e3ebdSchin int $key = 0; 435*da2e3ebdSchin return $key; 436*da2e3ebdSchin} 437*da2e3ebdSchin#undef $key 438*da2e3ebdSchinint g(){ 439*da2e3ebdSchin int $key = 0; 440*da2e3ebdSchin return $key; 441*da2e3ebdSchin}" > key.$src 442*da2e3ebdSchin $cc -c key.$src >/dev/null 2>&1 || reserved="$reserved $key$type" 443*da2e3ebdSchin ;; 444*da2e3ebdSchin esac 445*da2e3ebdSchin done 446*da2e3ebdSchin done 447*da2e3ebdSchindone 448*da2e3ebdSchin 449*da2e3ebdSchin$cc -c opspace.$src && opspace=1 450*da2e3ebdSchin 451*da2e3ebdSchincase $plusplus in 452*da2e3ebdSchin"") $cc -c compat.$src && compatibility= 453*da2e3ebdSchin $cc -c pluscom.$src && pluscom=1 454*da2e3ebdSchin ;; 455*da2e3ebdSchinesac 456*da2e3ebdSchincase $plusplus$pluscom in 457*da2e3ebdSchin?*) $cc -c plusspl.$src || plussplice=1 ;; 458*da2e3ebdSchinesac 459*da2e3ebdSchincase $plusplus in 460*da2e3ebdSchin?*) mkdir reguard 461*da2e3ebdSchin cd reguard 462*da2e3ebdSchin echo '#include "ptrone.h" 463*da2e3ebdSchin#include "ptrdef.h" 464*da2e3ebdSchinint main () { return gt(2,1) + gt(2.0,1.0); }' > ptr.$src 465*da2e3ebdSchin echo '#include "ptrone.h" 466*da2e3ebdSchintemplate<class T> int gt(T a, T b) { return a > b; }' > ptrdef.$src 467*da2e3ebdSchin echo 'template<class T> int gt(T a, T b);' > ptrdef.h 468*da2e3ebdSchin echo '/* empty */' > ptrone.h 469*da2e3ebdSchin if $cc -E ptr.$src > x.i && $cc x.i 470*da2e3ebdSchin then echo '#ifndef _PTRONE_H 471*da2e3ebdSchin#define _PTRONE_H 472*da2e3ebdSchinstatic int xxx; 473*da2e3ebdSchin#endif' > ptrone.h 474*da2e3ebdSchin if $cc -E ptr.$src > x.i && echo "#define _PTRONE_H" >> x.i && $cc x.i 475*da2e3ebdSchin then reguard=1 476*da2e3ebdSchin fi 477*da2e3ebdSchin fi 478*da2e3ebdSchin cd .. 479*da2e3ebdSchin rm -rf reguard 480*da2e3ebdSchin ;; 481*da2e3ebdSchinesac 482*da2e3ebdSchin 483*da2e3ebdSchinstdc=`$cc -E stdc.$src | sed -e '/stdc_default_value/!d' -e 's/.*=[ ]*//' -e 's/[ ]*;.*//'` 484*da2e3ebdSchincase $stdc in 485*da2e3ebdSchin0) $cc -c trans.$src && transition=1 ;; 486*da2e3ebdSchin[0123456789]*) ;; 487*da2e3ebdSchin*) stdc= ;; 488*da2e3ebdSchinesac 489*da2e3ebdSchin 490*da2e3ebdSchintruncate=`$cc -E truncate.$src | grep '^[ ]*[0123456789]'` 491*da2e3ebdSchin$cc -c zeof.c || zeof=1 492*da2e3ebdSchin 493*da2e3ebdSchinecho "$predef" >> all.pp 494*da2e3ebdSchin{ 495*da2e3ebdSchin case $ppopt$ppenv in 496*da2e3ebdSchin ?*) ppcmd=cpp 497*da2e3ebdSchin ppdir=. 498*da2e3ebdSchin eval $ppenv '$'cc -Dmycpp -E '$'ppopt cpp.$src 499*da2e3ebdSchin ;; 500*da2e3ebdSchin esac 501*da2e3ebdSchin eval set x $probe_verbose 502*da2e3ebdSchin shift 503*da2e3ebdSchin x= 504*da2e3ebdSchin for o in "$@" 505*da2e3ebdSchin do set x `$cc $o -c cpp.$src 2>&1` 506*da2e3ebdSchin while : 507*da2e3ebdSchin do shift 508*da2e3ebdSchin case $# in 509*da2e3ebdSchin 0) break ;; 510*da2e3ebdSchin esac 511*da2e3ebdSchin case $1 in 512*da2e3ebdSchin *[\\/]rm) 513*da2e3ebdSchin ;; 514*da2e3ebdSchin [\\/]*) case " $x " in 515*da2e3ebdSchin *" $1 "*) ;; 516*da2e3ebdSchin *) test -x $1 && x="$x $1" ;; 517*da2e3ebdSchin esac 518*da2e3ebdSchin ;; 519*da2e3ebdSchin esac 520*da2e3ebdSchin done 521*da2e3ebdSchin case $x in 522*da2e3ebdSchin ?*) for f in $x 523*da2e3ebdSchin do cp $f x && chmod u+w x && strip x && f=x 524*da2e3ebdSchin $ppsym < $f 525*da2e3ebdSchin done 526*da2e3ebdSchin break 527*da2e3ebdSchin ;; 528*da2e3ebdSchin esac 529*da2e3ebdSchin done 530*da2e3ebdSchin} 3>&- 3>&1 >/dev/null | 531*da2e3ebdSchin sed -e '/^ppsymbol$/d' -e '/^.$/d' -e '/^..$/d' -e '/[ABCDEFGHIJKLMNOPQRSTUVWXYZ].*[abcdefghijklmnopqrstuvwxyz]/d' -e '/[abcdefghijklmnopqrstuvwxyz].*[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/d' | 532*da2e3ebdSchin cat - all.pp | 533*da2e3ebdSchin sort -u | 534*da2e3ebdSchin { 535*da2e3ebdSchin for i in 0 1 2 3 4 5 536*da2e3ebdSchin do echo "struct { char* name; long value; } predef[] = {" > cpp$i.$src 537*da2e3ebdSchin done 538*da2e3ebdSchin while read sym junk 539*da2e3ebdSchin do case $sym in 540*da2e3ebdSchin _*) set 0 ${sym} 541*da2e3ebdSchin ;; 542*da2e3ebdSchin *_) continue 543*da2e3ebdSchin ;; 544*da2e3ebdSchin [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*) 545*da2e3ebdSchin set 1 ${sym} 2 _${sym} 3 _${sym}_ 4 __${sym} 5 __${sym}__ 546*da2e3ebdSchin ;; 547*da2e3ebdSchin *) continue 548*da2e3ebdSchin ;; 549*da2e3ebdSchin esac 550*da2e3ebdSchin while : 551*da2e3ebdSchin do case $# in 552*da2e3ebdSchin 0|1) break ;; 553*da2e3ebdSchin esac 554*da2e3ebdSchin { 555*da2e3ebdSchin echo "#ifdef $2" 556*da2e3ebdSchin echo "\"$2\" , (long) $2 -1," 557*da2e3ebdSchin echo "#endif" 558*da2e3ebdSchin } >> cpp$1.$src 559*da2e3ebdSchin shift 560*da2e3ebdSchin shift 561*da2e3ebdSchin done 562*da2e3ebdSchin done 563*da2e3ebdSchin for i in 0 1 2 3 4 5 564*da2e3ebdSchin do echo "\"\", 0 };" >> cpp$i.$src 565*da2e3ebdSchin done 566*da2e3ebdSchin } 567*da2e3ebdSchinpreval="`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 =/'`" 568*da2e3ebdSchin 569*da2e3ebdSchinfor i in bufld namei quota reboot utsname vfs 570*da2e3ebdSchindo echo "#include <sys/$i.h>" > t.$src 571*da2e3ebdSchin if $cc -E t.$src 572*da2e3ebdSchin then x=1 573*da2e3ebdSchin else x=0 574*da2e3ebdSchin fi 575*da2e3ebdSchin eval sys_$i=$x 576*da2e3ebdSchindone 577*da2e3ebdSchin 578*da2e3ebdSchincase "`grep -c '__STDC__[-0 ]*[=!]=[ ]*0' $usrinclude/stdio.h 2>/dev/null`" in 579*da2e3ebdSchin0) ;; 580*da2e3ebdSchin*) hostedtransition=1 ;; 581*da2e3ebdSchinesac 582*da2e3ebdSchin 583*da2e3ebdSchinmapinclude= 584*da2e3ebdSchinfor i in builtins 585*da2e3ebdSchindo echo "#include <$i.h>" > t.$src 586*da2e3ebdSchin if $cc -E t.$src 587*da2e3ebdSchin then mapinclude="$mapinclude <$i.h>=\".\"" 588*da2e3ebdSchin fi 589*da2e3ebdSchindone 590*da2e3ebdSchin 591*da2e3ebdSchin# 592*da2e3ebdSchin# the payoff 593*da2e3ebdSchin# 594*da2e3ebdSchin 595*da2e3ebdSchinexec >&3 596*da2e3ebdSchin 597*da2e3ebdSchincase "$compatibility:$transition:$dollar" in 598*da2e3ebdSchin::) strict=1 ;; 599*da2e3ebdSchinesac 600*da2e3ebdSchincase $version_stamp in 601*da2e3ebdSchin?*) echo "/* $version_stamp" ;; 602*da2e3ebdSchin*) echo "/* $cc" ;; 603*da2e3ebdSchinesac 604*da2e3ebdSchinecho "*/" 605*da2e3ebdSchincase $plusplus:$stdc in 606*da2e3ebdSchin1:?*) preval="$preval = __STDC__ $stdc =" 607*da2e3ebdSchin redef="$redef __STDC__" 608*da2e3ebdSchin ;; 609*da2e3ebdSchinesac 610*da2e3ebdSchinppbuiltin=0 611*da2e3ebdSchinset x $preval 612*da2e3ebdSchinshift 613*da2e3ebdSchincase $# in 614*da2e3ebdSchin0) ;; 615*da2e3ebdSchin*) echo 616*da2e3ebdSchin echo "#pragma pp:predefined" 617*da2e3ebdSchin predef= 618*da2e3ebdSchin while : 619*da2e3ebdSchin do case $# in 620*da2e3ebdSchin 0) break ;; 621*da2e3ebdSchin esac 622*da2e3ebdSchin m=$1 623*da2e3ebdSchin shift 624*da2e3ebdSchin case $m in 625*da2e3ebdSchin *'('*) i=`echo "$m" | sed 's,(.*,,'` ;; 626*da2e3ebdSchin *) i=$m ;; 627*da2e3ebdSchin esac 628*da2e3ebdSchin predef="$predef 629*da2e3ebdSchin$i" 630*da2e3ebdSchin eval predef_$i=0 631*da2e3ebdSchin while : 632*da2e3ebdSchin do case $1 in 633*da2e3ebdSchin '=') break ;; 634*da2e3ebdSchin *) shift ;; 635*da2e3ebdSchin esac 636*da2e3ebdSchin done 637*da2e3ebdSchin while : 638*da2e3ebdSchin do case $1 in 639*da2e3ebdSchin '=') shift ;; 640*da2e3ebdSchin *) break ;; 641*da2e3ebdSchin esac 642*da2e3ebdSchin done 643*da2e3ebdSchin done 644*da2e3ebdSchin for i in $undef 645*da2e3ebdSchin do case " $redef " in 646*da2e3ebdSchin *" $i "*) ;; 647*da2e3ebdSchin *) eval predef_$i=3 ;; 648*da2e3ebdSchin esac 649*da2e3ebdSchin done 650*da2e3ebdSchin set $preval 651*da2e3ebdSchin while : 652*da2e3ebdSchin do case $# in 653*da2e3ebdSchin 0) break ;; 654*da2e3ebdSchin esac 655*da2e3ebdSchin m=$1 656*da2e3ebdSchin shift 657*da2e3ebdSchin case $m in 658*da2e3ebdSchin *'('*) i=`echo "$m" | sed 's,(.*,,'` ;; 659*da2e3ebdSchin *) i=$m ;; 660*da2e3ebdSchin esac 661*da2e3ebdSchin case $i in 662*da2e3ebdSchin '=') continue ;; 663*da2e3ebdSchin esac 664*da2e3ebdSchin v= 665*da2e3ebdSchin while : 666*da2e3ebdSchin do case $1 in 667*da2e3ebdSchin '=') break ;; 668*da2e3ebdSchin esac 669*da2e3ebdSchin v="$v $1" 670*da2e3ebdSchin shift 671*da2e3ebdSchin done 672*da2e3ebdSchin while : 673*da2e3ebdSchin do case $1 in 674*da2e3ebdSchin '=') shift ;; 675*da2e3ebdSchin *) break ;; 676*da2e3ebdSchin esac 677*da2e3ebdSchin done 678*da2e3ebdSchin case $i in 679*da2e3ebdSchin __LCC__)strict=2 ;; 680*da2e3ebdSchin _*) ;; 681*da2e3ebdSchin *) eval j=\$predef_$i 682*da2e3ebdSchin case $j in 683*da2e3ebdSchin 0) eval predef_$i=1 684*da2e3ebdSchin echo "#define $m$v" 685*da2e3ebdSchin case $strict in 686*da2e3ebdSchin 1) strict= ;; 687*da2e3ebdSchin esac 688*da2e3ebdSchin ;; 689*da2e3ebdSchin esac 690*da2e3ebdSchin ;; 691*da2e3ebdSchin esac 692*da2e3ebdSchin done 693*da2e3ebdSchin nopredef=0 694*da2e3ebdSchin while : 695*da2e3ebdSchin do set $preval 696*da2e3ebdSchin while : 697*da2e3ebdSchin do case $# in 698*da2e3ebdSchin 0) break ;; 699*da2e3ebdSchin esac 700*da2e3ebdSchin m=$1 701*da2e3ebdSchin shift 702*da2e3ebdSchin case $m in 703*da2e3ebdSchin *'('*) i=`echo "$m" | sed 's,(.*,,'` ;; 704*da2e3ebdSchin *) i=$m ;; 705*da2e3ebdSchin esac 706*da2e3ebdSchin v= 707*da2e3ebdSchin while : 708*da2e3ebdSchin do case $1 in 709*da2e3ebdSchin '=') break ;; 710*da2e3ebdSchin esac 711*da2e3ebdSchin v="$v $1" 712*da2e3ebdSchin shift 713*da2e3ebdSchin done 714*da2e3ebdSchin while : 715*da2e3ebdSchin do case $1 in 716*da2e3ebdSchin '=') shift ;; 717*da2e3ebdSchin *) break ;; 718*da2e3ebdSchin esac 719*da2e3ebdSchin done 720*da2e3ebdSchin case $nopredef in 721*da2e3ebdSchin 2) ;; 722*da2e3ebdSchin *) case $v in 723*da2e3ebdSchin ' '*' '*) 724*da2e3ebdSchin nopredef=1 725*da2e3ebdSchin continue 726*da2e3ebdSchin ;; 727*da2e3ebdSchin ' '[0123456789]*|' '"'"*"'"*) 728*da2e3ebdSchin ;; 729*da2e3ebdSchin *) case $1 in 730*da2e3ebdSchin _*) ;; 731*da2e3ebdSchin *) nopredef=1 732*da2e3ebdSchin continue 733*da2e3ebdSchin ;; 734*da2e3ebdSchin esac 735*da2e3ebdSchin ;; 736*da2e3ebdSchin esac 737*da2e3ebdSchin ;; 738*da2e3ebdSchin esac 739*da2e3ebdSchin eval j=\$predef_$i 740*da2e3ebdSchin case $j in 741*da2e3ebdSchin 0) case $ppbuiltin in 742*da2e3ebdSchin 2) echo "#pragma pp:builtin" 743*da2e3ebdSchin ppbuiltin=1 744*da2e3ebdSchin ;; 745*da2e3ebdSchin esac 746*da2e3ebdSchin eval predef_$i=2 747*da2e3ebdSchin echo "#define $m$v" 748*da2e3ebdSchin ;; 749*da2e3ebdSchin 1) case $m in 750*da2e3ebdSchin $i) eval predef_$i=2 751*da2e3ebdSchin eval j=\$predef___${i}__ 752*da2e3ebdSchin case $j in 753*da2e3ebdSchin [12]) ;; 754*da2e3ebdSchin *) case $ppbuiltin in 755*da2e3ebdSchin 2) echo "#pragma pp:builtin" 756*da2e3ebdSchin ppbuiltin=1 757*da2e3ebdSchin ;; 758*da2e3ebdSchin esac 759*da2e3ebdSchin eval predef___${i}__=2 760*da2e3ebdSchin echo "#define __${i}__$v" 761*da2e3ebdSchin ;; 762*da2e3ebdSchin esac 763*da2e3ebdSchin ;; 764*da2e3ebdSchin esac 765*da2e3ebdSchin ;; 766*da2e3ebdSchin esac 767*da2e3ebdSchin done 768*da2e3ebdSchin case $nopredef in 769*da2e3ebdSchin 2) break ;; 770*da2e3ebdSchin esac 771*da2e3ebdSchin echo "#pragma pp:nopredefined" 772*da2e3ebdSchin case $nopredef in 773*da2e3ebdSchin 0) break ;; 774*da2e3ebdSchin esac 775*da2e3ebdSchin ppbuiltin=2 776*da2e3ebdSchin nopredef=2 777*da2e3ebdSchin done 778*da2e3ebdSchin ;; 779*da2e3ebdSchinesac 780*da2e3ebdSchincase $basefile in 781*da2e3ebdSchin?*) case $ppbuiltin in 782*da2e3ebdSchin 0|2) ppbuiltin=1 783*da2e3ebdSchin echo "#pragma pp:builtin" 784*da2e3ebdSchin ;; 785*da2e3ebdSchin esac 786*da2e3ebdSchin echo "#define $basefile #(BASE)" 787*da2e3ebdSchin ;; 788*da2e3ebdSchinesac 789*da2e3ebdSchincase $ppbuiltin in 790*da2e3ebdSchin1) echo "#pragma pp:nobuiltin" ;; 791*da2e3ebdSchinesac 792*da2e3ebdSchin 793*da2e3ebdSchineval set x $probe_longlong 794*da2e3ebdSchinshift 795*da2e3ebdSchinx= 796*da2e3ebdSchinfor o in "$@" 797*da2e3ebdSchindo rm -f longlong.$exe 798*da2e3ebdSchin if $cc -DLONGLONG="$o" -o longlong.$exe longlong.$src && 799*da2e3ebdSchin ./longlong.$exe 800*da2e3ebdSchin then x=1 801*da2e3ebdSchin break 802*da2e3ebdSchin fi 803*da2e3ebdSchindone 804*da2e3ebdSchincase $x in 805*da2e3ebdSchin'') eval set x $probe_longlong_t 806*da2e3ebdSchin shift 807*da2e3ebdSchin for o in "$@" 808*da2e3ebdSchin do rm -f longlong.$exe 809*da2e3ebdSchin if $cc -DLONGLONG="$o" -o longlong.$exe longlong.$src && 810*da2e3ebdSchin ./longlong.$exe 811*da2e3ebdSchin then echo "#define <long long> $o" 812*da2e3ebdSchin break 813*da2e3ebdSchin fi 814*da2e3ebdSchin done 815*da2e3ebdSchin ;; 816*da2e3ebdSchinesac 817*da2e3ebdSchin 818*da2e3ebdSchinecho 819*da2e3ebdSchinfor i in `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*[0123456789][abcdefghijklmnopqrstuvwxyz0123456789]*\$/!d'` `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*\$/!d'` 820*da2e3ebdSchindo case $i in 821*da2e3ebdSchin *ix) ;; 822*da2e3ebdSchin *) architecture=$i 823*da2e3ebdSchin break 824*da2e3ebdSchin ;; 825*da2e3ebdSchin esac 826*da2e3ebdSchindone 827*da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:architecture:/!d' -e 's/[ ].*//' < $ppdef` 828*da2e3ebdSchindo eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \"" 829*da2e3ebdSchin case $j in 830*da2e3ebdSchin *" 2 "*)architecture=$i 831*da2e3ebdSchin break 832*da2e3ebdSchin ;; 833*da2e3ebdSchin esac 834*da2e3ebdSchindone 835*da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:machine:/!d' -e 's/[ ].*//' < $ppdef` 836*da2e3ebdSchindo eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \"" 837*da2e3ebdSchin case $j in 838*da2e3ebdSchin *" 2 "*)machine="$machine $i" ;; 839*da2e3ebdSchin esac 840*da2e3ebdSchindone 841*da2e3ebdSchincase $sys_bufld$sys_reboot$sys_utsname in 842*da2e3ebdSchin1??) release=research 843*da2e3ebdSchin version=9 844*da2e3ebdSchin ;; 845*da2e3ebdSchin01?) release=bsd 846*da2e3ebdSchin case $sys_quota in 847*da2e3ebdSchin 0) case $sys_vfs in 848*da2e3ebdSchin 0) version=4.1 849*da2e3ebdSchin ;; 850*da2e3ebdSchin esac 851*da2e3ebdSchin ;; 852*da2e3ebdSchin 1) case $sys_namei in 853*da2e3ebdSchin 0) version=4.2 854*da2e3ebdSchin ;; 855*da2e3ebdSchin 1) version=4.3 856*da2e3ebdSchin ;; 857*da2e3ebdSchin esac 858*da2e3ebdSchin ;; 859*da2e3ebdSchin esac 860*da2e3ebdSchin ;; 861*da2e3ebdSchin001) release=V 862*da2e3ebdSchin ;; 863*da2e3ebdSchinesac 864*da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:release:/!d' -e 's/[ ].*//' < $ppdef` 865*da2e3ebdSchindo eval j=\$predef_$i 866*da2e3ebdSchin case $j in 867*da2e3ebdSchin 2) release="$release $i" ;; 868*da2e3ebdSchin esac 869*da2e3ebdSchindone 870*da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:system:/!d' -e 's/[ ].*//' < $ppdef` 871*da2e3ebdSchindo eval j=\$predef_$i 872*da2e3ebdSchin case $j in 873*da2e3ebdSchin 2) system="$system $i" ;; 874*da2e3ebdSchin esac 875*da2e3ebdSchindone 876*da2e3ebdSchincase $release in 877*da2e3ebdSchintopix) release="$release V" 878*da2e3ebdSchin ;; 879*da2e3ebdSchinesac 880*da2e3ebdSchincase $assert in 881*da2e3ebdSchin?*) for i in $predef 882*da2e3ebdSchin do case $i in 883*da2e3ebdSchin _*|*_) ;; 884*da2e3ebdSchin *) for p in architecture cpu machine system 885*da2e3ebdSchin do echo "#if #$p($i) 886*da2e3ebdSchineval \"case \\\" \$$p \\\" in *\\\" $i \\\"*) ;; *) $p=\\\"$i \$$p\\\" ;; esac\" 887*da2e3ebdSchin: avoid string literal concatenation 888*da2e3ebdSchin#endif" 889*da2e3ebdSchin done 890*da2e3ebdSchin ;; 891*da2e3ebdSchin esac 892*da2e3ebdSchin done > t.$src 893*da2e3ebdSchin eval "`$cc -E t.$src`" 894*da2e3ebdSchin set x x $prepred 895*da2e3ebdSchin while : 896*da2e3ebdSchin do shift 897*da2e3ebdSchin shift 898*da2e3ebdSchin case $# in 899*da2e3ebdSchin [01]) break ;; 900*da2e3ebdSchin esac 901*da2e3ebdSchin eval " 902*da2e3ebdSchin case \" \$$1 \" in 903*da2e3ebdSchin *\" $2 \"*) ;; 904*da2e3ebdSchin *) $1=\"$2 \$$1\" ;; 905*da2e3ebdSchin esac 906*da2e3ebdSchin " 907*da2e3ebdSchin done 908*da2e3ebdSchin ;; 909*da2e3ebdSchinesac 910*da2e3ebdSchincase $system in 911*da2e3ebdSchin"") system=unix ;; 912*da2e3ebdSchinesac 913*da2e3ebdSchincase $architecture in 914*da2e3ebdSchinibm|uts|u370) model=370 915*da2e3ebdSchin architecture=ibm 916*da2e3ebdSchin ;; 917*da2e3ebdSchinm*68*) architecture=m68000 918*da2e3ebdSchin for i in $predef 919*da2e3ebdSchin do case $i in 920*da2e3ebdSchin m*68*[123456789][0123456789]) 921*da2e3ebdSchin model=`echo $i | sed 's/.*\(..\)/\1/'` 922*da2e3ebdSchin break 923*da2e3ebdSchin ;; 924*da2e3ebdSchin esac 925*da2e3ebdSchin done 926*da2e3ebdSchin ;; 927*da2e3ebdSchinu3b?*) model=`echo $architecture | sed 's/u3b//'` 928*da2e3ebdSchin architecture=3b 929*da2e3ebdSchin ;; 930*da2e3ebdSchinu3b) case $model in 931*da2e3ebdSchin "") model=20 ;; 932*da2e3ebdSchin esac 933*da2e3ebdSchin architecture=3b 934*da2e3ebdSchin ;; 935*da2e3ebdSchinvax[0123456789]*) 936*da2e3ebdSchin model=`echo $architecture | sed 's/vax//'` 937*da2e3ebdSchin architecture=vax 938*da2e3ebdSchin ;; 939*da2e3ebdSchinhp[0123456789]*s[0123456789]) 940*da2e3ebdSchin case $release in 941*da2e3ebdSchin [abcdefghijklmnopqrstuvwxyz]*.[abcdefghijklmnopqrstuvwxyz]*.*) 942*da2e3ebdSchin version=$release 943*da2e3ebdSchin release=V 944*da2e3ebdSchin ;; 945*da2e3ebdSchin esac 946*da2e3ebdSchin architecture="$architecture `echo $architecture | sed 's/s.*//'`" 947*da2e3ebdSchin ;; 948*da2e3ebdSchinesac 949*da2e3ebdSchincase $hosttype in 950*da2e3ebdSchin*.*) i=`echo $hosttype | sed -e 's,.*\.,,'` ;; 951*da2e3ebdSchin*) i=$hosttype ;; 952*da2e3ebdSchinesac 953*da2e3ebdSchincase $i in 954*da2e3ebdSchinunknown);; 955*da2e3ebdSchin?*) case " $architecture " in 956*da2e3ebdSchin *" $i "*) ;; 957*da2e3ebdSchin *) architecture="$architecture $i" ;; 958*da2e3ebdSchin esac 959*da2e3ebdSchin ;; 960*da2e3ebdSchinesac 961*da2e3ebdSchincase $architecture in 962*da2e3ebdSchin"") echo "$cc: warning: architecture not determined" >&4 963*da2e3ebdSchin set x $machine 964*da2e3ebdSchin architecture=$2 965*da2e3ebdSchin ;; 966*da2e3ebdSchinesac 967*da2e3ebdSchinecho "#define #hosttype($hosttype)" 968*da2e3ebdSchinfor i in $system 969*da2e3ebdSchindo echo "#define #system($i)" 970*da2e3ebdSchindone 971*da2e3ebdSchincase $release in 972*da2e3ebdSchin"") echo "#define #release()" ;; 973*da2e3ebdSchin*) for i in $release 974*da2e3ebdSchin do echo "#define #release($i)" 975*da2e3ebdSchin case $i in 976*da2e3ebdSchin V) echo "#define #release(system5)" ;; # compatibility 977*da2e3ebdSchin esac 978*da2e3ebdSchin done 979*da2e3ebdSchin ;; 980*da2e3ebdSchinesac 981*da2e3ebdSchinecho "#define #version($version)" 982*da2e3ebdSchincase $architecture in 983*da2e3ebdSchin"") echo "#define #architecture()" ;; 984*da2e3ebdSchin*) for i in `echo $architecture | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` 985*da2e3ebdSchin do echo "#define #architecture($i)" 986*da2e3ebdSchin done 987*da2e3ebdSchin ;; 988*da2e3ebdSchinesac 989*da2e3ebdSchinecho "#define #model($model)" 990*da2e3ebdSchincase $machine in 991*da2e3ebdSchin"") case $architecture:$model in 992*da2e3ebdSchin ?*:?*) set x $architecture; machine="$2/$model $architecture" ;; 993*da2e3ebdSchin *) machine=$architecture ;; 994*da2e3ebdSchin esac 995*da2e3ebdSchin ;; 996*da2e3ebdSchin*) machine="$machine $architecture" 997*da2e3ebdSchin ;; 998*da2e3ebdSchinesac 999*da2e3ebdSchincase $machine in 1000*da2e3ebdSchin"") echo "#define #machine()" ;; 1001*da2e3ebdSchin*) j= 1002*da2e3ebdSchin for i in `echo $machine | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` 1003*da2e3ebdSchin do case " $i " in 1004*da2e3ebdSchin *" $j "*) 1005*da2e3ebdSchin ;; 1006*da2e3ebdSchin *) j="$j $i" 1007*da2e3ebdSchin echo "#define #machine($i)" 1008*da2e3ebdSchin ;; 1009*da2e3ebdSchin esac 1010*da2e3ebdSchin done 1011*da2e3ebdSchin ;; 1012*da2e3ebdSchinesac 1013*da2e3ebdSchinfor i in $cpu 1014*da2e3ebdSchindo echo "#define #cpu($i)" 1015*da2e3ebdSchindone 1016*da2e3ebdSchinecho "#define #addressing()" 1017*da2e3ebdSchinfor i in $ATTRIBUTES 1018*da2e3ebdSchindo eval d=\$$i 1019*da2e3ebdSchin n=`echo $i | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` 1020*da2e3ebdSchin echo "#define #$n($d)" 1021*da2e3ebdSchindone 1022*da2e3ebdSchincase $stdc in 1023*da2e3ebdSchin?*) echo "#define #dialect(ansi)" ;; 1024*da2e3ebdSchinesac 1025*da2e3ebdSchincase $plusplus in 1026*da2e3ebdSchin?*) echo "#define #dialect(C++)" ;; 1027*da2e3ebdSchinesac 1028*da2e3ebdSchincase $hosted in 1029*da2e3ebdSchin"") echo "#define #dialect(cross)" ;; 1030*da2e3ebdSchinesac 1031*da2e3ebdSchincase $so:$dynamic:$static in 1032*da2e3ebdSchin::) ;; 1033*da2e3ebdSchin*) echo "#define #dialect(dynamic)" ;; 1034*da2e3ebdSchinesac 1035*da2e3ebdSchinecho 1036*da2e3ebdSchincase $plusplus in 1037*da2e3ebdSchin?*) echo "#pragma pp:plusplus" ;; 1038*da2e3ebdSchinesac 1039*da2e3ebdSchincase $reserved in 1040*da2e3ebdSchin?*) echo "#pragma pp:reserved" $reserved ;; 1041*da2e3ebdSchinesac 1042*da2e3ebdSchincase $nocatliteral in 1043*da2e3ebdSchin?*) echo "#pragma pp:nocatliteral" ;; 1044*da2e3ebdSchinesac 1045*da2e3ebdSchincase $opspace in 1046*da2e3ebdSchin?*) echo "#pragma pp:opspace" ;; 1047*da2e3ebdSchinesac 1048*da2e3ebdSchincase $pluscom in 1049*da2e3ebdSchin?*) echo "#pragma pp:pluscomment" ;; 1050*da2e3ebdSchinesac 1051*da2e3ebdSchincase $plussplice in 1052*da2e3ebdSchin?*) echo "#pragma pp:plussplice" ;; 1053*da2e3ebdSchinesac 1054*da2e3ebdSchincase $reguard in 1055*da2e3ebdSchin?*) echo "#pragma pp:reguard" ;; 1056*da2e3ebdSchinesac 1057*da2e3ebdSchincase $splicecat in 1058*da2e3ebdSchin?*) echo "#pragma pp:splicecat" ;; 1059*da2e3ebdSchinesac 1060*da2e3ebdSchincase $splicespace in 1061*da2e3ebdSchin?*) echo "#pragma pp:splicespace" ;; 1062*da2e3ebdSchinesac 1063*da2e3ebdSchincase $stringspan in 1064*da2e3ebdSchin?*) echo "#pragma pp:stringspan" ;; 1065*da2e3ebdSchinesac 1066*da2e3ebdSchincase $stdc in 1067*da2e3ebdSchin"") echo "#pragma pp:compatibility" 1068*da2e3ebdSchin ;; 1069*da2e3ebdSchin0) echo "#pragma pp:transition" 1070*da2e3ebdSchin ;; 1071*da2e3ebdSchin1) case $strict in 1072*da2e3ebdSchin ?*) echo "#pragma pp:strict" ;; 1073*da2e3ebdSchin esac 1074*da2e3ebdSchin ;; 1075*da2e3ebdSchinesac 1076*da2e3ebdSchincase $hostedtransition in 1077*da2e3ebdSchin1) echo "#pragma pp:hostedtransition" ;; 1078*da2e3ebdSchinesac 1079*da2e3ebdSchincase $stdc in 1080*da2e3ebdSchin?*) case $ppopt$ppenv in 1081*da2e3ebdSchin "") spaceout=1 1082*da2e3ebdSchin echo "#pragma pp:spaceout" 1083*da2e3ebdSchin ;; 1084*da2e3ebdSchin esac 1085*da2e3ebdSchin ;; 1086*da2e3ebdSchinesac 1087*da2e3ebdSchincase $truncate in 1088*da2e3ebdSchin?*) echo "#pragma pp:truncate $truncate" ;; 1089*da2e3ebdSchinesac 1090*da2e3ebdSchincase $zeof in 1091*da2e3ebdSchin?*) echo "#pragma pp:zeof" ;; 1092*da2e3ebdSchinesac 1093*da2e3ebdSchincase $dollar in 1094*da2e3ebdSchin1) echo '#pragma pp:id "$"' ;; 1095*da2e3ebdSchinesac 1096*da2e3ebdSchincdir=-I+C 1097*da2e3ebdSchinhdir=-I+H 1098*da2e3ebdSchinset x $stdinclude 1099*da2e3ebdSchinwhile : 1100*da2e3ebdSchindo shift 1101*da2e3ebdSchin case $# in 1102*da2e3ebdSchin 0) break ;; 1103*da2e3ebdSchin esac 1104*da2e3ebdSchin case $1 in 1105*da2e3ebdSchin $cdir|$hdir) 1106*da2e3ebdSchin ;; 1107*da2e3ebdSchin -I+C) cdir=$1 1108*da2e3ebdSchin echo "#pragma pp:nocdir" 1109*da2e3ebdSchin ;; 1110*da2e3ebdSchin -I-C) cdir=$1 1111*da2e3ebdSchin echo "#pragma pp:cdir" 1112*da2e3ebdSchin ;; 1113*da2e3ebdSchin -I+H) hdir=$1 1114*da2e3ebdSchin echo "#pragma pp:nohostdir" 1115*da2e3ebdSchin ;; 1116*da2e3ebdSchin -I-H) hdir=$1 1117*da2e3ebdSchin echo "#pragma pp:hostdir" 1118*da2e3ebdSchin ;; 1119*da2e3ebdSchin -I*) ;; 1120*da2e3ebdSchin *) echo "#pragma pp:include \"$1\"" 1121*da2e3ebdSchin ;; 1122*da2e3ebdSchin esac 1123*da2e3ebdSchindone 1124*da2e3ebdSchincase $usrinclude in 1125*da2e3ebdSchin/usr/include) 1126*da2e3ebdSchin ;; 1127*da2e3ebdSchin?*) echo "#pragma pp:standard \"$usrinclude\"" 1128*da2e3ebdSchin ;; 1129*da2e3ebdSchinesac 1130*da2e3ebdSchincase $plusplus in 1131*da2e3ebdSchin?*) case $usrinclude in 1132*da2e3ebdSchin ?*) if grep plusplus $usrinclude/ctype.h >/dev/null 2>&1 1133*da2e3ebdSchin then echo '#pragma pp:nocdir "-"' 1134*da2e3ebdSchin fi 1135*da2e3ebdSchin ;; 1136*da2e3ebdSchin esac 1137*da2e3ebdSchin ;; 1138*da2e3ebdSchinesac 1139*da2e3ebdSchincase $mapinclude in 1140*da2e3ebdSchin?*) echo "#pragma pp:mapinclude hosted$mapinclude" ;; 1141*da2e3ebdSchinesac 1142*da2e3ebdSchincase $linefile in 1143*da2e3ebdSchin?*) echo "#pragma pp:linefile" ;; 1144*da2e3ebdSchinesac 1145*da2e3ebdSchincase $lineid in 1146*da2e3ebdSchin?*) echo "#pragma pp:lineid line" ;; 1147*da2e3ebdSchinesac 1148*da2e3ebdSchincase $linetype in 1149*da2e3ebdSchin1) echo "#pragma pp:linetype" ;; 1150*da2e3ebdSchin?*) echo "#pragma pp:linetype $linetype" ;; 1151*da2e3ebdSchinesac 1152*da2e3ebdSchincase $allmultiple in 1153*da2e3ebdSchin"") echo "#pragma pp:noallmultiple" ;; 1154*da2e3ebdSchinesac 1155*da2e3ebdSchincase $defincl in 1156*da2e3ebdSchin1) echo '#pragma pp:map "/#(pragma )?defincl>/"' ;; 1157*da2e3ebdSchinesac 1158*da2e3ebdSchincase $eject in 1159*da2e3ebdSchin1) echo '#pragma pp:map "/#(pragma )?eject>/"' ;; 1160*da2e3ebdSchinesac 1161*da2e3ebdSchincase $elseif in 1162*da2e3ebdSchin1) echo "#pragma pp:elseif" ;; 1163*da2e3ebdSchinesac 1164*da2e3ebdSchincase $headerexpand in 1165*da2e3ebdSchin1) echo "#pragma pp:headerexpand" ;; 1166*da2e3ebdSchinesac 1167*da2e3ebdSchincase $headerexpandall in 1168*da2e3ebdSchin1) echo "#pragma pp:headerexpandall" ;; 1169*da2e3ebdSchinesac 1170*da2e3ebdSchincase $ident in 1171*da2e3ebdSchin1) echo '#pragma pp:map "/#(pragma )?ident>/" "/#(pragma )?/###/"' ;; 1172*da2e3ebdSchin*) echo '#pragma pp:map "/#(pragma )?ident>/"' ;; 1173*da2e3ebdSchinesac 1174*da2e3ebdSchincase $import in 1175*da2e3ebdSchin1) echo '#pragma pp:map "/#(pragma )?import>/" "/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/" 1176*da2e3ebdSchin#macdef __STDPP__IMPORT__(x) 1177*da2e3ebdSchin#pragma pp:noallmultiple 1178*da2e3ebdSchin#include x 1179*da2e3ebdSchin#pragma pp:allmultiple 1180*da2e3ebdSchin#endmac' ;; 1181*da2e3ebdSchinesac 1182*da2e3ebdSchincase $include_next in 1183*da2e3ebdSchin1) echo '#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"' ;; 1184*da2e3ebdSchinesac 1185*da2e3ebdSchinecho '#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"' 1186*da2e3ebdSchinecho '#pragma pp:map "/#(pragma )?sccs>/"' 1187*da2e3ebdSchin 1188*da2e3ebdSchincase $stdc:$spaceout in 1189*da2e3ebdSchin1:) case ' '$reserved' ' in 1190*da2e3ebdSchin *' 'asm' '*|*' 'asm=*) 1191*da2e3ebdSchin echo "#macdef asm" 1192*da2e3ebdSchin echo "#pragma pp:spaceout" 1193*da2e3ebdSchin echo "#undef asm" 1194*da2e3ebdSchin echo "asm" 1195*da2e3ebdSchin echo "#endmac" 1196*da2e3ebdSchin ;; 1197*da2e3ebdSchin esac 1198*da2e3ebdSchin ;; 1199*da2e3ebdSchinesac 1200*da2e3ebdSchin 1201*da2e3ebdSchinif $cc -E preinc.$src > preinc.out 1202*da2e3ebdSchinthen 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` 1203*da2e3ebdSchin do case $f in 1204*da2e3ebdSchin *preinc.$src*) 1205*da2e3ebdSchin ;; 1206*da2e3ebdSchin *) echo "#include <$f>" 1207*da2e3ebdSchin ;; 1208*da2e3ebdSchin esac 1209*da2e3ebdSchin done 1210*da2e3ebdSchinfi 1211