OpenSolaris_b135/lib/libpp/common/pp.probe

:
# Glenn Fowler
# AT&T Research
#
# @(#)pp.probe (AT&T Research) 2009-02-02
#
# C probe for libpp
#
# NOTE: C.probe must be included or .'d here
#

ppdef=$dir/pp.def
ppkey=$dir/pp.key
ppsym=$dir/ppsym
for f in $ppdef $ppkey $ppsym
do	test -f $f || { echo "$0: $f: not found" >&4; exit 1 ;}
done

sed -e "/^#/d" -e "s/[ 	].*//" < $ppdef > all.pp

system=
release=
version=
architecture=
cpu=
model=
machine=
undef_predef=

#
# path cleanup
#

for i in stdinclude usrinclude
do	eval o='$'$i
	v=$o
	case $v in
	*//*)	v=`echo $v | sed 's,///*,/,g'` ;;
	esac
	if	(test . -ef "`pwd`")
	then	k=
		for x in $v
		do	case $x in
			*/../*|*/..)
				case $x in
				/*)	a=/ ;;
				*)	a= ;;
				esac
				IFS=/
				set '' $x
				IFS=$ifs
				r=
				for d
				do	r="$d $r"
				done
				p=
				g=
				for d in $r
				do	case $d in
					..)	g="$g $d" ;;
					*)	case $g in
						'')	case $p in
							'')	p=$d ;;
							*)	p=$d/$p ;;
							esac
							;;
						*)	set $g
							shift
							g=$*
							;;
						esac
						;;
					esac
				done
				case $a in
				'')	for d in $g
					do	p=$d/$p
					done
					;;
				*)	p=$a$p
					;;
				esac
				case $p in
				/)	continue ;;
				esac
				test $x -ef $p && x=$p
				;;
			esac
			k="$k $x"
		done
		set '' $k
		shift
		v=$1
		case $# in
		0)	;;
		*)	shift
			while	:
			do	case $# in
				0)	break ;;
				esac
				k=
				for d
				do	for j in $v
					do	test $d -ef $j && continue 2
					done
					k="$k $d"
				done
				set '' $k
				case $# in
				1)	break ;;
				esac
				shift
				v="$v $1"
				shift
			done
			;;
		esac
	fi
	case $v in
	$o)	;;
	*)	eval $i='$'v ;;
	esac
done

id="::IDENT::`date`::IDENT::"
echo '#assert test(ok)
#if #test(ok)
#else
(
#endif' > assert.$src
echo '#ifdef __BASE_FILE__
int ok;
#else
(
#endif' > basefile.$src
cat > catlit1.i <<'!'
char test[] = "te"
"st";
!
cat > catlit2.i <<'!'
char test[] = "te\
st";
!
echo '#define g(a,b) a ## b
volatile int a;
const int g(x,y)=1;
extern int c(int);' > compat.$src
echo > cpp.$src
echo "#defincl <x.h>" > defincl.$src
echo 'int a$b;' > dollar.$src
echo "#eject" > eject.$src
echo "#if 0
(
#else if 1
int x;
#else
(
#endif" > elseif.$src
echo "#define _CAT(a,b,c) a##b##c
#define hdra	hdrx
#define hdr	_CAT(<,hdra,.h>)
#include hdr" > hdra.$src
echo "#define _XAT(a,b,c) a##b##c
#define _CAT(a,b,c) _XAT(a,b,c)
#define hdra	hdrx
#define hdr	_CAT(<,hdra,.h>)
#include hdr" > hdrx.$src
echo "int f(){return 0;}" > hdrx.h
echo "#ident \"$id\"" > ident.$src
echo "#import \"import.h\"" > import.$src
echo "int aaa;" > import.h
echo "#include <inc_next.h>" > inc_next.$src
mkdir inc0 inc1
echo "#include_next <inc_next.h>" > inc0/inc_next.h
echo 'char s[] = "INCLUDE_NEXT";' > inc1/inc_next.h
echo '# 1 "linefile.i"

# 1 "linefile.i"

int i;' > linefile1.i
echo '# 1 "linefile.i"

# 1

int i;' > linefile2.i
echo "int i = 0;" > lineid1.i
echo '# 1 "t.c"
int i = 0;' > lineid2.i
echo '# 1 "t.c"
int i = 0;' > lineid3.$src
echo "#include <stdio.h>" > linetype.$src
echo '#include <sys/types.h>
main()
{
	return sizeof(LONGLONG) != 8;
}' > longlong.$src
echo '#include "once.h"
#include "once.h"' > once.$src
echo '#ifdef once
allmultiple
#else
#define once
#endif' > once.h
echo "extern int a,b;int f(){return a + = b;}" > opspace.$src
echo "int f(){return(0);} // ((" > pluscom.$src
echo "class x {int n;} m;" > plusplus.$src
echo > preinc.$src
echo '// splice \
(
int x = 1;' > plusspl.$src
echo "int stdc_default_value = __STDC__ ;" > stdc.$src
echo 'char xxx[] = "abc
(";' > span.$src
echo '#define g(a,b) a\
b
int ab,xy;
#define xy XY
char* g(x,y);' > splice.$src
{
echo 'int a\                        '
echo 'b = 1;'
} > splicesp.$src
echo '#define g(a,b) a/**/b
int g(x,y)=1;' > trans.$src
echo '#define m 65
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 65
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 64
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 63
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 62
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 61
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 60
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 59
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 58
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 57
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 56
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 55
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 54
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 53
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 52
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 51
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 50
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 49
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 48
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 47
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 46
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 45
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 44
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 43
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 42
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 41
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 40
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 39
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 38
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 37
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 36
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 35
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 34
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 33
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 32
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 31
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 30
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxxx 29
#define xxxxxxxxxxxxxxxxxxxxxxxxxxxx 28
#define xxxxxxxxxxxxxxxxxxxxxxxxxxx 27
#define xxxxxxxxxxxxxxxxxxxxxxxxxx 26
#define xxxxxxxxxxxxxxxxxxxxxxxxx 25
#define xxxxxxxxxxxxxxxxxxxxxxxx 24
#define xxxxxxxxxxxxxxxxxxxxxxx 23
#define xxxxxxxxxxxxxxxxxxxxxx 22
#define xxxxxxxxxxxxxxxxxxxxx 21
#define xxxxxxxxxxxxxxxxxxxx 20
#define xxxxxxxxxxxxxxxxxxx 19
#define xxxxxxxxxxxxxxxxxx 18
#define xxxxxxxxxxxxxxxxx 17
#define xxxxxxxxxxxxxxxx 16
#define xxxxxxxxxxxxxxx 15
#define xxxxxxxxxxxxxx 14
#define xxxxxxxxxxxxx 13
#define xxxxxxxxxxxx 12
#define xxxxxxxxxxx 11
#define xxxxxxxxxx 10
#define xxxxxxxxx 9
#define xxxxxxxx 8
#define xxxxxxx 7
#define xxxxxx 6
#define xxxxx 5
#define xxxx 4
#define xxx 3
#define xx 2
#define x 1
#if xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx != m
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#endif' > truncate.$src
cat > zeof.c <<'!'
char* foo = "az";
!

