xref: /titanic_53/usr/src/contrib/ast/src/cmd/INIT/iffe.sh (revision 906afcb89d0412cc073b95c2d701a804a8cdb62c)
1*906afcb8SAndy Fiddaman########################################################################
2*906afcb8SAndy Fiddaman#                                                                      #
3*906afcb8SAndy Fiddaman#               This software is part of the ast package               #
4*906afcb8SAndy Fiddaman#          Copyright (c) 1994-2012 AT&T Intellectual Property          #
5*906afcb8SAndy Fiddaman#                      and is licensed under the                       #
6*906afcb8SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
7*906afcb8SAndy Fiddaman#                    by AT&T Intellectual Property                     #
8*906afcb8SAndy Fiddaman#                                                                      #
9*906afcb8SAndy Fiddaman#                A copy of the License is available at                 #
10*906afcb8SAndy Fiddaman#          http://www.eclipse.org/org/documents/epl-v10.html           #
11*906afcb8SAndy Fiddaman#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
12*906afcb8SAndy Fiddaman#                                                                      #
13*906afcb8SAndy Fiddaman#              Information and Software Systems Research               #
14*906afcb8SAndy Fiddaman#                            AT&T Research                             #
15*906afcb8SAndy Fiddaman#                           Florham Park NJ                            #
16*906afcb8SAndy Fiddaman#                                                                      #
17*906afcb8SAndy Fiddaman#                 Glenn Fowler <gsf@research.att.com>                  #
18*906afcb8SAndy Fiddaman#                                                                      #
19*906afcb8SAndy Fiddaman########################################################################
20*906afcb8SAndy Fiddaman# Glenn Fowler & Phong Vo
21*906afcb8SAndy Fiddaman# AT&T Research
22*906afcb8SAndy Fiddaman#
23*906afcb8SAndy Fiddaman# test if feature exists
24*906afcb8SAndy Fiddaman# this script is written to make it through all sh variants
25*906afcb8SAndy Fiddaman#
26*906afcb8SAndy Fiddaman# NOTE: .exe a.out suffix and [\\/] in path patterns for dos/nt
27*906afcb8SAndy Fiddaman
28*906afcb8SAndy Fiddamancase $-:$BASH_VERSION in
29*906afcb8SAndy Fiddaman*x*:[0123456789]*)	: bash set -x is broken :; set +ex ;;
30*906afcb8SAndy Fiddamanesac
31*906afcb8SAndy Fiddaman
32*906afcb8SAndy Fiddamancommand=iffe
33*906afcb8SAndy Fiddamanversion=2012-07-17 # update in USAGE too #
34*906afcb8SAndy Fiddaman
35*906afcb8SAndy Fiddamancompile() # $cc ...
36*906afcb8SAndy Fiddaman{
37*906afcb8SAndy Fiddaman	"$@" 2>$tmp.err
38*906afcb8SAndy Fiddaman	_compile_status=$?
39*906afcb8SAndy Fiddaman	if	test -s $tmp.err
40*906afcb8SAndy Fiddaman	then	cat $tmp.err >&2
41*906afcb8SAndy Fiddaman		case $_compile_status in
42*906afcb8SAndy Fiddaman		[1-9]|[1-9][0-9]|1[01][0-9]|12[0-7])
43*906afcb8SAndy Fiddaman			if	egrep -i -c 'terminated with signal|core dump|segmentation fault' $tmp.err >&$nullout
44*906afcb8SAndy Fiddaman			then	_compile_status=139
45*906afcb8SAndy Fiddaman			fi
46*906afcb8SAndy Fiddaman			;;
47*906afcb8SAndy Fiddaman		esac
48*906afcb8SAndy Fiddaman	fi
49*906afcb8SAndy Fiddaman	case $_compile_status in
50*906afcb8SAndy Fiddaman	?|??|1[01]?|12[0-8]|25?)
51*906afcb8SAndy Fiddaman		;;
52*906afcb8SAndy Fiddaman	*)	echo "$command: $@" >&$stderr
53*906afcb8SAndy Fiddaman		cat $tmp.err >&$stderr
54*906afcb8SAndy Fiddaman		echo "$command: $1: core dump or fatal interruption -- results inconclusive" >&$stderr
55*906afcb8SAndy Fiddaman		exit $_compile_status
56*906afcb8SAndy Fiddaman		;;
57*906afcb8SAndy Fiddaman	esac
58*906afcb8SAndy Fiddaman	return $_compile_status
59*906afcb8SAndy Fiddaman}
60*906afcb8SAndy Fiddaman
61*906afcb8SAndy Fiddamanis_hdr() # [ - ] [ file.c ] hdr
62*906afcb8SAndy Fiddaman{
63*906afcb8SAndy Fiddaman	case $1 in
64*906afcb8SAndy Fiddaman	-)	_is_hdr_flag=-; shift ;;
65*906afcb8SAndy Fiddaman	*)	_is_hdr_flag= ;;
66*906afcb8SAndy Fiddaman	esac
67*906afcb8SAndy Fiddaman	case $1 in
68*906afcb8SAndy Fiddaman	*.c)	_is_hdr_file=$1; shift ;;
69*906afcb8SAndy Fiddaman	*)	_is_hdr_file=$tmp.c ;;
70*906afcb8SAndy Fiddaman	esac
71*906afcb8SAndy Fiddaman	is hdr $1
72*906afcb8SAndy Fiddaman	compile $cc -c $_is_hdr_file <&$nullin >&$nullout 2>$tmp.e
73*906afcb8SAndy Fiddaman	_is_hdr_status=$?
74*906afcb8SAndy Fiddaman	case $_is_hdr_status in
75*906afcb8SAndy Fiddaman	0)	if	test -s $tmp.e
76*906afcb8SAndy Fiddaman		then	case `grep '#.*error' $tmp.e` in
77*906afcb8SAndy Fiddaman			?*)	_is_hdr_status=1 ;;
78*906afcb8SAndy Fiddaman			esac
79*906afcb8SAndy Fiddaman		fi
80*906afcb8SAndy Fiddaman		;;
81*906afcb8SAndy Fiddaman	esac
82*906afcb8SAndy Fiddaman	case $_is_hdr_status in
83*906afcb8SAndy Fiddaman	0)	success $_is_hdr_flag
84*906afcb8SAndy Fiddaman		;;
85*906afcb8SAndy Fiddaman	*)	case $debug in
86*906afcb8SAndy Fiddaman		3)	cat $tmp.e >&$stderr ;;
87*906afcb8SAndy Fiddaman		esac
88*906afcb8SAndy Fiddaman		failure $_is_hdr_flag
89*906afcb8SAndy Fiddaman		;;
90*906afcb8SAndy Fiddaman	esac
91*906afcb8SAndy Fiddaman	return $_is_hdr_status
92*906afcb8SAndy Fiddaman}
93*906afcb8SAndy Fiddaman
94*906afcb8SAndy Fiddamanpkg() # package
95*906afcb8SAndy Fiddaman{
96*906afcb8SAndy Fiddaman	case $1 in
97*906afcb8SAndy Fiddaman	'')	pth=''
98*906afcb8SAndy Fiddaman		case $pth in
99*906afcb8SAndy Fiddaman		'')	pth="/bin /usr/bin" ;;
100*906afcb8SAndy Fiddaman		*:*)	pth=`echo "$pth" | sed 's/:/ /g'` ;;
101*906afcb8SAndy Fiddaman		esac
102*906afcb8SAndy Fiddaman		return
103*906afcb8SAndy Fiddaman		;;
104*906afcb8SAndy Fiddaman	'<')	shift
105*906afcb8SAndy Fiddaman		;;
106*906afcb8SAndy Fiddaman	*)	return
107*906afcb8SAndy Fiddaman		;;
108*906afcb8SAndy Fiddaman	esac
109*906afcb8SAndy Fiddaman	case $1 in
110*906afcb8SAndy Fiddaman	X|X11*)	i="openwin"
111*906afcb8SAndy Fiddaman		case $1 in
112*906afcb8SAndy Fiddaman		X)	set X11 ;;
113*906afcb8SAndy Fiddaman		esac
114*906afcb8SAndy Fiddaman		case $1 in
115*906afcb8SAndy Fiddaman		X11)	case $# in
116*906afcb8SAndy Fiddaman			1)	set $1 6 5 4 ;;
117*906afcb8SAndy Fiddaman			esac
118*906afcb8SAndy Fiddaman			;;
119*906afcb8SAndy Fiddaman		esac
120*906afcb8SAndy Fiddaman		;;
121*906afcb8SAndy Fiddaman	*)	i=
122*906afcb8SAndy Fiddaman		;;
123*906afcb8SAndy Fiddaman	esac
124*906afcb8SAndy Fiddaman	pth="{ usr . - . contrib local $i - . share - . lib - $1"
125*906afcb8SAndy Fiddaman	i=$1
126*906afcb8SAndy Fiddaman	while	:
127*906afcb8SAndy Fiddaman	do	shift
128*906afcb8SAndy Fiddaman		case $# in
129*906afcb8SAndy Fiddaman		0)	break ;;
130*906afcb8SAndy Fiddaman		esac
131*906afcb8SAndy Fiddaman		case $1 in
132*906afcb8SAndy Fiddaman		'>')	shift; break ;;
133*906afcb8SAndy Fiddaman		esac
134*906afcb8SAndy Fiddaman		pth="$pth ${i}R$1 ${i}.$1"
135*906afcb8SAndy Fiddaman	done
136*906afcb8SAndy Fiddaman	pth="$pth . } $*"
137*906afcb8SAndy Fiddaman}
138*906afcb8SAndy Fiddaman
139*906afcb8SAndy Fiddamanis() # op name
140*906afcb8SAndy Fiddaman{
141*906afcb8SAndy Fiddaman	case $verbose in
142*906afcb8SAndy Fiddaman	1)	case $complete in
143*906afcb8SAndy Fiddaman		1)	failure ;;
144*906afcb8SAndy Fiddaman		esac
145*906afcb8SAndy Fiddaman		oo=$1
146*906afcb8SAndy Fiddaman		shift
147*906afcb8SAndy Fiddaman		case $1 in
148*906afcb8SAndy Fiddaman		?*)	yy=is
149*906afcb8SAndy Fiddaman			ii=$1
150*906afcb8SAndy Fiddaman			complete=1
151*906afcb8SAndy Fiddaman			case $oo in
152*906afcb8SAndy Fiddaman			cmd)	mm="a command" ;;
153*906afcb8SAndy Fiddaman			dat)	mm="a library data symbol" ;;
154*906afcb8SAndy Fiddaman			dfn)	mm="a macro with extractable value" ;;
155*906afcb8SAndy Fiddaman			exp)	mm="true" ;;
156*906afcb8SAndy Fiddaman			hdr)	mm="a header" ;;
157*906afcb8SAndy Fiddaman			id)	mm="an identifier" ;;
158*906afcb8SAndy Fiddaman			lcl)	mm="a native header" ;;
159*906afcb8SAndy Fiddaman			key)	mm="a reserved keyword" ;;
160*906afcb8SAndy Fiddaman			lib)	mm="a library function" ;;
161*906afcb8SAndy Fiddaman			LIB)	case $2 in
162*906afcb8SAndy Fiddaman				"")	mm="a library" ;;
163*906afcb8SAndy Fiddaman				*)	ii=$*; mm="a library group" ;;
164*906afcb8SAndy Fiddaman				esac
165*906afcb8SAndy Fiddaman				;;
166*906afcb8SAndy Fiddaman			mac)	mm="a macro" ;;
167*906afcb8SAndy Fiddaman			mem)	mm="a member of $2" ;;
168*906afcb8SAndy Fiddaman			mth)	mm="a math library symbol" ;;
169*906afcb8SAndy Fiddaman			nos)	mm="a non-opaque struct" ;;
170*906afcb8SAndy Fiddaman			npt)	mm="a symbol that needs a prototype" ;;
171*906afcb8SAndy Fiddaman			num)	mm="a numeric constant or enum" ;;
172*906afcb8SAndy Fiddaman			nxt)	mm="an include path for the native header" ;;
173*906afcb8SAndy Fiddaman			opt)	mm="set in \$PACKAGE_OPTIONS" ;;
174*906afcb8SAndy Fiddaman			pth)	mm="a file" ;;
175*906afcb8SAndy Fiddaman			run)	yy="capture output of" mm= ;;
176*906afcb8SAndy Fiddaman			siz)	mm="a type with known size" ;;
177*906afcb8SAndy Fiddaman			sym)	mm="a typed variable" ;;
178*906afcb8SAndy Fiddaman			sys)	mm="a system header" ;;
179*906afcb8SAndy Fiddaman			typ)	mm="a type or typedef" ;;
180*906afcb8SAndy Fiddaman			val)	yy="determine" mm="value" ;;
181*906afcb8SAndy Fiddaman			*)	yy= mm= ;;
182*906afcb8SAndy Fiddaman			esac
183*906afcb8SAndy Fiddaman			case $ii in
184*906afcb8SAndy Fiddaman			[abcdefghijklmnopqrstuvwxyz]*[abcdefghijklmnopqrstuvwxyz]'{') ii="$ii ... }end" ;;
185*906afcb8SAndy Fiddaman			esac
186*906afcb8SAndy Fiddaman			$show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr
187*906afcb8SAndy Fiddaman			complete=1
188*906afcb8SAndy Fiddaman			;;
189*906afcb8SAndy Fiddaman		esac
190*906afcb8SAndy Fiddaman		;;
191*906afcb8SAndy Fiddaman	esac
192*906afcb8SAndy Fiddaman}
193*906afcb8SAndy Fiddaman
194*906afcb8SAndy Fiddamansuccess()
195*906afcb8SAndy Fiddaman{
196*906afcb8SAndy Fiddaman	case $1 in
197*906afcb8SAndy Fiddaman	-)	shift
198*906afcb8SAndy Fiddaman		;;
199*906afcb8SAndy Fiddaman	*)	case $result in
200*906afcb8SAndy Fiddaman		UNKNOWN)	result=SUCCESS ;;
201*906afcb8SAndy Fiddaman		esac
202*906afcb8SAndy Fiddaman		case $1 in
203*906afcb8SAndy Fiddaman		+)	return ;;
204*906afcb8SAndy Fiddaman		esac
205*906afcb8SAndy Fiddaman		;;
206*906afcb8SAndy Fiddaman	esac
207*906afcb8SAndy Fiddaman	case $complete:$verbose in
208*906afcb8SAndy Fiddaman	1:1)	case $suspended in
209*906afcb8SAndy Fiddaman		1)	suspended=0
210*906afcb8SAndy Fiddaman			$show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr
211*906afcb8SAndy Fiddaman			;;
212*906afcb8SAndy Fiddaman		esac
213*906afcb8SAndy Fiddaman		complete=0
214*906afcb8SAndy Fiddaman		case $# in
215*906afcb8SAndy Fiddaman		0)	mm="yes" ;;
216*906afcb8SAndy Fiddaman		*)	mm="'$*'" ;;
217*906afcb8SAndy Fiddaman		esac
218*906afcb8SAndy Fiddaman		case $debug in
219*906afcb8SAndy Fiddaman		0)	echo " $mm" >&$stderr ;;
220*906afcb8SAndy Fiddaman		*)	echo "$command: ... $mm" >&$stderr ;;
221*906afcb8SAndy Fiddaman		esac
222*906afcb8SAndy Fiddaman		;;
223*906afcb8SAndy Fiddaman	esac
224*906afcb8SAndy Fiddaman}
225*906afcb8SAndy Fiddaman
226*906afcb8SAndy Fiddamanfailure()
227*906afcb8SAndy Fiddaman{
228*906afcb8SAndy Fiddaman	case $1 in
229*906afcb8SAndy Fiddaman	-)	shift ;;
230*906afcb8SAndy Fiddaman	*)	result=FAILURE
231*906afcb8SAndy Fiddaman		case $1 in
232*906afcb8SAndy Fiddaman		+)	return ;;
233*906afcb8SAndy Fiddaman		esac
234*906afcb8SAndy Fiddaman		;;
235*906afcb8SAndy Fiddaman	esac
236*906afcb8SAndy Fiddaman	case $complete:$verbose in
237*906afcb8SAndy Fiddaman	1:1)	case $suspended in
238*906afcb8SAndy Fiddaman		1)	suspended=0
239*906afcb8SAndy Fiddaman			$show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr
240*906afcb8SAndy Fiddaman			;;
241*906afcb8SAndy Fiddaman		esac
242*906afcb8SAndy Fiddaman		complete=0
243*906afcb8SAndy Fiddaman		case $group in
244*906afcb8SAndy Fiddaman		'')	case $# in
245*906afcb8SAndy Fiddaman			0)	mm="no" ;;
246*906afcb8SAndy Fiddaman			*)	mm=$* ;;
247*906afcb8SAndy Fiddaman			esac
248*906afcb8SAndy Fiddaman			;;
249*906afcb8SAndy Fiddaman		*)	mm=
250*906afcb8SAndy Fiddaman			;;
251*906afcb8SAndy Fiddaman		esac
252*906afcb8SAndy Fiddaman		case $debug in
253*906afcb8SAndy Fiddaman		0)	echo " $mm" >&$stderr ;;
254*906afcb8SAndy Fiddaman		*)	echo "$command: ... $mm" >&$stderr ;;
255*906afcb8SAndy Fiddaman		esac
256*906afcb8SAndy Fiddaman		;;
257*906afcb8SAndy Fiddaman	esac
258*906afcb8SAndy Fiddaman}
259*906afcb8SAndy Fiddaman
260*906afcb8SAndy Fiddaman# report
261*906afcb8SAndy Fiddaman#
262*906afcb8SAndy Fiddaman#	-	ignore global status
263*906afcb8SAndy Fiddaman#	-0	normal sense
264*906afcb8SAndy Fiddaman#	-1	inverted sense if ! def
265*906afcb8SAndy Fiddaman#	status	test status 0:success *:failure
266*906afcb8SAndy Fiddaman#	success	success comment
267*906afcb8SAndy Fiddaman#	failure	failure comment
268*906afcb8SAndy Fiddaman#	default	default setting comment
269*906afcb8SAndy Fiddaman#
270*906afcb8SAndy Fiddaman#   globals
271*906afcb8SAndy Fiddaman#
272*906afcb8SAndy Fiddaman#	$not	invert test sense
273*906afcb8SAndy Fiddaman# 	$M	test variable
274*906afcb8SAndy Fiddaman#	$m	test macro
275*906afcb8SAndy Fiddaman#	$v	default macro
276*906afcb8SAndy Fiddaman
277*906afcb8SAndy Fiddamanreport() # [-] [-0] [-1] status value success failure default
278*906afcb8SAndy Fiddaman{
279*906afcb8SAndy Fiddaman	case $1 in
280*906afcb8SAndy Fiddaman	-)	_report_ignore=$1
281*906afcb8SAndy Fiddaman		shift
282*906afcb8SAndy Fiddaman		;;
283*906afcb8SAndy Fiddaman	*)	_report_ignore=
284*906afcb8SAndy Fiddaman		;;
285*906afcb8SAndy Fiddaman	esac
286*906afcb8SAndy Fiddaman	_report_not=$not
287*906afcb8SAndy Fiddaman	case $1 in
288*906afcb8SAndy Fiddaman	-0)	shift
289*906afcb8SAndy Fiddaman		;;
290*906afcb8SAndy Fiddaman	-1)	shift
291*906afcb8SAndy Fiddaman		case $def in
292*906afcb8SAndy Fiddaman		''|-)	case $_report_not in
293*906afcb8SAndy Fiddaman			1)	_report_not= ;;
294*906afcb8SAndy Fiddaman			*)	_report_not=1 ;;
295*906afcb8SAndy Fiddaman			esac
296*906afcb8SAndy Fiddaman			;;
297*906afcb8SAndy Fiddaman		esac
298*906afcb8SAndy Fiddaman		;;
299*906afcb8SAndy Fiddaman	esac
300*906afcb8SAndy Fiddaman	_report_status=$1
301*906afcb8SAndy Fiddaman	case $_report_ignore:$_report_status in
302*906afcb8SAndy Fiddaman	-:*)	;;
303*906afcb8SAndy Fiddaman	*:0)	success $_report_ignore
304*906afcb8SAndy Fiddaman		;;
305*906afcb8SAndy Fiddaman	*)	failure $_report_ignore
306*906afcb8SAndy Fiddaman		case $group in
307*906afcb8SAndy Fiddaman		?*)	return ;;
308*906afcb8SAndy Fiddaman		esac
309*906afcb8SAndy Fiddaman		;;
310*906afcb8SAndy Fiddaman	esac
311*906afcb8SAndy Fiddaman	_report_value=$2
312*906afcb8SAndy Fiddaman	case $_report_not in
313*906afcb8SAndy Fiddaman	1)	case $_report_status in
314*906afcb8SAndy Fiddaman		0)	_report_status=1 ;;
315*906afcb8SAndy Fiddaman		*)	_report_status=0 ;;
316*906afcb8SAndy Fiddaman		esac
317*906afcb8SAndy Fiddaman		_report_success=$4
318*906afcb8SAndy Fiddaman		_report_failure=$3
319*906afcb8SAndy Fiddaman		;;
320*906afcb8SAndy Fiddaman	*)	_report_success=$3
321*906afcb8SAndy Fiddaman		_report_failure=$4
322*906afcb8SAndy Fiddaman		;;
323*906afcb8SAndy Fiddaman	esac
324*906afcb8SAndy Fiddaman	_report_default=$5
325*906afcb8SAndy Fiddaman	case $_report_status in
326*906afcb8SAndy Fiddaman	0)	case $M in
327*906afcb8SAndy Fiddaman		*-*)	;;
328*906afcb8SAndy Fiddaman		*)	usr="$usr$nl#define $m $_report_value"
329*906afcb8SAndy Fiddaman			case $_report_success in
330*906afcb8SAndy Fiddaman			''|-)	;;
331*906afcb8SAndy Fiddaman			*)	case $define in
332*906afcb8SAndy Fiddaman				1)	echo "#define $m	$_report_value	/* $_report_success */" ;;
333*906afcb8SAndy Fiddaman				n)	echo "$m=$_report_value"
334*906afcb8SAndy Fiddaman				esac
335*906afcb8SAndy Fiddaman				;;
336*906afcb8SAndy Fiddaman			esac
337*906afcb8SAndy Fiddaman			eval $m=\'$_report_value\'
338*906afcb8SAndy Fiddaman			;;
339*906afcb8SAndy Fiddaman		esac
340*906afcb8SAndy Fiddaman		;;
341*906afcb8SAndy Fiddaman	*)	case $M in
342*906afcb8SAndy Fiddaman		*-*)	;;
343*906afcb8SAndy Fiddaman		*)	case $_report_failure in
344*906afcb8SAndy Fiddaman			''|-)	;;
345*906afcb8SAndy Fiddaman			*)	case $define$all$config$undef in
346*906afcb8SAndy Fiddaman				1?1?|1??1)echo "#undef	$m		/* $_report_failure */" ;;
347*906afcb8SAndy Fiddaman				11??)	  echo "#define $m	0	/* $_report_failure */" ;;
348*906afcb8SAndy Fiddaman				n1?1)	  echo "$m=" ;;
349*906afcb8SAndy Fiddaman				n1??)	  echo "$m=0" ;;
350*906afcb8SAndy Fiddaman				esac
351*906afcb8SAndy Fiddaman				;;
352*906afcb8SAndy Fiddaman			esac
353*906afcb8SAndy Fiddaman			case $_report_default in
354*906afcb8SAndy Fiddaman			''|-)	;;
355*906afcb8SAndy Fiddaman			*)	case $define$set in
356*906afcb8SAndy Fiddaman				1?*)	echo "#define $v	$set	/* $_report_default */" ;;
357*906afcb8SAndy Fiddaman				n?*)	echo "$v=$set" ;;
358*906afcb8SAndy Fiddaman				esac
359*906afcb8SAndy Fiddaman				;;
360*906afcb8SAndy Fiddaman			esac
361*906afcb8SAndy Fiddaman			eval $m=0
362*906afcb8SAndy Fiddaman			;;
363*906afcb8SAndy Fiddaman		esac
364*906afcb8SAndy Fiddaman		;;
365*906afcb8SAndy Fiddaman	esac
366*906afcb8SAndy Fiddaman}
367*906afcb8SAndy Fiddaman
368*906afcb8SAndy Fiddamannoisy()
369*906afcb8SAndy Fiddaman{
370*906afcb8SAndy Fiddaman	case $complete:$verbose in
371*906afcb8SAndy Fiddaman	1:1)	suspended=1
372*906afcb8SAndy Fiddaman		echo >&$stderr
373*906afcb8SAndy Fiddaman		;;
374*906afcb8SAndy Fiddaman	esac
375*906afcb8SAndy Fiddaman}
376*906afcb8SAndy Fiddaman
377*906afcb8SAndy Fiddamanhere_broken=0
378*906afcb8SAndy Fiddaman
379*906afcb8SAndy Fiddamanliteral() # line that echo might process
380*906afcb8SAndy Fiddaman{
381*906afcb8SAndy Fiddaman	if	cat <<!
382*906afcb8SAndy Fiddaman$*
383*906afcb8SAndy Fiddaman!
384*906afcb8SAndy Fiddaman	then	: old here doc botch not present
385*906afcb8SAndy Fiddaman	else	case $here_broken in
386*906afcb8SAndy Fiddaman		0)	here_broken=1
387*906afcb8SAndy Fiddaman			echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr
388*906afcb8SAndy Fiddaman			;;
389*906afcb8SAndy Fiddaman		esac
390*906afcb8SAndy Fiddaman		sh -c "cat <<!
391*906afcb8SAndy Fiddaman$*
392*906afcb8SAndy Fiddaman!
393*906afcb8SAndy Fiddaman"
394*906afcb8SAndy Fiddaman	fi
395*906afcb8SAndy Fiddaman}
396*906afcb8SAndy Fiddaman
397*906afcb8SAndy Fiddamancopy() # "output-file" "data-that-must-not-be-processed-by-echo"
398*906afcb8SAndy Fiddaman{
399*906afcb8SAndy Fiddaman	case $1 in
400*906afcb8SAndy Fiddaman	-)	case $shell in
401*906afcb8SAndy Fiddaman		ksh)	print -r - "$2"
402*906afcb8SAndy Fiddaman			;;
403*906afcb8SAndy Fiddaman		*)	if	cat <<!
404*906afcb8SAndy Fiddaman$2
405*906afcb8SAndy Fiddaman!
406*906afcb8SAndy Fiddaman			then	: ancient here doc botch not present
407*906afcb8SAndy Fiddaman			else	case $here_broken in
408*906afcb8SAndy Fiddaman				0)	here_broken=1
409*906afcb8SAndy Fiddaman					echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr
410*906afcb8SAndy Fiddaman					;;
411*906afcb8SAndy Fiddaman				esac
412*906afcb8SAndy Fiddaman				sh -c "cat <<!
413*906afcb8SAndy Fiddaman$2
414*906afcb8SAndy Fiddaman!
415*906afcb8SAndy Fiddaman"
416*906afcb8SAndy Fiddaman			fi
417*906afcb8SAndy Fiddaman			;;
418*906afcb8SAndy Fiddaman		esac
419*906afcb8SAndy Fiddaman		;;
420*906afcb8SAndy Fiddaman	*)	case $shell in
421*906afcb8SAndy Fiddaman		ksh)	print -r - "$2" > "$1"
422*906afcb8SAndy Fiddaman			;;
423*906afcb8SAndy Fiddaman		*)	if	cat > "$1" <<!
424*906afcb8SAndy Fiddaman$2
425*906afcb8SAndy Fiddaman!
426*906afcb8SAndy Fiddaman			then	: ancient here doc botch not present
427*906afcb8SAndy Fiddaman			else	case $here_broken in
428*906afcb8SAndy Fiddaman				0)	here_broken=1
429*906afcb8SAndy Fiddaman					echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr
430*906afcb8SAndy Fiddaman					;;
431*906afcb8SAndy Fiddaman				esac
432*906afcb8SAndy Fiddaman				sh -c "cat > \"$1\" <<!
433*906afcb8SAndy Fiddaman$2
434*906afcb8SAndy Fiddaman!
435*906afcb8SAndy Fiddaman"
436*906afcb8SAndy Fiddaman			fi
437*906afcb8SAndy Fiddaman			;;
438*906afcb8SAndy Fiddaman		esac
439*906afcb8SAndy Fiddaman		;;
440*906afcb8SAndy Fiddaman	esac
441*906afcb8SAndy Fiddaman}
442*906afcb8SAndy Fiddaman
443*906afcb8SAndy Fiddaman# verify that cc is a C compiler
444*906afcb8SAndy Fiddaman
445*906afcb8SAndy Fiddamancheckcc()
446*906afcb8SAndy Fiddaman{
447*906afcb8SAndy Fiddaman	# check for local package root directories
448*906afcb8SAndy Fiddaman
449*906afcb8SAndy Fiddaman	case $PACKAGE_PATH in
450*906afcb8SAndy Fiddaman	?*)	for i in `echo $PACKAGE_PATH | sed 's,:, ,g'`
451*906afcb8SAndy Fiddaman		do	if	test -d $i/include
452*906afcb8SAndy Fiddaman			then	cc="$cc -I$i/include"
453*906afcb8SAndy Fiddaman				occ="$occ -I$i/include"
454*906afcb8SAndy Fiddaman			fi
455*906afcb8SAndy Fiddaman			if	test -d $i/lib
456*906afcb8SAndy Fiddaman			then	cc="$cc -L$i/lib"
457*906afcb8SAndy Fiddaman				occ="$occ -L$i/lib"
458*906afcb8SAndy Fiddaman				for y in $libpaths
459*906afcb8SAndy Fiddaman				do	eval $y=\"\$$y:\$i/lib\$${y}_default\"
460*906afcb8SAndy Fiddaman					eval export $y
461*906afcb8SAndy Fiddaman				done
462*906afcb8SAndy Fiddaman			fi
463*906afcb8SAndy Fiddaman		done
464*906afcb8SAndy Fiddaman		;;
465*906afcb8SAndy Fiddaman	esac
466*906afcb8SAndy Fiddaman	echo "int i = 1;" > $tmp.c
467*906afcb8SAndy Fiddaman	if	compile $cc -c $tmp.c <&$nullin >&$nullout
468*906afcb8SAndy Fiddaman	then	echo "(;" > $tmp.c
469*906afcb8SAndy Fiddaman		if	compile $cc -c $tmp.c <&$nullin >&$nullout
470*906afcb8SAndy Fiddaman		then	cctest="should not compile '(;'"
471*906afcb8SAndy Fiddaman		fi
472*906afcb8SAndy Fiddaman	else	cctest="should compile 'int i = 1;'"
473*906afcb8SAndy Fiddaman	fi
474*906afcb8SAndy Fiddaman	case $cctest in
475*906afcb8SAndy Fiddaman	"")	cctest=0
476*906afcb8SAndy Fiddaman		;;
477*906afcb8SAndy Fiddaman	*)	echo "$command: $cc: not a C compiler: $cctest" >&$stderr
478*906afcb8SAndy Fiddaman		exit 1
479*906afcb8SAndy Fiddaman		;;
480*906afcb8SAndy Fiddaman	esac
481*906afcb8SAndy Fiddaman}
482*906afcb8SAndy Fiddaman
483*906afcb8SAndy Fiddamancheckread()
484*906afcb8SAndy Fiddaman{
485*906afcb8SAndy Fiddaman	case $cctest in
486*906afcb8SAndy Fiddaman	"")	checkcc ;;
487*906afcb8SAndy Fiddaman	esac
488*906afcb8SAndy Fiddaman	case $posix_read in
489*906afcb8SAndy Fiddaman	-no)	;;
490*906afcb8SAndy Fiddaman	*)	posix_read=`(read -r _checkread_line; echo $_checkread_line) 2>/dev/null <<!
491*906afcb8SAndy Fiddamana z
492*906afcb8SAndy Fiddaman!
493*906afcb8SAndy Fiddaman`
494*906afcb8SAndy Fiddaman		;;
495*906afcb8SAndy Fiddaman	esac
496*906afcb8SAndy Fiddaman	case $posix_read in
497*906afcb8SAndy Fiddaman	"a z")	posix_read=1
498*906afcb8SAndy Fiddaman		;;
499*906afcb8SAndy Fiddaman	*)	copy ${tmp}r.c "
500*906afcb8SAndy Fiddaman		extern int read();
501*906afcb8SAndy Fiddaman		extern int write();
502*906afcb8SAndy Fiddaman		int main()
503*906afcb8SAndy Fiddaman		{
504*906afcb8SAndy Fiddaman			char	c;
505*906afcb8SAndy Fiddaman			char	r;
506*906afcb8SAndy Fiddaman			int	k;
507*906afcb8SAndy Fiddaman			char	s[32];
508*906afcb8SAndy Fiddaman			k = 0;
509*906afcb8SAndy Fiddaman			while (read(0, &c, 1) == 1)
510*906afcb8SAndy Fiddaman			{
511*906afcb8SAndy Fiddaman				if (k >= 0)
512*906afcb8SAndy Fiddaman				{
513*906afcb8SAndy Fiddaman					if (c == ' ' || c == '\\t')
514*906afcb8SAndy Fiddaman					{
515*906afcb8SAndy Fiddaman						if (k < sizeof(s))
516*906afcb8SAndy Fiddaman							s[k++] = c;
517*906afcb8SAndy Fiddaman						continue;
518*906afcb8SAndy Fiddaman					}
519*906afcb8SAndy Fiddaman					if (k > 1 && c != '#' && c != '\\n' && c != '\\r')
520*906afcb8SAndy Fiddaman						write(1, s + 1, k - 1);
521*906afcb8SAndy Fiddaman					k = -1;
522*906afcb8SAndy Fiddaman				}
523*906afcb8SAndy Fiddaman				if (c == '\\r')
524*906afcb8SAndy Fiddaman				{
525*906afcb8SAndy Fiddaman					r = c;
526*906afcb8SAndy Fiddaman					if (read(0, &c, 1) == 1 && c != '\\n')
527*906afcb8SAndy Fiddaman						write(1, &r, 1);
528*906afcb8SAndy Fiddaman				}
529*906afcb8SAndy Fiddaman				write(1, &c, 1);
530*906afcb8SAndy Fiddaman				if (c == '\\n')
531*906afcb8SAndy Fiddaman					return 0;
532*906afcb8SAndy Fiddaman			}
533*906afcb8SAndy Fiddaman			return 1;
534*906afcb8SAndy Fiddaman		}"
535*906afcb8SAndy Fiddaman		if	compile $cc -o ${tmp}r.exe ${tmp}r.c >&$nullout
536*906afcb8SAndy Fiddaman		then	posix_read=${tmp}r.exe
537*906afcb8SAndy Fiddaman		else	echo "$command: cannot compile read -r workaround" >&$stderr
538*906afcb8SAndy Fiddaman			exit 1
539*906afcb8SAndy Fiddaman		fi
540*906afcb8SAndy Fiddaman		;;
541*906afcb8SAndy Fiddaman	esac
542*906afcb8SAndy Fiddaman}
543*906afcb8SAndy Fiddaman
544*906afcb8SAndy Fiddamanexecute()
545*906afcb8SAndy Fiddaman{
546*906afcb8SAndy Fiddaman	case $verbose in
547*906afcb8SAndy Fiddaman	0)	noteout=$nullout ;;
548*906afcb8SAndy Fiddaman	*)	noteout=$stderr ;;
549*906afcb8SAndy Fiddaman	esac
550*906afcb8SAndy Fiddaman	if	test "" != "$cross"
551*906afcb8SAndy Fiddaman	then	crossexec $cross "$@" 9>&$noteout
552*906afcb8SAndy Fiddaman		_execute_=$?
553*906afcb8SAndy Fiddaman	elif	test -d /NextDeveloper
554*906afcb8SAndy Fiddaman	then	"$@" <&$nullin >&$nullout 9>&$noteout
555*906afcb8SAndy Fiddaman		_execute_=$?
556*906afcb8SAndy Fiddaman		"$@" <&$nullin | cat
557*906afcb8SAndy Fiddaman	else	"$@" 9>&$noteout
558*906afcb8SAndy Fiddaman		_execute_=$?
559*906afcb8SAndy Fiddaman	fi
560*906afcb8SAndy Fiddaman	return $_execute_
561*906afcb8SAndy Fiddaman}
562*906afcb8SAndy Fiddaman
563*906afcb8SAndy Fiddamanexclude()
564*906afcb8SAndy Fiddaman{
565*906afcb8SAndy Fiddaman	case $excludes in
566*906afcb8SAndy Fiddaman	'')	return 0 ;;
567*906afcb8SAndy Fiddaman	esac
568*906afcb8SAndy Fiddaman	for _exclude_var
569*906afcb8SAndy Fiddaman	do	eval _exclude_old=\$$_exclude_var
570*906afcb8SAndy Fiddaman		case $_exclude_old in
571*906afcb8SAndy Fiddaman		*" -I"*);;
572*906afcb8SAndy Fiddaman		*)	continue ;;
573*906afcb8SAndy Fiddaman		esac
574*906afcb8SAndy Fiddaman		_exclude_new=
575*906afcb8SAndy Fiddaman		_exclude_sep=
576*906afcb8SAndy Fiddaman		for _exclude_arg in $_exclude_old
577*906afcb8SAndy Fiddaman		do	_exclude_skip=
578*906afcb8SAndy Fiddaman			for _exclude_dir in $excludes
579*906afcb8SAndy Fiddaman			do	case $_exclude_arg in
580*906afcb8SAndy Fiddaman				-I$_exclude_dir|-I*/$_exclude_dir)
581*906afcb8SAndy Fiddaman					_exclude_skip=1
582*906afcb8SAndy Fiddaman					break;
583*906afcb8SAndy Fiddaman					;;
584*906afcb8SAndy Fiddaman				esac
585*906afcb8SAndy Fiddaman			done
586*906afcb8SAndy Fiddaman			case $_exclude_skip in
587*906afcb8SAndy Fiddaman			'')	_exclude_new="$_exclude_new$_exclude_sep$_exclude_arg"
588*906afcb8SAndy Fiddaman				_exclude_sep=" "
589*906afcb8SAndy Fiddaman				;;
590*906afcb8SAndy Fiddaman			esac
591*906afcb8SAndy Fiddaman		done
592*906afcb8SAndy Fiddaman		eval $_exclude_var=\$_exclude_new
593*906afcb8SAndy Fiddaman		case $debug in
594*906afcb8SAndy Fiddaman		0)	;;
595*906afcb8SAndy Fiddaman		*)	echo $command: exclude $_exclude_var: "$_exclude_old => $_exclude_new" >&$stderr
596*906afcb8SAndy Fiddaman			;;
597*906afcb8SAndy Fiddaman		esac
598*906afcb8SAndy Fiddaman	done
599*906afcb8SAndy Fiddaman}
600*906afcb8SAndy Fiddaman
601*906afcb8SAndy Fiddamanall=0
602*906afcb8SAndy Fiddamanapis=
603*906afcb8SAndy Fiddamanbinding="-dy -dn -Bdynamic -Bstatic -Wl,-ashared -Wl,-aarchive -call_shared -non_shared '' -static"
604*906afcb8SAndy Fiddamancomplete=0
605*906afcb8SAndy Fiddamanconfig=0
606*906afcb8SAndy Fiddamandefhdr=
607*906afcb8SAndy Fiddamandefine=1
608*906afcb8SAndy Fiddamanexplicit=0
609*906afcb8SAndy Fiddamaniff=
610*906afcb8SAndy Fiddamanusr=
611*906afcb8SAndy Fiddamancross=
612*906afcb8SAndy Fiddamandebug=0
613*906afcb8SAndy Fiddamandeflib=
614*906afcb8SAndy Fiddamandir=FEATURE
615*906afcb8SAndy Fiddamanexcludes=
616*906afcb8SAndy Fiddamanexecutable="test -x"
617*906afcb8SAndy Fiddamanexists="test -e"
618*906afcb8SAndy Fiddamangothdr=
619*906afcb8SAndy Fiddamangotlib=
620*906afcb8SAndy Fiddamanidno=
621*906afcb8SAndy Fiddamanidyes=
622*906afcb8SAndy Fiddamanifs=${IFS-'
623*906afcb8SAndy Fiddaman	 '}
624*906afcb8SAndy Fiddamanin=
625*906afcb8SAndy Fiddamanincludes=
626*906afcb8SAndy Fiddamanintrinsic=
627*906afcb8SAndy Fiddamanlibpaths="LD_LIBRARY_PATH LD_LIBRARYN32_PATH LD_LIBRARY64_PATH LIBPATH SHLIB_PATH"
628*906afcb8SAndy Fiddaman	LD_LIBRARY_PATH_default=:/lib:/usr/lib
629*906afcb8SAndy Fiddaman	LD_LIBRARYN32_PATH_default=:/lib32:/usr/lib32
630*906afcb8SAndy Fiddaman	LD_LIBRARY64_PATH_default=:/lib64:/usr/lib64
631*906afcb8SAndy Fiddaman	LIBPATH_default=:/lib:/usr/lib
632*906afcb8SAndy Fiddaman	SHLIB_PATH_default=:/shlib:/usr/shlib:/lib:/usr/lib
633*906afcb8SAndy Fiddamannl="
634*906afcb8SAndy Fiddaman"
635*906afcb8SAndy Fiddamanoptimize=1
636*906afcb8SAndy Fiddamanocc=cc
637*906afcb8SAndy Fiddamanone=
638*906afcb8SAndy Fiddamanout=
639*906afcb8SAndy Fiddamanposix_read=-check
640*906afcb8SAndy Fiddamancase `(set -f && set x * && echo $# && set +f) 2>/dev/null` in
641*906afcb8SAndy Fiddaman2)	posix_noglob="set -f" posix_glob="set +f" ;;
642*906afcb8SAndy Fiddaman*)	case `(set -F && set x * && echo $# && set +F) 2>/dev/null` in
643*906afcb8SAndy Fiddaman	2)	posix_noglob="set -F" posix_glob="set +F" ;;
644*906afcb8SAndy Fiddaman	*)	posix_noglob=":" posix_glob=":" ;;
645*906afcb8SAndy Fiddaman	esac
646*906afcb8SAndy Fiddaman	;;
647*906afcb8SAndy Fiddamanesac
648*906afcb8SAndy Fiddamanprotoflags=
649*906afcb8SAndy Fiddamanputhdr=
650*906afcb8SAndy Fiddamanputlib=
651*906afcb8SAndy Fiddamanpragma=
652*906afcb8SAndy Fiddamancase $RANDOM in
653*906afcb8SAndy Fiddaman$RANDOM)shell=bsh
654*906afcb8SAndy Fiddaman	($executable .) 2>/dev/null || executable='test -r'
655*906afcb8SAndy Fiddaman	($exists .) 2>/dev/null || exists='test -r'
656*906afcb8SAndy Fiddaman	;;
657*906afcb8SAndy Fiddaman*)	case $BASH_VERSION in
658*906afcb8SAndy Fiddaman	?*)	shell=bash ;;
659*906afcb8SAndy Fiddaman	*)	shell=ksh ;;
660*906afcb8SAndy Fiddaman	esac
661*906afcb8SAndy Fiddaman	;;
662*906afcb8SAndy Fiddamanesac
663*906afcb8SAndy Fiddamanreallystatic=
664*906afcb8SAndy Fiddamanreallystatictest=
665*906afcb8SAndy Fiddamanregress=
666*906afcb8SAndy Fiddamanstatic=.
667*906afcb8SAndy Fiddamanstatictest=
668*906afcb8SAndy Fiddamancase $COTEMP in
669*906afcb8SAndy Fiddaman"")	case $HOSTNAME in
670*906afcb8SAndy Fiddaman	""|?|??|???|????|????)
671*906afcb8SAndy Fiddaman		tmp=${HOSTNAME}
672*906afcb8SAndy Fiddaman		;;
673*906afcb8SAndy Fiddaman	*)	case $shell in
674*906afcb8SAndy Fiddaman		bsh)	eval `echo $HOSTNAME | sed 's/\\(....\\).*/tmp=\\1/'` ;;
675*906afcb8SAndy Fiddaman		*)	eval 'tmp=${HOSTNAME%${HOSTNAME#????}}' ;;
676*906afcb8SAndy Fiddaman		esac
677*906afcb8SAndy Fiddaman		;;
678*906afcb8SAndy Fiddaman	esac
679*906afcb8SAndy Fiddaman	tmp=${tmp}$$
680*906afcb8SAndy Fiddaman	;;
681*906afcb8SAndy Fiddaman*)	tmp=x${COTEMP}
682*906afcb8SAndy Fiddaman	;;
683*906afcb8SAndy Fiddamanesac
684*906afcb8SAndy FiddamanCOTEMP=${tmp}
685*906afcb8SAndy Fiddamanexport COTEMP
686*906afcb8SAndy Fiddamancase $tmp in
687*906afcb8SAndy Fiddaman./*)	;;
688*906afcb8SAndy Fiddaman??????????*)
689*906afcb8SAndy Fiddaman	case $shell in
690*906afcb8SAndy Fiddaman	bsh)	eval `echo $tmp | sed 's/\\(.........\\).*/tmp=\\1/'` ;;
691*906afcb8SAndy Fiddaman	*)	eval 'tmp=${tmp%${tmp#?????????}}' ;;
692*906afcb8SAndy Fiddaman	esac
693*906afcb8SAndy Fiddaman	;;
694*906afcb8SAndy Fiddaman?????????)
695*906afcb8SAndy Fiddaman	;;
696*906afcb8SAndy Fiddaman????????)
697*906afcb8SAndy Fiddaman	tmp=F$tmp
698*906afcb8SAndy Fiddaman	;;
699*906afcb8SAndy Fiddamanesac
700*906afcb8SAndy Fiddamancase $tmp in
701*906afcb8SAndy Fiddaman./*)	;;
702*906afcb8SAndy Fiddaman*)	tmp=./$tmp ;;
703*906afcb8SAndy Fiddamanesac
704*906afcb8SAndy Fiddamanundef=0
705*906afcb8SAndy Fiddamanverbose=0
706*906afcb8SAndy Fiddamanvers=
707*906afcb8SAndy Fiddaman
708*906afcb8SAndy Fiddaman# options -- `-' for output to stdout otherwise usage
709*906afcb8SAndy Fiddaman
710*906afcb8SAndy Fiddamancase $1 in
711*906afcb8SAndy Fiddaman-)	out=-; shift ;;
712*906afcb8SAndy Fiddamanesac
713*906afcb8SAndy Fiddamanset=
714*906afcb8SAndy Fiddaman
715*906afcb8SAndy Fiddamancase `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
716*906afcb8SAndy Fiddaman0123)	USAGE=$'
717*906afcb8SAndy Fiddaman[-?
718*906afcb8SAndy Fiddaman@(#)$Id: iffe (AT&T Research) 2012-07-17 $
719*906afcb8SAndy Fiddaman]
720*906afcb8SAndy Fiddaman'$USAGE_LICENSE$'
721*906afcb8SAndy Fiddaman[+NAME?iffe - C compilation environment feature probe]
722*906afcb8SAndy Fiddaman[+DESCRIPTION?\biffe\b is a command interpreter that probes the C
723*906afcb8SAndy Fiddaman	compilation environment for features. A feature is any file, option
724*906afcb8SAndy Fiddaman	or symbol that controls or is controlled by the C compiler. \biffe\b
725*906afcb8SAndy Fiddaman	tests features by generating and compiling C programs and observing
726*906afcb8SAndy Fiddaman	the behavior of the C compiler and generated programs.]
727*906afcb8SAndy Fiddaman[+?\biffe\b statements are line oriented. Statements may appear in the
728*906afcb8SAndy Fiddaman	operand list with the \b:\b operand or \bnewline\b as the line
729*906afcb8SAndy Fiddaman	delimiter. The standard input is read if there are no command
730*906afcb8SAndy Fiddaman	line statements or if \afile\a\b.iffe\b is omitted.]
731*906afcb8SAndy Fiddaman[+?Though similar in concept to \bautoconf\b(1) and \bconfig\b(1), there
732*906afcb8SAndy Fiddaman	are fundamental differences. The latter tend to generate global
733*906afcb8SAndy Fiddaman	headers accessed by all components in a package, whereas \biffe\b is
734*906afcb8SAndy Fiddaman	aimed at localized, self contained feature testing.]
735*906afcb8SAndy Fiddaman[+?Output is generated in \bFEATURE/\b\atest\a by default, where \atest\a is
736*906afcb8SAndy Fiddaman	the base name of \afile\a\b.iffe\b or the \biffe\b \brun\b
737*906afcb8SAndy Fiddaman	file operand. Output is first generated in a temporary file; the
738*906afcb8SAndy Fiddaman	output file is updated if it does not exist or if the temporary file
739*906afcb8SAndy Fiddaman	is different. If the first operand is \b-\b then the output is written
740*906afcb8SAndy Fiddaman	to the standard output and no update checks are done.]
741*906afcb8SAndy Fiddaman[+?Files with suffixes \b.iffe\b and \b.iff\b are assumed to contain
742*906afcb8SAndy Fiddaman	\biffe\b statements.]
743*906afcb8SAndy Fiddaman[a:all?Define failed test macros \b0\b. By default only successful test macros
744*906afcb8SAndy Fiddaman	are defined \b1\b.]
745*906afcb8SAndy Fiddaman[c:cc?Sets the C compiler name and flags to be used in the feature
746*906afcb8SAndy Fiddaman	tests.]:[C-compiler-name [C-compiler-flags ...]]]
747*906afcb8SAndy Fiddaman[C:config?Generate \bconfig\b(1) style \aHAVE_\a* macro names. This implies
748*906afcb8SAndy Fiddaman	\b--undef\b. Since \bconfig\b(1) has inconsistent naming conventions,
749*906afcb8SAndy Fiddaman	the \bexp\b op may be needed to translate from the (consistent)
750*906afcb8SAndy Fiddaman	\biffe\b names. Unless otherwise noted a \bconfig\b macro name
751*906afcb8SAndy Fiddaman	is the \biffe\b macro name prefixed with \bHAVE\b and converted to
752*906afcb8SAndy Fiddaman	upper case. \b--config\b is set by default if the command arguments
753*906afcb8SAndy Fiddaman	contain a \brun\b op on an input file with the base name \bconfig\b.]
754*906afcb8SAndy Fiddaman[d:debug?Sets the debug level. Level 0 inhibits most
755*906afcb8SAndy Fiddaman	error messages, level 1 shows compiler messages, and
756*906afcb8SAndy Fiddaman	level 2 traces internal \biffe\b \bsh\b(1) actions and does
757*906afcb8SAndy Fiddaman	not remove core dumps on exit.]#[level]
758*906afcb8SAndy Fiddaman[D:define?Successful test macro definitions are emitted. This is the default.]
759*906afcb8SAndy Fiddaman[E:explicit?Disable implicit test output.]
760*906afcb8SAndy Fiddaman[F:features?Sets the feature test header to \ahdr\a.  This header typically
761*906afcb8SAndy Fiddaman        defines *_SOURCE feature test macros.]:[hdr:=NONE]
762*906afcb8SAndy Fiddaman[i:input?Sets the input file name to \afile\a, which
763*906afcb8SAndy Fiddaman	must contain \biffe\b statements.]:[file]
764*906afcb8SAndy Fiddaman[I:include?Adds \b-I\b\adir\a to the C compiler flags.]:[dir]
765*906afcb8SAndy Fiddaman[L:library?Adds \b-L\b\adir\a to the C compiler flags.]:[dir]
766*906afcb8SAndy Fiddaman[n:name-value?Output \aname\a=\avalue\a assignments only.]
767*906afcb8SAndy Fiddaman[N!:optimize?\b--nooptimize\b disables compiler optimization options.]
768*906afcb8SAndy Fiddaman[o:output?Sets the output file name to \afile\a.]:[file]
769*906afcb8SAndy Fiddaman[O:stdio?Sets the standard io header to \ahdr\a.]:[hdr:=stdio.h]
770*906afcb8SAndy Fiddaman[e:package?Sets the \bproto\b(1) package name to \aname\a.]:[name]
771*906afcb8SAndy Fiddaman[p:prototyped?Emits \b#pragma prototyped\b at the top of the
772*906afcb8SAndy Fiddaman	output file. See \bproto\b(1).]
773*906afcb8SAndy Fiddaman[P:pragma?Emits \b#pragma\b \atext\a at the top of the output file.]:[text]
774*906afcb8SAndy Fiddaman[r:regress?Massage output for regression testing.]
775*906afcb8SAndy Fiddaman[R:root?alternate root.]:[dir]
776*906afcb8SAndy Fiddaman[s:shell?Sets the internal shell name to \aname\a. Used for debugging
777*906afcb8SAndy Fiddaman	Bourne shell compatibility (otherwise \biffe\b uses \aksh\a constructs
778*906afcb8SAndy Fiddaman	if available). The supported names are \bksh\b, \bbsh\b, \bbash\b, and
779*906afcb8SAndy Fiddaman	\bosh\b. \bosh\b forces the \bread -r\b compatibility read command to
780*906afcb8SAndy Fiddaman	be compiled and used instead of \bread -r\b. The default is determined
781*906afcb8SAndy Fiddaman	by probing the shell at startup.]:[name]
782*906afcb8SAndy Fiddaman[S:static?Sets the C compiler flags that force static linking. If not set
783*906afcb8SAndy Fiddaman	then \biffe\b probes the compiler to determine the flags. \biffe\b
784*906afcb8SAndy Fiddaman	must use static linking (no dlls) because on some systems missing
785*906afcb8SAndy Fiddaman	library symbols are only detected when referenced at runtime from
786*906afcb8SAndy Fiddaman	dynamically linked executables.]:[flags]
787*906afcb8SAndy Fiddaman[u:undef?\b#undef\b failed test macros. By default only successful test macros
788*906afcb8SAndy Fiddaman	are defined \b1\b.]
789*906afcb8SAndy Fiddaman[v:verbose?Produce a message line on the standard error for each test as
790*906afcb8SAndy Fiddaman	it is performed.]
791*906afcb8SAndy Fiddaman[x:cross?Some tests compile an executable (\ba.out\b) and then run it.
792*906afcb8SAndy Fiddaman	If the C compiler is a cross compiler and the executable format is
793*906afcb8SAndy Fiddaman	incompatible with the execution environment then the generated
794*906afcb8SAndy Fiddaman	executables must be run in a different environment, possibly on
795*906afcb8SAndy Fiddaman	another host. \acrosstype\a is the HOSTTYPE for generated executables
796*906afcb8SAndy Fiddaman	(the \bpackage\b(1) command generates a consistent HOSTTYPE namespace).
797*906afcb8SAndy Fiddaman	Generated executables are run via \bcrossexec\b(1) with \acrosstype\a
798*906afcb8SAndy Fiddaman	as the first argument. \bcrossexec\b supports remote execution for
799*906afcb8SAndy Fiddaman	cross-compiled executables. See \bcrossexec\b(1) for
800*906afcb8SAndy Fiddaman	details.]:[crosstype]
801*906afcb8SAndy Fiddaman[X:exclude?Removes \b-I\b\adir\a and \b-I\b*/\adir\a C compiler flags.]:[dir]
802*906afcb8SAndy Fiddaman
803*906afcb8SAndy Fiddaman[ - ] [ file.iffe | statement [ : statement ... ] ]
804*906afcb8SAndy Fiddaman
805*906afcb8SAndy Fiddaman[+SYNTAX?\biffe\b input consists of a sequence of statement lines. Statements
806*906afcb8SAndy Fiddaman	that span more than one line contain \abegin\a\b{\b as the last
807*906afcb8SAndy Fiddaman	operand (where \abegin\a is command specific) and zero
808*906afcb8SAndy Fiddaman	or more data lines terminated by a line containing
809*906afcb8SAndy Fiddaman	\b}end\b as the first operand. The statement syntax is:
810*906afcb8SAndy Fiddaman	[\aname\a \b=\b]] [\b!\b]] \atest\a[,\atest\a...]] [\b-\b]]
811*906afcb8SAndy Fiddaman	[\aarg\a[,\aarg\a...]]]] [\aprereq\a ...]]
812*906afcb8SAndy Fiddaman	[\abegin\a{ ... |\bend\b ...]] [= [\adefault\a]]]].
813*906afcb8SAndy Fiddaman	\atest\as and \aarg\as may be combined, separated by commas, to perform
814*906afcb8SAndy Fiddaman	a set of tests on a set of arguments. \aname\a \b=\b before \atest\a
815*906afcb8SAndy Fiddaman	overrides the default test variable and macro name, and \b-\b after
816*906afcb8SAndy Fiddaman	\atest\a performs the test but does not define the test variable and
817*906afcb8SAndy Fiddaman	macro values. \b!\b before \atest\a inverts the test sense for \bif\b,
818*906afcb8SAndy Fiddaman	\belif\b, and \byes{\b and \bno{\b blocks.]
819*906afcb8SAndy Fiddaman[+?\aprereq\as are used when applying the features tests and may be
820*906afcb8SAndy Fiddaman	combinations of:]{
821*906afcb8SAndy Fiddaman		[+compiler options?\b-D\b*, \b-L\b*, etc.]
822*906afcb8SAndy Fiddaman		[+library references?\b-l\b*, *\b.a\b, etc. \b_LIB_\b\aname\a
823*906afcb8SAndy Fiddaman			is defined to be 1 if \b-l\b\aname\a is a library.]
824*906afcb8SAndy Fiddaman		[+header references?*\b.h\b. \a_dir_name\a is defined to be 1
825*906afcb8SAndy Fiddaman			if \adir/name\a\b.h\b is a header, or if \adir\a is
826*906afcb8SAndy Fiddaman			omitted, \b_hdr_\b\aname\a is defined to be 1 if
827*906afcb8SAndy Fiddaman			\aname\a\b.h\b is a header.]
828*906afcb8SAndy Fiddaman		[+-?Prereq grouping mark; prereqs before the first \b-\b are
829*906afcb8SAndy Fiddaman			passed to all feature tests. Subsequent groups
830*906afcb8SAndy Fiddaman			are attempted in left-to-right order until the first
831*906afcb8SAndy Fiddaman			successful group is found.]
832*906afcb8SAndy Fiddaman	}
833*906afcb8SAndy Fiddaman[+?\abegin\a\b{\b ... \b}end\b delimit multiline code blocks that override
834*906afcb8SAndy Fiddaman	or augment the default code provided by \biffe\b. User supplied code
835*906afcb8SAndy Fiddaman	blocks should be compatible with the K&R, ANSI, and C++ C language
836*906afcb8SAndy Fiddaman	dialects for maximal portability. Test code may call the function
837*906afcb8SAndy Fiddaman	\bNOTE("...")\b to emit short text in \b--verbose\b output; only one
838*906afcb8SAndy Fiddaman	\bNOTE()\b should be called per test for readability. In addition to
839*906afcb8SAndy Fiddaman	all macro definitions generated by previous tests, all generated
840*906afcb8SAndy Fiddaman	code contains the following at the top to hide dialect differences:]{
841*906afcb8SAndy Fiddaman		[+ ?#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)]
842*906afcb8SAndy Fiddaman		[+ ?#define _STD_ 1]
843*906afcb8SAndy Fiddaman		[+ ?#define _ARG_(x) x]
844*906afcb8SAndy Fiddaman		[+ ?#define _VOID_ void]
845*906afcb8SAndy Fiddaman		[+ ?#else]
846*906afcb8SAndy Fiddaman		[+ ?#define _STD_ 0]
847*906afcb8SAndy Fiddaman		[+ ?#define _ARG_(x) ()]
848*906afcb8SAndy Fiddaman		[+ ?#define _VOID_ char]
849*906afcb8SAndy Fiddaman		[+ ?#endif]
850*906afcb8SAndy Fiddaman		[+ ?#if defined(__cplusplus)]
851*906afcb8SAndy Fiddaman		[+ ?#define _BEGIN_EXTERNS_ extern "C" {]
852*906afcb8SAndy Fiddaman		[+ ?#define _END_EXTERNS_ }]
853*906afcb8SAndy Fiddaman		[+ ?#else]
854*906afcb8SAndy Fiddaman		[+ ?#define _BEGIN_EXTERNS_]
855*906afcb8SAndy Fiddaman		[+ ?#define _END_EXTERNS_]
856*906afcb8SAndy Fiddaman		[+ ?#endif]
857*906afcb8SAndy Fiddaman		[+ ?#define _NIL_(x) ((x)0)]
858*906afcb8SAndy Fiddaman		[+ ?#include <stdio.h>]
859*906afcb8SAndy Fiddaman	}
860*906afcb8SAndy Fiddaman[+?= \adefault\a may be specified for the \bkey\b, \blib\b, \bmac\b, \bmth\b
861*906afcb8SAndy Fiddaman	and \btyp\b tests. If the test fails for \aarg\a then
862*906afcb8SAndy Fiddaman	\b#define\b \aarg\a \adefault\a is emitted. \bkey\b accepts multiple
863*906afcb8SAndy Fiddaman	\b= \b\adefault\a values; the first valid one is used.]
864*906afcb8SAndy Fiddaman[+?Each test statement generates a portion of a C language header that contains
865*906afcb8SAndy Fiddaman	macro defintions, comments, and other text corresponding to the feature
866*906afcb8SAndy Fiddaman	tests. \b#ifndef _def_\b\aname\a\b_\b\adirectory\a ...
867*906afcb8SAndy Fiddaman	\b#endif\b guards the generated header from multiple \b#include\bs,
868*906afcb8SAndy Fiddaman	where \aname\a is determined by either the \brun\b statement input file
869*906afcb8SAndy Fiddaman	name if any, or the first \atest\a in the first statement, and \adirectory\a
870*906afcb8SAndy Fiddaman	is the basename component of either the \brun\b statement file, if any,
871*906afcb8SAndy Fiddaman	or the current working directory. The output file name is determined
872*906afcb8SAndy Fiddaman	in this order:]{
873*906afcb8SAndy Fiddaman		[+-?If the first command line operand is \b-\b then the output
874*906afcb8SAndy Fiddaman			is written to the standard output.]
875*906afcb8SAndy Fiddaman		[+--output=\afile\a?Output is \afile\a.]
876*906afcb8SAndy Fiddaman		[+set out \afile\a?Output is \afile\a.]
877*906afcb8SAndy Fiddaman		[+[run]] [\adirectory\a/]]\abase\a[\a.suffix\a]]?Output is
878*906afcb8SAndy Fiddaman			\bFEATURE/\b\abase\a.]
879*906afcb8SAndy Fiddaman	}
880*906afcb8SAndy Fiddaman[+?Generated \biffe\b headers are often referenced in C source as:
881*906afcb8SAndy Fiddaman	\b#include "FEATURE/\b\afile\a". The \bnmake\b(1) base rules contain
882*906afcb8SAndy Fiddaman	metarules for generating \bFEATURE/\b\afile\a from
883*906afcb8SAndy Fiddaman	\bfeatures/\b\afile\a[\asuffix\a]], where \asuffix\a may be omitted,
884*906afcb8SAndy Fiddaman	\b.c\b, or \b.sh\b (see the \brun\b test below). Because
885*906afcb8SAndy Fiddaman	\b#include\b prerequisites are automatically detected, \bnmake\b(1)
886*906afcb8SAndy Fiddaman	ensures that all prerequisite \biffe\b headers are generated before
887*906afcb8SAndy Fiddaman	compilation. Note that the directories are deliberately named
888*906afcb8SAndy Fiddaman	\bFEATURE\b and \bfeatures\b to keep case-ignorant file systems
889*906afcb8SAndy Fiddaman	happy.]
890*906afcb8SAndy Fiddaman[+?The feature tests are:]{
891*906afcb8SAndy Fiddaman	[+# \acomment\a?Comment line - ignored.]
892*906afcb8SAndy Fiddaman	[+api \aname\a \aYYYYMMDD\a \asymbol ...\a?Emit api compatibility tests
893*906afcb8SAndy Fiddaman		for \aname\a and \b#define\b \asymbol\a \asymbol\a_\aYYYYMMDD\a
894*906afcb8SAndy Fiddaman		when \aNAME\a_API is >= \aYYYYMMDD\a (\aNAME\a is \aname\a
895*906afcb8SAndy Fiddaman		converted to upper case). If \aNAME\a_API is not defined
896*906afcb8SAndy Fiddaman		then \asymbol\a maps to the newest \aYYYYMMDD\a for \aname\a.]
897*906afcb8SAndy Fiddaman	[+define \aname\a [ (\aarg,...\a) ]] [ \avalue\a ]]?Emit a macro
898*906afcb8SAndy Fiddaman		\b#define\b for \aname\a if it is not already defined. The
899*906afcb8SAndy Fiddaman		definition is passed to subsequent tests.]
900*906afcb8SAndy Fiddaman	[+extern \aname\a \atype\a [ (\aarg,...\a) | [\adimension\a]] ]]?Emit
901*906afcb8SAndy Fiddaman		an \bextern\b prototype for \aname\a if one is not already
902*906afcb8SAndy Fiddaman		defined. The prototype is passed to subsequent tests.]
903*906afcb8SAndy Fiddaman	[+header \aheader\a?Emit \b#include <\b\aheader\a\b>\b if \aheader\a
904*906afcb8SAndy Fiddaman		exists. The \b#include\b is passed to subsequent tests.]
905*906afcb8SAndy Fiddaman	[+print \atext\a?Copy \atext\a to the output file. \atext\a is passed
906*906afcb8SAndy Fiddaman		to subsequent tests.]
907*906afcb8SAndy Fiddaman	[+reference \aheader\a?If \aheader\a exists then add \b#include\b
908*906afcb8SAndy Fiddaman		\aheader\a to subsequent tests.]
909*906afcb8SAndy Fiddaman	[+ver \aname\a \aYYYYMMDD\a?\b#define\b \aNAME\a_VERSION \aYYYYMMDD\a
910*906afcb8SAndy Fiddaman		(\aNAME\a is \aname\a converted to upper case).]
911*906afcb8SAndy Fiddaman	[+cmd \aname\a?Defines \b_cmd_\b\aname\a if \aname\a is an executable
912*906afcb8SAndy Fiddaman		in one of the standard system directories (\b/bin, /etc,
913*906afcb8SAndy Fiddaman		/usr/bin, /usr/etc, /usr/ucb\b).
914*906afcb8SAndy Fiddaman		\b_\b\adirectory\a\b_\b\aname\a is defined for \adirectory\a
915*906afcb8SAndy Fiddaman		in which \aname\a is found (with \b/\b translated to \b_\b).]
916*906afcb8SAndy Fiddaman	[+dat \aname\a?Defines \b_dat_\b\aname\a if \aname\a is a data symbol
917*906afcb8SAndy Fiddaman		in the default libraries.]
918*906afcb8SAndy Fiddaman	[+def \aname\a?Equivalent to \bcmd,dat,hdr,key,lib,mth,sys,typ\b
919*906afcb8SAndy Fiddaman		\aname\a.]
920*906afcb8SAndy Fiddaman	[+dfn \aname\a?If \aname\a is a macro in the candidate headers then
921*906afcb8SAndy Fiddaman		a \b#define\b \aname\a \avalue\a statment is output for the
922*906afcb8SAndy Fiddaman		\avalue\a defined in the headers. The definition is \b#ifndef\b
923*906afcb8SAndy Fiddaman		guarded.]
924*906afcb8SAndy Fiddaman	[+exp \aname\a \aexpression\a?If \aexpression\a is a \"...\" string
925*906afcb8SAndy Fiddaman		then \aname\a is defined to be the string, else if the
926*906afcb8SAndy Fiddaman		\bexpr\b(1) evaluation of \aexpression\a is not 0 then \aname\a
927*906afcb8SAndy Fiddaman		is defined to be 1, otherwise \aname\a is defined to be 0.
928*906afcb8SAndy Fiddaman		Identifiers in \aexpression\a may be previously defined names
929*906afcb8SAndy Fiddaman		from other \biffe\b tests; undefined names evaluate to 0.
930*906afcb8SAndy Fiddaman		If \aname\a was defined in a previous successful test then
931*906afcb8SAndy Fiddaman		the current and subsequent \bexp\b test on \aname\a are
932*906afcb8SAndy Fiddaman		skipped. If \aname\a is \b-\b then the \aexpression\a is
933*906afcb8SAndy Fiddaman		simply evaluated.]
934*906afcb8SAndy Fiddaman	[+hdr \aname\a?Defines \b_hdr_\b\aname\a if the header
935*906afcb8SAndy Fiddaman		\b<\b\aname\a\b.h>\b exists. The \b--config\b macro name is
936*906afcb8SAndy Fiddaman		\bHAVE_\b\aNAME\a\b_H\b.]
937*906afcb8SAndy Fiddaman	[+if \astatement\a ... | \belif\b \astatement\a ... | \belse\b | \bendif\b?
938*906afcb8SAndy Fiddaman		Nested if-else test control.]
939*906afcb8SAndy Fiddaman	[+iff \aname\a?The generated header \b#ifndef-#endif\b macro guard is
940*906afcb8SAndy Fiddaman		\b_\b\aname\a\b_H\b.]
941*906afcb8SAndy Fiddaman	[+inc \afile\a [ re ]]?Read #define macro names from \afile\a
942*906afcb8SAndy Fiddaman		and arrange for those names to evaluate to 1 in \bexp\b
943*906afcb8SAndy Fiddaman		expressions. If \are\a is specified then macros not matching
944*906afcb8SAndy Fiddaman		\are\a are ignored.]
945*906afcb8SAndy Fiddaman	[+key \aname\a?Defines \b_key_\b\aname\a if \aname\a is a reserved
946*906afcb8SAndy Fiddaman		word (keyword).]
947*906afcb8SAndy Fiddaman	[+lcl \aname\a?Generates a \b#include\b statement for the native version
948*906afcb8SAndy Fiddaman		of the header \b<\b\aname\a\b.h>\b if it exists. Defines
949*906afcb8SAndy Fiddaman		\b_lcl_\b\aname\a on success. The \b--config\b macro name is
950*906afcb8SAndy Fiddaman		\bHAVE_\b\aNAME\a\b_H\b. The default \are\a is \b^HAVE_\b
951*906afcb8SAndy Fiddaman		for \b--config\b and \b^_\b otherwise.]
952*906afcb8SAndy Fiddaman	[+lib \aname\a?Defines \b_lib_\b\aname\a if \aname\a is an external
953*906afcb8SAndy Fiddaman		symbol in the default libraries.]
954*906afcb8SAndy Fiddaman	[+mac \aname\a?Defines \b_mac_\b\aname\a if \aname\a is a macro.]
955*906afcb8SAndy Fiddaman	[+mem \astruct.member\a?Defines \b_mem_\b\amember\a\b_\b\astruct\a
956*906afcb8SAndy Fiddaman		if \amember\a is a member of the structure \astruct\a.]
957*906afcb8SAndy Fiddaman	[+mth \aname\a?Defines \b_mth_\b\aname\a if \aname\a is an external
958*906afcb8SAndy Fiddaman		symbol in the math library.]
959*906afcb8SAndy Fiddaman	[+nop \aname\a?If this is the first test then \aname\a may be used
960*906afcb8SAndy Fiddaman		to name the output file and/or the output header guard macro.
961*906afcb8SAndy Fiddaman		Otherwise this test is ignored.]
962*906afcb8SAndy Fiddaman	[+npt \aname\a?Defines \b_npt_\b\aname\a if the \aname\a symbol
963*906afcb8SAndy Fiddaman		requires a prototype. The \b--config\b macro name is
964*906afcb8SAndy Fiddaman		\bHAVE_\aNAME\a\b_DECL\b with the opposite sense.]
965*906afcb8SAndy Fiddaman	[+num \aname\a?Defines \b_num_\b\aname\a if \aname\a is a numeric
966*906afcb8SAndy Fiddaman		constant \aenum\a or \amacro\a.]
967*906afcb8SAndy Fiddaman	[+nxt \aname\a?Defines a string macro \b_nxt_\b\aname\a suitable for
968*906afcb8SAndy Fiddaman		a \b#include\b statement to include the next (on the include
969*906afcb8SAndy Fiddaman		path) or native version of the header \b<\b\aname\a\b.h>\b
970*906afcb8SAndy Fiddaman		if it exists. Also defines the \"...\" form
971*906afcb8SAndy Fiddaman		\b_nxt_\b\aname\a\b_str\b. The \b--config\b macro name is
972*906afcb8SAndy Fiddaman		\bHAVE_\b\aNAME\a\b_NEXT\b.]
973*906afcb8SAndy Fiddaman	[+one \aheader\a ...?Generates a \b#include\b statement for the first
974*906afcb8SAndy Fiddaman		header found in the \aheader\a list.]
975*906afcb8SAndy Fiddaman	[+opt \aname\a?Defines \b_opt_\b\aname\a if \aname\a is a space-separated
976*906afcb8SAndy Fiddaman		token in the global environment variable \bPACKAGE_OPTIONS\b.]
977*906afcb8SAndy Fiddaman	[+pth \afile\a [ \adir\a ... | { \ag1\a - ... - \agn\a } | < \apkg\a [\aver\a ...]] > ]]?Defines
978*906afcb8SAndy Fiddaman		\b_pth_\b\afile\a, with embedded \b/\b chars translated to
979*906afcb8SAndy Fiddaman		\b_\b, to the path of the first instance of \afile\a in the
980*906afcb8SAndy Fiddaman		\adir\a directories. \b{\b ... \b}\b forms a directory list
981*906afcb8SAndy Fiddaman		from the cross-product of \b-\b separated directory groups
982*906afcb8SAndy Fiddaman		\ag1\a ... \agn\a. < ... > forms a directory list for the
983*906afcb8SAndy Fiddaman		package \apkg\a with optional versions. If no operands are
984*906afcb8SAndy Fiddaman		specified then the default PATH directories are used. The
985*906afcb8SAndy Fiddaman		\b--config\b macro name is \aNAME\a\b_PATH\b.]
986*906afcb8SAndy Fiddaman	[+run \afile\a?Runs the tests in \afile\a based on the \afile\a
987*906afcb8SAndy Fiddaman		suffix:]{
988*906afcb8SAndy Fiddaman		[+.c?\afile\a is compiled and executed and the output is copied
989*906afcb8SAndy Fiddaman			to the \biffe\b output file. Macros and headers supplied
990*906afcb8SAndy Fiddaman			to \bbegin{\b ... \b}end\b are also supplied to
991*906afcb8SAndy Fiddaman			\afile\a.]
992*906afcb8SAndy Fiddaman		[+.sh?\afile\a is executed as a shell script and the output is
993*906afcb8SAndy Fiddaman			copied to the \biffe\b output file.]
994*906afcb8SAndy Fiddaman		[+.iffe \bor no suffix?\afile\a contains \biffe\b
995*906afcb8SAndy Fiddaman			statements.]
996*906afcb8SAndy Fiddaman	}
997*906afcb8SAndy Fiddaman	[+set \aoption value\a?Sets option values. The options are described
998*906afcb8SAndy Fiddaman		above.]
999*906afcb8SAndy Fiddaman	[+siz \aname\a?Defines \b_siz_\b\aname\a to be \bsizeof\b(\aname\a) if
1000*906afcb8SAndy Fiddaman		\aname\a is a type in any of \b<sys/types.h>, <times.h>,
1001*906afcb8SAndy Fiddaman		<stddef.h>, <stdlib.h>\b. Any \b.\b characters in \aname\a are
1002*906afcb8SAndy Fiddaman		translated to space before testing and are translated to \b_\b
1003*906afcb8SAndy Fiddaman		in the output macro name.]
1004*906afcb8SAndy Fiddaman	[+sym \aname\a?Defines \b_ary_\b\aname\a if \aname\a is an array,
1005*906afcb8SAndy Fiddaman		\b_fun_\b\aname\a if \aname\a is a function pointer,
1006*906afcb8SAndy Fiddaman		\b_ptr_\b\aname\a if \aname\a is a pointer, or
1007*906afcb8SAndy Fiddaman		\b_reg_\b\aname\a if \aname\a is a scalar. In most cases
1008*906afcb8SAndy Fiddaman		\aname\a is part of a macro expansion.]
1009*906afcb8SAndy Fiddaman	[+sys \aname\a?Defines \b_sys_\b\aname\a if the header
1010*906afcb8SAndy Fiddaman		\b<sys/\b\aname\a\b.h>\b exists. The \b--config\b macro name is
1011*906afcb8SAndy Fiddaman		\bHAVE_SYS_\b\aNAME\a\b_H\b.]
1012*906afcb8SAndy Fiddaman	[+tst \aname\a?A user defined test on name. A source block must be
1013*906afcb8SAndy Fiddaman		supplied. Defines \b_\b\aname\a on success. \btst - ...\b is
1014*906afcb8SAndy Fiddaman		treated as \btst - - ...\b.]
1015*906afcb8SAndy Fiddaman	[+typ \aname\a?Defines \b_typ_\b\aname\a if \aname\a is a type in any
1016*906afcb8SAndy Fiddaman		of \b<sys/types.h>, <times.h>, <stddef.h>, <stdlib.h>\b. Any
1017*906afcb8SAndy Fiddaman		\b.\b characters in \aname\a are translated to space before
1018*906afcb8SAndy Fiddaman		testing and are translated to \b_\b in the output macro name.]
1019*906afcb8SAndy Fiddaman	[+val \aname\a?The output of \becho\b \aname\a is written to the
1020*906afcb8SAndy Fiddaman		output file.]
1021*906afcb8SAndy Fiddaman	[+var \aname\a?A user defined test on name. A source block must be
1022*906afcb8SAndy Fiddaman		supplied. Sets the \bexp\b variable \b_\b\aname\a on success
1023*906afcb8SAndy Fiddaman		but does not define a macro.]
1024*906afcb8SAndy Fiddaman	[+(\aexpression\a)?Equivalent to \bexp -\b \aexpression\a.]
1025*906afcb8SAndy Fiddaman}
1026*906afcb8SAndy Fiddaman[+?Code block names may be prefixed by \bno\b to invert the test sense. The
1027*906afcb8SAndy Fiddaman	block names are:]{
1028*906afcb8SAndy Fiddaman	[+cat?The block is copied to the output file.]
1029*906afcb8SAndy Fiddaman	[+compile?The block is compiled (\bcc -c\b).]
1030*906afcb8SAndy Fiddaman	[+cross?The block is executed as a shell script using \bcrossexec\b(1)
1031*906afcb8SAndy Fiddaman		if \b--cross\b is on, or on the local host otherwise, and the
1032*906afcb8SAndy Fiddaman		output is copied to the output file. Test macros are not
1033*906afcb8SAndy Fiddaman		exported to the script.]
1034*906afcb8SAndy Fiddaman	[+execute?The block is compiled, linked, and executed. \b0\b exit
1035*906afcb8SAndy Fiddaman		status means success.]
1036*906afcb8SAndy Fiddaman	[+fail?If the test fails then the block text is evaluated by
1037*906afcb8SAndy Fiddaman		\bsh\b(1).]
1038*906afcb8SAndy Fiddaman	[+link?The block is compiled and linked (\bcc -o\b).]
1039*906afcb8SAndy Fiddaman	[+macro?The block is preprocessed (\bcc -E\b) and lines containing
1040*906afcb8SAndy Fiddaman		text bracketed by \b<<"\b ... \b">>\b (\aless-than less-than
1041*906afcb8SAndy Fiddaman		double-quote ... double-quote greater-than greater-than\a)
1042*906afcb8SAndy Fiddaman		are copied to the output file with the brackets omitted.]
1043*906afcb8SAndy Fiddaman	[+no?If the test fails then the block text is copied to the
1044*906afcb8SAndy Fiddaman		output file. Deprecated: use { \bif\b \belif\b \belse\b
1045*906afcb8SAndy Fiddaman		\bendif\b } with unnamed \b{\b ... \b}\b blocks.]
1046*906afcb8SAndy Fiddaman	[+note?If the test succeeds then the block is copied to the output
1047*906afcb8SAndy Fiddaman		as a \b/*\b ... \b*/\b comment.]
1048*906afcb8SAndy Fiddaman	[+output?The block is compiled, linked, and executed, and the output
1049*906afcb8SAndy Fiddaman		is copied to the output file.]
1050*906afcb8SAndy Fiddaman	[+pass?If the test succeeds then the block text is evaluated by
1051*906afcb8SAndy Fiddaman		\bsh\b(1).]
1052*906afcb8SAndy Fiddaman	[+preprocess?The block is preprocessed (\bcc -E\b).]
1053*906afcb8SAndy Fiddaman	[+run?The block is executed as a shell script and the output is
1054*906afcb8SAndy Fiddaman		copied to the output file. Succesful test macros are also
1055*906afcb8SAndy Fiddaman		defined as shell variables with value \b1\b and are available
1056*906afcb8SAndy Fiddaman		within the block. Likewise, failed test macros are defined
1057*906afcb8SAndy Fiddaman		as shell variables with value \b0\b.]
1058*906afcb8SAndy Fiddaman	[+status?The block is compiled, linked, and executed, and the exit
1059*906afcb8SAndy Fiddaman		status is the test outcome, 0 for \afailure\a, the value
1060*906afcb8SAndy Fiddaman		otherwise.]
1061*906afcb8SAndy Fiddaman	[+yes?If the test succeeds then the block text is copied to the output
1062*906afcb8SAndy Fiddaman		file. \byes{\b ... \b}end\b is equivalent to the unnamed block
1063*906afcb8SAndy Fiddaman		\b{\b ... \b}\b.  Deprecated: use { \bif\b \belif\b \belse\b
1064*906afcb8SAndy Fiddaman		\bendif\b } with unnamed \b{\b ... \b}\b blocks.]
1065*906afcb8SAndy Fiddaman}
1066*906afcb8SAndy Fiddaman[+SEE ALSO?\bautoconf\b(1), \bconfig\b(1), \bgetconf\b(1), \bcrossexec\b(1),
1067*906afcb8SAndy Fiddaman	\bnmake\b(1), \bpackage\b(1), \bproto\b(1), \bsh\b(1)]
1068*906afcb8SAndy Fiddaman'
1069*906afcb8SAndy Fiddaman	while	getopts -a "$command" "$USAGE" OPT
1070*906afcb8SAndy Fiddaman	do	case $OPT in
1071*906afcb8SAndy Fiddaman		a)	set="$set set all :" ;;
1072*906afcb8SAndy Fiddaman		c)	set="$set set cc $OPTARG :" ;;
1073*906afcb8SAndy Fiddaman		C)	set="$set set config :" ;;
1074*906afcb8SAndy Fiddaman		d)	set="$set set debug $OPTARG :" ;;
1075*906afcb8SAndy Fiddaman		D)	set="$set set define :" ;;
1076*906afcb8SAndy Fiddaman		E)	set="$set set explicit :" ;;
1077*906afcb8SAndy Fiddaman		F)	set="$set set features $OPTARG :" ;;
1078*906afcb8SAndy Fiddaman		i)	set="$set set input $OPTARG :" ;;
1079*906afcb8SAndy Fiddaman		I)	set="$set set include $OPTARG :" ;;
1080*906afcb8SAndy Fiddaman		L)	set="$set set library $OPTARG :" ;;
1081*906afcb8SAndy Fiddaman		n)	set="$set set namval $OPTARG :" ;;
1082*906afcb8SAndy Fiddaman		N)	set="$set set nooptimize $OPTARG :" ;;
1083*906afcb8SAndy Fiddaman		o)	set="$set set output $OPTARG :" ;;
1084*906afcb8SAndy Fiddaman		e)	set="$set set package $OPTARG :" ;;
1085*906afcb8SAndy Fiddaman		p)	set="$set set prototyped :" ;;
1086*906afcb8SAndy Fiddaman		P)	set="$set set pragma $OPTARG :" ;;
1087*906afcb8SAndy Fiddaman		r)	set="$set set regress :" ;;
1088*906afcb8SAndy Fiddaman		R)	set="$set set altroot $OPTARG :" ;;
1089*906afcb8SAndy Fiddaman		s)	set="$set set shell $OPTARG :" ;;
1090*906afcb8SAndy Fiddaman		S)	set="$set set static $OPTARG :" ;;
1091*906afcb8SAndy Fiddaman		O)	set="$set set stdio $OPTARG :" ;;
1092*906afcb8SAndy Fiddaman		u)	set="$set set undef :" ;;
1093*906afcb8SAndy Fiddaman		v)	set="$set set verbose :" ;;
1094*906afcb8SAndy Fiddaman		x)	set="$set set cross $OPTARG :" ;;
1095*906afcb8SAndy Fiddaman		X)	set="$set set exclude $OPTARG :" ;;
1096*906afcb8SAndy Fiddaman		esac
1097*906afcb8SAndy Fiddaman	done
1098*906afcb8SAndy Fiddaman	shift `expr $OPTIND - 1`
1099*906afcb8SAndy Fiddaman	;;
1100*906afcb8SAndy Fiddaman*)	while	:
1101*906afcb8SAndy Fiddaman	do	case $# in
1102*906afcb8SAndy Fiddaman		0)	break ;;
1103*906afcb8SAndy Fiddaman		esac
1104*906afcb8SAndy Fiddaman		case $1 in
1105*906afcb8SAndy Fiddaman		-)	break
1106*906afcb8SAndy Fiddaman			;;
1107*906afcb8SAndy Fiddaman		--)	shift
1108*906afcb8SAndy Fiddaman			break
1109*906afcb8SAndy Fiddaman			;;
1110*906afcb8SAndy Fiddaman		--a|--al|--all)
1111*906afcb8SAndy Fiddaman			REM=a
1112*906afcb8SAndy Fiddaman			;;
1113*906afcb8SAndy Fiddaman		--cc=*)	REM=c`echo X$1 | sed 's,[^=]*=,,'`
1114*906afcb8SAndy Fiddaman			;;
1115*906afcb8SAndy Fiddaman		--co|--con|--conf|--confi|--config)
1116*906afcb8SAndy Fiddaman			REM=C
1117*906afcb8SAndy Fiddaman			;;
1118*906afcb8SAndy Fiddaman		--cr=*|--cro=*|--cros=*|--cross=*)
1119*906afcb8SAndy Fiddaman			REM=x`echo X$1 | sed -e 's,[^=]*=,,'`
1120*906afcb8SAndy Fiddaman			;;
1121*906afcb8SAndy Fiddaman		--d=*|--de=*|--deb=*|--debu=*|--debug=*)
1122*906afcb8SAndy Fiddaman			REM=d`echo X$1 | sed 's,[^=]*=,,'`
1123*906afcb8SAndy Fiddaman			;;
1124*906afcb8SAndy Fiddaman		--def|--defi|--defin|--define)
1125*906afcb8SAndy Fiddaman			REM=D
1126*906afcb8SAndy Fiddaman			;;
1127*906afcb8SAndy Fiddaman		--e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*)
1128*906afcb8SAndy Fiddaman			REM=X`echo X$1 | sed 's,[^=]*=,,'`
1129*906afcb8SAndy Fiddaman			;;
1130*906afcb8SAndy Fiddaman		--e|--ex|--exp|--expl|--expli|--explic|--explici|--explicit)
1131*906afcb8SAndy Fiddaman			REM=E
1132*906afcb8SAndy Fiddaman			;;
1133*906afcb8SAndy Fiddaman		--f=*|--fe=*|--fea=*|--feat=*|--featu=*|--featur=*|--feature=*|--features=*)
1134*906afcb8SAndy Fiddaman			REM=F`echo X$1 | sed 's,[^=]*=,,'`
1135*906afcb8SAndy Fiddaman			;;
1136*906afcb8SAndy Fiddaman		--inp=*|--inpu=*|--input=*)
1137*906afcb8SAndy Fiddaman			REM=i`echo X$1 | sed 's,[^=]*=,,'`
1138*906afcb8SAndy Fiddaman			;;
1139*906afcb8SAndy Fiddaman		--inc=*|--incl=*|--inclu=*|--includ=*|--include=*)
1140*906afcb8SAndy Fiddaman			REM=I`echo X$1 | sed 's,[^=]*=,,'`
1141*906afcb8SAndy Fiddaman			;;
1142*906afcb8SAndy Fiddaman		--l=*|--li=*|--lib=*|--libr=*|--libra=*|--librar=*|--library=*)
1143*906afcb8SAndy Fiddaman			REM=L`echo X$1 | sed 's,[^=]*=,,'`
1144*906afcb8SAndy Fiddaman			;;
1145*906afcb8SAndy Fiddaman		--n|--na|--nam|--name|--name-v|--name-va|--name-val|--name-valu|--name-value)
1146*906afcb8SAndy Fiddaman			REM=n
1147*906afcb8SAndy Fiddaman			;;
1148*906afcb8SAndy Fiddaman		--o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*)
1149*906afcb8SAndy Fiddaman			REM=o`echo X$1 | sed 's,[^=]*=,,'`
1150*906afcb8SAndy Fiddaman			;;
1151*906afcb8SAndy Fiddaman		--pa=*|--pac=*|--pack=*|--packa=*|--packag=*|--package=*)
1152*906afcb8SAndy Fiddaman			REM=e`echo X$1 | sed 's,[^=]*=,,'`
1153*906afcb8SAndy Fiddaman			;;
1154*906afcb8SAndy Fiddaman		--pro|--prot|--proto|--protot|--prototy|--prototyp|--prototype|--prototyped)
1155*906afcb8SAndy Fiddaman			REM=p
1156*906afcb8SAndy Fiddaman			;;
1157*906afcb8SAndy Fiddaman		--pra=*|--prag=*|--pragma=*)
1158*906afcb8SAndy Fiddaman			REM=P`echo X$1 | sed 's,[^=]*=,,'`
1159*906afcb8SAndy Fiddaman			;;
1160*906afcb8SAndy Fiddaman		--r|--re|--reg|--regre|--regres|--regress)
1161*906afcb8SAndy Fiddaman			REM=r
1162*906afcb8SAndy Fiddaman			;;
1163*906afcb8SAndy Fiddaman		--sh=*|--she=*|--shel=*|--shell=*)
1164*906afcb8SAndy Fiddaman			REM=s`echo X$1 | sed 's,[^=]*=,,'`
1165*906afcb8SAndy Fiddaman			;;
1166*906afcb8SAndy Fiddaman		--sta=*|--stat=*|--stati=*|--static=*)
1167*906afcb8SAndy Fiddaman			REM=S`echo X$1 | sed 's,[^=]*=,,'`
1168*906afcb8SAndy Fiddaman			;;
1169*906afcb8SAndy Fiddaman		--std=*|--stdi=*|--stdio=*)
1170*906afcb8SAndy Fiddaman			REM=O`echo X$1 | sed 's,[^=]*=,,'`
1171*906afcb8SAndy Fiddaman			;;
1172*906afcb8SAndy Fiddaman		--u|--un|--und|--unde|--undef)
1173*906afcb8SAndy Fiddaman			REM=u
1174*906afcb8SAndy Fiddaman			;;
1175*906afcb8SAndy Fiddaman		--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
1176*906afcb8SAndy Fiddaman			REM=v
1177*906afcb8SAndy Fiddaman			;;
1178*906afcb8SAndy Fiddaman		--*)	echo $command: $1: unknown option >&2
1179*906afcb8SAndy Fiddaman			exit 2
1180*906afcb8SAndy Fiddaman			;;
1181*906afcb8SAndy Fiddaman		-*)	REM=`echo X$1 | sed 's,X-,,'`
1182*906afcb8SAndy Fiddaman			;;
1183*906afcb8SAndy Fiddaman		*)	break
1184*906afcb8SAndy Fiddaman			;;
1185*906afcb8SAndy Fiddaman		esac
1186*906afcb8SAndy Fiddaman		shift
1187*906afcb8SAndy Fiddaman		while	:
1188*906afcb8SAndy Fiddaman		do	case $REM in
1189*906afcb8SAndy Fiddaman			'')	break ;;
1190*906afcb8SAndy Fiddaman			esac
1191*906afcb8SAndy Fiddaman			eval `echo $REM | sed "s,\(.\)\(.*\),OPT='\1' REM='\2',"`
1192*906afcb8SAndy Fiddaman			case $OPT in
1193*906afcb8SAndy Fiddaman			[cdFiILoOePsSxX])
1194*906afcb8SAndy Fiddaman				case $REM in
1195*906afcb8SAndy Fiddaman				'')	case $# in
1196*906afcb8SAndy Fiddaman					0)	echo $command: -$OPT: option argument expected >&2
1197*906afcb8SAndy Fiddaman						exit 1
1198*906afcb8SAndy Fiddaman						;;
1199*906afcb8SAndy Fiddaman					esac
1200*906afcb8SAndy Fiddaman					OPTARG=$1
1201*906afcb8SAndy Fiddaman					shift
1202*906afcb8SAndy Fiddaman					;;
1203*906afcb8SAndy Fiddaman				*)	OPTARG=$REM
1204*906afcb8SAndy Fiddaman					REM=''
1205*906afcb8SAndy Fiddaman					;;
1206*906afcb8SAndy Fiddaman				esac
1207*906afcb8SAndy Fiddaman			esac
1208*906afcb8SAndy Fiddaman			case $OPT in
1209*906afcb8SAndy Fiddaman			a)	set="$set set all :" ;;
1210*906afcb8SAndy Fiddaman			c)	set="$set set cc $OPTARG :" ;;
1211*906afcb8SAndy Fiddaman			C)	set="$set set config :" ;;
1212*906afcb8SAndy Fiddaman			d)	set="$set set debug $OPTARG :" ;;
1213*906afcb8SAndy Fiddaman			D)	set="$set set define :" ;;
1214*906afcb8SAndy Fiddaman			E)	set="$set set explicit :" ;;
1215*906afcb8SAndy Fiddaman			F)	set="$set set features $OPTARG :" ;;
1216*906afcb8SAndy Fiddaman			i)	set="$set set input $OPTARG :" ;;
1217*906afcb8SAndy Fiddaman			I)	set="$set set include $OPTARG :" ;;
1218*906afcb8SAndy Fiddaman			L)	set="$set set library $OPTARG :" ;;
1219*906afcb8SAndy Fiddaman			n)	set="$set set namval $OPTARG :" ;;
1220*906afcb8SAndy Fiddaman			N)	set="$set set nooptimize $OPTARG :" ;;
1221*906afcb8SAndy Fiddaman			o)	set="$set set output $OPTARG :" ;;
1222*906afcb8SAndy Fiddaman			e)	set="$set set package $OPTARG :" ;;
1223*906afcb8SAndy Fiddaman			p)	set="$set set prototyped :" ;;
1224*906afcb8SAndy Fiddaman			P)	set="$set set pragma $OPTARG :" ;;
1225*906afcb8SAndy Fiddaman			r)	set="$set set regress :" ;;
1226*906afcb8SAndy Fiddaman			s)	set="$set set shell $OPTARG :" ;;
1227*906afcb8SAndy Fiddaman			S)	set="$set set static $OPTARG :" ;;
1228*906afcb8SAndy Fiddaman			O)	set="$set set stdio $OPTARG :" ;;
1229*906afcb8SAndy Fiddaman			u)	set="$set set undef :" ;;
1230*906afcb8SAndy Fiddaman			v)	set="$set set verbose :" ;;
1231*906afcb8SAndy Fiddaman			x)	set="$set set cross $OPTARG :" ;;
1232*906afcb8SAndy Fiddaman			X)	set="$set set exclude $OPTARG :" ;;
1233*906afcb8SAndy Fiddaman			*)	echo "Usage: $command [-aCDEnpruv] [-c C-compiler-name [C-compiler-flags ...]] [-d level]
1234*906afcb8SAndy Fiddaman	    [-F features-header] [-i file] [-o file] [-O stdio-header] [-e name] [-P text]
1235*906afcb8SAndy Fiddaman	    [-s shell-path] [-S[flags]] [-x cross-exec-prefix] [-I dir] [-L dir] [-X dir] [ - ]
1236*906afcb8SAndy Fiddaman	    [ file.iffe | statement [ : statement ... ] ]" >&2
1237*906afcb8SAndy Fiddaman				exit 2
1238*906afcb8SAndy Fiddaman				;;
1239*906afcb8SAndy Fiddaman			esac
1240*906afcb8SAndy Fiddaman		done
1241*906afcb8SAndy Fiddaman	done
1242*906afcb8SAndy Fiddaman	;;
1243*906afcb8SAndy Fiddamanesac
1244*906afcb8SAndy Fiddamancase $1 in
1245*906afcb8SAndy Fiddaman-)	out=-; shift ;;
1246*906afcb8SAndy Fiddamanesac
1247*906afcb8SAndy Fiddamancase $# in
1248*906afcb8SAndy Fiddaman0)	in=- ;;
1249*906afcb8SAndy Fiddamanesac
1250*906afcb8SAndy Fiddamanset -- $set "$@"
1251*906afcb8SAndy Fiddamancase " $* " in
1252*906afcb8SAndy Fiddaman*' set config '*|*' run config.'*|*' run '*' config.'*|*' run '*'/config.'*)
1253*906afcb8SAndy Fiddaman	config=1
1254*906afcb8SAndy Fiddaman	;;
1255*906afcb8SAndy Fiddamanesac
1256*906afcb8SAndy Fiddaman
1257*906afcb8SAndy Fiddaman# standard error to /dev/null unless debugging
1258*906afcb8SAndy Fiddaman# standard output to the current output file
1259*906afcb8SAndy Fiddaman#
1260*906afcb8SAndy Fiddaman#	stdout	original standard output
1261*906afcb8SAndy Fiddaman#	stderr	original standard error
1262*906afcb8SAndy Fiddaman#	nullin	/dev/null input
1263*906afcb8SAndy Fiddaman#	nullout	/dev/null output
1264*906afcb8SAndy Fiddaman
1265*906afcb8SAndy Fiddamanstdout=5 stderr=6 nullin=7 nullout=8
1266*906afcb8SAndy Fiddamaneval "exec $nullin</dev/null $nullout>/dev/null $stdout>&1 $stderr>&2"
1267*906afcb8SAndy Fiddamancase " $* " in
1268*906afcb8SAndy Fiddaman*" set debug "[3456789]*)
1269*906afcb8SAndy Fiddaman	;;
1270*906afcb8SAndy Fiddaman*)	eval "exec 2>&$nullout"
1271*906afcb8SAndy Fiddaman	;;
1272*906afcb8SAndy Fiddamanesac
1273*906afcb8SAndy Fiddaman
1274*906afcb8SAndy Fiddaman# prompt complications
1275*906afcb8SAndy Fiddaman
1276*906afcb8SAndy Fiddamancase `print -n aha </dev/null 2>/dev/null` in
1277*906afcb8SAndy Fiddamanaha)	show='print -n' SHOW='' ;;
1278*906afcb8SAndy Fiddaman*)	case `echo -n aha 2>/dev/null` in
1279*906afcb8SAndy Fiddaman	-n*)	show=echo SHOW='\c' ;;
1280*906afcb8SAndy Fiddaman	*)	show='echo -n' SHOW='' ;;
1281*906afcb8SAndy Fiddaman	esac
1282*906afcb8SAndy Fiddaman	;;
1283*906afcb8SAndy Fiddamanesac
1284*906afcb8SAndy Fiddaman
1285*906afcb8SAndy Fiddaman# tmp files cleaned up on exit
1286*906afcb8SAndy Fiddaman# status: 0:success 1:failure 2:interrupt
1287*906afcb8SAndy Fiddaman
1288*906afcb8SAndy Fiddamanstatus=1
1289*906afcb8SAndy Fiddamancase $debug in
1290*906afcb8SAndy Fiddaman2)	core=
1291*906afcb8SAndy Fiddaman	;;
1292*906afcb8SAndy Fiddaman*)	if	(ulimit -c 0) >/dev/null 2>&1
1293*906afcb8SAndy Fiddaman	then	ulimit -c 0
1294*906afcb8SAndy Fiddaman		core=
1295*906afcb8SAndy Fiddaman	else	core="core core.??*"
1296*906afcb8SAndy Fiddaman	fi
1297*906afcb8SAndy Fiddaman	;;
1298*906afcb8SAndy Fiddamanesac
1299*906afcb8SAndy Fiddamantrap "rm -f $core $tmp*" 0
1300*906afcb8SAndy Fiddamanif	(:>$tmp.c) 2>/dev/null
1301*906afcb8SAndy Fiddamanthen	rm -f $tmp.c
1302*906afcb8SAndy Fiddamanelse	echo "$command: cannot create tmp files in current dir" >&2
1303*906afcb8SAndy Fiddaman	exit 1
1304*906afcb8SAndy Fiddamanfi
1305*906afcb8SAndy Fiddamanstatus=2
1306*906afcb8SAndy Fiddaman
1307*906afcb8SAndy Fiddaman# standard header for c source
1308*906afcb8SAndy Fiddaman
1309*906afcb8SAndy Fiddamanstd='#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
1310*906afcb8SAndy Fiddaman#define _STD_		1
1311*906afcb8SAndy Fiddaman#define _ARG_(x)	x
1312*906afcb8SAndy Fiddaman#define _VOID_		void
1313*906afcb8SAndy Fiddaman#else
1314*906afcb8SAndy Fiddaman#define _STD_		0
1315*906afcb8SAndy Fiddaman#define _ARG_(x)	()
1316*906afcb8SAndy Fiddaman#define _VOID_		char
1317*906afcb8SAndy Fiddaman#endif
1318*906afcb8SAndy Fiddaman#if defined(__cplusplus)
1319*906afcb8SAndy Fiddaman#define _BEGIN_EXTERNS_	extern "C" {
1320*906afcb8SAndy Fiddaman#define _END_EXTERNS_	}
1321*906afcb8SAndy Fiddaman#else
1322*906afcb8SAndy Fiddaman#define _BEGIN_EXTERNS_
1323*906afcb8SAndy Fiddaman#define _END_EXTERNS_
1324*906afcb8SAndy Fiddaman#endif
1325*906afcb8SAndy Fiddaman#define _NIL_(x)	((x)0)'
1326*906afcb8SAndy Fiddamantst=
1327*906afcb8SAndy Fiddamanext="#include <stdio.h>"
1328*906afcb8SAndy Fiddamannoext='*[<"][Ss][Tt][Dd][Ii][Oo].[Hh][">]*|*<ast.h>*|*<sfio.h>*|*/[*]<NOSTDIO>[*]/*'
1329*906afcb8SAndy Fiddaman
1330*906afcb8SAndy Fiddaman# loop on op [ arg [ ... ] ] [ : op [ arg [ ... ] ] ]
1331*906afcb8SAndy Fiddaman
1332*906afcb8SAndy Fiddamanargx=0
1333*906afcb8SAndy Fiddamancur=.
1334*906afcb8SAndy Fiddamancan=
1335*906afcb8SAndy Fiddamancansep=
1336*906afcb8SAndy Fiddamancctest=
1337*906afcb8SAndy Fiddamanfile=
1338*906afcb8SAndy Fiddamanhdrtest=
1339*906afcb8SAndy Fiddamanifelse=NONE
1340*906afcb8SAndy Fiddamanifstack=
1341*906afcb8SAndy Fiddamanini=
1342*906afcb8SAndy Fiddamaninit=1
1343*906afcb8SAndy Fiddamanline=0
1344*906afcb8SAndy Fiddamannan=
1345*906afcb8SAndy Fiddamanprototyped=
1346*906afcb8SAndy Fiddamanwhile	:
1347*906afcb8SAndy Fiddamando	case $in in
1348*906afcb8SAndy Fiddaman	"")	case $argx:$* in
1349*906afcb8SAndy Fiddaman		1:$argv);;
1350*906afcb8SAndy Fiddaman		1:*)	argx=0
1351*906afcb8SAndy Fiddaman			set x $argv
1352*906afcb8SAndy Fiddaman			shift
1353*906afcb8SAndy Fiddaman			;;
1354*906afcb8SAndy Fiddaman		esac
1355*906afcb8SAndy Fiddaman		;;
1356*906afcb8SAndy Fiddaman	*)	case $ini in
1357*906afcb8SAndy Fiddaman		'')	if	read lin
1358*906afcb8SAndy Fiddaman			then	case $shell in
1359*906afcb8SAndy Fiddaman				ksh)	let line=line+1 ;;
1360*906afcb8SAndy Fiddaman				*)	line=`expr $line + 1` ;;
1361*906afcb8SAndy Fiddaman				esac
1362*906afcb8SAndy Fiddaman				$posix_noglob
1363*906afcb8SAndy Fiddaman				set x $lin
1364*906afcb8SAndy Fiddaman				$posix_glob
1365*906afcb8SAndy Fiddaman				case $# in
1366*906afcb8SAndy Fiddaman				1)	continue ;;
1367*906afcb8SAndy Fiddaman				esac
1368*906afcb8SAndy Fiddaman			else	set x
1369*906afcb8SAndy Fiddaman			fi
1370*906afcb8SAndy Fiddaman			;;
1371*906afcb8SAndy Fiddaman		*)	$posix_noglob
1372*906afcb8SAndy Fiddaman			set x $ini
1373*906afcb8SAndy Fiddaman			$posix_glob
1374*906afcb8SAndy Fiddaman			ini=
1375*906afcb8SAndy Fiddaman			;;
1376*906afcb8SAndy Fiddaman		esac
1377*906afcb8SAndy Fiddaman		shift
1378*906afcb8SAndy Fiddaman		case $init in
1379*906afcb8SAndy Fiddaman		1)	case $1 in
1380*906afcb8SAndy Fiddaman			iff)	init=0
1381*906afcb8SAndy Fiddaman				;;
1382*906afcb8SAndy Fiddaman			print|ref|set)
1383*906afcb8SAndy Fiddaman				;;
1384*906afcb8SAndy Fiddaman			*)	init=0
1385*906afcb8SAndy Fiddaman				ini=$*
1386*906afcb8SAndy Fiddaman				set ini
1387*906afcb8SAndy Fiddaman				;;
1388*906afcb8SAndy Fiddaman			esac
1389*906afcb8SAndy Fiddaman		esac
1390*906afcb8SAndy Fiddaman		;;
1391*906afcb8SAndy Fiddaman	esac
1392*906afcb8SAndy Fiddaman	case $# in
1393*906afcb8SAndy Fiddaman	0)	case $ifstack in
1394*906afcb8SAndy Fiddaman		?*)	echo "$command: $file$line: missing endif" >&$stderr
1395*906afcb8SAndy Fiddaman			exit 1
1396*906afcb8SAndy Fiddaman			;;
1397*906afcb8SAndy Fiddaman		esac
1398*906afcb8SAndy Fiddaman		set set out +
1399*906afcb8SAndy Fiddaman		;;
1400*906afcb8SAndy Fiddaman	esac
1401*906afcb8SAndy Fiddaman
1402*906afcb8SAndy Fiddaman	# if nesting
1403*906afcb8SAndy Fiddaman
1404*906afcb8SAndy Fiddaman	while	:
1405*906afcb8SAndy Fiddaman	do	case $1 in
1406*906afcb8SAndy Fiddaman		"if")	ifstack="$ifelse:$ifstack"
1407*906afcb8SAndy Fiddaman			case $ifelse in
1408*906afcb8SAndy Fiddaman			KEEP|NONE)
1409*906afcb8SAndy Fiddaman				ifelse=TEST
1410*906afcb8SAndy Fiddaman				;;
1411*906afcb8SAndy Fiddaman			TEST)	;;
1412*906afcb8SAndy Fiddaman			*)	ifelse=DONE
1413*906afcb8SAndy Fiddaman				;;
1414*906afcb8SAndy Fiddaman			esac
1415*906afcb8SAndy Fiddaman			shift
1416*906afcb8SAndy Fiddaman			case $explicit in
1417*906afcb8SAndy Fiddaman			1)	set '' - "$@"; shift ;;
1418*906afcb8SAndy Fiddaman			esac
1419*906afcb8SAndy Fiddaman			;;
1420*906afcb8SAndy Fiddaman		"elif")	case $ifelse in
1421*906afcb8SAndy Fiddaman			SKIP)	ifelse=TEST
1422*906afcb8SAndy Fiddaman				;;
1423*906afcb8SAndy Fiddaman			TEST)	;;
1424*906afcb8SAndy Fiddaman			*)	ifelse=DONE
1425*906afcb8SAndy Fiddaman				;;
1426*906afcb8SAndy Fiddaman			NONE)	echo "$command: $file$line: $1: no matching if" >&$stderr
1427*906afcb8SAndy Fiddaman				exit 1
1428*906afcb8SAndy Fiddaman				;;
1429*906afcb8SAndy Fiddaman			esac
1430*906afcb8SAndy Fiddaman			shift
1431*906afcb8SAndy Fiddaman			case $explicit in
1432*906afcb8SAndy Fiddaman			1)	set '' - "$@"; shift ;;
1433*906afcb8SAndy Fiddaman			esac
1434*906afcb8SAndy Fiddaman			;;
1435*906afcb8SAndy Fiddaman		"else")	case $ifelse in
1436*906afcb8SAndy Fiddaman			KEEP)	ifelse=DONE
1437*906afcb8SAndy Fiddaman				;;
1438*906afcb8SAndy Fiddaman			SKIP|TEST)
1439*906afcb8SAndy Fiddaman				ifelse=KEEP
1440*906afcb8SAndy Fiddaman				;;
1441*906afcb8SAndy Fiddaman			NONE)	echo "$command: $file$line: $1: no matching if" >&$stderr
1442*906afcb8SAndy Fiddaman				exit 1
1443*906afcb8SAndy Fiddaman				;;
1444*906afcb8SAndy Fiddaman			esac
1445*906afcb8SAndy Fiddaman			shift
1446*906afcb8SAndy Fiddaman			;;
1447*906afcb8SAndy Fiddaman		"endif")case $ifelse in
1448*906afcb8SAndy Fiddaman			NONE)	echo "$command: $file$line: $1: no matching if" >&$stderr
1449*906afcb8SAndy Fiddaman				exit 1
1450*906afcb8SAndy Fiddaman				;;
1451*906afcb8SAndy Fiddaman			esac
1452*906afcb8SAndy Fiddaman			case $shell in
1453*906afcb8SAndy Fiddaman			ksh)	ifelse=${ifstack%%:*}
1454*906afcb8SAndy Fiddaman				ifstack=${ifstack#*:}
1455*906afcb8SAndy Fiddaman				;;
1456*906afcb8SAndy Fiddaman			*)	eval `echo $ifstack | sed 's,\([^:]*\):\(.*\),ifelse=\1 ifstack=\2,'`
1457*906afcb8SAndy Fiddaman				;;
1458*906afcb8SAndy Fiddaman			esac
1459*906afcb8SAndy Fiddaman			shift
1460*906afcb8SAndy Fiddaman			;;
1461*906afcb8SAndy Fiddaman		*)	break
1462*906afcb8SAndy Fiddaman			;;
1463*906afcb8SAndy Fiddaman		esac
1464*906afcb8SAndy Fiddaman	done
1465*906afcb8SAndy Fiddaman
1466*906afcb8SAndy Fiddaman	# check if "run xxx" is equivalent to "set in xxx"
1467*906afcb8SAndy Fiddaman
1468*906afcb8SAndy Fiddaman	case $1 in
1469*906afcb8SAndy Fiddaman	"("*)		set exp - "$@" ;;
1470*906afcb8SAndy Fiddaman	*.iffe|*.iff)	set run "$@" ;;
1471*906afcb8SAndy Fiddaman	esac
1472*906afcb8SAndy Fiddaman	case $1 in
1473*906afcb8SAndy Fiddaman	:)	shift
1474*906afcb8SAndy Fiddaman		continue
1475*906afcb8SAndy Fiddaman		;;
1476*906afcb8SAndy Fiddaman	run)	case $shell in
1477*906afcb8SAndy Fiddaman		bsh)	case $2 in
1478*906afcb8SAndy Fiddaman			*/*)	x=`echo $2 | sed 's,.*[\\\\/],,'` ;;
1479*906afcb8SAndy Fiddaman			*)	x=$2 ;;
1480*906afcb8SAndy Fiddaman			esac
1481*906afcb8SAndy Fiddaman			;;
1482*906afcb8SAndy Fiddaman		*)	eval 'x=${2##*[\\/]}'
1483*906afcb8SAndy Fiddaman			;;
1484*906afcb8SAndy Fiddaman		esac
1485*906afcb8SAndy Fiddaman		case $x in
1486*906afcb8SAndy Fiddaman		*.iffe|*.iff)
1487*906afcb8SAndy Fiddaman			set set in $2 ;;
1488*906afcb8SAndy Fiddaman		*.*)	;;
1489*906afcb8SAndy Fiddaman		*)	set set in $2 ;;
1490*906afcb8SAndy Fiddaman		esac
1491*906afcb8SAndy Fiddaman		;;
1492*906afcb8SAndy Fiddaman	esac
1493*906afcb8SAndy Fiddaman
1494*906afcb8SAndy Fiddaman	# { inc set } drop out early
1495*906afcb8SAndy Fiddaman
1496*906afcb8SAndy Fiddaman	case $1 in
1497*906afcb8SAndy Fiddaman	""|"#"*)continue
1498*906afcb8SAndy Fiddaman		;;
1499*906afcb8SAndy Fiddaman	inc)	case $ifelse in
1500*906afcb8SAndy Fiddaman		DONE|SKIP)	set ''; shift; continue ;;
1501*906afcb8SAndy Fiddaman		esac
1502*906afcb8SAndy Fiddaman		shift
1503*906afcb8SAndy Fiddaman		case $# in
1504*906afcb8SAndy Fiddaman		0)	echo "$command: $file$line: path expected" >&$stderr
1505*906afcb8SAndy Fiddaman			exit 1
1506*906afcb8SAndy Fiddaman			;;
1507*906afcb8SAndy Fiddaman		esac
1508*906afcb8SAndy Fiddaman		p=$1
1509*906afcb8SAndy Fiddaman		shift
1510*906afcb8SAndy Fiddaman		if	test ! -f $p
1511*906afcb8SAndy Fiddaman		then	echo "$command: $file$line: $p: file not found" >&$stderr
1512*906afcb8SAndy Fiddaman			exit 1
1513*906afcb8SAndy Fiddaman		fi
1514*906afcb8SAndy Fiddaman		case $# in
1515*906afcb8SAndy Fiddaman		0)	case $config in
1516*906afcb8SAndy Fiddaman			1)	e="^HAVE_" ;;
1517*906afcb8SAndy Fiddaman			*)	e="^_" ;;
1518*906afcb8SAndy Fiddaman			esac
1519*906afcb8SAndy Fiddaman			;;
1520*906afcb8SAndy Fiddaman		1)	e=$1
1521*906afcb8SAndy Fiddaman			;;
1522*906afcb8SAndy Fiddaman		*)	shift
1523*906afcb8SAndy Fiddaman			echo "$command: $file$line: warning: $*: operands ignored" >&$stderr
1524*906afcb8SAndy Fiddaman			;;
1525*906afcb8SAndy Fiddaman		esac
1526*906afcb8SAndy Fiddaman		eval `sed -e '/^#define[ 	]/!d' -e 's/#define[ 	]//' -e 's/[ 	(].*//' ${e:+"-e/$e/!d"} -e 's/.*/&=1/' $p | LC_ALL=C sort -u`
1527*906afcb8SAndy Fiddaman		continue
1528*906afcb8SAndy Fiddaman		;;
1529*906afcb8SAndy Fiddaman	set)	case $ifelse in
1530*906afcb8SAndy Fiddaman		DONE|SKIP)	set ''; shift; continue ;;
1531*906afcb8SAndy Fiddaman		esac
1532*906afcb8SAndy Fiddaman		shift
1533*906afcb8SAndy Fiddaman		case $1 in
1534*906afcb8SAndy Fiddaman		""|"#"*)op=
1535*906afcb8SAndy Fiddaman			;;
1536*906afcb8SAndy Fiddaman		*)	arg=
1537*906afcb8SAndy Fiddaman			op=$1
1538*906afcb8SAndy Fiddaman			case $op in
1539*906afcb8SAndy Fiddaman			--*)	case $shell in
1540*906afcb8SAndy Fiddaman				bsh)	op=`echo X$op | sed 's/X--//'` ;;
1541*906afcb8SAndy Fiddaman				*)	op=${op#--} ;;
1542*906afcb8SAndy Fiddaman				esac
1543*906afcb8SAndy Fiddaman				;;
1544*906afcb8SAndy Fiddaman			-*)	case $op in
1545*906afcb8SAndy Fiddaman				-??*)	case $shell in
1546*906afcb8SAndy Fiddaman					bsh)	arg=`echo X$op | sed 's/X-.//'`
1547*906afcb8SAndy Fiddaman						op=`echo X$op | sed 's/X\\(-.\\).*/\\1/'`
1548*906afcb8SAndy Fiddaman						;;
1549*906afcb8SAndy Fiddaman					*)	arg=${op#-?}
1550*906afcb8SAndy Fiddaman						op=${op%$arg}
1551*906afcb8SAndy Fiddaman						;;
1552*906afcb8SAndy Fiddaman					esac
1553*906afcb8SAndy Fiddaman					;;
1554*906afcb8SAndy Fiddaman				esac
1555*906afcb8SAndy Fiddaman				case $op in
1556*906afcb8SAndy Fiddaman				a)	op=all ;;
1557*906afcb8SAndy Fiddaman				c)	op=cc ;;
1558*906afcb8SAndy Fiddaman				C)	op=config ;;
1559*906afcb8SAndy Fiddaman				d)	op=debug ;;
1560*906afcb8SAndy Fiddaman				D)	op=define ;;
1561*906afcb8SAndy Fiddaman				E)	op=explicit ;;
1562*906afcb8SAndy Fiddaman				F)	op=features ;;
1563*906afcb8SAndy Fiddaman				i)	op=input ;;
1564*906afcb8SAndy Fiddaman				I)	op=include ;;
1565*906afcb8SAndy Fiddaman				L)	op=library ;;
1566*906afcb8SAndy Fiddaman				n)	op=namval ;;
1567*906afcb8SAndy Fiddaman				N)	op=nooptimize ;;
1568*906afcb8SAndy Fiddaman				o)	op=output ;;
1569*906afcb8SAndy Fiddaman				e)	op=package ;;
1570*906afcb8SAndy Fiddaman				p)	op=prototyped ;;
1571*906afcb8SAndy Fiddaman				P)	op=pragma ;;
1572*906afcb8SAndy Fiddaman				r)	op=regress ;;
1573*906afcb8SAndy Fiddaman				s)	op=shell ;;
1574*906afcb8SAndy Fiddaman				S)	op=static ;;
1575*906afcb8SAndy Fiddaman				O)	op=stdio ;;
1576*906afcb8SAndy Fiddaman				u)	op=undef ;;
1577*906afcb8SAndy Fiddaman				v)	op=verbose ;;
1578*906afcb8SAndy Fiddaman				x)	op=cross ;;
1579*906afcb8SAndy Fiddaman				X)	op=exclude ;;
1580*906afcb8SAndy Fiddaman				esac
1581*906afcb8SAndy Fiddaman				;;
1582*906afcb8SAndy Fiddaman			esac
1583*906afcb8SAndy Fiddaman			shift
1584*906afcb8SAndy Fiddaman			while	:
1585*906afcb8SAndy Fiddaman			do	case $# in
1586*906afcb8SAndy Fiddaman				0)	break ;;
1587*906afcb8SAndy Fiddaman				esac
1588*906afcb8SAndy Fiddaman				case $1 in
1589*906afcb8SAndy Fiddaman				*" "*)	shift
1590*906afcb8SAndy Fiddaman					continue
1591*906afcb8SAndy Fiddaman					;;
1592*906afcb8SAndy Fiddaman				""|"#"*)break
1593*906afcb8SAndy Fiddaman					;;
1594*906afcb8SAndy Fiddaman				:)	shift
1595*906afcb8SAndy Fiddaman					break
1596*906afcb8SAndy Fiddaman					;;
1597*906afcb8SAndy Fiddaman				esac
1598*906afcb8SAndy Fiddaman				case $arg in
1599*906afcb8SAndy Fiddaman				"")	arg=$1 ;;
1600*906afcb8SAndy Fiddaman				*)	arg="$arg $1" ;;
1601*906afcb8SAndy Fiddaman				esac
1602*906afcb8SAndy Fiddaman				shift
1603*906afcb8SAndy Fiddaman			done
1604*906afcb8SAndy Fiddaman			;;
1605*906afcb8SAndy Fiddaman		esac
1606*906afcb8SAndy Fiddaman		case $op in
1607*906afcb8SAndy Fiddaman		all)	all=1
1608*906afcb8SAndy Fiddaman			continue
1609*906afcb8SAndy Fiddaman			;;
1610*906afcb8SAndy Fiddaman		altroot) case $arg in
1611*906afcb8SAndy Fiddaman			""|-)	altroot= ;;
1612*906afcb8SAndy Fiddaman			*)	altroot="$arg" ;;
1613*906afcb8SAndy Fiddaman			esac
1614*906afcb8SAndy Fiddaman			continue
1615*906afcb8SAndy Fiddaman			;;
1616*906afcb8SAndy Fiddaman		cc)	occ=
1617*906afcb8SAndy Fiddaman			for x in $arg
1618*906afcb8SAndy Fiddaman			do	case $occ in
1619*906afcb8SAndy Fiddaman				"")	case $x in
1620*906afcb8SAndy Fiddaman					*=*)	case $shell in
1621*906afcb8SAndy Fiddaman						bsh)	eval $x
1622*906afcb8SAndy Fiddaman							export `echo $x | sed 's/=.*//'`
1623*906afcb8SAndy Fiddaman							;;
1624*906afcb8SAndy Fiddaman						*)	export $x
1625*906afcb8SAndy Fiddaman							;;
1626*906afcb8SAndy Fiddaman						esac
1627*906afcb8SAndy Fiddaman						;;
1628*906afcb8SAndy Fiddaman					-O*)	case $optimize in
1629*906afcb8SAndy Fiddaman						1)	occ=$x ;;
1630*906afcb8SAndy Fiddaman						esac
1631*906afcb8SAndy Fiddaman						;;
1632*906afcb8SAndy Fiddaman					*)	occ=$x
1633*906afcb8SAndy Fiddaman						;;
1634*906afcb8SAndy Fiddaman					esac
1635*906afcb8SAndy Fiddaman					;;
1636*906afcb8SAndy Fiddaman				*)	occ="$occ $x"
1637*906afcb8SAndy Fiddaman					;;
1638*906afcb8SAndy Fiddaman				esac
1639*906afcb8SAndy Fiddaman			done
1640*906afcb8SAndy Fiddaman			exclude occ
1641*906afcb8SAndy Fiddaman			continue
1642*906afcb8SAndy Fiddaman			;;
1643*906afcb8SAndy Fiddaman		config)	config=1
1644*906afcb8SAndy Fiddaman			continue
1645*906afcb8SAndy Fiddaman			;;
1646*906afcb8SAndy Fiddaman		cross)	case $arg in
1647*906afcb8SAndy Fiddaman			""|-)	cross= ;;
1648*906afcb8SAndy Fiddaman			*)	cross="$arg" libpaths= ;;
1649*906afcb8SAndy Fiddaman			esac
1650*906afcb8SAndy Fiddaman			continue
1651*906afcb8SAndy Fiddaman			;;
1652*906afcb8SAndy Fiddaman		debug)	debug=$arg
1653*906afcb8SAndy Fiddaman			case $arg in
1654*906afcb8SAndy Fiddaman			0)	exec 2>&$nullout
1655*906afcb8SAndy Fiddaman				set -
1656*906afcb8SAndy Fiddaman				show=echo
1657*906afcb8SAndy Fiddaman				SHOW=
1658*906afcb8SAndy Fiddaman				;;
1659*906afcb8SAndy Fiddaman			""|1)	exec 2>&$stderr
1660*906afcb8SAndy Fiddaman				set -
1661*906afcb8SAndy Fiddaman				show=echo
1662*906afcb8SAndy Fiddaman				SHOW=
1663*906afcb8SAndy Fiddaman				;;
1664*906afcb8SAndy Fiddaman			2|3)	exec 2>&$stderr
1665*906afcb8SAndy Fiddaman				case $shell in
1666*906afcb8SAndy Fiddaman				ksh)	eval 'PS4="${PS4%+*([ 	])}+\$LINENO+ "'
1667*906afcb8SAndy Fiddaman				esac
1668*906afcb8SAndy Fiddaman				show=echo
1669*906afcb8SAndy Fiddaman				SHOW=
1670*906afcb8SAndy Fiddaman				set -x
1671*906afcb8SAndy Fiddaman				;;
1672*906afcb8SAndy Fiddaman			*)	echo "$command: $arg: debug levels are 0, 1, 2, 3" >&$stderr
1673*906afcb8SAndy Fiddaman				;;
1674*906afcb8SAndy Fiddaman			esac
1675*906afcb8SAndy Fiddaman			continue
1676*906afcb8SAndy Fiddaman			;;
1677*906afcb8SAndy Fiddaman		define)	define=1
1678*906afcb8SAndy Fiddaman			continue
1679*906afcb8SAndy Fiddaman			;;
1680*906afcb8SAndy Fiddaman		exclude)case $arg in
1681*906afcb8SAndy Fiddaman			""|-)	excludes= ;;
1682*906afcb8SAndy Fiddaman			*)	excludes="$excludes $arg" ;;
1683*906afcb8SAndy Fiddaman			esac
1684*906afcb8SAndy Fiddaman			exclude includes occ
1685*906afcb8SAndy Fiddaman			continue
1686*906afcb8SAndy Fiddaman			;;
1687*906afcb8SAndy Fiddaman		explicit)
1688*906afcb8SAndy Fiddaman			explicit=1
1689*906afcb8SAndy Fiddaman			continue
1690*906afcb8SAndy Fiddaman			;;
1691*906afcb8SAndy Fiddaman		features)case $arg in
1692*906afcb8SAndy Fiddaman			'')	tst= ;;
1693*906afcb8SAndy Fiddaman			*)	tst="#include \"$arg\"" ;;
1694*906afcb8SAndy Fiddaman			esac
1695*906afcb8SAndy Fiddaman			continue
1696*906afcb8SAndy Fiddaman			;;
1697*906afcb8SAndy Fiddaman		"in"|input)
1698*906afcb8SAndy Fiddaman			case $arg in
1699*906afcb8SAndy Fiddaman			"")	in=-
1700*906afcb8SAndy Fiddaman				;;
1701*906afcb8SAndy Fiddaman			*)	in=$arg
1702*906afcb8SAndy Fiddaman				if	test ! -r $in
1703*906afcb8SAndy Fiddaman				then	echo "$command: $in: not found" >&$stderr
1704*906afcb8SAndy Fiddaman					exit 1
1705*906afcb8SAndy Fiddaman				fi
1706*906afcb8SAndy Fiddaman				exec < $in
1707*906afcb8SAndy Fiddaman				file=$in:
1708*906afcb8SAndy Fiddaman				case $out in
1709*906afcb8SAndy Fiddaman				"")	case $in in
1710*906afcb8SAndy Fiddaman					*[.\\/]*)
1711*906afcb8SAndy Fiddaman						case $shell in
1712*906afcb8SAndy Fiddaman						bsh)	eval `echo $in | sed -e 's,.*[\\\\/],,' -e 's/\\.[^.]*//' -e 's/^/out=/'`
1713*906afcb8SAndy Fiddaman							;;
1714*906afcb8SAndy Fiddaman						*)	eval 'out=${in##*[\\/]}'
1715*906afcb8SAndy Fiddaman							eval 'out=${out%.*}'
1716*906afcb8SAndy Fiddaman							;;
1717*906afcb8SAndy Fiddaman						esac
1718*906afcb8SAndy Fiddaman						;;
1719*906afcb8SAndy Fiddaman					*)	out=$in
1720*906afcb8SAndy Fiddaman						;;
1721*906afcb8SAndy Fiddaman					esac
1722*906afcb8SAndy Fiddaman					;;
1723*906afcb8SAndy Fiddaman				esac
1724*906afcb8SAndy Fiddaman				;;
1725*906afcb8SAndy Fiddaman			esac
1726*906afcb8SAndy Fiddaman			continue
1727*906afcb8SAndy Fiddaman			;;
1728*906afcb8SAndy Fiddaman		include)case $arg in
1729*906afcb8SAndy Fiddaman			""|-)	includes= ;;
1730*906afcb8SAndy Fiddaman			*)	includes="$includes -I$arg" ;;
1731*906afcb8SAndy Fiddaman			esac
1732*906afcb8SAndy Fiddaman			exclude includes
1733*906afcb8SAndy Fiddaman			continue
1734*906afcb8SAndy Fiddaman			;;
1735*906afcb8SAndy Fiddaman		library)for y in $libpaths
1736*906afcb8SAndy Fiddaman			do	eval $y=\"\$$y:\$arg\$${y}_default\"
1737*906afcb8SAndy Fiddaman				eval export $y
1738*906afcb8SAndy Fiddaman			done
1739*906afcb8SAndy Fiddaman			continue
1740*906afcb8SAndy Fiddaman			;;
1741*906afcb8SAndy Fiddaman		namval)	define=n
1742*906afcb8SAndy Fiddaman			continue
1743*906afcb8SAndy Fiddaman			;;
1744*906afcb8SAndy Fiddaman		nodebug)exec 2>&$nullout
1745*906afcb8SAndy Fiddaman			set -
1746*906afcb8SAndy Fiddaman			continue
1747*906afcb8SAndy Fiddaman			;;
1748*906afcb8SAndy Fiddaman		nodefine)
1749*906afcb8SAndy Fiddaman			define=0
1750*906afcb8SAndy Fiddaman			continue
1751*906afcb8SAndy Fiddaman			;;
1752*906afcb8SAndy Fiddaman		nooptimize)
1753*906afcb8SAndy Fiddaman			optimize=0
1754*906afcb8SAndy Fiddaman			case $occ in
1755*906afcb8SAndy Fiddaman			*" -O"*)occ=`echo $occ | sed 's/ -O[^ ]*//g'`
1756*906afcb8SAndy Fiddaman				cc=$occ
1757*906afcb8SAndy Fiddaman				;;
1758*906afcb8SAndy Fiddaman			esac
1759*906afcb8SAndy Fiddaman			;;
1760*906afcb8SAndy Fiddaman		optimize)
1761*906afcb8SAndy Fiddaman			optimize=1
1762*906afcb8SAndy Fiddaman			;;
1763*906afcb8SAndy Fiddaman		out|output)
1764*906afcb8SAndy Fiddaman			out=$arg
1765*906afcb8SAndy Fiddaman			defhdr=
1766*906afcb8SAndy Fiddaman			usr=
1767*906afcb8SAndy Fiddaman			deflib=
1768*906afcb8SAndy Fiddaman			one=
1769*906afcb8SAndy Fiddaman			puthdr=
1770*906afcb8SAndy Fiddaman			putlib=
1771*906afcb8SAndy Fiddaman			case $op in
1772*906afcb8SAndy Fiddaman			output)	continue ;;
1773*906afcb8SAndy Fiddaman			esac
1774*906afcb8SAndy Fiddaman			def=
1775*906afcb8SAndy Fiddaman			test=
1776*906afcb8SAndy Fiddaman			;;
1777*906afcb8SAndy Fiddaman		package)protoflags="$protoflags -e $arg"
1778*906afcb8SAndy Fiddaman			continue
1779*906afcb8SAndy Fiddaman			;;
1780*906afcb8SAndy Fiddaman		prototyped|noprototyped)
1781*906afcb8SAndy Fiddaman			pragma="$pragma $op"
1782*906afcb8SAndy Fiddaman			case $op in
1783*906afcb8SAndy Fiddaman			prototyped)	prototyped=1 ;;
1784*906afcb8SAndy Fiddaman			*)		prototyped= ;;
1785*906afcb8SAndy Fiddaman			esac
1786*906afcb8SAndy Fiddaman			continue
1787*906afcb8SAndy Fiddaman			;;
1788*906afcb8SAndy Fiddaman		pragma) pragma="$pragma $arg"
1789*906afcb8SAndy Fiddaman			continue
1790*906afcb8SAndy Fiddaman			;;
1791*906afcb8SAndy Fiddaman		regress)regress=1
1792*906afcb8SAndy Fiddaman			version=1995-03-19
1793*906afcb8SAndy Fiddaman			continue
1794*906afcb8SAndy Fiddaman			;;
1795*906afcb8SAndy Fiddaman		shell)	case $arg in
1796*906afcb8SAndy Fiddaman			osh)	posix_read=-no
1797*906afcb8SAndy Fiddaman				shell=bsh
1798*906afcb8SAndy Fiddaman				;;
1799*906afcb8SAndy Fiddaman			esac
1800*906afcb8SAndy Fiddaman			shell=$arg
1801*906afcb8SAndy Fiddaman			continue
1802*906afcb8SAndy Fiddaman			;;
1803*906afcb8SAndy Fiddaman		static)	static=$arg
1804*906afcb8SAndy Fiddaman			continue
1805*906afcb8SAndy Fiddaman			;;
1806*906afcb8SAndy Fiddaman		stdio)	case $arg in
1807*906afcb8SAndy Fiddaman			'')	ext=
1808*906afcb8SAndy Fiddaman				;;
1809*906afcb8SAndy Fiddaman			*)	ext=
1810*906afcb8SAndy Fiddaman				sep=
1811*906afcb8SAndy Fiddaman				for i in $arg
1812*906afcb8SAndy Fiddaman				do	case $i in
1813*906afcb8SAndy Fiddaman					-)	case $ext in
1814*906afcb8SAndy Fiddaman						'')	continue ;;
1815*906afcb8SAndy Fiddaman						*)	break ;;
1816*906afcb8SAndy Fiddaman						esac
1817*906afcb8SAndy Fiddaman						;;
1818*906afcb8SAndy Fiddaman					esac
1819*906afcb8SAndy Fiddaman					echo "#include \"$i\"" > t.c
1820*906afcb8SAndy Fiddaman					if	$cc -E t.c > /dev/null 2>&1
1821*906afcb8SAndy Fiddaman					then	ext="$ext$sep#include \"$arg\""
1822*906afcb8SAndy Fiddaman						sep=$nl
1823*906afcb8SAndy Fiddaman					fi
1824*906afcb8SAndy Fiddaman				done
1825*906afcb8SAndy Fiddaman				;;
1826*906afcb8SAndy Fiddaman			esac
1827*906afcb8SAndy Fiddaman			continue
1828*906afcb8SAndy Fiddaman			;;
1829*906afcb8SAndy Fiddaman		undef)	undef=1
1830*906afcb8SAndy Fiddaman			continue
1831*906afcb8SAndy Fiddaman			;;
1832*906afcb8SAndy Fiddaman		verbose)verbose=1
1833*906afcb8SAndy Fiddaman			continue
1834*906afcb8SAndy Fiddaman			;;
1835*906afcb8SAndy Fiddaman		*)	echo "$command: $op: unknown option" >&$stderr
1836*906afcb8SAndy Fiddaman			exit 1
1837*906afcb8SAndy Fiddaman			;;
1838*906afcb8SAndy Fiddaman		esac
1839*906afcb8SAndy Fiddaman		;;
1840*906afcb8SAndy Fiddaman	api|define|extern|header|include|print|reference|ver)
1841*906afcb8SAndy Fiddaman		op=$1
1842*906afcb8SAndy Fiddaman		shift
1843*906afcb8SAndy Fiddaman		arg=
1844*906afcb8SAndy Fiddaman		;;
1845*906afcb8SAndy Fiddaman	*)	case $2 in
1846*906afcb8SAndy Fiddaman		'=')	def=$1
1847*906afcb8SAndy Fiddaman			shift
1848*906afcb8SAndy Fiddaman			shift
1849*906afcb8SAndy Fiddaman			;;
1850*906afcb8SAndy Fiddaman		*)	case $1 in
1851*906afcb8SAndy Fiddaman			'-'|'?')def=-
1852*906afcb8SAndy Fiddaman				shift
1853*906afcb8SAndy Fiddaman				;;
1854*906afcb8SAndy Fiddaman			*)	def=
1855*906afcb8SAndy Fiddaman				;;
1856*906afcb8SAndy Fiddaman			esac
1857*906afcb8SAndy Fiddaman			;;
1858*906afcb8SAndy Fiddaman		esac
1859*906afcb8SAndy Fiddaman		case $1 in
1860*906afcb8SAndy Fiddaman		'!')	not=1
1861*906afcb8SAndy Fiddaman			shift
1862*906afcb8SAndy Fiddaman			;;
1863*906afcb8SAndy Fiddaman		*)	not=
1864*906afcb8SAndy Fiddaman			;;
1865*906afcb8SAndy Fiddaman		esac
1866*906afcb8SAndy Fiddaman		case $1 in
1867*906afcb8SAndy Fiddaman		*'{')	op=-
1868*906afcb8SAndy Fiddaman			;;
1869*906afcb8SAndy Fiddaman		'('*|'"'*'"'|'<'*'>')
1870*906afcb8SAndy Fiddaman			op=exp
1871*906afcb8SAndy Fiddaman			case $def in
1872*906afcb8SAndy Fiddaman			'')	def=- ;;
1873*906afcb8SAndy Fiddaman			esac
1874*906afcb8SAndy Fiddaman			;;
1875*906afcb8SAndy Fiddaman		*)	op=$1
1876*906afcb8SAndy Fiddaman			shift
1877*906afcb8SAndy Fiddaman			;;
1878*906afcb8SAndy Fiddaman		esac
1879*906afcb8SAndy Fiddaman		arg=
1880*906afcb8SAndy Fiddaman		cc="$occ $includes"
1881*906afcb8SAndy Fiddaman		group=
1882*906afcb8SAndy Fiddaman		groups=
1883*906afcb8SAndy Fiddaman		fail=
1884*906afcb8SAndy Fiddaman		hdr=
1885*906afcb8SAndy Fiddaman		lib=
1886*906afcb8SAndy Fiddaman		mac=
1887*906afcb8SAndy Fiddaman		no=
1888*906afcb8SAndy Fiddaman		note=
1889*906afcb8SAndy Fiddaman		opt=
1890*906afcb8SAndy Fiddaman		pass=
1891*906afcb8SAndy Fiddaman		pth=
1892*906afcb8SAndy Fiddaman		run=
1893*906afcb8SAndy Fiddaman		set=
1894*906afcb8SAndy Fiddaman		src=
1895*906afcb8SAndy Fiddaman		test=
1896*906afcb8SAndy Fiddaman		yes=
1897*906afcb8SAndy Fiddaman		case $# in
1898*906afcb8SAndy Fiddaman		0)	;;
1899*906afcb8SAndy Fiddaman		*)	case $1 in
1900*906afcb8SAndy Fiddaman			"#"*)	set x
1901*906afcb8SAndy Fiddaman				shift
1902*906afcb8SAndy Fiddaman				;;
1903*906afcb8SAndy Fiddaman			*)	case $op in
1904*906afcb8SAndy Fiddaman				ref)	;;
1905*906afcb8SAndy Fiddaman				*)	case $1 in
1906*906afcb8SAndy Fiddaman					'-')	case $op:$2 in
1907*906afcb8SAndy Fiddaman						tst:*)	arg=$1
1908*906afcb8SAndy Fiddaman							case $2 in
1909*906afcb8SAndy Fiddaman							-)	shift ;;
1910*906afcb8SAndy Fiddaman							esac
1911*906afcb8SAndy Fiddaman							;;
1912*906afcb8SAndy Fiddaman						*:-*)	arg=$1
1913*906afcb8SAndy Fiddaman							shift
1914*906afcb8SAndy Fiddaman							;;
1915*906afcb8SAndy Fiddaman						*)	def=-
1916*906afcb8SAndy Fiddaman							shift
1917*906afcb8SAndy Fiddaman							case $1 in
1918*906afcb8SAndy Fiddaman							'('*|*'{'|'"'*'"'|'<'*'>')
1919*906afcb8SAndy Fiddaman								arg=-
1920*906afcb8SAndy Fiddaman								;;
1921*906afcb8SAndy Fiddaman							*)	arg=$1
1922*906afcb8SAndy Fiddaman								case $# in
1923*906afcb8SAndy Fiddaman								0)	;;
1924*906afcb8SAndy Fiddaman								*)	shift ;;
1925*906afcb8SAndy Fiddaman								esac
1926*906afcb8SAndy Fiddaman								;;
1927*906afcb8SAndy Fiddaman							esac
1928*906afcb8SAndy Fiddaman							;;
1929*906afcb8SAndy Fiddaman						esac
1930*906afcb8SAndy Fiddaman						;;
1931*906afcb8SAndy Fiddaman					-*|+*|'('*|*'{'|'"'*'"'|'<'*'>')
1932*906afcb8SAndy Fiddaman						arg=-
1933*906afcb8SAndy Fiddaman						;;
1934*906afcb8SAndy Fiddaman					*)	arg=$1
1935*906afcb8SAndy Fiddaman						shift
1936*906afcb8SAndy Fiddaman						;;
1937*906afcb8SAndy Fiddaman					esac
1938*906afcb8SAndy Fiddaman					;;
1939*906afcb8SAndy Fiddaman				esac
1940*906afcb8SAndy Fiddaman				;;
1941*906afcb8SAndy Fiddaman			esac
1942*906afcb8SAndy Fiddaman			case $1 in
1943*906afcb8SAndy Fiddaman			'('*|'"'*'"'|'<'*'>')
1944*906afcb8SAndy Fiddaman				while	:
1945*906afcb8SAndy Fiddaman				do	case $# in
1946*906afcb8SAndy Fiddaman					0)	break ;;
1947*906afcb8SAndy Fiddaman					esac
1948*906afcb8SAndy Fiddaman					case $1 in
1949*906afcb8SAndy Fiddaman					*[.{}]*)break ;;
1950*906afcb8SAndy Fiddaman					esac
1951*906afcb8SAndy Fiddaman					case $test in
1952*906afcb8SAndy Fiddaman					'')	test=$1 ;;
1953*906afcb8SAndy Fiddaman					*)	test="$test $1" ;;
1954*906afcb8SAndy Fiddaman					esac
1955*906afcb8SAndy Fiddaman					shift
1956*906afcb8SAndy Fiddaman				done
1957*906afcb8SAndy Fiddaman				case $arg in
1958*906afcb8SAndy Fiddaman				'')	arg=- ;;
1959*906afcb8SAndy Fiddaman				esac
1960*906afcb8SAndy Fiddaman				case $op in
1961*906afcb8SAndy Fiddaman				exp)	case $def in
1962*906afcb8SAndy Fiddaman					''|'-')	;;
1963*906afcb8SAndy Fiddaman					*)	arg=$def ;;
1964*906afcb8SAndy Fiddaman					esac
1965*906afcb8SAndy Fiddaman					;;
1966*906afcb8SAndy Fiddaman				esac
1967*906afcb8SAndy Fiddaman				;;
1968*906afcb8SAndy Fiddaman			esac
1969*906afcb8SAndy Fiddaman			sline=$line
1970*906afcb8SAndy Fiddaman			while	:
1971*906afcb8SAndy Fiddaman			do	case $# in
1972*906afcb8SAndy Fiddaman				0)	break ;;
1973*906afcb8SAndy Fiddaman				esac
1974*906afcb8SAndy Fiddaman				case $1 in
1975*906afcb8SAndy Fiddaman				"")	;;
1976*906afcb8SAndy Fiddaman				"#"*)	set x
1977*906afcb8SAndy Fiddaman					;;
1978*906afcb8SAndy Fiddaman				"=")	shift
1979*906afcb8SAndy Fiddaman					set=$*
1980*906afcb8SAndy Fiddaman					case $set in
1981*906afcb8SAndy Fiddaman					"")	set=" " ;;
1982*906afcb8SAndy Fiddaman					esac
1983*906afcb8SAndy Fiddaman					while	:
1984*906afcb8SAndy Fiddaman					do	case $# in
1985*906afcb8SAndy Fiddaman						0)	break ;;
1986*906afcb8SAndy Fiddaman						esac
1987*906afcb8SAndy Fiddaman						shift
1988*906afcb8SAndy Fiddaman					done
1989*906afcb8SAndy Fiddaman					break
1990*906afcb8SAndy Fiddaman					;;
1991*906afcb8SAndy Fiddaman				[abcdefghijklmnopqrstuvwxyz]*'{'|'{')
1992*906afcb8SAndy Fiddaman					v=$1
1993*906afcb8SAndy Fiddaman					shift
1994*906afcb8SAndy Fiddaman					x=
1995*906afcb8SAndy Fiddaman					case $v in
1996*906afcb8SAndy Fiddaman					"note{")
1997*906afcb8SAndy Fiddaman						sep=" " ;;
1998*906afcb8SAndy Fiddaman					*)	sep=$nl ;;
1999*906afcb8SAndy Fiddaman					esac
2000*906afcb8SAndy Fiddaman					case $v in
2001*906afcb8SAndy Fiddaman					'{')	e='}' ;;
2002*906afcb8SAndy Fiddaman					*)	e='}end' ;;
2003*906afcb8SAndy Fiddaman					esac
2004*906afcb8SAndy Fiddaman					n=1
2005*906afcb8SAndy Fiddaman					SEP=
2006*906afcb8SAndy Fiddaman					while	:
2007*906afcb8SAndy Fiddaman					do	case $# in
2008*906afcb8SAndy Fiddaman						0)	case $posix_read in
2009*906afcb8SAndy Fiddaman							-*)	checkread ;;
2010*906afcb8SAndy Fiddaman							esac
2011*906afcb8SAndy Fiddaman							case $in in
2012*906afcb8SAndy Fiddaman							"")	echo "$command: $file$line: missing }end" >&$stderr
2013*906afcb8SAndy Fiddaman								exit 1
2014*906afcb8SAndy Fiddaman								;;
2015*906afcb8SAndy Fiddaman							esac
2016*906afcb8SAndy Fiddaman							while	:
2017*906afcb8SAndy Fiddaman							do	case $posix_read in
2018*906afcb8SAndy Fiddaman								1)	case $shell in
2019*906afcb8SAndy Fiddaman									ksh)	IFS= read -r lin
2020*906afcb8SAndy Fiddaman										eof=$?
2021*906afcb8SAndy Fiddaman										while	:
2022*906afcb8SAndy Fiddaman										do	lin="${lin#[' 	']}"
2023*906afcb8SAndy Fiddaman											case $lin in
2024*906afcb8SAndy Fiddaman											[' 	']*'#'*);;
2025*906afcb8SAndy Fiddaman											*)		break ;;
2026*906afcb8SAndy Fiddaman											esac
2027*906afcb8SAndy Fiddaman										done
2028*906afcb8SAndy Fiddaman										;;
2029*906afcb8SAndy Fiddaman									*)	IFS=
2030*906afcb8SAndy Fiddaman										read -r lin
2031*906afcb8SAndy Fiddaman										eof=$?
2032*906afcb8SAndy Fiddaman										IFS=$ifs
2033*906afcb8SAndy Fiddaman										case $lin in
2034*906afcb8SAndy Fiddaman										[' 	']*) lin=`sed -e 's,^[ 	],,' -e 's,^[ 	]*#,#,' <<!
2035*906afcb8SAndy Fiddaman$lin
2036*906afcb8SAndy Fiddaman!
2037*906afcb8SAndy Fiddaman`
2038*906afcb8SAndy Fiddaman											;;
2039*906afcb8SAndy Fiddaman										esac
2040*906afcb8SAndy Fiddaman										;;
2041*906afcb8SAndy Fiddaman									esac
2042*906afcb8SAndy Fiddaman									;;
2043*906afcb8SAndy Fiddaman								*)	lin=`$posix_read`
2044*906afcb8SAndy Fiddaman									eof=$?
2045*906afcb8SAndy Fiddaman									;;
2046*906afcb8SAndy Fiddaman								esac
2047*906afcb8SAndy Fiddaman								case $eof in
2048*906afcb8SAndy Fiddaman								0)	case $shell in
2049*906afcb8SAndy Fiddaman									ksh)	let line=line+1 ;;
2050*906afcb8SAndy Fiddaman									*)	line=`expr $line + 1` ;;
2051*906afcb8SAndy Fiddaman									esac
2052*906afcb8SAndy Fiddaman									$posix_noglob
2053*906afcb8SAndy Fiddaman									set x $lin
2054*906afcb8SAndy Fiddaman									$posix_glob
2055*906afcb8SAndy Fiddaman									case $2 in
2056*906afcb8SAndy Fiddaman									$v)	case $shell in
2057*906afcb8SAndy Fiddaman										ksh)	let n=n+1 ;;
2058*906afcb8SAndy Fiddaman										*)	n=`expr $n + 1` ;;
2059*906afcb8SAndy Fiddaman										esac
2060*906afcb8SAndy Fiddaman										;;
2061*906afcb8SAndy Fiddaman									$e|$e';')
2062*906afcb8SAndy Fiddaman										case $n in
2063*906afcb8SAndy Fiddaman										1)	shift
2064*906afcb8SAndy Fiddaman											break 2
2065*906afcb8SAndy Fiddaman											;;
2066*906afcb8SAndy Fiddaman										esac
2067*906afcb8SAndy Fiddaman										case $shell in
2068*906afcb8SAndy Fiddaman										ksh)	let n=n-1 ;;
2069*906afcb8SAndy Fiddaman										*)	n=`expr $n - 1` ;;
2070*906afcb8SAndy Fiddaman										esac
2071*906afcb8SAndy Fiddaman										;;
2072*906afcb8SAndy Fiddaman									esac
2073*906afcb8SAndy Fiddaman									x="$x$SEP$lin"
2074*906afcb8SAndy Fiddaman									SEP=$sep
2075*906afcb8SAndy Fiddaman									;;
2076*906afcb8SAndy Fiddaman								*)	echo "$command: $file$line: missing $e" >&$stderr
2077*906afcb8SAndy Fiddaman									exit 1
2078*906afcb8SAndy Fiddaman									;;
2079*906afcb8SAndy Fiddaman								esac
2080*906afcb8SAndy Fiddaman							done
2081*906afcb8SAndy Fiddaman							;;
2082*906afcb8SAndy Fiddaman						esac
2083*906afcb8SAndy Fiddaman						case $1 in
2084*906afcb8SAndy Fiddaman						$v)	case $shell in
2085*906afcb8SAndy Fiddaman							ksh)	let n=n+1 ;;
2086*906afcb8SAndy Fiddaman							*)	n=`expr $n + 1` ;;
2087*906afcb8SAndy Fiddaman							esac
2088*906afcb8SAndy Fiddaman							;;
2089*906afcb8SAndy Fiddaman						$e|$e';')
2090*906afcb8SAndy Fiddaman							case $n in
2091*906afcb8SAndy Fiddaman							1)	break ;;
2092*906afcb8SAndy Fiddaman							esac
2093*906afcb8SAndy Fiddaman							case $shell in
2094*906afcb8SAndy Fiddaman							ksh)	let n=n-1 ;;
2095*906afcb8SAndy Fiddaman							*)	n=`expr $n - 1` ;;
2096*906afcb8SAndy Fiddaman							esac
2097*906afcb8SAndy Fiddaman							;;
2098*906afcb8SAndy Fiddaman						esac
2099*906afcb8SAndy Fiddaman						x="$x$SEP$1"
2100*906afcb8SAndy Fiddaman						SEP=$sep
2101*906afcb8SAndy Fiddaman						shift
2102*906afcb8SAndy Fiddaman					done
2103*906afcb8SAndy Fiddaman					case $v in
2104*906afcb8SAndy Fiddaman					'note{');;
2105*906afcb8SAndy Fiddaman					*)	x="$x$nl" # \r\n bash needs this barf # ;;
2106*906afcb8SAndy Fiddaman					esac
2107*906afcb8SAndy Fiddaman					case $v in
2108*906afcb8SAndy Fiddaman					'fail{')	fail=$x ;;
2109*906afcb8SAndy Fiddaman					'nofail{')	pass=$x v='pass{' ;;
2110*906afcb8SAndy Fiddaman					'nopass{')	fail=$x v='fail{' ;;
2111*906afcb8SAndy Fiddaman					'no{')		no=$x ;;
2112*906afcb8SAndy Fiddaman					'note{')	note=$x ;;
2113*906afcb8SAndy Fiddaman					'pass{')	pass=$x ;;
2114*906afcb8SAndy Fiddaman					'test{')	test=$x ;;
2115*906afcb8SAndy Fiddaman					'yes{'|'{')	yes=$x ;;
2116*906afcb8SAndy Fiddaman					*)		src=$x run=$v ;;
2117*906afcb8SAndy Fiddaman					esac
2118*906afcb8SAndy Fiddaman					;;
2119*906afcb8SAndy Fiddaman				:)	shift
2120*906afcb8SAndy Fiddaman					break
2121*906afcb8SAndy Fiddaman					;;
2122*906afcb8SAndy Fiddaman				*[\"\'\(\)\{\}\ \	]*)
2123*906afcb8SAndy Fiddaman					case $op in
2124*906afcb8SAndy Fiddaman					pth)	pth="$pth $1"
2125*906afcb8SAndy Fiddaman						;;
2126*906afcb8SAndy Fiddaman					*)	case $test in
2127*906afcb8SAndy Fiddaman						'')	test=$1 ;;
2128*906afcb8SAndy Fiddaman						*)	test="$test $1" ;;
2129*906afcb8SAndy Fiddaman						esac
2130*906afcb8SAndy Fiddaman						;;
2131*906afcb8SAndy Fiddaman					esac
2132*906afcb8SAndy Fiddaman					;;
2133*906afcb8SAndy Fiddaman				-)	group=$group$1
2134*906afcb8SAndy Fiddaman					case $group in
2135*906afcb8SAndy Fiddaman					-)	com_hdr=$hdr
2136*906afcb8SAndy Fiddaman						com_lib=$lib
2137*906afcb8SAndy Fiddaman						com_mac=$mac
2138*906afcb8SAndy Fiddaman						com_opt=$opt
2139*906afcb8SAndy Fiddaman						com_pth=$pth
2140*906afcb8SAndy Fiddaman						com_test=$test
2141*906afcb8SAndy Fiddaman						;;
2142*906afcb8SAndy Fiddaman					*)	groups="$groups $1"
2143*906afcb8SAndy Fiddaman						;;
2144*906afcb8SAndy Fiddaman					esac
2145*906afcb8SAndy Fiddaman					;;
2146*906afcb8SAndy Fiddaman				-l*)	case $group in
2147*906afcb8SAndy Fiddaman					--*)	groups="$groups $1" ;;
2148*906afcb8SAndy Fiddaman					*)	lib="$lib $1" ;;
2149*906afcb8SAndy Fiddaman					esac
2150*906afcb8SAndy Fiddaman					;;
2151*906afcb8SAndy Fiddaman				+l*)	case $shell in
2152*906afcb8SAndy Fiddaman					bsh)	x=`echo X$1 | sed 's/X+/-/'` ;;
2153*906afcb8SAndy Fiddaman					*)	eval 'x=-${1#+}' ;;
2154*906afcb8SAndy Fiddaman					esac
2155*906afcb8SAndy Fiddaman					case $group in
2156*906afcb8SAndy Fiddaman					--*)	groups="$groups $x" ;;
2157*906afcb8SAndy Fiddaman					*)	lib="$lib $x" ;;
2158*906afcb8SAndy Fiddaman					esac
2159*906afcb8SAndy Fiddaman					;;
2160*906afcb8SAndy Fiddaman				-*|+*)	case $op in
2161*906afcb8SAndy Fiddaman					ref)	cc="$cc $1"
2162*906afcb8SAndy Fiddaman						occ="$occ $1"
2163*906afcb8SAndy Fiddaman						case $1 in
2164*906afcb8SAndy Fiddaman						-L*)	case $shell in
2165*906afcb8SAndy Fiddaman							ksh)	x=${1#-L} ;;
2166*906afcb8SAndy Fiddaman							*)	x=`echo x$1 | sed 's,^x-L,,'` ;;
2167*906afcb8SAndy Fiddaman							esac
2168*906afcb8SAndy Fiddaman							for y in $libpaths
2169*906afcb8SAndy Fiddaman							do	eval $y=\"\$$y:\$x\$${y}_default\"
2170*906afcb8SAndy Fiddaman								eval export $y
2171*906afcb8SAndy Fiddaman							done
2172*906afcb8SAndy Fiddaman							;;
2173*906afcb8SAndy Fiddaman						esac
2174*906afcb8SAndy Fiddaman						;;
2175*906afcb8SAndy Fiddaman					*)	case $group in
2176*906afcb8SAndy Fiddaman						--*)	groups="$groups $1"
2177*906afcb8SAndy Fiddaman							;;
2178*906afcb8SAndy Fiddaman						*)	case $op in
2179*906afcb8SAndy Fiddaman							run)	opt="$opt $1"
2180*906afcb8SAndy Fiddaman								;;
2181*906afcb8SAndy Fiddaman							*)	case $1 in
2182*906afcb8SAndy Fiddaman								-D*)	mac="$mac $1" ;;
2183*906afcb8SAndy Fiddaman								*)	cc="$cc $1" ;;
2184*906afcb8SAndy Fiddaman								esac
2185*906afcb8SAndy Fiddaman								;;
2186*906afcb8SAndy Fiddaman							esac
2187*906afcb8SAndy Fiddaman							;;
2188*906afcb8SAndy Fiddaman						esac
2189*906afcb8SAndy Fiddaman						;;
2190*906afcb8SAndy Fiddaman					esac
2191*906afcb8SAndy Fiddaman					;;
2192*906afcb8SAndy Fiddaman				*.[aAxX]|*.[dD][lL][lL]|*.[lL][iI][bB])
2193*906afcb8SAndy Fiddaman					case $group in
2194*906afcb8SAndy Fiddaman					--*)	groups="$groups $1" ;;
2195*906afcb8SAndy Fiddaman					*)	lib="$lib $1" ;;
2196*906afcb8SAndy Fiddaman					esac
2197*906afcb8SAndy Fiddaman					;;
2198*906afcb8SAndy Fiddaman				*[.\\/]*)
2199*906afcb8SAndy Fiddaman					case $group in
2200*906afcb8SAndy Fiddaman					--*)	groups="$groups $1"
2201*906afcb8SAndy Fiddaman						;;
2202*906afcb8SAndy Fiddaman					*)	case $op in
2203*906afcb8SAndy Fiddaman						pth)	pth="$pth $1" ;;
2204*906afcb8SAndy Fiddaman						*)	hdr="$hdr $1" ;;
2205*906afcb8SAndy Fiddaman						esac
2206*906afcb8SAndy Fiddaman						;;
2207*906afcb8SAndy Fiddaman					esac
2208*906afcb8SAndy Fiddaman					;;
2209*906afcb8SAndy Fiddaman				*)	case $group in
2210*906afcb8SAndy Fiddaman					--*)	groups="$groups $1"
2211*906afcb8SAndy Fiddaman						;;
2212*906afcb8SAndy Fiddaman					*)	case $op in
2213*906afcb8SAndy Fiddaman						pth)	pth="$pth $1"
2214*906afcb8SAndy Fiddaman							;;
2215*906afcb8SAndy Fiddaman						*)	case $test in
2216*906afcb8SAndy Fiddaman							'')	test=$1 ;;
2217*906afcb8SAndy Fiddaman							*)	test="$test $1" ;;
2218*906afcb8SAndy Fiddaman							esac
2219*906afcb8SAndy Fiddaman							;;
2220*906afcb8SAndy Fiddaman						esac
2221*906afcb8SAndy Fiddaman						;;
2222*906afcb8SAndy Fiddaman					esac
2223*906afcb8SAndy Fiddaman					;;
2224*906afcb8SAndy Fiddaman				esac
2225*906afcb8SAndy Fiddaman				shift
2226*906afcb8SAndy Fiddaman			done
2227*906afcb8SAndy Fiddaman			case $group in
2228*906afcb8SAndy Fiddaman			-)	group= ;;
2229*906afcb8SAndy Fiddaman			esac
2230*906afcb8SAndy Fiddaman			;;
2231*906afcb8SAndy Fiddaman		esac
2232*906afcb8SAndy Fiddaman		;;
2233*906afcb8SAndy Fiddaman	esac
2234*906afcb8SAndy Fiddaman	case $ifelse in
2235*906afcb8SAndy Fiddaman	DONE|SKIP)	continue ;;
2236*906afcb8SAndy Fiddaman	esac
2237*906afcb8SAndy Fiddaman
2238*906afcb8SAndy Fiddaman	# make sure $cc compiles C
2239*906afcb8SAndy Fiddaman
2240*906afcb8SAndy Fiddaman	case $cc in
2241*906afcb8SAndy Fiddaman	"")	cc="$occ $includes" ;;
2242*906afcb8SAndy Fiddaman	esac
2243*906afcb8SAndy Fiddaman	case $cctest in
2244*906afcb8SAndy Fiddaman	"")	checkcc ;;
2245*906afcb8SAndy Fiddaman	esac
2246*906afcb8SAndy Fiddaman
2247*906afcb8SAndy Fiddaman	# some ops allow no args
2248*906afcb8SAndy Fiddaman
2249*906afcb8SAndy Fiddaman	case $arg in
2250*906afcb8SAndy Fiddaman	'')	case $op in
2251*906afcb8SAndy Fiddaman		api)	arg=-
2252*906afcb8SAndy Fiddaman			case $1:$2 in
2253*906afcb8SAndy Fiddaman			[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
2254*906afcb8SAndy Fiddaman				a=$1
2255*906afcb8SAndy Fiddaman				shift
2256*906afcb8SAndy Fiddaman				case " $apis " in
2257*906afcb8SAndy Fiddaman				*" $a "*)
2258*906afcb8SAndy Fiddaman					;;
2259*906afcb8SAndy Fiddaman				*)	apis="$apis $a"
2260*906afcb8SAndy Fiddaman					eval api_sym_${a}= api_ver_${a}=
2261*906afcb8SAndy Fiddaman					;;
2262*906afcb8SAndy Fiddaman				esac
2263*906afcb8SAndy Fiddaman				rel=
2264*906afcb8SAndy Fiddaman				while	:
2265*906afcb8SAndy Fiddaman				do	case $# in
2266*906afcb8SAndy Fiddaman					0)	break ;;
2267*906afcb8SAndy Fiddaman					esac
2268*906afcb8SAndy Fiddaman					case $1 in
2269*906afcb8SAndy Fiddaman					[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
2270*906afcb8SAndy Fiddaman						rel="$rel $1"
2271*906afcb8SAndy Fiddaman						;;
2272*906afcb8SAndy Fiddaman					*)	break
2273*906afcb8SAndy Fiddaman						;;
2274*906afcb8SAndy Fiddaman					esac
2275*906afcb8SAndy Fiddaman					shift
2276*906afcb8SAndy Fiddaman				done
2277*906afcb8SAndy Fiddaman				while	:
2278*906afcb8SAndy Fiddaman				do	case $# in
2279*906afcb8SAndy Fiddaman					0)	break ;;
2280*906afcb8SAndy Fiddaman					esac
2281*906afcb8SAndy Fiddaman					case $1 in
2282*906afcb8SAndy Fiddaman					:)	break ;;
2283*906afcb8SAndy Fiddaman					esac
2284*906afcb8SAndy Fiddaman					eval syms='$'api_sym_${a}
2285*906afcb8SAndy Fiddaman					case $syms in
2286*906afcb8SAndy Fiddaman					'')	sep='' ;;
2287*906afcb8SAndy Fiddaman					*)	sep=$nl ;;
2288*906afcb8SAndy Fiddaman					esac
2289*906afcb8SAndy Fiddaman					for r in $rel
2290*906afcb8SAndy Fiddaman					do	syms=$syms$sep${1}:${r}
2291*906afcb8SAndy Fiddaman						sep=$nl
2292*906afcb8SAndy Fiddaman					done
2293*906afcb8SAndy Fiddaman					eval api_sym_${a}='$'syms
2294*906afcb8SAndy Fiddaman					shift
2295*906afcb8SAndy Fiddaman				done
2296*906afcb8SAndy Fiddaman				;;
2297*906afcb8SAndy Fiddaman			*)	echo "$command: $op: expected: name YYYYMMDD symbol ..." >&$stderr
2298*906afcb8SAndy Fiddaman				;;
2299*906afcb8SAndy Fiddaman			esac
2300*906afcb8SAndy Fiddaman			while	:
2301*906afcb8SAndy Fiddaman			do	case $# in
2302*906afcb8SAndy Fiddaman				0)	break ;;
2303*906afcb8SAndy Fiddaman				esac
2304*906afcb8SAndy Fiddaman				case $1 in
2305*906afcb8SAndy Fiddaman				:)	break ;;
2306*906afcb8SAndy Fiddaman				esac
2307*906afcb8SAndy Fiddaman				shift
2308*906afcb8SAndy Fiddaman			done
2309*906afcb8SAndy Fiddaman			;;
2310*906afcb8SAndy Fiddaman		iff|ini)arg=-
2311*906afcb8SAndy Fiddaman			;;
2312*906afcb8SAndy Fiddaman		comment)copy - "/* $* */"
2313*906afcb8SAndy Fiddaman			continue
2314*906afcb8SAndy Fiddaman			;;
2315*906afcb8SAndy Fiddaman		define)	x=$1
2316*906afcb8SAndy Fiddaman			shift
2317*906afcb8SAndy Fiddaman			case $1 in
2318*906afcb8SAndy Fiddaman			'('*')')
2319*906afcb8SAndy Fiddaman				arg=$1
2320*906afcb8SAndy Fiddaman				shift
2321*906afcb8SAndy Fiddaman				;;
2322*906afcb8SAndy Fiddaman			esac
2323*906afcb8SAndy Fiddaman			case $in in
2324*906afcb8SAndy Fiddaman			"")	v=
2325*906afcb8SAndy Fiddaman				while	:
2326*906afcb8SAndy Fiddaman				do	case $# in
2327*906afcb8SAndy Fiddaman					0)	break ;;
2328*906afcb8SAndy Fiddaman					esac
2329*906afcb8SAndy Fiddaman					t=$1
2330*906afcb8SAndy Fiddaman					shift
2331*906afcb8SAndy Fiddaman					case $t in
2332*906afcb8SAndy Fiddaman					":")	break ;;
2333*906afcb8SAndy Fiddaman					esac
2334*906afcb8SAndy Fiddaman					v="$v $t"
2335*906afcb8SAndy Fiddaman				done
2336*906afcb8SAndy Fiddaman				;;
2337*906afcb8SAndy Fiddaman			*)	v=$*
2338*906afcb8SAndy Fiddaman				;;
2339*906afcb8SAndy Fiddaman			esac
2340*906afcb8SAndy Fiddaman			is mac $x
2341*906afcb8SAndy Fiddaman			copy $tmp.c "$std
2342*906afcb8SAndy Fiddaman$usr
2343*906afcb8SAndy Fiddaman#ifndef $x
2344*906afcb8SAndy Fiddaman(
2345*906afcb8SAndy Fiddaman#endif
2346*906afcb8SAndy Fiddamanint x;
2347*906afcb8SAndy Fiddaman"
2348*906afcb8SAndy Fiddaman			if	compile $cc -c $tmp.c <&$nullin >&$nullout
2349*906afcb8SAndy Fiddaman			then	success -
2350*906afcb8SAndy Fiddaman			else	failure -
2351*906afcb8SAndy Fiddaman				copy - "#define $x$arg	$v"
2352*906afcb8SAndy Fiddaman				usr="$usr${nl}#define $x$arg  $v"
2353*906afcb8SAndy Fiddaman			fi
2354*906afcb8SAndy Fiddaman			continue
2355*906afcb8SAndy Fiddaman			;;
2356*906afcb8SAndy Fiddaman		extern)	x=$1
2357*906afcb8SAndy Fiddaman			shift
2358*906afcb8SAndy Fiddaman			t=$1
2359*906afcb8SAndy Fiddaman			shift
2360*906afcb8SAndy Fiddaman			is npt $x
2361*906afcb8SAndy Fiddaman			copy $tmp.c "
2362*906afcb8SAndy Fiddaman$std
2363*906afcb8SAndy Fiddaman#include <sys/types.h>
2364*906afcb8SAndy Fiddaman$usr
2365*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
2366*906afcb8SAndy Fiddamanstruct _iffe_struct { int _iffe_member; };
2367*906afcb8SAndy Fiddamanextern struct _iffe_struct* $x _ARG_((struct _iffe_struct*));
2368*906afcb8SAndy Fiddaman_END_EXTERNS_
2369*906afcb8SAndy Fiddaman"
2370*906afcb8SAndy Fiddaman			# some compilers with -O only warn for invalid intrinsic prototypes
2371*906afcb8SAndy Fiddaman			case " $cc " in
2372*906afcb8SAndy Fiddaman			*" -O "*)	xx=`echo $cc | sed 's/ -O / /g'` ;;
2373*906afcb8SAndy Fiddaman			*)		xx=$cc ;;
2374*906afcb8SAndy Fiddaman			esac
2375*906afcb8SAndy Fiddaman			if	compile $xx -c $tmp.c <&$nullin >&$nullout
2376*906afcb8SAndy Fiddaman			then	success -
2377*906afcb8SAndy Fiddaman				while	:
2378*906afcb8SAndy Fiddaman				do	case $1 in
2379*906afcb8SAndy Fiddaman					''|'('*|'['*)
2380*906afcb8SAndy Fiddaman						break
2381*906afcb8SAndy Fiddaman						;;
2382*906afcb8SAndy Fiddaman					esac
2383*906afcb8SAndy Fiddaman					t="$t $1"
2384*906afcb8SAndy Fiddaman					shift
2385*906afcb8SAndy Fiddaman				done
2386*906afcb8SAndy Fiddaman				case $in in
2387*906afcb8SAndy Fiddaman				"")	v=
2388*906afcb8SAndy Fiddaman					while	:
2389*906afcb8SAndy Fiddaman					do	case $# in
2390*906afcb8SAndy Fiddaman						0)	break ;;
2391*906afcb8SAndy Fiddaman						esac
2392*906afcb8SAndy Fiddaman						t=$1
2393*906afcb8SAndy Fiddaman						shift
2394*906afcb8SAndy Fiddaman						case $t in
2395*906afcb8SAndy Fiddaman						":")	break ;;
2396*906afcb8SAndy Fiddaman						esac
2397*906afcb8SAndy Fiddaman						v="$v $t"
2398*906afcb8SAndy Fiddaman					done
2399*906afcb8SAndy Fiddaman					;;
2400*906afcb8SAndy Fiddaman				*)	v=$*
2401*906afcb8SAndy Fiddaman					;;
2402*906afcb8SAndy Fiddaman				esac
2403*906afcb8SAndy Fiddaman				copy - "extern $t	$x$v;"
2404*906afcb8SAndy Fiddaman				# NOTE: technically if prototyped is on all tests should
2405*906afcb8SAndy Fiddaman				#	be run through proto(1), but we'd like iffe to
2406*906afcb8SAndy Fiddaman				#	work sans proto -- so we drop the extern's in
2407*906afcb8SAndy Fiddaman				#	the test headers
2408*906afcb8SAndy Fiddaman				case $prototyped in
2409*906afcb8SAndy Fiddaman				'')	usr="$usr${nl}extern $t $x$v;" ;;
2410*906afcb8SAndy Fiddaman				esac
2411*906afcb8SAndy Fiddaman			else	failure -
2412*906afcb8SAndy Fiddaman				case $in in
2413*906afcb8SAndy Fiddaman				"")	while	:
2414*906afcb8SAndy Fiddaman					do	case $# in
2415*906afcb8SAndy Fiddaman						0)	break ;;
2416*906afcb8SAndy Fiddaman						esac
2417*906afcb8SAndy Fiddaman						case $1 in
2418*906afcb8SAndy Fiddaman						":")	break ;;
2419*906afcb8SAndy Fiddaman						esac
2420*906afcb8SAndy Fiddaman					done
2421*906afcb8SAndy Fiddaman					;;
2422*906afcb8SAndy Fiddaman				esac
2423*906afcb8SAndy Fiddaman			fi
2424*906afcb8SAndy Fiddaman			continue
2425*906afcb8SAndy Fiddaman			;;
2426*906afcb8SAndy Fiddaman		header|include|reference)
2427*906afcb8SAndy Fiddaman			while	:
2428*906afcb8SAndy Fiddaman			do	case $# in
2429*906afcb8SAndy Fiddaman				0)	break ;;
2430*906afcb8SAndy Fiddaman				esac
2431*906afcb8SAndy Fiddaman				x=$1
2432*906afcb8SAndy Fiddaman				shift
2433*906afcb8SAndy Fiddaman				case $x in
2434*906afcb8SAndy Fiddaman				":")	break ;;
2435*906afcb8SAndy Fiddaman				esac
2436*906afcb8SAndy Fiddaman				case " $gothdr " in
2437*906afcb8SAndy Fiddaman				*" - $x "*)
2438*906afcb8SAndy Fiddaman					;;
2439*906afcb8SAndy Fiddaman				*" + $x "*)
2440*906afcb8SAndy Fiddaman					case $usr in
2441*906afcb8SAndy Fiddaman					*"# include <"$x">"*)
2442*906afcb8SAndy Fiddaman						;;
2443*906afcb8SAndy Fiddaman					*)	case $op in
2444*906afcb8SAndy Fiddaman						reference)
2445*906afcb8SAndy Fiddaman							;;
2446*906afcb8SAndy Fiddaman						*)	copy - "#include <$x>"
2447*906afcb8SAndy Fiddaman							;;
2448*906afcb8SAndy Fiddaman						esac
2449*906afcb8SAndy Fiddaman						usr="$usr${nl}#include <$x>"
2450*906afcb8SAndy Fiddaman						;;
2451*906afcb8SAndy Fiddaman					esac
2452*906afcb8SAndy Fiddaman					;;
2453*906afcb8SAndy Fiddaman				*)	copy $tmp.c "$std
2454*906afcb8SAndy Fiddaman$usr
2455*906afcb8SAndy Fiddaman#include <$x>
2456*906afcb8SAndy Fiddamanint x;
2457*906afcb8SAndy Fiddaman"
2458*906afcb8SAndy Fiddaman					if	is_hdr - $x
2459*906afcb8SAndy Fiddaman					then	gothdr="$gothdr + $x"
2460*906afcb8SAndy Fiddaman						case $op in
2461*906afcb8SAndy Fiddaman						reference)
2462*906afcb8SAndy Fiddaman							;;
2463*906afcb8SAndy Fiddaman						*)	copy - "#include <$x>"
2464*906afcb8SAndy Fiddaman							;;
2465*906afcb8SAndy Fiddaman						esac
2466*906afcb8SAndy Fiddaman						usr="$usr${nl}#include <$x>"
2467*906afcb8SAndy Fiddaman					else	gothdr="$gothdr - $x"
2468*906afcb8SAndy Fiddaman					fi
2469*906afcb8SAndy Fiddaman					;;
2470*906afcb8SAndy Fiddaman				esac
2471*906afcb8SAndy Fiddaman			done
2472*906afcb8SAndy Fiddaman			continue
2473*906afcb8SAndy Fiddaman			;;
2474*906afcb8SAndy Fiddaman		print)	case $in in
2475*906afcb8SAndy Fiddaman			"")	v=
2476*906afcb8SAndy Fiddaman				while	:
2477*906afcb8SAndy Fiddaman				do	case $# in
2478*906afcb8SAndy Fiddaman					0)	break ;;
2479*906afcb8SAndy Fiddaman					esac
2480*906afcb8SAndy Fiddaman					t=$1
2481*906afcb8SAndy Fiddaman					shift
2482*906afcb8SAndy Fiddaman					case $t in
2483*906afcb8SAndy Fiddaman					":")	break ;;
2484*906afcb8SAndy Fiddaman					esac
2485*906afcb8SAndy Fiddaman					v="$v $t"
2486*906afcb8SAndy Fiddaman				done
2487*906afcb8SAndy Fiddaman				;;
2488*906afcb8SAndy Fiddaman			*)	v=$*
2489*906afcb8SAndy Fiddaman				;;
2490*906afcb8SAndy Fiddaman			esac
2491*906afcb8SAndy Fiddaman			copy - "$*"
2492*906afcb8SAndy Fiddaman			usr="$usr${nl}$v"
2493*906afcb8SAndy Fiddaman			continue
2494*906afcb8SAndy Fiddaman			;;
2495*906afcb8SAndy Fiddaman		ver)	arg=-
2496*906afcb8SAndy Fiddaman			case $1:$2 in
2497*906afcb8SAndy Fiddaman			[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
2498*906afcb8SAndy Fiddaman				vers="$vers$nl$1"
2499*906afcb8SAndy Fiddaman				eval ver_$1=$2
2500*906afcb8SAndy Fiddaman				;;
2501*906afcb8SAndy Fiddaman			*)	echo "$command: $op: expected: name YYYYMMDD" >&$stderr
2502*906afcb8SAndy Fiddaman				;;
2503*906afcb8SAndy Fiddaman			esac
2504*906afcb8SAndy Fiddaman			while	:
2505*906afcb8SAndy Fiddaman			do	case $# in
2506*906afcb8SAndy Fiddaman				0)	break ;;
2507*906afcb8SAndy Fiddaman				esac
2508*906afcb8SAndy Fiddaman				case $1 in
2509*906afcb8SAndy Fiddaman				:)	break ;;
2510*906afcb8SAndy Fiddaman				esac
2511*906afcb8SAndy Fiddaman				shift
2512*906afcb8SAndy Fiddaman			done
2513*906afcb8SAndy Fiddaman			;;
2514*906afcb8SAndy Fiddaman		esac
2515*906afcb8SAndy Fiddaman		;;
2516*906afcb8SAndy Fiddaman	esac
2517*906afcb8SAndy Fiddaman
2518*906afcb8SAndy Fiddaman	# NOTE() support
2519*906afcb8SAndy Fiddaman
2520*906afcb8SAndy Fiddaman	case $ext in
2521*906afcb8SAndy Fiddaman	*"<stdio.h>"*)
2522*906afcb8SAndy Fiddaman		case $ext in
2523*906afcb8SAndy Fiddaman		*"#define NOTE("*)
2524*906afcb8SAndy Fiddaman			;;
2525*906afcb8SAndy Fiddaman		*)	ext="$ext
2526*906afcb8SAndy Fiddaman#define NOTE(s)	do{write(9,\" \",1);write(9,s,strlen(s));write(9,\" ...\",4);}while(0)"
2527*906afcb8SAndy Fiddaman			;;
2528*906afcb8SAndy Fiddaman		esac
2529*906afcb8SAndy Fiddaman		;;
2530*906afcb8SAndy Fiddaman	esac
2531*906afcb8SAndy Fiddaman
2532*906afcb8SAndy Fiddaman	# save $* for ancient shells
2533*906afcb8SAndy Fiddaman
2534*906afcb8SAndy Fiddaman	argx=1
2535*906afcb8SAndy Fiddaman	argv=$*
2536*906afcb8SAndy Fiddaman
2537*906afcb8SAndy Fiddaman	# loop on all candidate groups
2538*906afcb8SAndy Fiddaman
2539*906afcb8SAndy Fiddaman	while	:
2540*906afcb8SAndy Fiddaman	do
2541*906afcb8SAndy Fiddaman		# check the candidate macros
2542*906afcb8SAndy Fiddaman
2543*906afcb8SAndy Fiddaman		cc="$cc $mac"
2544*906afcb8SAndy Fiddaman
2545*906afcb8SAndy Fiddaman		# check for global default headers (some cc -E insist on compiling)
2546*906afcb8SAndy Fiddaman
2547*906afcb8SAndy Fiddaman		case $hdrtest in
2548*906afcb8SAndy Fiddaman		'')	hdrtest=1
2549*906afcb8SAndy Fiddaman			allinc=
2550*906afcb8SAndy Fiddaman			for x in types
2551*906afcb8SAndy Fiddaman			do	case $config in
2552*906afcb8SAndy Fiddaman				0)	c=_sys_${x}
2553*906afcb8SAndy Fiddaman					;;
2554*906afcb8SAndy Fiddaman				1)	case $shell in
2555*906afcb8SAndy Fiddaman					ksh)	typeset -u u=$x ;;
2556*906afcb8SAndy Fiddaman					*)	u=`echo $x | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
2557*906afcb8SAndy Fiddaman					esac
2558*906afcb8SAndy Fiddaman					c=HAVE_SYS_${u}_H
2559*906afcb8SAndy Fiddaman					;;
2560*906afcb8SAndy Fiddaman				esac
2561*906afcb8SAndy Fiddaman				x=sys/$x.h
2562*906afcb8SAndy Fiddaman				echo "${allinc}#include <$x>" > $tmp.c
2563*906afcb8SAndy Fiddaman				if	is_hdr $x
2564*906afcb8SAndy Fiddaman				then	gothdr="$gothdr + $x"
2565*906afcb8SAndy Fiddaman					case $explicit in
2566*906afcb8SAndy Fiddaman					0)	can="$can$cansep#define $c	1	/* #include <$x> ok */"
2567*906afcb8SAndy Fiddaman						nan="$nan$cansep$c=1"
2568*906afcb8SAndy Fiddaman						cansep=$nl
2569*906afcb8SAndy Fiddaman						;;
2570*906afcb8SAndy Fiddaman					esac
2571*906afcb8SAndy Fiddaman					eval $c=1
2572*906afcb8SAndy Fiddaman					allinc="${allinc}#include <$x>$nl"
2573*906afcb8SAndy Fiddaman				else	gothdr="$gothdr - $x"
2574*906afcb8SAndy Fiddaman					case $explicit$all$config$undef in
2575*906afcb8SAndy Fiddaman					0?1?|0??1)
2576*906afcb8SAndy Fiddaman						can="$can$cansep#undef	$c		/* #include <$x> not ok */"
2577*906afcb8SAndy Fiddaman						nan="$nan$cansep$c="
2578*906afcb8SAndy Fiddaman						cansep=$nl
2579*906afcb8SAndy Fiddaman						;;
2580*906afcb8SAndy Fiddaman					01??)	can="$can$cansep#define $c	0	/* #include <$x> not ok */"
2581*906afcb8SAndy Fiddaman						nan="$nan$cansep$c=0"
2582*906afcb8SAndy Fiddaman						cansep=$nl
2583*906afcb8SAndy Fiddaman						;;
2584*906afcb8SAndy Fiddaman					esac
2585*906afcb8SAndy Fiddaman				fi
2586*906afcb8SAndy Fiddaman			done
2587*906afcb8SAndy Fiddaman			;;
2588*906afcb8SAndy Fiddaman		esac
2589*906afcb8SAndy Fiddaman
2590*906afcb8SAndy Fiddaman		# add implicit headers/libraries before the checks
2591*906afcb8SAndy Fiddaman
2592*906afcb8SAndy Fiddaman		case $op in
2593*906afcb8SAndy Fiddaman		npt)	hdr="sys/types.h stdlib.h unistd.h $hdr"
2594*906afcb8SAndy Fiddaman			;;
2595*906afcb8SAndy Fiddaman		siz|typ)hdr="sys/types.h time.h sys/time.h sys/times.h stddef.h stdlib.h $hdr"
2596*906afcb8SAndy Fiddaman			;;
2597*906afcb8SAndy Fiddaman		esac
2598*906afcb8SAndy Fiddaman
2599*906afcb8SAndy Fiddaman		# check the candidate headers
2600*906afcb8SAndy Fiddaman
2601*906afcb8SAndy Fiddaman		case $hdr in
2602*906afcb8SAndy Fiddaman		?*)	z=$hdr
2603*906afcb8SAndy Fiddaman			hdr=
2604*906afcb8SAndy Fiddaman			dis=0
2605*906afcb8SAndy Fiddaman			for x in $z
2606*906afcb8SAndy Fiddaman			do	case $x in
2607*906afcb8SAndy Fiddaman				*.h)	case " $gothdr " in
2608*906afcb8SAndy Fiddaman					*" - $x "*)
2609*906afcb8SAndy Fiddaman						continue
2610*906afcb8SAndy Fiddaman						;;
2611*906afcb8SAndy Fiddaman					*" + $x "*)
2612*906afcb8SAndy Fiddaman						;;
2613*906afcb8SAndy Fiddaman					*)	case $shell in
2614*906afcb8SAndy Fiddaman						bsh)	eval `echo $x | sed -e 's,^\\([^\\\\/]*\\).*[\\\\/]\\([^\\\\/]*\\)\$,\\1_\\2,' -e 's/\\..*//' -e 's/^/c=/'`
2615*906afcb8SAndy Fiddaman							;;
2616*906afcb8SAndy Fiddaman						*)	eval 'c=${x##*[\\/]}'
2617*906afcb8SAndy Fiddaman							eval 'c=${c%%.*}'
2618*906afcb8SAndy Fiddaman							case $x in
2619*906afcb8SAndy Fiddaman							*/*)	eval 'c=${x%%[\\/]*}_${c}' ;;
2620*906afcb8SAndy Fiddaman							esac
2621*906afcb8SAndy Fiddaman							;;
2622*906afcb8SAndy Fiddaman						esac
2623*906afcb8SAndy Fiddaman						case $explicit in
2624*906afcb8SAndy Fiddaman						0)	dis=0
2625*906afcb8SAndy Fiddaman							;;
2626*906afcb8SAndy Fiddaman						*)	case $x in
2627*906afcb8SAndy Fiddaman							*/*)	dis=$c ;;
2628*906afcb8SAndy Fiddaman							*)	dis=hdr ;;
2629*906afcb8SAndy Fiddaman							esac
2630*906afcb8SAndy Fiddaman							case ${dis}_ in
2631*906afcb8SAndy Fiddaman							${op}_*)dis=0 ;;
2632*906afcb8SAndy Fiddaman							*)	dis=1 ;;
2633*906afcb8SAndy Fiddaman							esac
2634*906afcb8SAndy Fiddaman							;;
2635*906afcb8SAndy Fiddaman						esac
2636*906afcb8SAndy Fiddaman						case $config in
2637*906afcb8SAndy Fiddaman						0)	case $x in
2638*906afcb8SAndy Fiddaman							*/*)	c=_${c} ;;
2639*906afcb8SAndy Fiddaman							*)	c=_hdr_${c} ;;
2640*906afcb8SAndy Fiddaman							esac
2641*906afcb8SAndy Fiddaman							;;
2642*906afcb8SAndy Fiddaman						1)	case $shell in
2643*906afcb8SAndy Fiddaman							ksh)	typeset -u u=$c ;;
2644*906afcb8SAndy Fiddaman							*)	u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
2645*906afcb8SAndy Fiddaman							esac
2646*906afcb8SAndy Fiddaman							c=HAVE_${u}_H
2647*906afcb8SAndy Fiddaman							;;
2648*906afcb8SAndy Fiddaman						esac
2649*906afcb8SAndy Fiddaman						echo "${allinc}#include <$x>" > $tmp.c
2650*906afcb8SAndy Fiddaman						if	is_hdr $x
2651*906afcb8SAndy Fiddaman						then	gothdr="$gothdr + $x"
2652*906afcb8SAndy Fiddaman							case $dis in
2653*906afcb8SAndy Fiddaman							0)	can="$can$cansep#define $c	1	/* #include <$x> ok */"
2654*906afcb8SAndy Fiddaman								nan="$nan$cansep$c=1"
2655*906afcb8SAndy Fiddaman								cansep=$nl
2656*906afcb8SAndy Fiddaman								;;
2657*906afcb8SAndy Fiddaman							esac
2658*906afcb8SAndy Fiddaman							eval $c=1
2659*906afcb8SAndy Fiddaman						else	gothdr="$gothdr - $x"
2660*906afcb8SAndy Fiddaman							case $dis$all$config$undef in
2661*906afcb8SAndy Fiddaman							0?1?|0??1)
2662*906afcb8SAndy Fiddaman								can="$can$cansep#undef	$c		/* #include <$x> not ok */"
2663*906afcb8SAndy Fiddaman								nan="$nan$cansep$c="
2664*906afcb8SAndy Fiddaman								cansep=$nl
2665*906afcb8SAndy Fiddaman								;;
2666*906afcb8SAndy Fiddaman							01??)	can="$can$cansep#define $c	0	/* #include <$x> not ok */"
2667*906afcb8SAndy Fiddaman								nan="$nan$cansep$c=0"
2668*906afcb8SAndy Fiddaman								cansep=$nl
2669*906afcb8SAndy Fiddaman								;;
2670*906afcb8SAndy Fiddaman							esac
2671*906afcb8SAndy Fiddaman							continue
2672*906afcb8SAndy Fiddaman						fi
2673*906afcb8SAndy Fiddaman						;;
2674*906afcb8SAndy Fiddaman					esac
2675*906afcb8SAndy Fiddaman					;;
2676*906afcb8SAndy Fiddaman				*)	test -r $x || continue
2677*906afcb8SAndy Fiddaman					;;
2678*906afcb8SAndy Fiddaman				esac
2679*906afcb8SAndy Fiddaman				hdr="$hdr $x"
2680*906afcb8SAndy Fiddaman			done
2681*906afcb8SAndy Fiddaman			;;
2682*906afcb8SAndy Fiddaman		esac
2683*906afcb8SAndy Fiddaman
2684*906afcb8SAndy Fiddaman		# check the candidate libraries
2685*906afcb8SAndy Fiddaman
2686*906afcb8SAndy Fiddaman		case $lib in
2687*906afcb8SAndy Fiddaman		?*)	z=
2688*906afcb8SAndy Fiddaman			for p in $lib
2689*906afcb8SAndy Fiddaman			do	z="$p $z"
2690*906afcb8SAndy Fiddaman			done
2691*906afcb8SAndy Fiddaman			lib=
2692*906afcb8SAndy Fiddaman			p=
2693*906afcb8SAndy Fiddaman			hit=0
2694*906afcb8SAndy Fiddaman			echo "int main(){return(0);}" > $tmp.c
2695*906afcb8SAndy Fiddaman			for x in $z
2696*906afcb8SAndy Fiddaman			do	p=$x
2697*906afcb8SAndy Fiddaman				case " $gotlib " in
2698*906afcb8SAndy Fiddaman				*"- $p "*)
2699*906afcb8SAndy Fiddaman					failure +
2700*906afcb8SAndy Fiddaman					p=
2701*906afcb8SAndy Fiddaman					;;
2702*906afcb8SAndy Fiddaman				*"+ $p "*)
2703*906afcb8SAndy Fiddaman					success +
2704*906afcb8SAndy Fiddaman					lib="$p $lib"
2705*906afcb8SAndy Fiddaman					;;
2706*906afcb8SAndy Fiddaman				*)	rm -f $tmp.exe
2707*906afcb8SAndy Fiddaman					is LIB $p
2708*906afcb8SAndy Fiddaman					if	compile $cc -o $tmp.exe $tmp.c $p $lib <&$nullin >&$nullout
2709*906afcb8SAndy Fiddaman					then	success
2710*906afcb8SAndy Fiddaman						gotlib="$gotlib + $p"
2711*906afcb8SAndy Fiddaman						lib="$p $lib"
2712*906afcb8SAndy Fiddaman						e=0
2713*906afcb8SAndy Fiddaman					else	a=
2714*906afcb8SAndy Fiddaman						e=1
2715*906afcb8SAndy Fiddaman						for l in $z
2716*906afcb8SAndy Fiddaman						do	case $l in
2717*906afcb8SAndy Fiddaman							-)	a=
2718*906afcb8SAndy Fiddaman								continue
2719*906afcb8SAndy Fiddaman								;;
2720*906afcb8SAndy Fiddaman							$p)	a=$p
2721*906afcb8SAndy Fiddaman								continue
2722*906afcb8SAndy Fiddaman								;;
2723*906afcb8SAndy Fiddaman							*)	case $gotlib in
2724*906afcb8SAndy Fiddaman								*" $l "*)	continue ;;
2725*906afcb8SAndy Fiddaman								esac
2726*906afcb8SAndy Fiddaman								;;
2727*906afcb8SAndy Fiddaman							esac
2728*906afcb8SAndy Fiddaman							case $a in
2729*906afcb8SAndy Fiddaman							$p)	a="$a $l"
2730*906afcb8SAndy Fiddaman								if	compile $cc -o $tmp.exe $tmp.c $a <&$nullin >&$nullout
2731*906afcb8SAndy Fiddaman								then	success
2732*906afcb8SAndy Fiddaman									gotlib="$gotlib + $p"
2733*906afcb8SAndy Fiddaman									lib="$p $lib"
2734*906afcb8SAndy Fiddaman									e=0
2735*906afcb8SAndy Fiddaman									break
2736*906afcb8SAndy Fiddaman								fi
2737*906afcb8SAndy Fiddaman								;;
2738*906afcb8SAndy Fiddaman							esac
2739*906afcb8SAndy Fiddaman						done
2740*906afcb8SAndy Fiddaman						case $e in
2741*906afcb8SAndy Fiddaman						1)	failure
2742*906afcb8SAndy Fiddaman							gotlib="$gotlib - $p"
2743*906afcb8SAndy Fiddaman							;;
2744*906afcb8SAndy Fiddaman						esac
2745*906afcb8SAndy Fiddaman					fi
2746*906afcb8SAndy Fiddaman					y=
2747*906afcb8SAndy Fiddaman					for x in $p
2748*906afcb8SAndy Fiddaman					do	case $shell in
2749*906afcb8SAndy Fiddaman						bsh)	c=`echo X$x | sed 's,X-l,,'` ;;
2750*906afcb8SAndy Fiddaman						*)	eval 'c=${x#-l}' ;;
2751*906afcb8SAndy Fiddaman						esac
2752*906afcb8SAndy Fiddaman						case $c in
2753*906afcb8SAndy Fiddaman						*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
2754*906afcb8SAndy Fiddaman							c=`echo '' $c | sed -e 's,.*[\\\\/],,' -e 's,\.[^.]*$,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g' -e '/^lib./s,^lib,,'`
2755*906afcb8SAndy Fiddaman							;;
2756*906afcb8SAndy Fiddaman						esac
2757*906afcb8SAndy Fiddaman						case $config in
2758*906afcb8SAndy Fiddaman						0)	case $e$p in
2759*906afcb8SAndy Fiddaman							0*' '*)	case " $gotlib " in
2760*906afcb8SAndy Fiddaman								*[-+]" $x "*)
2761*906afcb8SAndy Fiddaman									;;
2762*906afcb8SAndy Fiddaman								*)	can="$can$cansep#define _LIB_$c	1	/* $x is a library */"
2763*906afcb8SAndy Fiddaman									nan="$nan${cansep}_LIB_$c=1"
2764*906afcb8SAndy Fiddaman									cansep=$nl
2765*906afcb8SAndy Fiddaman									eval _LIB_$c=1
2766*906afcb8SAndy Fiddaman									;;
2767*906afcb8SAndy Fiddaman								esac
2768*906afcb8SAndy Fiddaman								;;
2769*906afcb8SAndy Fiddaman							esac
2770*906afcb8SAndy Fiddaman							;;
2771*906afcb8SAndy Fiddaman						1)	case $shell in
2772*906afcb8SAndy Fiddaman							ksh)	typeset -u u=$c ;;
2773*906afcb8SAndy Fiddaman							*)	u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
2774*906afcb8SAndy Fiddaman							esac
2775*906afcb8SAndy Fiddaman							c=$u
2776*906afcb8SAndy Fiddaman							case $e in
2777*906afcb8SAndy Fiddaman							0*' '*)	case " $gotlib " in
2778*906afcb8SAndy Fiddaman								*[-+]" $x "*)
2779*906afcb8SAndy Fiddaman									;;
2780*906afcb8SAndy Fiddaman								*)	can="$can$cansep#define HAVE_${c}_LIB	1	/* $x is a library */"
2781*906afcb8SAndy Fiddaman									nan="$nan${cansep}HAVE_${c}_LIB=1"
2782*906afcb8SAndy Fiddaman									cansep=$nl
2783*906afcb8SAndy Fiddaman									eval HAVE_${c}_LIB=1
2784*906afcb8SAndy Fiddaman									;;
2785*906afcb8SAndy Fiddaman								esac
2786*906afcb8SAndy Fiddaman								;;
2787*906afcb8SAndy Fiddaman							esac
2788*906afcb8SAndy Fiddaman							;;
2789*906afcb8SAndy Fiddaman						esac
2790*906afcb8SAndy Fiddaman						y=${y}_$c
2791*906afcb8SAndy Fiddaman					done
2792*906afcb8SAndy Fiddaman					case $config in
2793*906afcb8SAndy Fiddaman					0)	c=_LIB${y} ;;
2794*906afcb8SAndy Fiddaman					1)	c=HAVE${y}_LIB ;;
2795*906afcb8SAndy Fiddaman					esac
2796*906afcb8SAndy Fiddaman					case $p in
2797*906afcb8SAndy Fiddaman					*' '*)	q="a library group" ;;
2798*906afcb8SAndy Fiddaman					*)	q="a library" ;;
2799*906afcb8SAndy Fiddaman					esac
2800*906afcb8SAndy Fiddaman					case $e in
2801*906afcb8SAndy Fiddaman					0)	can="$can$cansep#define $c	1	/* $p is $q */"
2802*906afcb8SAndy Fiddaman						nan="$nan$cansep$c=1"
2803*906afcb8SAndy Fiddaman						cansep=$nl
2804*906afcb8SAndy Fiddaman						eval $c=1
2805*906afcb8SAndy Fiddaman						case $hit in
2806*906afcb8SAndy Fiddaman						1)	break ;;
2807*906afcb8SAndy Fiddaman						esac
2808*906afcb8SAndy Fiddaman						;;
2809*906afcb8SAndy Fiddaman					1)	case $all$config$undef in
2810*906afcb8SAndy Fiddaman						?1?|??1)can="$can$cansep#undef	$c		/* $p is not $q */"
2811*906afcb8SAndy Fiddaman							nan="$nan$cansep$c="
2812*906afcb8SAndy Fiddaman							cansep=$nl
2813*906afcb8SAndy Fiddaman							;;
2814*906afcb8SAndy Fiddaman						1??)	can="$can$cansep#define $c	0	/* $p is not $q */"
2815*906afcb8SAndy Fiddaman							nan="$nan$cansep$c=0"
2816*906afcb8SAndy Fiddaman							cansep=$nl
2817*906afcb8SAndy Fiddaman							;;
2818*906afcb8SAndy Fiddaman						esac
2819*906afcb8SAndy Fiddaman						eval $c=0
2820*906afcb8SAndy Fiddaman						;;
2821*906afcb8SAndy Fiddaman					esac
2822*906afcb8SAndy Fiddaman					p=
2823*906afcb8SAndy Fiddaman					;;
2824*906afcb8SAndy Fiddaman				esac
2825*906afcb8SAndy Fiddaman			done
2826*906afcb8SAndy Fiddaman			;;
2827*906afcb8SAndy Fiddaman		esac
2828*906afcb8SAndy Fiddaman
2829*906afcb8SAndy Fiddaman		# last op precheck
2830*906afcb8SAndy Fiddaman
2831*906afcb8SAndy Fiddaman		case $op in
2832*906afcb8SAndy Fiddaman		ref)	deflib="$deflib $lib"
2833*906afcb8SAndy Fiddaman			defhdr="$defhdr $hdr"
2834*906afcb8SAndy Fiddaman			break
2835*906afcb8SAndy Fiddaman			;;
2836*906afcb8SAndy Fiddaman		esac
2837*906afcb8SAndy Fiddaman		IFS=" ,"
2838*906afcb8SAndy Fiddaman		case $shell in
2839*906afcb8SAndy Fiddaman		bash)	op=`echo $op`
2840*906afcb8SAndy Fiddaman			arg=`echo $arg`
2841*906afcb8SAndy Fiddaman			;;
2842*906afcb8SAndy Fiddaman		*)	eval op=\"$op\"
2843*906afcb8SAndy Fiddaman			eval arg=\"$arg\"
2844*906afcb8SAndy Fiddaman			;;
2845*906afcb8SAndy Fiddaman		esac
2846*906afcb8SAndy Fiddaman		IFS=$ifs
2847*906afcb8SAndy Fiddaman
2848*906afcb8SAndy Fiddaman		# check for op aliases
2849*906afcb8SAndy Fiddaman
2850*906afcb8SAndy Fiddaman		x=
2851*906afcb8SAndy Fiddaman		for o in $op
2852*906afcb8SAndy Fiddaman		do	case $o in
2853*906afcb8SAndy Fiddaman			def|default)	x="$x cmd dat hdr key lib mth sys typ" ;;
2854*906afcb8SAndy Fiddaman			*)		x="$x $o" ;;
2855*906afcb8SAndy Fiddaman			esac
2856*906afcb8SAndy Fiddaman		done
2857*906afcb8SAndy Fiddaman
2858*906afcb8SAndy Fiddaman		# loop on the ops o and args a
2859*906afcb8SAndy Fiddaman
2860*906afcb8SAndy Fiddaman		result=UNKNOWN
2861*906afcb8SAndy Fiddaman		for o in $x
2862*906afcb8SAndy Fiddaman		do	for a in $arg
2863*906afcb8SAndy Fiddaman			do	c=
2864*906afcb8SAndy Fiddaman				case $a in
2865*906afcb8SAndy Fiddaman				*[.\\/]*)
2866*906afcb8SAndy Fiddaman					case $o in
2867*906afcb8SAndy Fiddaman					hdr|lcl|nxt|pth|sys)
2868*906afcb8SAndy Fiddaman						x=$a
2869*906afcb8SAndy Fiddaman						case $x in
2870*906afcb8SAndy Fiddaman						*.lcl|*.nxt)
2871*906afcb8SAndy Fiddaman							case $o in
2872*906afcb8SAndy Fiddaman							sys)	x=sys/$x ;;
2873*906afcb8SAndy Fiddaman							esac
2874*906afcb8SAndy Fiddaman							case $shell in
2875*906afcb8SAndy Fiddaman							bsh)	eval `echo $x | sed 's,\\(.*\\)\.\\([^.]*\\),x=\\1 o=\\2,'`
2876*906afcb8SAndy Fiddaman								;;
2877*906afcb8SAndy Fiddaman							*)	o=${x##*.}
2878*906afcb8SAndy Fiddaman								x=${x%.${o}}
2879*906afcb8SAndy Fiddaman								;;
2880*906afcb8SAndy Fiddaman							esac
2881*906afcb8SAndy Fiddaman							v=$x
2882*906afcb8SAndy Fiddaman							;;
2883*906afcb8SAndy Fiddaman						esac
2884*906afcb8SAndy Fiddaman						case $x in
2885*906afcb8SAndy Fiddaman						*[\\/]*)case $shell in
2886*906afcb8SAndy Fiddaman							bsh)	eval `echo $x | sed 's,\\(.*\\)[\\\\//]\\(.*\\),p=\\1 v=\\2,'`
2887*906afcb8SAndy Fiddaman								;;
2888*906afcb8SAndy Fiddaman							*)	eval 'p=${x%/*}'
2889*906afcb8SAndy Fiddaman								eval 'v=${x##*/}'
2890*906afcb8SAndy Fiddaman								;;
2891*906afcb8SAndy Fiddaman							esac
2892*906afcb8SAndy Fiddaman							;;
2893*906afcb8SAndy Fiddaman						*.*)	case $shell in
2894*906afcb8SAndy Fiddaman							bsh)	eval `echo $x | sed 's,\\(.*\\)\\.\\(.*\\),p=\\1 v=\\2,'`
2895*906afcb8SAndy Fiddaman								;;
2896*906afcb8SAndy Fiddaman							*)	eval 'p=${x%.*}'
2897*906afcb8SAndy Fiddaman								eval 'v=${x##*.}'
2898*906afcb8SAndy Fiddaman								;;
2899*906afcb8SAndy Fiddaman							esac
2900*906afcb8SAndy Fiddaman							;;
2901*906afcb8SAndy Fiddaman						*)	p=
2902*906afcb8SAndy Fiddaman							;;
2903*906afcb8SAndy Fiddaman						esac
2904*906afcb8SAndy Fiddaman						case $o in
2905*906afcb8SAndy Fiddaman						lcl|nxt)	c=$v.$o ;;
2906*906afcb8SAndy Fiddaman						*)		c=$v ;;
2907*906afcb8SAndy Fiddaman						esac
2908*906afcb8SAndy Fiddaman						;;
2909*906afcb8SAndy Fiddaman					*)	case $shell in
2910*906afcb8SAndy Fiddaman						bsh)	eval `echo $a | sed -e 's,.*[\\\\/],,' -e 's/\\(.*\\)\\.\\(.*\\)/p=\\1 v=\\2/'`
2911*906afcb8SAndy Fiddaman							;;
2912*906afcb8SAndy Fiddaman						*)	eval 'p=${a%.*}'
2913*906afcb8SAndy Fiddaman							eval 'p=${p##*[\\/]}'
2914*906afcb8SAndy Fiddaman							eval 'v=${a##*.}'
2915*906afcb8SAndy Fiddaman							eval 'v=${v##*[\\/]}'
2916*906afcb8SAndy Fiddaman							;;
2917*906afcb8SAndy Fiddaman						esac
2918*906afcb8SAndy Fiddaman						;;
2919*906afcb8SAndy Fiddaman					esac
2920*906afcb8SAndy Fiddaman					case $p in
2921*906afcb8SAndy Fiddaman					'')	f=${v} ;;
2922*906afcb8SAndy Fiddaman					*)	f=${p}/${v} ;;
2923*906afcb8SAndy Fiddaman					esac
2924*906afcb8SAndy Fiddaman					case $o in
2925*906afcb8SAndy Fiddaman					run)	v=$p
2926*906afcb8SAndy Fiddaman						p=
2927*906afcb8SAndy Fiddaman						m=_${v}
2928*906afcb8SAndy Fiddaman						;;
2929*906afcb8SAndy Fiddaman					mem)	case $p in
2930*906afcb8SAndy Fiddaman						*.*)	case $shell in
2931*906afcb8SAndy Fiddaman							bsh)	eval `echo $p | sed 's/\\([^.]*\\)\\.\\(.*\\)/p=\\1 m=\\2/'`
2932*906afcb8SAndy Fiddaman								;;
2933*906afcb8SAndy Fiddaman							*)	eval 'm=${p#*.}'
2934*906afcb8SAndy Fiddaman								eval 'p=${p%%.*}'
2935*906afcb8SAndy Fiddaman								;;
2936*906afcb8SAndy Fiddaman							esac
2937*906afcb8SAndy Fiddaman							v=${m}.${v}
2938*906afcb8SAndy Fiddaman						esac
2939*906afcb8SAndy Fiddaman						case $config in
2940*906afcb8SAndy Fiddaman						0)	m=_${v}_${p} ;;
2941*906afcb8SAndy Fiddaman						1)	m=_${v}_in_${p} ;;
2942*906afcb8SAndy Fiddaman						esac
2943*906afcb8SAndy Fiddaman						;;
2944*906afcb8SAndy Fiddaman					*)	case $p in
2945*906afcb8SAndy Fiddaman						'')	m=_${v} ;;
2946*906afcb8SAndy Fiddaman						*)	m=_${p}_${v} ;;
2947*906afcb8SAndy Fiddaman						esac
2948*906afcb8SAndy Fiddaman						;;
2949*906afcb8SAndy Fiddaman					esac
2950*906afcb8SAndy Fiddaman					;;
2951*906afcb8SAndy Fiddaman				*)	p=
2952*906afcb8SAndy Fiddaman					v=$a
2953*906afcb8SAndy Fiddaman					f=$a
2954*906afcb8SAndy Fiddaman					m=_${v}
2955*906afcb8SAndy Fiddaman					;;
2956*906afcb8SAndy Fiddaman				esac
2957*906afcb8SAndy Fiddaman				case $c in
2958*906afcb8SAndy Fiddaman				'')	c=$v ;;
2959*906afcb8SAndy Fiddaman				esac
2960*906afcb8SAndy Fiddaman				M=$m
2961*906afcb8SAndy Fiddaman				case $o in
2962*906afcb8SAndy Fiddaman				out)	case $a in
2963*906afcb8SAndy Fiddaman					-)	a=-
2964*906afcb8SAndy Fiddaman						;;
2965*906afcb8SAndy Fiddaman					?*)	test="$a $test"
2966*906afcb8SAndy Fiddaman						a=
2967*906afcb8SAndy Fiddaman						;;
2968*906afcb8SAndy Fiddaman					esac
2969*906afcb8SAndy Fiddaman					;;
2970*906afcb8SAndy Fiddaman				*)	case " $idyes " in
2971*906afcb8SAndy Fiddaman					*" $m "*)
2972*906afcb8SAndy Fiddaman						i=1
2973*906afcb8SAndy Fiddaman						;;
2974*906afcb8SAndy Fiddaman					*)	case " $idno " in
2975*906afcb8SAndy Fiddaman						*" $m "*)
2976*906afcb8SAndy Fiddaman							i=0
2977*906afcb8SAndy Fiddaman							;;
2978*906afcb8SAndy Fiddaman						*)	case $m in
2979*906afcb8SAndy Fiddaman							*'*')	m=`echo "$m" | sed 's,\*,_ptr,g'` ;;
2980*906afcb8SAndy Fiddaman							esac
2981*906afcb8SAndy Fiddaman							case $m in
2982*906afcb8SAndy Fiddaman							*[-+/\\]*)
2983*906afcb8SAndy Fiddaman								i=0
2984*906afcb8SAndy Fiddaman								;;
2985*906afcb8SAndy Fiddaman							*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
2986*906afcb8SAndy Fiddaman								is id $m
2987*906afcb8SAndy Fiddaman								copy $tmp.c "int $m = 0;"
2988*906afcb8SAndy Fiddaman								if	compile $cc -c $tmp.c
2989*906afcb8SAndy Fiddaman								then	success -
2990*906afcb8SAndy Fiddaman									idyes="$idyes $m"
2991*906afcb8SAndy Fiddaman									i=1
2992*906afcb8SAndy Fiddaman								else	failure -
2993*906afcb8SAndy Fiddaman									idno="$idno $m"
2994*906afcb8SAndy Fiddaman									i=0
2995*906afcb8SAndy Fiddaman								fi
2996*906afcb8SAndy Fiddaman								;;
2997*906afcb8SAndy Fiddaman							*)	i=1
2998*906afcb8SAndy Fiddaman								;;
2999*906afcb8SAndy Fiddaman							esac
3000*906afcb8SAndy Fiddaman							;;
3001*906afcb8SAndy Fiddaman						esac
3002*906afcb8SAndy Fiddaman						case $i in
3003*906afcb8SAndy Fiddaman						0)	case $o in
3004*906afcb8SAndy Fiddaman							dat|dfn|key|lib|mac|mth|nos|npt|siz|sym|typ|val)
3005*906afcb8SAndy Fiddaman								continue
3006*906afcb8SAndy Fiddaman								;;
3007*906afcb8SAndy Fiddaman							esac
3008*906afcb8SAndy Fiddaman							;;
3009*906afcb8SAndy Fiddaman						esac
3010*906afcb8SAndy Fiddaman						;;
3011*906afcb8SAndy Fiddaman					esac
3012*906afcb8SAndy Fiddaman					;;
3013*906afcb8SAndy Fiddaman				esac
3014*906afcb8SAndy Fiddaman				case $m in
3015*906afcb8SAndy Fiddaman				*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
3016*906afcb8SAndy Fiddaman					m=`echo "X$m" | sed -e 's,^.,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'`
3017*906afcb8SAndy Fiddaman					;;
3018*906afcb8SAndy Fiddaman				esac
3019*906afcb8SAndy Fiddaman
3020*906afcb8SAndy Fiddaman				# check output redirection
3021*906afcb8SAndy Fiddaman
3022*906afcb8SAndy Fiddaman				case $out in
3023*906afcb8SAndy Fiddaman				$cur)	;;
3024*906afcb8SAndy Fiddaman				*)	case $cur in
3025*906afcb8SAndy Fiddaman					$a|$c)	;;
3026*906afcb8SAndy Fiddaman					*)	case $cur in
3027*906afcb8SAndy Fiddaman						.)	;;
3028*906afcb8SAndy Fiddaman						*)	case $vers in
3029*906afcb8SAndy Fiddaman							?*)	echo
3030*906afcb8SAndy Fiddaman								for api in $vers
3031*906afcb8SAndy Fiddaman								do	API=`echo $api | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
3032*906afcb8SAndy Fiddaman									eval ver='${'ver_${api}'}'
3033*906afcb8SAndy Fiddaman									echo "#define ${API}_VERSION	${ver}"
3034*906afcb8SAndy Fiddaman								done
3035*906afcb8SAndy Fiddaman							esac
3036*906afcb8SAndy Fiddaman							case $apis in
3037*906afcb8SAndy Fiddaman							?*)	for api in $apis
3038*906afcb8SAndy Fiddaman								do	API=`echo $api | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
3039*906afcb8SAndy Fiddaman									echo "#define ${API}API(rel)	( _BLD_${api} || !_API_${api} || _API_${api} >= rel )"
3040*906afcb8SAndy Fiddaman									map=
3041*906afcb8SAndy Fiddaman									sep=
3042*906afcb8SAndy Fiddaman									eval syms='"${'api_sym_${api}'}"'
3043*906afcb8SAndy Fiddaman									# old solaris requires -k<space><junk> #
3044*906afcb8SAndy Fiddaman									set x x `echo "$syms" | sort -t: -u -k 1,1 -k 2,2nr 2>/dev/null | sed 's/:/ /'`
3045*906afcb8SAndy Fiddaman									case $# in
3046*906afcb8SAndy Fiddaman									2)	# ancient sort doesn't have -k #
3047*906afcb8SAndy Fiddaman										set x x `echo "$syms" | sort -t: -u +0 -1 +1 -2nr 2>/dev/null | sed 's/:/ /'`
3048*906afcb8SAndy Fiddaman										;;
3049*906afcb8SAndy Fiddaman									esac
3050*906afcb8SAndy Fiddaman									sym=
3051*906afcb8SAndy Fiddaman									while	:
3052*906afcb8SAndy Fiddaman									do	shift 2
3053*906afcb8SAndy Fiddaman										case $# in
3054*906afcb8SAndy Fiddaman										[01])	break ;;
3055*906afcb8SAndy Fiddaman										esac
3056*906afcb8SAndy Fiddaman										prv=$sym
3057*906afcb8SAndy Fiddaman										sym=$1
3058*906afcb8SAndy Fiddaman										rel=$2
3059*906afcb8SAndy Fiddaman										case $prv in
3060*906afcb8SAndy Fiddaman										$sym)	echo "#elif _API_${api} >= $rel"
3061*906afcb8SAndy Fiddaman											;;
3062*906afcb8SAndy Fiddaman										*)	case $prv in
3063*906afcb8SAndy Fiddaman											'')	echo
3064*906afcb8SAndy Fiddaman												echo "#if !defined(_API_${api}) && defined(_API_DEFAULT)"
3065*906afcb8SAndy Fiddaman												echo "#define _API_${api}	_API_DEFAULT"
3066*906afcb8SAndy Fiddaman												echo "#endif"
3067*906afcb8SAndy Fiddaman												;;
3068*906afcb8SAndy Fiddaman											*)	echo "#endif"
3069*906afcb8SAndy Fiddaman												;;
3070*906afcb8SAndy Fiddaman											esac
3071*906afcb8SAndy Fiddaman											echo
3072*906afcb8SAndy Fiddaman											echo "#if ${API}API($rel)"
3073*906afcb8SAndy Fiddaman											;;
3074*906afcb8SAndy Fiddaman										esac
3075*906afcb8SAndy Fiddaman										echo "#undef	${sym}"
3076*906afcb8SAndy Fiddaman										echo "#define ${sym}	${sym}_${rel}"
3077*906afcb8SAndy Fiddaman										map=$map$sep${sym}_${rel}
3078*906afcb8SAndy Fiddaman										sep=' '
3079*906afcb8SAndy Fiddaman									done
3080*906afcb8SAndy Fiddaman									echo "#endif"
3081*906afcb8SAndy Fiddaman									echo
3082*906afcb8SAndy Fiddaman									echo "#define _API_${api}_MAP	\"$map\""
3083*906afcb8SAndy Fiddaman								done
3084*906afcb8SAndy Fiddaman								echo
3085*906afcb8SAndy Fiddaman								;;
3086*906afcb8SAndy Fiddaman							esac
3087*906afcb8SAndy Fiddaman							case $iff in
3088*906afcb8SAndy Fiddaman							?*)	echo "#endif" ;;
3089*906afcb8SAndy Fiddaman							esac
3090*906afcb8SAndy Fiddaman							case $cur in
3091*906afcb8SAndy Fiddaman							-)	;;
3092*906afcb8SAndy Fiddaman							*)	exec >/dev/null
3093*906afcb8SAndy Fiddaman								case $cur in
3094*906afcb8SAndy Fiddaman								*[\\/]*|*.h)	x=$cur ;;
3095*906afcb8SAndy Fiddaman								*)		x=$dir/$cur ;;
3096*906afcb8SAndy Fiddaman								esac
3097*906afcb8SAndy Fiddaman								case $define in
3098*906afcb8SAndy Fiddaman								n)	sed '/^#/d' $tmp.h > $tmp.c
3099*906afcb8SAndy Fiddaman									sed '/^#/d' $x > $tmp.t
3100*906afcb8SAndy Fiddaman									;;
3101*906afcb8SAndy Fiddaman								*)	(proto -r $protoflags $tmp.h) >/dev/null 2>&1
3102*906afcb8SAndy Fiddaman									sed 's,/\*[^/]*\*/, ,g' $tmp.h > $tmp.c
3103*906afcb8SAndy Fiddaman									sed 's,/\*[^/]*\*/, ,g' $x > $tmp.t
3104*906afcb8SAndy Fiddaman									;;
3105*906afcb8SAndy Fiddaman								esac
3106*906afcb8SAndy Fiddaman								if	cmp -s $tmp.c $tmp.t
3107*906afcb8SAndy Fiddaman								then	rm -f $tmp.h
3108*906afcb8SAndy Fiddaman									case $verbose in
3109*906afcb8SAndy Fiddaman									1)	echo "$command: $x: unchanged" >&$stderr ;;
3110*906afcb8SAndy Fiddaman									esac
3111*906afcb8SAndy Fiddaman								else	case $x in
3112*906afcb8SAndy Fiddaman									${dir}[\\/]$cur)	test -d $dir || mkdir $dir || exit 1 ;;
3113*906afcb8SAndy Fiddaman									esac
3114*906afcb8SAndy Fiddaman									mv $tmp.h $x
3115*906afcb8SAndy Fiddaman								fi
3116*906afcb8SAndy Fiddaman								;;
3117*906afcb8SAndy Fiddaman							esac
3118*906afcb8SAndy Fiddaman							;;
3119*906afcb8SAndy Fiddaman						esac
3120*906afcb8SAndy Fiddaman						case $out in
3121*906afcb8SAndy Fiddaman						+)	case $status in
3122*906afcb8SAndy Fiddaman							1)	;;
3123*906afcb8SAndy Fiddaman							*)	status=0 ;;
3124*906afcb8SAndy Fiddaman							esac
3125*906afcb8SAndy Fiddaman							exit $status
3126*906afcb8SAndy Fiddaman							;;
3127*906afcb8SAndy Fiddaman						-)	eval "exec >&$stdout"
3128*906afcb8SAndy Fiddaman							;;
3129*906afcb8SAndy Fiddaman						*)	exec >$tmp.h
3130*906afcb8SAndy Fiddaman							;;
3131*906afcb8SAndy Fiddaman						esac
3132*906afcb8SAndy Fiddaman						case $out in
3133*906afcb8SAndy Fiddaman						"")	case $a in
3134*906afcb8SAndy Fiddaman							*[\\/]*|???????????????*) cur=$c ;;
3135*906afcb8SAndy Fiddaman							*)			cur=$a ;;
3136*906afcb8SAndy Fiddaman							esac
3137*906afcb8SAndy Fiddaman							;;
3138*906afcb8SAndy Fiddaman						*)	cur=$out
3139*906afcb8SAndy Fiddaman							;;
3140*906afcb8SAndy Fiddaman						esac
3141*906afcb8SAndy Fiddaman						case $in in
3142*906afcb8SAndy Fiddaman						""|-|+)	case $o in
3143*906afcb8SAndy Fiddaman							run)	x=" from $a" ;;
3144*906afcb8SAndy Fiddaman							*)	x= ;;
3145*906afcb8SAndy Fiddaman							esac
3146*906afcb8SAndy Fiddaman							;;
3147*906afcb8SAndy Fiddaman						*)	x=" from $in"
3148*906afcb8SAndy Fiddaman							;;
3149*906afcb8SAndy Fiddaman						esac
3150*906afcb8SAndy Fiddaman
3151*906afcb8SAndy Fiddaman						# output header comments
3152*906afcb8SAndy Fiddaman
3153*906afcb8SAndy Fiddaman						case $define in
3154*906afcb8SAndy Fiddaman						n)	;;
3155*906afcb8SAndy Fiddaman						?)	echo "/* : : generated$x by $command version $version : : */"
3156*906afcb8SAndy Fiddaman							for x in $pragma
3157*906afcb8SAndy Fiddaman							do	echo "#pragma $x"
3158*906afcb8SAndy Fiddaman							done
3159*906afcb8SAndy Fiddaman							case $out in
3160*906afcb8SAndy Fiddaman							""|-|+)	x=$m
3161*906afcb8SAndy Fiddaman								;;
3162*906afcb8SAndy Fiddaman							*.*)	case $shell in
3163*906afcb8SAndy Fiddaman								bsh)	eval `echo $in | sed -e 's,\\.,_,g' -e 's/^/x=/'`
3164*906afcb8SAndy Fiddaman									;;
3165*906afcb8SAndy Fiddaman								*)	i=$out
3166*906afcb8SAndy Fiddaman									x=_
3167*906afcb8SAndy Fiddaman									while	:
3168*906afcb8SAndy Fiddaman									do	case $i in
3169*906afcb8SAndy Fiddaman										*.*)	eval 'x=$x${i%%.*}_'
3170*906afcb8SAndy Fiddaman											eval 'i=${i#*.}'
3171*906afcb8SAndy Fiddaman											;;
3172*906afcb8SAndy Fiddaman										*)	x=$x$i
3173*906afcb8SAndy Fiddaman											break
3174*906afcb8SAndy Fiddaman											;;
3175*906afcb8SAndy Fiddaman										esac
3176*906afcb8SAndy Fiddaman									done
3177*906afcb8SAndy Fiddaman									;;
3178*906afcb8SAndy Fiddaman								esac
3179*906afcb8SAndy Fiddaman								;;
3180*906afcb8SAndy Fiddaman							*)	x=_$out
3181*906afcb8SAndy Fiddaman								;;
3182*906afcb8SAndy Fiddaman							esac
3183*906afcb8SAndy Fiddaman							case $o in
3184*906afcb8SAndy Fiddaman							iff)	case $M in
3185*906afcb8SAndy Fiddaman								""|*-*)	 ;;
3186*906afcb8SAndy Fiddaman								*)	iff=${m}_H ;;
3187*906afcb8SAndy Fiddaman								esac
3188*906afcb8SAndy Fiddaman								;;
3189*906afcb8SAndy Fiddaman							*)	case $regress in
3190*906afcb8SAndy Fiddaman								'')	case $x in
3191*906afcb8SAndy Fiddaman									*-*)	;;
3192*906afcb8SAndy Fiddaman									*)	x=`pwd | sed -e 's,.*[\\\\/],,' -e 's,\\..*,,' -e 's,^lib,,' -e 's,^,'${x}_',' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'`
3193*906afcb8SAndy Fiddaman										# ksh n+ bug workaround
3194*906afcb8SAndy Fiddaman										case $x in
3195*906afcb8SAndy Fiddaman										*[!_]*)	;;
3196*906afcb8SAndy Fiddaman										*)	x=_$$ ;;
3197*906afcb8SAndy Fiddaman										esac
3198*906afcb8SAndy Fiddaman										iff=_def${x}
3199*906afcb8SAndy Fiddaman										;;
3200*906afcb8SAndy Fiddaman									esac
3201*906afcb8SAndy Fiddaman									;;
3202*906afcb8SAndy Fiddaman								*)	case $x in
3203*906afcb8SAndy Fiddaman									*-*)	;;
3204*906afcb8SAndy Fiddaman									*)	iff=_REGRESS
3205*906afcb8SAndy Fiddaman										;;
3206*906afcb8SAndy Fiddaman									esac
3207*906afcb8SAndy Fiddaman									;;
3208*906afcb8SAndy Fiddaman								esac
3209*906afcb8SAndy Fiddaman								;;
3210*906afcb8SAndy Fiddaman							esac
3211*906afcb8SAndy Fiddaman							case $iff in
3212*906afcb8SAndy Fiddaman							?*)	echo "#ifndef $iff"
3213*906afcb8SAndy Fiddaman								echo "#define $iff	1"
3214*906afcb8SAndy Fiddaman								;;
3215*906afcb8SAndy Fiddaman							esac
3216*906afcb8SAndy Fiddaman							;;
3217*906afcb8SAndy Fiddaman						esac
3218*906afcb8SAndy Fiddaman						;;
3219*906afcb8SAndy Fiddaman					esac
3220*906afcb8SAndy Fiddaman					;;
3221*906afcb8SAndy Fiddaman				esac
3222*906afcb8SAndy Fiddaman				case $can in
3223*906afcb8SAndy Fiddaman				?*)	case $define in
3224*906afcb8SAndy Fiddaman					1)	echo "$can" ;;
3225*906afcb8SAndy Fiddaman					n)	echo "$nan" ;;
3226*906afcb8SAndy Fiddaman					esac
3227*906afcb8SAndy Fiddaman					can=
3228*906afcb8SAndy Fiddaman					nan=
3229*906afcb8SAndy Fiddaman					cansep=
3230*906afcb8SAndy Fiddaman					;;
3231*906afcb8SAndy Fiddaman				esac
3232*906afcb8SAndy Fiddaman
3233*906afcb8SAndy Fiddaman				# set up the candidate include list
3234*906afcb8SAndy Fiddaman
3235*906afcb8SAndy Fiddaman				pre=
3236*906afcb8SAndy Fiddaman				inc=
3237*906afcb8SAndy Fiddaman				for x in $defhdr - $hdr
3238*906afcb8SAndy Fiddaman				do	case $x in
3239*906afcb8SAndy Fiddaman					-)	case $pre in
3240*906afcb8SAndy Fiddaman						?*)	continue ;;
3241*906afcb8SAndy Fiddaman						esac
3242*906afcb8SAndy Fiddaman						case $v in
3243*906afcb8SAndy Fiddaman						*.*)	for x in `echo $v | sed 's,\\., ,g'`
3244*906afcb8SAndy Fiddaman							do	pre="$pre
3245*906afcb8SAndy Fiddaman#undef	$x"
3246*906afcb8SAndy Fiddaman							done
3247*906afcb8SAndy Fiddaman							;;
3248*906afcb8SAndy Fiddaman						*)	case $o in
3249*906afcb8SAndy Fiddaman							siz|typ)case $v in
3250*906afcb8SAndy Fiddaman								char|short|int|long)
3251*906afcb8SAndy Fiddaman									;;
3252*906afcb8SAndy Fiddaman								*)	pre="#undef	$v"
3253*906afcb8SAndy Fiddaman									;;
3254*906afcb8SAndy Fiddaman								esac
3255*906afcb8SAndy Fiddaman								;;
3256*906afcb8SAndy Fiddaman							*)	pre="#undef	$v"
3257*906afcb8SAndy Fiddaman								;;
3258*906afcb8SAndy Fiddaman							esac
3259*906afcb8SAndy Fiddaman							;;
3260*906afcb8SAndy Fiddaman						esac
3261*906afcb8SAndy Fiddaman						;;
3262*906afcb8SAndy Fiddaman					*.h)	case $shell in
3263*906afcb8SAndy Fiddaman						bsh)	eval `echo $x | sed -e 's,^\\([^\\\\/]*\\).*[\\\\/]\\([^\\\\/]*\\)\$,\\1_\\2,' -e 's/\\..*//' -e 's/^/c=/'`
3264*906afcb8SAndy Fiddaman							;;
3265*906afcb8SAndy Fiddaman						*)	eval 'c=${x##*[\\/]}'
3266*906afcb8SAndy Fiddaman							eval 'c=${c%%.*}'
3267*906afcb8SAndy Fiddaman							case $x in
3268*906afcb8SAndy Fiddaman							*/*)	eval 'c=${x%%[\\/]*}_${c}' ;;
3269*906afcb8SAndy Fiddaman							esac
3270*906afcb8SAndy Fiddaman							;;
3271*906afcb8SAndy Fiddaman						esac
3272*906afcb8SAndy Fiddaman						case $config in
3273*906afcb8SAndy Fiddaman						0)	case $x in
3274*906afcb8SAndy Fiddaman							*/*)	c=_${c} ;;
3275*906afcb8SAndy Fiddaman							*)	c=_hdr_${c} ;;
3276*906afcb8SAndy Fiddaman							esac
3277*906afcb8SAndy Fiddaman							;;
3278*906afcb8SAndy Fiddaman						1)	case $shell in
3279*906afcb8SAndy Fiddaman							ksh)	typeset -u u=$c ;;
3280*906afcb8SAndy Fiddaman							*)	u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
3281*906afcb8SAndy Fiddaman							esac
3282*906afcb8SAndy Fiddaman							c=HAVE_${u}_H
3283*906afcb8SAndy Fiddaman							;;
3284*906afcb8SAndy Fiddaman						esac
3285*906afcb8SAndy Fiddaman						case " $puthdr " in
3286*906afcb8SAndy Fiddaman						*" $c "*)
3287*906afcb8SAndy Fiddaman							;;
3288*906afcb8SAndy Fiddaman						*)	puthdr="$puthdr $c"
3289*906afcb8SAndy Fiddaman							usr="$usr$nl#define $c 1"
3290*906afcb8SAndy Fiddaman							;;
3291*906afcb8SAndy Fiddaman						esac
3292*906afcb8SAndy Fiddaman						inc="$inc
3293*906afcb8SAndy Fiddaman#include <$x>"
3294*906afcb8SAndy Fiddaman						;;
3295*906afcb8SAndy Fiddaman					esac
3296*906afcb8SAndy Fiddaman				done
3297*906afcb8SAndy Fiddaman
3298*906afcb8SAndy Fiddaman				# set up the candidate lib list
3299*906afcb8SAndy Fiddaman
3300*906afcb8SAndy Fiddaman				for x in $lib $deflib
3301*906afcb8SAndy Fiddaman				do	case $shell in
3302*906afcb8SAndy Fiddaman					ksh)	eval 'c=${x#-l}' ;;
3303*906afcb8SAndy Fiddaman					*)	c=`echo X$x | sed 's,X-l,,'` ;;
3304*906afcb8SAndy Fiddaman					esac
3305*906afcb8SAndy Fiddaman					case $c in
3306*906afcb8SAndy Fiddaman					*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
3307*906afcb8SAndy Fiddaman						c=`echo '' $c | sed -e 's,.*[\\\\/],,' -e 's,\.[^.]*$,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g' -e '/^lib./s,^lib,,'`
3308*906afcb8SAndy Fiddaman						;;
3309*906afcb8SAndy Fiddaman					esac
3310*906afcb8SAndy Fiddaman					case $config in
3311*906afcb8SAndy Fiddaman					0)	c=_LIB_${c}
3312*906afcb8SAndy Fiddaman						;;
3313*906afcb8SAndy Fiddaman					1)	case $shell in
3314*906afcb8SAndy Fiddaman						ksh)	typeset -u u=$c ;;
3315*906afcb8SAndy Fiddaman						*)	u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
3316*906afcb8SAndy Fiddaman						esac
3317*906afcb8SAndy Fiddaman						c=HAVE_${u}_LIB
3318*906afcb8SAndy Fiddaman						;;
3319*906afcb8SAndy Fiddaman					esac
3320*906afcb8SAndy Fiddaman					case " $putlib " in
3321*906afcb8SAndy Fiddaman					*" $c "*)
3322*906afcb8SAndy Fiddaman						;;
3323*906afcb8SAndy Fiddaman					*)	putlib="$putlib $c"
3324*906afcb8SAndy Fiddaman						usr="$usr$nl#define $c 1"
3325*906afcb8SAndy Fiddaman						;;
3326*906afcb8SAndy Fiddaman					esac
3327*906afcb8SAndy Fiddaman				done
3328*906afcb8SAndy Fiddaman
3329*906afcb8SAndy Fiddaman				# src overrides builtin test
3330*906afcb8SAndy Fiddaman
3331*906afcb8SAndy Fiddaman				case $config:$def in
3332*906afcb8SAndy Fiddaman				0:)	case $o in
3333*906afcb8SAndy Fiddaman					tst|var);;
3334*906afcb8SAndy Fiddaman					*)	m=_${o}${m} ;;
3335*906afcb8SAndy Fiddaman					esac
3336*906afcb8SAndy Fiddaman					;;
3337*906afcb8SAndy Fiddaman				1:)	case $o in
3338*906afcb8SAndy Fiddaman					tst|var)m=${v} ;;
3339*906afcb8SAndy Fiddaman					esac
3340*906afcb8SAndy Fiddaman					case $shell in
3341*906afcb8SAndy Fiddaman					ksh)	typeset -u u=$m ;;
3342*906afcb8SAndy Fiddaman					*)	u=`echo $m | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
3343*906afcb8SAndy Fiddaman					esac
3344*906afcb8SAndy Fiddaman					case $o in
3345*906afcb8SAndy Fiddaman					tst|var)case $m in
3346*906afcb8SAndy Fiddaman						$u)	;;
3347*906afcb8SAndy Fiddaman						*)	case $m in
3348*906afcb8SAndy Fiddaman							hdr_*|lib_*|sys_*)
3349*906afcb8SAndy Fiddaman								case $shell in
3350*906afcb8SAndy Fiddaman								ksh)	u=${u#????} ;;
3351*906afcb8SAndy Fiddaman								*)	u=`echo $u | sed 's/....//'` ;;
3352*906afcb8SAndy Fiddaman								esac
3353*906afcb8SAndy Fiddaman								;;
3354*906afcb8SAndy Fiddaman							esac
3355*906afcb8SAndy Fiddaman							m=HAVE_${u}
3356*906afcb8SAndy Fiddaman							;;
3357*906afcb8SAndy Fiddaman						esac
3358*906afcb8SAndy Fiddaman						;;
3359*906afcb8SAndy Fiddaman					dat)	m=HAVE${u}_DATA ;;
3360*906afcb8SAndy Fiddaman					hdr|lcl)m=HAVE${u}_H ;;
3361*906afcb8SAndy Fiddaman					key)	m=HAVE${u}_RESERVED ;;
3362*906afcb8SAndy Fiddaman					mth)	m=HAVE${u}_MATH ;;
3363*906afcb8SAndy Fiddaman					npt)	m=HAVE${u}_DECL ;;
3364*906afcb8SAndy Fiddaman					pth)	m=${u}_PATH
3365*906afcb8SAndy Fiddaman						case $shell in
3366*906afcb8SAndy Fiddaman						ksh)	m=${m#_} ;;
3367*906afcb8SAndy Fiddaman						*)	m=`echo $m | sed 's,^_,,'` ;;
3368*906afcb8SAndy Fiddaman						esac
3369*906afcb8SAndy Fiddaman						;;
3370*906afcb8SAndy Fiddaman					nxt)	m=HAVE${u}_NEXT ;;
3371*906afcb8SAndy Fiddaman					siz)	m=SIZEOF${u} ;;
3372*906afcb8SAndy Fiddaman					sys)	m=HAVE_SYS${u}_H ;;
3373*906afcb8SAndy Fiddaman					*)	m=HAVE${u} ;;
3374*906afcb8SAndy Fiddaman					esac
3375*906afcb8SAndy Fiddaman					;;
3376*906afcb8SAndy Fiddaman				*)	m=$def
3377*906afcb8SAndy Fiddaman					M=$m
3378*906afcb8SAndy Fiddaman					;;
3379*906afcb8SAndy Fiddaman				esac
3380*906afcb8SAndy Fiddaman				case $src in
3381*906afcb8SAndy Fiddaman				?*)	case $src in
3382*906afcb8SAndy Fiddaman					$noext)	EXT= ;;
3383*906afcb8SAndy Fiddaman					*)	EXT="$tst
3384*906afcb8SAndy Fiddaman$ext"
3385*906afcb8SAndy Fiddaman						;;
3386*906afcb8SAndy Fiddaman					esac
3387*906afcb8SAndy Fiddaman					copy $tmp.c "$std
3388*906afcb8SAndy Fiddaman$EXT
3389*906afcb8SAndy Fiddaman$usr
3390*906afcb8SAndy Fiddaman$inc
3391*906afcb8SAndy Fiddaman$src
3392*906afcb8SAndy Fiddaman"
3393*906afcb8SAndy Fiddaman					V=1
3394*906afcb8SAndy Fiddaman					e=0
3395*906afcb8SAndy Fiddaman					is tst "${note:-$run}"
3396*906afcb8SAndy Fiddaman					case $run in
3397*906afcb8SAndy Fiddaman					cat*|nocat*)
3398*906afcb8SAndy Fiddaman						copy - "$src"
3399*906afcb8SAndy Fiddaman						;;
3400*906afcb8SAndy Fiddaman					cross*|nocross*)
3401*906afcb8SAndy Fiddaman						copy $tmp.sh "$src"
3402*906afcb8SAndy Fiddaman						chmod +x $tmp.sh
3403*906afcb8SAndy Fiddaman						execute $tmp.sh <&$nullin || e=1
3404*906afcb8SAndy Fiddaman						;;
3405*906afcb8SAndy Fiddaman					run*|norun*)
3406*906afcb8SAndy Fiddaman						(eval "$src") <&$nullin || e=1
3407*906afcb8SAndy Fiddaman						;;
3408*906afcb8SAndy Fiddaman					mac*|nomac*)
3409*906afcb8SAndy Fiddaman						if	compile $cc -E -P $tmp.c <&$nullin >$tmp.i
3410*906afcb8SAndy Fiddaman						then	sed -e '/<<[ 	]*".*"[ 	]*>>/!d' -e 's/<<[ 	]*"//g' -e 's/"[ 	]*>>//g' $tmp.i
3411*906afcb8SAndy Fiddaman						else	e=1
3412*906afcb8SAndy Fiddaman						fi
3413*906afcb8SAndy Fiddaman						;;
3414*906afcb8SAndy Fiddaman					p*|nop*)compile $cc -DTEST=$p -DID=$v -E $tmp.c <&$nullin >&$nullout || e=1
3415*906afcb8SAndy Fiddaman						;;
3416*906afcb8SAndy Fiddaman					c*|noc*)compile $cc -DTEST=$p -DID=$v -c $tmp.c <&$nullin >&$nullout || e=1
3417*906afcb8SAndy Fiddaman						;;
3418*906afcb8SAndy Fiddaman					*)	case $run in
3419*906afcb8SAndy Fiddaman						status*)ccflags=
3420*906afcb8SAndy Fiddaman							;;
3421*906afcb8SAndy Fiddaman						s*|nos*)case $reallystatictest in
3422*906afcb8SAndy Fiddaman							'')	#UNDENT...
3423*906afcb8SAndy Fiddaman
3424*906afcb8SAndy Fiddaman			reallystatictest=.
3425*906afcb8SAndy Fiddaman			echo "$tst
3426*906afcb8SAndy Fiddaman$ext
3427*906afcb8SAndy Fiddamanint main(){printf("hello");return(0);}" > ${tmp}s.c
3428*906afcb8SAndy Fiddaman			rm -f ${tmp}s.exe
3429*906afcb8SAndy Fiddaman			if	compile $cc -c ${tmp}s.c <&$nullin >&$nullout &&
3430*906afcb8SAndy Fiddaman				compile $cc -o ${tmp}s.exe ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e &&
3431*906afcb8SAndy Fiddaman				$executable ${tmp}s.exe
3432*906afcb8SAndy Fiddaman			then	e=`wc -l ${tmp}s.e`
3433*906afcb8SAndy Fiddaman				eval set x x $binding
3434*906afcb8SAndy Fiddaman				while	:
3435*906afcb8SAndy Fiddaman				do	shift
3436*906afcb8SAndy Fiddaman					shift
3437*906afcb8SAndy Fiddaman					case $# in
3438*906afcb8SAndy Fiddaman					0)	break ;;
3439*906afcb8SAndy Fiddaman					esac
3440*906afcb8SAndy Fiddaman					rm -f ${tmp}s.exe
3441*906afcb8SAndy Fiddaman					compile $cc -o ${tmp}s.exe $1 ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e && $executable ${tmp}s.exe || continue
3442*906afcb8SAndy Fiddaman					case `wc -l ${tmp}s.e` in
3443*906afcb8SAndy Fiddaman					$e)	;;
3444*906afcb8SAndy Fiddaman					*)	continue ;;
3445*906afcb8SAndy Fiddaman					esac
3446*906afcb8SAndy Fiddaman					d=`ls -s ${tmp}s.exe`
3447*906afcb8SAndy Fiddaman					rm -f ${tmp}s.exe
3448*906afcb8SAndy Fiddaman					compile $cc -o ${tmp}s.exe $2 ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e && $executable ${tmp}s.exe || continue
3449*906afcb8SAndy Fiddaman					case `wc -l ${tmp}s.e` in
3450*906afcb8SAndy Fiddaman					$e)	;;
3451*906afcb8SAndy Fiddaman					*)	continue ;;
3452*906afcb8SAndy Fiddaman					esac
3453*906afcb8SAndy Fiddaman					case `ls -s ${tmp}s.exe` in
3454*906afcb8SAndy Fiddaman					$d)	;;
3455*906afcb8SAndy Fiddaman					*)	reallystatic=$2
3456*906afcb8SAndy Fiddaman						set x
3457*906afcb8SAndy Fiddaman						shift
3458*906afcb8SAndy Fiddaman						break
3459*906afcb8SAndy Fiddaman						;;
3460*906afcb8SAndy Fiddaman					esac
3461*906afcb8SAndy Fiddaman				done
3462*906afcb8SAndy Fiddaman			fi
3463*906afcb8SAndy Fiddaman			rm -f ${tmp}s.*
3464*906afcb8SAndy Fiddaman								#...INDENT
3465*906afcb8SAndy Fiddaman								;;
3466*906afcb8SAndy Fiddaman							esac
3467*906afcb8SAndy Fiddaman							ccflags=$reallystatic
3468*906afcb8SAndy Fiddaman							;;
3469*906afcb8SAndy Fiddaman						*)	ccflags=
3470*906afcb8SAndy Fiddaman							;;
3471*906afcb8SAndy Fiddaman						esac
3472*906afcb8SAndy Fiddaman						set x $mac
3473*906afcb8SAndy Fiddaman						e=1
3474*906afcb8SAndy Fiddaman						while	:
3475*906afcb8SAndy Fiddaman						do	o=
3476*906afcb8SAndy Fiddaman							shift
3477*906afcb8SAndy Fiddaman							while	:
3478*906afcb8SAndy Fiddaman							do	case $# in
3479*906afcb8SAndy Fiddaman								0)	break ;;
3480*906afcb8SAndy Fiddaman								esac
3481*906afcb8SAndy Fiddaman								case $1 in
3482*906afcb8SAndy Fiddaman								-)	break ;;
3483*906afcb8SAndy Fiddaman								esac
3484*906afcb8SAndy Fiddaman								o="$o $1"
3485*906afcb8SAndy Fiddaman								shift
3486*906afcb8SAndy Fiddaman							done
3487*906afcb8SAndy Fiddaman							rm -f $tmp.exe
3488*906afcb8SAndy Fiddaman							if	compile $cc $ccflags $o -DTEST=$p -DID=$v -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout && $executable $tmp.exe
3489*906afcb8SAndy Fiddaman							then	case $run in
3490*906afcb8SAndy Fiddaman
3491*906afcb8SAndy Fiddaman				status*)execute $tmp.exe <&$nullin >&$nullout
3492*906afcb8SAndy Fiddaman					V=$?
3493*906afcb8SAndy Fiddaman					case $V in
3494*906afcb8SAndy Fiddaman					0)	e=1 ;;
3495*906afcb8SAndy Fiddaman					*)	e=0 ;;
3496*906afcb8SAndy Fiddaman					esac
3497*906afcb8SAndy Fiddaman					break
3498*906afcb8SAndy Fiddaman					;;
3499*906afcb8SAndy Fiddaman				no[ls]*);;
3500*906afcb8SAndy Fiddaman				[ls]*)	e=0 && break ;;
3501*906afcb8SAndy Fiddaman				noo*)	execute $tmp.exe <&$nullin >$tmp.out || break ;;
3502*906afcb8SAndy Fiddaman				o*)	execute $tmp.exe <&$nullin >$tmp.out && e=0 && break ;;
3503*906afcb8SAndy Fiddaman				no*)	execute $tmp.exe <&$nullin >&$nullout || break ;;
3504*906afcb8SAndy Fiddaman				*)	execute $tmp.exe <&$nullin >&$nullout && e=0 && break ;;
3505*906afcb8SAndy Fiddaman
3506*906afcb8SAndy Fiddaman								esac
3507*906afcb8SAndy Fiddaman							else	case $run in
3508*906afcb8SAndy Fiddaman								no[els]*)e=1 && break ;;
3509*906afcb8SAndy Fiddaman								esac
3510*906afcb8SAndy Fiddaman							fi
3511*906afcb8SAndy Fiddaman							case $# in
3512*906afcb8SAndy Fiddaman							0)	case $run in
3513*906afcb8SAndy Fiddaman								no*)	e=0 ;;
3514*906afcb8SAndy Fiddaman								esac
3515*906afcb8SAndy Fiddaman								break
3516*906afcb8SAndy Fiddaman								;;
3517*906afcb8SAndy Fiddaman							esac
3518*906afcb8SAndy Fiddaman						done
3519*906afcb8SAndy Fiddaman						;;
3520*906afcb8SAndy Fiddaman					esac
3521*906afcb8SAndy Fiddaman					o=1
3522*906afcb8SAndy Fiddaman					case $run in
3523*906afcb8SAndy Fiddaman					no*)	case $e in
3524*906afcb8SAndy Fiddaman						0)	e=1 ;;
3525*906afcb8SAndy Fiddaman						*)	e=0 ;;
3526*906afcb8SAndy Fiddaman						esac
3527*906afcb8SAndy Fiddaman						;;
3528*906afcb8SAndy Fiddaman					esac
3529*906afcb8SAndy Fiddaman					case $run in
3530*906afcb8SAndy Fiddaman					o*|noo*)case $e in
3531*906afcb8SAndy Fiddaman						0)	cat $tmp.out ;;
3532*906afcb8SAndy Fiddaman						esac
3533*906afcb8SAndy Fiddaman						rm -f $tmp.out
3534*906afcb8SAndy Fiddaman						;;
3535*906afcb8SAndy Fiddaman					esac
3536*906afcb8SAndy Fiddaman					report $e $V "${note:-$run\ passed}" "${note:-$run} failed"
3537*906afcb8SAndy Fiddaman					continue
3538*906afcb8SAndy Fiddaman					;;
3539*906afcb8SAndy Fiddaman				esac
3540*906afcb8SAndy Fiddaman
3541*906afcb8SAndy Fiddaman				# initialize common builtin state
3542*906afcb8SAndy Fiddaman
3543*906afcb8SAndy Fiddaman				case $o in
3544*906afcb8SAndy Fiddaman				dat|lib|mth|run)
3545*906afcb8SAndy Fiddaman					case $statictest in
3546*906afcb8SAndy Fiddaman					"")	statictest=FoobaR
3547*906afcb8SAndy Fiddaman						copy $tmp.c "
3548*906afcb8SAndy Fiddaman$tst
3549*906afcb8SAndy Fiddaman$ext
3550*906afcb8SAndy Fiddaman$std
3551*906afcb8SAndy Fiddaman$usr
3552*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
3553*906afcb8SAndy Fiddamanextern int $statictest;
3554*906afcb8SAndy Fiddaman_END_EXTERNS_
3555*906afcb8SAndy Fiddamanint main(){char* i = (char*)&$statictest; return ((unsigned int)i)^0xaaaa;}
3556*906afcb8SAndy Fiddaman"
3557*906afcb8SAndy Fiddaman						rm -f $tmp.exe
3558*906afcb8SAndy Fiddaman						if	compile $cc -o $tmp.exe $tmp.c <&$nullin >&$nullout && $executable $tmp.exe
3559*906afcb8SAndy Fiddaman						then	case $static in
3560*906afcb8SAndy Fiddaman							.)	static=
3561*906afcb8SAndy Fiddaman								copy $tmp.c "
3562*906afcb8SAndy Fiddaman$tst
3563*906afcb8SAndy Fiddaman$ext
3564*906afcb8SAndy Fiddamanint main(){printf("hello");return(0);}
3565*906afcb8SAndy Fiddaman"
3566*906afcb8SAndy Fiddaman								rm -f $tmp.exe
3567*906afcb8SAndy Fiddaman								if	compile $cc -c $tmp.c <&$nullin >&$nullout &&
3568*906afcb8SAndy Fiddaman									compile $cc -o $tmp.exe $tmp.o <&$nullin >&$nullout &&
3569*906afcb8SAndy Fiddaman									$executable $tmp.exe
3570*906afcb8SAndy Fiddaman								then	e=`wc -l $tmp.e`
3571*906afcb8SAndy Fiddaman									eval set x x $binding
3572*906afcb8SAndy Fiddaman									while	:
3573*906afcb8SAndy Fiddaman									do	shift
3574*906afcb8SAndy Fiddaman										shift
3575*906afcb8SAndy Fiddaman										case $# in
3576*906afcb8SAndy Fiddaman										0)	break ;;
3577*906afcb8SAndy Fiddaman										esac
3578*906afcb8SAndy Fiddaman										rm -f $tmp.exe
3579*906afcb8SAndy Fiddaman										compile $cc -o $tmp.exe $1 $tmp.o <&$nullin >&$nullout && $executable $tmp.exe || continue
3580*906afcb8SAndy Fiddaman										case `wc -l $tmp.e` in
3581*906afcb8SAndy Fiddaman										$e)	;;
3582*906afcb8SAndy Fiddaman										*)	continue ;;
3583*906afcb8SAndy Fiddaman										esac
3584*906afcb8SAndy Fiddaman										d=`ls -s $tmp.exe`
3585*906afcb8SAndy Fiddaman										rm -f $tmp.exe
3586*906afcb8SAndy Fiddaman										compile $cc -o $tmp.exe $2 $tmp.o <&$nullin >&$nullout && $executable $tmp.exe || continue
3587*906afcb8SAndy Fiddaman										case `wc -l $tmp.e` in
3588*906afcb8SAndy Fiddaman										$e)	;;
3589*906afcb8SAndy Fiddaman										*)	continue ;;
3590*906afcb8SAndy Fiddaman										esac
3591*906afcb8SAndy Fiddaman										case `ls -s $tmp.exe` in
3592*906afcb8SAndy Fiddaman										$d)	;;
3593*906afcb8SAndy Fiddaman										*)	static=$2
3594*906afcb8SAndy Fiddaman											set x
3595*906afcb8SAndy Fiddaman											shift
3596*906afcb8SAndy Fiddaman											break
3597*906afcb8SAndy Fiddaman											;;
3598*906afcb8SAndy Fiddaman										esac
3599*906afcb8SAndy Fiddaman									done
3600*906afcb8SAndy Fiddaman								fi
3601*906afcb8SAndy Fiddaman								;;
3602*906afcb8SAndy Fiddaman							esac
3603*906afcb8SAndy Fiddaman						else	static=
3604*906afcb8SAndy Fiddaman						fi
3605*906afcb8SAndy Fiddaman						;;
3606*906afcb8SAndy Fiddaman					esac
3607*906afcb8SAndy Fiddaman					;;
3608*906afcb8SAndy Fiddaman				esac
3609*906afcb8SAndy Fiddaman
3610*906afcb8SAndy Fiddaman				# builtin tests
3611*906afcb8SAndy Fiddaman
3612*906afcb8SAndy Fiddaman				case $o in
3613*906afcb8SAndy Fiddaman				api)	;;
3614*906afcb8SAndy Fiddaman				cmd)	case $p in
3615*906afcb8SAndy Fiddaman					?*)	continue ;;
3616*906afcb8SAndy Fiddaman					esac
3617*906afcb8SAndy Fiddaman					is $o $a
3618*906afcb8SAndy Fiddaman					k=1
3619*906afcb8SAndy Fiddaman					for j in "" usr
3620*906afcb8SAndy Fiddaman					do	case $j in
3621*906afcb8SAndy Fiddaman						"")	d= s= ;;
3622*906afcb8SAndy Fiddaman						*)	d=/$j s=_$j ;;
3623*906afcb8SAndy Fiddaman						esac
3624*906afcb8SAndy Fiddaman						for i in bin etc ucb
3625*906afcb8SAndy Fiddaman						do	if	test -f $altroot/$d/$i/$a
3626*906afcb8SAndy Fiddaman							then	case $k in
3627*906afcb8SAndy Fiddaman								1)	k=0
3628*906afcb8SAndy Fiddaman									case $M in
3629*906afcb8SAndy Fiddaman									*-*)	;;
3630*906afcb8SAndy Fiddaman									*)	usr="$usr$nl#define $m 1"
3631*906afcb8SAndy Fiddaman										case $define in
3632*906afcb8SAndy Fiddaman										1)	echo "#define $m	1	/* $a in ?(/usr)/(bin|etc|ucb) */" ;;
3633*906afcb8SAndy Fiddaman										n)	echo "$m=1" ;;
3634*906afcb8SAndy Fiddaman										esac
3635*906afcb8SAndy Fiddaman										;;
3636*906afcb8SAndy Fiddaman									esac
3637*906afcb8SAndy Fiddaman									;;
3638*906afcb8SAndy Fiddaman								esac
3639*906afcb8SAndy Fiddaman								c=${s}_${i}_${v}
3640*906afcb8SAndy Fiddaman								usr="$usr$nl#define $c 1"
3641*906afcb8SAndy Fiddaman								case $define in
3642*906afcb8SAndy Fiddaman								1)	echo "#define $c	1	/* $d/$i/$a found */" ;;
3643*906afcb8SAndy Fiddaman								n)	echo "$c=1" ;;
3644*906afcb8SAndy Fiddaman								esac
3645*906afcb8SAndy Fiddaman							fi
3646*906afcb8SAndy Fiddaman						done
3647*906afcb8SAndy Fiddaman					done
3648*906afcb8SAndy Fiddaman					case $k in
3649*906afcb8SAndy Fiddaman					0)	success ;;
3650*906afcb8SAndy Fiddaman					1)	failure ;;
3651*906afcb8SAndy Fiddaman					esac
3652*906afcb8SAndy Fiddaman					;;
3653*906afcb8SAndy Fiddaman				dat)	case $p in
3654*906afcb8SAndy Fiddaman					?*)	continue ;;
3655*906afcb8SAndy Fiddaman					esac
3656*906afcb8SAndy Fiddaman					{
3657*906afcb8SAndy Fiddaman					copy - "
3658*906afcb8SAndy Fiddaman$tst
3659*906afcb8SAndy Fiddaman$ext
3660*906afcb8SAndy Fiddaman$std
3661*906afcb8SAndy Fiddaman$usr
3662*906afcb8SAndy Fiddaman$pre
3663*906afcb8SAndy Fiddaman"
3664*906afcb8SAndy Fiddaman					case $inc in
3665*906afcb8SAndy Fiddaman					?*)	echo "$inc"
3666*906afcb8SAndy Fiddaman						;;
3667*906afcb8SAndy Fiddaman					*)	echo "_BEGIN_EXTERNS_
3668*906afcb8SAndy Fiddamanextern int $v;
3669*906afcb8SAndy Fiddaman_END_EXTERNS_"
3670*906afcb8SAndy Fiddaman						;;
3671*906afcb8SAndy Fiddaman					esac
3672*906afcb8SAndy Fiddaman					echo "
3673*906afcb8SAndy Fiddaman#ifdef _DLL
3674*906afcb8SAndy Fiddaman#define _REF_
3675*906afcb8SAndy Fiddaman#else
3676*906afcb8SAndy Fiddaman#define _REF_	&
3677*906afcb8SAndy Fiddaman#endif
3678*906afcb8SAndy Fiddamanint main(){char* i = (char*) _REF_ $v; return ((unsigned int)i)^0xaaaa;}"
3679*906afcb8SAndy Fiddaman					} > $tmp.c
3680*906afcb8SAndy Fiddaman					is $o $v
3681*906afcb8SAndy Fiddaman					rm -f $tmp.exe
3682*906afcb8SAndy Fiddaman					compile $cc -c $tmp.c <&$nullin >&$nullout &&
3683*906afcb8SAndy Fiddaman					compile $cc $static -o $tmp.exe $tmp.o $lib $deflib <&$nullin >&$nullout &&
3684*906afcb8SAndy Fiddaman					$executable $tmp.exe
3685*906afcb8SAndy Fiddaman					report $? 1 "$v in default lib(s)" "$v not in default lib(s)"
3686*906afcb8SAndy Fiddaman					;;
3687*906afcb8SAndy Fiddaman				dfn)	case $p in
3688*906afcb8SAndy Fiddaman					?*)	continue ;;
3689*906afcb8SAndy Fiddaman					esac
3690*906afcb8SAndy Fiddaman					is dfn $v
3691*906afcb8SAndy Fiddaman					echo "$pre
3692*906afcb8SAndy Fiddaman$tst
3693*906afcb8SAndy Fiddaman$ext
3694*906afcb8SAndy Fiddaman$inc
3695*906afcb8SAndy Fiddaman#ifdef $v
3696*906afcb8SAndy Fiddaman<<\"#ifndef $v\">>
3697*906afcb8SAndy Fiddaman<<\"#define $v\">>	$v	<<\"/* native $v */\">>
3698*906afcb8SAndy Fiddaman<<\"#endif\">>
3699*906afcb8SAndy Fiddaman#endif" > $tmp.c
3700*906afcb8SAndy Fiddaman					if	compile $cc -E -P $tmp.c <&$nullin >$tmp.i
3701*906afcb8SAndy Fiddaman					then	sed -e '/<<[ 	]*".*"[ 	]*>>/!d' -e 's/<<[ 	]*"//g' -e 's/"[ 	]*>>//g' $tmp.i > $tmp.t
3702*906afcb8SAndy Fiddaman						if	test -s $tmp.t
3703*906afcb8SAndy Fiddaman						then	success
3704*906afcb8SAndy Fiddaman							cat $tmp.t
3705*906afcb8SAndy Fiddaman						else	failure
3706*906afcb8SAndy Fiddaman						fi
3707*906afcb8SAndy Fiddaman					else	failure
3708*906afcb8SAndy Fiddaman					fi
3709*906afcb8SAndy Fiddaman					;;
3710*906afcb8SAndy Fiddaman				exp)	case $test in
3711*906afcb8SAndy Fiddaman					'')	echo "$command: $file$sline: test expression expected for $o" >&$stderr
3712*906afcb8SAndy Fiddaman						exit 1
3713*906afcb8SAndy Fiddaman						;;
3714*906afcb8SAndy Fiddaman					esac
3715*906afcb8SAndy Fiddaman					case $a in
3716*906afcb8SAndy Fiddaman					-|'')	;;
3717*906afcb8SAndy Fiddaman					*)	eval x='$'$a
3718*906afcb8SAndy Fiddaman						case $x in
3719*906afcb8SAndy Fiddaman						1)	result=FAILURE
3720*906afcb8SAndy Fiddaman							continue
3721*906afcb8SAndy Fiddaman							;;
3722*906afcb8SAndy Fiddaman						esac
3723*906afcb8SAndy Fiddaman						;;
3724*906afcb8SAndy Fiddaman					esac
3725*906afcb8SAndy Fiddaman					case $test in
3726*906afcb8SAndy Fiddaman					[01]|'"'*'"'|'<'*'>')
3727*906afcb8SAndy Fiddaman						case $a in
3728*906afcb8SAndy Fiddaman						-|'')	;;
3729*906afcb8SAndy Fiddaman						*)	case $define$note in
3730*906afcb8SAndy Fiddaman							1)	echo "#define $a	$test" ;;
3731*906afcb8SAndy Fiddaman							1*)	echo "#define $a	$test	/* $note */" ;;
3732*906afcb8SAndy Fiddaman							n)	echo "$a=$test" ;;
3733*906afcb8SAndy Fiddaman							esac
3734*906afcb8SAndy Fiddaman							eval $a='$test'
3735*906afcb8SAndy Fiddaman							;;
3736*906afcb8SAndy Fiddaman						esac
3737*906afcb8SAndy Fiddaman						;;
3738*906afcb8SAndy Fiddaman					*)	case $note in
3739*906afcb8SAndy Fiddaman						'')	note=$test ;;
3740*906afcb8SAndy Fiddaman						esac
3741*906afcb8SAndy Fiddaman						case $test in
3742*906afcb8SAndy Fiddaman						'')	c=1
3743*906afcb8SAndy Fiddaman							;;
3744*906afcb8SAndy Fiddaman						*)	is exp "$note"
3745*906afcb8SAndy Fiddaman							x=
3746*906afcb8SAndy Fiddaman							for i in `echo '' $test | sed 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_], & ,g'`
3747*906afcb8SAndy Fiddaman							do	case $i in
3748*906afcb8SAndy Fiddaman								[\ \	])
3749*906afcb8SAndy Fiddaman									;;
3750*906afcb8SAndy Fiddaman								[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]*)
3751*906afcb8SAndy Fiddaman									eval i='${'$i'}'
3752*906afcb8SAndy Fiddaman									case $i in
3753*906afcb8SAndy Fiddaman									'')	i=0
3754*906afcb8SAndy Fiddaman										;;
3755*906afcb8SAndy Fiddaman									'"'*'"');;
3756*906afcb8SAndy Fiddaman									*[!-+0123456789]*)
3757*906afcb8SAndy Fiddaman										case $i in
3758*906afcb8SAndy Fiddaman										*'"'*)	i=1 ;;
3759*906afcb8SAndy Fiddaman										*)	i='"'$i'"' ;;
3760*906afcb8SAndy Fiddaman										esac
3761*906afcb8SAndy Fiddaman										;;
3762*906afcb8SAndy Fiddaman									esac
3763*906afcb8SAndy Fiddaman									x="$x $i"
3764*906afcb8SAndy Fiddaman									;;
3765*906afcb8SAndy Fiddaman								'!')	x="$x 0 ="
3766*906afcb8SAndy Fiddaman									;;
3767*906afcb8SAndy Fiddaman								'&'|'|')case $x in
3768*906afcb8SAndy Fiddaman									*"$i")	;;
3769*906afcb8SAndy Fiddaman									*)	x="$x \\$i" ;;
3770*906afcb8SAndy Fiddaman									esac
3771*906afcb8SAndy Fiddaman									;;
3772*906afcb8SAndy Fiddaman								*)	x="$x \\$i"
3773*906afcb8SAndy Fiddaman									;;
3774*906afcb8SAndy Fiddaman								esac
3775*906afcb8SAndy Fiddaman							done
3776*906afcb8SAndy Fiddaman							c=`eval expr $x 2>&$stderr`
3777*906afcb8SAndy Fiddaman							;;
3778*906afcb8SAndy Fiddaman						esac
3779*906afcb8SAndy Fiddaman						case $c in
3780*906afcb8SAndy Fiddaman						0)	c=1 ;;
3781*906afcb8SAndy Fiddaman						*)	c=0 ;;
3782*906afcb8SAndy Fiddaman						esac
3783*906afcb8SAndy Fiddaman						M=$a
3784*906afcb8SAndy Fiddaman						m=$a
3785*906afcb8SAndy Fiddaman						report $c 1 "$note is true" "$note is false"
3786*906afcb8SAndy Fiddaman						;;
3787*906afcb8SAndy Fiddaman					esac
3788*906afcb8SAndy Fiddaman					;;
3789*906afcb8SAndy Fiddaman				hdr|lcl|nxt|sys)
3790*906afcb8SAndy Fiddaman					case $o in
3791*906afcb8SAndy Fiddaman					lcl|nxt)case $M in
3792*906afcb8SAndy Fiddaman						*-*)	continue ;;
3793*906afcb8SAndy Fiddaman						esac
3794*906afcb8SAndy Fiddaman						eval x='$'_$m
3795*906afcb8SAndy Fiddaman						case $x in
3796*906afcb8SAndy Fiddaman						?*)	continue ;;
3797*906afcb8SAndy Fiddaman						esac
3798*906afcb8SAndy Fiddaman						eval _$m=1
3799*906afcb8SAndy Fiddaman						is $o $f
3800*906afcb8SAndy Fiddaman						echo "$pre
3801*906afcb8SAndy Fiddaman$tst
3802*906afcb8SAndy Fiddaman$ext
3803*906afcb8SAndy Fiddaman$inc
3804*906afcb8SAndy Fiddaman#include <$f.h>" > $tmp.c
3805*906afcb8SAndy Fiddaman						case $f in
3806*906afcb8SAndy Fiddaman						sys/*)	e= ;;
3807*906afcb8SAndy Fiddaman						*)	e='-e /[\\\\\/]sys[\\\\\/]'$f'\\.h"/d' ;;
3808*906afcb8SAndy Fiddaman						esac
3809*906afcb8SAndy Fiddaman						if	compile $cc -E $tmp.c <&$nullin >$tmp.i
3810*906afcb8SAndy Fiddaman						then	i=`sed -e '/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*"[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:]*[\\\\\/].*[\\\\\/]'$f'\\.h"/!d' $e -e s'/.*"\\(.*\\)".*/\\1/' -e 's,\\\\,/,g' -e 's,///*,/,g' $tmp.i | sed 1q`
3811*906afcb8SAndy Fiddaman							case $i in
3812*906afcb8SAndy Fiddaman							[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]:[\\/]*)
3813*906afcb8SAndy Fiddaman								;;
3814*906afcb8SAndy Fiddaman							*/*/*)	k=`echo "$i" | sed 's,.*/\([^/]*/[^/]*\)$,../\1,'`
3815*906afcb8SAndy Fiddaman								echo "$pre
3816*906afcb8SAndy Fiddaman$tst
3817*906afcb8SAndy Fiddaman$ext
3818*906afcb8SAndy Fiddaman$inc
3819*906afcb8SAndy Fiddaman#include <$k>" > $tmp.c
3820*906afcb8SAndy Fiddaman								if	compile $cc -E $tmp.c <&$nullin >$tmp.i
3821*906afcb8SAndy Fiddaman								then	j=`sed -e '/^#[line 	]*[0123456789][0123456789]*[ 	][ 	]*"[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:]*[\\\\\/].*[\\\\\/]'$f'\\.h"/!d' $e -e s'/.*"\\(.*\\)".*/\\1/' -e 's,\\\\,/,g' -e 's,///*,/,g' $tmp.i | sed 1q`
3822*906afcb8SAndy Fiddaman									wi=`wc < "$i"`
3823*906afcb8SAndy Fiddaman									wj=`wc < "$j"`
3824*906afcb8SAndy Fiddaman									case $wi in
3825*906afcb8SAndy Fiddaman									$wj)	i=$k	;;
3826*906afcb8SAndy Fiddaman									esac
3827*906afcb8SAndy Fiddaman								fi
3828*906afcb8SAndy Fiddaman								;;
3829*906afcb8SAndy Fiddaman							*)	echo "$pre
3830*906afcb8SAndy Fiddaman$tst
3831*906afcb8SAndy Fiddaman$ext
3832*906afcb8SAndy Fiddaman$inc
3833*906afcb8SAndy Fiddaman#include <../include/$f.h>" > $tmp.c
3834*906afcb8SAndy Fiddaman								if	compile $cc -E $tmp.c <&$nullin >&$nullout
3835*906afcb8SAndy Fiddaman								then	i=../include/$f.h
3836*906afcb8SAndy Fiddaman								fi
3837*906afcb8SAndy Fiddaman								;;
3838*906afcb8SAndy Fiddaman							esac
3839*906afcb8SAndy Fiddaman						else	i=
3840*906afcb8SAndy Fiddaman						fi
3841*906afcb8SAndy Fiddaman						case $i in
3842*906afcb8SAndy Fiddaman						[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]:[\\/]*|[\\/]*)
3843*906afcb8SAndy Fiddaman							success
3844*906afcb8SAndy Fiddaman							case $o in
3845*906afcb8SAndy Fiddaman							lcl)	echo "#if defined(__STDPP__directive)"
3846*906afcb8SAndy Fiddaman								echo "__STDPP__directive pragma pp:hosted"
3847*906afcb8SAndy Fiddaman								echo "#endif"
3848*906afcb8SAndy Fiddaman								echo "#include <$i>	/* the native <$f.h> */"
3849*906afcb8SAndy Fiddaman								echo "#undef	$m"
3850*906afcb8SAndy Fiddaman								usr="$usr$nl#define $m 1"
3851*906afcb8SAndy Fiddaman								echo "#define $m	1"
3852*906afcb8SAndy Fiddaman								;;
3853*906afcb8SAndy Fiddaman							nxt)	echo "#define $m <$i>	/* include path for the native <$f.h> */"
3854*906afcb8SAndy Fiddaman								echo "#define ${m}_str \"$i\"	/* include string for the native <$f.h> */"
3855*906afcb8SAndy Fiddaman								usr="$usr$nl#define $m <$i>$nl#define ${m}_str \"$i\""
3856*906afcb8SAndy Fiddaman								eval $m=\\\<$i\\\>
3857*906afcb8SAndy Fiddaman								;;
3858*906afcb8SAndy Fiddaman							esac
3859*906afcb8SAndy Fiddaman							break
3860*906afcb8SAndy Fiddaman							;;
3861*906afcb8SAndy Fiddaman						../*/*)	success
3862*906afcb8SAndy Fiddaman							case $o in
3863*906afcb8SAndy Fiddaman							lcl)	echo "#include <$i>	/* the native <$f.h> */"
3864*906afcb8SAndy Fiddaman								echo "#undef	$m"
3865*906afcb8SAndy Fiddaman								usr="$usr$nl#define $m 1"
3866*906afcb8SAndy Fiddaman								echo "#define $m	1"
3867*906afcb8SAndy Fiddaman								eval $m=1
3868*906afcb8SAndy Fiddaman								;;
3869*906afcb8SAndy Fiddaman							nxt)	echo "#define $m <$i>	/* include path for the native <$f.h> */"
3870*906afcb8SAndy Fiddaman								echo "#define ${m}_str \"$i\"	/* include string for the native <$f.h> */"
3871*906afcb8SAndy Fiddaman								usr="$usr$nl#define $m <$i>$nl#define ${m}_str \"$i\""
3872*906afcb8SAndy Fiddaman								eval $m=\\\<$i\\\>
3873*906afcb8SAndy Fiddaman								;;
3874*906afcb8SAndy Fiddaman							esac
3875*906afcb8SAndy Fiddaman							break
3876*906afcb8SAndy Fiddaman							;;
3877*906afcb8SAndy Fiddaman						*)	failure
3878*906afcb8SAndy Fiddaman							case $o in
3879*906afcb8SAndy Fiddaman							lcl)	case $all$config$undef in
3880*906afcb8SAndy Fiddaman								?1?|??1)echo "#undef	$m		/* no native <$f.h> */" ;;
3881*906afcb8SAndy Fiddaman								1??)	echo "#define $m	0	/* no native <$f.h> */" ;;
3882*906afcb8SAndy Fiddaman								esac
3883*906afcb8SAndy Fiddaman								eval $m=0
3884*906afcb8SAndy Fiddaman								;;
3885*906afcb8SAndy Fiddaman							nxt)	case $all$config$undef in
3886*906afcb8SAndy Fiddaman								?1?|??1)echo "#undef	$m		/* no include path for the native <$f.h> */" ;;
3887*906afcb8SAndy Fiddaman								esac
3888*906afcb8SAndy Fiddaman								;;
3889*906afcb8SAndy Fiddaman							esac
3890*906afcb8SAndy Fiddaman							;;
3891*906afcb8SAndy Fiddaman						esac
3892*906afcb8SAndy Fiddaman						;;
3893*906afcb8SAndy Fiddaman					*)	case $o in
3894*906afcb8SAndy Fiddaman						hdr)	x=$f.h ;;
3895*906afcb8SAndy Fiddaman						sys)	x=sys/$f.h ;;
3896*906afcb8SAndy Fiddaman						esac
3897*906afcb8SAndy Fiddaman						case " $gothdr " in
3898*906afcb8SAndy Fiddaman						*" - $x "*)
3899*906afcb8SAndy Fiddaman							failure +
3900*906afcb8SAndy Fiddaman							;;
3901*906afcb8SAndy Fiddaman						*" + $x "*)
3902*906afcb8SAndy Fiddaman							success +
3903*906afcb8SAndy Fiddaman							;;
3904*906afcb8SAndy Fiddaman						*)	echo "
3905*906afcb8SAndy Fiddaman$tst
3906*906afcb8SAndy Fiddaman$ext
3907*906afcb8SAndy Fiddaman$allinc
3908*906afcb8SAndy Fiddaman$inc
3909*906afcb8SAndy Fiddaman#include <$x>" > $tmp.c
3910*906afcb8SAndy Fiddaman							if	is_hdr $x
3911*906afcb8SAndy Fiddaman							then	gothdr="$gothdr + $x"
3912*906afcb8SAndy Fiddaman								case $M in
3913*906afcb8SAndy Fiddaman								*-*)	;;
3914*906afcb8SAndy Fiddaman								*)	case " $puthdr " in
3915*906afcb8SAndy Fiddaman									*" $m "*)
3916*906afcb8SAndy Fiddaman										;;
3917*906afcb8SAndy Fiddaman									*)	puthdr="$puthdr $m"
3918*906afcb8SAndy Fiddaman										usr="$usr$nl#define $m 1"
3919*906afcb8SAndy Fiddaman										;;
3920*906afcb8SAndy Fiddaman									esac
3921*906afcb8SAndy Fiddaman									case $define in
3922*906afcb8SAndy Fiddaman									1)	echo "#define $m	1	/* #include <$x> ok */" ;;
3923*906afcb8SAndy Fiddaman									n)	echo "$m=1" ;;
3924*906afcb8SAndy Fiddaman									esac
3925*906afcb8SAndy Fiddaman									eval $m=1
3926*906afcb8SAndy Fiddaman									;;
3927*906afcb8SAndy Fiddaman								esac
3928*906afcb8SAndy Fiddaman							else	gothdr="$gothdr - $x"
3929*906afcb8SAndy Fiddaman								case $M in
3930*906afcb8SAndy Fiddaman								*-*)	;;
3931*906afcb8SAndy Fiddaman								*)	case $define$all$config$undef in
3932*906afcb8SAndy Fiddaman									1?1?|1??1)echo "#undef	$m		/* #include <$x> not ok */" ;;
3933*906afcb8SAndy Fiddaman									11??)	echo "#define $m	0	/* #include <$x> not ok */" ;;
3934*906afcb8SAndy Fiddaman									n1?1)	echo "$m=" ;;
3935*906afcb8SAndy Fiddaman									n1??)	echo "$m=0" ;;
3936*906afcb8SAndy Fiddaman									esac
3937*906afcb8SAndy Fiddaman									eval $m=0
3938*906afcb8SAndy Fiddaman									;;
3939*906afcb8SAndy Fiddaman								esac
3940*906afcb8SAndy Fiddaman							fi
3941*906afcb8SAndy Fiddaman							;;
3942*906afcb8SAndy Fiddaman						esac
3943*906afcb8SAndy Fiddaman						continue
3944*906afcb8SAndy Fiddaman						;;
3945*906afcb8SAndy Fiddaman					esac
3946*906afcb8SAndy Fiddaman					;;
3947*906afcb8SAndy Fiddaman				iff)	;;
3948*906afcb8SAndy Fiddaman				ini)	;;
3949*906afcb8SAndy Fiddaman				key)	case $p in
3950*906afcb8SAndy Fiddaman					?*)	continue ;;
3951*906afcb8SAndy Fiddaman					esac
3952*906afcb8SAndy Fiddaman					w=$v
3953*906afcb8SAndy Fiddaman					while	:
3954*906afcb8SAndy Fiddaman					do	is $o $w
3955*906afcb8SAndy Fiddaman						echo "$pre
3956*906afcb8SAndy Fiddaman$tst
3957*906afcb8SAndy Fiddaman$ext
3958*906afcb8SAndy Fiddamanint f(){int $w = 1;return($w);}" > $tmp.c
3959*906afcb8SAndy Fiddaman						if	compile $cc -c $tmp.c <&$nullin >&$nullout
3960*906afcb8SAndy Fiddaman						then	failure
3961*906afcb8SAndy Fiddaman							case $set in
3962*906afcb8SAndy Fiddaman							*" ="|*" = "*)
3963*906afcb8SAndy Fiddaman								set x $set
3964*906afcb8SAndy Fiddaman								shift
3965*906afcb8SAndy Fiddaman								w=
3966*906afcb8SAndy Fiddaman								while	:
3967*906afcb8SAndy Fiddaman								do	case $# in
3968*906afcb8SAndy Fiddaman									0)	break ;;
3969*906afcb8SAndy Fiddaman									esac
3970*906afcb8SAndy Fiddaman									case $1 in
3971*906afcb8SAndy Fiddaman									=)	break ;;
3972*906afcb8SAndy Fiddaman									esac
3973*906afcb8SAndy Fiddaman									case $w in
3974*906afcb8SAndy Fiddaman									'')	w=$1 ;;
3975*906afcb8SAndy Fiddaman									*)	w="$w $1" ;;
3976*906afcb8SAndy Fiddaman									esac
3977*906afcb8SAndy Fiddaman									shift
3978*906afcb8SAndy Fiddaman								done
3979*906afcb8SAndy Fiddaman								case $1 in
3980*906afcb8SAndy Fiddaman								=)	shift
3981*906afcb8SAndy Fiddaman									case $# in
3982*906afcb8SAndy Fiddaman									0)	set=" " ;;
3983*906afcb8SAndy Fiddaman									*)	set=$* ;;
3984*906afcb8SAndy Fiddaman									esac
3985*906afcb8SAndy Fiddaman									;;
3986*906afcb8SAndy Fiddaman								*)	set=
3987*906afcb8SAndy Fiddaman									;;
3988*906afcb8SAndy Fiddaman								esac
3989*906afcb8SAndy Fiddaman								case $shell in
3990*906afcb8SAndy Fiddaman								ksh)	typeset -u u=$w ;;
3991*906afcb8SAndy Fiddaman								*)	u=`echo $w | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;;
3992*906afcb8SAndy Fiddaman								esac
3993*906afcb8SAndy Fiddaman								u=_$u
3994*906afcb8SAndy Fiddaman								M=$w
3995*906afcb8SAndy Fiddaman								case $M in
3996*906afcb8SAndy Fiddaman								*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*)
3997*906afcb8SAndy Fiddaman									M=`echo "X$m" | sed -e 's,^.,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'`
3998*906afcb8SAndy Fiddaman									;;
3999*906afcb8SAndy Fiddaman								esac
4000*906afcb8SAndy Fiddaman								case $config in
4001*906afcb8SAndy Fiddaman								1)	m=HAVE${u}_RESERVED ;;
4002*906afcb8SAndy Fiddaman								*)	m=_key_${w} ;;
4003*906afcb8SAndy Fiddaman								esac
4004*906afcb8SAndy Fiddaman								continue
4005*906afcb8SAndy Fiddaman								;;
4006*906afcb8SAndy Fiddaman							esac
4007*906afcb8SAndy Fiddaman							report - 1 - - "$w is not a reserved keyword" "default for reserved keyword $v"
4008*906afcb8SAndy Fiddaman						else	report 0 1 "$w is a reserved keyword" -
4009*906afcb8SAndy Fiddaman							case $M in
4010*906afcb8SAndy Fiddaman							*-*)	;;
4011*906afcb8SAndy Fiddaman							*)	case $define$w in
4012*906afcb8SAndy Fiddaman								1$v)	;;
4013*906afcb8SAndy Fiddaman								1*)	echo "#define $v	$w	/* alternate for reserved keyword $v */" ;;
4014*906afcb8SAndy Fiddaman								n*)	echo "$v=$w" ;;
4015*906afcb8SAndy Fiddaman								esac
4016*906afcb8SAndy Fiddaman								;;
4017*906afcb8SAndy Fiddaman							esac
4018*906afcb8SAndy Fiddaman						fi
4019*906afcb8SAndy Fiddaman						break
4020*906afcb8SAndy Fiddaman					done
4021*906afcb8SAndy Fiddaman					;;
4022*906afcb8SAndy Fiddaman				lib|mth)case $p in
4023*906afcb8SAndy Fiddaman					?*)	continue ;;
4024*906afcb8SAndy Fiddaman					esac
4025*906afcb8SAndy Fiddaman					case $v in
4026*906afcb8SAndy Fiddaman					-)	continue ;;
4027*906afcb8SAndy Fiddaman					esac
4028*906afcb8SAndy Fiddaman					is $o $v
4029*906afcb8SAndy Fiddaman					copy $tmp.c "
4030*906afcb8SAndy Fiddaman$tst
4031*906afcb8SAndy Fiddaman$ext
4032*906afcb8SAndy Fiddaman$std
4033*906afcb8SAndy Fiddaman$usr
4034*906afcb8SAndy Fiddaman$pre
4035*906afcb8SAndy Fiddaman$inc
4036*906afcb8SAndy Fiddamantypedef int (*_IFFE_fun)();
4037*906afcb8SAndy Fiddaman#ifdef _IFFE_extern
4038*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
4039*906afcb8SAndy Fiddamanextern int $v();
4040*906afcb8SAndy Fiddaman_END_EXTERNS_
4041*906afcb8SAndy Fiddaman#endif
4042*906afcb8SAndy Fiddamanstatic _IFFE_fun i=(_IFFE_fun)$v;int main(){return ((unsigned int)i)^0xaaaa;}
4043*906afcb8SAndy Fiddaman"
4044*906afcb8SAndy Fiddaman					d=-D_IFFE_extern
4045*906afcb8SAndy Fiddaman					if	compile $cc -c $tmp.c <&$nullin >&$nullout
4046*906afcb8SAndy Fiddaman					then	d=
4047*906afcb8SAndy Fiddaman					elif	compile $cc $d -c $tmp.c <&$nullin >&$nullout
4048*906afcb8SAndy Fiddaman					then	:
4049*906afcb8SAndy Fiddaman					else	d=error
4050*906afcb8SAndy Fiddaman					fi
4051*906afcb8SAndy Fiddaman					if	test error != "$d"
4052*906afcb8SAndy Fiddaman					then	rm -f $tmp.exe
4053*906afcb8SAndy Fiddaman						if	compile $cc $d $static -o $tmp.exe $tmp.o $lib $deflib <&$nullin >&$nullout &&
4054*906afcb8SAndy Fiddaman							$executable $tmp.exe
4055*906afcb8SAndy Fiddaman						then	case $o in
4056*906afcb8SAndy Fiddaman							lib)	c=0 ;;
4057*906afcb8SAndy Fiddaman							*)	c=1 ;;
4058*906afcb8SAndy Fiddaman							esac
4059*906afcb8SAndy Fiddaman							report $c 1 "$v() in default lib(s)" "$v() not in default lib(s)" "default for function $v()"
4060*906afcb8SAndy Fiddaman						else	case $o in
4061*906afcb8SAndy Fiddaman							mth)	rm -f $tmp.exe
4062*906afcb8SAndy Fiddaman								compile $cc $d $static -o $tmp.exe $tmp.o -lm <&$nullin >&$nullout &&
4063*906afcb8SAndy Fiddaman								$executable $tmp.exe
4064*906afcb8SAndy Fiddaman								report $? 1 "$v() in math lib" "$v() not in math lib" "default for function $v()"
4065*906afcb8SAndy Fiddaman								;;
4066*906afcb8SAndy Fiddaman							*)	report 1 1 - "$v() not in default lib(s)" "default for function $v()"
4067*906afcb8SAndy Fiddaman								;;
4068*906afcb8SAndy Fiddaman							esac
4069*906afcb8SAndy Fiddaman						fi
4070*906afcb8SAndy Fiddaman					else	case $intrinsic in
4071*906afcb8SAndy Fiddaman						'')	copy $tmp.c "
4072*906afcb8SAndy Fiddaman$tst
4073*906afcb8SAndy Fiddaman$ext
4074*906afcb8SAndy Fiddaman$std
4075*906afcb8SAndy Fiddaman$usr
4076*906afcb8SAndy Fiddaman$pre
4077*906afcb8SAndy Fiddaman$inc
4078*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
4079*906afcb8SAndy Fiddamanextern int foo();
4080*906afcb8SAndy Fiddaman_END_EXTERNS_
4081*906afcb8SAndy Fiddamanstatic int ((*i)())=foo;int main(){return(i==0);}
4082*906afcb8SAndy Fiddaman"
4083*906afcb8SAndy Fiddaman							compile $cc -c $tmp.c <&$nullin >&$nullout
4084*906afcb8SAndy Fiddaman							intrinsic=$?
4085*906afcb8SAndy Fiddaman							;;
4086*906afcb8SAndy Fiddaman						esac
4087*906afcb8SAndy Fiddaman						case $o in
4088*906afcb8SAndy Fiddaman						mth)	report $intrinsic 1 "$v() in math lib" "$v() not in math lib" "default for function $v()" ;;
4089*906afcb8SAndy Fiddaman						*)	report $intrinsic 1 "$v() in default lib(s)" "$v() not in default lib(s)" "default for function $v()" ;;
4090*906afcb8SAndy Fiddaman						esac
4091*906afcb8SAndy Fiddaman					fi
4092*906afcb8SAndy Fiddaman					;;
4093*906afcb8SAndy Fiddaman				mac)	case $p in
4094*906afcb8SAndy Fiddaman					?*)	continue ;;
4095*906afcb8SAndy Fiddaman					esac
4096*906afcb8SAndy Fiddaman					is mac $v
4097*906afcb8SAndy Fiddaman					echo "
4098*906afcb8SAndy Fiddaman$tst
4099*906afcb8SAndy Fiddaman$ext
4100*906afcb8SAndy Fiddaman$pre
4101*906afcb8SAndy Fiddaman$inc
4102*906afcb8SAndy Fiddaman#ifdef $v
4103*906afcb8SAndy Fiddaman'$m:$v'
4104*906afcb8SAndy Fiddaman#endif" > $tmp.c
4105*906afcb8SAndy Fiddaman					compile $cc -E $tmp.c <&$nullin | grep -c "'$m:$v'" >&$nullout
4106*906afcb8SAndy Fiddaman					report $? 1 "$v is a macro" "$v is not a macro" "default for macro $v"
4107*906afcb8SAndy Fiddaman					;;
4108*906afcb8SAndy Fiddaman				mem)	case $p in
4109*906afcb8SAndy Fiddaman					?*)	eval i='$'_iffe_typedef_$p
4110*906afcb8SAndy Fiddaman						case $i in
4111*906afcb8SAndy Fiddaman						0|1)	;;
4112*906afcb8SAndy Fiddaman						*)	echo "$pre
4113*906afcb8SAndy Fiddaman$tst
4114*906afcb8SAndy Fiddaman$ext
4115*906afcb8SAndy Fiddaman$inc
4116*906afcb8SAndy Fiddamanstatic $p i;
4117*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c
4118*906afcb8SAndy Fiddaman							is typ $p
4119*906afcb8SAndy Fiddaman							if	compile $cc -c $tmp.c <&$nullin >&$nullout
4120*906afcb8SAndy Fiddaman							then	success -
4121*906afcb8SAndy Fiddaman								eval _iffe_typedef_$p=1
4122*906afcb8SAndy Fiddaman								i=1
4123*906afcb8SAndy Fiddaman							else	failure -
4124*906afcb8SAndy Fiddaman								eval _iffe_typedef_$p=0
4125*906afcb8SAndy Fiddaman								i=0
4126*906afcb8SAndy Fiddaman							fi
4127*906afcb8SAndy Fiddaman							;;
4128*906afcb8SAndy Fiddaman						esac
4129*906afcb8SAndy Fiddaman						case $i in
4130*906afcb8SAndy Fiddaman						0)	i="$v is not a member of $p" p="struct $p" ;;
4131*906afcb8SAndy Fiddaman						*)	i=- ;;
4132*906afcb8SAndy Fiddaman						esac
4133*906afcb8SAndy Fiddaman						is mem $v "$p"
4134*906afcb8SAndy Fiddaman						echo "$pre
4135*906afcb8SAndy Fiddaman$tst
4136*906afcb8SAndy Fiddaman$ext
4137*906afcb8SAndy Fiddaman$inc
4138*906afcb8SAndy Fiddamanstatic $p i;
4139*906afcb8SAndy Fiddamanint n = sizeof(i.$v);" > $tmp.c
4140*906afcb8SAndy Fiddaman						compile $cc -c $tmp.c <&$nullin >&$nullout
4141*906afcb8SAndy Fiddaman						report $? 1 "$v is a member of $p" "$i"
4142*906afcb8SAndy Fiddaman						;;
4143*906afcb8SAndy Fiddaman					*)	p=$v
4144*906afcb8SAndy Fiddaman						eval i='$'_iffe_typedef_$p
4145*906afcb8SAndy Fiddaman						case $i in
4146*906afcb8SAndy Fiddaman						0|1)	;;
4147*906afcb8SAndy Fiddaman						*)	echo "$pre
4148*906afcb8SAndy Fiddaman$tst
4149*906afcb8SAndy Fiddaman$ext
4150*906afcb8SAndy Fiddaman$inc
4151*906afcb8SAndy Fiddamanstatic $p i;
4152*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c
4153*906afcb8SAndy Fiddaman							is typ $p
4154*906afcb8SAndy Fiddaman							if	compile $cc -c $tmp.c <&$nullin >&$nullout
4155*906afcb8SAndy Fiddaman							then	success -
4156*906afcb8SAndy Fiddaman								eval _iffe_typedef_$p=1
4157*906afcb8SAndy Fiddaman								i=1
4158*906afcb8SAndy Fiddaman							else	failure -
4159*906afcb8SAndy Fiddaman								eval _iffe_typedef_$p=0
4160*906afcb8SAndy Fiddaman								i=0
4161*906afcb8SAndy Fiddaman							fi
4162*906afcb8SAndy Fiddaman							;;
4163*906afcb8SAndy Fiddaman						esac
4164*906afcb8SAndy Fiddaman						case $i in
4165*906afcb8SAndy Fiddaman						0)	i="$p is not a non-opaque struct" p="struct $p" ;;
4166*906afcb8SAndy Fiddaman						*)	i=- ;;
4167*906afcb8SAndy Fiddaman						esac
4168*906afcb8SAndy Fiddaman						is nos "$p"
4169*906afcb8SAndy Fiddaman						echo "$pre
4170*906afcb8SAndy Fiddaman$tst
4171*906afcb8SAndy Fiddaman$ext
4172*906afcb8SAndy Fiddaman$inc
4173*906afcb8SAndy Fiddamanstatic $p i;
4174*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c
4175*906afcb8SAndy Fiddaman						if	compile $cc -c $tmp.c <&$nullin >&$nullout
4176*906afcb8SAndy Fiddaman						then	echo "$pre
4177*906afcb8SAndy Fiddaman$tst
4178*906afcb8SAndy Fiddaman$ext
4179*906afcb8SAndy Fiddaman$inc
4180*906afcb8SAndy Fiddamanstatic $p i;
4181*906afcb8SAndy Fiddamanunsigned long f() { return (unsigned long)i; }" > $tmp.c
4182*906afcb8SAndy Fiddaman							if	compile $cc -c $tmp.c <&$nullin >&$nullout
4183*906afcb8SAndy Fiddaman							then	c=1
4184*906afcb8SAndy Fiddaman							else	c=0
4185*906afcb8SAndy Fiddaman							fi
4186*906afcb8SAndy Fiddaman						else	c=1
4187*906afcb8SAndy Fiddaman						fi
4188*906afcb8SAndy Fiddaman						report $c 1 "$p is a non-opaque struct" "$i"
4189*906afcb8SAndy Fiddaman					esac
4190*906afcb8SAndy Fiddaman					;;
4191*906afcb8SAndy Fiddaman				nop)	;;
4192*906afcb8SAndy Fiddaman				npt)	is npt $v
4193*906afcb8SAndy Fiddaman					copy $tmp.c "
4194*906afcb8SAndy Fiddaman$tst
4195*906afcb8SAndy Fiddaman$ext
4196*906afcb8SAndy Fiddaman$std
4197*906afcb8SAndy Fiddaman$usr
4198*906afcb8SAndy Fiddaman$pre
4199*906afcb8SAndy Fiddaman$inc
4200*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
4201*906afcb8SAndy Fiddamanstruct _iffe_struct { int _iffe_member; };
4202*906afcb8SAndy Fiddaman#if _STD_
4203*906afcb8SAndy Fiddamanextern struct _iffe_struct* $v(struct _iffe_struct*);
4204*906afcb8SAndy Fiddaman#else
4205*906afcb8SAndy Fiddamanextern struct _iffe_struct* $v();
4206*906afcb8SAndy Fiddaman#endif
4207*906afcb8SAndy Fiddaman_END_EXTERNS_
4208*906afcb8SAndy Fiddaman"
4209*906afcb8SAndy Fiddaman					# some compilers with -O only warn for invalid intrinsic prototypes
4210*906afcb8SAndy Fiddaman					case " $cc " in
4211*906afcb8SAndy Fiddaman					*" -O "*)	xx=`echo $cc | sed 's/ -O / /g'` ;;
4212*906afcb8SAndy Fiddaman					*)		xx=$cc ;;
4213*906afcb8SAndy Fiddaman					esac
4214*906afcb8SAndy Fiddaman					compile $xx -c $tmp.c <&$nullin >&$nullout
4215*906afcb8SAndy Fiddaman					report -$config $? 1 "$v() needs a prototype" "$v() does not need a prototype"
4216*906afcb8SAndy Fiddaman					;;
4217*906afcb8SAndy Fiddaman				num)	is num $v
4218*906afcb8SAndy Fiddaman					copy $tmp.c "
4219*906afcb8SAndy Fiddaman$tst
4220*906afcb8SAndy Fiddaman$ext
4221*906afcb8SAndy Fiddaman$std
4222*906afcb8SAndy Fiddaman$usr
4223*906afcb8SAndy Fiddaman$pre
4224*906afcb8SAndy Fiddaman$inc
4225*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_
4226*906afcb8SAndy Fiddamanint _iffe_int = $v / 2;
4227*906afcb8SAndy Fiddaman_END_EXTERNS_
4228*906afcb8SAndy Fiddaman"
4229*906afcb8SAndy Fiddaman					compile $cc -c $tmp.c <&$nullin >&$nullout
4230*906afcb8SAndy Fiddaman					report $? 1 "$v is a numeric constant" "$v is not a numeric constant"
4231*906afcb8SAndy Fiddaman					;;
4232*906afcb8SAndy Fiddaman				one)	for i in $a $hdr
4233*906afcb8SAndy Fiddaman					do	x="#include <$i>"
4234*906afcb8SAndy Fiddaman						case " $gothdr " in
4235*906afcb8SAndy Fiddaman						*" - $i "*)
4236*906afcb8SAndy Fiddaman							continue
4237*906afcb8SAndy Fiddaman							;;
4238*906afcb8SAndy Fiddaman						*" + $i "*)
4239*906afcb8SAndy Fiddaman							;;
4240*906afcb8SAndy Fiddaman						*)	echo "$x" > $tmp.c
4241*906afcb8SAndy Fiddaman							if	is_hdr $x
4242*906afcb8SAndy Fiddaman							then	gothdr="$gothdr + $x"
4243*906afcb8SAndy Fiddaman							else	gothdr="$gothdr - $x"
4244*906afcb8SAndy Fiddaman								continue
4245*906afcb8SAndy Fiddaman							fi
4246*906afcb8SAndy Fiddaman							;;
4247*906afcb8SAndy Fiddaman						esac
4248*906afcb8SAndy Fiddaman						case $one in
4249*906afcb8SAndy Fiddaman						"")	one=$x
4250*906afcb8SAndy Fiddaman							;;
4251*906afcb8SAndy Fiddaman						*"$x"*)	break
4252*906afcb8SAndy Fiddaman							;;
4253*906afcb8SAndy Fiddaman						*)	echo "$one" > $tmp.c
4254*906afcb8SAndy Fiddaman							if	compile $cc -E $tmp.c <&$nullin >$tmp.i
4255*906afcb8SAndy Fiddaman							then	c=$i
4256*906afcb8SAndy Fiddaman								case $c in
4257*906afcb8SAndy Fiddaman								*[\\/]*)	c=`echo $c | sed 's,[\\\\/],[\\\\/],g'` ;;
4258*906afcb8SAndy Fiddaman								esac
4259*906afcb8SAndy Fiddaman								case `sed -e '/^#[line 	]*1[ 	][ 	]*"[\\\\\/].*[\\\\\/]'$c'"/!d' $tmp.i` in
4260*906afcb8SAndy Fiddaman								?*)	break ;;
4261*906afcb8SAndy Fiddaman								esac
4262*906afcb8SAndy Fiddaman							fi
4263*906afcb8SAndy Fiddaman							one="$one$nl$x"
4264*906afcb8SAndy Fiddaman							;;
4265*906afcb8SAndy Fiddaman						esac
4266*906afcb8SAndy Fiddaman						echo "$x"
4267*906afcb8SAndy Fiddaman						break
4268*906afcb8SAndy Fiddaman					done
4269*906afcb8SAndy Fiddaman					;;
4270*906afcb8SAndy Fiddaman				opt)	M=$m
4271*906afcb8SAndy Fiddaman					is opt $a
4272*906afcb8SAndy Fiddaman					case " $PACKAGE_OPTIONS " in
4273*906afcb8SAndy Fiddaman					*" $a "*)	c=0 ;;
4274*906afcb8SAndy Fiddaman					*)		c=1 ;;
4275*906afcb8SAndy Fiddaman					esac
4276*906afcb8SAndy Fiddaman					report $c 1 "$a is set in \$PACKAGE_OPTIONS" "$a is not set in \$PACKAGE_OPTIONS"
4277*906afcb8SAndy Fiddaman					;;
4278*906afcb8SAndy Fiddaman				out|output)
4279*906afcb8SAndy Fiddaman					;;
4280*906afcb8SAndy Fiddaman				pth)	is pth $a
4281*906afcb8SAndy Fiddaman					pkg $pth
4282*906afcb8SAndy Fiddaman					tab="  "
4283*906afcb8SAndy Fiddaman					e=
4284*906afcb8SAndy Fiddaman					f=
4285*906afcb8SAndy Fiddaman					for i in $pth
4286*906afcb8SAndy Fiddaman					do	case $i in
4287*906afcb8SAndy Fiddaman						'{')	e="${nl}}"
4288*906afcb8SAndy Fiddaman							l=
4289*906afcb8SAndy Fiddaman							x=i
4290*906afcb8SAndy Fiddaman							v="\$${x}"
4291*906afcb8SAndy Fiddaman							t=${nl}${tab}
4292*906afcb8SAndy Fiddaman							b="fnd()${nl}{${t}for ${x} in"
4293*906afcb8SAndy Fiddaman							;;
4294*906afcb8SAndy Fiddaman						'}')	b="${b}${t}do${tab}if $exists ${v}/\${1}${t}${tab}${tab}then${tab}f=${v}/\${1}${t}${tab}${tab}${tab}return${t}${tab}${tab}fi"
4295*906afcb8SAndy Fiddaman							e="${t}done${e}"
4296*906afcb8SAndy Fiddaman							eval "${b}${e}"
4297*906afcb8SAndy Fiddaman							fnd $a
4298*906afcb8SAndy Fiddaman							case $f in
4299*906afcb8SAndy Fiddaman							?*)	break ;;
4300*906afcb8SAndy Fiddaman							esac
4301*906afcb8SAndy Fiddaman							;;
4302*906afcb8SAndy Fiddaman						-)	b="${b}${t}do${tab}test \"${v}\" = '' -o -d \"${v}\" &&${t}${tab}${tab}"
4303*906afcb8SAndy Fiddaman							x=${x}i
4304*906afcb8SAndy Fiddaman							v="${v}\$${x}"
4305*906afcb8SAndy Fiddaman							b="${b}for ${x} in"
4306*906afcb8SAndy Fiddaman							e="${t}done${e}"
4307*906afcb8SAndy Fiddaman							t="${t}${tab}${tab}"
4308*906afcb8SAndy Fiddaman							;;
4309*906afcb8SAndy Fiddaman						*)	case $e in
4310*906afcb8SAndy Fiddaman							'')	if	$exists ${i}/${a}
4311*906afcb8SAndy Fiddaman								then	f=${i}/${a}
4312*906afcb8SAndy Fiddaman									break
4313*906afcb8SAndy Fiddaman								fi
4314*906afcb8SAndy Fiddaman								;;
4315*906afcb8SAndy Fiddaman							*)	case $i in
4316*906afcb8SAndy Fiddaman								/|.)	b="${b} ''" ;;
4317*906afcb8SAndy Fiddaman								*)	b="${b} /${i}" ;;
4318*906afcb8SAndy Fiddaman								esac
4319*906afcb8SAndy Fiddaman								;;
4320*906afcb8SAndy Fiddaman							esac
4321*906afcb8SAndy Fiddaman							;;
4322*906afcb8SAndy Fiddaman						esac
4323*906afcb8SAndy Fiddaman					done
4324*906afcb8SAndy Fiddaman					case $f in
4325*906afcb8SAndy Fiddaman					'')	case $set in
4326*906afcb8SAndy Fiddaman						' ')	f=$a ;;
4327*906afcb8SAndy Fiddaman						?*)	f=$set ;;
4328*906afcb8SAndy Fiddaman						esac
4329*906afcb8SAndy Fiddaman						;;
4330*906afcb8SAndy Fiddaman					esac
4331*906afcb8SAndy Fiddaman					case $f in
4332*906afcb8SAndy Fiddaman					'')	c=1
4333*906afcb8SAndy Fiddaman						;;
4334*906afcb8SAndy Fiddaman					*)	c=0
4335*906afcb8SAndy Fiddaman						f="\"$f\""
4336*906afcb8SAndy Fiddaman						;;
4337*906afcb8SAndy Fiddaman					esac
4338*906afcb8SAndy Fiddaman					report $c "$f" "${note:-$a path}" "$a path not found"
4339*906afcb8SAndy Fiddaman					;;
4340*906afcb8SAndy Fiddaman				run)	is run $a
4341*906afcb8SAndy Fiddaman					if	test ! -r $a
4342*906afcb8SAndy Fiddaman					then	failure not found
4343*906afcb8SAndy Fiddaman						case $verbose in
4344*906afcb8SAndy Fiddaman						0)	echo "$command: $file$line: $a: not found" >&$stderr ;;
4345*906afcb8SAndy Fiddaman						esac
4346*906afcb8SAndy Fiddaman						exit 1
4347*906afcb8SAndy Fiddaman					fi
4348*906afcb8SAndy Fiddaman					noisy
4349*906afcb8SAndy Fiddaman					case $a in
4350*906afcb8SAndy Fiddaman					*.c)	rm -f $tmp.exe
4351*906afcb8SAndy Fiddaman						{
4352*906afcb8SAndy Fiddaman						echo "$tst
4353*906afcb8SAndy Fiddaman$ext
4354*906afcb8SAndy Fiddaman$std
4355*906afcb8SAndy Fiddaman$usr
4356*906afcb8SAndy Fiddaman$inc"
4357*906afcb8SAndy Fiddaman						cat $a
4358*906afcb8SAndy Fiddaman						} > $tmp.c
4359*906afcb8SAndy Fiddaman						compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$stderr 2>&$stderr &&
4360*906afcb8SAndy Fiddaman						$executable $tmp.exe &&
4361*906afcb8SAndy Fiddaman						execute $tmp.exe $opt <&$nullin
4362*906afcb8SAndy Fiddaman						;;
4363*906afcb8SAndy Fiddaman					*.sh)	{
4364*906afcb8SAndy Fiddaman						copy - ":
4365*906afcb8SAndy Fiddamanset \"cc='$cc' executable='$executable' id='$m' static='$static' tmp='$tmp'\" $opt $hdr $test"
4366*906afcb8SAndy Fiddaman						cat $a
4367*906afcb8SAndy Fiddaman						} > $tmp.sh
4368*906afcb8SAndy Fiddaman						chmod +x $tmp.sh
4369*906afcb8SAndy Fiddaman						( . $tmp.sh ) <&$nullin
4370*906afcb8SAndy Fiddaman						;;
4371*906afcb8SAndy Fiddaman					*)	false
4372*906afcb8SAndy Fiddaman						;;
4373*906afcb8SAndy Fiddaman					esac
4374*906afcb8SAndy Fiddaman					case $? in
4375*906afcb8SAndy Fiddaman					0)	success
4376*906afcb8SAndy Fiddaman						;;
4377*906afcb8SAndy Fiddaman					*)	failure cannot run
4378*906afcb8SAndy Fiddaman						case $verbose in
4379*906afcb8SAndy Fiddaman						0)	echo "$command: $file$line: $a: cannot run" >&$stderr ;;
4380*906afcb8SAndy Fiddaman						esac
4381*906afcb8SAndy Fiddaman						exit 1
4382*906afcb8SAndy Fiddaman						;;
4383*906afcb8SAndy Fiddaman					esac
4384*906afcb8SAndy Fiddaman					;;
4385*906afcb8SAndy Fiddaman				siz)	case $p in
4386*906afcb8SAndy Fiddaman					"")	x= ;;
4387*906afcb8SAndy Fiddaman					*)	x="$p " ;;
4388*906afcb8SAndy Fiddaman					esac
4389*906afcb8SAndy Fiddaman					is siz "$x$v"
4390*906afcb8SAndy Fiddaman					{
4391*906afcb8SAndy Fiddaman					case $p:$v in
4392*906afcb8SAndy Fiddaman					long:*|*:*[_0123456789]int[_0123456789]*)
4393*906afcb8SAndy Fiddaman						echo "$pre
4394*906afcb8SAndy Fiddaman$tst
4395*906afcb8SAndy Fiddaman$ext
4396*906afcb8SAndy Fiddaman$inc
4397*906afcb8SAndy Fiddamanstatic $x$v i;
4398*906afcb8SAndy Fiddaman$x$v f() {
4399*906afcb8SAndy Fiddaman$x$v v; i = 1; v = i;"
4400*906afcb8SAndy Fiddaman						echo "i = v * i; i = i / v; v = v + i; i = i - v;"
4401*906afcb8SAndy Fiddaman						case $v in
4402*906afcb8SAndy Fiddaman						float|double) ;;
4403*906afcb8SAndy Fiddaman						*)	echo "v <<= 4; i = v >> 2; i = 10; i = v % i; i |= v; v ^= i; i = 123; v &= i;" ;;
4404*906afcb8SAndy Fiddaman						esac
4405*906afcb8SAndy Fiddaman						echo "return v; }"
4406*906afcb8SAndy Fiddaman						;;
4407*906afcb8SAndy Fiddaman					*)	echo "$pre
4408*906afcb8SAndy Fiddaman$inc
4409*906afcb8SAndy Fiddamanstruct xxx { $x$v mem; };
4410*906afcb8SAndy Fiddamanstatic struct xxx v;
4411*906afcb8SAndy Fiddamanstruct xxx* f() { return &v; }"
4412*906afcb8SAndy Fiddaman						;;
4413*906afcb8SAndy Fiddaman					esac
4414*906afcb8SAndy Fiddaman					case $x in
4415*906afcb8SAndy Fiddaman					""|"struct "|"union ")
4416*906afcb8SAndy Fiddaman						echo "int g() { return 0; }"
4417*906afcb8SAndy Fiddaman						;;
4418*906afcb8SAndy Fiddaman					*)	echo "int g() { return sizeof($x$v)<=sizeof($v); }" ;;
4419*906afcb8SAndy Fiddaman					esac
4420*906afcb8SAndy Fiddaman					copy - "
4421*906afcb8SAndy Fiddamanint main() {
4422*906afcb8SAndy Fiddaman		f();
4423*906afcb8SAndy Fiddaman		g();
4424*906afcb8SAndy Fiddaman		printf(\"%u\\n\", sizeof($x$v));
4425*906afcb8SAndy Fiddaman		return 0;
4426*906afcb8SAndy Fiddaman}"
4427*906afcb8SAndy Fiddaman					} > $tmp.c
4428*906afcb8SAndy Fiddaman					rm -f $tmp.exe $tmp.dat
4429*906afcb8SAndy Fiddaman					if	compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout &&
4430*906afcb8SAndy Fiddaman						$executable $tmp.exe &&
4431*906afcb8SAndy Fiddaman						execute $tmp.exe > $tmp.dat
4432*906afcb8SAndy Fiddaman					then	z=`cat $tmp.dat`
4433*906afcb8SAndy Fiddaman						c=0
4434*906afcb8SAndy Fiddaman					else	z=0
4435*906afcb8SAndy Fiddaman						c=1
4436*906afcb8SAndy Fiddaman					fi
4437*906afcb8SAndy Fiddaman					report $c "$z" "sizeof($x$v)" "$x$v not a type with known size"
4438*906afcb8SAndy Fiddaman					;;
4439*906afcb8SAndy Fiddaman				sym)	case $test in
4440*906afcb8SAndy Fiddaman					"")	x=$v ;;
4441*906afcb8SAndy Fiddaman					*)	x=$test ;;
4442*906afcb8SAndy Fiddaman					esac
4443*906afcb8SAndy Fiddaman					echo "$pre
4444*906afcb8SAndy Fiddaman$tst
4445*906afcb8SAndy Fiddaman$ext
4446*906afcb8SAndy Fiddaman$inc
4447*906afcb8SAndy Fiddaman'=' $x '='" > $tmp.c
4448*906afcb8SAndy Fiddaman					compile $cc -E $tmp.c <&$nullin \
4449*906afcb8SAndy Fiddaman					| sed \
4450*906afcb8SAndy Fiddaman						-e "/'='/!d" \
4451*906afcb8SAndy Fiddaman						-e "s/'='//g" \
4452*906afcb8SAndy Fiddaman						-e 's/[ 	]//g' \
4453*906afcb8SAndy Fiddaman						-e 's/((([^()]*)))->/->/g' \
4454*906afcb8SAndy Fiddaman						-e 's/(([^()]*))->/->/g' \
4455*906afcb8SAndy Fiddaman						-e 's/([^()]*)->/->/g' \
4456*906afcb8SAndy Fiddaman						-e 's/\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\)\[/\
4457*906afcb8SAndy Fiddamanary \1[/g' \
4458*906afcb8SAndy Fiddaman						-e 's/\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\)(/\
4459*906afcb8SAndy Fiddamanfun \1[/g' \
4460*906afcb8SAndy Fiddaman						-e 's/\*->\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]\)/->\
4461*906afcb8SAndy Fiddamanptr \1/g' \
4462*906afcb8SAndy Fiddaman						-e 's/->\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]\)/->\
4463*906afcb8SAndy Fiddamanreg \1/g' \
4464*906afcb8SAndy Fiddaman						-e "/^$v\$/d" \
4465*906afcb8SAndy Fiddaman						-e 's/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$/\
4466*906afcb8SAndy Fiddamannam &/g' \
4467*906afcb8SAndy Fiddaman					| sed \
4468*906afcb8SAndy Fiddaman						-e '/^... /!d' \
4469*906afcb8SAndy Fiddaman					| LC_ALL=C sort \
4470*906afcb8SAndy Fiddaman						-u \
4471*906afcb8SAndy Fiddaman					| sed \
4472*906afcb8SAndy Fiddaman						-e 's/\(...\) \([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\).*/#ifndef _\1_'$v'\
4473*906afcb8SAndy Fiddaman#define _\1_'$v' \2\
4474*906afcb8SAndy Fiddaman#define _\1_'$v'_str "\2"\
4475*906afcb8SAndy Fiddaman#endif/'
4476*906afcb8SAndy Fiddaman					;;
4477*906afcb8SAndy Fiddaman				typ)	case $p in
4478*906afcb8SAndy Fiddaman					"")	x= ;;
4479*906afcb8SAndy Fiddaman					*)	x="$p " ;;
4480*906afcb8SAndy Fiddaman					esac
4481*906afcb8SAndy Fiddaman					is typ "$x$v"
4482*906afcb8SAndy Fiddaman					{
4483*906afcb8SAndy Fiddaman					case $p:$v in
4484*906afcb8SAndy Fiddaman					long:*|*:*[_0123456789]int[_0123456789]*)
4485*906afcb8SAndy Fiddaman						echo "$pre
4486*906afcb8SAndy Fiddaman$tst
4487*906afcb8SAndy Fiddaman$ext
4488*906afcb8SAndy Fiddaman$inc
4489*906afcb8SAndy Fiddamanstatic $x$v i;
4490*906afcb8SAndy Fiddaman$x$v f() {
4491*906afcb8SAndy Fiddaman$x$v v; i = 1; v = i;"
4492*906afcb8SAndy Fiddaman						echo "i = v * i; i = i / v; v = v + i; i = i - v;"
4493*906afcb8SAndy Fiddaman						case $v in
4494*906afcb8SAndy Fiddaman						float|double) ;;
4495*906afcb8SAndy Fiddaman						*)	echo "v <<= 4; i = v >> 2; i = 10; i = v % i; i |= v; v ^= i; i = 123; v &= i;" ;;
4496*906afcb8SAndy Fiddaman						esac
4497*906afcb8SAndy Fiddaman						echo "return v; }"
4498*906afcb8SAndy Fiddaman						;;
4499*906afcb8SAndy Fiddaman					*)	echo "$pre
4500*906afcb8SAndy Fiddaman$tst
4501*906afcb8SAndy Fiddaman$ext
4502*906afcb8SAndy Fiddaman$inc
4503*906afcb8SAndy Fiddamanstruct xxx { $x$v mem; };
4504*906afcb8SAndy Fiddamanstatic struct xxx v;
4505*906afcb8SAndy Fiddamanstruct xxx* f() { return &v; }"
4506*906afcb8SAndy Fiddaman						;;
4507*906afcb8SAndy Fiddaman					esac
4508*906afcb8SAndy Fiddaman					case $x in
4509*906afcb8SAndy Fiddaman					""|"struct "|"union ")
4510*906afcb8SAndy Fiddaman						echo "int main() { f(); return 0; }" ;;
4511*906afcb8SAndy Fiddaman					*)	echo "int main() { f(); return sizeof($x$v)<=sizeof($v); }" ;;
4512*906afcb8SAndy Fiddaman					esac
4513*906afcb8SAndy Fiddaman					} > $tmp.c
4514*906afcb8SAndy Fiddaman					rm -f $tmp.exe
4515*906afcb8SAndy Fiddaman					compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout &&
4516*906afcb8SAndy Fiddaman					$executable $tmp.exe &&
4517*906afcb8SAndy Fiddaman					execute $tmp.exe
4518*906afcb8SAndy Fiddaman					report $? 1 "$x$v is a type" "$x$v is not a type" "default for type $x$v"
4519*906afcb8SAndy Fiddaman					;;
4520*906afcb8SAndy Fiddaman				val)	case $arg in
4521*906afcb8SAndy Fiddaman					'"'*'"')echo $arg=\'$val\' ;;
4522*906afcb8SAndy Fiddaman					*)	echo $arg=\"$val\" ;;
4523*906afcb8SAndy Fiddaman					esac
4524*906afcb8SAndy Fiddaman					;;
4525*906afcb8SAndy Fiddaman				ver)	;;
4526*906afcb8SAndy Fiddaman				0)	result=FAILURE
4527*906afcb8SAndy Fiddaman					;;
4528*906afcb8SAndy Fiddaman				1)	result=SUCCESS
4529*906afcb8SAndy Fiddaman					;;
4530*906afcb8SAndy Fiddaman				:)	;;
4531*906afcb8SAndy Fiddaman				-)	;;
4532*906afcb8SAndy Fiddaman				*)	echo "$command: $file$line: $o: unknown feature test" >&$stderr
4533*906afcb8SAndy Fiddaman					status=1
4534*906afcb8SAndy Fiddaman					;;
4535*906afcb8SAndy Fiddaman				esac
4536*906afcb8SAndy Fiddaman			done
4537*906afcb8SAndy Fiddaman		done
4538*906afcb8SAndy Fiddaman		case $not in
4539*906afcb8SAndy Fiddaman		1)	case $result in
4540*906afcb8SAndy Fiddaman			FAILURE)	result=SUCCESS ;;
4541*906afcb8SAndy Fiddaman			*)		result=FAILURE ;;
4542*906afcb8SAndy Fiddaman			esac
4543*906afcb8SAndy Fiddaman			;;
4544*906afcb8SAndy Fiddaman		esac
4545*906afcb8SAndy Fiddaman		case $result in
4546*906afcb8SAndy Fiddaman		FAILURE)	user_pf=$fail user_yn=$no ;;
4547*906afcb8SAndy Fiddaman		*)		user_pf=$pass user_yn=$yes ;;
4548*906afcb8SAndy Fiddaman		esac
4549*906afcb8SAndy Fiddaman		case $user_pf in
4550*906afcb8SAndy Fiddaman		?*)	eval "$user_pf" <&$nullin ;;
4551*906afcb8SAndy Fiddaman		esac
4552*906afcb8SAndy Fiddaman		case $user_yn in
4553*906afcb8SAndy Fiddaman		?*)	case $def in
4554*906afcb8SAndy Fiddaman			-)	;;
4555*906afcb8SAndy Fiddaman			*)	case $note in
4556*906afcb8SAndy Fiddaman				?*)	case $user_yn in
4557*906afcb8SAndy Fiddaman					*$nl*)	user_yn="/* $note */$nl$user_yn" ;;
4558*906afcb8SAndy Fiddaman					*)	user_yn="$user_yn	/* $note */" ;;
4559*906afcb8SAndy Fiddaman					esac
4560*906afcb8SAndy Fiddaman					;;
4561*906afcb8SAndy Fiddaman				esac
4562*906afcb8SAndy Fiddaman				;;
4563*906afcb8SAndy Fiddaman			esac
4564*906afcb8SAndy Fiddaman			copy - "$user_yn"
4565*906afcb8SAndy Fiddaman			;;
4566*906afcb8SAndy Fiddaman		esac
4567*906afcb8SAndy Fiddaman		case $ifelse:$result in
4568*906afcb8SAndy Fiddaman		TEST:SUCCESS)	ifelse=KEEP ;;
4569*906afcb8SAndy Fiddaman		TEST:*)		ifelse=SKIP ;;
4570*906afcb8SAndy Fiddaman		esac
4571*906afcb8SAndy Fiddaman		case $group:$result in
4572*906afcb8SAndy Fiddaman		:*|*:SUCCESS)	break ;;
4573*906afcb8SAndy Fiddaman		esac
4574*906afcb8SAndy Fiddaman		set '' $groups '' "$@"
4575*906afcb8SAndy Fiddaman		shift
4576*906afcb8SAndy Fiddaman		case $1 in
4577*906afcb8SAndy Fiddaman		'')	shift; break ;;
4578*906afcb8SAndy Fiddaman		esac
4579*906afcb8SAndy Fiddaman		shift
4580*906afcb8SAndy Fiddaman
4581*906afcb8SAndy Fiddaman		# set up and try the next group
4582*906afcb8SAndy Fiddaman
4583*906afcb8SAndy Fiddaman		hdr=$com_hdr
4584*906afcb8SAndy Fiddaman		lib=$com_lib
4585*906afcb8SAndy Fiddaman		mac=$com_mac
4586*906afcb8SAndy Fiddaman		opt=$com_opt
4587*906afcb8SAndy Fiddaman		pth=$com_pth
4588*906afcb8SAndy Fiddaman		test=$com_test
4589*906afcb8SAndy Fiddaman		cc="$occ $includes"
4590*906afcb8SAndy Fiddaman		group=
4591*906afcb8SAndy Fiddaman		groups=
4592*906afcb8SAndy Fiddaman		while	:
4593*906afcb8SAndy Fiddaman		do	case $1 in
4594*906afcb8SAndy Fiddaman			'')	shift; break ;;
4595*906afcb8SAndy Fiddaman			esac
4596*906afcb8SAndy Fiddaman			case $1 in
4597*906afcb8SAndy Fiddaman			*[\"\'\(\)\{\}\ \	]*)
4598*906afcb8SAndy Fiddaman				case $op in
4599*906afcb8SAndy Fiddaman				pth)	pth="$pth $1"
4600*906afcb8SAndy Fiddaman					;;
4601*906afcb8SAndy Fiddaman				*)	case $test in
4602*906afcb8SAndy Fiddaman					'')	test=$1 ;;
4603*906afcb8SAndy Fiddaman					*)	test="$test $1" ;;
4604*906afcb8SAndy Fiddaman					esac
4605*906afcb8SAndy Fiddaman					;;
4606*906afcb8SAndy Fiddaman				esac
4607*906afcb8SAndy Fiddaman				;;
4608*906afcb8SAndy Fiddaman			-)	group=$group$1
4609*906afcb8SAndy Fiddaman				groups="$groups $1"
4610*906afcb8SAndy Fiddaman				;;
4611*906afcb8SAndy Fiddaman			-l*)	case $group in
4612*906afcb8SAndy Fiddaman				-*)	groups="$groups $1" ;;
4613*906afcb8SAndy Fiddaman				*)	lib="$lib $1" ;;
4614*906afcb8SAndy Fiddaman				esac
4615*906afcb8SAndy Fiddaman				;;
4616*906afcb8SAndy Fiddaman			+l*)	case $shell in
4617*906afcb8SAndy Fiddaman				bsh)	x=`echo X$1 | sed 's/X+/-/'` ;;
4618*906afcb8SAndy Fiddaman				*)	eval 'x=-${1#+}' ;;
4619*906afcb8SAndy Fiddaman				esac
4620*906afcb8SAndy Fiddaman				case $group in
4621*906afcb8SAndy Fiddaman				-*)	groups="$groups $x" ;;
4622*906afcb8SAndy Fiddaman				*)	lib="$lib $x" ;;
4623*906afcb8SAndy Fiddaman				esac
4624*906afcb8SAndy Fiddaman				;;
4625*906afcb8SAndy Fiddaman			-*|+*)	case $group in
4626*906afcb8SAndy Fiddaman				-*)	groups="$groups $1"
4627*906afcb8SAndy Fiddaman					;;
4628*906afcb8SAndy Fiddaman				*)	case $op in
4629*906afcb8SAndy Fiddaman					run)	opt="$opt $1"
4630*906afcb8SAndy Fiddaman						;;
4631*906afcb8SAndy Fiddaman					*)	case $1 in
4632*906afcb8SAndy Fiddaman						-D*)	mac="$mac $1" ;;
4633*906afcb8SAndy Fiddaman						*)	cc="$cc $1" ;;
4634*906afcb8SAndy Fiddaman						esac
4635*906afcb8SAndy Fiddaman						;;
4636*906afcb8SAndy Fiddaman					esac
4637*906afcb8SAndy Fiddaman					;;
4638*906afcb8SAndy Fiddaman				esac
4639*906afcb8SAndy Fiddaman				;;
4640*906afcb8SAndy Fiddaman			*.[aAxX]|*.[dD][lL][lL]|*.[lL][iI][bB])
4641*906afcb8SAndy Fiddaman				case $group in
4642*906afcb8SAndy Fiddaman				-*)	groups="$groups $1" ;;
4643*906afcb8SAndy Fiddaman				*)	lib="$lib $1" ;;
4644*906afcb8SAndy Fiddaman				esac
4645*906afcb8SAndy Fiddaman				;;
4646*906afcb8SAndy Fiddaman			*[.\\/]*)
4647*906afcb8SAndy Fiddaman				case $group in
4648*906afcb8SAndy Fiddaman				-*)	groups="$groups $1"
4649*906afcb8SAndy Fiddaman					;;
4650*906afcb8SAndy Fiddaman				*)	case $op in
4651*906afcb8SAndy Fiddaman					pth)	pth="$pth $1" ;;
4652*906afcb8SAndy Fiddaman					*)	hdr="$hdr $1" ;;
4653*906afcb8SAndy Fiddaman					esac
4654*906afcb8SAndy Fiddaman					;;
4655*906afcb8SAndy Fiddaman				esac
4656*906afcb8SAndy Fiddaman				;;
4657*906afcb8SAndy Fiddaman			*)	case $group in
4658*906afcb8SAndy Fiddaman				-*)	groups="$groups $1"
4659*906afcb8SAndy Fiddaman					;;
4660*906afcb8SAndy Fiddaman				*)	case $op in
4661*906afcb8SAndy Fiddaman					pth)	pth="$pth $1"
4662*906afcb8SAndy Fiddaman						;;
4663*906afcb8SAndy Fiddaman					*)	case $test in
4664*906afcb8SAndy Fiddaman						'')	test=$1 ;;
4665*906afcb8SAndy Fiddaman						*)	test="$test $1" ;;
4666*906afcb8SAndy Fiddaman						esac
4667*906afcb8SAndy Fiddaman						;;
4668*906afcb8SAndy Fiddaman					esac
4669*906afcb8SAndy Fiddaman					;;
4670*906afcb8SAndy Fiddaman				esac
4671*906afcb8SAndy Fiddaman				;;
4672*906afcb8SAndy Fiddaman			esac
4673*906afcb8SAndy Fiddaman			shift
4674*906afcb8SAndy Fiddaman		done
4675*906afcb8SAndy Fiddaman	done
4676*906afcb8SAndy Fiddamandone
4677