xref: /titanic_51/usr/src/lib/libast/common/comp/conf.sh (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
1da2e3ebdSchin########################################################################
2da2e3ebdSchin#                                                                      #
3da2e3ebdSchin#               This software is part of the ast package               #
4*3e14f97fSRoger A. Faulkner#          Copyright (c) 1985-2010 AT&T Intellectual Property          #
5da2e3ebdSchin#                      and is licensed under the                       #
6da2e3ebdSchin#                  Common Public License, Version 1.0                  #
77c2fbfb3SApril Chin#                    by AT&T Intellectual Property                     #
8da2e3ebdSchin#                                                                      #
9da2e3ebdSchin#                A copy of the License is available at                 #
10da2e3ebdSchin#            http://www.opensource.org/licenses/cpl1.0.txt             #
11da2e3ebdSchin#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
12da2e3ebdSchin#                                                                      #
13da2e3ebdSchin#              Information and Software Systems Research               #
14da2e3ebdSchin#                            AT&T Research                             #
15da2e3ebdSchin#                           Florham Park NJ                            #
16da2e3ebdSchin#                                                                      #
17da2e3ebdSchin#                 Glenn Fowler <gsf@research.att.com>                  #
18da2e3ebdSchin#                  David Korn <dgk@research.att.com>                   #
19da2e3ebdSchin#                   Phong Vo <kpv@research.att.com>                    #
20da2e3ebdSchin#                                                                      #
21da2e3ebdSchin########################################################################
22da2e3ebdSchin: generate getconf and limits info
23da2e3ebdSchin#
247c2fbfb3SApril Chin# @(#)conf.sh (AT&T Research) 2008-01-31
25da2e3ebdSchin#
26da2e3ebdSchin# this script generates these files from the table file in the first arg
27da2e3ebdSchin# the remaining args are the C compiler name and flags
28da2e3ebdSchin#
29da2e3ebdSchin#	conflim.h	supplemental limits.h definitions
30da2e3ebdSchin#	conftab.h	readonly string table definitions
31da2e3ebdSchin#	conftab.c	readonly string table data
32da2e3ebdSchin#
33da2e3ebdSchin# you may think it should be simpler
34da2e3ebdSchin# but you shall be confused anyway
35da2e3ebdSchin#
36da2e3ebdSchin
37da2e3ebdSchincase $-:$BASH_VERSION in
38da2e3ebdSchin*x*:[0123456789]*)	: bash set -x is broken :; set +ex ;;
39da2e3ebdSchinesac
40da2e3ebdSchin
41da2e3ebdSchinLC_ALL=C
42da2e3ebdSchinexport LC_ALL
43da2e3ebdSchin
44da2e3ebdSchincommand=conf
45da2e3ebdSchin
46da2e3ebdSchinshell=`eval 'x=123&&integer n=\${#x}\${x#1?}&&((n==330/(10)))&&echo ksh' 2>/dev/null`
47da2e3ebdSchin
48da2e3ebdSchinappend=0
49da2e3ebdSchindebug=
50da2e3ebdSchinextra=0
51da2e3ebdSchinkeep_call='*'
52da2e3ebdSchinkeep_name='*'
53da2e3ebdSchintrace=
54da2e3ebdSchinverbose=0
55da2e3ebdSchinwhile	:
56da2e3ebdSchindo	case $1 in
57da2e3ebdSchin	-a)	append=1 ;;
58da2e3ebdSchin	-c*)	keep_call=${1#-?} ;;
59da2e3ebdSchin	-d*)	debug=$1 ;;
60da2e3ebdSchin	-l)	extra=1 ;;
61da2e3ebdSchin	-n*)	keep_name=${1#-?} ;;
62da2e3ebdSchin	-t)	trace=1 ;;
63da2e3ebdSchin	-v)	verbose=1 ;;
64da2e3ebdSchin	-*)	echo "Usage: $command [-a] [-ccall-pattern] [-dN] [-l] [-nname_pattern] [-t] [-v] conf.tab" >&2; exit 2 ;;
65da2e3ebdSchin	*)	break ;;
66da2e3ebdSchin	esac
67da2e3ebdSchin	shift
68da2e3ebdSchindone
69da2e3ebdSchinhead='#include "FEATURE/standards"
70da2e3ebdSchin#include "FEATURE/common"'
71da2e3ebdSchintail='#include "FEATURE/param"'
72da2e3ebdSchingenerated="/* : : generated by $command from $1 : : */"
73da2e3ebdSchinhdr=
74da2e3ebdSchinifs=${IFS-'
75da2e3ebdSchin	 '}
76da2e3ebdSchinnl='
77da2e3ebdSchin'
78da2e3ebdSchinsp=' '
79da2e3ebdSchinob='{'
80da2e3ebdSchincb='}'
81da2e3ebdSchinsym=[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*
82da2e3ebdSchintmp=conf.tmp
83da2e3ebdSchincase $verbose:$debug$trace in
84da2e3ebdSchin1:?*)	echo "$command: debug=$debug trace=$trace keep_call=$keep_call keep_name=$keep_name" >&2 ;;
85da2e3ebdSchinesac
86da2e3ebdSchincase $trace in
87da2e3ebdSchin1)	PS4='+$LINENO+ '; set -x ;;
88da2e3ebdSchinesac
89da2e3ebdSchin
90da2e3ebdSchincase $# in
91da2e3ebdSchin0)	case $extra in
92da2e3ebdSchin	0)	echo "$command: table argument expected" >&2
93da2e3ebdSchin		exit 1
94da2e3ebdSchin		;;
95da2e3ebdSchin	esac
96da2e3ebdSchin	tab=/dev/null
97da2e3ebdSchin	;;
98da2e3ebdSchin*)	tab=$1
99da2e3ebdSchin	shift
100da2e3ebdSchin	if	test ! -f $tab
101da2e3ebdSchin	then	echo "$command: $tab: cannot read" >&2
102da2e3ebdSchin		exit 1
103da2e3ebdSchin	fi
104da2e3ebdSchin	;;
105da2e3ebdSchinesac
106da2e3ebdSchincase $# in
107da2e3ebdSchin0)	cc=cc ;;
108da2e3ebdSchin*)	cc=$* ;;
109da2e3ebdSchinesac
110da2e3ebdSchin
111da2e3ebdSchinrm -f $tmp.*
112da2e3ebdSchincase $debug in
113da2e3ebdSchin'')	trap "code=\$?; rm -f $tmp.*; exit \$code" 0 1 2 ;;
114da2e3ebdSchinesac
115da2e3ebdSchin
116da2e3ebdSchin# determine the intmax_t printf format
117da2e3ebdSchin
118da2e3ebdSchincat > $tmp.c <<!
119da2e3ebdSchin${head}
120da2e3ebdSchinint
121da2e3ebdSchinmain()
122da2e3ebdSchin{
123da2e3ebdSchin#if _ast_intmax_long
124da2e3ebdSchin	return 1;
125da2e3ebdSchin#else
126da2e3ebdSchin	return 0;
127da2e3ebdSchin#endif
128da2e3ebdSchin}
129da2e3ebdSchin!
130da2e3ebdSchinif	$cc -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe
1317c2fbfb3SApril Chinthen	LL_format='ll'
1327c2fbfb3SApril Chinelse	LL_format='l'
1337c2fbfb3SApril Chinfi
1347c2fbfb3SApril Chin
1357c2fbfb3SApril Chin# determine the intmax_t constant suffix
1367c2fbfb3SApril Chin
1377c2fbfb3SApril Chincat > $tmp.c <<!
1387c2fbfb3SApril Chin${head}
1397c2fbfb3SApril Chinint
1407c2fbfb3SApril Chinmain()
1417c2fbfb3SApril Chin{
1427c2fbfb3SApril Chin#if _ast_intmax_long
1437c2fbfb3SApril Chin	return 1;
1447c2fbfb3SApril Chin#else
1457c2fbfb3SApril Chin	_ast_intmax_t		s = 0x7fffffffffffffffLL;
1467c2fbfb3SApril Chin	unsigned _ast_intmax_t	u = 0xffffffffffffffffLL;
1477c2fbfb3SApril Chin
1487c2fbfb3SApril Chin	return 0;
1497c2fbfb3SApril Chin#endif
1507c2fbfb3SApril Chin}
1517c2fbfb3SApril Chin!
1527c2fbfb3SApril Chinif	$cc -o $tmp.exe $tmp.c >/dev/null 2>&1
1537c2fbfb3SApril Chinthen	if	./$tmp.exe
1547c2fbfb3SApril Chin	then	LL_suffix='LL'
1557c2fbfb3SApril Chin	else	LL_suffix='L'
1567c2fbfb3SApril Chin	fi
1577c2fbfb3SApril Chinelse	LL_suffix=''
158da2e3ebdSchinfi
159da2e3ebdSchin
160da2e3ebdSchin# set up the names and keys
161da2e3ebdSchin
162da2e3ebdSchinkeys=
163da2e3ebdSchinstandards=
164da2e3ebdSchin
165da2e3ebdSchincase $append$extra in
166da2e3ebdSchin00)	case $verbose in
167da2e3ebdSchin	1)	echo "$command: read $tab" >&2 ;;
168da2e3ebdSchin	esac
169da2e3ebdSchin	exec < $tab
170da2e3ebdSchin	while	:
171da2e3ebdSchin	do	IFS=""
172da2e3ebdSchin		read line
173da2e3ebdSchin		eof=$?
174da2e3ebdSchin		IFS=$ifs
175da2e3ebdSchin		case $eof in
176da2e3ebdSchin		0)	;;
177da2e3ebdSchin		*)	break ;;
178da2e3ebdSchin		esac
179da2e3ebdSchin		case $line in
180da2e3ebdSchin		""|\#*)	;;
181da2e3ebdSchin		*)	set x $line
182da2e3ebdSchin			shift; name=$1
183da2e3ebdSchin			shift; standard=$1
184da2e3ebdSchin			shift; call=$1
185da2e3ebdSchin			shift; section=$1
186da2e3ebdSchin			shift; flags=$1
187da2e3ebdSchin			alternates=
188da2e3ebdSchin			define=
189da2e3ebdSchin			values=
190da2e3ebdSchin			script=
191da2e3ebdSchin			headers=
192da2e3ebdSchin			while	:
193da2e3ebdSchin			do	shift
194da2e3ebdSchin				case $# in
195da2e3ebdSchin				0)	break ;;
196da2e3ebdSchin				esac
197da2e3ebdSchin				case $1 in
198da2e3ebdSchin				":")	shift
199da2e3ebdSchin					eval script='$'script_$1
200da2e3ebdSchin					break
201da2e3ebdSchin					;;
202da2e3ebdSchin				*"{")	case $1 in
203da2e3ebdSchin					"sh{")	script="# $name" ;;
204da2e3ebdSchin					*)	script= ;;
205da2e3ebdSchin					esac
206da2e3ebdSchin					shift
207da2e3ebdSchin					args="$*"
208da2e3ebdSchin					IFS=""
209da2e3ebdSchin					while	read line
210da2e3ebdSchin					do	case $line in
211da2e3ebdSchin						"}")	break ;;
212da2e3ebdSchin						esac
213da2e3ebdSchin						script=$script$nl$line
214da2e3ebdSchin					done
215da2e3ebdSchin					IFS=$ifs
216da2e3ebdSchin					break
217da2e3ebdSchin					;;
218da2e3ebdSchin				*.h)	case $shell in
219da2e3ebdSchin					ksh)	f=${1%.h} ;;
220da2e3ebdSchin					*)	f=`echo $1 | sed 's,\.h$,,'` ;;
221da2e3ebdSchin					esac
222da2e3ebdSchin					case " $hdr " in
223da2e3ebdSchin					*" $f "*)
224da2e3ebdSchin						headers=$headers$nl#include$sp'<'$1'>'
225da2e3ebdSchin						;;
226da2e3ebdSchin					*" -$f- "*)
227da2e3ebdSchin						;;
2287c2fbfb3SApril Chin					*)	if	iffe -n - hdr $f | grep _hdr_$f >/dev/null
229da2e3ebdSchin						then	hdr="$hdr $f"
230da2e3ebdSchin							headers=$headers$nl#include$sp'<'$1'>'
231da2e3ebdSchin						else	hdr="$hdr -$f-"
232da2e3ebdSchin						fi
233da2e3ebdSchin						;;
234da2e3ebdSchin					esac
235da2e3ebdSchin					;;
236da2e3ebdSchin				*)	values=$values$sp$1
237da2e3ebdSchin					case $1 in
238da2e3ebdSchin					$sym)	echo "$1" >> $tmp.v ;;
239da2e3ebdSchin					esac
240da2e3ebdSchin					;;
241da2e3ebdSchin				esac
242da2e3ebdSchin			done
243da2e3ebdSchin			case " $standards " in
244da2e3ebdSchin			*" $standard "*)
245da2e3ebdSchin				;;
246da2e3ebdSchin			*)	standards="$standards $standard"
247da2e3ebdSchin				;;
248da2e3ebdSchin			esac
249da2e3ebdSchin			case $name:$flags in
250da2e3ebdSchin			*:*S*)	;;
251da2e3ebdSchin			VERSION)flags="${flags}S" ;;
252da2e3ebdSchin			esac
253da2e3ebdSchin			case $name in
254da2e3ebdSchin			*VERSION*)key=${standard}${section} ;;
255da2e3ebdSchin			*)	  key= ;;
256da2e3ebdSchin			esac
257da2e3ebdSchin			case $key in
258da2e3ebdSchin			''|*_)	key=${key}${name} ;;
259da2e3ebdSchin			*)	key=${key}_${name} ;;
260da2e3ebdSchin			esac
261da2e3ebdSchin			eval sys='$'CONF_call_${key}
262da2e3ebdSchin			case $sys in
263da2e3ebdSchin			?*)	call=$sys ;;
264da2e3ebdSchin			esac
265da2e3ebdSchin			case $call in
266da2e3ebdSchin			SI)	sys=CS ;;
267da2e3ebdSchin			*)	sys=$call ;;
268da2e3ebdSchin			esac
269da2e3ebdSchin			key=${sys}_${key}
270da2e3ebdSchin			keys="$keys$nl$key"
271da2e3ebdSchin			eval CONF_name_${key}='$'name
272da2e3ebdSchin			eval CONF_standard_${key}='$'standard
273da2e3ebdSchin			eval CONF_call_${key}='$'call
274da2e3ebdSchin			eval CONF_section_${key}='$'section
275da2e3ebdSchin			eval CONF_flags_${key}='$'flags
276da2e3ebdSchin			eval CONF_define_${key}='$'define
277da2e3ebdSchin			eval CONF_values_${key}='$'values
278da2e3ebdSchin			eval CONF_script_${key}='$'script
279da2e3ebdSchin			eval CONF_args_${key}='$'args
280da2e3ebdSchin			eval CONF_headers_${key}='$'headers
281da2e3ebdSchin			eval CONF_keys_${name}=\"'$'CONF_keys_${name} '$'key\"
282da2e3ebdSchin			;;
283da2e3ebdSchin		esac
284da2e3ebdSchin	done
285da2e3ebdSchin	;;
286da2e3ebdSchinesac
287da2e3ebdSchincase $debug in
288da2e3ebdSchin-d1)	for key in $keys
289da2e3ebdSchin	do	eval name=\"'$'CONF_name_$key\"
290da2e3ebdSchin		case $name in
291da2e3ebdSchin		?*)	eval standard=\"'$'CONF_standard_$key\"
292da2e3ebdSchin			eval call=\"'$'CONF_call_$key\"
293da2e3ebdSchin			eval section=\"'$'CONF_section_$key\"
294da2e3ebdSchin			eval flags=\"'$'CONF_flags_$key\"
295da2e3ebdSchin			eval define=\"'$'CONF_define_$key\"
296da2e3ebdSchin			eval values=\"'$'CONF_values_$key\"
297da2e3ebdSchin			eval script=\"'$'CONF_script_$key\"
298da2e3ebdSchin			eval args=\"'$'CONF_args_$key\"
299da2e3ebdSchin			eval headers=\"'$'CONF_headers_$key\"
300da2e3ebdSchin			printf "%29s %35s %8s %2s %1d %5s %s$nl" "$name" "$key" "$standard" "$call" "$section" "$flags" "$define${values:+$sp=$values}${headers:+$sp$headers$nl}${script:+$sp$ob$script$nl$cb}"
301da2e3ebdSchin			;;
302da2e3ebdSchin		esac
303da2e3ebdSchin	done
304da2e3ebdSchin	exit
305da2e3ebdSchin	;;
306da2e3ebdSchinesac
307da2e3ebdSchin
308da2e3ebdSchinsysteminfo='
309da2e3ebdSchin#if !defined(SYS_NMLEN)
310da2e3ebdSchin#define SYS_NMLEN	9
311da2e3ebdSchin#endif
312da2e3ebdSchin#include <sys/systeminfo.h>'
313da2e3ebdSchinecho "$systeminfo" > $tmp.c
314da2e3ebdSchin$cc -E $tmp.c >/dev/null 2>&1 || systeminfo=
315da2e3ebdSchin
316da2e3ebdSchin# check for native getconf(1)
317da2e3ebdSchin
318da2e3ebdSchinCONF_getconf=
319da2e3ebdSchinCONF_getconf_a=
320da2e3ebdSchinfor d in /usr/bin /bin /usr/sbin /sbin
321da2e3ebdSchindo	if	test -x $d/getconf
322da2e3ebdSchin	then	case `$d/getconf --?-version 2>&1` in
323da2e3ebdSchin		*"AT&T"*"Research"*)
324da2e3ebdSchin			: presumably an implementation also configured from conf.tab
325da2e3ebdSchin			;;
326da2e3ebdSchin		*)	CONF_getconf=$d/getconf
327da2e3ebdSchin			if	$CONF_getconf -a >/dev/null 2>&1
328da2e3ebdSchin			then	CONF_getconf_a=-a
329da2e3ebdSchin			fi
330da2e3ebdSchin			;;
331da2e3ebdSchin		esac
332da2e3ebdSchin		break
333da2e3ebdSchin	fi
334da2e3ebdSchindone
335da2e3ebdSchinexport CONF_getconf CONF_getconf_a
336da2e3ebdSchin
337da2e3ebdSchincase $verbose in
338da2e3ebdSchin1)	echo "$command: check ${CONF_getconf:+$CONF_getconf(1),}confstr(2),pathconf(2),sysconf(2),sysinfo(2) configuration names" >&2 ;;
339da2e3ebdSchinesac
340da2e3ebdSchin{
341da2e3ebdSchin	echo "#include <unistd.h>$systeminfo
342da2e3ebdSchinint i = 0;" > $tmp.c
343da2e3ebdSchin	$cc -E $tmp.c
344da2e3ebdSchin} |
345da2e3ebdSchinsed \
346da2e3ebdSchin	-e '/^#[^0123456789]*1[ 	]*".*".*/!d' \
347da2e3ebdSchin	-e 's/^#[^0123456789]*1[ 	]*"\(.*\)".*/\1/' |
348da2e3ebdSchinsort -u > $tmp.f
349da2e3ebdSchin{
350da2e3ebdSchinsed \
351da2e3ebdSchin	-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]/ /g' \
352da2e3ebdSchin	-e 's/[ 	][ 	]*/\n/g' \
353da2e3ebdSchin	`cat $tmp.f` 2>/dev/null |
354da2e3ebdSchin	egrep '^(SI|_(CS|PC|SC|SI))_.'
355da2e3ebdSchin	case $CONF_getconf_a in
356da2e3ebdSchin	?*)	$CONF_getconf $CONF_getconf_a | sed 's,[=:    ].*,,'
357da2e3ebdSchin		;;
358da2e3ebdSchin	*)	case $CONF_getconf in
359da2e3ebdSchin		?*)	for v in `strings $CONF_getconf | grep '^[ABCDEFGHIJKLMNOPQRSTUVWXYZ_][ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$'`
360da2e3ebdSchin			do	if	$CONF_getconf $v >/dev/null
361da2e3ebdSchin				then	echo $v
362da2e3ebdSchin				fi
363da2e3ebdSchin			done
364da2e3ebdSchin			;;
365da2e3ebdSchin		esac
366da2e3ebdSchin		;;
367da2e3ebdSchin	esac 2>/dev/null
368da2e3ebdSchin} |
369da2e3ebdSchinegrep -v '^_[ABCDEFGHIJKLMNOPQRSTUVWXYZ]+_(COUNT|LAST|N|STR)$' |
370da2e3ebdSchinsort -u > $tmp.g
371da2e3ebdSchin{
372da2e3ebdSchin	grep '^_' $tmp.g
373da2e3ebdSchin	grep '^[^_]' $tmp.g
374da2e3ebdSchin} > $tmp.t
375da2e3ebdSchinmv $tmp.t $tmp.g
376da2e3ebdSchincase $debug in
377da2e3ebdSchin-d2)	exit ;;
378da2e3ebdSchinesac
379da2e3ebdSchin
380da2e3ebdSchinHOST=`package | sed -e 's,[0123456789.].*,,' | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
381da2e3ebdSchincase $HOST in
382da2e3ebdSchin'')	HOST=SYSTEM ;;
383da2e3ebdSchinesac
384da2e3ebdSchin
385da2e3ebdSchinexec < $tmp.g
386da2e3ebdSchin
387da2e3ebdSchinwhile	read line
388da2e3ebdSchindo	flags=F
389da2e3ebdSchin	section=
390da2e3ebdSchin	underscore=
391da2e3ebdSchin	define=$line
392da2e3ebdSchin	IFS=_
393da2e3ebdSchin	set $line
394da2e3ebdSchin	IFS=$ifs
395da2e3ebdSchin	case $1 in
396da2e3ebdSchin	'')	case $# in
397da2e3ebdSchin		0)	continue ;;
398da2e3ebdSchin		esac
399da2e3ebdSchin		shift
400da2e3ebdSchin		;;
401da2e3ebdSchin	esac
402da2e3ebdSchin	case $1 in
403da2e3ebdSchin	CS|PC|SC|SI)
404da2e3ebdSchin		call=$1
405da2e3ebdSchin		shift
406da2e3ebdSchin		standard=$1
407da2e3ebdSchin		;;
408da2e3ebdSchin	*)	flags=${flags}R
409da2e3ebdSchin		standard=$1
410da2e3ebdSchin		while	:
411da2e3ebdSchin		do	case $# in
412da2e3ebdSchin			0)	continue 2 ;;
413da2e3ebdSchin			esac
414da2e3ebdSchin			shift
415da2e3ebdSchin			case $1 in
416da2e3ebdSchin			CS|PC|SC|SI)
417da2e3ebdSchin				call=$1
418da2e3ebdSchin				shift
419da2e3ebdSchin				break
420da2e3ebdSchin				;;
421da2e3ebdSchin			O|o|OLD|old)
422da2e3ebdSchin				continue 2
423da2e3ebdSchin				;;
424da2e3ebdSchin			esac
425da2e3ebdSchin			standard=${standard}_$1
426da2e3ebdSchin		done
427da2e3ebdSchin		;;
428da2e3ebdSchin	esac
429da2e3ebdSchin	case $1 in
430da2e3ebdSchin	SET)	continue ;;
431da2e3ebdSchin	esac
432da2e3ebdSchin	case $standard in
433da2e3ebdSchin	_*)	standard=`echo $standard | sed 's,^_*,,'` ;;
434da2e3ebdSchin	esac
435da2e3ebdSchin	case " $standards " in
436da2e3ebdSchin	*" $standard "*)
437da2e3ebdSchin		;;
438da2e3ebdSchin	*)	case $standard in
439da2e3ebdSchin		[0123456789]*)
440da2e3ebdSchin			section=$standard
441da2e3ebdSchin			standard=POSIX
442da2e3ebdSchin			;;
443da2e3ebdSchin		*[0123456789])
444da2e3ebdSchin			eval `echo $standard | sed 's,\(.*\)\([0123456789]*\),standard=\1 section=\2,'`
445da2e3ebdSchin			;;
446da2e3ebdSchin		esac
447da2e3ebdSchin		;;
448da2e3ebdSchin	esac
449da2e3ebdSchin	case $flags in
450da2e3ebdSchin	*R*)	case $call in
451da2e3ebdSchin		SI)	;;
452da2e3ebdSchin		*)	underscore=U ;;
453da2e3ebdSchin		esac
454da2e3ebdSchin		;;
455da2e3ebdSchin	*)	case " $standards " in
456da2e3ebdSchin		" C ")	shift
457da2e3ebdSchin			;;
458da2e3ebdSchin		*" $standard "*)
459da2e3ebdSchin			case $call in
460da2e3ebdSchin			SI)	;;
461da2e3ebdSchin			*)	flags=${flags}P
462da2e3ebdSchin				underscore=U
463da2e3ebdSchin				;;
464da2e3ebdSchin			esac
465da2e3ebdSchin			shift
466da2e3ebdSchin			;;
467da2e3ebdSchin		*)	standard=
468da2e3ebdSchin			;;
469da2e3ebdSchin		esac
470da2e3ebdSchin		;;
471da2e3ebdSchin	esac
472da2e3ebdSchin	case $standard in
473da2e3ebdSchin	'')	standard=$HOST
474da2e3ebdSchin		case $call in
475da2e3ebdSchin		SI)	;;
476da2e3ebdSchin		*)	underscore=U ;;
477da2e3ebdSchin		esac
478da2e3ebdSchin		case $call in
479da2e3ebdSchin		CS|PC|SC)
480da2e3ebdSchin			case $define in
481da2e3ebdSchin			_${call}_*)
482da2e3ebdSchin				standard=POSIX
483da2e3ebdSchin				;;
484da2e3ebdSchin			esac
485da2e3ebdSchin			;;
486da2e3ebdSchin		esac
487da2e3ebdSchin		;;
488da2e3ebdSchin	esac
489da2e3ebdSchin	part=$section
490da2e3ebdSchin	case $section in
491da2e3ebdSchin	'')	section=1
492da2e3ebdSchin		case $standard in
493da2e3ebdSchin		POSIX|XOPEN) part=$section ;;
494da2e3ebdSchin		esac
495da2e3ebdSchin		;;
496da2e3ebdSchin	esac
497da2e3ebdSchin	name=
498da2e3ebdSchin	while	:
499da2e3ebdSchin	do	case $# in
500da2e3ebdSchin		0)	break ;;
501da2e3ebdSchin		esac
502da2e3ebdSchin		case $name in
503da2e3ebdSchin		'')	name=$1 ;;
504da2e3ebdSchin		*)	name=${name}_$1 ;;
505da2e3ebdSchin		esac
506da2e3ebdSchin		shift
507da2e3ebdSchin	done
508da2e3ebdSchin	case $name in
509da2e3ebdSchin	'')	;;
510da2e3ebdSchin	CONFORMANCE|FS_3D|HOSTTYPE|LIBPATH|LIBPREFIX|LIBSUFFIX|PATH_ATTRIBUTES|PATH_RESOLVE|UNIVERSE)
511da2e3ebdSchin		;;
512da2e3ebdSchin	*)	values=
513da2e3ebdSchin		script=
514da2e3ebdSchin		args=
515da2e3ebdSchin		headers=
516da2e3ebdSchin		case $name in
517da2e3ebdSchin		V[123456789]_*|V[123456789][0123456789]_*)	underscore=VW ;;
518da2e3ebdSchin		esac
519da2e3ebdSchin		case $call in
520da2e3ebdSchin		CS|SI)	key=CS ;;
521da2e3ebdSchin		*)	key=$call ;;
522da2e3ebdSchin		esac
523da2e3ebdSchin		case $name in
524da2e3ebdSchin		*VERSION*)key=${key}_${standard}${part} ;;
525da2e3ebdSchin		esac
526da2e3ebdSchin		key=${key}_${name}
527da2e3ebdSchin		eval x='$'CONF_keys_$name
528da2e3ebdSchin		case $x in
529da2e3ebdSchin		'')	eval x='$'CONF_name_$key
530da2e3ebdSchin			case $x in
531da2e3ebdSchin			'')	case $call in
532da2e3ebdSchin				SI)	flags=O$flags ;;
533da2e3ebdSchin				esac
534da2e3ebdSchin				case $underscore in
535da2e3ebdSchin				?*)	flags=${flags}${underscore} ;;
536da2e3ebdSchin				esac
537da2e3ebdSchin				old=QQ
538da2e3ebdSchin				case $name in
539da2e3ebdSchin				*VERSION*)old=${old}_${standard}${part} ;;
540da2e3ebdSchin				esac
541da2e3ebdSchin				old=${old}_${name}
542da2e3ebdSchin				eval x='$'CONF_name_$old
543da2e3ebdSchin				case $x in
544da2e3ebdSchin				?*)	eval CONF_name_$old=
545da2e3ebdSchin					eval flags='$'flags'$'CONF_flags_$old
546da2e3ebdSchin					eval values='$'CONF_values_$old
547da2e3ebdSchin					eval script='$'CONF_script_$old
548da2e3ebdSchin					eval args='$'CONF_args_$old
549da2e3ebdSchin					eval headers='$'CONF_headers_$old
550da2e3ebdSchin					;;
551da2e3ebdSchin				esac
552da2e3ebdSchin				keys="$keys$nl$key"
553da2e3ebdSchin				eval CONF_name_${key}='$'name
554da2e3ebdSchin				eval CONF_standard_${key}='$'standard
555da2e3ebdSchin				eval CONF_call_${key}='$'call
556da2e3ebdSchin				eval CONF_section_${key}='$'section
557da2e3ebdSchin				eval CONF_flags_${key}=d'$'flags
558da2e3ebdSchin				eval CONF_define_${key}='$'define
559da2e3ebdSchin				eval CONF_values_${key}='$'values
560da2e3ebdSchin				eval CONF_script_${key}='$'script
561da2e3ebdSchin				eval CONF_args_${key}='$'args
562da2e3ebdSchin				eval CONF_headers_${key}='$'headers
563da2e3ebdSchin				;;
564da2e3ebdSchin			*)	eval x='$'CONF_define_$key
565da2e3ebdSchin				case $x in
566da2e3ebdSchin				?*)	case $call in
567da2e3ebdSchin					CS)	eval x='$'CONF_call_$key
568da2e3ebdSchin						case $x in
569da2e3ebdSchin						SI)	;;
570da2e3ebdSchin						*)	define= ;;
571da2e3ebdSchin						esac
572da2e3ebdSchin						;;
573da2e3ebdSchin					*)	define=
574da2e3ebdSchin						;;
575da2e3ebdSchin					esac
576da2e3ebdSchin					;;
577da2e3ebdSchin				esac
578da2e3ebdSchin				case $define in
579da2e3ebdSchin				?*)	eval CONF_define_${key}='$'define
580da2e3ebdSchin					eval CONF_call_${key}='$'call
581da2e3ebdSchin					eval x='$'CONF_call_${key}
582da2e3ebdSchin					case $x in
583da2e3ebdSchin					QQ)	;;
584da2e3ebdSchin					*)	case $flags in
585da2e3ebdSchin						*R*)	flags=R ;;
586da2e3ebdSchin						*)	flags= ;;
587da2e3ebdSchin						esac
588da2e3ebdSchin						;;
589da2e3ebdSchin					esac
590da2e3ebdSchin					case $call in
591da2e3ebdSchin					SI)	flags=O$flags ;;
592da2e3ebdSchin					esac
593da2e3ebdSchin					eval CONF_flags_${key}=d'$'flags'$'CONF_flags_${key}
594da2e3ebdSchin					;;
595da2e3ebdSchin				esac
596da2e3ebdSchin				old=QQ
597da2e3ebdSchin				case $name in
598da2e3ebdSchin				*VERSION*)old=${old}_${standard}${part} ;;
599da2e3ebdSchin				esac
600da2e3ebdSchin				old=${old}_${name}
601da2e3ebdSchin				eval CONF_name_$old=
602da2e3ebdSchin			esac
603da2e3ebdSchin			;;
604da2e3ebdSchin		*)	for key in $x
605da2e3ebdSchin			do	eval x='$'CONF_call_${key}
606da2e3ebdSchin				case $x in
607da2e3ebdSchin				XX)	eval CONF_call_${key}=QQ
608da2e3ebdSchin					eval CONF_flags_${key}=S'$'CONF_flags_${key}
609da2e3ebdSchin					;;
610da2e3ebdSchin				esac
611da2e3ebdSchin			done
612da2e3ebdSchin		esac
613da2e3ebdSchin		;;
614da2e3ebdSchin	esac
615da2e3ebdSchindone
616da2e3ebdSchin
617da2e3ebdSchin# sort keys by name
618da2e3ebdSchin
619da2e3ebdSchinkeys=`for key in $keys
620da2e3ebdSchindo	eval echo '$'CONF_name_$key '$'key
621da2e3ebdSchindone | sort -u | sed 's,.* ,,'`
622da2e3ebdSchincase $debug in
623da2e3ebdSchin-d3)	for key in $keys
624da2e3ebdSchin	do	eval name=\"'$'CONF_name_$key\"
625da2e3ebdSchin		case $name in
626da2e3ebdSchin		?*)	eval standard=\"'$'CONF_standard_$key\"
627da2e3ebdSchin			eval call=\"'$'CONF_call_$key\"
628da2e3ebdSchin			eval section=\"'$'CONF_section_$key\"
629da2e3ebdSchin			eval flags=\"'$'CONF_flags_$key\"
630da2e3ebdSchin			eval define=\"'$'CONF_define_$key\"
631da2e3ebdSchin			eval values=\"'$'CONF_values_$key\"
632da2e3ebdSchin			eval script=\"'$'CONF_script_$key\"
633da2e3ebdSchin			eval headers=\"'$'CONF_headers_$key\"
634da2e3ebdSchin			printf "%29s %35s %8s %2s %1d %5s %s$nl" "$name" "$key" "$standard" "$call" "$section" "$flags" "$define${values:+$sp=$values}${headers:+$sp$headers$nl}${script:+$sp$ob$script$nl$cb}"
635da2e3ebdSchin			;;
636da2e3ebdSchin		esac
637da2e3ebdSchin	done
638da2e3ebdSchin	exit
639da2e3ebdSchin	;;
640da2e3ebdSchinesac
641da2e3ebdSchin
642da2e3ebdSchin# mark the dups CONF_PREFIXED
643da2e3ebdSchin
644da2e3ebdSchinprev_key=
645da2e3ebdSchinprev_name=
646da2e3ebdSchinfor key in $keys
647da2e3ebdSchindo	eval name=\"'$'CONF_name_$key\"
648da2e3ebdSchin	case $name in
649da2e3ebdSchin	'')	continue
650da2e3ebdSchin		;;
651da2e3ebdSchin	$prev_name)
652da2e3ebdSchin		eval p='$'CONF_flags_${prev_key}
653da2e3ebdSchin		eval c='$'CONF_flags_${key}
654da2e3ebdSchin		case $p:$c in
655da2e3ebdSchin		*L*:*L*);;
656da2e3ebdSchin		*L*:*)	c=L${c} ;;
657da2e3ebdSchin		*:*L*)	p=L${p} ;;
658da2e3ebdSchin		*)	p=P$p c=P$c ;;
659da2e3ebdSchin		esac
660da2e3ebdSchin		eval CONF_flags_${prev_key}=$p
661da2e3ebdSchin		eval CONF_flags_${key}=$c
662da2e3ebdSchin		;;
663da2e3ebdSchin	esac
664da2e3ebdSchin	prev_name=$name
665da2e3ebdSchin	prev_key=$key
666da2e3ebdSchindone
667da2e3ebdSchin
668da2e3ebdSchin# collect all the macros/enums
669da2e3ebdSchin
670da2e3ebdSchinfor key in $keys
671da2e3ebdSchindo	eval name=\"'$'CONF_name_$key\"
672da2e3ebdSchin	case $name in
673da2e3ebdSchin	'')		continue ;;
674da2e3ebdSchin	$keep_name)	;;
675da2e3ebdSchin	*)		continue ;;
676da2e3ebdSchin	esac
677da2e3ebdSchin	eval call=\"'$'CONF_call_$key\"
678da2e3ebdSchin	case $call in
679da2e3ebdSchin	$keep_call)	;;
680da2e3ebdSchin	*)		continue ;;
681da2e3ebdSchin	esac
682da2e3ebdSchin	eval standard=\"'$'CONF_standard_$key\"
683da2e3ebdSchin	eval section=\"'$'CONF_section_$key\"
684da2e3ebdSchin	eval flags=\"'$'CONF_flags_$key\"
685da2e3ebdSchin	eval define=\"'$'CONF_define_$key\"
686da2e3ebdSchin	eval values=\"'$'CONF_values_$key\"
687da2e3ebdSchin	eval script=\"'$'CONF_script_$key\"
688da2e3ebdSchin	eval args=\"'$'CONF_args_$key\"
689da2e3ebdSchin	eval headers=\"'$'CONF_headers_$key\"
690da2e3ebdSchin	conf_name=$name
691da2e3ebdSchin	case $call in
692da2e3ebdSchin	QQ)	call=XX
693da2e3ebdSchin		for c in SC PC CS
694da2e3ebdSchin		do	case $flags in
695da2e3ebdSchin			*S*)	case $section in
696da2e3ebdSchin				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
697da2e3ebdSchin				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
698da2e3ebdSchin				esac
699da2e3ebdSchin				;;
700da2e3ebdSchin			*)	eval x='$'CONF_call_${c}_${name}
701da2e3ebdSchin				;;
702da2e3ebdSchin			esac
703da2e3ebdSchin			case $x in
704da2e3ebdSchin			?*)	call=$x
705da2e3ebdSchin				break
706da2e3ebdSchin				;;
707da2e3ebdSchin			esac
708da2e3ebdSchin		done
709da2e3ebdSchin		case $call in
710da2e3ebdSchin		XX)	for c in SC PC CS
711da2e3ebdSchin			do	echo "_${c}_${name}"
712da2e3ebdSchin				case $flags in
713da2e3ebdSchin				*S*)	case $section in
714da2e3ebdSchin					1)	echo "_${c}_${standard}_${name}" ;;
715da2e3ebdSchin					*)	echo "_${c}_${standard}${section}_${name}" ;;
716da2e3ebdSchin					esac
717da2e3ebdSchin					;;
718da2e3ebdSchin				esac
719da2e3ebdSchin			done
720da2e3ebdSchin			;;
721da2e3ebdSchin		esac
722da2e3ebdSchin		;;
723da2e3ebdSchin	esac
724da2e3ebdSchin	case $call in
725da2e3ebdSchin	CS|PC|SC|SI|XX)
726da2e3ebdSchin		;;
727da2e3ebdSchin	*)	echo "$command: $name: $call: invalid call" >&2
728da2e3ebdSchin		exit 1
729da2e3ebdSchin		;;
730da2e3ebdSchin	esac
731da2e3ebdSchin	case $flags in
732da2e3ebdSchin	*[ABEGHIJQTYZabcefghijklmnopqrstuvwxyz_123456789]*)
733da2e3ebdSchin		echo "$command: $name: $flags: invalid flag(s)" >&2
734da2e3ebdSchin		exit 1
735da2e3ebdSchin		;;
736da2e3ebdSchin	esac
737da2e3ebdSchin	case $section in
738da2e3ebdSchin	[01])	;;
739da2e3ebdSchin	*)	case $flags in
740da2e3ebdSchin		*N*)	;;
741da2e3ebdSchin		*)	name=${section}_${name} ;;
742da2e3ebdSchin		esac
743da2e3ebdSchin		standard=${standard}${section}
744da2e3ebdSchin		;;
745da2e3ebdSchin	esac
746da2e3ebdSchin	case $call in
747da2e3ebdSchin	XX)	;;
748da2e3ebdSchin	*)	case $flags in
749da2e3ebdSchin		*d*)	conf_op=${define} ;;
750da2e3ebdSchin		*O*)	conf_op=${call}_${name} ;;
751da2e3ebdSchin		*R*)	conf_op=_${standard}_${call}_${name} ;;
752da2e3ebdSchin		*S*)	conf_op=_${call}_${standard}_${name} ;;
753da2e3ebdSchin		*)	conf_op=_${call}_${name} ;;
754da2e3ebdSchin		esac
755da2e3ebdSchin		echo "${conf_op}"
756da2e3ebdSchin		;;
757da2e3ebdSchin	esac
758da2e3ebdSchin	case $standard:$flags in
759da2e3ebdSchin	C:*)	;;
760da2e3ebdSchin	*:*L*)	echo "${conf_name}"
761da2e3ebdSchin		echo "_${standard}_${conf_name}"
762da2e3ebdSchin		;;
763da2e3ebdSchin	*:*M*)	case $section in
764da2e3ebdSchin		1)	echo "_${standard}_${conf_name}" ;;
765da2e3ebdSchin		*)	echo "_${standard}${section}_${conf_name}" ;;
766da2e3ebdSchin		esac
767da2e3ebdSchin		;;
768da2e3ebdSchin	esac
769da2e3ebdSchindone > $tmp.q
770da2e3ebdSchinsort -u < $tmp.q > $tmp.t
771da2e3ebdSchinmv $tmp.t $tmp.q
772da2e3ebdSchinsort -u < $tmp.v > $tmp.t
773da2e3ebdSchinmv $tmp.t $tmp.v
774da2e3ebdSchincase $debug in
775da2e3ebdSchin-d4)	exit ;;
776da2e3ebdSchinesac
777da2e3ebdSchin
778da2e3ebdSchin# test all the macros in a few batches (some compilers have an error limit)
779da2e3ebdSchin
780da2e3ebdSchindefined() # list-file
781da2e3ebdSchin{
782da2e3ebdSchin	: > $tmp.p
783da2e3ebdSchin	while	:
784da2e3ebdSchin	do	{
785da2e3ebdSchin			cat <<!
786da2e3ebdSchin${head}
787da2e3ebdSchin#include <sys/types.h>
788da2e3ebdSchin#include <limits.h>
789da2e3ebdSchin#include <unistd.h>$systeminfo$headers
790da2e3ebdSchin${tail}
791da2e3ebdSchin#undef conf
792da2e3ebdSchinunsigned int conf[] = {
793da2e3ebdSchin!
794da2e3ebdSchin			sed 's/$/,/' $1
795da2e3ebdSchin			echo "};"
796da2e3ebdSchin		} > $tmp.c
7977c2fbfb3SApril Chin		[ -f $tmp.1.c ] || cp $tmp.c $tmp.1.c
798da2e3ebdSchin		if	$cc -c $tmp.c > $tmp.e 2>&1
799da2e3ebdSchin		then	break
800da2e3ebdSchin		fi
8017c2fbfb3SApril Chin		[ -f $tmp.1.e ] || cp $tmp.e $tmp.1.e
802da2e3ebdSchin		snl='\
803da2e3ebdSchin'
804da2e3ebdSchin		sed "s/[^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*/${snl}/g" $tmp.e |
805da2e3ebdSchin		grep '^[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz][_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*$' |
806da2e3ebdSchin		sort -u > $tmp.n
807da2e3ebdSchin		cmp -s $tmp.n $tmp.p && break
808da2e3ebdSchin		fgrep -x -v -f $tmp.n $1 > $tmp.y
809da2e3ebdSchin		mv $tmp.y $1
810da2e3ebdSchin		mv $tmp.n $tmp.p
811da2e3ebdSchin	done
812da2e3ebdSchin	{
813da2e3ebdSchin		cat <<!
814da2e3ebdSchin${head}
815da2e3ebdSchin#include <sys/types.h>
816da2e3ebdSchin#include <limits.h>
817da2e3ebdSchin#include <unistd.h>$systeminfo$headers
818da2e3ebdSchin${tail}
819da2e3ebdSchin#undef conf
820da2e3ebdSchin!
821da2e3ebdSchin		sed 's/.*/conf "&" = &/' $1
822da2e3ebdSchin	} > $tmp.c
823da2e3ebdSchin	$cc -E $tmp.c 2>/dev/null |
824da2e3ebdSchin	sed -e '/conf[ 	]*".*"[ 	]*=[ 	]*/!d' -e '/[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][ 	]*(/!d' -e 's/.*"\(.*\)".*/\1/' > $tmp.n
825da2e3ebdSchin	if	test -s $tmp.n
826da2e3ebdSchin	then	fgrep -x -v -f $tmp.n $1 > $tmp.y
827da2e3ebdSchin		mv $tmp.y $1
828da2e3ebdSchin	fi
829da2e3ebdSchin}
830da2e3ebdSchin
831da2e3ebdSchincase $verbose in
832da2e3ebdSchin1)	echo "$command: check macros/enums as static initializers" >&2 ;;
833da2e3ebdSchinesac
834da2e3ebdSchindefined $tmp.q
835da2e3ebdSchindefined $tmp.v
836da2e3ebdSchincase $debug in
837da2e3ebdSchin-d5)	exit ;;
838da2e3ebdSchinesac
839da2e3ebdSchin
840da2e3ebdSchin# mark the constant macros/enums
841da2e3ebdSchin
842da2e3ebdSchinexec < $tmp.q
843da2e3ebdSchinwhile	read line
844da2e3ebdSchindo	eval CONF_const_${line}=1
845da2e3ebdSchindone
846da2e3ebdSchinexec < $tmp.v
847da2e3ebdSchinwhile	read line
848da2e3ebdSchindo	eval CONF_const_${line}=1
849da2e3ebdSchindone
850da2e3ebdSchin
851da2e3ebdSchin# mark the string literal values
852da2e3ebdSchin
853da2e3ebdSchin{
854da2e3ebdSchin	cat <<!
855da2e3ebdSchin${head}
856da2e3ebdSchin#include <sys/types.h>
857da2e3ebdSchin#include <limits.h>
858da2e3ebdSchin#include <unistd.h>$systeminfo$headers
859da2e3ebdSchin${tail}
860da2e3ebdSchin#undef conf
861da2e3ebdSchin!
862da2e3ebdSchin	sed 's/.*/conf "&" = &/' $tmp.q
863da2e3ebdSchin} > $tmp.c
864da2e3ebdSchin$cc -E $tmp.c 2>/dev/null |
865da2e3ebdSchinsed -e '/conf[ 	]*".*"[ 	]*=[ 	]*"/!d' -e 's/.*"\([^"]*\)".*/\1/' > $tmp.e
866da2e3ebdSchinexec < $tmp.e
867da2e3ebdSchinwhile	read line
868da2e3ebdSchindo	eval CONF_string_${line}=1
869da2e3ebdSchindone
870da2e3ebdSchin
871da2e3ebdSchin# walk through the table
872da2e3ebdSchin
873da2e3ebdSchincase $shell in
874da2e3ebdSchinksh)	integer len name_max ;;
875da2e3ebdSchinesac
876da2e3ebdSchinname_max=1
877da2e3ebdSchinexport tmp name standard call cc
878da2e3ebdSchin
8797c2fbfb3SApril Chinexec > $tmp.t
880da2e3ebdSchinfor key in $keys
881da2e3ebdSchindo	eval name=\"'$'CONF_name_$key\"
882da2e3ebdSchin	case $name in
883da2e3ebdSchin	'')		continue ;;
884da2e3ebdSchin	$keep_name)	;;
885da2e3ebdSchin	*)		continue ;;
886da2e3ebdSchin	esac
887da2e3ebdSchin	eval call=\"'$'CONF_call_$key\"
888da2e3ebdSchin	case $call in
889da2e3ebdSchin	$keep_call)	;;
890da2e3ebdSchin	*)		continue ;;
891da2e3ebdSchin	esac
892da2e3ebdSchin	eval standard=\"'$'CONF_standard_$key\"
893da2e3ebdSchin	eval section=\"'$'CONF_section_$key\"
894da2e3ebdSchin	eval flags=\"'$'CONF_flags_$key\"
895da2e3ebdSchin	eval define=\"'$'CONF_define_$key\"
896da2e3ebdSchin	eval values=\"'$'CONF_values_$key\"
897da2e3ebdSchin	eval script=\"'$'CONF_script_$key\"
898da2e3ebdSchin	eval args=\"'$'CONF_args_$key\"
899da2e3ebdSchin	eval headers=\"'$'CONF_headers_$key\"
900da2e3ebdSchin	conf_name=$name
901da2e3ebdSchin	case $call in
902da2e3ebdSchin	QQ)	call=XX
903da2e3ebdSchin		for c in SC PC CS
904da2e3ebdSchin		do	case $flags in
905da2e3ebdSchin			*S*)	case $section in
906da2e3ebdSchin				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
907da2e3ebdSchin				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
908da2e3ebdSchin				esac
909da2e3ebdSchin				;;
910da2e3ebdSchin			*)	eval x='$'CONF_call_${c}_${name}
911da2e3ebdSchin				;;
912da2e3ebdSchin			esac
913da2e3ebdSchin			case $x in
914da2e3ebdSchin			?*)	call=$x
915da2e3ebdSchin				break
916da2e3ebdSchin				;;
917da2e3ebdSchin			esac
918da2e3ebdSchin		done
919da2e3ebdSchin		case $call in
920da2e3ebdSchin		XX)	for c in SC PC CS
921da2e3ebdSchin			do	case $flags in
922da2e3ebdSchin				*S*)	case $section in
923da2e3ebdSchin					1)	eval x='$'CONF_const__${c}_${standard}_${name} ;;
924da2e3ebdSchin					*)	eval x='$'CONF_const__${c}_${standard}${section}_${name} ;;
925da2e3ebdSchin					esac
926da2e3ebdSchin					;;
927da2e3ebdSchin				*)	eval x='$'CONF_const__${c}_${name}
928da2e3ebdSchin					;;
929da2e3ebdSchin				esac
930da2e3ebdSchin				case $x in
931da2e3ebdSchin				1)	call=$c
932da2e3ebdSchin					break
933da2e3ebdSchin					;;
934da2e3ebdSchin				esac
935da2e3ebdSchin			done
936da2e3ebdSchin			;;
937da2e3ebdSchin		esac
938da2e3ebdSchin		case $call in
939da2e3ebdSchin		XX)	case $standard in
940da2e3ebdSchin			C)	standard=POSIX ;;
941da2e3ebdSchin			esac
942da2e3ebdSchin			case $flags in
943da2e3ebdSchin			*L*)	flags=lFU ;;
944da2e3ebdSchin			*)	flags=FU ;;
945da2e3ebdSchin			esac
946da2e3ebdSchin			;;
947da2e3ebdSchin		esac
948da2e3ebdSchin		;;
949da2e3ebdSchin	esac
950da2e3ebdSchin	case " $standards " in
951da2e3ebdSchin	*" $standard "*)
952da2e3ebdSchin		;;
953da2e3ebdSchin	*)	standards="$standards $standard"
954da2e3ebdSchin		;;
955da2e3ebdSchin	esac
956da2e3ebdSchin	conf_standard=CONF_${standard}
957da2e3ebdSchin	case $call in
958da2e3ebdSchin	CS)	conf_call=CONF_confstr
959da2e3ebdSchin		;;
960da2e3ebdSchin	PC)	conf_call=CONF_pathconf
961da2e3ebdSchin		;;
962da2e3ebdSchin	SC)	conf_call=CONF_sysconf
963da2e3ebdSchin		;;
964da2e3ebdSchin	SI)	conf_call=CONF_sysinfo
965da2e3ebdSchin		;;
966da2e3ebdSchin	XX)	conf_call=CONF_nop
967da2e3ebdSchin		;;
968da2e3ebdSchin	esac
969da2e3ebdSchin	conf_op=-1
970da2e3ebdSchin	for s in _${call}_${standard}${section}_${name} _${call}_${standard}_${name} _${call}_${section}_${name} _${call}_${name} ${call}_${name}
971da2e3ebdSchin	do	eval x='$'CONF_const_${s}
972da2e3ebdSchin		case $x in
973da2e3ebdSchin		1)	conf_op=${s}
974da2e3ebdSchin			break
975da2e3ebdSchin			;;
976da2e3ebdSchin		esac
977da2e3ebdSchin	done
978da2e3ebdSchin	conf_section=$section
979da2e3ebdSchin	conf_flags=0
980da2e3ebdSchin	case $flags in
981da2e3ebdSchin	*C*)	conf_flags="${conf_flags}|CONF_DEFER_CALL" ;;
982da2e3ebdSchin	esac
983da2e3ebdSchin	case $flags in
984da2e3ebdSchin	*D*)	conf_flags="${conf_flags}|CONF_DEFER_MM" ;;
985da2e3ebdSchin	esac
986da2e3ebdSchin	case $flags in
987da2e3ebdSchin	*F*)	conf_flags="${conf_flags}|CONF_FEATURE" ;;
988da2e3ebdSchin	esac
989da2e3ebdSchin	case $flags in
990da2e3ebdSchin	*L*)	conf_flags="${conf_flags}|CONF_LIMIT" ;;
991da2e3ebdSchin	esac
992da2e3ebdSchin	case $flags in
993da2e3ebdSchin	*M*)	conf_flags="${conf_flags}|CONF_MINMAX" ;;
994da2e3ebdSchin	esac
995da2e3ebdSchin	case $flags in
996da2e3ebdSchin	*N*)	conf_flags="${conf_flags}|CONF_NOSECTION" ;;
997da2e3ebdSchin	esac
998da2e3ebdSchin	case $flags in
999da2e3ebdSchin	*P*)	conf_flags="${conf_flags}|CONF_PREFIXED" ;;
1000da2e3ebdSchin	esac
1001da2e3ebdSchin	case $flags in
1002da2e3ebdSchin	*S*)	conf_flags="${conf_flags}|CONF_STANDARD" ;;
1003da2e3ebdSchin	esac
1004da2e3ebdSchin	case $flags in
1005da2e3ebdSchin	*U*)	conf_flags="${conf_flags}|CONF_UNDERSCORE" ;;
1006da2e3ebdSchin	esac
1007da2e3ebdSchin	case $flags in
1008da2e3ebdSchin	*V*)	conf_flags="${conf_flags}|CONF_NOUNDERSCORE" ;;
1009da2e3ebdSchin	esac
1010da2e3ebdSchin	case $flags in
1011da2e3ebdSchin	*W*)	conf_flags="${conf_flags}|CONF_PREFIX_ONLY" ;;
1012da2e3ebdSchin	esac
1013da2e3ebdSchin	case $debug in
1014da2e3ebdSchin	?*)	case $standard in
1015da2e3ebdSchin		????)	sep=" " ;;
1016da2e3ebdSchin		???)	sep="  " ;;
1017da2e3ebdSchin		??)	sep="   " ;;
1018da2e3ebdSchin		?)	sep="    " ;;
1019da2e3ebdSchin		*)	sep="" ;;
1020da2e3ebdSchin		esac
1021da2e3ebdSchin		echo "$command: test: $sep$standard $call $name" >&2
1022da2e3ebdSchin		;;
1023da2e3ebdSchin	esac
1024da2e3ebdSchin	case $call in
1025da2e3ebdSchin	CS|SI)	conf_flags="${conf_flags}|CONF_STRING"
1026da2e3ebdSchin		string=1
1027da2e3ebdSchin		;;
1028da2e3ebdSchin	*)	eval string='$'CONF_string_${key}
1029da2e3ebdSchin		;;
1030da2e3ebdSchin	esac
1031da2e3ebdSchin	conf_limit=0
1032da2e3ebdSchin	case $flags in
1033da2e3ebdSchin	*[Ll]*)	d=
1034da2e3ebdSchin		case ${conf_name} in
1035da2e3ebdSchin		LONG_MAX|SSIZE_MAX)
1036da2e3ebdSchin			x=
1037da2e3ebdSchin			;;
1038da2e3ebdSchin		*)	eval x='$'CONF_const_${conf_name}
1039da2e3ebdSchin			;;
1040da2e3ebdSchin		esac
1041da2e3ebdSchin		case $x in
1042da2e3ebdSchin		'')	for s in ${values}
1043da2e3ebdSchin			do	case $s in
1044da2e3ebdSchin				$sym)	eval x='$'CONF_const_${s}
1045da2e3ebdSchin					case $x in
1046da2e3ebdSchin					1)	eval a='$'CONF_const_${standard}_${s}
1047da2e3ebdSchin						case $a in
1048da2e3ebdSchin						$x)	x= ;;
1049da2e3ebdSchin						*)	x=$s ;;
1050da2e3ebdSchin						esac
1051da2e3ebdSchin						break
1052da2e3ebdSchin						;;
1053da2e3ebdSchin					esac
1054da2e3ebdSchin					;;
1055da2e3ebdSchin				[0123456789]*|[-+][0123456789]*)
1056da2e3ebdSchin					d=$s
1057da2e3ebdSchin					break
1058da2e3ebdSchin					;;
1059da2e3ebdSchin				esac
1060da2e3ebdSchin			done
1061da2e3ebdSchin			case ${x:+1}:$flags:$conf_op in
1062da2e3ebdSchin			:*:-1|:*X*:*)
1063da2e3ebdSchin				case $verbose in
1064da2e3ebdSchin				1)	echo "$command: probe for ${conf_name} <limits.h> value" >&2 ;;
1065da2e3ebdSchin				esac
1066da2e3ebdSchin				x=
1067da2e3ebdSchin				case $CONF_getconf in
1068da2e3ebdSchin				?*)	if	$CONF_getconf $conf_name > $tmp.x 2>/dev/null
1069da2e3ebdSchin					then	x=`cat $tmp.x`
1070da2e3ebdSchin						case $x in
1071da2e3ebdSchin						undefined)	x= ;;
1072da2e3ebdSchin						esac
1073da2e3ebdSchin					fi
1074da2e3ebdSchin					;;
1075da2e3ebdSchin				esac
1076da2e3ebdSchin				case ${x:+1} in
1077da2e3ebdSchin				'')	case $script in
1078da2e3ebdSchin					'#'*)	echo "$script" > $tmp.sh
1079da2e3ebdSchin						chmod +x $tmp.sh
1080da2e3ebdSchin						x=`./$tmp.sh 2>/dev/null`
1081da2e3ebdSchin						;;
1082da2e3ebdSchin					'')	case $conf_name in
1083da2e3ebdSchin						SIZE_*|U*|*_MAX)
10847c2fbfb3SApril Chin							f="%${LL_format}u"
1085da2e3ebdSchin							t="unsigned _ast_intmax_t"
1086da2e3ebdSchin							;;
10877c2fbfb3SApril Chin						*)	f="%${LL_format}d"
1088da2e3ebdSchin							t="_ast_intmax_t"
1089da2e3ebdSchin							;;
1090da2e3ebdSchin						esac
1091da2e3ebdSchin						cat > $tmp.c <<!
1092da2e3ebdSchin${head}
1093da2e3ebdSchin#include <stdio.h>
1094da2e3ebdSchin#include <sys/types.h>
1095da2e3ebdSchin#include <limits.h>
1096da2e3ebdSchin#include <unistd.h>$systeminfo$headers
1097da2e3ebdSchin${tail}
1098da2e3ebdSchinint
1099da2e3ebdSchinmain()
1100da2e3ebdSchin{
1101da2e3ebdSchin	printf("$f\n", ($t)$conf_name);
1102da2e3ebdSchin	return 0;
1103da2e3ebdSchin}
1104da2e3ebdSchin!
1105da2e3ebdSchin						;;
1106da2e3ebdSchin					*)	cat > $tmp.c <<!
1107da2e3ebdSchin${head}
1108da2e3ebdSchin#include <sys/types.h>
1109da2e3ebdSchin#include <limits.h>
1110da2e3ebdSchin#include <unistd.h>$systeminfo$headers
1111da2e3ebdSchin${tail}
1112da2e3ebdSchin${script}
1113da2e3ebdSchin!
1114da2e3ebdSchin						;;
1115da2e3ebdSchin					esac
1116da2e3ebdSchin					case $args in
1117da2e3ebdSchin					'')	set "" ;;
1118da2e3ebdSchin					*)	eval set '""' '"'$args'"'; shift ;;
1119da2e3ebdSchin					esac
1120da2e3ebdSchin					for a
1121da2e3ebdSchin					do	case $script in
1122da2e3ebdSchin						'#'*)	./$tmp.sh $a > $tmp.x 2>/dev/null
1123da2e3ebdSchin							x=$?
1124da2e3ebdSchin							;;
1125da2e3ebdSchin						*)	$cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
1126da2e3ebdSchin							x=$?
1127da2e3ebdSchin							;;
1128da2e3ebdSchin						esac
1129da2e3ebdSchin						case $x in
1130da2e3ebdSchin						0)	x=`cat $tmp.x`
1131da2e3ebdSchin							case $x in
1132da2e3ebdSchin							"-")	x=$a ;;
1133da2e3ebdSchin							esac
1134da2e3ebdSchin							break
1135da2e3ebdSchin							;;
1136da2e3ebdSchin						*)	x=
1137da2e3ebdSchin							;;
1138da2e3ebdSchin						esac
1139da2e3ebdSchin					done
1140da2e3ebdSchin					;;
1141da2e3ebdSchin				esac
1142da2e3ebdSchin				case $x in
1143da2e3ebdSchin				'')	x=$d ;;
1144da2e3ebdSchin				esac
1145da2e3ebdSchin				;;
1146da2e3ebdSchin			esac
1147da2e3ebdSchin			case ${x:+1}:$flags:$conf_op in
1148da2e3ebdSchin			1:*:-1|1:*X*:*)
1149da2e3ebdSchin				conf_limit=$x
1150da2e3ebdSchin				case $flags in
1151da2e3ebdSchin				*L*)	;;
1152da2e3ebdSchin				*)	conf_flags="${conf_flags}|CONF_LIMIT" ;;
1153da2e3ebdSchin				esac
1154da2e3ebdSchin				conf_flags="${conf_flags}|CONF_LIMIT_DEF"
1155da2e3ebdSchin				case $string:$x in
1156da2e3ebdSchin				1:*)	cat >> $tmp.l <<!
1157da2e3ebdSchinprintf("#ifndef ${conf_name}\n");
1158da2e3ebdSchinprintf("#define ${conf_name} \"${x}\"\n");
1159da2e3ebdSchinprintf("#endif\n");
1160da2e3ebdSchin!
1161da2e3ebdSchin					;;
1162da2e3ebdSchin				*:U*)	cat >> $tmp.l <<!
1163da2e3ebdSchinprintf("#ifndef ${conf_name}\n");
1164da2e3ebdSchinprintf("#ifndef ${x}\n");
1165da2e3ebdSchinprintf("#define ${x} %lu\n", ${x});
1166da2e3ebdSchinprintf("#endif\n");
1167da2e3ebdSchinprintf("#define ${conf_name} ${x}\n");
1168da2e3ebdSchinprintf("#endif\n");
1169da2e3ebdSchin!
1170da2e3ebdSchin					;;
1171da2e3ebdSchin				*:$sym)	cat >> $tmp.l <<!
1172da2e3ebdSchinprintf("#ifndef ${conf_name}\n");
1173da2e3ebdSchinprintf("#ifndef ${x}\n");
1174da2e3ebdSchinprintf("#define ${x} %ld\n", ${x});
1175da2e3ebdSchinprintf("#endif\n");
1176da2e3ebdSchinprintf("#define ${conf_name} ${x}\n");
1177da2e3ebdSchinprintf("#endif\n");
1178da2e3ebdSchin!
1179da2e3ebdSchin					;;
1180da2e3ebdSchin				*)	cat >> $tmp.l <<!
1181da2e3ebdSchinprintf("#ifndef ${conf_name}\n");
1182da2e3ebdSchinprintf("#define ${conf_name} ${x}\n");
1183da2e3ebdSchinprintf("#endif\n");
1184da2e3ebdSchin!
1185da2e3ebdSchin					;;
1186da2e3ebdSchin				esac
1187da2e3ebdSchin				;;
1188da2e3ebdSchin			esac
1189da2e3ebdSchin			;;
1190da2e3ebdSchin		esac
1191da2e3ebdSchin		;;
1192da2e3ebdSchin	esac
1193da2e3ebdSchin	case $section in
1194da2e3ebdSchin	[01])	;;
1195da2e3ebdSchin	*)	case $flags in
1196da2e3ebdSchin		*N*)	;;
1197da2e3ebdSchin		*)	name=${section}_${name} ;;
1198da2e3ebdSchin		esac
1199da2e3ebdSchin		standard=${standard}${section}
1200da2e3ebdSchin		;;
1201da2e3ebdSchin	esac
1202da2e3ebdSchin	conf_minmax=0
1203da2e3ebdSchin	case $call:$standard:$flags in
1204da2e3ebdSchin	*:C:*M*)for s in _${standard}_${conf_name} ${values}
1205da2e3ebdSchin		do	case $s in
1206da2e3ebdSchin			$sym)	;;
1207da2e3ebdSchin			*)	conf_minmax=$s
1208da2e3ebdSchin				conf_flags="${conf_flags}|CONF_MINMAX_DEF"
1209da2e3ebdSchin				break
1210da2e3ebdSchin				;;
1211da2e3ebdSchin			esac
1212da2e3ebdSchin		done
1213da2e3ebdSchin		;;
1214da2e3ebdSchin	*:C:*)	;;
1215da2e3ebdSchin	[CPSX][CSX]:*:*[FM]*)
1216da2e3ebdSchin		x=
1217da2e3ebdSchin		for s in _${standard}_${conf_name} ${values}
1218da2e3ebdSchin		do	case $s in
1219da2e3ebdSchin			$sym)	eval x='$'CONF_const_${s} ;;
1220da2e3ebdSchin			*)	x=1 ;;
1221da2e3ebdSchin			esac
1222da2e3ebdSchin			case $x in
1223da2e3ebdSchin			1)	conf_minmax=$s
1224da2e3ebdSchin				case $flags in
1225da2e3ebdSchin				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
1226da2e3ebdSchin				esac
1227da2e3ebdSchin				break
1228da2e3ebdSchin				;;
1229da2e3ebdSchin			esac
1230da2e3ebdSchin		done
1231da2e3ebdSchin		case ${x:+1}:${script:+1} in
1232da2e3ebdSchin		:1)	case $verbose in
1233da2e3ebdSchin			1)	echo "$command: probe for _${standard}_${conf_name} minmax value" >&2 ;;
1234da2e3ebdSchin			esac
1235da2e3ebdSchin			case $CONF_getconf in
1236da2e3ebdSchin			?*)	if	$CONF_getconf _${standard}_${conf_name} > $tmp.x 2>/dev/null
1237da2e3ebdSchin				then	x=`cat $tmp.x`
1238da2e3ebdSchin					case $x in
1239da2e3ebdSchin					undefined)	x= ;;
1240da2e3ebdSchin					esac
1241da2e3ebdSchin				fi
1242da2e3ebdSchin				;;
1243da2e3ebdSchin			esac
1244da2e3ebdSchin			case $x in
1245da2e3ebdSchin			'')	case $script in
1246da2e3ebdSchin				'#'*)	echo "$script" > $tmp.sh
1247da2e3ebdSchin					chmod +x $tmp.sh
1248da2e3ebdSchin					x=`./$tmp.sh 2>/dev/null`
1249da2e3ebdSchin					;;
1250da2e3ebdSchin				*)	cat > $tmp.c <<!
1251da2e3ebdSchin${head}
1252da2e3ebdSchin#include <sys/types.h>
1253da2e3ebdSchin#include <limits.h>
1254da2e3ebdSchin#include <unistd.h>$systeminfo$headers
1255da2e3ebdSchin${tail}
1256da2e3ebdSchin${script}
1257da2e3ebdSchin!
1258da2e3ebdSchin					;;
1259da2e3ebdSchin				esac
1260da2e3ebdSchin				case $args in
1261da2e3ebdSchin				'')	set "" ;;
1262da2e3ebdSchin				*)	eval set '""' "$args"; shift ;;
1263da2e3ebdSchin				esac
1264da2e3ebdSchin				for a
1265da2e3ebdSchin				do	case $script in
1266da2e3ebdSchin					'#'*)	./$tmp.sh $a > $tmp.x 2>/dev/null
1267da2e3ebdSchin						x=$?
1268da2e3ebdSchin						;;
1269da2e3ebdSchin					*)	$cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
1270da2e3ebdSchin						x=$?
1271da2e3ebdSchin						;;
1272da2e3ebdSchin					esac
1273da2e3ebdSchin					case $x in
1274da2e3ebdSchin					0)	x=`cat $tmp.x`
1275da2e3ebdSchin						case $x in
1276da2e3ebdSchin						"-")	x=$a ;;
1277da2e3ebdSchin						esac
1278da2e3ebdSchin						break
1279da2e3ebdSchin						;;
1280da2e3ebdSchin					*)	x=
1281da2e3ebdSchin						;;
1282da2e3ebdSchin					esac
1283da2e3ebdSchin				done
1284da2e3ebdSchin				;;
1285da2e3ebdSchin			esac
1286da2e3ebdSchin			case $x in
1287da2e3ebdSchin			?*)	conf_minmax=$x
1288da2e3ebdSchin				case $flags in
1289da2e3ebdSchin				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
1290da2e3ebdSchin				esac
1291da2e3ebdSchin				;;
1292da2e3ebdSchin			esac
1293da2e3ebdSchin			;;
1294da2e3ebdSchin		esac
1295da2e3ebdSchin		;;
1296da2e3ebdSchin	esac
1297da2e3ebdSchin	case $string in
1298da2e3ebdSchin	1)	conf_limit="{ 0, $conf_limit }" conf_minmax="{ 0, $conf_minmax }"
1299da2e3ebdSchin		;;
1300da2e3ebdSchin	*)	case $conf_limit in
1301da2e3ebdSchin		0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
1302da2e3ebdSchin			;;
1303da2e3ebdSchin		*[!0123456789abcdefABCDEF]*)
1304da2e3ebdSchin			conf_limit=0
1305da2e3ebdSchin			;;
1306da2e3ebdSchin		*[!0123456789]*)
1307da2e3ebdSchin			conf_limit=0x$conf_limit
1308da2e3ebdSchin			;;
1309da2e3ebdSchin		esac
1310da2e3ebdSchin		case $conf_minmax in
1311da2e3ebdSchin		0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
1312da2e3ebdSchin			;;
1313da2e3ebdSchin		*[!0123456789abcdefABCDEF]*)
1314da2e3ebdSchin			conf_minmax=0
1315da2e3ebdSchin			;;
1316da2e3ebdSchin		*[!0123456789]*)
1317da2e3ebdSchin			conf_minmax=0x$conf_minmax
1318da2e3ebdSchin			;;
1319da2e3ebdSchin		esac
13207c2fbfb3SApril Chin		case $conf_limit in
13217c2fbfb3SApril Chin		?*[-+]*|*['()']*)
13227c2fbfb3SApril Chin			;;
13237c2fbfb3SApril Chin		*[lLuU])
13247c2fbfb3SApril Chin			case $LL_suffix in
13257c2fbfb3SApril Chin			??)	case $conf_limit in
13267c2fbfb3SApril Chin				*[!lL][lL]|*[!lL][lL][uU])
13277c2fbfb3SApril Chin					conf_limit=${conf_limit}L
13287c2fbfb3SApril Chin					;;
13297c2fbfb3SApril Chin				esac
13307c2fbfb3SApril Chin				;;
13317c2fbfb3SApril Chin			esac
13327c2fbfb3SApril Chin			;;
13337c2fbfb3SApril Chin		-*[2468])
13347c2fbfb3SApril Chin			case $shell in
13357c2fbfb3SApril Chin			ksh)	p=${conf_limit%?}
13367c2fbfb3SApril Chin				s=${conf_limit#$p}
13377c2fbfb3SApril Chin				((s=s-1))
13387c2fbfb3SApril Chin				;;
13397c2fbfb3SApril Chin			*)	eval `echo '' $conf_limit | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
13407c2fbfb3SApril Chin				s=`expr $s - 1`
13417c2fbfb3SApril Chin				;;
13427c2fbfb3SApril Chin			esac
13437c2fbfb3SApril Chin			conf_limit=${p}${s}${LL_suffix}-1${LL_suffix}
13447c2fbfb3SApril Chin			;;
13457c2fbfb3SApril Chin		0[xX]*[abcdefABCDEF])
13467c2fbfb3SApril Chin			conf_limit=${conf_limit}${LL_suffix}
13477c2fbfb3SApril Chin			;;
13487c2fbfb3SApril Chin		-*[0123456789])
13497c2fbfb3SApril Chin			conf_limit=${conf_limit}${LL_suffix}
13507c2fbfb3SApril Chin			;;
13517c2fbfb3SApril Chin		*[0123456789])
13527c2fbfb3SApril Chin			conf_limit=${conf_limit}U${LL_suffix}
13537c2fbfb3SApril Chin			;;
13547c2fbfb3SApril Chin		esac
13557c2fbfb3SApril Chin		case $conf_minmax in
13567c2fbfb3SApril Chin		?*[-+]*|*['()']*)
13577c2fbfb3SApril Chin			;;
13587c2fbfb3SApril Chin		*[lLuU])
13597c2fbfb3SApril Chin			case $LL_suffix in
13607c2fbfb3SApril Chin			??)	case $conf_minmax in
13617c2fbfb3SApril Chin				*[!lL][lL]|*[!lL][lL][uU])
13627c2fbfb3SApril Chin					conf_minmax=${conf_minmax}L
13637c2fbfb3SApril Chin					;;
13647c2fbfb3SApril Chin				esac
13657c2fbfb3SApril Chin				;;
13667c2fbfb3SApril Chin			esac
13677c2fbfb3SApril Chin			;;
13687c2fbfb3SApril Chin		-*[2468])
13697c2fbfb3SApril Chin			case $shell in
13707c2fbfb3SApril Chin			ksh)	p=${conf_minmax%?}
13717c2fbfb3SApril Chin				s=${conf_minmax#$p}
13727c2fbfb3SApril Chin				((s=s-1))
13737c2fbfb3SApril Chin				;;
13747c2fbfb3SApril Chin			*)	eval `echo '' $conf_minmax | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
13757c2fbfb3SApril Chin				s=`expr $s - 1`
13767c2fbfb3SApril Chin				;;
13777c2fbfb3SApril Chin			esac
13787c2fbfb3SApril Chin			conf_minmax=${p}${s}${LL_suffix}-1${LL_suffix}
13797c2fbfb3SApril Chin			;;
13807c2fbfb3SApril Chin		0[xX]*[abcdefABCDEF])
13817c2fbfb3SApril Chin			conf_minmax=${conf_minmax}${LL_suffix}
13827c2fbfb3SApril Chin			;;
13837c2fbfb3SApril Chin		-*[0123456789])
13847c2fbfb3SApril Chin			conf_minmax=${conf_minmax}${LL_suffix}
13857c2fbfb3SApril Chin			;;
13867c2fbfb3SApril Chin		*[0123456789])
13877c2fbfb3SApril Chin			conf_minmax=${conf_minmax}U${LL_suffix}
13887c2fbfb3SApril Chin			;;
13897c2fbfb3SApril Chin		esac
1390da2e3ebdSchin		conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0 }"
1391da2e3ebdSchin		;;
1392da2e3ebdSchin	esac
13937c2fbfb3SApril Chin	case $conf_flags in
13947c2fbfb3SApril Chin	'0|'*)	case $shell in
13957c2fbfb3SApril Chin		ksh)	conf_flags=${conf_flags#0?} ;;
13967c2fbfb3SApril Chin		*)	conf_flags=`echo "$conf_flags" | sed 's/^0.//'` ;;
13977c2fbfb3SApril Chin		esac
13987c2fbfb3SApril Chin		;;
13997c2fbfb3SApril Chin	esac
1400da2e3ebdSchin	echo "{ \"$conf_name\", $conf_limit, $conf_minmax, $conf_flags, $conf_standard, $conf_section, $conf_call, $conf_op },"
1401da2e3ebdSchin	case $shell in
1402da2e3ebdSchin	ksh)	len=${#conf_name}
1403da2e3ebdSchin		if	((len>=name_max))
1404da2e3ebdSchin		then	((name_max=len+1))
1405da2e3ebdSchin		fi
1406da2e3ebdSchin		;;
1407da2e3ebdSchin	*)	len=`echo ${conf_name} | wc -c`
1408da2e3ebdSchin		if	expr \( $len - 1 \) \>= ${name_max} >/dev/null
1409da2e3ebdSchin		then	name_max=$len
1410da2e3ebdSchin		fi
1411da2e3ebdSchin		;;
1412da2e3ebdSchin	esac
14137c2fbfb3SApril Chindone
14147c2fbfb3SApril Chinexec > /dev/null
1415da2e3ebdSchincase $debug in
1416da2e3ebdSchin-d6)	exit ;;
1417da2e3ebdSchinesac
1418da2e3ebdSchin
1419da2e3ebdSchin# conf string table
1420da2e3ebdSchin
1421da2e3ebdSchinbase=conftab
1422da2e3ebdSchincase $verbose in
1423da2e3ebdSchin1)	echo "$command: generate ${base}.h string table header" >&2 ;;
1424da2e3ebdSchinesac
1425da2e3ebdSchincase $shell in
1426da2e3ebdSchinksh)	((name_max=name_max+3)); ((name_max=name_max/4*4)) ;; # bsd /bin/sh !
1427da2e3ebdSchin*)	name_max=`expr \( $name_max + 3 \) / 4 \* 4` ;;
1428da2e3ebdSchinesac
1429da2e3ebdSchin{
1430da2e3ebdSchincat <<!
1431da2e3ebdSchin#ifndef _CONFTAB_H
1432da2e3ebdSchin#define _CONFTAB_H
1433da2e3ebdSchin$systeminfo
1434da2e3ebdSchin
1435da2e3ebdSchin${generated}
1436da2e3ebdSchin
14377c2fbfb3SApril Chin#if !defined(const) && !defined(__STDC__) && !defined(__cplusplus) && !defined(c_plusplus)
14387c2fbfb3SApril Chin#define const
14397c2fbfb3SApril Chin#endif
14407c2fbfb3SApril Chin
1441da2e3ebdSchin#define conf		_ast_conf_data
1442da2e3ebdSchin#define conf_elements	_ast_conf_ndata
1443da2e3ebdSchin
1444da2e3ebdSchin#define prefix		_ast_conf_prefix
1445da2e3ebdSchin#define prefix_elements	_ast_conf_nprefix
1446da2e3ebdSchin
1447da2e3ebdSchin#define CONF_nop	0
1448da2e3ebdSchin#define	CONF_confstr	1
1449da2e3ebdSchin#define CONF_pathconf	2
1450da2e3ebdSchin#define CONF_sysconf	3
1451da2e3ebdSchin#define CONF_sysinfo	4
1452da2e3ebdSchin
1453da2e3ebdSchin!
1454da2e3ebdSchinindex=0
1455da2e3ebdSchinfor standard in $standards
1456da2e3ebdSchindo	echo "#define CONF_${standard}	${index}"
1457da2e3ebdSchin	case $shell in
1458da2e3ebdSchin	ksh)	((index=index+1)) ;;
1459da2e3ebdSchin	*)	index=`expr ${index} + 1` ;;
1460da2e3ebdSchin	esac
1461da2e3ebdSchindone
1462da2e3ebdSchinecho "#define CONF_call	${index}"
1463da2e3ebdSchincase $CONF_getconf in
1464da2e3ebdSchin?*)	echo
1465da2e3ebdSchin	echo "#define _pth_getconf	\"$CONF_getconf\""
1466da2e3ebdSchin	case $CONF_getconf_a in
1467da2e3ebdSchin	?*)	echo "#define _pth_getconf_a	\"$CONF_getconf_a\"" ;;
1468da2e3ebdSchin	esac
1469da2e3ebdSchin	;;
1470da2e3ebdSchinesac
1471da2e3ebdSchincat <<!
1472da2e3ebdSchin
1473da2e3ebdSchin#define CONF_DEFER_CALL		0x0001
1474da2e3ebdSchin#define CONF_DEFER_MM		0x0002
1475da2e3ebdSchin#define CONF_FEATURE		0x0004
1476da2e3ebdSchin#define CONF_LIMIT		0x0008
1477da2e3ebdSchin#define CONF_LIMIT_DEF		0x0010
1478da2e3ebdSchin#define CONF_MINMAX		0x0020
1479da2e3ebdSchin#define CONF_MINMAX_DEF		0x0040
1480da2e3ebdSchin#define CONF_NOSECTION		0x0080
1481da2e3ebdSchin#define CONF_NOUNDERSCORE	0x0100
1482da2e3ebdSchin#define CONF_PREFIX_ONLY	0x0200
1483da2e3ebdSchin#define CONF_PREFIXED		0x0400
1484da2e3ebdSchin#define CONF_STANDARD		0x0800
1485da2e3ebdSchin#define CONF_STRING		0x1000
1486da2e3ebdSchin#define CONF_UNDERSCORE		0x2000
1487da2e3ebdSchin#define CONF_USER		0x4000
1488da2e3ebdSchin
1489da2e3ebdSchinstruct Conf_s; typedef struct Conf_s Conf_t;
1490da2e3ebdSchin
1491da2e3ebdSchintypedef struct Value_s
1492da2e3ebdSchin{
1493da2e3ebdSchin	intmax_t	number;
1494da2e3ebdSchin	const char*	string;
1495da2e3ebdSchin} Value_t;
1496da2e3ebdSchin
1497da2e3ebdSchinstruct Conf_s
1498da2e3ebdSchin{
1499da2e3ebdSchin	const char	name[${name_max}];
1500da2e3ebdSchin	Value_t		limit;
1501da2e3ebdSchin	Value_t		minmax;
15027c2fbfb3SApril Chin	unsigned int	flags;
1503da2e3ebdSchin	short		standard;
1504da2e3ebdSchin	short		section;
1505da2e3ebdSchin	short		call;
1506da2e3ebdSchin	short		op;
1507da2e3ebdSchin};
1508da2e3ebdSchin
1509da2e3ebdSchintypedef struct Prefix_s
1510da2e3ebdSchin{
1511da2e3ebdSchin	const char	name[16];
1512da2e3ebdSchin	short		length;
1513da2e3ebdSchin	short		standard;
1514da2e3ebdSchin	short		call;
1515da2e3ebdSchin} Prefix_t;
1516da2e3ebdSchin
1517da2e3ebdSchinextern const Conf_t	conf[];
1518da2e3ebdSchinextern int		conf_elements;
1519da2e3ebdSchin
1520da2e3ebdSchinextern const Prefix_t	prefix[];
1521da2e3ebdSchinextern int		prefix_elements;
1522da2e3ebdSchin
1523da2e3ebdSchin#endif
1524da2e3ebdSchin!
15257c2fbfb3SApril Chin} > $tmp.2
1526da2e3ebdSchincase $debug in
1527da2e3ebdSchin-d7)	echo $command: $tmp.2 ${base}.h ;;
1528da2e3ebdSchin*)	cmp -s $tmp.2 ${base}.h 2>/dev/null || mv $tmp.2 ${base}.h ;;
1529da2e3ebdSchinesac
1530da2e3ebdSchin
1531da2e3ebdSchincase $verbose in
1532da2e3ebdSchin1)	echo "$command: generate ${base}.c string table" >&2 ;;
1533da2e3ebdSchinesac
1534da2e3ebdSchin{
1535da2e3ebdSchincat <<!
1536da2e3ebdSchin${head}
1537da2e3ebdSchin#include <sys/types.h>
1538da2e3ebdSchin#include <limits.h>
1539da2e3ebdSchin#include <unistd.h>$systeminfo$headers
1540da2e3ebdSchin${tail}
1541da2e3ebdSchin#include "${base}.h"
1542da2e3ebdSchin
1543da2e3ebdSchin${generated}
1544da2e3ebdSchin
1545da2e3ebdSchin/*
1546da2e3ebdSchin * prefix strings -- the first few are indexed by Conf_t.standard
1547da2e3ebdSchin */
1548da2e3ebdSchin
1549da2e3ebdSchinconst Prefix_t prefix[] =
1550da2e3ebdSchin{
1551da2e3ebdSchin!
1552da2e3ebdSchinfor standard in $standards
1553da2e3ebdSchindo	case $shell in
1554da2e3ebdSchin	ksh)	len=${#standard} ;;
1555da2e3ebdSchin	*)	len=`echo ${standard} | wc -c`; len=`expr $len - 1` ;;
1556da2e3ebdSchin	esac
1557da2e3ebdSchin	echo "	\"${standard}\",	${len},	CONF_${standard},	-1,"
1558da2e3ebdSchindone
1559da2e3ebdSchincat <<!
1560da2e3ebdSchin	"XX",		2,	CONF_POSIX,	CONF_nop,
1561da2e3ebdSchin	"CS",		2,	CONF_POSIX,	CONF_confstr,
1562da2e3ebdSchin	"PC",		2,	CONF_POSIX,	CONF_pathconf,
1563da2e3ebdSchin	"SC",		2,	CONF_POSIX,	CONF_sysconf,
1564da2e3ebdSchin	"SI",		2,	CONF_SVID,	CONF_sysinfo,
1565da2e3ebdSchin};
1566da2e3ebdSchin
1567da2e3ebdSchinint	prefix_elements = (int)sizeof(prefix) / (int)sizeof(prefix[0]);
1568da2e3ebdSchin
1569da2e3ebdSchin/*
1570da2e3ebdSchin * conf strings sorted in ascending order
1571da2e3ebdSchin */
1572da2e3ebdSchin
1573da2e3ebdSchinconst Conf_t conf[] =
1574da2e3ebdSchin{
1575da2e3ebdSchin!
1576da2e3ebdSchincat $tmp.t
1577da2e3ebdSchincat <<!
1578da2e3ebdSchin};
1579da2e3ebdSchin
1580da2e3ebdSchinint	conf_elements = (int)sizeof(conf) / (int)sizeof(conf[0]);
1581da2e3ebdSchin!
15827c2fbfb3SApril Chin} > $tmp.4
1583da2e3ebdSchincase $debug in
1584da2e3ebdSchin-d7)	echo $command: $tmp.4 ${base}.c ;;
1585da2e3ebdSchin*)	cmp -s $tmp.4 ${base}.c 2>/dev/null || mv $tmp.4 ${base}.c ;;
1586da2e3ebdSchinesac
1587da2e3ebdSchin
1588da2e3ebdSchin# limits.h generation code
1589da2e3ebdSchin
1590da2e3ebdSchinbase=conflim
1591da2e3ebdSchincase $verbose in
1592da2e3ebdSchin1)	echo "$command: generate ${base}.h supplemental <limits.h> values" >&2 ;;
1593da2e3ebdSchinesac
1594da2e3ebdSchin{
1595da2e3ebdSchincat <<!
1596da2e3ebdSchin${generated}
1597da2e3ebdSchin
1598da2e3ebdSchin/*
1599da2e3ebdSchin * supplemental <limits.h> values
1600da2e3ebdSchin */
1601da2e3ebdSchin
1602da2e3ebdSchin!
1603da2e3ebdSchintest -f $tmp.l && cat $tmp.l
1604da2e3ebdSchin} > $tmp.5
1605da2e3ebdSchincase $debug in
1606da2e3ebdSchin-d7)	echo $command: $tmp.5 ${base}.h ;;
1607da2e3ebdSchin*)	cmp -s $tmp.5 ${base}.h 2>/dev/null || mv $tmp.5 ${base}.h ;;
1608da2e3ebdSchinesac
1609da2e3ebdSchinexit 0
1610