allmultiple=
assert=
basefile=
compatibility=1
defincl=
dollar=
eject=
elseif=
headerexpand=
headerexpandall=
hostedtransition=
ident=
import=
include_next=
linefile=
lineid=
linetype=
nocatliteral=
opspace=
pluscom=
plusplus=
plussplice=
redef=
reguard=
reserved=
spaceout=
splicecat=
splicespace=
strict=
stringspan=
transition=
truncate=
zeof=

$cc -c assert.$src && assert=1

$cc -c basefile.$src && basefile=__BASE_FILE__

if	$cc -E defincl.$src
then	case "`$cc -E defincl.$src | grep -c 'defincl'`" in
	0)	defincl=1 ;;
	esac
fi

if	$cc -c catlit1.i 2>e
then	if	$cc -c catlit2.i 2>f
	then	if	test `wc -c < f` -gt `wc -c < e`
		then	nocatliteral=1
		fi
	else	nocatliteral=1
	fi
fi

$cc -c dollar.$src && dollar=1

$cc -c elseif.$src && elseif=1

if	$cc -I. -c hdra.$src
then	headerexpandall=1
elif	$cc -I. -c hdrx.$src
then	headerexpand=1
fi

if	$cc -E eject.$src
then	case "`$cc -E eject.$src | grep -c 'eject'`" in
	0)	eject=1 ;;
	esac
