xref: /onnv-gate/usr/src/lib/libast/common/comp/conf.sh (revision 12068:08a39a083754)
14887Schin########################################################################
24887Schin#                                                                      #
34887Schin#               This software is part of the ast package               #
4*12068SRoger.Faulkner@Oracle.COM#          Copyright (c) 1985-2010 AT&T Intellectual Property          #
54887Schin#                      and is licensed under the                       #
64887Schin#                  Common Public License, Version 1.0                  #
78462SApril.Chin@Sun.COM#                    by AT&T Intellectual Property                     #
84887Schin#                                                                      #
94887Schin#                A copy of the License is available at                 #
104887Schin#            http://www.opensource.org/licenses/cpl1.0.txt             #
114887Schin#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
124887Schin#                                                                      #
134887Schin#              Information and Software Systems Research               #
144887Schin#                            AT&T Research                             #
154887Schin#                           Florham Park NJ                            #
164887Schin#                                                                      #
174887Schin#                 Glenn Fowler <gsf@research.att.com>                  #
184887Schin#                  David Korn <dgk@research.att.com>                   #
194887Schin#                   Phong Vo <kpv@research.att.com>                    #
204887Schin#                                                                      #
214887Schin########################################################################
224887Schin: generate getconf and limits info
234887Schin#
248462SApril.Chin@Sun.COM# @(#)conf.sh (AT&T Research) 2008-01-31
254887Schin#
264887Schin# this script generates these files from the table file in the first arg
274887Schin# the remaining args are the C compiler name and flags
284887Schin#
294887Schin#	conflim.h	supplemental limits.h definitions
304887Schin#	conftab.h	readonly string table definitions
314887Schin#	conftab.c	readonly string table data
324887Schin#
334887Schin# you may think it should be simpler
344887Schin# but you shall be confused anyway
354887Schin#
364887Schin
374887Schincase $-:$BASH_VERSION in
384887Schin*x*:[0123456789]*)	: bash set -x is broken :; set +ex ;;
394887Schinesac
404887Schin
414887SchinLC_ALL=C
424887Schinexport LC_ALL
434887Schin
444887Schincommand=conf
454887Schin
464887Schinshell=`eval 'x=123&&integer n=\${#x}\${x#1?}&&((n==330/(10)))&&echo ksh' 2>/dev/null`
474887Schin
484887Schinappend=0
494887Schindebug=
504887Schinextra=0
514887Schinkeep_call='*'
524887Schinkeep_name='*'
534887Schintrace=
544887Schinverbose=0
554887Schinwhile	:
564887Schindo	case $1 in
574887Schin	-a)	append=1 ;;
584887Schin	-c*)	keep_call=${1#-?} ;;
594887Schin	-d*)	debug=$1 ;;
604887Schin	-l)	extra=1 ;;
614887Schin	-n*)	keep_name=${1#-?} ;;
624887Schin	-t)	trace=1 ;;
634887Schin	-v)	verbose=1 ;;
644887Schin	-*)	echo "Usage: $command [-a] [-ccall-pattern] [-dN] [-l] [-nname_pattern] [-t] [-v] conf.tab" >&2; exit 2 ;;
654887Schin	*)	break ;;
664887Schin	esac
674887Schin	shift
684887Schindone
694887Schinhead='#include "FEATURE/standards"
704887Schin#include "FEATURE/common"'
714887Schintail='#include "FEATURE/param"'
724887Schingenerated="/* : : generated by $command from $1 : : */"
734887Schinhdr=
744887Schinifs=${IFS-'
754887Schin	 '}
764887Schinnl='
774887Schin'
784887Schinsp=' '
794887Schinob='{'
804887Schincb='}'
814887Schinsym=[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*
824887Schintmp=conf.tmp
834887Schincase $verbose:$debug$trace in
844887Schin1:?*)	echo "$command: debug=$debug trace=$trace keep_call=$keep_call keep_name=$keep_name" >&2 ;;
854887Schinesac
864887Schincase $trace in
874887Schin1)	PS4='+$LINENO+ '; set -x ;;
884887Schinesac
894887Schin
904887Schincase $# in
914887Schin0)	case $extra in
924887Schin	0)	echo "$command: table argument expected" >&2
934887Schin		exit 1
944887Schin		;;
954887Schin	esac
964887Schin	tab=/dev/null
974887Schin	;;
984887Schin*)	tab=$1
994887Schin	shift
1004887Schin	if	test ! -f $tab
1014887Schin	then	echo "$command: $tab: cannot read" >&2
1024887Schin		exit 1
1034887Schin	fi
1044887Schin	;;
1054887Schinesac
1064887Schincase $# in
1074887Schin0)	cc=cc ;;
1084887Schin*)	cc=$* ;;
1094887Schinesac
1104887Schin
1114887Schinrm -f $tmp.*
1124887Schincase $debug in
1134887Schin'')	trap "code=\$?; rm -f $tmp.*; exit \$code" 0 1 2 ;;
1144887Schinesac
1154887Schin
1164887Schin# determine the intmax_t printf format
1174887Schin
1184887Schincat > $tmp.c <<!
1194887Schin${head}
1204887Schinint
1214887Schinmain()
1224887Schin{
1234887Schin#if _ast_intmax_long
1244887Schin	return 1;
1254887Schin#else
1264887Schin	return 0;
1274887Schin#endif
1284887Schin}
1294887Schin!
1304887Schinif	$cc -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe
1318462SApril.Chin@Sun.COMthen	LL_format='ll'
1328462SApril.Chin@Sun.COMelse	LL_format='l'
1338462SApril.Chin@Sun.COMfi
1348462SApril.Chin@Sun.COM
1358462SApril.Chin@Sun.COM# determine the intmax_t constant suffix
1368462SApril.Chin@Sun.COM
1378462SApril.Chin@Sun.COMcat > $tmp.c <<!
1388462SApril.Chin@Sun.COM${head}
1398462SApril.Chin@Sun.COMint
1408462SApril.Chin@Sun.COMmain()
1418462SApril.Chin@Sun.COM{
1428462SApril.Chin@Sun.COM#if _ast_intmax_long
1438462SApril.Chin@Sun.COM	return 1;
1448462SApril.Chin@Sun.COM#else
1458462SApril.Chin@Sun.COM	_ast_intmax_t		s = 0x7fffffffffffffffLL;
1468462SApril.Chin@Sun.COM	unsigned _ast_intmax_t	u = 0xffffffffffffffffLL;
1478462SApril.Chin@Sun.COM
1488462SApril.Chin@Sun.COM	return 0;
1498462SApril.Chin@Sun.COM#endif
1508462SApril.Chin@Sun.COM}
1518462SApril.Chin@Sun.COM!
1528462SApril.Chin@Sun.COMif	$cc -o $tmp.exe $tmp.c >/dev/null 2>&1
1538462SApril.Chin@Sun.COMthen	if	./$tmp.exe
1548462SApril.Chin@Sun.COM	then	LL_suffix='LL'
1558462SApril.Chin@Sun.COM	else	LL_suffix='L'
1568462SApril.Chin@Sun.COM	fi
1578462SApril.Chin@Sun.COMelse	LL_suffix=''
1584887Schinfi
1594887Schin
1604887Schin# set up the names and keys
1614887Schin
1624887Schinkeys=
1634887Schinstandards=
1644887Schin
1654887Schincase $append$extra in
1664887Schin00)	case $verbose in
1674887Schin	1)	echo "$command: read $tab" >&2 ;;
1684887Schin	esac
1694887Schin	exec < $tab
1704887Schin	while	:
1714887Schin	do	IFS=""
1724887Schin		read line
1734887Schin		eof=$?
1744887Schin		IFS=$ifs
1754887Schin		case $eof in
1764887Schin		0)	;;
1774887Schin		*)	break ;;
1784887Schin		esac
1794887Schin		case $line in
1804887Schin		""|\#*)	;;
1814887Schin		*)	set x $line
1824887Schin			shift; name=$1
1834887Schin			shift; standard=$1
1844887Schin			shift; call=$1
1854887Schin			shift; section=$1
1864887Schin			shift; flags=$1
1874887Schin			alternates=
1884887Schin			define=
1894887Schin			values=
1904887Schin			script=
1914887Schin			headers=
1924887Schin			while	:
1934887Schin			do	shift
1944887Schin				case $# in
1954887Schin				0)	break ;;
1964887Schin				esac
1974887Schin				case $1 in
1984887Schin				":")	shift
1994887Schin					eval script='$'script_$1
2004887Schin					break
2014887Schin					;;
2024887Schin				*"{")	case $1 in
2034887Schin					"sh{")	script="# $name" ;;
2044887Schin					*)	script= ;;
2054887Schin					esac
2064887Schin					shift
2074887Schin					args="$*"
2084887Schin					IFS=""
2094887Schin					while	read line
2104887Schin					do	case $line in
2114887Schin						"}")	break ;;
2124887Schin						esac
2134887Schin						script=$script$nl$line
2144887Schin					done
2154887Schin					IFS=$ifs
2164887Schin					break
2174887Schin					;;
2184887Schin				*.h)	case $shell in
2194887Schin					ksh)	f=${1%.h} ;;
2204887Schin					*)	f=`echo $1 | sed 's,\.h$,,'` ;;
2214887Schin					esac
2224887Schin					case " $hdr " in
2234887Schin					*" $f "*)
2244887Schin						headers=$headers$nl#include$sp'<'$1'>'
2254887Schin						;;
2264887Schin					*" -$f- "*)
2274887Schin						;;
2288462SApril.Chin@Sun.COM					*)	if	iffe -n - hdr $f | grep _hdr_$f >/dev/null
2294887Schin						then	hdr="$hdr $f"
2304887Schin							headers=$headers$nl#include$sp'<'$1'>'
2314887Schin						else	hdr="$hdr -$f-"
2324887Schin						fi
2334887Schin						;;
2344887Schin					esac
2354887Schin					;;
2364887Schin				*)	values=$values$sp$1
2374887Schin					case $1 in
2384887Schin					$sym)	echo "$1" >> $tmp.v ;;
2394887Schin					esac
2404887Schin					;;
2414887Schin				esac
2424887Schin			done
2434887Schin			case " $standards " in
2444887Schin			*" $standard "*)
2454887Schin				;;
2464887Schin			*)	standards="$standards $standard"
2474887Schin				;;
2484887Schin			esac
2494887Schin			case $name:$flags in
2504887Schin			*:*S*)	;;
2514887Schin			VERSION)flags="${flags}S" ;;
2524887Schin			esac
2534887Schin			case $name in
2544887Schin			*VERSION*)key=${standard}${section} ;;
2554887Schin			*)	  key= ;;
2564887Schin			esac
2574887Schin			case $key in
2584887Schin			''|*_)	key=${key}${name} ;;
2594887Schin			*)	key=${key}_${name} ;;
2604887Schin			esac
2614887Schin			eval sys='$'CONF_call_${key}
2624887Schin			case $sys in
2634887Schin			?*)	call=$sys ;;
2644887Schin			esac
2654887Schin			case $call in
2664887Schin			SI)	sys=CS ;;
2674887Schin			*)	sys=$call ;;
2684887Schin			esac
2694887Schin			key=${sys}_${key}
2704887Schin			keys="$keys$nl$key"
2714887Schin			eval CONF_name_${key}='$'name
2724887Schin			eval CONF_standard_${key}='$'standard
2734887Schin			eval CONF_call_${key}='$'call
2744887Schin			eval CONF_section_${key}='$'section
2754887Schin			eval CONF_flags_${key}='$'flags
2764887Schin			eval CONF_define_${key}='$'define
2774887Schin			eval CONF_values_${key}='$'values
2784887Schin			eval CONF_script_${key}='$'script
2794887Schin			eval CONF_args_${key}='$'args
2804887Schin			eval CONF_headers_${key}='$'headers
2814887Schin			eval CONF_keys_${name}=\"'$'CONF_keys_${name} '$'key\"
2824887Schin			;;
2834887Schin		esac
2844887Schin	done
2854887Schin	;;
2864887Schinesac
2874887Schincase $debug in
2884887Schin-d1)	for key in $keys
2894887Schin	do	eval name=\"'$'CONF_name_$key\"
2904887Schin		case $name in
2914887Schin		?*)	eval standard=\"'$'CONF_standard_$key\"
2924887Schin			eval call=\"'$'CONF_call_$key\"
2934887Schin			eval section=\"'$'CONF_section_$key\"
2944887Schin			eval flags=\"'$'CONF_flags_$key\"
2954887Schin			eval define=\"'$'CONF_define_$key\"
2964887Schin			eval values=\"'$'CONF_values_$key\"
2974887Schin			eval script=\"'$'CONF_script_$key\"
2984887Schin			eval args=\"'$'CONF_args_$key\"
2994887Schin			eval headers=\"'$'CONF_headers_$key\"
3004887Schin			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}"
3014887Schin			;;
3024887Schin		esac
3034887Schin	done
3044887Schin	exit
3054887Schin	;;
3064887Schinesac
3074887Schin
3084887Schinsysteminfo='
3094887Schin#if !defined(SYS_NMLEN)
3104887Schin#define SYS_NMLEN	9
3114887Schin#endif
3124887Schin#include <sys/systeminfo.h>'
3134887Schinecho "$systeminfo" > $tmp.c
3144887Schin$cc -E $tmp.c >/dev/null 2>&1 || systeminfo=
3154887Schin
3164887Schin# check for native getconf(1)
3174887Schin
3184887SchinCONF_getconf=
3194887SchinCONF_getconf_a=
3204887Schinfor d in /usr/bin /bin /usr/sbin /sbin
3214887Schindo	if	test -x $d/getconf
3224887Schin	then	case `$d/getconf --?-version 2>&1` in
3234887Schin		*"AT&T"*"Research"*)
3244887Schin			: presumably an implementation also configured from conf.tab
3254887Schin			;;
3264887Schin		*)	CONF_getconf=$d/getconf
3274887Schin			if	$CONF_getconf -a >/dev/null 2>&1
3284887Schin			then	CONF_getconf_a=-a
3294887Schin			fi
3304887Schin			;;
3314887Schin		esac
3324887Schin		break
3334887Schin	fi
3344887Schindone
3354887Schinexport CONF_getconf CONF_getconf_a
3364887Schin
3374887Schincase $verbose in
3384887Schin1)	echo "$command: check ${CONF_getconf:+$CONF_getconf(1),}confstr(2),pathconf(2),sysconf(2),sysinfo(2) configuration names" >&2 ;;
3394887Schinesac
3404887Schin{
3414887Schin	echo "#include <unistd.h>$systeminfo
3424887Schinint i = 0;" > $tmp.c
3434887Schin	$cc -E $tmp.c
3444887Schin} |
3454887Schinsed \
3464887Schin	-e '/^#[^0123456789]*1[ 	]*".*".*/!d' \
3474887Schin	-e 's/^#[^0123456789]*1[ 	]*"\(.*\)".*/\1/' |
3484887Schinsort -u > $tmp.f
3494887Schin{
3504887Schinsed \
3514887Schin	-e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]/ /g' \
3524887Schin	-e 's/[ 	][ 	]*/\n/g' \
3534887Schin	`cat $tmp.f` 2>/dev/null |
3544887Schin	egrep '^(SI|_(CS|PC|SC|SI))_.'
3554887Schin	case $CONF_getconf_a in
3564887Schin	?*)	$CONF_getconf $CONF_getconf_a | sed 's,[=:    ].*,,'
3574887Schin		;;
3584887Schin	*)	case $CONF_getconf in
3594887Schin		?*)	for v in `strings $CONF_getconf | grep '^[ABCDEFGHIJKLMNOPQRSTUVWXYZ_][ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$'`
3604887Schin			do	if	$CONF_getconf $v >/dev/null
3614887Schin				then	echo $v
3624887Schin				fi
3634887Schin			done
3644887Schin			;;
3654887Schin		esac
3664887Schin		;;
3674887Schin	esac 2>/dev/null
3684887Schin} |
3694887Schinegrep -v '^_[ABCDEFGHIJKLMNOPQRSTUVWXYZ]+_(COUNT|LAST|N|STR)$' |
3704887Schinsort -u > $tmp.g
3714887Schin{
3724887Schin	grep '^_' $tmp.g
3734887Schin	grep '^[^_]' $tmp.g
3744887Schin} > $tmp.t
3754887Schinmv $tmp.t $tmp.g
3764887Schincase $debug in
3774887Schin-d2)	exit ;;
3784887Schinesac
3794887Schin
3804887SchinHOST=`package | sed -e 's,[0123456789.].*,,' | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
3814887Schincase $HOST in
3824887Schin'')	HOST=SYSTEM ;;
3834887Schinesac
3844887Schin
3854887Schinexec < $tmp.g
3864887Schin
3874887Schinwhile	read line
3884887Schindo	flags=F
3894887Schin	section=
3904887Schin	underscore=
3914887Schin	define=$line
3924887Schin	IFS=_
3934887Schin	set $line
3944887Schin	IFS=$ifs
3954887Schin	case $1 in
3964887Schin	'')	case $# in
3974887Schin		0)	continue ;;
3984887Schin		esac
3994887Schin		shift
4004887Schin		;;
4014887Schin	esac
4024887Schin	case $1 in
4034887Schin	CS|PC|SC|SI)
4044887Schin		call=$1
4054887Schin		shift
4064887Schin		standard=$1
4074887Schin		;;
4084887Schin	*)	flags=${flags}R
4094887Schin		standard=$1
4104887Schin		while	:
4114887Schin		do	case $# in
4124887Schin			0)	continue 2 ;;
4134887Schin			esac
4144887Schin			shift
4154887Schin			case $1 in
4164887Schin			CS|PC|SC|SI)
4174887Schin				call=$1
4184887Schin				shift
4194887Schin				break
4204887Schin				;;
4214887Schin			O|o|OLD|old)
4224887Schin				continue 2
4234887Schin				;;
4244887Schin			esac
4254887Schin			standard=${standard}_$1
4264887Schin		done
4274887Schin		;;
4284887Schin	esac
4294887Schin	case $1 in
4304887Schin	SET)	continue ;;
4314887Schin	esac
4324887Schin	case $standard in
4334887Schin	_*)	standard=`echo $standard | sed 's,^_*,,'` ;;
4344887Schin	esac
4354887Schin	case " $standards " in
4364887Schin	*" $standard "*)
4374887Schin		;;
4384887Schin	*)	case $standard in
4394887Schin		[0123456789]*)
4404887Schin			section=$standard
4414887Schin			standard=POSIX
4424887Schin			;;
4434887Schin		*[0123456789])
4444887Schin			eval `echo $standard | sed 's,\(.*\)\([0123456789]*\),standard=\1 section=\2,'`
4454887Schin			;;
4464887Schin		esac
4474887Schin		;;
4484887Schin	esac
4494887Schin	case $flags in
4504887Schin	*R*)	case $call in
4514887Schin		SI)	;;
4524887Schin		*)	underscore=U ;;
4534887Schin		esac
4544887Schin		;;
4554887Schin	*)	case " $standards " in
4564887Schin		" C ")	shift
4574887Schin			;;
4584887Schin		*" $standard "*)
4594887Schin			case $call in
4604887Schin			SI)	;;
4614887Schin			*)	flags=${flags}P
4624887Schin				underscore=U
4634887Schin				;;
4644887Schin			esac
4654887Schin			shift
4664887Schin			;;
4674887Schin		*)	standard=
4684887Schin			;;
4694887Schin		esac
4704887Schin		;;
4714887Schin	esac
4724887Schin	case $standard in
4734887Schin	'')	standard=$HOST
4744887Schin		case $call in
4754887Schin		SI)	;;
4764887Schin		*)	underscore=U ;;
4774887Schin		esac
4784887Schin		case $call in
4794887Schin		CS|PC|SC)
4804887Schin			case $define in
4814887Schin			_${call}_*)
4824887Schin				standard=POSIX
4834887Schin				;;
4844887Schin			esac
4854887Schin			;;
4864887Schin		esac
4874887Schin		;;
4884887Schin	esac
4894887Schin	part=$section
4904887Schin	case $section in
4914887Schin	'')	section=1
4924887Schin		case $standard in
4934887Schin		POSIX|XOPEN) part=$section ;;
4944887Schin		esac
4954887Schin		;;
4964887Schin	esac
4974887Schin	name=
4984887Schin	while	:
4994887Schin	do	case $# in
5004887Schin		0)	break ;;
5014887Schin		esac
5024887Schin		case $name in
5034887Schin		'')	name=$1 ;;
5044887Schin		*)	name=${name}_$1 ;;
5054887Schin		esac
5064887Schin		shift
5074887Schin	done
5084887Schin	case $name in
5094887Schin	'')	;;
5104887Schin	CONFORMANCE|FS_3D|HOSTTYPE|LIBPATH|LIBPREFIX|LIBSUFFIX|PATH_ATTRIBUTES|PATH_RESOLVE|UNIVERSE)
5114887Schin		;;
5124887Schin	*)	values=
5134887Schin		script=
5144887Schin		args=
5154887Schin		headers=
5164887Schin		case $name in
5174887Schin		V[123456789]_*|V[123456789][0123456789]_*)	underscore=VW ;;
5184887Schin		esac
5194887Schin		case $call in
5204887Schin		CS|SI)	key=CS ;;
5214887Schin		*)	key=$call ;;
5224887Schin		esac
5234887Schin		case $name in
5244887Schin		*VERSION*)key=${key}_${standard}${part} ;;
5254887Schin		esac
5264887Schin		key=${key}_${name}
5274887Schin		eval x='$'CONF_keys_$name
5284887Schin		case $x in
5294887Schin		'')	eval x='$'CONF_name_$key
5304887Schin			case $x in
5314887Schin			'')	case $call in
5324887Schin				SI)	flags=O$flags ;;
5334887Schin				esac
5344887Schin				case $underscore in
5354887Schin				?*)	flags=${flags}${underscore} ;;
5364887Schin				esac
5374887Schin				old=QQ
5384887Schin				case $name in
5394887Schin				*VERSION*)old=${old}_${standard}${part} ;;
5404887Schin				esac
5414887Schin				old=${old}_${name}
5424887Schin				eval x='$'CONF_name_$old
5434887Schin				case $x in
5444887Schin				?*)	eval CONF_name_$old=
5454887Schin					eval flags='$'flags'$'CONF_flags_$old
5464887Schin					eval values='$'CONF_values_$old
5474887Schin					eval script='$'CONF_script_$old
5484887Schin					eval args='$'CONF_args_$old
5494887Schin					eval headers='$'CONF_headers_$old
5504887Schin					;;
5514887Schin				esac
5524887Schin				keys="$keys$nl$key"
5534887Schin				eval CONF_name_${key}='$'name
5544887Schin				eval CONF_standard_${key}='$'standard
5554887Schin				eval CONF_call_${key}='$'call
5564887Schin				eval CONF_section_${key}='$'section
5574887Schin				eval CONF_flags_${key}=d'$'flags
5584887Schin				eval CONF_define_${key}='$'define
5594887Schin				eval CONF_values_${key}='$'values
5604887Schin				eval CONF_script_${key}='$'script
5614887Schin				eval CONF_args_${key}='$'args
5624887Schin				eval CONF_headers_${key}='$'headers
5634887Schin				;;
5644887Schin			*)	eval x='$'CONF_define_$key
5654887Schin				case $x in
5664887Schin				?*)	case $call in
5674887Schin					CS)	eval x='$'CONF_call_$key
5684887Schin						case $x in
5694887Schin						SI)	;;
5704887Schin						*)	define= ;;
5714887Schin						esac
5724887Schin						;;
5734887Schin					*)	define=
5744887Schin						;;
5754887Schin					esac
5764887Schin					;;
5774887Schin				esac
5784887Schin				case $define in
5794887Schin				?*)	eval CONF_define_${key}='$'define
5804887Schin					eval CONF_call_${key}='$'call
5814887Schin					eval x='$'CONF_call_${key}
5824887Schin					case $x in
5834887Schin					QQ)	;;
5844887Schin					*)	case $flags in
5854887Schin						*R*)	flags=R ;;
5864887Schin						*)	flags= ;;
5874887Schin						esac
5884887Schin						;;
5894887Schin					esac
5904887Schin					case $call in
5914887Schin					SI)	flags=O$flags ;;
5924887Schin					esac
5934887Schin					eval CONF_flags_${key}=d'$'flags'$'CONF_flags_${key}
5944887Schin					;;
5954887Schin				esac
5964887Schin				old=QQ
5974887Schin				case $name in
5984887Schin				*VERSION*)old=${old}_${standard}${part} ;;
5994887Schin				esac
6004887Schin				old=${old}_${name}
6014887Schin				eval CONF_name_$old=
6024887Schin			esac
6034887Schin			;;
6044887Schin		*)	for key in $x
6054887Schin			do	eval x='$'CONF_call_${key}
6064887Schin				case $x in
6074887Schin				XX)	eval CONF_call_${key}=QQ
6084887Schin					eval CONF_flags_${key}=S'$'CONF_flags_${key}
6094887Schin					;;
6104887Schin				esac
6114887Schin			done
6124887Schin		esac
6134887Schin		;;
6144887Schin	esac
6154887Schindone
6164887Schin
6174887Schin# sort keys by name
6184887Schin
6194887Schinkeys=`for key in $keys
6204887Schindo	eval echo '$'CONF_name_$key '$'key
6214887Schindone | sort -u | sed 's,.* ,,'`
6224887Schincase $debug in
6234887Schin-d3)	for key in $keys
6244887Schin	do	eval name=\"'$'CONF_name_$key\"
6254887Schin		case $name in
6264887Schin		?*)	eval standard=\"'$'CONF_standard_$key\"
6274887Schin			eval call=\"'$'CONF_call_$key\"
6284887Schin			eval section=\"'$'CONF_section_$key\"
6294887Schin			eval flags=\"'$'CONF_flags_$key\"
6304887Schin			eval define=\"'$'CONF_define_$key\"
6314887Schin			eval values=\"'$'CONF_values_$key\"
6324887Schin			eval script=\"'$'CONF_script_$key\"
6334887Schin			eval headers=\"'$'CONF_headers_$key\"
6344887Schin			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}"
6354887Schin			;;
6364887Schin		esac
6374887Schin	done
6384887Schin	exit
6394887Schin	;;
6404887Schinesac
6414887Schin
6424887Schin# mark the dups CONF_PREFIXED
6434887Schin
6444887Schinprev_key=
6454887Schinprev_name=
6464887Schinfor key in $keys
6474887Schindo	eval name=\"'$'CONF_name_$key\"
6484887Schin	case $name in
6494887Schin	'')	continue
6504887Schin		;;
6514887Schin	$prev_name)
6524887Schin		eval p='$'CONF_flags_${prev_key}
6534887Schin		eval c='$'CONF_flags_${key}
6544887Schin		case $p:$c in
6554887Schin		*L*:*L*);;
6564887Schin		*L*:*)	c=L${c} ;;
6574887Schin		*:*L*)	p=L${p} ;;
6584887Schin		*)	p=P$p c=P$c ;;
6594887Schin		esac
6604887Schin		eval CONF_flags_${prev_key}=$p
6614887Schin		eval CONF_flags_${key}=$c
6624887Schin		;;
6634887Schin	esac
6644887Schin	prev_name=$name
6654887Schin	prev_key=$key
6664887Schindone
6674887Schin
6684887Schin# collect all the macros/enums
6694887Schin
6704887Schinfor key in $keys
6714887Schindo	eval name=\"'$'CONF_name_$key\"
6724887Schin	case $name in
6734887Schin	'')		continue ;;
6744887Schin	$keep_name)	;;
6754887Schin	*)		continue ;;
6764887Schin	esac
6774887Schin	eval call=\"'$'CONF_call_$key\"
6784887Schin	case $call in
6794887Schin	$keep_call)	;;
6804887Schin	*)		continue ;;
6814887Schin	esac
6824887Schin	eval standard=\"'$'CONF_standard_$key\"
6834887Schin	eval section=\"'$'CONF_section_$key\"
6844887Schin	eval flags=\"'$'CONF_flags_$key\"
6854887Schin	eval define=\"'$'CONF_define_$key\"
6864887Schin	eval values=\"'$'CONF_values_$key\"
6874887Schin	eval script=\"'$'CONF_script_$key\"
6884887Schin	eval args=\"'$'CONF_args_$key\"
6894887Schin	eval headers=\"'$'CONF_headers_$key\"
6904887Schin	conf_name=$name
6914887Schin	case $call in
6924887Schin	QQ)	call=XX
6934887Schin		for c in SC PC CS
6944887Schin		do	case $flags in
6954887Schin			*S*)	case $section in
6964887Schin				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
6974887Schin				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
6984887Schin				esac
6994887Schin				;;
7004887Schin			*)	eval x='$'CONF_call_${c}_${name}
7014887Schin				;;
7024887Schin			esac
7034887Schin			case $x in
7044887Schin			?*)	call=$x
7054887Schin				break
7064887Schin				;;
7074887Schin			esac
7084887Schin		done
7094887Schin		case $call in
7104887Schin		XX)	for c in SC PC CS
7114887Schin			do	echo "_${c}_${name}"
7124887Schin				case $flags in
7134887Schin				*S*)	case $section in
7144887Schin					1)	echo "_${c}_${standard}_${name}" ;;
7154887Schin					*)	echo "_${c}_${standard}${section}_${name}" ;;
7164887Schin					esac
7174887Schin					;;
7184887Schin				esac
7194887Schin			done
7204887Schin			;;
7214887Schin		esac
7224887Schin		;;
7234887Schin	esac
7244887Schin	case $call in
7254887Schin	CS|PC|SC|SI|XX)
7264887Schin		;;
7274887Schin	*)	echo "$command: $name: $call: invalid call" >&2
7284887Schin		exit 1
7294887Schin		;;
7304887Schin	esac
7314887Schin	case $flags in
7324887Schin	*[ABEGHIJQTYZabcefghijklmnopqrstuvwxyz_123456789]*)
7334887Schin		echo "$command: $name: $flags: invalid flag(s)" >&2
7344887Schin		exit 1
7354887Schin		;;
7364887Schin	esac
7374887Schin	case $section in
7384887Schin	[01])	;;
7394887Schin	*)	case $flags in
7404887Schin		*N*)	;;
7414887Schin		*)	name=${section}_${name} ;;
7424887Schin		esac
7434887Schin		standard=${standard}${section}
7444887Schin		;;
7454887Schin	esac
7464887Schin	case $call in
7474887Schin	XX)	;;
7484887Schin	*)	case $flags in
7494887Schin		*d*)	conf_op=${define} ;;
7504887Schin		*O*)	conf_op=${call}_${name} ;;
7514887Schin		*R*)	conf_op=_${standard}_${call}_${name} ;;
7524887Schin		*S*)	conf_op=_${call}_${standard}_${name} ;;
7534887Schin		*)	conf_op=_${call}_${name} ;;
7544887Schin		esac
7554887Schin		echo "${conf_op}"
7564887Schin		;;
7574887Schin	esac
7584887Schin	case $standard:$flags in
7594887Schin	C:*)	;;
7604887Schin	*:*L*)	echo "${conf_name}"
7614887Schin		echo "_${standard}_${conf_name}"
7624887Schin		;;
7634887Schin	*:*M*)	case $section in
7644887Schin		1)	echo "_${standard}_${conf_name}" ;;
7654887Schin		*)	echo "_${standard}${section}_${conf_name}" ;;
7664887Schin		esac
7674887Schin		;;
7684887Schin	esac
7694887Schindone > $tmp.q
7704887Schinsort -u < $tmp.q > $tmp.t
7714887Schinmv $tmp.t $tmp.q
7724887Schinsort -u < $tmp.v > $tmp.t
7734887Schinmv $tmp.t $tmp.v
7744887Schincase $debug in
7754887Schin-d4)	exit ;;
7764887Schinesac
7774887Schin
7784887Schin# test all the macros in a few batches (some compilers have an error limit)
7794887Schin
7804887Schindefined() # list-file
7814887Schin{
7824887Schin	: > $tmp.p
7834887Schin	while	:
7844887Schin	do	{
7854887Schin			cat <<!
7864887Schin${head}
7874887Schin#include <sys/types.h>
7884887Schin#include <limits.h>
7894887Schin#include <unistd.h>$systeminfo$headers
7904887Schin${tail}
7914887Schin#undef conf
7924887Schinunsigned int conf[] = {
7934887Schin!
7944887Schin			sed 's/$/,/' $1
7954887Schin			echo "};"
7964887Schin		} > $tmp.c
7978462SApril.Chin@Sun.COM		[ -f $tmp.1.c ] || cp $tmp.c $tmp.1.c
7984887Schin		if	$cc -c $tmp.c > $tmp.e 2>&1
7994887Schin		then	break
8004887Schin		fi
8018462SApril.Chin@Sun.COM		[ -f $tmp.1.e ] || cp $tmp.e $tmp.1.e
8024887Schin		snl='\
8034887Schin'
8044887Schin		sed "s/[^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*/${snl}/g" $tmp.e |
8054887Schin		grep '^[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz][_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*$' |
8064887Schin		sort -u > $tmp.n
8074887Schin		cmp -s $tmp.n $tmp.p && break
8084887Schin		fgrep -x -v -f $tmp.n $1 > $tmp.y
8094887Schin		mv $tmp.y $1
8104887Schin		mv $tmp.n $tmp.p
8114887Schin	done
8124887Schin	{
8134887Schin		cat <<!
8144887Schin${head}
8154887Schin#include <sys/types.h>
8164887Schin#include <limits.h>
8174887Schin#include <unistd.h>$systeminfo$headers
8184887Schin${tail}
8194887Schin#undef conf
8204887Schin!
8214887Schin		sed 's/.*/conf "&" = &/' $1
8224887Schin	} > $tmp.c
8234887Schin	$cc -E $tmp.c 2>/dev/null |
8244887Schin	sed -e '/conf[ 	]*".*"[ 	]*=[ 	]*/!d' -e '/[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][ 	]*(/!d' -e 's/.*"\(.*\)".*/\1/' > $tmp.n
8254887Schin	if	test -s $tmp.n
8264887Schin	then	fgrep -x -v -f $tmp.n $1 > $tmp.y
8274887Schin		mv $tmp.y $1
8284887Schin	fi
8294887Schin}
8304887Schin
8314887Schincase $verbose in
8324887Schin1)	echo "$command: check macros/enums as static initializers" >&2 ;;
8334887Schinesac
8344887Schindefined $tmp.q
8354887Schindefined $tmp.v
8364887Schincase $debug in
8374887Schin-d5)	exit ;;
8384887Schinesac
8394887Schin
8404887Schin# mark the constant macros/enums
8414887Schin
8424887Schinexec < $tmp.q
8434887Schinwhile	read line
8444887Schindo	eval CONF_const_${line}=1
8454887Schindone
8464887Schinexec < $tmp.v
8474887Schinwhile	read line
8484887Schindo	eval CONF_const_${line}=1
8494887Schindone
8504887Schin
8514887Schin# mark the string literal values
8524887Schin
8534887Schin{
8544887Schin	cat <<!
8554887Schin${head}
8564887Schin#include <sys/types.h>
8574887Schin#include <limits.h>
8584887Schin#include <unistd.h>$systeminfo$headers
8594887Schin${tail}
8604887Schin#undef conf
8614887Schin!
8624887Schin	sed 's/.*/conf "&" = &/' $tmp.q
8634887Schin} > $tmp.c
8644887Schin$cc -E $tmp.c 2>/dev/null |
8654887Schinsed -e '/conf[ 	]*".*"[ 	]*=[ 	]*"/!d' -e 's/.*"\([^"]*\)".*/\1/' > $tmp.e
8664887Schinexec < $tmp.e
8674887Schinwhile	read line
8684887Schindo	eval CONF_string_${line}=1
8694887Schindone
8704887Schin
8714887Schin# walk through the table
8724887Schin
8734887Schincase $shell in
8744887Schinksh)	integer len name_max ;;
8754887Schinesac
8764887Schinname_max=1
8774887Schinexport tmp name standard call cc
8784887Schin
8798462SApril.Chin@Sun.COMexec > $tmp.t
8804887Schinfor key in $keys
8814887Schindo	eval name=\"'$'CONF_name_$key\"
8824887Schin	case $name in
8834887Schin	'')		continue ;;
8844887Schin	$keep_name)	;;
8854887Schin	*)		continue ;;
8864887Schin	esac
8874887Schin	eval call=\"'$'CONF_call_$key\"
8884887Schin	case $call in
8894887Schin	$keep_call)	;;
8904887Schin	*)		continue ;;
8914887Schin	esac
8924887Schin	eval standard=\"'$'CONF_standard_$key\"
8934887Schin	eval section=\"'$'CONF_section_$key\"
8944887Schin	eval flags=\"'$'CONF_flags_$key\"
8954887Schin	eval define=\"'$'CONF_define_$key\"
8964887Schin	eval values=\"'$'CONF_values_$key\"
8974887Schin	eval script=\"'$'CONF_script_$key\"
8984887Schin	eval args=\"'$'CONF_args_$key\"
8994887Schin	eval headers=\"'$'CONF_headers_$key\"
9004887Schin	conf_name=$name
9014887Schin	case $call in
9024887Schin	QQ)	call=XX
9034887Schin		for c in SC PC CS
9044887Schin		do	case $flags in
9054887Schin			*S*)	case $section in
9064887Schin				1)	eval x='$'CONF_call_${c}_${standard}_${name} ;;
9074887Schin				*)	eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
9084887Schin				esac
9094887Schin				;;
9104887Schin			*)	eval x='$'CONF_call_${c}_${name}
9114887Schin				;;
9124887Schin			esac
9134887Schin			case $x in
9144887Schin			?*)	call=$x
9154887Schin				break
9164887Schin				;;
9174887Schin			esac
9184887Schin		done
9194887Schin		case $call in
9204887Schin		XX)	for c in SC PC CS
9214887Schin			do	case $flags in
9224887Schin				*S*)	case $section in
9234887Schin					1)	eval x='$'CONF_const__${c}_${standard}_${name} ;;
9244887Schin					*)	eval x='$'CONF_const__${c}_${standard}${section}_${name} ;;
9254887Schin					esac
9264887Schin					;;
9274887Schin				*)	eval x='$'CONF_const__${c}_${name}
9284887Schin					;;
9294887Schin				esac
9304887Schin				case $x in
9314887Schin				1)	call=$c
9324887Schin					break
9334887Schin					;;
9344887Schin				esac
9354887Schin			done
9364887Schin			;;
9374887Schin		esac
9384887Schin		case $call in
9394887Schin		XX)	case $standard in
9404887Schin			C)	standard=POSIX ;;
9414887Schin			esac
9424887Schin			case $flags in
9434887Schin			*L*)	flags=lFU ;;
9444887Schin			*)	flags=FU ;;
9454887Schin			esac
9464887Schin			;;
9474887Schin		esac
9484887Schin		;;
9494887Schin	esac
9504887Schin	case " $standards " in
9514887Schin	*" $standard "*)
9524887Schin		;;
9534887Schin	*)	standards="$standards $standard"
9544887Schin		;;
9554887Schin	esac
9564887Schin	conf_standard=CONF_${standard}
9574887Schin	case $call in
9584887Schin	CS)	conf_call=CONF_confstr
9594887Schin		;;
9604887Schin	PC)	conf_call=CONF_pathconf
9614887Schin		;;
9624887Schin	SC)	conf_call=CONF_sysconf
9634887Schin		;;
9644887Schin	SI)	conf_call=CONF_sysinfo
9654887Schin		;;
9664887Schin	XX)	conf_call=CONF_nop
9674887Schin		;;
9684887Schin	esac
9694887Schin	conf_op=-1
9704887Schin	for s in _${call}_${standard}${section}_${name} _${call}_${standard}_${name} _${call}_${section}_${name} _${call}_${name} ${call}_${name}
9714887Schin	do	eval x='$'CONF_const_${s}
9724887Schin		case $x in
9734887Schin		1)	conf_op=${s}
9744887Schin			break
9754887Schin			;;
9764887Schin		esac
9774887Schin	done
9784887Schin	conf_section=$section
9794887Schin	conf_flags=0
9804887Schin	case $flags in
9814887Schin	*C*)	conf_flags="${conf_flags}|CONF_DEFER_CALL" ;;
9824887Schin	esac
9834887Schin	case $flags in
9844887Schin	*D*)	conf_flags="${conf_flags}|CONF_DEFER_MM" ;;
9854887Schin	esac
9864887Schin	case $flags in
9874887Schin	*F*)	conf_flags="${conf_flags}|CONF_FEATURE" ;;
9884887Schin	esac
9894887Schin	case $flags in
9904887Schin	*L*)	conf_flags="${conf_flags}|CONF_LIMIT" ;;
9914887Schin	esac
9924887Schin	case $flags in
9934887Schin	*M*)	conf_flags="${conf_flags}|CONF_MINMAX" ;;
9944887Schin	esac
9954887Schin	case $flags in
9964887Schin	*N*)	conf_flags="${conf_flags}|CONF_NOSECTION" ;;
9974887Schin	esac
9984887Schin	case $flags in
9994887Schin	*P*)	conf_flags="${conf_flags}|CONF_PREFIXED" ;;
10004887Schin	esac
10014887Schin	case $flags in
10024887Schin	*S*)	conf_flags="${conf_flags}|CONF_STANDARD" ;;
10034887Schin	esac
10044887Schin	case $flags in
10054887Schin	*U*)	conf_flags="${conf_flags}|CONF_UNDERSCORE" ;;
10064887Schin	esac
10074887Schin	case $flags in
10084887Schin	*V*)	conf_flags="${conf_flags}|CONF_NOUNDERSCORE" ;;
10094887Schin	esac
10104887Schin	case $flags in
10114887Schin	*W*)	conf_flags="${conf_flags}|CONF_PREFIX_ONLY" ;;
10124887Schin	esac
10134887Schin	case $debug in
10144887Schin	?*)	case $standard in
10154887Schin		????)	sep=" " ;;
10164887Schin		???)	sep="  " ;;
10174887Schin		??)	sep="   " ;;
10184887Schin		?)	sep="    " ;;
10194887Schin		*)	sep="" ;;
10204887Schin		esac
10214887Schin		echo "$command: test: $sep$standard $call $name" >&2
10224887Schin		;;
10234887Schin	esac
10244887Schin	case $call in
10254887Schin	CS|SI)	conf_flags="${conf_flags}|CONF_STRING"
10264887Schin		string=1
10274887Schin		;;
10284887Schin	*)	eval string='$'CONF_string_${key}
10294887Schin		;;
10304887Schin	esac
10314887Schin	conf_limit=0
10324887Schin	case $flags in
10334887Schin	*[Ll]*)	d=
10344887Schin		case ${conf_name} in
10354887Schin		LONG_MAX|SSIZE_MAX)
10364887Schin			x=
10374887Schin			;;
10384887Schin		*)	eval x='$'CONF_const_${conf_name}
10394887Schin			;;
10404887Schin		esac
10414887Schin		case $x in
10424887Schin		'')	for s in ${values}
10434887Schin			do	case $s in
10444887Schin				$sym)	eval x='$'CONF_const_${s}
10454887Schin					case $x in
10464887Schin					1)	eval a='$'CONF_const_${standard}_${s}
10474887Schin						case $a in
10484887Schin						$x)	x= ;;
10494887Schin						*)	x=$s ;;
10504887Schin						esac
10514887Schin						break
10524887Schin						;;
10534887Schin					esac
10544887Schin					;;
10554887Schin				[0123456789]*|[-+][0123456789]*)
10564887Schin					d=$s
10574887Schin					break
10584887Schin					;;
10594887Schin				esac
10604887Schin			done
10614887Schin			case ${x:+1}:$flags:$conf_op in
10624887Schin			:*:-1|:*X*:*)
10634887Schin				case $verbose in
10644887Schin				1)	echo "$command: probe for ${conf_name} <limits.h> value" >&2 ;;
10654887Schin				esac
10664887Schin				x=
10674887Schin				case $CONF_getconf in
10684887Schin				?*)	if	$CONF_getconf $conf_name > $tmp.x 2>/dev/null
10694887Schin					then	x=`cat $tmp.x`
10704887Schin						case $x in
10714887Schin						undefined)	x= ;;
10724887Schin						esac
10734887Schin					fi
10744887Schin					;;
10754887Schin				esac
10764887Schin				case ${x:+1} in
10774887Schin				'')	case $script in
10784887Schin					'#'*)	echo "$script" > $tmp.sh
10794887Schin						chmod +x $tmp.sh
10804887Schin						x=`./$tmp.sh 2>/dev/null`
10814887Schin						;;
10824887Schin					'')	case $conf_name in
10834887Schin						SIZE_*|U*|*_MAX)
10848462SApril.Chin@Sun.COM							f="%${LL_format}u"
10854887Schin							t="unsigned _ast_intmax_t"
10864887Schin							;;
10878462SApril.Chin@Sun.COM						*)	f="%${LL_format}d"
10884887Schin							t="_ast_intmax_t"
10894887Schin							;;
10904887Schin						esac
10914887Schin						cat > $tmp.c <<!
10924887Schin${head}
10934887Schin#include <stdio.h>
10944887Schin#include <sys/types.h>
10954887Schin#include <limits.h>
10964887Schin#include <unistd.h>$systeminfo$headers
10974887Schin${tail}
10984887Schinint
10994887Schinmain()
11004887Schin{
11014887Schin	printf("$f\n", ($t)$conf_name);
11024887Schin	return 0;
11034887Schin}
11044887Schin!
11054887Schin						;;
11064887Schin					*)	cat > $tmp.c <<!
11074887Schin${head}
11084887Schin#include <sys/types.h>
11094887Schin#include <limits.h>
11104887Schin#include <unistd.h>$systeminfo$headers
11114887Schin${tail}
11124887Schin${script}
11134887Schin!
11144887Schin						;;
11154887Schin					esac
11164887Schin					case $args in
11174887Schin					'')	set "" ;;
11184887Schin					*)	eval set '""' '"'$args'"'; shift ;;
11194887Schin					esac
11204887Schin					for a
11214887Schin					do	case $script in
11224887Schin						'#'*)	./$tmp.sh $a > $tmp.x 2>/dev/null
11234887Schin							x=$?
11244887Schin							;;
11254887Schin						*)	$cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
11264887Schin							x=$?
11274887Schin							;;
11284887Schin						esac
11294887Schin						case $x in
11304887Schin						0)	x=`cat $tmp.x`
11314887Schin							case $x in
11324887Schin							"-")	x=$a ;;
11334887Schin							esac
11344887Schin							break
11354887Schin							;;
11364887Schin						*)	x=
11374887Schin							;;
11384887Schin						esac
11394887Schin					done
11404887Schin					;;
11414887Schin				esac
11424887Schin				case $x in
11434887Schin				'')	x=$d ;;
11444887Schin				esac
11454887Schin				;;
11464887Schin			esac
11474887Schin			case ${x:+1}:$flags:$conf_op in
11484887Schin			1:*:-1|1:*X*:*)
11494887Schin				conf_limit=$x
11504887Schin				case $flags in
11514887Schin				*L*)	;;
11524887Schin				*)	conf_flags="${conf_flags}|CONF_LIMIT" ;;
11534887Schin				esac
11544887Schin				conf_flags="${conf_flags}|CONF_LIMIT_DEF"
11554887Schin				case $string:$x in
11564887Schin				1:*)	cat >> $tmp.l <<!
11574887Schinprintf("#ifndef ${conf_name}\n");
11584887Schinprintf("#define ${conf_name} \"${x}\"\n");
11594887Schinprintf("#endif\n");
11604887Schin!
11614887Schin					;;
11624887Schin				*:U*)	cat >> $tmp.l <<!
11634887Schinprintf("#ifndef ${conf_name}\n");
11644887Schinprintf("#ifndef ${x}\n");
11654887Schinprintf("#define ${x} %lu\n", ${x});
11664887Schinprintf("#endif\n");
11674887Schinprintf("#define ${conf_name} ${x}\n");
11684887Schinprintf("#endif\n");
11694887Schin!
11704887Schin					;;
11714887Schin				*:$sym)	cat >> $tmp.l <<!
11724887Schinprintf("#ifndef ${conf_name}\n");
11734887Schinprintf("#ifndef ${x}\n");
11744887Schinprintf("#define ${x} %ld\n", ${x});
11754887Schinprintf("#endif\n");
11764887Schinprintf("#define ${conf_name} ${x}\n");
11774887Schinprintf("#endif\n");
11784887Schin!
11794887Schin					;;
11804887Schin				*)	cat >> $tmp.l <<!
11814887Schinprintf("#ifndef ${conf_name}\n");
11824887Schinprintf("#define ${conf_name} ${x}\n");
11834887Schinprintf("#endif\n");
11844887Schin!
11854887Schin					;;
11864887Schin				esac
11874887Schin				;;
11884887Schin			esac
11894887Schin			;;
11904887Schin		esac
11914887Schin		;;
11924887Schin	esac
11934887Schin	case $section in
11944887Schin	[01])	;;
11954887Schin	*)	case $flags in
11964887Schin		*N*)	;;
11974887Schin		*)	name=${section}_${name} ;;
11984887Schin		esac
11994887Schin		standard=${standard}${section}
12004887Schin		;;
12014887Schin	esac
12024887Schin	conf_minmax=0
12034887Schin	case $call:$standard:$flags in
12044887Schin	*:C:*M*)for s in _${standard}_${conf_name} ${values}
12054887Schin		do	case $s in
12064887Schin			$sym)	;;
12074887Schin			*)	conf_minmax=$s
12084887Schin				conf_flags="${conf_flags}|CONF_MINMAX_DEF"
12094887Schin				break
12104887Schin				;;
12114887Schin			esac
12124887Schin		done
12134887Schin		;;
12144887Schin	*:C:*)	;;
12154887Schin	[CPSX][CSX]:*:*[FM]*)
12164887Schin		x=
12174887Schin		for s in _${standard}_${conf_name} ${values}
12184887Schin		do	case $s in
12194887Schin			$sym)	eval x='$'CONF_const_${s} ;;
12204887Schin			*)	x=1 ;;
12214887Schin			esac
12224887Schin			case $x in
12234887Schin			1)	conf_minmax=$s
12244887Schin				case $flags in
12254887Schin				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
12264887Schin				esac
12274887Schin				break
12284887Schin				;;
12294887Schin			esac
12304887Schin		done
12314887Schin		case ${x:+1}:${script:+1} in
12324887Schin		:1)	case $verbose in
12334887Schin			1)	echo "$command: probe for _${standard}_${conf_name} minmax value" >&2 ;;
12344887Schin			esac
12354887Schin			case $CONF_getconf in
12364887Schin			?*)	if	$CONF_getconf _${standard}_${conf_name} > $tmp.x 2>/dev/null
12374887Schin				then	x=`cat $tmp.x`
12384887Schin					case $x in
12394887Schin					undefined)	x= ;;
12404887Schin					esac
12414887Schin				fi
12424887Schin				;;
12434887Schin			esac
12444887Schin			case $x in
12454887Schin			'')	case $script in
12464887Schin				'#'*)	echo "$script" > $tmp.sh
12474887Schin					chmod +x $tmp.sh
12484887Schin					x=`./$tmp.sh 2>/dev/null`
12494887Schin					;;
12504887Schin				*)	cat > $tmp.c <<!
12514887Schin${head}
12524887Schin#include <sys/types.h>
12534887Schin#include <limits.h>
12544887Schin#include <unistd.h>$systeminfo$headers
12554887Schin${tail}
12564887Schin${script}
12574887Schin!
12584887Schin					;;
12594887Schin				esac
12604887Schin				case $args in
12614887Schin				'')	set "" ;;
12624887Schin				*)	eval set '""' "$args"; shift ;;
12634887Schin				esac
12644887Schin				for a
12654887Schin				do	case $script in
12664887Schin					'#'*)	./$tmp.sh $a > $tmp.x 2>/dev/null
12674887Schin						x=$?
12684887Schin						;;
12694887Schin					*)	$cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
12704887Schin						x=$?
12714887Schin						;;
12724887Schin					esac
12734887Schin					case $x in
12744887Schin					0)	x=`cat $tmp.x`
12754887Schin						case $x in
12764887Schin						"-")	x=$a ;;
12774887Schin						esac
12784887Schin						break
12794887Schin						;;
12804887Schin					*)	x=
12814887Schin						;;
12824887Schin					esac
12834887Schin				done
12844887Schin				;;
12854887Schin			esac
12864887Schin			case $x in
12874887Schin			?*)	conf_minmax=$x
12884887Schin				case $flags in
12894887Schin				*M*)	conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
12904887Schin				esac
12914887Schin				;;
12924887Schin			esac
12934887Schin			;;
12944887Schin		esac
12954887Schin		;;
12964887Schin	esac
12974887Schin	case $string in
12984887Schin	1)	conf_limit="{ 0, $conf_limit }" conf_minmax="{ 0, $conf_minmax }"
12994887Schin		;;
13004887Schin	*)	case $conf_limit in
13014887Schin		0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
13024887Schin			;;
13034887Schin		*[!0123456789abcdefABCDEF]*)
13044887Schin			conf_limit=0
13054887Schin			;;
13064887Schin		*[!0123456789]*)
13074887Schin			conf_limit=0x$conf_limit
13084887Schin			;;
13094887Schin		esac
13104887Schin		case $conf_minmax in
13114887Schin		0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
13124887Schin			;;
13134887Schin		*[!0123456789abcdefABCDEF]*)
13144887Schin			conf_minmax=0
13154887Schin			;;
13164887Schin		*[!0123456789]*)
13174887Schin			conf_minmax=0x$conf_minmax
13184887Schin			;;
13194887Schin		esac
13208462SApril.Chin@Sun.COM		case $conf_limit in
13218462SApril.Chin@Sun.COM		?*[-+]*|*['()']*)
13228462SApril.Chin@Sun.COM			;;
13238462SApril.Chin@Sun.COM		*[lLuU])
13248462SApril.Chin@Sun.COM			case $LL_suffix in
13258462SApril.Chin@Sun.COM			??)	case $conf_limit in
13268462SApril.Chin@Sun.COM				*[!lL][lL]|*[!lL][lL][uU])
13278462SApril.Chin@Sun.COM					conf_limit=${conf_limit}L
13288462SApril.Chin@Sun.COM					;;
13298462SApril.Chin@Sun.COM				esac
13308462SApril.Chin@Sun.COM				;;
13318462SApril.Chin@Sun.COM			esac
13328462SApril.Chin@Sun.COM			;;
13338462SApril.Chin@Sun.COM		-*[2468])
13348462SApril.Chin@Sun.COM			case $shell in
13358462SApril.Chin@Sun.COM			ksh)	p=${conf_limit%?}
13368462SApril.Chin@Sun.COM				s=${conf_limit#$p}
13378462SApril.Chin@Sun.COM				((s=s-1))
13388462SApril.Chin@Sun.COM				;;
13398462SApril.Chin@Sun.COM			*)	eval `echo '' $conf_limit | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
13408462SApril.Chin@Sun.COM				s=`expr $s - 1`
13418462SApril.Chin@Sun.COM				;;
13428462SApril.Chin@Sun.COM			esac
13438462SApril.Chin@Sun.COM			conf_limit=${p}${s}${LL_suffix}-1${LL_suffix}
13448462SApril.Chin@Sun.COM			;;
13458462SApril.Chin@Sun.COM		0[xX]*[abcdefABCDEF])
13468462SApril.Chin@Sun.COM			conf_limit=${conf_limit}${LL_suffix}
13478462SApril.Chin@Sun.COM			;;
13488462SApril.Chin@Sun.COM		-*[0123456789])
13498462SApril.Chin@Sun.COM			conf_limit=${conf_limit}${LL_suffix}
13508462SApril.Chin@Sun.COM			;;
13518462SApril.Chin@Sun.COM		*[0123456789])
13528462SApril.Chin@Sun.COM			conf_limit=${conf_limit}U${LL_suffix}
13538462SApril.Chin@Sun.COM			;;
13548462SApril.Chin@Sun.COM		esac
13558462SApril.Chin@Sun.COM		case $conf_minmax in
13568462SApril.Chin@Sun.COM		?*[-+]*|*['()']*)
13578462SApril.Chin@Sun.COM			;;
13588462SApril.Chin@Sun.COM		*[lLuU])
13598462SApril.Chin@Sun.COM			case $LL_suffix in
13608462SApril.Chin@Sun.COM			??)	case $conf_minmax in
13618462SApril.Chin@Sun.COM				*[!lL][lL]|*[!lL][lL][uU])
13628462SApril.Chin@Sun.COM					conf_minmax=${conf_minmax}L
13638462SApril.Chin@Sun.COM					;;
13648462SApril.Chin@Sun.COM				esac
13658462SApril.Chin@Sun.COM				;;
13668462SApril.Chin@Sun.COM			esac
13678462SApril.Chin@Sun.COM			;;
13688462SApril.Chin@Sun.COM		-*[2468])
13698462SApril.Chin@Sun.COM			case $shell in
13708462SApril.Chin@Sun.COM			ksh)	p=${conf_minmax%?}
13718462SApril.Chin@Sun.COM				s=${conf_minmax#$p}
13728462SApril.Chin@Sun.COM				((s=s-1))
13738462SApril.Chin@Sun.COM				;;
13748462SApril.Chin@Sun.COM			*)	eval `echo '' $conf_minmax | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
13758462SApril.Chin@Sun.COM				s=`expr $s - 1`
13768462SApril.Chin@Sun.COM				;;
13778462SApril.Chin@Sun.COM			esac
13788462SApril.Chin@Sun.COM			conf_minmax=${p}${s}${LL_suffix}-1${LL_suffix}
13798462SApril.Chin@Sun.COM			;;
13808462SApril.Chin@Sun.COM		0[xX]*[abcdefABCDEF])
13818462SApril.Chin@Sun.COM			conf_minmax=${conf_minmax}${LL_suffix}
13828462SApril.Chin@Sun.COM			;;
13838462SApril.Chin@Sun.COM		-*[0123456789])
13848462SApril.Chin@Sun.COM			conf_minmax=${conf_minmax}${LL_suffix}
13858462SApril.Chin@Sun.COM			;;
13868462SApril.Chin@Sun.COM		*[0123456789])
13878462SApril.Chin@Sun.COM			conf_minmax=${conf_minmax}U${LL_suffix}
13888462SApril.Chin@Sun.COM			;;
13898462SApril.Chin@Sun.COM		esac
13904887Schin		conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0 }"
13914887Schin		;;
13924887Schin	esac
13938462SApril.Chin@Sun.COM	case $conf_flags in
13948462SApril.Chin@Sun.COM	'0|'*)	case $shell in
13958462SApril.Chin@Sun.COM		ksh)	conf_flags=${conf_flags#0?} ;;
13968462SApril.Chin@Sun.COM		*)	conf_flags=`echo "$conf_flags" | sed 's/^0.//'` ;;
13978462SApril.Chin@Sun.COM		esac
13988462SApril.Chin@Sun.COM		;;
13998462SApril.Chin@Sun.COM	esac
14004887Schin	echo "{ \"$conf_name\", $conf_limit, $conf_minmax, $conf_flags, $conf_standard, $conf_section, $conf_call, $conf_op },"
14014887Schin	case $shell in
14024887Schin	ksh)	len=${#conf_name}
14034887Schin		if	((len>=name_max))
14044887Schin		then	((name_max=len+1))
14054887Schin		fi
14064887Schin		;;
14074887Schin	*)	len=`echo ${conf_name} | wc -c`
14084887Schin		if	expr \( $len - 1 \) \>= ${name_max} >/dev/null
14094887Schin		then	name_max=$len
14104887Schin		fi
14114887Schin		;;
14124887Schin	esac
14138462SApril.Chin@Sun.COMdone
14148462SApril.Chin@Sun.COMexec > /dev/null
14154887Schincase $debug in
14164887Schin-d6)	exit ;;
14174887Schinesac
14184887Schin
14194887Schin# conf string table
14204887Schin
14214887Schinbase=conftab
14224887Schincase $verbose in
14234887Schin1)	echo "$command: generate ${base}.h string table header" >&2 ;;
14244887Schinesac
14254887Schincase $shell in
14264887Schinksh)	((name_max=name_max+3)); ((name_max=name_max/4*4)) ;; # bsd /bin/sh !
14274887Schin*)	name_max=`expr \( $name_max + 3 \) / 4 \* 4` ;;
14284887Schinesac
14294887Schin{
14304887Schincat <<!
14314887Schin#ifndef _CONFTAB_H
14324887Schin#define _CONFTAB_H
14334887Schin$systeminfo
14344887Schin
14354887Schin${generated}
14364887Schin
14378462SApril.Chin@Sun.COM#if !defined(const) && !defined(__STDC__) && !defined(__cplusplus) && !defined(c_plusplus)
14388462SApril.Chin@Sun.COM#define const
14398462SApril.Chin@Sun.COM#endif
14408462SApril.Chin@Sun.COM
14414887Schin#define conf		_ast_conf_data
14424887Schin#define conf_elements	_ast_conf_ndata
14434887Schin
14444887Schin#define prefix		_ast_conf_prefix
14454887Schin#define prefix_elements	_ast_conf_nprefix
14464887Schin
14474887Schin#define CONF_nop	0
14484887Schin#define	CONF_confstr	1
14494887Schin#define CONF_pathconf	2
14504887Schin#define CONF_sysconf	3
14514887Schin#define CONF_sysinfo	4
14524887Schin
14534887Schin!
14544887Schinindex=0
14554887Schinfor standard in $standards
14564887Schindo	echo "#define CONF_${standard}	${index}"
14574887Schin	case $shell in
14584887Schin	ksh)	((index=index+1)) ;;
14594887Schin	*)	index=`expr ${index} + 1` ;;
14604887Schin	esac
14614887Schindone
14624887Schinecho "#define CONF_call	${index}"
14634887Schincase $CONF_getconf in
14644887Schin?*)	echo
14654887Schin	echo "#define _pth_getconf	\"$CONF_getconf\""
14664887Schin	case $CONF_getconf_a in
14674887Schin	?*)	echo "#define _pth_getconf_a	\"$CONF_getconf_a\"" ;;
14684887Schin	esac
14694887Schin	;;
14704887Schinesac
14714887Schincat <<!
14724887Schin
14734887Schin#define CONF_DEFER_CALL		0x0001
14744887Schin#define CONF_DEFER_MM		0x0002
14754887Schin#define CONF_FEATURE		0x0004
14764887Schin#define CONF_LIMIT		0x0008
14774887Schin#define CONF_LIMIT_DEF		0x0010
14784887Schin#define CONF_MINMAX		0x0020
14794887Schin#define CONF_MINMAX_DEF		0x0040
14804887Schin#define CONF_NOSECTION		0x0080
14814887Schin#define CONF_NOUNDERSCORE	0x0100
14824887Schin#define CONF_PREFIX_ONLY	0x0200
14834887Schin#define CONF_PREFIXED		0x0400
14844887Schin#define CONF_STANDARD		0x0800
14854887Schin#define CONF_STRING		0x1000
14864887Schin#define CONF_UNDERSCORE		0x2000
14874887Schin#define CONF_USER		0x4000
14884887Schin
14894887Schinstruct Conf_s; typedef struct Conf_s Conf_t;
14904887Schin
14914887Schintypedef struct Value_s
14924887Schin{
14934887Schin	intmax_t	number;
14944887Schin	const char*	string;
14954887Schin} Value_t;
14964887Schin
14974887Schinstruct Conf_s
14984887Schin{
14994887Schin	const char	name[${name_max}];
15004887Schin	Value_t		limit;
15014887Schin	Value_t		minmax;
15028462SApril.Chin@Sun.COM	unsigned int	flags;
15034887Schin	short		standard;
15044887Schin	short		section;
15054887Schin	short		call;
15064887Schin	short		op;
15074887Schin};
15084887Schin
15094887Schintypedef struct Prefix_s
15104887Schin{
15114887Schin	const char	name[16];
15124887Schin	short		length;
15134887Schin	short		standard;
15144887Schin	short		call;
15154887Schin} Prefix_t;
15164887Schin
15174887Schinextern const Conf_t	conf[];
15184887Schinextern int		conf_elements;
15194887Schin
15204887Schinextern const Prefix_t	prefix[];
15214887Schinextern int		prefix_elements;
15224887Schin
15234887Schin#endif
15244887Schin!
15258462SApril.Chin@Sun.COM} > $tmp.2
15264887Schincase $debug in
15274887Schin-d7)	echo $command: $tmp.2 ${base}.h ;;
15284887Schin*)	cmp -s $tmp.2 ${base}.h 2>/dev/null || mv $tmp.2 ${base}.h ;;
15294887Schinesac
15304887Schin
15314887Schincase $verbose in
15324887Schin1)	echo "$command: generate ${base}.c string table" >&2 ;;
15334887Schinesac
15344887Schin{
15354887Schincat <<!
15364887Schin${head}
15374887Schin#include <sys/types.h>
15384887Schin#include <limits.h>
15394887Schin#include <unistd.h>$systeminfo$headers
15404887Schin${tail}
15414887Schin#include "${base}.h"
15424887Schin
15434887Schin${generated}
15444887Schin
15454887Schin/*
15464887Schin * prefix strings -- the first few are indexed by Conf_t.standard
15474887Schin */
15484887Schin
15494887Schinconst Prefix_t prefix[] =
15504887Schin{
15514887Schin!
15524887Schinfor standard in $standards
15534887Schindo	case $shell in
15544887Schin	ksh)	len=${#standard} ;;
15554887Schin	*)	len=`echo ${standard} | wc -c`; len=`expr $len - 1` ;;
15564887Schin	esac
15574887Schin	echo "	\"${standard}\",	${len},	CONF_${standard},	-1,"
15584887Schindone
15594887Schincat <<!
15604887Schin	"XX",		2,	CONF_POSIX,	CONF_nop,
15614887Schin	"CS",		2,	CONF_POSIX,	CONF_confstr,
15624887Schin	"PC",		2,	CONF_POSIX,	CONF_pathconf,
15634887Schin	"SC",		2,	CONF_POSIX,	CONF_sysconf,
15644887Schin	"SI",		2,	CONF_SVID,	CONF_sysinfo,
15654887Schin};
15664887Schin
15674887Schinint	prefix_elements = (int)sizeof(prefix) / (int)sizeof(prefix[0]);
15684887Schin
15694887Schin/*
15704887Schin * conf strings sorted in ascending order
15714887Schin */
15724887Schin
15734887Schinconst Conf_t conf[] =
15744887Schin{
15754887Schin!
15764887Schincat $tmp.t
15774887Schincat <<!
15784887Schin};
15794887Schin
15804887Schinint	conf_elements = (int)sizeof(conf) / (int)sizeof(conf[0]);
15814887Schin!
15828462SApril.Chin@Sun.COM} > $tmp.4
15834887Schincase $debug in
15844887Schin-d7)	echo $command: $tmp.4 ${base}.c ;;
15854887Schin*)	cmp -s $tmp.4 ${base}.c 2>/dev/null || mv $tmp.4 ${base}.c ;;
15864887Schinesac
15874887Schin
15884887Schin# limits.h generation code
15894887Schin
15904887Schinbase=conflim
15914887Schincase $verbose in
15924887Schin1)	echo "$command: generate ${base}.h supplemental <limits.h> values" >&2 ;;
15934887Schinesac
15944887Schin{
15954887Schincat <<!
15964887Schin${generated}
15974887Schin
15984887Schin/*
15994887Schin * supplemental <limits.h> values
16004887Schin */
16014887Schin
16024887Schin!
16034887Schintest -f $tmp.l && cat $tmp.l
16044887Schin} > $tmp.5
16054887Schincase $debug in
16064887Schin-d7)	echo $command: $tmp.5 ${base}.h ;;
16074887Schin*)	cmp -s $tmp.5 ${base}.h 2>/dev/null || mv $tmp.5 ${base}.h ;;
16084887Schinesac
16094887Schinexit 0
1610