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