fi

$cc -S ident.$src && grep "$id" ident.s && ident=1

{ $cc -E import.$src | grep aaa ;} && import=1

{ $cc -E -Iinc0 -Iinc1 inc_next.$src | grep INCLUDE_NEXT ;} && include_next=1

if	$cc -c linefile1.i
then	$cc -c linefile2.i
	case $? in
	0)	;;
	*)	linefile=1 ;;
	esac
fi

if	$cc -c lineid1.i 2>b
then	$cc -c lineid2.i 2>e
	c=$?
else	$cc -c lineid3.c 2>e
	c=$?
fi
case $c in
0)	case `wc -l < b` in
	`wc -l < e`)	;;
	*)		lineid=line ;;
	esac
	;;
*)	lineid=line
	;;
esac

if	$cc -E linetype.$src | grep '^[ 	]*#[ 	]*[0123456789]*[ 	]*".*"[ 	]*[12]' > linetype
then	if	grep '^[ 	]*#[ 	]*[0123456789]*[ 	]*".*"[ 	]*[12][ 	][ 	]*3' linetype
	then	linetype=2
	else	linetype=1
	fi
fi

{ $cc -E once.$src | grep allmultiple ;} && allmultiple=1

$cc -c plusplus.$src && plusplus=1

$cc -c span.$src && stringspan=1

$cc -c splice.$src && splicecat=1

$cc -c splicesp.$src && splicespace=1

exec < $ppkey
while	read keyword type alternate comment
do	case $keyword in
	.)	break ;;
	""|"#")	continue ;;
	esac
	case $type in
	""|".")	type= ;;
	*)	type="=$type" ;;
	esac
	for pre in '' _ __
	do	for suf in '' _ __
		do	case $suf in
			'')	sep= ;;
			*)	sep=. ;;
			esac
			case ,,$alternate, in
			*,$pre$sep$suf,*)
				key=$pre$keyword$suf
				undef="$undef $key"
				echo "int f(){
	int	$key = 0;
	return $key;
}
#undef	$key
int g(){
	int	$key = 0;
	return $key;
}" > key.$src
				$cc -c key.$src >/dev/null 2>&1 || reserved="$reserved $key$type"
				;;
			esac
		done
	done
done

$cc -c opspace.$src && opspace=1

case $plusplus in
"")	$cc -c compat.$src && compatibility=
	$cc -c pluscom.$src && pluscom=1
	;;
esac
case $plusplus$pluscom in
?*)	$cc -c plusspl.$src || plussplice=1 ;;
esac
case $plusplus in
?*)	mkdir reguard
	cd reguard
	echo '#include "ptrone.h"
#include "ptrdef.h"
int main () { return gt(2,1) + gt(2.0,1.0); }' > ptr.$src
	echo '#include "ptrone.h"
template<class T> int gt(T a, T b) { return a > b; }' > ptrdef.$src
	echo 'template<class T> int gt(T a, T b);' > ptrdef.h
	echo '/* empty */' > ptrone.h
	if	$cc -E ptr.$src > x.i && $cc x.i
	then	echo '#ifndef _PTRONE_H
#define _PTRONE_H
static int xxx;
#endif' > ptrone.h
		if	$cc -E ptr.$src > x.i && echo "#define _PTRONE_H" >> x.i && $cc x.i
		then	reguard=1
		fi
	fi
	cd ..
	rm -rf reguard
	;;
