xref: /titanic_44/usr/src/lib/libpp/common/pp.probe (revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968)
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