xref: /onnv-gate/usr/src/lib/libpp/common/pp.probe (revision 10898:1883b621b3ea)
14887Schin:
24887Schin# Glenn Fowler
34887Schin# AT&T Research
44887Schin#
5*10898Sroland.mainz@nrubsig.org# @(#)pp.probe (AT&T Research) 2009-02-02
64887Schin#
74887Schin# C probe for libpp
84887Schin#
94887Schin# NOTE: C.probe must be included or .'d here
104887Schin#
114887Schin
124887Schinppdef=$dir/pp.def
134887Schinppkey=$dir/pp.key
144887Schinppsym=$dir/ppsym
154887Schinfor f in $ppdef $ppkey $ppsym
164887Schindo	test -f $f || { echo "$0: $f: not found" >&4; exit 1 ;}
174887Schindone
184887Schin
194887Schinsed -e "/^#/d" -e "s/[ 	].*//" < $ppdef > all.pp
204887Schin
214887Schinsystem=
224887Schinrelease=
234887Schinversion=
244887Schinarchitecture=
254887Schincpu=
264887Schinmodel=
274887Schinmachine=
28*10898Sroland.mainz@nrubsig.orgundef_predef=
294887Schin
304887Schin#
314887Schin# path cleanup
324887Schin#
334887Schin
344887Schinfor i in stdinclude usrinclude
354887Schindo	eval o='$'$i
364887Schin	v=$o
374887Schin	case $v in
384887Schin	*//*)	v=`echo $v | sed 's,///*,/,g'` ;;
394887Schin	esac
404887Schin	if	(test . -ef "`pwd`")
414887Schin	then	k=
424887Schin		for x in $v
434887Schin		do	case $x in
444887Schin			*/../*|*/..)
454887Schin				case $x in
464887Schin				/*)	a=/ ;;
474887Schin				*)	a= ;;
484887Schin				esac
494887Schin				IFS=/
504887Schin				set '' $x
514887Schin				IFS=$ifs
524887Schin				r=
534887Schin				for d
544887Schin				do	r="$d $r"
554887Schin				done
564887Schin				p=
574887Schin				g=
584887Schin				for d in $r
594887Schin				do	case $d in
604887Schin					..)	g="$g $d" ;;
614887Schin					*)	case $g in
624887Schin						'')	case $p in
634887Schin							'')	p=$d ;;
644887Schin							*)	p=$d/$p ;;
654887Schin							esac
664887Schin							;;
674887Schin						*)	set $g
684887Schin							shift
694887Schin							g=$*
704887Schin							;;
714887Schin						esac
724887Schin						;;
734887Schin					esac
744887Schin				done
754887Schin				case $a in
764887Schin				'')	for d in $g
774887Schin					do	p=$d/$p
784887Schin					done
794887Schin					;;
804887Schin				*)	p=$a$p
814887Schin					;;
824887Schin				esac
834887Schin				case $p in
844887Schin				/)	continue ;;
854887Schin				esac
864887Schin				test $x -ef $p && x=$p
874887Schin				;;
884887Schin			esac
894887Schin			k="$k $x"
904887Schin		done
914887Schin		set '' $k
924887Schin		shift
934887Schin		v=$1
944887Schin		case $# in
954887Schin		0)	;;
964887Schin		*)	shift
974887Schin			while	:
984887Schin			do	case $# in
994887Schin				0)	break ;;
1004887Schin				esac
1014887Schin				k=
1024887Schin				for d
1034887Schin				do	for j in $v
1044887Schin					do	test $d -ef $j && continue 2
1054887Schin					done
1064887Schin					k="$k $d"
1074887Schin				done
1084887Schin				set '' $k
1094887Schin				case $# in
1104887Schin				1)	break ;;
1114887Schin				esac
1124887Schin				shift
1134887Schin				v="$v $1"
1144887Schin				shift
1154887Schin			done
1164887Schin			;;
1174887Schin		esac
1184887Schin	fi
1194887Schin	case $v in
1204887Schin	$o)	;;
1214887Schin	*)	eval $i='$'v ;;
1224887Schin	esac
1234887Schindone
1244887Schin
1254887Schinid="::IDENT::`date`::IDENT::"
1264887Schinecho '#assert test(ok)
1274887Schin#if #test(ok)
1284887Schin#else
1294887Schin(
1304887Schin#endif' > assert.$src
1314887Schinecho '#ifdef __BASE_FILE__
1324887Schinint ok;
1334887Schin#else
1344887Schin(
1354887Schin#endif' > basefile.$src
1364887Schincat > catlit1.i <<'!'
1374887Schinchar test[] = "te"
1384887Schin"st";
1394887Schin!
1404887Schincat > catlit2.i <<'!'
1414887Schinchar test[] = "te\
1424887Schinst";
1434887Schin!
1444887Schinecho '#define g(a,b) a ## b
1454887Schinvolatile int a;
1464887Schinconst int g(x,y)=1;
1474887Schinextern int c(int);' > compat.$src
1484887Schinecho > cpp.$src
1494887Schinecho "#defincl <x.h>" > defincl.$src
1504887Schinecho 'int a$b;' > dollar.$src
1514887Schinecho "#eject" > eject.$src
1524887Schinecho "#if 0
1534887Schin(
1544887Schin#else if 1
1554887Schinint x;
1564887Schin#else
1574887Schin(
1584887Schin#endif" > elseif.$src
1594887Schinecho "#define _CAT(a,b,c) a##b##c
1604887Schin#define hdra	hdrx
1614887Schin#define hdr	_CAT(<,hdra,.h>)
1624887Schin#include hdr" > hdra.$src
1634887Schinecho "#define _XAT(a,b,c) a##b##c
1644887Schin#define _CAT(a,b,c) _XAT(a,b,c)
1654887Schin#define hdra	hdrx
1664887Schin#define hdr	_CAT(<,hdra,.h>)
1674887Schin#include hdr" > hdrx.$src
1684887Schinecho "int f(){return 0;}" > hdrx.h
1694887Schinecho "#ident \"$id\"" > ident.$src
1704887Schinecho "#import \"import.h\"" > import.$src
1714887Schinecho "int aaa;" > import.h
1724887Schinecho "#include <inc_next.h>" > inc_next.$src
1734887Schinmkdir inc0 inc1
1744887Schinecho "#include_next <inc_next.h>" > inc0/inc_next.h
1754887Schinecho 'char s[] = "INCLUDE_NEXT";' > inc1/inc_next.h
1764887Schinecho '# 1 "linefile.i"
1774887Schin
1784887Schin# 1 "linefile.i"
1794887Schin
1804887Schinint i;' > linefile1.i
1814887Schinecho '# 1 "linefile.i"
1824887Schin
1834887Schin# 1
1844887Schin
1854887Schinint i;' > linefile2.i
1864887Schinecho "int i = 0;" > lineid1.i
1874887Schinecho '# 1 "t.c"
1884887Schinint i = 0;' > lineid2.i
1894887Schinecho '# 1 "t.c"
1904887Schinint i = 0;' > lineid3.$src
1914887Schinecho "#include <stdio.h>" > linetype.$src
1924887Schinecho '#include <sys/types.h>
1934887Schinmain()
1944887Schin{
1954887Schin	return sizeof(LONGLONG) != 8;
1964887Schin}' > longlong.$src
1974887Schinecho '#include "once.h"
1984887Schin#include "once.h"' > once.$src
1994887Schinecho '#ifdef once
2004887Schinallmultiple
2014887Schin#else
2024887Schin#define once
2034887Schin#endif' > once.h
2044887Schinecho "extern int a,b;int f(){return a + = b;}" > opspace.$src
2054887Schinecho "int f(){return(0);} // ((" > pluscom.$src
2064887Schinecho "class x {int n;} m;" > plusplus.$src
2074887Schinecho > preinc.$src
2084887Schinecho '// splice \
2094887Schin(
2104887Schinint x = 1;' > plusspl.$src
2114887Schinecho "int stdc_default_value = __STDC__ ;" > stdc.$src
2124887Schinecho 'char xxx[] = "abc
2134887Schin(";' > span.$src
2144887Schinecho '#define g(a,b) a\
2154887Schinb
2164887Schinint ab,xy;
2174887Schin#define xy XY
2184887Schinchar* g(x,y);' > splice.$src
2194887Schin{
2204887Schinecho 'int a\                        '
2214887Schinecho 'b = 1;'
2224887Schin} > splicesp.$src
2234887Schinecho '#define g(a,b) a/**/b
2244887Schinint g(x,y)=1;' > trans.$src
2254887Schinecho '#define m 65
2264887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 65
2274887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 64
2284887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63
2294887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 62
2304887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 61
2314887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 60
2324887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 59
2334887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 58
2344887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57
2354887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 56
2364887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 55
2374887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 54
2384887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53
2394887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 52
2404887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 51
2414887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 50
2424887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 49
2434887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 48
2444887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 47
2454887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 46
2464887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 45
2474887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 44
2484887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43
2494887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 42
2504887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 41
2514887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 40
2524887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 39
2534887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 38
2544887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 37
2554887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 36
2564887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 35
2574887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 34
2584887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33
2594887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32
2604887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 31
2614887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 30
2624887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 29
2634887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxxx 28
2644887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxxx 27
2654887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxxx 26
2664887Schin#define xxxxxxxxxxxxxxxxxxxxxxxxx 25
2674887Schin#define xxxxxxxxxxxxxxxxxxxxxxxx 24
2684887Schin#define xxxxxxxxxxxxxxxxxxxxxxx 23
2694887Schin#define xxxxxxxxxxxxxxxxxxxxxx 22
2704887Schin#define xxxxxxxxxxxxxxxxxxxxx 21
2714887Schin#define xxxxxxxxxxxxxxxxxxxx 20
2724887Schin#define xxxxxxxxxxxxxxxxxxx 19
2734887Schin#define xxxxxxxxxxxxxxxxxx 18
2744887Schin#define xxxxxxxxxxxxxxxxx 17
2754887Schin#define xxxxxxxxxxxxxxxx 16
2764887Schin#define xxxxxxxxxxxxxxx 15
2774887Schin#define xxxxxxxxxxxxxx 14
2784887Schin#define xxxxxxxxxxxxx 13
2794887Schin#define xxxxxxxxxxxx 12
2804887Schin#define xxxxxxxxxxx 11
2814887Schin#define xxxxxxxxxx 10
2824887Schin#define xxxxxxxxx 9
2834887Schin#define xxxxxxxx 8
2844887Schin#define xxxxxxx 7
2854887Schin#define xxxxxx 6
2864887Schin#define xxxxx 5
2874887Schin#define xxxx 4
2884887Schin#define xxx 3
2894887Schin#define xx 2
2904887Schin#define x 1
2914887Schin#if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx != m
2924887Schinxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2934887Schin#endif' > truncate.$src
2944887Schincat > zeof.c <<'!'
2954887Schinchar* foo = "az";
2964887Schin!
2974887Schin
2984887Schinallmultiple=
2994887Schinassert=
3004887Schinbasefile=
3014887Schincompatibility=1
3024887Schindefincl=
3034887Schindollar=
3044887Schineject=
3054887Schinelseif=
3064887Schinheaderexpand=
3074887Schinheaderexpandall=
3084887Schinhostedtransition=
3094887Schinident=
3104887Schinimport=
3114887Schininclude_next=
3124887Schinlinefile=
3134887Schinlineid=
3144887Schinlinetype=
3154887Schinnocatliteral=
3164887Schinopspace=
3174887Schinpluscom=
3184887Schinplusplus=
3194887Schinplussplice=
3204887Schinredef=
3214887Schinreguard=
3224887Schinreserved=
3234887Schinspaceout=
3244887Schinsplicecat=
3254887Schinsplicespace=
3264887Schinstrict=
3274887Schinstringspan=
3284887Schintransition=
3294887Schintruncate=
3304887Schinzeof=
3314887Schin
3324887Schin$cc -c assert.$src && assert=1
3334887Schin
3344887Schin$cc -c basefile.$src && basefile=__BASE_FILE__
3354887Schin
3364887Schinif	$cc -E defincl.$src
3374887Schinthen	case "`$cc -E defincl.$src | grep -c 'defincl'`" in
3384887Schin	0)	defincl=1 ;;
3394887Schin	esac
3404887Schinfi
3414887Schin
3424887Schinif	$cc -c catlit1.i 2>e
3434887Schinthen	if	$cc -c catlit2.i 2>f
3444887Schin	then	if	test `wc -c < f` -gt `wc -c < e`
3454887Schin		then	nocatliteral=1
3464887Schin		fi
3474887Schin	else	nocatliteral=1
3484887Schin	fi
3494887Schinfi
3504887Schin
3514887Schin$cc -c dollar.$src && dollar=1
3524887Schin
3534887Schin$cc -c elseif.$src && elseif=1
3544887Schin
3554887Schinif	$cc -I. -c hdra.$src
3564887Schinthen	headerexpandall=1
3574887Schinelif	$cc -I. -c hdrx.$src
3584887Schinthen	headerexpand=1
3594887Schinfi
3604887Schin
3614887Schinif	$cc -E eject.$src
3624887Schinthen	case "`$cc -E eject.$src | grep -c 'eject'`" in
3634887Schin	0)	eject=1 ;;
3644887Schin	esac
3654887Schinfi
3664887Schin
3674887Schin$cc -S ident.$src && grep "$id" ident.s && ident=1
3684887Schin
3694887Schin{ $cc -E import.$src | grep aaa ;} && import=1
3704887Schin
3714887Schin{ $cc -E -Iinc0 -Iinc1 inc_next.$src | grep INCLUDE_NEXT ;} && include_next=1
3724887Schin
3734887Schinif	$cc -c linefile1.i
3744887Schinthen	$cc -c linefile2.i
3754887Schin	case $? in
3764887Schin	0)	;;
3774887Schin	*)	linefile=1 ;;
3784887Schin	esac
3794887Schinfi
3804887Schin
3814887Schinif	$cc -c lineid1.i 2>b
3824887Schinthen	$cc -c lineid2.i 2>e
3834887Schin	c=$?
3844887Schinelse	$cc -c lineid3.c 2>e
3854887Schin	c=$?
3864887Schinfi
3874887Schincase $c in
3884887Schin0)	case `wc -l < b` in
3894887Schin	`wc -l < e`)	;;
3904887Schin	*)		lineid=line ;;
3914887Schin	esac
3924887Schin	;;
3934887Schin*)	lineid=line
3944887Schin	;;
3954887Schinesac
3964887Schin
3974887Schinif	$cc -E linetype.$src | grep '^[ 	]*#[ 	]*[0123456789]*[ 	]*".*"[ 	]*[12]' > linetype
3984887Schinthen	if	grep '^[ 	]*#[ 	]*[0123456789]*[ 	]*".*"[ 	]*[12][ 	][ 	]*3' linetype
3994887Schin	then	linetype=2
4004887Schin	else	linetype=1
4014887Schin	fi
4024887Schinfi
4034887Schin
4044887Schin{ $cc -E once.$src | grep allmultiple ;} && allmultiple=1
4054887Schin
4064887Schin$cc -c plusplus.$src && plusplus=1
4074887Schin
4084887Schin$cc -c span.$src && stringspan=1
4094887Schin
4104887Schin$cc -c splice.$src && splicecat=1
4114887Schin
4124887Schin$cc -c splicesp.$src && splicespace=1
4134887Schin
4144887Schinexec < $ppkey
4154887Schinwhile	read keyword type alternate comment
4164887Schindo	case $keyword in
4174887Schin	.)	break ;;
4184887Schin	""|"#")	continue ;;
4194887Schin	esac
4204887Schin	case $type in
4214887Schin	""|".")	type= ;;
4224887Schin	*)	type="=$type" ;;
4234887Schin	esac
4244887Schin	for pre in '' _ __
4254887Schin	do	for suf in '' _ __
4264887Schin		do	case $suf in
4274887Schin			'')	sep= ;;
4284887Schin			*)	sep=. ;;
4294887Schin			esac
4304887Schin			case ,,$alternate, in
4314887Schin			*,$pre$sep$suf,*)
4324887Schin				key=$pre$keyword$suf
4334887Schin				undef="$undef $key"
4344887Schin				echo "int f(){
4354887Schin	int	$key = 0;
4364887Schin	return $key;
4374887Schin}
4384887Schin#undef	$key
4394887Schinint g(){
4404887Schin	int	$key = 0;
4414887Schin	return $key;
4424887Schin}" > key.$src
4434887Schin				$cc -c key.$src >/dev/null 2>&1 || reserved="$reserved $key$type"
4444887Schin				;;
4454887Schin			esac
4464887Schin		done
4474887Schin	done
4484887Schindone
4494887Schin
4504887Schin$cc -c opspace.$src && opspace=1
4514887Schin
4524887Schincase $plusplus in
4534887Schin"")	$cc -c compat.$src && compatibility=
4544887Schin	$cc -c pluscom.$src && pluscom=1
4554887Schin	;;
4564887Schinesac
4574887Schincase $plusplus$pluscom in
4584887Schin?*)	$cc -c plusspl.$src || plussplice=1 ;;
4594887Schinesac
4604887Schincase $plusplus in
4614887Schin?*)	mkdir reguard
4624887Schin	cd reguard
4634887Schin	echo '#include "ptrone.h"
4644887Schin#include "ptrdef.h"
4654887Schinint main () { return gt(2,1) + gt(2.0,1.0); }' > ptr.$src
4664887Schin	echo '#include "ptrone.h"
4674887Schintemplate<class T> int gt(T a, T b) { return a > b; }' > ptrdef.$src
4684887Schin	echo 'template<class T> int gt(T a, T b);' > ptrdef.h
4694887Schin	echo '/* empty */' > ptrone.h
4704887Schin	if	$cc -E ptr.$src > x.i && $cc x.i
4714887Schin	then	echo '#ifndef _PTRONE_H
4724887Schin#define _PTRONE_H
4734887Schinstatic int xxx;
4744887Schin#endif' > ptrone.h
4754887Schin		if	$cc -E ptr.$src > x.i && echo "#define _PTRONE_H" >> x.i && $cc x.i
4764887Schin		then	reguard=1
4774887Schin		fi
4784887Schin	fi
4794887Schin	cd ..
4804887Schin	rm -rf reguard
4814887Schin	;;
4824887Schinesac
4834887Schin
4844887Schinstdc=`$cc -E stdc.$src | sed -e '/stdc_default_value/!d' -e 's/.*=[ 	]*//' -e 's/[ 	]*;.*//'`
4854887Schincase $stdc in
4864887Schin0)		$cc -c trans.$src && transition=1 ;;
4874887Schin[0123456789]*)	;;
4884887Schin*)		stdc= ;;
4894887Schinesac
4904887Schin
4914887Schintruncate=`$cc -E truncate.$src | grep '^[ 	]*[0123456789]'`
4924887Schin$cc -c zeof.c || zeof=1
4934887Schin
4944887Schinecho "$predef" >> all.pp
4954887Schin{
4964887Schin	case $ppopt$ppenv in
4974887Schin	?*)	ppcmd=cpp
4984887Schin		ppdir=.
4994887Schin		eval $ppenv '$'cc -Dmycpp -E '$'ppopt cpp.$src
5004887Schin		;;
5014887Schin	esac
5024887Schin	eval set x $probe_verbose
5034887Schin	shift
5044887Schin	x=
5054887Schin	for o in "$@"
5064887Schin	do	set x `$cc $o -c cpp.$src 2>&1`
5074887Schin		while	:
5084887Schin		do	shift
5094887Schin			case $# in
5104887Schin			0)	break ;;
5114887Schin			esac
5124887Schin			case $1 in
5134887Schin			*[\\/]rm)
5144887Schin				;;
5154887Schin			[\\/]*)	case " $x " in
5164887Schin				*" $1 "*)	;;
5174887Schin				*)		test -x $1 && x="$x $1" ;;
5184887Schin				esac
5194887Schin				;;
5204887Schin			esac
5214887Schin		done
5224887Schin		case $x in
5234887Schin		?*)	for f in $x
5244887Schin			do	cp $f x && chmod u+w x && strip x && f=x
5254887Schin				$ppsym < $f
5264887Schin			done
5274887Schin			break
5284887Schin			;;
5294887Schin		esac
5304887Schin	done
5314887Schin} 3>&- 3>&1 >/dev/null |
5324887Schin	sed -e '/^ppsymbol$/d' -e '/^.$/d' -e '/^..$/d' -e '/[ABCDEFGHIJKLMNOPQRSTUVWXYZ].*[abcdefghijklmnopqrstuvwxyz]/d' -e '/[abcdefghijklmnopqrstuvwxyz].*[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/d' |
5334887Schin	cat - all.pp |
5344887Schin	sort -u |
5354887Schin	{
5364887Schin	for i in 0 1 2 3 4 5
5374887Schin	do	echo "struct { char* name; long value; } predef[] = {" > cpp$i.$src
5384887Schin	done
5394887Schin	while read sym junk
5404887Schin	do	case $sym in
5414887Schin		_*)	set 0 ${sym}
5424887Schin			;;
5434887Schin		*_)	continue
5444887Schin			;;
5454887Schin		[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
5464887Schin			set 1 ${sym} 2 _${sym} 3 _${sym}_ 4 __${sym} 5 __${sym}__
5474887Schin			;;
5484887Schin		*)	continue
5494887Schin			;;
5504887Schin		esac
5514887Schin		while	:
5524887Schin		do	case $# in
5534887Schin			0|1)	break ;;
5544887Schin			esac
5554887Schin			{
5564887Schin			echo "#ifdef $2"
5574887Schin			echo "\"$2\" , (long) $2 -1,"
5584887Schin			echo "#endif"
5594887Schin			} >> cpp$1.$src
5604887Schin			shift
5614887Schin			shift
5624887Schin		done
5634887Schin	done
5644887Schin	for i in 0 1 2 3 4 5
5654887Schin	do	echo "\"\", 0 };" >> cpp$i.$src
5664887Schin	done
5674887Schin	}
5684887Schinpreval="`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 =/'`"
5694887Schin
5704887Schinfor i in bufld namei quota reboot utsname vfs
5714887Schindo	echo "#include <sys/$i.h>" > t.$src
5724887Schin	if	$cc -E t.$src
5734887Schin	then	x=1
5744887Schin	else	x=0
5754887Schin	fi
5764887Schin	eval sys_$i=$x
5774887Schindone
5784887Schin
579*10898Sroland.mainz@nrubsig.orgecho "char* fun() { return (char*)__FUNCTION__; }
580*10898Sroland.mainz@nrubsig.orgint main() { return !fun(); }" > fun.$src
581*10898Sroland.mainz@nrubsig.orgrm -f fun.exe
582*10898Sroland.mainz@nrubsig.orgif	$cc -o fun.exe fun.$src && test -x fun.exe
583*10898Sroland.mainz@nrubsig.orgthen	undef_predef="$undef_predef __FUNCTION__"
584*10898Sroland.mainz@nrubsig.orgfi
585*10898Sroland.mainz@nrubsig.org
5864887Schincase "`grep -c '__STDC__[-0 	]*[=!]=[ 	]*0' $usrinclude/stdio.h 2>/dev/null`" in
5874887Schin0)	;;
5884887Schin*)	hostedtransition=1 ;;
5894887Schinesac
5904887Schin
5914887Schinmapinclude=
5924887Schinfor i in builtins
5934887Schindo	echo "#include <$i.h>" > t.$src
5944887Schin	if	$cc -E t.$src
5954887Schin	then	mapinclude="$mapinclude <$i.h>=\".\""
5964887Schin	fi
5974887Schindone
5984887Schin
5994887Schin#
6004887Schin# the payoff
6014887Schin#
6024887Schin
6034887Schinexec >&3
6044887Schin
6054887Schincase "$compatibility:$transition:$dollar" in
6064887Schin::)	strict=1 ;;
6074887Schinesac
6084887Schincase $version_stamp in
6094887Schin?*)	echo "/* $version_stamp" ;;
6104887Schin*)	echo "/* $cc" ;;
6114887Schinesac
6124887Schinecho "*/"
6134887Schincase $plusplus:$stdc in
6144887Schin1:?*)	preval="$preval = __STDC__ $stdc ="
6154887Schin	redef="$redef __STDC__"
6164887Schin	;;
6174887Schinesac
6184887Schinppbuiltin=0
6194887Schinset x $preval
6204887Schinshift
6214887Schincase $# in
6224887Schin0)	;;
6234887Schin*)	echo
6244887Schin	echo "#pragma pp:predefined"
6254887Schin	predef=
6264887Schin	while	:
6274887Schin	do	case $# in
6284887Schin		0)	break ;;
6294887Schin		esac
6304887Schin		m=$1
6314887Schin		shift
6324887Schin		case $m in
6334887Schin		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
6344887Schin		*)	i=$m ;;
6354887Schin		esac
6364887Schin		predef="$predef
6374887Schin$i"
6384887Schin		eval predef_$i=0
6394887Schin		while	:
6404887Schin		do	case $1 in
6414887Schin			'=')	break ;;
6424887Schin			*)	shift ;;
6434887Schin			esac
6444887Schin		done
6454887Schin		while	:
6464887Schin		do	case $1 in
6474887Schin			'=')	shift ;;
6484887Schin			*)	break ;;
6494887Schin			esac
6504887Schin		done
6514887Schin	done
6524887Schin	for i in $undef
6534887Schin	do	case " $redef " in
6544887Schin		*" $i "*)	;;
6554887Schin		*)		eval predef_$i=3 ;;
6564887Schin		esac
6574887Schin	done
6584887Schin	set $preval
6594887Schin	while	:
6604887Schin	do	case $# in
6614887Schin		0)	break ;;
6624887Schin		esac
6634887Schin		m=$1
6644887Schin		shift
6654887Schin		case $m in
6664887Schin		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
6674887Schin		*)	i=$m ;;
6684887Schin		esac
6694887Schin		case $i in
6704887Schin		'=')	continue ;;
6714887Schin		esac
6724887Schin		v=
6734887Schin		while	:
6744887Schin		do	case $1 in
6754887Schin			'=')	break ;;
6764887Schin			esac
6774887Schin			v="$v $1"
6784887Schin			shift
6794887Schin		done
6804887Schin		while	:
6814887Schin		do	case $1 in
6824887Schin			'=')	shift ;;
6834887Schin			*)	break ;;
6844887Schin			esac
6854887Schin		done
6864887Schin		case $i in
6874887Schin		__LCC__)strict=2 ;;
6884887Schin		_*)	;;
6894887Schin		*)	eval j=\$predef_$i
6904887Schin			case $j in
6914887Schin			0)	eval predef_$i=1
6924887Schin				echo "#define $m$v"
6934887Schin				case $strict in
6944887Schin				1)	strict= ;;
6954887Schin				esac
6964887Schin				;;
6974887Schin			esac
6984887Schin			;;
6994887Schin		esac
7004887Schin	done
7014887Schin	nopredef=0
7024887Schin	while	:
7034887Schin	do	set $preval
7044887Schin		while	:
7054887Schin		do	case $# in
7064887Schin			0)	break ;;
7074887Schin			esac
7084887Schin			m=$1
7094887Schin			shift
7104887Schin			case $m in
7114887Schin			*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
7124887Schin			*)	i=$m ;;
7134887Schin			esac
7144887Schin			v=
7154887Schin			while	:
7164887Schin			do	case $1 in
7174887Schin				'=')	break ;;
7184887Schin				esac
7194887Schin				v="$v $1"
7204887Schin				shift
7214887Schin			done
7224887Schin			while	:
7234887Schin			do	case $1 in
7244887Schin				'=')	shift ;;
7254887Schin				*)	break ;;
7264887Schin				esac
7274887Schin			done
7284887Schin			case $nopredef in
7294887Schin			2)	;;
7304887Schin			*)	case $v in
7314887Schin				' '*' '*)
7324887Schin					nopredef=1
7334887Schin					continue
7344887Schin					;;
7354887Schin				' '[0123456789]*|' '"'"*"'"*)
7364887Schin					;;
7374887Schin				*)	case $1 in
7384887Schin					_*)	;;
7394887Schin					*)	nopredef=1
7404887Schin						continue
7414887Schin						;;
7424887Schin					esac
7434887Schin					;;
7444887Schin				esac
7454887Schin				;;
7464887Schin			esac
7474887Schin			eval j=\$predef_$i
7484887Schin			case $j in
7494887Schin			0)	case $ppbuiltin in
7504887Schin				2)	echo "#pragma pp:builtin"
7514887Schin					ppbuiltin=1
7524887Schin					;;
7534887Schin				esac
7544887Schin				eval predef_$i=2
7554887Schin				echo "#define $m$v"
7564887Schin				;;
7574887Schin			1)	case $m in
7584887Schin				$i)	eval predef_$i=2
7594887Schin					eval j=\$predef___${i}__
7604887Schin					case $j in
7614887Schin					[12])	;;
7624887Schin					*)	case $ppbuiltin in
7634887Schin						2)	echo "#pragma pp:builtin"
7644887Schin							ppbuiltin=1
7654887Schin							;;
7664887Schin						esac
7674887Schin						eval predef___${i}__=2
7684887Schin						echo "#define __${i}__$v"
7694887Schin						;;
7704887Schin					esac
7714887Schin					;;
7724887Schin				esac
7734887Schin				;;
7744887Schin			esac
7754887Schin		done
7764887Schin		case $nopredef in
7774887Schin		2)	break ;;
7784887Schin		esac
7794887Schin		echo "#pragma pp:nopredefined"
7804887Schin		case $nopredef in
7814887Schin		0)	break ;;
7824887Schin		esac
7834887Schin		ppbuiltin=2
7844887Schin		nopredef=2
7854887Schin	done
7864887Schin	;;
7874887Schinesac
7884887Schincase $basefile in
7894887Schin?*)	case $ppbuiltin in
7904887Schin	0|2)	ppbuiltin=1
7914887Schin		echo "#pragma pp:builtin"
7924887Schin		;;
7934887Schin	esac
7944887Schin	echo "#define $basefile	#(BASE)"
7954887Schin	;;
7964887Schinesac
7974887Schincase $ppbuiltin in
7984887Schin1)	echo "#pragma pp:nobuiltin" ;;
7994887Schinesac
8004887Schin
8014887Schineval set x $probe_longlong
8024887Schinshift
8034887Schinx=
8044887Schinfor o in "$@"
8054887Schindo	rm -f longlong.$exe
8064887Schin	if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
8074887Schin		./longlong.$exe
8084887Schin	then	x=1
8094887Schin		break
8104887Schin	fi
8114887Schindone
8124887Schincase $x in
8134887Schin'')	eval set x $probe_longlong_t
8144887Schin	shift
8154887Schin	for o in "$@"
8164887Schin	do	rm -f longlong.$exe
8174887Schin		if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
8184887Schin			./longlong.$exe
8194887Schin		then	echo "#define <long long> $o"
8204887Schin			break
8214887Schin		fi
8224887Schin	done
8234887Schin	;;
8244887Schinesac
8254887Schin
8264887Schinecho
8274887Schinfor i in `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*[0123456789][abcdefghijklmnopqrstuvwxyz0123456789]*\$/!d'` `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*\$/!d'`
8284887Schindo	case $i in
8294887Schin	*ix)	;;
8304887Schin	*)	architecture=$i
8314887Schin		break
8324887Schin		;;
8334887Schin	esac
8344887Schindone
8354887Schinfor i in `sed -e '/^#/d' -e '/:architecture:/!d' -e 's/[ 	].*//' < $ppdef`
8364887Schindo	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
8374887Schin	case $j in
8384887Schin	*" 2 "*)architecture=$i
8394887Schin		break
8404887Schin		;;
8414887Schin	esac
8424887Schindone
8434887Schinfor i in `sed -e '/^#/d' -e '/:machine:/!d' -e 's/[ 	].*//' < $ppdef`
8444887Schindo	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
8454887Schin	case $j in
8464887Schin	*" 2 "*)machine="$machine $i" ;;
8474887Schin	esac
8484887Schindone
8494887Schincase $sys_bufld$sys_reboot$sys_utsname in
8504887Schin1??)	release=research
8514887Schin	version=9
8524887Schin	;;
8534887Schin01?)	release=bsd
8544887Schin	case $sys_quota in
8554887Schin	0)	case $sys_vfs in
8564887Schin		0)	version=4.1
8574887Schin			;;
8584887Schin		esac
8594887Schin		;;
8604887Schin	1)	case $sys_namei in
8614887Schin		0)	version=4.2
8624887Schin			;;
8634887Schin		1)	version=4.3
8644887Schin			;;
8654887Schin		esac
8664887Schin		;;
8674887Schin	esac
8684887Schin	;;
8694887Schin001)	release=V
8704887Schin	;;
8714887Schinesac
8724887Schinfor i in `sed -e '/^#/d' -e '/:release:/!d' -e 's/[ 	].*//' < $ppdef`
8734887Schindo	eval j=\$predef_$i
8744887Schin	case $j in
8754887Schin	2)	release="$release $i" ;;
8764887Schin	esac
8774887Schindone
8784887Schinfor i in `sed -e '/^#/d' -e '/:system:/!d' -e 's/[ 	].*//' < $ppdef`
8794887Schindo	eval j=\$predef_$i
8804887Schin	case $j in
8814887Schin	2)	system="$system $i" ;;
8824887Schin	esac
8834887Schindone
8844887Schincase $release in
8854887Schintopix)	release="$release V"
8864887Schin	;;
8874887Schinesac
8884887Schincase $assert in
8894887Schin?*)	for i in $predef
8904887Schin	do	case $i in
8914887Schin		_*|*_)	;;
8924887Schin		*)	for p in architecture cpu machine system
8934887Schin			do	echo "#if #$p($i)
8944887Schineval \"case \\\" \$$p \\\" in *\\\" $i \\\"*) ;; *) $p=\\\"$i \$$p\\\" ;; esac\"
8954887Schin: avoid string literal concatenation
8964887Schin#endif"
8974887Schin			done
8984887Schin			;;
8994887Schin		esac
9004887Schin	done > t.$src
9014887Schin	eval "`$cc -E t.$src`"
9024887Schin	set x x $prepred
9034887Schin	while	:
9044887Schin	do	shift
9054887Schin		shift
9064887Schin		case $# in
9074887Schin		[01])	break ;;
9084887Schin		esac
9094887Schin		eval "
9104887Schin			case \" \$$1 \" in
9114887Schin			*\" $2 \"*) ;;
9124887Schin			*) $1=\"$2 \$$1\" ;;
9134887Schin			esac
9144887Schin		"
9154887Schin	done
9164887Schin	;;
9174887Schinesac
9184887Schincase $system in
9194887Schin"")	system=unix ;;
9204887Schinesac
9214887Schincase $architecture in
9224887Schinibm|uts|u370)	model=370
9234887Schin		architecture=ibm
9244887Schin		;;
9254887Schinm*68*)		architecture=m68000
9264887Schin		for i in $predef
9274887Schin		do	case $i in
9284887Schin			m*68*[123456789][0123456789])
9294887Schin				model=`echo $i | sed 's/.*\(..\)/\1/'`
9304887Schin				break
9314887Schin				;;
9324887Schin			esac
9334887Schin		done
9344887Schin		;;
9354887Schinu3b?*)		model=`echo $architecture | sed 's/u3b//'`
9364887Schin		architecture=3b
9374887Schin		;;
9384887Schinu3b)		case $model in
9394887Schin		"")	model=20 ;;
9404887Schin		esac
9414887Schin		architecture=3b
9424887Schin		;;
9434887Schinvax[0123456789]*)
9444887Schin		model=`echo $architecture | sed 's/vax//'`
9454887Schin		architecture=vax
9464887Schin		;;
9474887Schinhp[0123456789]*s[0123456789])
9484887Schin		case $release in
9494887Schin		[abcdefghijklmnopqrstuvwxyz]*.[abcdefghijklmnopqrstuvwxyz]*.*)
9504887Schin			version=$release
9514887Schin			release=V
9524887Schin			;;
9534887Schin		esac
9544887Schin		architecture="$architecture `echo $architecture | sed 's/s.*//'`"
9554887Schin		;;
9564887Schinesac
9574887Schincase $hosttype in
9584887Schin*.*)	i=`echo $hosttype | sed -e 's,.*\.,,'` ;;
9594887Schin*)	i=$hosttype ;;
9604887Schinesac
9614887Schincase $i in
9624887Schinunknown);;
9634887Schin?*)	case " $architecture " in
9644887Schin	*" $i "*) ;;
9654887Schin	*)	architecture="$architecture $i" ;;
9664887Schin	esac
9674887Schin	;;
9684887Schinesac
9694887Schincase $architecture in
9704887Schin"")	echo "$cc: warning: architecture not determined" >&4
9714887Schin	set x $machine
9724887Schin	architecture=$2
9734887Schin	;;
9744887Schinesac
9754887Schinecho "#define #hosttype($hosttype)"
9764887Schinfor i in $system
9774887Schindo	echo "#define #system($i)"
9784887Schindone
9794887Schincase $release in
9804887Schin"")	echo "#define #release()" ;;
9814887Schin*)	for i in $release
9824887Schin	do	echo "#define #release($i)"
9834887Schin		case $i in
9844887Schin		V)	echo "#define #release(system5)" ;; # compatibility
9854887Schin		esac
9864887Schin	done
9874887Schin	;;
9884887Schinesac
9894887Schinecho "#define #version($version)"
9904887Schincase $architecture in
9914887Schin"")	echo "#define #architecture()" ;;
9924887Schin*)	for i in `echo $architecture | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
9934887Schin	do	echo "#define #architecture($i)"
9944887Schin	done
9954887Schin	;;
9964887Schinesac
9974887Schinecho "#define #model($model)"
9984887Schincase $machine in
9994887Schin"")	case $architecture:$model in
10004887Schin	?*:?*)	set x $architecture; machine="$2/$model $architecture" ;;
10014887Schin	*)	machine=$architecture ;;
10024887Schin	esac
10034887Schin	;;
10044887Schin*)	machine="$machine $architecture"
10054887Schin	;;
10064887Schinesac
10074887Schincase $machine in
10084887Schin"")	echo "#define #machine()" ;;
10094887Schin*)	j=
10104887Schin	for i in `echo $machine | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
10114887Schin	do	case " $i " in
10124887Schin		*" $j "*)
10134887Schin			;;
10144887Schin		*)	j="$j $i"
10154887Schin			echo "#define #machine($i)"
10164887Schin			;;
10174887Schin		esac
10184887Schin	done
10194887Schin	;;
10204887Schinesac
10214887Schinfor i in $cpu
10224887Schindo	echo "#define #cpu($i)"
10234887Schindone
10244887Schinecho "#define #addressing()"
10254887Schinfor i in $ATTRIBUTES
10264887Schindo	eval d=\$$i
10274887Schin	n=`echo $i | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
10284887Schin	echo "#define #$n($d)"
10294887Schindone
10304887Schincase $stdc in
10314887Schin?*)	echo "#define #dialect(ansi)" ;;
10324887Schinesac
10334887Schincase $plusplus in
10344887Schin?*)	echo "#define #dialect(C++)" ;;
10354887Schinesac
10364887Schincase $hosted in
10374887Schin"")	echo "#define #dialect(cross)" ;;
10384887Schinesac
10394887Schincase $so:$dynamic:$static in
10404887Schin::)	;;
10414887Schin*)	echo "#define #dialect(dynamic)" ;;
10424887Schinesac
10434887Schinecho
1044*10898Sroland.mainz@nrubsig.orgcase $undef_predef in
1045*10898Sroland.mainz@nrubsig.org?*)	for m in $undef_predef
1046*10898Sroland.mainz@nrubsig.org	do	echo "#undef	$m"
1047*10898Sroland.mainz@nrubsig.org	done
1048*10898Sroland.mainz@nrubsig.org	echo
1049*10898Sroland.mainz@nrubsig.org	;;
1050*10898Sroland.mainz@nrubsig.orgesac
10514887Schincase $plusplus in
10524887Schin?*)	echo "#pragma pp:plusplus" ;;
10534887Schinesac
10544887Schincase $reserved in
10554887Schin?*)	echo "#pragma pp:reserved" $reserved ;;
10564887Schinesac
10574887Schincase $nocatliteral in
10584887Schin?*)	echo "#pragma pp:nocatliteral" ;;
10594887Schinesac
10604887Schincase $opspace in
10614887Schin?*)	echo "#pragma pp:opspace" ;;
10624887Schinesac
10634887Schincase $pluscom in
10644887Schin?*)	echo "#pragma pp:pluscomment" ;;
10654887Schinesac
10664887Schincase $plussplice in
10674887Schin?*)	echo "#pragma pp:plussplice" ;;
10684887Schinesac
10694887Schincase $reguard in
10704887Schin?*)	echo "#pragma pp:reguard" ;;
10714887Schinesac
10724887Schincase $splicecat in
10734887Schin?*)	echo "#pragma pp:splicecat" ;;
10744887Schinesac
10754887Schincase $splicespace in
10764887Schin?*)	echo "#pragma pp:splicespace" ;;
10774887Schinesac
10784887Schincase $stringspan in
10794887Schin?*)	echo "#pragma pp:stringspan" ;;
10804887Schinesac
10814887Schincase $stdc in
10824887Schin"")	echo "#pragma pp:compatibility"
10834887Schin	;;
10844887Schin0)	echo "#pragma pp:transition"
10854887Schin	;;
10864887Schin1)	case $strict in
10874887Schin	?*)	echo "#pragma pp:strict" ;;
10884887Schin	esac
10894887Schin	;;
10904887Schinesac
10914887Schincase $hostedtransition in
10924887Schin1)	echo "#pragma pp:hostedtransition" ;;
10934887Schinesac
10944887Schincase $stdc in
10954887Schin?*)	case $ppopt$ppenv in
10964887Schin	"")	spaceout=1
10974887Schin		echo "#pragma pp:spaceout"
10984887Schin		;;
10994887Schin	esac
11004887Schin	;;
11014887Schinesac
11024887Schincase $truncate in
11034887Schin?*)	echo "#pragma pp:truncate $truncate" ;;
11044887Schinesac
11054887Schincase $zeof in
11064887Schin?*)	echo "#pragma pp:zeof" ;;
11074887Schinesac
11084887Schincase $dollar in
11094887Schin1)	echo '#pragma pp:id "$"' ;;
11104887Schinesac
11114887Schincdir=-I+C
11124887Schinhdir=-I+H
11134887Schinset x $stdinclude
11144887Schinwhile	:
11154887Schindo	shift
11164887Schin	case $# in
11174887Schin	0)	break ;;
11184887Schin	esac
11194887Schin	case $1 in
11204887Schin	$cdir|$hdir)
11214887Schin		;;
11224887Schin	-I+C)	cdir=$1
11234887Schin		echo "#pragma pp:nocdir"
11244887Schin		;;
11254887Schin	-I-C)	cdir=$1
11264887Schin		echo "#pragma pp:cdir"
11274887Schin		;;
11284887Schin	-I+H)	hdir=$1
11294887Schin		echo "#pragma pp:nohostdir"
11304887Schin		;;
11314887Schin	-I-H)	hdir=$1
11324887Schin		echo "#pragma pp:hostdir"
11334887Schin		;;
11344887Schin	-I*)	;;
11354887Schin	*)	echo "#pragma pp:include \"$1\""
11364887Schin		;;
11374887Schin	esac
11384887Schindone
11394887Schincase $usrinclude in
11404887Schin/usr/include)
11414887Schin	;;
11424887Schin?*)	echo "#pragma pp:standard \"$usrinclude\""
11434887Schin	;;
11444887Schinesac
11454887Schincase $plusplus in
11464887Schin?*)	case $usrinclude in
11474887Schin	?*)	if	grep plusplus $usrinclude/ctype.h >/dev/null 2>&1
11484887Schin		then	echo '#pragma pp:nocdir "-"'
11494887Schin		fi
11504887Schin		;;
11514887Schin	esac
11524887Schin	;;
11534887Schinesac
11544887Schincase $mapinclude in
11554887Schin?*)	echo "#pragma pp:mapinclude hosted$mapinclude" ;;
11564887Schinesac
11574887Schincase $linefile in
11584887Schin?*)	echo "#pragma pp:linefile" ;;
11594887Schinesac
11604887Schincase $lineid in
11614887Schin?*)	echo "#pragma pp:lineid line" ;;
11624887Schinesac
11634887Schincase $linetype in
11644887Schin1)	echo "#pragma pp:linetype" ;;
11654887Schin?*)	echo "#pragma pp:linetype $linetype" ;;
11664887Schinesac
11674887Schincase $allmultiple in
11684887Schin"")	echo "#pragma pp:noallmultiple" ;;
11694887Schinesac
11704887Schincase $defincl in
11714887Schin1)	echo '#pragma pp:map "/#(pragma )?defincl>/"' ;;
11724887Schinesac
11734887Schincase $eject in
11744887Schin1)	echo '#pragma pp:map "/#(pragma )?eject>/"' ;;
11754887Schinesac
11764887Schincase $elseif in
11774887Schin1)	echo "#pragma pp:elseif" ;;
11784887Schinesac
11794887Schincase $headerexpand in
11804887Schin1)	echo "#pragma pp:headerexpand" ;;
11814887Schinesac
11824887Schincase $headerexpandall in
11834887Schin1)	echo "#pragma pp:headerexpandall" ;;
11844887Schinesac
11854887Schincase $ident in
11864887Schin1)	echo '#pragma pp:map "/#(pragma )?ident>/" "/#(pragma )?/###/"' ;;
11874887Schin*)	echo '#pragma pp:map "/#(pragma )?ident>/"' ;;
11884887Schinesac
11894887Schincase $import in
11904887Schin1)	echo '#pragma pp:map "/#(pragma )?import>/" "/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/"
11914887Schin#macdef __STDPP__IMPORT__(x)
11924887Schin#pragma pp:noallmultiple
11934887Schin#include x
11944887Schin#pragma pp:allmultiple
11954887Schin#endmac' ;;
11964887Schinesac
11974887Schincase $include_next in
11984887Schin1)	echo '#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"' ;;
11994887Schinesac
12004887Schinecho '#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"'
12014887Schinecho '#pragma pp:map "/#(pragma )?sccs>/"'
12024887Schin
12034887Schincase $stdc:$spaceout in
12044887Schin1:)	case ' '$reserved' ' in
12054887Schin	*' 'asm' '*|*' 'asm=*)
12064887Schin		echo "#macdef asm"
12074887Schin		echo "#pragma pp:spaceout"
12084887Schin		echo "#undef asm"
12094887Schin		echo "asm"
12104887Schin		echo "#endmac"
12114887Schin		;;
12124887Schin	esac
12134887Schin	;;
12144887Schinesac
12154887Schin
12164887Schinif	$cc -E preinc.$src > preinc.out
12174887Schinthen	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`
12184887Schin	do	case $f in
12194887Schin		*preinc.$src*)
12204887Schin			;;
12214887Schin		*)	echo "#include <$f>"
12224887Schin			;;
12234887Schin		esac
12244887Schin	done
12254887Schinfi
1226