esac

stdc=`$cc -E stdc.$src | sed -e '/stdc_default_value/!d' -e 's/.*=[ 	]*//' -e 's/[ 	]*;.*//'`
case $stdc in
0)		$cc -c trans.$src && transition=1 ;;
[0123456789]*)	;;
*)		stdc= ;;
esac

truncate=`$cc -E truncate.$src | grep '^[ 	]*[0123456789]'`
$cc -c zeof.c || zeof=1

echo "$predef" >> all.pp
{
	case $ppopt$ppenv in
	?*)	ppcmd=cpp
		ppdir=.
		eval $ppenv '$'cc -Dmycpp -E '$'ppopt cpp.$src
		;;
	esac
	eval set x $probe_verbose
	shift
	x=
	for o in "$@"
	do	set x `$cc $o -c cpp.$src 2>&1`
		while	:
		do	shift
			case $# in
			0)	break ;;
			esac
			case $1 in
			*[\\/]rm)
				;;
			[\\/]*)	case " $x " in
				*" $1 "*)	;;
				*)		test -x $1 && x="$x $1" ;;
				esac
				;;
			esac
		done
		case $x in
		?*)	for f in $x
			do	cp $f x && chmod u+w x && strip x && f=x
				$ppsym < $f
			done
			break
			;;
		esac
	done
} 3>&- 3>&1 >/dev/null |
	sed -e '/^ppsymbol$/d' -e '/^.$/d' -e '/^..$/d' -e '/[ABCDEFGHIJKLMNOPQRSTUVWXYZ].*[abcdefghijklmnopqrstuvwxyz]/d' -e '/[abcdefghijklmnopqrstuvwxyz].*[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/d' |
	cat - all.pp |
	sort -u |
	{
	for i in 0 1 2 3 4 5
	do	echo "struct { char* name; long value; } predef[] = {" > cpp$i.$src
	done
	while read sym junk
	do	case $sym in
		_*)	set 0 ${sym}
			;;
		*_)	continue
			;;
		[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
			set 1 ${sym} 2 _${sym} 3 _${sym}_ 4 __${sym} 5 __${sym}__
			;;
		*)	continue
			;;
		esac
		while	:
		do	case $# in
			0|1)	break ;;
			esac
			{
			echo "#ifdef $2"
			echo "\"$2\" , (long) $2 -1,"
			echo "#endif"
			} >> cpp$1.$src
			shift
			shift
		done
	done 
	for i in 0 1 2 3 4 5
	do	echo "\"\", 0 };" >> cpp$i.$src
	done
	}
preval="`for i in 0 1 2 3 4 5;do $cc -E cpp$i.$src;done | sed -e '/\".*\".*,.*,/!d' -e 's/[^\"]*\"\\([^\"]*\\)\"[ 	]*,[ 	]*([ 	]*long[ 	]*)[ 	]*\\(.*\\)[ 	]*-[ 	]*1[ 	]*,[ 	]*\$/\\1 \\2 =/g'` `$cc -dM -E stdc.$src | sed -e '/[ 	]*#[ 	]*define/!d' -e '/\"/d' -e 's/[ 	]*#[ 	]*define[ 	]*\\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*\\)[ 	]*\\(.*\\)/\\1 \\2 =/'`"

for i in bufld namei quota reboot utsname vfs
do	echo "#include <sys/$i.h>" > t.$src
	if	$cc -E t.$src
	then	x=1
	else	x=0
	fi
	eval sys_$i=$x
done

echo "char* fun() { return (char*)__FUNCTION__; }
int main() { return !fun(); }" > fun.$src
rm -f fun.exe
if	$cc -o fun.exe fun.$src && test -x fun.exe
then	undef_predef="$undef_predef __FUNCTION__"
fi

