1da2e3ebdSchin:
2da2e3ebdSchin# Glenn Fowler
3da2e3ebdSchin# AT&T Research
4da2e3ebdSchin#
5*b30d1939SAndy Fiddaman# @(#)pp.probe (AT&T Research) 2012-02-29
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=
2834f9b3eeSRoland 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	}
568*b30d1939SAndy Fiddamanpreval="`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' -e '/\\(^[^ ]*\\) \1  *=$/d'` `$cc -dM -E stdc.$src | sed -e '/[ 	]*#[ 	]*define/!d' -e '/\"/d' -e 's/[ 	]*#[ 	]*define[ 	]*\\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*([^)]*)\\)[ 	]*\\(.*\\)/\\1 \\2 =/' -e 's/[ 	]*#[ 	]*define[ 	]*\\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)[ 	]*\\(.*\\)/\\1 \\2 =/'`"
569*b30d1939SAndy Fiddaman	print -r "$preval" > /tmp/probe/preval
570da2e3ebdSchin
571da2e3ebdSchinfor i in bufld namei quota reboot utsname vfs
572da2e3ebdSchindo	echo "#include <sys/$i.h>" > t.$src
573da2e3ebdSchin	if	$cc -E t.$src
574da2e3ebdSchin	then	x=1
575da2e3ebdSchin	else	x=0
576da2e3ebdSchin	fi
577da2e3ebdSchin	eval sys_$i=$x
578da2e3ebdSchindone
579da2e3ebdSchin
58034f9b3eeSRoland Mainzecho "char* fun() { return (char*)__FUNCTION__; }
58134f9b3eeSRoland Mainzint main() { return !fun(); }" > fun.$src
58234f9b3eeSRoland Mainzrm -f fun.exe
58334f9b3eeSRoland Mainzif	$cc -o fun.exe fun.$src && test -x fun.exe
58434f9b3eeSRoland Mainzthen	undef_predef="$undef_predef __FUNCTION__"
58534f9b3eeSRoland Mainzfi
58634f9b3eeSRoland Mainz
587da2e3ebdSchincase "`grep -c '__STDC__[-0 	]*[=!]=[ 	]*0' $usrinclude/stdio.h 2>/dev/null`" in
588da2e3ebdSchin0)	;;
589da2e3ebdSchin*)	hostedtransition=1 ;;
590da2e3ebdSchinesac
591da2e3ebdSchin
592da2e3ebdSchinmapinclude=
593da2e3ebdSchinfor i in builtins
594da2e3ebdSchindo	echo "#include <$i.h>" > t.$src
595da2e3ebdSchin	if	$cc -E t.$src
596da2e3ebdSchin	then	mapinclude="$mapinclude <$i.h>=\".\""
597da2e3ebdSchin	fi
598da2e3ebdSchindone
599da2e3ebdSchin
600da2e3ebdSchin#
601da2e3ebdSchin# the payoff
602da2e3ebdSchin#
603da2e3ebdSchin
604da2e3ebdSchinexec >&3
605da2e3ebdSchin
606da2e3ebdSchincase "$compatibility:$transition:$dollar" in
607da2e3ebdSchin::)	strict=1 ;;
608da2e3ebdSchinesac
609da2e3ebdSchincase $version_stamp in
610da2e3ebdSchin?*)	echo "/* $version_stamp" ;;
611da2e3ebdSchin*)	echo "/* $cc" ;;
612da2e3ebdSchinesac
613da2e3ebdSchinecho "*/"
614da2e3ebdSchincase $plusplus:$stdc in
615da2e3ebdSchin1:?*)	preval="$preval = __STDC__ $stdc ="
616da2e3ebdSchin	redef="$redef __STDC__"
617da2e3ebdSchin	;;
618da2e3ebdSchinesac
619da2e3ebdSchinppbuiltin=0
620da2e3ebdSchinset x $preval
621da2e3ebdSchinshift
622da2e3ebdSchincase $# in
623da2e3ebdSchin0)	;;
624da2e3ebdSchin*)	echo
625da2e3ebdSchin	echo "#pragma pp:predefined"
626da2e3ebdSchin	predef=
627da2e3ebdSchin	while	:
628da2e3ebdSchin	do	case $# in
629da2e3ebdSchin		0)	break ;;
630da2e3ebdSchin		esac
631da2e3ebdSchin		m=$1
632da2e3ebdSchin		shift
633da2e3ebdSchin		case $m in
634da2e3ebdSchin		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
635da2e3ebdSchin		*)	i=$m ;;
636da2e3ebdSchin		esac
637da2e3ebdSchin		predef="$predef
638da2e3ebdSchin$i"
639da2e3ebdSchin		eval predef_$i=0
640da2e3ebdSchin		while	:
641da2e3ebdSchin		do	case $1 in
642da2e3ebdSchin			'=')	break ;;
643da2e3ebdSchin			*)	shift ;;
644da2e3ebdSchin			esac
645da2e3ebdSchin		done
646da2e3ebdSchin		while	:
647da2e3ebdSchin		do	case $1 in
648da2e3ebdSchin			'=')	shift ;;
649da2e3ebdSchin			*)	break ;;
650da2e3ebdSchin			esac
651da2e3ebdSchin		done
652da2e3ebdSchin	done
653da2e3ebdSchin	for i in $undef
654da2e3ebdSchin	do	case " $redef " in
655da2e3ebdSchin		*" $i "*)	;;
656da2e3ebdSchin		*)		eval predef_$i=3 ;;
657da2e3ebdSchin		esac
658da2e3ebdSchin	done
659da2e3ebdSchin	set $preval
660da2e3ebdSchin	while	:
661da2e3ebdSchin	do	case $# in
662da2e3ebdSchin		0)	break ;;
663da2e3ebdSchin		esac
664da2e3ebdSchin		m=$1
665da2e3ebdSchin		shift
666da2e3ebdSchin		case $m in
667da2e3ebdSchin		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
668da2e3ebdSchin		*)	i=$m ;;
669da2e3ebdSchin		esac
670da2e3ebdSchin		case $i in
671da2e3ebdSchin		'=')	continue ;;
672da2e3ebdSchin		esac
673da2e3ebdSchin		v=
674da2e3ebdSchin		while	:
675da2e3ebdSchin		do	case $1 in
676da2e3ebdSchin			'=')	break ;;
677da2e3ebdSchin			esac
678da2e3ebdSchin			v="$v $1"
679da2e3ebdSchin			shift
680da2e3ebdSchin		done
681da2e3ebdSchin		while	:
682da2e3ebdSchin		do	case $1 in
683da2e3ebdSchin			'=')	shift ;;
684da2e3ebdSchin			*)	break ;;
685da2e3ebdSchin			esac
686da2e3ebdSchin		done
687da2e3ebdSchin		case $i in
688da2e3ebdSchin		__LCC__)strict=2 ;;
689da2e3ebdSchin		_*)	;;
690da2e3ebdSchin		*)	eval j=\$predef_$i
691da2e3ebdSchin			case $j in
692da2e3ebdSchin			0)	eval predef_$i=1
693da2e3ebdSchin				echo "#define $m$v"
694da2e3ebdSchin				case $strict in
695da2e3ebdSchin				1)	strict= ;;
696da2e3ebdSchin				esac
697da2e3ebdSchin				;;
698da2e3ebdSchin			esac
699da2e3ebdSchin			;;
700da2e3ebdSchin		esac
701da2e3ebdSchin	done
702da2e3ebdSchin	nopredef=0
703da2e3ebdSchin	while	:
704da2e3ebdSchin	do	set $preval
705da2e3ebdSchin		while	:
706da2e3ebdSchin		do	case $# in
707da2e3ebdSchin			0)	break ;;
708da2e3ebdSchin			esac
709da2e3ebdSchin			m=$1
710da2e3ebdSchin			shift
711da2e3ebdSchin			case $m in
712da2e3ebdSchin			*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
713da2e3ebdSchin			*)	i=$m ;;
714da2e3ebdSchin			esac
715da2e3ebdSchin			v=
716da2e3ebdSchin			while	:
717da2e3ebdSchin			do	case $1 in
718da2e3ebdSchin				'=')	break ;;
719da2e3ebdSchin				esac
720da2e3ebdSchin				v="$v $1"
721da2e3ebdSchin				shift
722da2e3ebdSchin			done
723da2e3ebdSchin			while	:
724da2e3ebdSchin			do	case $1 in
725da2e3ebdSchin				'=')	shift ;;
726da2e3ebdSchin				*)	break ;;
727da2e3ebdSchin				esac
728da2e3ebdSchin			done
729*b30d1939SAndy Fiddaman			case $m in
730*b30d1939SAndy Fiddaman			__*_BIT__|__*_DIG__|__*_MIN__|__*_MAX__|__*_TYPE__|*_FLT_*|*_DBL_*|*_LDBL_*)
731*b30d1939SAndy Fiddaman				case $nopredef in
732*b30d1939SAndy Fiddaman				0)	nopredef=1
733*b30d1939SAndy Fiddaman					continue
734*b30d1939SAndy Fiddaman					;;
735*b30d1939SAndy Fiddaman				1)	continue
736*b30d1939SAndy Fiddaman					;;
737*b30d1939SAndy Fiddaman				esac
738*b30d1939SAndy Fiddaman				;;
739*b30d1939SAndy Fiddaman			esac
740da2e3ebdSchin			case $nopredef in
741da2e3ebdSchin			2)	;;
742da2e3ebdSchin			*)	case $v in
743da2e3ebdSchin				' '*' '*)
744da2e3ebdSchin					nopredef=1
745da2e3ebdSchin					continue
746da2e3ebdSchin					;;
747da2e3ebdSchin				' '[0123456789]*|' '"'"*"'"*)
748da2e3ebdSchin					;;
749da2e3ebdSchin				*)	case $1 in
750da2e3ebdSchin					_*)	;;
751da2e3ebdSchin					*)	nopredef=1
752da2e3ebdSchin						continue
753da2e3ebdSchin						;;
754da2e3ebdSchin					esac
755da2e3ebdSchin					;;
756da2e3ebdSchin				esac
757da2e3ebdSchin				;;
758da2e3ebdSchin			esac
759da2e3ebdSchin			eval j=\$predef_$i
760da2e3ebdSchin			case $j in
761da2e3ebdSchin			0)	case $ppbuiltin in
762da2e3ebdSchin				2)	echo "#pragma pp:builtin"
763da2e3ebdSchin					ppbuiltin=1
764da2e3ebdSchin					;;
765da2e3ebdSchin				esac
766da2e3ebdSchin				eval predef_$i=2
767da2e3ebdSchin				echo "#define $m$v"
768da2e3ebdSchin				;;
769da2e3ebdSchin			1)	case $m in
770da2e3ebdSchin				$i)	eval predef_$i=2
771da2e3ebdSchin					eval j=\$predef___${i}__
772da2e3ebdSchin					case $j in
773da2e3ebdSchin					[12])	;;
774da2e3ebdSchin					*)	case $ppbuiltin in
775da2e3ebdSchin						2)	echo "#pragma pp:builtin"
776da2e3ebdSchin							ppbuiltin=1
777da2e3ebdSchin							;;
778da2e3ebdSchin						esac
779da2e3ebdSchin						eval predef___${i}__=2
780da2e3ebdSchin						echo "#define __${i}__$v"
781da2e3ebdSchin						;;
782da2e3ebdSchin					esac
783da2e3ebdSchin					;;
784da2e3ebdSchin				esac
785da2e3ebdSchin				;;
786da2e3ebdSchin			esac
787da2e3ebdSchin		done
788da2e3ebdSchin		case $nopredef in
789da2e3ebdSchin		2)	break ;;
790da2e3ebdSchin		esac
791da2e3ebdSchin		echo "#pragma pp:nopredefined"
792da2e3ebdSchin		case $nopredef in
793da2e3ebdSchin		0)	break ;;
794da2e3ebdSchin		esac
795da2e3ebdSchin		ppbuiltin=2
796da2e3ebdSchin		nopredef=2
797da2e3ebdSchin	done
798da2e3ebdSchin	;;
799da2e3ebdSchinesac
800da2e3ebdSchincase $basefile in
801da2e3ebdSchin?*)	case $ppbuiltin in
802da2e3ebdSchin	0|2)	ppbuiltin=1
803da2e3ebdSchin		echo "#pragma pp:builtin"
804da2e3ebdSchin		;;
805da2e3ebdSchin	esac
806da2e3ebdSchin	echo "#define $basefile	#(BASE)"
807da2e3ebdSchin	;;
808da2e3ebdSchinesac
809da2e3ebdSchincase $ppbuiltin in
810da2e3ebdSchin1)	echo "#pragma pp:nobuiltin" ;;
811da2e3ebdSchinesac
812da2e3ebdSchin
813da2e3ebdSchineval set x $probe_longlong
814da2e3ebdSchinshift
815da2e3ebdSchinx=
816da2e3ebdSchinfor o in "$@"
817da2e3ebdSchindo	rm -f longlong.$exe
818da2e3ebdSchin	if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
819da2e3ebdSchin		./longlong.$exe
820da2e3ebdSchin	then	x=1
821da2e3ebdSchin		break
822da2e3ebdSchin	fi
823da2e3ebdSchindone
824da2e3ebdSchincase $x in
825da2e3ebdSchin'')	eval set x $probe_longlong_t
826da2e3ebdSchin	shift
827da2e3ebdSchin	for o in "$@"
828da2e3ebdSchin	do	rm -f longlong.$exe
829da2e3ebdSchin		if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
830da2e3ebdSchin			./longlong.$exe
831da2e3ebdSchin		then	echo "#define <long long> $o"
832da2e3ebdSchin			break
833da2e3ebdSchin		fi
834da2e3ebdSchin	done
835da2e3ebdSchin	;;
836da2e3ebdSchinesac
837da2e3ebdSchin
838da2e3ebdSchinecho
839da2e3ebdSchinfor i in `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*[0123456789][abcdefghijklmnopqrstuvwxyz0123456789]*\$/!d'` `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*\$/!d'`
840da2e3ebdSchindo	case $i in
841da2e3ebdSchin	*ix)	;;
842da2e3ebdSchin	*)	architecture=$i
843da2e3ebdSchin		break
844da2e3ebdSchin		;;
845da2e3ebdSchin	esac
846da2e3ebdSchindone
847da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:architecture:/!d' -e 's/[ 	].*//' < $ppdef`
848da2e3ebdSchindo	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
849da2e3ebdSchin	case $j in
850da2e3ebdSchin	*" 2 "*)architecture=$i
851da2e3ebdSchin		break
852da2e3ebdSchin		;;
853da2e3ebdSchin	esac
854da2e3ebdSchindone
855da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:machine:/!d' -e 's/[ 	].*//' < $ppdef`
856da2e3ebdSchindo	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
857da2e3ebdSchin	case $j in
858da2e3ebdSchin	*" 2 "*)machine="$machine $i" ;;
859da2e3ebdSchin	esac
860da2e3ebdSchindone
861da2e3ebdSchincase $sys_bufld$sys_reboot$sys_utsname in
862da2e3ebdSchin1??)	release=research
863da2e3ebdSchin	version=9
864da2e3ebdSchin	;;
865da2e3ebdSchin01?)	release=bsd
866da2e3ebdSchin	case $sys_quota in
867da2e3ebdSchin	0)	case $sys_vfs in
868da2e3ebdSchin		0)	version=4.1
869da2e3ebdSchin			;;
870da2e3ebdSchin		esac
871da2e3ebdSchin		;;
872da2e3ebdSchin	1)	case $sys_namei in
873da2e3ebdSchin		0)	version=4.2
874da2e3ebdSchin			;;
875da2e3ebdSchin		1)	version=4.3
876da2e3ebdSchin			;;
877da2e3ebdSchin		esac
878da2e3ebdSchin		;;
879da2e3ebdSchin	esac
880da2e3ebdSchin	;;
881da2e3ebdSchin001)	release=V
882da2e3ebdSchin	;;
883da2e3ebdSchinesac
884da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:release:/!d' -e 's/[ 	].*//' < $ppdef`
885da2e3ebdSchindo	eval j=\$predef_$i
886da2e3ebdSchin	case $j in
887da2e3ebdSchin	2)	release="$release $i" ;;
888da2e3ebdSchin	esac
889da2e3ebdSchindone
890da2e3ebdSchinfor i in `sed -e '/^#/d' -e '/:system:/!d' -e 's/[ 	].*//' < $ppdef`
891da2e3ebdSchindo	eval j=\$predef_$i
892da2e3ebdSchin	case $j in
893da2e3ebdSchin	2)	system="$system $i" ;;
894da2e3ebdSchin	esac
895da2e3ebdSchindone
896da2e3ebdSchincase $release in
897da2e3ebdSchintopix)	release="$release V"
898da2e3ebdSchin	;;
899da2e3ebdSchinesac
900da2e3ebdSchincase $assert in
901da2e3ebdSchin?*)	for i in $predef
902da2e3ebdSchin	do	case $i in
903da2e3ebdSchin		_*|*_)	;;
904da2e3ebdSchin		*)	for p in architecture cpu machine system
905da2e3ebdSchin			do	echo "#if #$p($i)
906da2e3ebdSchineval \"case \\\" \$$p \\\" in *\\\" $i \\\"*) ;; *) $p=\\\"$i \$$p\\\" ;; esac\"
907da2e3ebdSchin: avoid string literal concatenation
908da2e3ebdSchin#endif"
909da2e3ebdSchin			done
910da2e3ebdSchin			;;
911da2e3ebdSchin		esac
912da2e3ebdSchin	done > t.$src
913da2e3ebdSchin	eval "`$cc -E t.$src`"
914da2e3ebdSchin	set x x $prepred
915da2e3ebdSchin	while	:
916da2e3ebdSchin	do	shift
917da2e3ebdSchin		shift
918da2e3ebdSchin		case $# in
919da2e3ebdSchin		[01])	break ;;
920da2e3ebdSchin		esac
921da2e3ebdSchin		eval "
922da2e3ebdSchin			case \" \$$1 \" in
923da2e3ebdSchin			*\" $2 \"*) ;;
924da2e3ebdSchin			*) $1=\"$2 \$$1\" ;;
925da2e3ebdSchin			esac
926da2e3ebdSchin		"
927da2e3ebdSchin	done
928da2e3ebdSchin	;;
929da2e3ebdSchinesac
930da2e3ebdSchincase $system in
931da2e3ebdSchin"")	system=unix ;;
932da2e3ebdSchinesac
933da2e3ebdSchincase $architecture in
934da2e3ebdSchinibm|uts|u370)	model=370
935da2e3ebdSchin		architecture=ibm
936da2e3ebdSchin		;;
937da2e3ebdSchinm*68*)		architecture=m68000
938da2e3ebdSchin		for i in $predef
939da2e3ebdSchin		do	case $i in
940da2e3ebdSchin			m*68*[123456789][0123456789])
941da2e3ebdSchin				model=`echo $i | sed 's/.*\(..\)/\1/'`
942da2e3ebdSchin				break
943da2e3ebdSchin				;;
944da2e3ebdSchin			esac
945da2e3ebdSchin		done
946da2e3ebdSchin		;;
947da2e3ebdSchinu3b?*)		model=`echo $architecture | sed 's/u3b//'`
948da2e3ebdSchin		architecture=3b
949da2e3ebdSchin		;;
950da2e3ebdSchinu3b)		case $model in
951da2e3ebdSchin		"")	model=20 ;;
952da2e3ebdSchin		esac
953da2e3ebdSchin		architecture=3b
954da2e3ebdSchin		;;
955da2e3ebdSchinvax[0123456789]*)
956da2e3ebdSchin		model=`echo $architecture | sed 's/vax//'`
957da2e3ebdSchin		architecture=vax
958da2e3ebdSchin		;;
959da2e3ebdSchinhp[0123456789]*s[0123456789])
960da2e3ebdSchin		case $release in
961da2e3ebdSchin		[abcdefghijklmnopqrstuvwxyz]*.[abcdefghijklmnopqrstuvwxyz]*.*)
962da2e3ebdSchin			version=$release
963da2e3ebdSchin			release=V
964da2e3ebdSchin			;;
965da2e3ebdSchin		esac
966da2e3ebdSchin		architecture="$architecture `echo $architecture | sed 's/s.*//'`"
967da2e3ebdSchin		;;
968da2e3ebdSchinesac
969da2e3ebdSchincase $hosttype in
970da2e3ebdSchin*.*)	i=`echo $hosttype | sed -e 's,.*\.,,'` ;;
971da2e3ebdSchin*)	i=$hosttype ;;
972da2e3ebdSchinesac
973da2e3ebdSchincase $i in
974da2e3ebdSchinunknown);;
975da2e3ebdSchin?*)	case " $architecture " in
976da2e3ebdSchin	*" $i "*) ;;
977da2e3ebdSchin	*)	architecture="$architecture $i" ;;
978da2e3ebdSchin	esac
979da2e3ebdSchin	;;
980da2e3ebdSchinesac
981da2e3ebdSchincase $architecture in
982da2e3ebdSchin"")	echo "$cc: warning: architecture not determined" >&4
983da2e3ebdSchin	set x $machine
984da2e3ebdSchin	architecture=$2
985da2e3ebdSchin	;;
986da2e3ebdSchinesac
987da2e3ebdSchinecho "#define #hosttype($hosttype)"
988da2e3ebdSchinfor i in $system
989da2e3ebdSchindo	echo "#define #system($i)"
990da2e3ebdSchindone
991da2e3ebdSchincase $release in
992da2e3ebdSchin"")	echo "#define #release()" ;;
993da2e3ebdSchin*)	for i in $release
994da2e3ebdSchin	do	echo "#define #release($i)"
995da2e3ebdSchin		case $i in
996da2e3ebdSchin		V)	echo "#define #release(system5)" ;; # compatibility
997da2e3ebdSchin		esac
998da2e3ebdSchin	done
999da2e3ebdSchin	;;
1000da2e3ebdSchinesac
1001da2e3ebdSchinecho "#define #version($version)"
1002da2e3ebdSchincase $architecture in
1003da2e3ebdSchin"")	echo "#define #architecture()" ;;
1004da2e3ebdSchin*)	for i in `echo $architecture | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1005da2e3ebdSchin	do	echo "#define #architecture($i)"
1006da2e3ebdSchin	done
1007da2e3ebdSchin	;;
1008da2e3ebdSchinesac
1009da2e3ebdSchinecho "#define #model($model)"
1010da2e3ebdSchincase $machine in
1011da2e3ebdSchin"")	case $architecture:$model in
1012da2e3ebdSchin	?*:?*)	set x $architecture; machine="$2/$model $architecture" ;;
1013da2e3ebdSchin	*)	machine=$architecture ;;
1014da2e3ebdSchin	esac
1015da2e3ebdSchin	;;
1016da2e3ebdSchin*)	machine="$machine $architecture"
1017da2e3ebdSchin	;;
1018da2e3ebdSchinesac
1019da2e3ebdSchincase $machine in
1020da2e3ebdSchin"")	echo "#define #machine()" ;;
1021da2e3ebdSchin*)	j=
1022da2e3ebdSchin	for i in `echo $machine | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1023da2e3ebdSchin	do	case " $i " in
1024da2e3ebdSchin		*" $j "*)
1025da2e3ebdSchin			;;
1026da2e3ebdSchin		*)	j="$j $i"
1027da2e3ebdSchin			echo "#define #machine($i)"
1028da2e3ebdSchin			;;
1029da2e3ebdSchin		esac
1030da2e3ebdSchin	done
1031da2e3ebdSchin	;;
1032da2e3ebdSchinesac
1033da2e3ebdSchinfor i in $cpu
1034da2e3ebdSchindo	echo "#define #cpu($i)"
1035da2e3ebdSchindone
1036da2e3ebdSchinecho "#define #addressing()"
1037da2e3ebdSchinfor i in $ATTRIBUTES
1038da2e3ebdSchindo	eval d=\$$i
1039da2e3ebdSchin	n=`echo $i | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
1040da2e3ebdSchin	echo "#define #$n($d)"
1041da2e3ebdSchindone
1042da2e3ebdSchincase $stdc in
1043da2e3ebdSchin?*)	echo "#define #dialect(ansi)" ;;
1044da2e3ebdSchinesac
1045da2e3ebdSchincase $plusplus in
1046da2e3ebdSchin?*)	echo "#define #dialect(C++)" ;;
1047da2e3ebdSchinesac
1048da2e3ebdSchincase $hosted in
1049da2e3ebdSchin"")	echo "#define #dialect(cross)" ;;
1050da2e3ebdSchinesac
1051da2e3ebdSchincase $so:$dynamic:$static in
1052da2e3ebdSchin::)	;;
1053da2e3ebdSchin*)	echo "#define #dialect(dynamic)" ;;
1054da2e3ebdSchinesac
1055da2e3ebdSchinecho
105634f9b3eeSRoland Mainzcase $undef_predef in
105734f9b3eeSRoland Mainz?*)	for m in $undef_predef
105834f9b3eeSRoland Mainz	do	echo "#undef	$m"
105934f9b3eeSRoland Mainz	done
106034f9b3eeSRoland Mainz	echo
106134f9b3eeSRoland Mainz	;;
106234f9b3eeSRoland Mainzesac
1063da2e3ebdSchincase $plusplus in
1064da2e3ebdSchin?*)	echo "#pragma pp:plusplus" ;;
1065da2e3ebdSchinesac
1066da2e3ebdSchincase $reserved in
1067da2e3ebdSchin?*)	echo "#pragma pp:reserved" $reserved ;;
1068da2e3ebdSchinesac
1069da2e3ebdSchincase $nocatliteral in
1070da2e3ebdSchin?*)	echo "#pragma pp:nocatliteral" ;;
1071da2e3ebdSchinesac
1072da2e3ebdSchincase $opspace in
1073da2e3ebdSchin?*)	echo "#pragma pp:opspace" ;;
1074da2e3ebdSchinesac
1075da2e3ebdSchincase $pluscom in
1076da2e3ebdSchin?*)	echo "#pragma pp:pluscomment" ;;
1077da2e3ebdSchinesac
1078da2e3ebdSchincase $plussplice in
1079da2e3ebdSchin?*)	echo "#pragma pp:plussplice" ;;
1080da2e3ebdSchinesac
1081da2e3ebdSchincase $reguard in
1082da2e3ebdSchin?*)	echo "#pragma pp:reguard" ;;
1083da2e3ebdSchinesac
1084da2e3ebdSchincase $splicecat in
1085da2e3ebdSchin?*)	echo "#pragma pp:splicecat" ;;
1086da2e3ebdSchinesac
1087da2e3ebdSchincase $splicespace in
1088da2e3ebdSchin?*)	echo "#pragma pp:splicespace" ;;
1089da2e3ebdSchinesac
1090da2e3ebdSchincase $stringspan in
1091da2e3ebdSchin?*)	echo "#pragma pp:stringspan" ;;
1092da2e3ebdSchinesac
1093da2e3ebdSchincase $stdc in
1094da2e3ebdSchin"")	echo "#pragma pp:compatibility"
1095da2e3ebdSchin	;;
1096da2e3ebdSchin0)	echo "#pragma pp:transition"
1097da2e3ebdSchin	;;
1098da2e3ebdSchin1)	case $strict in
1099da2e3ebdSchin	?*)	echo "#pragma pp:strict" ;;
1100da2e3ebdSchin	esac
1101da2e3ebdSchin	;;
1102da2e3ebdSchinesac
1103da2e3ebdSchincase $hostedtransition in
1104da2e3ebdSchin1)	echo "#pragma pp:hostedtransition" ;;
1105da2e3ebdSchinesac
1106da2e3ebdSchincase $stdc in
1107da2e3ebdSchin?*)	case $ppopt$ppenv in
1108da2e3ebdSchin	"")	spaceout=1
1109da2e3ebdSchin		echo "#pragma pp:spaceout"
1110da2e3ebdSchin		;;
1111da2e3ebdSchin	esac
1112da2e3ebdSchin	;;
1113da2e3ebdSchinesac
1114da2e3ebdSchincase $truncate in
1115da2e3ebdSchin?*)	echo "#pragma pp:truncate $truncate" ;;
1116da2e3ebdSchinesac
1117da2e3ebdSchincase $zeof in
1118da2e3ebdSchin?*)	echo "#pragma pp:zeof" ;;
1119da2e3ebdSchinesac
1120da2e3ebdSchincase $dollar in
1121da2e3ebdSchin1)	echo '#pragma pp:id "$"' ;;
1122da2e3ebdSchinesac
1123da2e3ebdSchincdir=-I+C
1124da2e3ebdSchinhdir=-I+H
1125da2e3ebdSchinset x $stdinclude
1126da2e3ebdSchinwhile	:
1127da2e3ebdSchindo	shift
1128da2e3ebdSchin	case $# in
1129da2e3ebdSchin	0)	break ;;
1130da2e3ebdSchin	esac
1131da2e3ebdSchin	case $1 in
1132da2e3ebdSchin	$cdir|$hdir)
1133da2e3ebdSchin		;;
1134da2e3ebdSchin	-I+C)	cdir=$1
1135da2e3ebdSchin		echo "#pragma pp:nocdir"
1136da2e3ebdSchin		;;
1137da2e3ebdSchin	-I-C)	cdir=$1
1138da2e3ebdSchin		echo "#pragma pp:cdir"
1139da2e3ebdSchin		;;
1140da2e3ebdSchin	-I+H)	hdir=$1
1141da2e3ebdSchin		echo "#pragma pp:nohostdir"
1142da2e3ebdSchin		;;
1143da2e3ebdSchin	-I-H)	hdir=$1
1144da2e3ebdSchin		echo "#pragma pp:hostdir"
1145da2e3ebdSchin		;;
1146da2e3ebdSchin	-I*)	;;
1147da2e3ebdSchin	*)	echo "#pragma pp:include \"$1\""
1148da2e3ebdSchin		;;
1149da2e3ebdSchin	esac
1150da2e3ebdSchindone
1151da2e3ebdSchincase $usrinclude in
1152da2e3ebdSchin/usr/include)
1153da2e3ebdSchin	;;
1154da2e3ebdSchin?*)	echo "#pragma pp:standard \"$usrinclude\""
1155da2e3ebdSchin	;;
1156da2e3ebdSchinesac
1157da2e3ebdSchincase $plusplus in
1158da2e3ebdSchin?*)	case $usrinclude in
1159da2e3ebdSchin	?*)	if	grep plusplus $usrinclude/ctype.h >/dev/null 2>&1
1160da2e3ebdSchin		then	echo '#pragma pp:nocdir "-"'
1161da2e3ebdSchin		fi
1162da2e3ebdSchin		;;
1163da2e3ebdSchin	esac
1164da2e3ebdSchin	;;
1165da2e3ebdSchinesac
1166da2e3ebdSchincase $mapinclude in
1167da2e3ebdSchin?*)	echo "#pragma pp:mapinclude hosted$mapinclude" ;;
1168da2e3ebdSchinesac
1169da2e3ebdSchincase $linefile in
1170da2e3ebdSchin?*)	echo "#pragma pp:linefile" ;;
1171da2e3ebdSchinesac
1172da2e3ebdSchincase $lineid in
1173da2e3ebdSchin?*)	echo "#pragma pp:lineid line" ;;
1174da2e3ebdSchinesac
1175da2e3ebdSchincase $linetype in
1176da2e3ebdSchin1)	echo "#pragma pp:linetype" ;;
1177da2e3ebdSchin?*)	echo "#pragma pp:linetype $linetype" ;;
1178da2e3ebdSchinesac
1179da2e3ebdSchincase $allmultiple in
1180da2e3ebdSchin"")	echo "#pragma pp:noallmultiple" ;;
1181da2e3ebdSchinesac
1182da2e3ebdSchincase $defincl in
1183da2e3ebdSchin1)	echo '#pragma pp:map "/#(pragma )?defincl>/"' ;;
1184da2e3ebdSchinesac
1185da2e3ebdSchincase $eject in
1186da2e3ebdSchin1)	echo '#pragma pp:map "/#(pragma )?eject>/"' ;;
1187da2e3ebdSchinesac
1188da2e3ebdSchincase $elseif in
1189da2e3ebdSchin1)	echo "#pragma pp:elseif" ;;
1190da2e3ebdSchinesac
1191da2e3ebdSchincase $headerexpand in
1192da2e3ebdSchin1)	echo "#pragma pp:headerexpand" ;;
1193da2e3ebdSchinesac
1194da2e3ebdSchincase $headerexpandall in
1195da2e3ebdSchin1)	echo "#pragma pp:headerexpandall" ;;
1196da2e3ebdSchinesac
1197da2e3ebdSchincase $ident in
1198da2e3ebdSchin1)	echo '#pragma pp:map "/#(pragma )?ident>/" "/#(pragma )?/###/"' ;;
1199da2e3ebdSchin*)	echo '#pragma pp:map "/#(pragma )?ident>/"' ;;
1200da2e3ebdSchinesac
1201da2e3ebdSchincase $import in
1202da2e3ebdSchin1)	echo '#pragma pp:map "/#(pragma )?import>/" "/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/"
1203da2e3ebdSchin#macdef __STDPP__IMPORT__(x)
1204da2e3ebdSchin#pragma pp:noallmultiple
1205da2e3ebdSchin#include x
1206da2e3ebdSchin#pragma pp:allmultiple
1207da2e3ebdSchin#endmac' ;;
1208da2e3ebdSchinesac
1209da2e3ebdSchincase $include_next in
1210da2e3ebdSchin1)	echo '#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"' ;;
1211da2e3ebdSchinesac
1212da2e3ebdSchinecho '#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"'
1213da2e3ebdSchinecho '#pragma pp:map "/#(pragma )?sccs>/"'
1214da2e3ebdSchin
1215da2e3ebdSchincase $stdc:$spaceout in
1216da2e3ebdSchin1:)	case ' '$reserved' ' in
1217da2e3ebdSchin	*' 'asm' '*|*' 'asm=*)
1218da2e3ebdSchin		echo "#macdef asm"
1219da2e3ebdSchin		echo "#pragma pp:spaceout"
1220da2e3ebdSchin		echo "#undef asm"
1221da2e3ebdSchin		echo "asm"
1222da2e3ebdSchin		echo "#endmac"
1223da2e3ebdSchin		;;
1224da2e3ebdSchin	esac
1225da2e3ebdSchin	;;
1226da2e3ebdSchinesac
1227da2e3ebdSchin
1228da2e3ebdSchinif	$cc -E preinc.$src > preinc.out
1229da2e3ebdSchinthen	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`
1230da2e3ebdSchin	do	case $f in
1231da2e3ebdSchin		*preinc.$src*)
1232da2e3ebdSchin			;;
1233da2e3ebdSchin		*)	echo "#include <$f>"
1234da2e3ebdSchin			;;
1235da2e3ebdSchin		esac
1236da2e3ebdSchin	done
1237da2e3ebdSchinfi
1238