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