case "`grep -c '__STDC__[-0 	]*[=!]=[ 	]*0' $usrinclude/stdio.h 2>/dev/null`" in
0)	;;
*)	hostedtransition=1 ;;
esac

mapinclude=
for i in builtins
do	echo "#include <$i.h>" > t.$src
	if	$cc -E t.$src
	then	mapinclude="$mapinclude <$i.h>=\".\""
	fi
done

#
# the payoff
#

exec >&3

case "$compatibility:$transition:$dollar" in
::)	strict=1 ;;
esac
case $version_stamp in
?*)	echo "/* $version_stamp" ;;
*)	echo "/* $cc" ;;
esac
echo "*/"
case $plusplus:$stdc in
1:?*)	preval="$preval = __STDC__ $stdc ="
	redef="$redef __STDC__"
	;;
esac
ppbuiltin=0
set x $preval
shift
case $# in
0)	;;
*)	echo
	echo "#pragma pp:predefined"
	predef=
	while	:
	do	case $# in
		0)	break ;;
		esac
		m=$1
		shift
		case $m in
		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
		*)	i=$m ;;
		esac
		predef="$predef
$i"
		eval predef_$i=0
		while	:
		do	case $1 in
			'=')	break ;;
			*)	shift ;;
			esac
		done
		while	:
		do	case $1 in
			'=')	shift ;;
			*)	break ;;
			esac
		done
	done
	for i in $undef
	do	case " $redef " in
		*" $i "*)	;;
		*)		eval predef_$i=3 ;;
		esac
	done
	set $preval
	while	:
	do	case $# in
		0)	break ;;
		esac
		m=$1
		shift
		case $m in
		*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
		*)	i=$m ;;
		esac
		case $i in
		'=')	continue ;;
		esac
		v=
		while	:
		do	case $1 in
			'=')	break ;;
			esac
			v="$v $1"
			shift
		done
		while	:
		do	case $1 in
			'=')	shift ;;
			*)	break ;;
			esac
		done
		case $i in
		__LCC__)strict=2 ;;
		_*)	;;
		*)	eval j=\$predef_$i
			case $j in
			0)	eval predef_$i=1
				echo "#define $m$v"
				case $strict in
				1)	strict= ;;
				esac
				;;
			esac
			;;
		esac
	done
	nopredef=0
	while	:
	do	set $preval
		while	:
		do	case $# in
			0)	break ;;
			esac
			m=$1
			shift
			case $m in
			*'('*)	i=`echo "$m" | sed 's,(.*,,'` ;;
			*)	i=$m ;;
			esac
			v=
			while	:
			do	case $1 in
				'=')	break ;;
				esac
				v="$v $1"
				shift
			done
			while	:
			do	case $1 in
				'=')	shift ;;
				*)	break ;;
				esac
			done
			case $nopredef in
			2)	;;
			*)	case $v in
				' '*' '*)
					nopredef=1
					continue
					;;
				' '[0123456789]*|' '"'"*"'"*)
					;;
				*)	case $1 in
					_*)	;;
					*)	nopredef=1
						continue
						;;
					esac
					;;
				esac
				;;
			esac
			eval j=\$predef_$i
			case $j in
			0)	case $ppbuiltin in
				2)	echo "#pragma pp:builtin"
					ppbuiltin=1
					;;
				esac
				eval predef_$i=2
				echo "#define $m$v"
				;;
			1)	case $m in
				$i)	eval predef_$i=2
					eval j=\$predef___${i}__
					case $j in
					[12])	;;
					*)	case $ppbuiltin in
						2)	echo "#pragma pp:builtin"
							ppbuiltin=1
							;;
						esac
						eval predef___${i}__=2
						echo "#define __${i}__$v"
						;;
					esac
					;;
				esac
				;;
			esac
		done
		case $nopredef in
		2)	break ;;
		esac
		echo "#pragma pp:nopredefined"
		case $nopredef in
		0)	break ;;
		esac
		ppbuiltin=2
		nopredef=2
	done
	;;
