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