esac
case $basefile in
?*)	case $ppbuiltin in
	0|2)	ppbuiltin=1
		echo "#pragma pp:builtin"
		;;
	esac
	echo "#define $basefile	#(BASE)"
	;;
esac
case $ppbuiltin in
1)	echo "#pragma pp:nobuiltin" ;;
esac

eval set x $probe_longlong
shift
x=
for o in "$@"
do	rm -f longlong.$exe
	if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
		./longlong.$exe
	then	x=1
		break
	fi
done
case $x in
'')	eval set x $probe_longlong_t
	shift
	for o in "$@"
	do	rm -f longlong.$exe
		if	$cc -DLONGLONG="$o" -o longlong.$exe longlong.$src &&
			./longlong.$exe
		then	echo "#define <long long> $o"
			break
		fi
	done
	;;
esac

echo
for i in `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*[0123456789][abcdefghijklmnopqrstuvwxyz0123456789]*\$/!d'` `echo "$predef" | sed -e 's/^__*\(.*\)_*\$/\1/' -e '/^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*\$/!d'`
do	case $i in
	*ix)	;;
	*)	architecture=$i
		break
		;;
	esac
done
for i in `sed -e '/^#/d' -e '/:architecture:/!d' -e 's/[ 	].*//' < $ppdef`
do	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
	case $j in
	*" 2 "*)architecture=$i
		break
		;;
	esac
done
for i in `sed -e '/^#/d' -e '/:machine:/!d' -e 's/[ 	].*//' < $ppdef`
do	eval j="\" \$predef_$i \$predef__${i} \$predef__${i}_ \$predef___${i} \$predef___${i}__ \""
	case $j in
	*" 2 "*)machine="$machine $i" ;;
	esac
done
case $sys_bufld$sys_reboot$sys_utsname in
1??)	release=research
	version=9
	;;
01?)	release=bsd
	case $sys_quota in
	0)	case $sys_vfs in
		0)	version=4.1
			;;
		esac
		;;
	1)	case $sys_namei in
		0)	version=4.2
			;;
		1)	version=4.3
			;;
		esac
		;;
	esac
	;;
001)	release=V
	;;
esac
for i in `sed -e '/^#/d' -e '/:release:/!d' -e 's/[ 	].*//' < $ppdef`
do	eval j=\$predef_$i
	case $j in
	2)	release="$release $i" ;;
	esac
done
for i in `sed -e '/^#/d' -e '/:system:/!d' -e 's/[ 	].*//' < $ppdef`
do	eval j=\$predef_$i
	case $j in
	2)	system="$system $i" ;;
	esac
done
case $release in
topix)	release="$release V"
	;;
esac
case $assert in
?*)	for i in $predef
	do	case $i in
		_*|*_)	;;
		*)	for p in architecture cpu machine system
			do	echo "#if #$p($i)
eval \"case \\\" \$$p \\\" in *\\\" $i \\\"*) ;; *) $p=\\\"$i \$$p\\\" ;; esac\"
: avoid string literal concatenation
#endif"
			done
			;;
		esac
	done > t.$src
	eval "`$cc -E t.$src`"
	set x x $prepred
	while	:
	do	shift
		shift
		case $# in
		[01])	break ;;
		esac
		eval "
			case \" \$$1 \" in
			*\" $2 \"*) ;;
			*) $1=\"$2 \$$1\" ;;
			esac
		"
	done
	;;
esac
case $system in
"")	system=unix ;;
esac
case $architecture in
ibm|uts|u370)	model=370
		architecture=ibm
		;;
m*68*)		architecture=m68000
		for i in $predef
		do	case $i in
			m*68*[123456789][0123456789])
				model=`echo $i | sed 's/.*\(..\)/\1/'`
				break
				;;
			esac
		done
		;;
u3b?*)		model=`echo $architecture | sed 's/u3b//'`
		architecture=3b
		;;
u3b)		case $model in
		"")	model=20 ;;
		esac
		architecture=3b
		;;
vax[0123456789]*)
		model=`echo $architecture | sed 's/vax//'`
		architecture=vax
		;;
hp[0123456789]*s[0123456789])
		case $release in
		[abcdefghijklmnopqrstuvwxyz]*.[abcdefghijklmnopqrstuvwxyz]*.*)
			version=$release
			release=V
			;;
		esac
		architecture="$architecture `echo $architecture | sed 's/s.*//'`"
		;;
esac
case $hosttype in
*.*)	i=`echo $hosttype | sed -e 's,.*\.,,'` ;;
*)	i=$hosttype ;;
esac
case $i in
unknown);;
?*)	case " $architecture " in
	*" $i "*) ;;
	*)	architecture="$architecture $i" ;;
	esac
	;;
esac
case $architecture in
"")	echo "$cc: warning: architecture not determined" >&4
	set x $machine
	architecture=$2
	;;
esac
echo "#define #hosttype($hosttype)"
for i in $system
do	echo "#define #system($i)"
done
case $release in
"")	echo "#define #release()" ;;
*)	for i in $release
	do	echo "#define #release($i)"
		case $i in
		V)	echo "#define #release(system5)" ;; # compatibility
		esac
	done
	;;
esac
echo "#define #version($version)"
case $architecture in
"")	echo "#define #architecture()" ;;
*)	for i in `echo $architecture | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
	do	echo "#define #architecture($i)"
	done
	;;
esac
echo "#define #model($model)"
case $machine in
"")	case $architecture:$model in
	?*:?*)	set x $architecture; machine="$2/$model $architecture" ;;
	*)	machine=$architecture ;;
	esac
	;;
*)	machine="$machine $architecture"
	;;
esac
case $machine in
"")	echo "#define #machine()" ;;
*)	j=
	for i in `echo $machine | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
	do	case " $i " in
		*" $j "*)
			;;
		*)	j="$j $i"
			echo "#define #machine($i)"
			;;
		esac
	done
	;;
esac
for i in $cpu
do	echo "#define #cpu($i)"
done
echo "#define #addressing()"
for i in $ATTRIBUTES
do	eval d=\$$i
	n=`echo $i | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
	echo "#define #$n($d)"
done
case $stdc in
?*)	echo "#define #dialect(ansi)" ;;
esac
case $plusplus in
?*)	echo "#define #dialect(C++)" ;;
esac
case $hosted in
"")	echo "#define #dialect(cross)" ;;
esac
case $so:$dynamic:$static in
::)	;;
*)	echo "#define #dialect(dynamic)" ;;
esac
echo
case $undef_predef in
?*)	for m in $undef_predef
	do	echo "#undef	$m"
	done
	echo
	;;
esac
case $plusplus in
?*)	echo "#pragma pp:plusplus" ;;
esac
case $reserved in
?*)	echo "#pragma pp:reserved" $reserved ;;
esac
case $nocatliteral in
?*)	echo "#pragma pp:nocatliteral" ;;
esac
case $opspace in
?*)	echo "#pragma pp:opspace" ;;
esac
case $pluscom in
?*)	echo "#pragma pp:pluscomment" ;;
esac
case $plussplice in
?*)	echo "#pragma pp:plussplice" ;;
esac
case $reguard in
?*)	echo "#pragma pp:reguard" ;;
esac
case $splicecat in
?*)	echo "#pragma pp:splicecat" ;;
esac
case $splicespace in
?*)	echo "#pragma pp:splicespace" ;;
esac
case $stringspan in
?*)	echo "#pragma pp:stringspan" ;;
esac
case $stdc in
"")	echo "#pragma pp:compatibility"
	;;
0)	echo "#pragma pp:transition"
	;;
1)	case $strict in
	?*)	echo "#pragma pp:strict" ;;
	esac
	;;
esac
case $hostedtransition in
1)	echo "#pragma pp:hostedtransition" ;;
esac
case $stdc in
?*)	case $ppopt$ppenv in
	"")	spaceout=1
		echo "#pragma pp:spaceout"
		;;
	esac
	;;
esac
case $truncate in
?*)	echo "#pragma pp:truncate $truncate" ;;
esac
case $zeof in
?*)	echo "#pragma pp:zeof" ;;
esac
case $dollar in
1)	echo '#pragma pp:id "$"' ;;
esac
cdir=-I+C
hdir=-I+H
set x $stdinclude
while	:
do	shift
	case $# in
	0)	break ;;
	esac
	case $1 in
	$cdir|$hdir)
		;;
	-I+C)	cdir=$1
		echo "#pragma pp:nocdir"
		;;
	-I-C)	cdir=$1
		echo "#pragma pp:cdir"
		;;
	-I+H)	hdir=$1
		echo "#pragma pp:nohostdir"
		;;
	-I-H)	hdir=$1
		echo "#pragma pp:hostdir"
		;;
	-I*)	;;
	*)	echo "#pragma pp:include \"$1\""
		;;
	esac
done
case $usrinclude in
/usr/include)
	;;
?*)	echo "#pragma pp:standard \"$usrinclude\""
	;;
esac
case $plusplus in
?*)	case $usrinclude in
	?*)	if	grep plusplus $usrinclude/ctype.h >/dev/null 2>&1
		then	echo '#pragma pp:nocdir "-"'
		fi
		;;
	esac
	;;
esac
case $mapinclude in
?*)	echo "#pragma pp:mapinclude hosted$mapinclude" ;;
esac
case $linefile in
?*)	echo "#pragma pp:linefile" ;;
esac
case $lineid in
?*)	echo "#pragma pp:lineid line" ;;
esac
case $linetype in
1)	echo "#pragma pp:linetype" ;;
?*)	echo "#pragma pp:linetype $linetype" ;;
esac
case $allmultiple in
"")	echo "#pragma pp:noallmultiple" ;;
esac
case $defincl in
1)	echo '#pragma pp:map "/#(pragma )?defincl>/"' ;;
esac
case $eject in
1)	echo '#pragma pp:map "/#(pragma )?eject>/"' ;;
esac
case $elseif in
1)	echo "#pragma pp:elseif" ;;
esac
case $headerexpand in
1)	echo "#pragma pp:headerexpand" ;;
esac
case $headerexpandall in
1)	echo "#pragma pp:headerexpandall" ;;
esac
case $ident in
1)	echo '#pragma pp:map "/#(pragma )?ident>/" "/#(pragma )?/###/"' ;;
*)	echo '#pragma pp:map "/#(pragma )?ident>/"' ;;
esac
case $import in
1)	echo '#pragma pp:map "/#(pragma )?import>/" "/#(pragma )?import(.*)/__STDPP__IMPORT__(\2)/"
#macdef __STDPP__IMPORT__(x)
#pragma pp:noallmultiple
#include x
#pragma pp:allmultiple
#endmac' ;;
esac
case $include_next in
1)	echo '#pragma pp:map "/#include_next>/" ",[^\<]*\<,#include <.../,"' ;;
esac
echo '#pragma pp:map "/#pragma lint:/" ",#pragma lint:(.*),##/*\1*/,u"'
echo '#pragma pp:map "/#(pragma )?sccs>/"'

case $stdc:$spaceout in
1:)	case ' '$reserved' ' in
	*' 'asm' '*|*' 'asm=*)
		echo "#macdef asm"
		echo "#pragma pp:spaceout"
		echo "#undef asm"
		echo "asm"
		echo "#endmac"
		;;
	esac
	;;
esac

if	$cc -E preinc.$src > preinc.out
then	for f in `sed -e 's,\\\\,/,g' -e 's,"[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]:/,"/,g' -e '/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*"[\\/]/!d' -e 's/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*".*[\\/]\(.*\)".*/\1/' preinc.out | sort -u`
	do	case $f in
		*preinc.$src*)
			;;
		*)	echo "#include <$f>"
			;;
		esac
	done
fi