1N/A########################################################################
1N/A# #
1N/A# This software is part of the ast package #
1N/A# Copyright (c) 1985-2011 AT&T Intellectual Property #
1N/A# and is licensed under the #
1N/A# Common Public License, Version 1.0 #
1N/A# by AT&T Intellectual Property #
1N/A# #
1N/A# A copy of the License is available at #
1N/A# http://www.opensource.org/licenses/cpl1.0.txt #
1N/A# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
1N/A# #
1N/A# Information and Software Systems Research #
1N/A# AT&T Research #
1N/A# Florham Park NJ #
1N/A# #
1N/A# Glenn Fowler <gsf@research.att.com> #
1N/A# David Korn <dgk@research.att.com> #
1N/A# Phong Vo <kpv@research.att.com> #
1N/A# #
1N/A########################################################################
1N/A: generate getconf and limits info
1N/A#
1N/A# @(#)conf.sh (AT&T Research) 2010-09-14
1N/A#
1N/A# this script generates these files from the table file in the first arg
1N/A# the remaining args are the C compiler name and flags
1N/A#
1N/A# conflim.h supplemental limits.h definitions
1N/A# conftab.h readonly string table definitions
1N/A# conftab.c readonly string table data
1N/A#
1N/A# you may think it should be simpler
1N/A# but you shall be confused anyway
1N/A#
1N/A
1N/Acase $-:$BASH_VERSION in
1N/A*x*:[0123456789]*) : bash set -x is broken :; set +ex ;;
1N/Aesac
1N/A
1N/ALC_ALL=C
1N/Aexport LC_ALL
1N/A
1N/Acommand=conf
1N/A
1N/Ashell=`eval 'x=123&&integer n=\${#x}\${x#1?}&&((n==330/(10)))&&echo ksh' 2>/dev/null`
1N/A
1N/Aappend=0
1N/Adebug=
1N/Aextra=0
1N/Akeep_call='*'
1N/Akeep_name='*'
1N/Atrace=
1N/Averbose=0
1N/Awhile :
1N/Ado case $1 in
1N/A -a) append=1 ;;
1N/A -c*) keep_call=${1#-?} ;;
1N/A -d*) debug=$1 ;;
1N/A -l) extra=1 ;;
1N/A -n*) keep_name=${1#-?} ;;
1N/A -t) trace=1 ;;
1N/A -v) verbose=1 ;;
1N/A -*) echo "Usage: $command [-a] [-ccall-pattern] [-dN] [-l] [-nname_pattern] [-t] [-v] conf.tab" >&2; exit 2 ;;
1N/A *) break ;;
1N/A esac
1N/A shift
1N/Adone
1N/Ahead='#include "FEATURE/standards"
1N/A#include "FEATURE/common"'
1N/Atail='#include "FEATURE/param"'
1N/Agenerated="/* : : generated by $command from $1 : : */"
1N/Ahdr=
1N/Aifs=${IFS-'
1N/A '}
1N/Anl='
1N/A'
1N/Asp=' '
1N/Aob='{'
1N/Acb='}'
1N/Asym=[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*
1N/Atmp=conf.tmp
1N/Acase $verbose:$debug$trace in
1N/A1:?*) echo "$command: debug=$debug trace=$trace keep_call=$keep_call keep_name=$keep_name" >&2 ;;
1N/Aesac
1N/Acase $trace in
1N/A1) PS4='+$LINENO+ '; set -x ;;
1N/Aesac
1N/A
1N/Acase $# in
1N/A0) case $extra in
1N/A 0) echo "$command: table argument expected" >&2
1N/A exit 1
1N/A ;;
1N/A esac
1N/A tab=/dev/null
1N/A ;;
1N/A*) tab=$1
1N/A shift
1N/A if test ! -f $tab
1N/A then echo "$command: $tab: cannot read" >&2
1N/A exit 1
1N/A fi
1N/A ;;
1N/Aesac
1N/Acase $# in
1N/A0) cc=cc ;;
1N/A*) cc=$* ;;
1N/Aesac
1N/A
1N/Arm -f $tmp.*
1N/Acase $debug in
1N/A'') trap "code=\$?; rm -f $tmp.*; exit \$code" 0 1 2 ;;
1N/Aesac
1N/A
1N/A# determine the intmax_t printf format
1N/A
1N/Acat > $tmp.c <<!
1N/A${head}
1N/Aint
1N/Amain()
1N/A{
1N/A#if _ast_intmax_long
1N/A return 1;
1N/A#else
1N/A return 0;
1N/A#endif
1N/A}
1N/A!
1N/Aif $cc -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe
1N/Athen LL_format='ll'
1N/Aelse LL_format='l'
1N/Afi
1N/A
1N/A# determine the intmax_t constant suffix
1N/A
1N/Acat > $tmp.c <<!
1N/A${head}
1N/Aint
1N/Amain()
1N/A{
1N/A#if _ast_intmax_long
1N/A return 1;
1N/A#else
1N/A _ast_intmax_t s = 0x7fffffffffffffffLL;
1N/A unsigned _ast_intmax_t u = 0xffffffffffffffffLL;
1N/A
1N/A return 0;
1N/A#endif
1N/A}
1N/A!
1N/Aif $cc -o $tmp.exe $tmp.c >/dev/null 2>&1
1N/Athen if ./$tmp.exe
1N/A then LL_suffix='LL'
1N/A else LL_suffix='L'
1N/A fi
1N/Aelse LL_suffix=''
1N/Afi
1N/A
1N/A# set up the names and keys
1N/A
1N/Akeys=
1N/Astandards=
1N/A
1N/Acase $append$extra in
1N/A00) case $verbose in
1N/A 1) echo "$command: read $tab" >&2 ;;
1N/A esac
1N/A exec < $tab
1N/A while :
1N/A do IFS=""
1N/A read line
1N/A eof=$?
1N/A IFS=$ifs
1N/A case $eof in
1N/A 0) ;;
1N/A *) break ;;
1N/A esac
1N/A case $line in
1N/A ""|\#*) ;;
1N/A *) set x $line
1N/A shift; name=$1
1N/A shift; standard=$1
1N/A shift; call=$1
1N/A shift; section=$1
1N/A shift; flags=$1
1N/A alternates=
1N/A define=
1N/A values=
1N/A script=
1N/A headers=
1N/A while :
1N/A do shift
1N/A case $# in
1N/A 0) break ;;
1N/A esac
1N/A case $1 in
1N/A ":") shift
1N/A eval script='$'script_$1
1N/A break
1N/A ;;
1N/A *"{") case $1 in
1N/A "sh{") script="# $name" ;;
1N/A *) script= ;;
1N/A esac
1N/A shift
1N/A args="$*"
1N/A IFS=""
1N/A while read line
1N/A do case $line in
1N/A "}") break ;;
1N/A esac
1N/A script=$script$nl$line
1N/A done
1N/A IFS=$ifs
1N/A break
1N/A ;;
1N/A *.h) case $shell in
1N/A ksh) f=${1%.h} ;;
1N/A *) f=`echo $1 | sed 's,\.h$,,'` ;;
1N/A esac
1N/A case " $hdr " in
1N/A *" $f "*)
1N/A headers=$headers$nl#include$sp'<'$1'>'
1N/A ;;
1N/A *" -$f- "*)
1N/A ;;
1N/A *) if iffe -n - hdr $f | grep _hdr_$f >/dev/null
1N/A then hdr="$hdr $f"
1N/A headers=$headers$nl#include$sp'<'$1'>'
1N/A else hdr="$hdr -$f-"
1N/A fi
1N/A ;;
1N/A esac
1N/A ;;
1N/A *) values=$values$sp$1
1N/A case $1 in
1N/A $sym) echo "$1" >> $tmp.v ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A case " $standards " in
1N/A *" $standard "*)
1N/A ;;
1N/A *) standards="$standards $standard"
1N/A ;;
1N/A esac
1N/A case $name:$flags in
1N/A *:*S*) ;;
1N/A VERSION)flags="${flags}S" ;;
1N/A esac
1N/A case $name in
1N/A *VERSION*)key=${standard}${section} ;;
1N/A *) key= ;;
1N/A esac
1N/A case $key in
1N/A ''|*_) key=${key}${name} ;;
1N/A *) key=${key}_${name} ;;
1N/A esac
1N/A eval sys='$'CONF_call_${key}
1N/A case $sys in
1N/A ?*) call=$sys ;;
1N/A esac
1N/A case $call in
1N/A SI) sys=CS ;;
1N/A *) sys=$call ;;
1N/A esac
1N/A key=${sys}_${key}
1N/A keys="$keys$nl$key"
1N/A eval CONF_name_${key}='$'name
1N/A eval CONF_standard_${key}='$'standard
1N/A eval CONF_call_${key}='$'call
1N/A eval CONF_section_${key}='$'section
1N/A eval CONF_flags_${key}='$'flags
1N/A eval CONF_define_${key}='$'define
1N/A eval CONF_values_${key}='$'values
1N/A eval CONF_script_${key}='$'script
1N/A eval CONF_args_${key}='$'args
1N/A eval CONF_headers_${key}='$'headers
1N/A eval CONF_keys_${name}=\"'$'CONF_keys_${name} '$'key\"
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/Aesac
1N/Acase $debug in
1N/A-d1) for key in $keys
1N/A do eval name=\"'$'CONF_name_$key\"
1N/A case $name in
1N/A ?*) eval standard=\"'$'CONF_standard_$key\"
1N/A eval call=\"'$'CONF_call_$key\"
1N/A eval section=\"'$'CONF_section_$key\"
1N/A eval flags=\"'$'CONF_flags_$key\"
1N/A eval define=\"'$'CONF_define_$key\"
1N/A eval values=\"'$'CONF_values_$key\"
1N/A eval script=\"'$'CONF_script_$key\"
1N/A eval args=\"'$'CONF_args_$key\"
1N/A eval headers=\"'$'CONF_headers_$key\"
1N/A 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}"
1N/A ;;
1N/A esac
1N/A done
1N/A exit
1N/A ;;
1N/Aesac
1N/A
1N/Asysteminfo='
1N/A#if !defined(SYS_NMLEN)
1N/A#define SYS_NMLEN 9
1N/A#endif
1N/A#include <sys/systeminfo.h>'
1N/Aecho "$systeminfo" > $tmp.c
1N/A$cc -E $tmp.c >/dev/null 2>&1 || systeminfo=
1N/A
1N/A# check for native getconf(1)
1N/A
1N/ACONF_getconf=
1N/ACONF_getconf_a=
1N/Afor d in /usr/bin /bin /usr/sbin /sbin
1N/Ado if test -x $d/getconf
1N/A then case `$d/getconf --?-version 2>&1` in
1N/A *"AT&T"*"Research"*)
1N/A : presumably an implementation also configured from conf.tab
1N/A ;;
1N/A *) CONF_getconf=$d/getconf
1N/A if $CONF_getconf -a >/dev/null 2>&1
1N/A then CONF_getconf_a=-a
1N/A fi
1N/A ;;
1N/A esac
1N/A break
1N/A fi
1N/Adone
1N/Aexport CONF_getconf CONF_getconf_a
1N/A
1N/Acase $verbose in
1N/A1) echo "$command: check ${CONF_getconf:+$CONF_getconf(1),}confstr(2),pathconf(2),sysconf(2),sysinfo(2) configuration names" >&2 ;;
1N/Aesac
1N/A{
1N/A echo "#include <unistd.h>$systeminfo
1N/Aint i = 0;" > $tmp.c
1N/A $cc -E $tmp.c
1N/A} |
1N/Ased \
1N/A -e '/^#[^0123456789]*1[ ]*".*".*/!d' \
1N/A -e 's/^#[^0123456789]*1[ ]*"\(.*\)".*/\1/' |
1N/Asort -u > $tmp.f
1N/A{
1N/Ased \
1N/A -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]/ /g' \
1N/A -e 's/[ ][ ]*/\n/g' \
1N/A `cat $tmp.f` 2>/dev/null |
1N/A egrep '^(SI|_(CS|PC|SC|SI))_.'
1N/A case $CONF_getconf_a in
1N/A ?*) $CONF_getconf $CONF_getconf_a | sed 's,[=: ].*,,'
1N/A ;;
1N/A *) case $CONF_getconf in
1N/A ?*) for v in `strings $CONF_getconf | grep '^[ABCDEFGHIJKLMNOPQRSTUVWXYZ_][ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$'`
1N/A do if $CONF_getconf $v >/dev/null
1N/A then echo $v
1N/A fi
1N/A done
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac 2>/dev/null
1N/A} |
1N/Aegrep -v '^_[ABCDEFGHIJKLMNOPQRSTUVWXYZ]+_(COUNT|LAST|N|STR)$' |
1N/Asort -u > $tmp.g
1N/A{
1N/A grep '^_' $tmp.g
1N/A grep '^[^_]' $tmp.g
1N/A} > $tmp.t
1N/Amv $tmp.t $tmp.g
1N/Acase $debug in
1N/A-d2) exit ;;
1N/Aesac
1N/A
1N/AHOST=`package | sed -e 's,[0123456789.].*,,' | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
1N/Acase $HOST in
1N/A'') HOST=SYSTEM ;;
1N/Aesac
1N/A
1N/Aexec < $tmp.g
1N/A
1N/Awhile read line
1N/Ado flags=F
1N/A section=
1N/A underscore=
1N/A define=$line
1N/A IFS=_
1N/A set $line
1N/A IFS=$ifs
1N/A case $1 in
1N/A '') case $# in
1N/A 0) continue ;;
1N/A esac
1N/A shift
1N/A ;;
1N/A esac
1N/A case $1 in
1N/A CS|PC|SC|SI)
1N/A call=$1
1N/A shift
1N/A standard=$1
1N/A ;;
1N/A *) flags=${flags}R
1N/A standard=$1
1N/A while :
1N/A do case $# in
1N/A 0) continue 2 ;;
1N/A esac
1N/A shift
1N/A case $1 in
1N/A CS|PC|SC|SI)
1N/A call=$1
1N/A shift
1N/A break
1N/A ;;
1N/A O|o|OLD|old)
1N/A continue 2
1N/A ;;
1N/A esac
1N/A standard=${standard}_$1
1N/A done
1N/A ;;
1N/A esac
1N/A case $1 in
1N/A SET) continue ;;
1N/A esac
1N/A case $standard in
1N/A _*) standard=`echo $standard | sed 's,^_*,,'` ;;
1N/A esac
1N/A case " $standards " in
1N/A *" $standard "*)
1N/A ;;
1N/A *) case $standard in
1N/A [0123456789]*)
1N/A section=$standard
1N/A standard=POSIX
1N/A ;;
1N/A *[0123456789])
1N/A eval `echo $standard | sed 's,\(.*\)\([0123456789]*\),standard=\1 section=\2,'`
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $flags in
1N/A *R*) case $call in
1N/A SI) ;;
1N/A *) underscore=U ;;
1N/A esac
1N/A ;;
1N/A *) case " $standards " in
1N/A " C ") shift
1N/A ;;
1N/A *" $standard "*)
1N/A case $call in
1N/A SI) ;;
1N/A *) flags=${flags}P
1N/A underscore=U
1N/A ;;
1N/A esac
1N/A shift
1N/A ;;
1N/A *) standard=
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $standard in
1N/A '') standard=$HOST
1N/A case $call in
1N/A SI) ;;
1N/A *) underscore=U ;;
1N/A esac
1N/A case $call in
1N/A CS|PC|SC)
1N/A case $define in
1N/A _${call}_*)
1N/A standard=POSIX
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A part=$section
1N/A case $section in
1N/A '') section=1
1N/A case $standard in
1N/A POSIX|XOPEN) part=$section ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A name=
1N/A while :
1N/A do case $# in
1N/A 0) break ;;
1N/A esac
1N/A case $name in
1N/A '') name=$1 ;;
1N/A *) name=${name}_$1 ;;
1N/A esac
1N/A shift
1N/A done
1N/A case $name in
1N/A '') ;;
1N/A CONFORMANCE|FS_3D|HOSTTYPE|LIBPATH|LIBPREFIX|LIBSUFFIX|PATH_ATTRIBUTES|PATH_RESOLVE|UNIVERSE)
1N/A ;;
1N/A *) values=
1N/A script=
1N/A args=
1N/A headers=
1N/A case $name in
1N/A V[123456789]_*|V[123456789][0123456789]_*) underscore=VW ;;
1N/A esac
1N/A case $call in
1N/A CS|SI) key=CS ;;
1N/A *) key=$call ;;
1N/A esac
1N/A case $name in
1N/A *VERSION*)key=${key}_${standard}${part} ;;
1N/A esac
1N/A key=${key}_${name}
1N/A eval x='$'CONF_keys_$name
1N/A case $x in
1N/A '') eval x='$'CONF_name_$key
1N/A case $x in
1N/A '') case $call in
1N/A SI) flags=O$flags ;;
1N/A esac
1N/A case $underscore in
1N/A ?*) flags=${flags}${underscore} ;;
1N/A esac
1N/A old=QQ
1N/A case $name in
1N/A *VERSION*)old=${old}_${standard}${part} ;;
1N/A esac
1N/A old=${old}_${name}
1N/A eval x='$'CONF_name_$old
1N/A case $x in
1N/A ?*) eval CONF_name_$old=
1N/A eval flags='$'flags'$'CONF_flags_$old
1N/A eval values='$'CONF_values_$old
1N/A eval script='$'CONF_script_$old
1N/A eval args='$'CONF_args_$old
1N/A eval headers='$'CONF_headers_$old
1N/A ;;
1N/A esac
1N/A keys="$keys$nl$key"
1N/A eval CONF_name_${key}='$'name
1N/A eval CONF_standard_${key}='$'standard
1N/A eval CONF_call_${key}='$'call
1N/A eval CONF_section_${key}='$'section
1N/A eval CONF_flags_${key}=d'$'flags
1N/A eval CONF_define_${key}='$'define
1N/A eval CONF_values_${key}='$'values
1N/A eval CONF_script_${key}='$'script
1N/A eval CONF_args_${key}='$'args
1N/A eval CONF_headers_${key}='$'headers
1N/A ;;
1N/A *) eval x='$'CONF_define_$key
1N/A case $x in
1N/A ?*) case $call in
1N/A CS) eval x='$'CONF_call_$key
1N/A case $x in
1N/A SI) ;;
1N/A *) define= ;;
1N/A esac
1N/A ;;
1N/A *) define=
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $define in
1N/A ?*) eval CONF_define_${key}='$'define
1N/A eval CONF_call_${key}='$'call
1N/A eval x='$'CONF_call_${key}
1N/A case $x in
1N/A QQ) ;;
1N/A *) case $flags in
1N/A *R*) flags=R ;;
1N/A *) flags= ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $call in
1N/A SI) flags=O$flags ;;
1N/A esac
1N/A eval CONF_flags_${key}=d'$'flags'$'CONF_flags_${key}
1N/A ;;
1N/A esac
1N/A old=QQ
1N/A case $name in
1N/A *VERSION*)old=${old}_${standard}${part} ;;
1N/A esac
1N/A old=${old}_${name}
1N/A eval CONF_name_$old=
1N/A esac
1N/A ;;
1N/A *) for key in $x
1N/A do eval x='$'CONF_call_${key}
1N/A case $x in
1N/A XX) eval CONF_call_${key}=QQ
1N/A eval CONF_flags_${key}=S'$'CONF_flags_${key}
1N/A ;;
1N/A esac
1N/A done
1N/A esac
1N/A ;;
1N/A esac
1N/Adone
1N/A
1N/A# sort keys by name
1N/A
1N/Akeys=`for key in $keys
1N/Ado eval echo '$'CONF_name_$key '$'key
1N/Adone | sort -u | sed 's,.* ,,'`
1N/Acase $debug in
1N/A-d3) for key in $keys
1N/A do eval name=\"'$'CONF_name_$key\"
1N/A case $name in
1N/A ?*) eval standard=\"'$'CONF_standard_$key\"
1N/A eval call=\"'$'CONF_call_$key\"
1N/A eval section=\"'$'CONF_section_$key\"
1N/A eval flags=\"'$'CONF_flags_$key\"
1N/A eval define=\"'$'CONF_define_$key\"
1N/A eval values=\"'$'CONF_values_$key\"
1N/A eval script=\"'$'CONF_script_$key\"
1N/A eval headers=\"'$'CONF_headers_$key\"
1N/A 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}"
1N/A ;;
1N/A esac
1N/A done
1N/A exit
1N/A ;;
1N/Aesac
1N/A
1N/A# mark the dups CONF_PREFIXED
1N/A
1N/Aprev_key=
1N/Aprev_name=
1N/Afor key in $keys
1N/Ado eval name=\"'$'CONF_name_$key\"
1N/A case $name in
1N/A '') continue
1N/A ;;
1N/A $prev_name)
1N/A eval p='$'CONF_flags_${prev_key}
1N/A eval c='$'CONF_flags_${key}
1N/A case $p:$c in
1N/A *L*:*L*);;
1N/A *L*:*) c=L${c} ;;
1N/A *:*L*) p=L${p} ;;
1N/A *) p=P$p c=P$c ;;
1N/A esac
1N/A eval CONF_flags_${prev_key}=$p
1N/A eval CONF_flags_${key}=$c
1N/A ;;
1N/A esac
1N/A prev_name=$name
1N/A prev_key=$key
1N/Adone
1N/A
1N/A# collect all the macros/enums
1N/A
1N/Afor key in $keys
1N/Ado eval name=\"'$'CONF_name_$key\"
1N/A case $name in
1N/A '') continue ;;
1N/A $keep_name) ;;
1N/A *) continue ;;
1N/A esac
1N/A eval call=\"'$'CONF_call_$key\"
1N/A case $call in
1N/A $keep_call) ;;
1N/A *) continue ;;
1N/A esac
1N/A eval standard=\"'$'CONF_standard_$key\"
1N/A eval section=\"'$'CONF_section_$key\"
1N/A eval flags=\"'$'CONF_flags_$key\"
1N/A eval define=\"'$'CONF_define_$key\"
1N/A eval values=\"'$'CONF_values_$key\"
1N/A eval script=\"'$'CONF_script_$key\"
1N/A eval args=\"'$'CONF_args_$key\"
1N/A eval headers=\"'$'CONF_headers_$key\"
1N/A conf_name=$name
1N/A case $call in
1N/A QQ) call=XX
1N/A for c in SC PC CS
1N/A do case $flags in
1N/A *S*) case $section in
1N/A 1) eval x='$'CONF_call_${c}_${standard}_${name} ;;
1N/A *) eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
1N/A esac
1N/A ;;
1N/A *) eval x='$'CONF_call_${c}_${name}
1N/A ;;
1N/A esac
1N/A case $x in
1N/A ?*) call=$x
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A case $call in
1N/A XX) for c in SC PC CS
1N/A do echo "_${c}_${name}"
1N/A case $flags in
1N/A *S*) case $section in
1N/A 1) echo "_${c}_${standard}_${name}" ;;
1N/A *) echo "_${c}_${standard}${section}_${name}" ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $call in
1N/A CS|PC|SC|SI|XX)
1N/A ;;
1N/A *) echo "$command: $name: $call: invalid call" >&2
1N/A exit 1
1N/A ;;
1N/A esac
1N/A case $flags in
1N/A *[ABEGHIJQTYZabcefghijklmnopqrstuvwxyz_123456789]*)
1N/A echo "$command: $name: $flags: invalid flag(s)" >&2
1N/A exit 1
1N/A ;;
1N/A esac
1N/A case $section in
1N/A [01]) ;;
1N/A *) case $flags in
1N/A *N*) ;;
1N/A *) name=${section}_${name} ;;
1N/A esac
1N/A standard=${standard}${section}
1N/A ;;
1N/A esac
1N/A case $call in
1N/A XX) ;;
1N/A *) case $flags in
1N/A *d*) conf_op=${define} ;;
1N/A *O*) conf_op=${call}_${name} ;;
1N/A *R*) conf_op=_${standard}_${call}_${name} ;;
1N/A *S*) conf_op=_${call}_${standard}_${name} ;;
1N/A *) conf_op=_${call}_${name} ;;
1N/A esac
1N/A echo "${conf_op}"
1N/A ;;
1N/A esac
1N/A case $standard:$flags in
1N/A C:*) ;;
1N/A *:*L*) echo "${conf_name}"
1N/A echo "_${standard}_${conf_name}"
1N/A ;;
1N/A *:*M*) case $section in
1N/A 1) echo "_${standard}_${conf_name}" ;;
1N/A *) echo "_${standard}${section}_${conf_name}" ;;
1N/A esac
1N/A ;;
1N/A esac
1N/Adone > $tmp.q
1N/Asort -u < $tmp.q > $tmp.t
1N/Amv $tmp.t $tmp.q
1N/Asort -u < $tmp.v > $tmp.t
1N/Amv $tmp.t $tmp.v
1N/Acase $debug in
1N/A-d4) exit ;;
1N/Aesac
1N/A
1N/A# test all the macros in a few batches (some compilers have an error limit)
1N/A
1N/Adefined() # list-file
1N/A{
1N/A : > $tmp.p
1N/A while :
1N/A do {
1N/A cat <<!
1N/A${head}
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A#undef conf
1N/Aunsigned int conf[] = {
1N/A!
1N/A sed 's/$/,/' $1
1N/A echo "};"
1N/A } > $tmp.c
1N/A [ -f $tmp.1.c ] || cp $tmp.c $tmp.1.c
1N/A if $cc -c $tmp.c > $tmp.e 2>&1
1N/A then break
1N/A fi
1N/A [ -f $tmp.1.e ] || cp $tmp.e $tmp.1.e
1N/A snl='\
1N/A'
1N/A sed "s/[^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][^_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*/${snl}/g" $tmp.e |
1N/A grep '^[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz][_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789]*$' |
1N/A sort -u > $tmp.n
1N/A cmp -s $tmp.n $tmp.p && break
1N/A fgrep -x -v -f $tmp.n $1 > $tmp.y
1N/A mv $tmp.y $1
1N/A mv $tmp.n $tmp.p
1N/A done
1N/A {
1N/A cat <<!
1N/A${head}
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A#undef conf
1N/A!
1N/A sed 's/.*/conf "&" = &/' $1
1N/A } > $tmp.c
1N/A $cc -E $tmp.c 2>/dev/null |
1N/A sed -e '/conf[ ]*".*"[ ]*=[ ]*/!d' -e '/[_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789][ ]*(/!d' -e 's/.*"\(.*\)".*/\1/' > $tmp.n
1N/A if test -s $tmp.n
1N/A then fgrep -x -v -f $tmp.n $1 > $tmp.y
1N/A mv $tmp.y $1
1N/A fi
1N/A}
1N/A
1N/Acase $verbose in
1N/A1) echo "$command: check macros/enums as static initializers" >&2 ;;
1N/Aesac
1N/Adefined $tmp.q
1N/Adefined $tmp.v
1N/Acase $debug in
1N/A-d5) exit ;;
1N/Aesac
1N/A
1N/A# mark the constant macros/enums
1N/A
1N/Aexec < $tmp.q
1N/Awhile read line
1N/Ado eval CONF_const_${line}=1
1N/Adone
1N/Aexec < $tmp.v
1N/Awhile read line
1N/Ado eval CONF_const_${line}=1
1N/Adone
1N/A
1N/A# mark the string literal values
1N/A
1N/A{
1N/A cat <<!
1N/A${head}
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A#undef conf
1N/A!
1N/A sed 's/.*/conf "&" = &/' $tmp.q
1N/A} > $tmp.c
1N/A$cc -E $tmp.c 2>/dev/null |
1N/Ased -e '/conf[ ]*".*"[ ]*=[ ]*"/!d' -e 's/.*"\([^"]*\)".*/\1/' > $tmp.e
1N/Aexec < $tmp.e
1N/Awhile read line
1N/Ado eval CONF_string_${line}=1
1N/Adone
1N/A
1N/A# walk through the table
1N/A
1N/Acase $shell in
1N/Aksh) integer len name_max ;;
1N/Aesac
1N/Aname_max=1
1N/Aexport tmp name standard call cc
1N/A
1N/Aexec > $tmp.t
1N/Afor key in $keys
1N/Ado eval name=\"'$'CONF_name_$key\"
1N/A case $name in
1N/A '') continue ;;
1N/A $keep_name) ;;
1N/A *) continue ;;
1N/A esac
1N/A eval call=\"'$'CONF_call_$key\"
1N/A case $call in
1N/A $keep_call) ;;
1N/A *) continue ;;
1N/A esac
1N/A eval standard=\"'$'CONF_standard_$key\"
1N/A eval section=\"'$'CONF_section_$key\"
1N/A eval flags=\"'$'CONF_flags_$key\"
1N/A eval define=\"'$'CONF_define_$key\"
1N/A eval values=\"'$'CONF_values_$key\"
1N/A eval script=\"'$'CONF_script_$key\"
1N/A eval args=\"'$'CONF_args_$key\"
1N/A eval headers=\"'$'CONF_headers_$key\"
1N/A conf_name=$name
1N/A case $call in
1N/A QQ) call=XX
1N/A for c in SC PC CS
1N/A do case $flags in
1N/A *S*) case $section in
1N/A 1) eval x='$'CONF_call_${c}_${standard}_${name} ;;
1N/A *) eval x='$'CONF_call_${c}_${standard}${section}_${name} ;;
1N/A esac
1N/A ;;
1N/A *) eval x='$'CONF_call_${c}_${name}
1N/A ;;
1N/A esac
1N/A case $x in
1N/A ?*) call=$x
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A case $call in
1N/A XX) for c in SC PC CS
1N/A do case $flags in
1N/A *S*) case $section in
1N/A 1) eval x='$'CONF_const__${c}_${standard}_${name} ;;
1N/A *) eval x='$'CONF_const__${c}_${standard}${section}_${name} ;;
1N/A esac
1N/A ;;
1N/A *) eval x='$'CONF_const__${c}_${name}
1N/A ;;
1N/A esac
1N/A case $x in
1N/A 1) call=$c
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/A esac
1N/A case $call in
1N/A XX) case $standard in
1N/A C) standard=POSIX ;;
1N/A esac
1N/A case $flags in
1N/A *L*) flags=lFU ;;
1N/A *) flags=FU ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case " $standards " in
1N/A *" $standard "*)
1N/A ;;
1N/A *) standards="$standards $standard"
1N/A ;;
1N/A esac
1N/A conf_standard=CONF_${standard}
1N/A case $call in
1N/A CS) conf_call=CONF_confstr
1N/A ;;
1N/A PC) conf_call=CONF_pathconf
1N/A ;;
1N/A SC) conf_call=CONF_sysconf
1N/A ;;
1N/A SI) conf_call=CONF_sysinfo
1N/A ;;
1N/A XX) conf_call=CONF_nop
1N/A ;;
1N/A esac
1N/A conf_op=-1
1N/A for s in _${call}_${standard}${section}_${name} _${call}_${standard}_${name} _${call}_${section}_${name} _${call}_${name} ${call}_${name}
1N/A do eval x='$'CONF_const_${s}
1N/A case $x in
1N/A 1) conf_op=${s}
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A conf_section=$section
1N/A conf_flags=0
1N/A case $flags in
1N/A *C*) conf_flags="${conf_flags}|CONF_DEFER_CALL" ;;
1N/A esac
1N/A case $flags in
1N/A *D*) conf_flags="${conf_flags}|CONF_DEFER_MM" ;;
1N/A esac
1N/A case $flags in
1N/A *F*) conf_flags="${conf_flags}|CONF_FEATURE" ;;
1N/A esac
1N/A case $flags in
1N/A *L*) conf_flags="${conf_flags}|CONF_LIMIT" ;;
1N/A esac
1N/A case $flags in
1N/A *M*) conf_flags="${conf_flags}|CONF_MINMAX" ;;
1N/A esac
1N/A case $flags in
1N/A *N*) conf_flags="${conf_flags}|CONF_NOSECTION" ;;
1N/A esac
1N/A case $flags in
1N/A *P*) conf_flags="${conf_flags}|CONF_PREFIXED" ;;
1N/A esac
1N/A case $flags in
1N/A *S*) conf_flags="${conf_flags}|CONF_STANDARD" ;;
1N/A esac
1N/A case $flags in
1N/A *U*) conf_flags="${conf_flags}|CONF_UNDERSCORE" ;;
1N/A esac
1N/A case $flags in
1N/A *V*) conf_flags="${conf_flags}|CONF_NOUNDERSCORE" ;;
1N/A esac
1N/A case $flags in
1N/A *W*) conf_flags="${conf_flags}|CONF_PREFIX_ONLY" ;;
1N/A esac
1N/A case $debug in
1N/A ?*) case $standard in
1N/A ????) sep=" " ;;
1N/A ???) sep=" " ;;
1N/A ??) sep=" " ;;
1N/A ?) sep=" " ;;
1N/A *) sep="" ;;
1N/A esac
1N/A echo "$command: test: $sep$standard $call $name" >&2
1N/A ;;
1N/A esac
1N/A case $call in
1N/A CS|SI) conf_flags="${conf_flags}|CONF_STRING"
1N/A string=1
1N/A ;;
1N/A *) eval string='$'CONF_string_${key}
1N/A ;;
1N/A esac
1N/A conf_limit=0
1N/A case $flags in
1N/A *[Ll]*) d=
1N/A case ${conf_name} in
1N/A LONG_MAX|SSIZE_MAX)
1N/A x=
1N/A ;;
1N/A *) eval x='$'CONF_const_${conf_name}
1N/A ;;
1N/A esac
1N/A case $x in
1N/A '') for s in ${values}
1N/A do case $s in
1N/A $sym) eval x='$'CONF_const_${s}
1N/A case $x in
1N/A 1) eval a='$'CONF_const_${standard}_${s}
1N/A case $a in
1N/A $x) x= ;;
1N/A *) x=$s ;;
1N/A esac
1N/A break
1N/A ;;
1N/A esac
1N/A ;;
1N/A [0123456789]*|[-+][0123456789]*)
1N/A d=$s
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A case ${x:+1}:$flags:$conf_op in
1N/A :*:-1|:*X*:*)
1N/A case $verbose in
1N/A 1) echo "$command: probe for ${conf_name} <limits.h> value" >&2 ;;
1N/A esac
1N/A x=
1N/A case $CONF_getconf in
1N/A ?*) if $CONF_getconf $conf_name > $tmp.x 2>/dev/null
1N/A then x=`cat $tmp.x`
1N/A case $x in
1N/A undefined) x= ;;
1N/A esac
1N/A fi
1N/A ;;
1N/A esac
1N/A case ${x:+1} in
1N/A '') case $script in
1N/A '#'*) echo "$script" > $tmp.sh
1N/A chmod +x $tmp.sh
1N/A x=`./$tmp.sh 2>/dev/null`
1N/A ;;
1N/A '') case $conf_name in
1N/A SIZE_*|U*|*_MAX)
1N/A f="%${LL_format}u"
1N/A t="unsigned _ast_intmax_t"
1N/A ;;
1N/A *) f="%${LL_format}d"
1N/A t="_ast_intmax_t"
1N/A ;;
1N/A esac
1N/A cat > $tmp.c <<!
1N/A${head}
1N/A#include <stdio.h>
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/Aint
1N/Amain()
1N/A{
1N/A printf("$f\n", ($t)$conf_name);
1N/A return 0;
1N/A}
1N/A!
1N/A ;;
1N/A *) cat > $tmp.c <<!
1N/A${head}
1N/A#include <stdio.h>
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A${script}
1N/A!
1N/A ;;
1N/A esac
1N/A case $args in
1N/A '') set "" ;;
1N/A *) eval set '""' '"'$args'"'; shift ;;
1N/A esac
1N/A for a
1N/A do case $script in
1N/A '#'*) ./$tmp.sh $a > $tmp.x 2>/dev/null
1N/A x=$?
1N/A ;;
1N/A *) $cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
1N/A x=$?
1N/A ;;
1N/A esac
1N/A case $x in
1N/A 0) x=`cat $tmp.x`
1N/A case $x in
1N/A "-") x=$a ;;
1N/A esac
1N/A break
1N/A ;;
1N/A *) x=
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/A esac
1N/A case $x in
1N/A '') x=$d ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case ${x:+1}:$flags:$conf_op in
1N/A 1:*:-1|1:*X*:*)
1N/A conf_limit=$x
1N/A case $flags in
1N/A *L*) ;;
1N/A *) conf_flags="${conf_flags}|CONF_LIMIT" ;;
1N/A esac
1N/A conf_flags="${conf_flags}|CONF_LIMIT_DEF"
1N/A case $string:$x in
1N/A 1:*) cat >> $tmp.l <<!
1N/Aprintf("#ifndef ${conf_name}\n");
1N/Aprintf("#define ${conf_name} \"${x}\"\n");
1N/Aprintf("#endif\n");
1N/A!
1N/A ;;
1N/A *:U*) cat >> $tmp.l <<!
1N/Aprintf("#ifndef ${conf_name}\n");
1N/Aprintf("#ifndef ${x}\n");
1N/Aprintf("#define ${x} %lu\n", ${x});
1N/Aprintf("#endif\n");
1N/Aprintf("#define ${conf_name} ${x}\n");
1N/Aprintf("#endif\n");
1N/A!
1N/A ;;
1N/A *:$sym) cat >> $tmp.l <<!
1N/Aprintf("#ifndef ${conf_name}\n");
1N/Aprintf("#ifndef ${x}\n");
1N/Aprintf("#define ${x} %ld\n", ${x});
1N/Aprintf("#endif\n");
1N/Aprintf("#define ${conf_name} ${x}\n");
1N/Aprintf("#endif\n");
1N/A!
1N/A ;;
1N/A *) cat >> $tmp.l <<!
1N/Aprintf("#ifndef ${conf_name}\n");
1N/Aprintf("#define ${conf_name} ${x}\n");
1N/Aprintf("#endif\n");
1N/A!
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $section in
1N/A [01]) ;;
1N/A *) case $flags in
1N/A *N*) ;;
1N/A *) name=${section}_${name} ;;
1N/A esac
1N/A standard=${standard}${section}
1N/A ;;
1N/A esac
1N/A conf_minmax=0
1N/A case $call:$standard:$flags in
1N/A *:C:*M*)for s in _${standard}_${conf_name} ${values}
1N/A do case $s in
1N/A $sym) ;;
1N/A *) conf_minmax=$s
1N/A conf_flags="${conf_flags}|CONF_MINMAX_DEF"
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/A *:C:*) ;;
1N/A [CPSX][CSX]:*:*[FM]*)
1N/A x=
1N/A for s in _${standard}_${conf_name} ${values}
1N/A do case $s in
1N/A $sym) eval x='$'CONF_const_${s} ;;
1N/A *) x=1 ;;
1N/A esac
1N/A case $x in
1N/A 1) conf_minmax=$s
1N/A case $flags in
1N/A *M*) conf_flags="${conf_flags}|CONF_MINMAX_DEF" ;;
1N/A esac
1N/A case $conf_minmax in
1N/A [-+0123456789]*) x= ;;
1N/A esac
1N/A break
1N/A ;;
1N/A esac
1N/A done
1N/A case ${x:+1}:${script:+1} in
1N/A :1) case $verbose in
1N/A 1) echo "$command: probe for _${standard}_${conf_name} minmax value" >&2 ;;
1N/A esac
1N/A case $CONF_getconf in
1N/A ?*) if $CONF_getconf _${standard}_${conf_name} > $tmp.x 2>/dev/null
1N/A then x=`cat $tmp.x`
1N/A case $x in
1N/A undefined) x= ;;
1N/A esac
1N/A fi
1N/A ;;
1N/A esac
1N/A case $x in
1N/A '') case $script in
1N/A '#'*) echo "$script" > $tmp.sh
1N/A chmod +x $tmp.sh
1N/A x=`./$tmp.sh 2>/dev/null`
1N/A ;;
1N/A *) cat > $tmp.c <<!
1N/A${head}
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A${script}
1N/A!
1N/A ;;
1N/A esac
1N/A case $args in
1N/A '') set "" ;;
1N/A *) eval set '""' "$args"; shift ;;
1N/A esac
1N/A for a
1N/A do case $script in
1N/A '#'*) ./$tmp.sh $a > $tmp.x 2>/dev/null
1N/A x=$?
1N/A ;;
1N/A *) $cc $a -o $tmp.exe $tmp.c >/dev/null 2>&1 && ./$tmp.exe > $tmp.x 2>/dev/null
1N/A x=$?
1N/A ;;
1N/A esac
1N/A case $x in
1N/A 0) x=`cat $tmp.x`
1N/A case $x in
1N/A "-") x=$a ;;
1N/A esac
1N/A break
1N/A ;;
1N/A *) x=
1N/A ;;
1N/A esac
1N/A done
1N/A ;;
1N/A esac
1N/A case $x in
1N/A ?*) conf_minmax=$x
1N/A case $flags in
1N/A *M*) case "|$conf_flags|" in
1N/A *'|CONF_MINMAX_DEF|'*)
1N/A ;;
1N/A *) conf_flags="${conf_flags}|CONF_MINMAX_DEF"
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A case $string in
1N/A 1) conf_limit="{ 0, $conf_limit }" conf_minmax="{ 0, $conf_minmax }"
1N/A ;;
1N/A *) case $conf_limit in
1N/A 0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
1N/A ;;
1N/A *[!0123456789abcdefABCDEF]*)
1N/A conf_limit=0
1N/A ;;
1N/A *[!0123456789]*)
1N/A conf_limit=0x$conf_limit
1N/A ;;
1N/A esac
1N/A case $conf_minmax in
1N/A 0[xX]*|-*|+*|[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_]*)
1N/A ;;
1N/A *[!0123456789abcdefABCDEF]*)
1N/A conf_minmax=0
1N/A ;;
1N/A *[!0123456789]*)
1N/A conf_minmax=0x$conf_minmax
1N/A ;;
1N/A esac
1N/A case $conf_limit in
1N/A ?*[-+]*|*['()']*)
1N/A ;;
1N/A *[lLuU])
1N/A case $LL_suffix in
1N/A ??) case $conf_limit in
1N/A *[!lL][lL]|*[!lL][lL][uU])
1N/A conf_limit=${conf_limit}L
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A -*[2468])
1N/A case $shell in
1N/A ksh) p=${conf_limit%?}
1N/A s=${conf_limit#$p}
1N/A ((s=s-1))
1N/A ;;
1N/A *) eval `echo '' $conf_limit | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
1N/A s=`expr $s - 1`
1N/A ;;
1N/A esac
1N/A conf_limit=${p}${s}${LL_suffix}-1${LL_suffix}
1N/A ;;
1N/A 0[xX]*[abcdefABCDEF])
1N/A conf_limit=${conf_limit}${LL_suffix}
1N/A ;;
1N/A -*[0123456789])
1N/A conf_limit=${conf_limit}${LL_suffix}
1N/A ;;
1N/A *[0123456789])
1N/A conf_limit=${conf_limit}U${LL_suffix}
1N/A ;;
1N/A esac
1N/A case $conf_minmax in
1N/A ?*[-+]*|*['()']*)
1N/A ;;
1N/A *[lLuU])
1N/A case $LL_suffix in
1N/A ??) case $conf_minmax in
1N/A *[!lL][lL]|*[!lL][lL][uU])
1N/A conf_minmax=${conf_minmax}L
1N/A ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A ;;
1N/A -*[2468])
1N/A case $shell in
1N/A ksh) p=${conf_minmax%?}
1N/A s=${conf_minmax#$p}
1N/A ((s=s-1))
1N/A ;;
1N/A *) eval `echo '' $conf_minmax | sed 's/ *\(.*\)\(.\) */p=\1 s=\2/'`
1N/A s=`expr $s - 1`
1N/A ;;
1N/A esac
1N/A conf_minmax=${p}${s}${LL_suffix}-1${LL_suffix}
1N/A ;;
1N/A 0[xX]*[abcdefABCDEF])
1N/A conf_minmax=${conf_minmax}${LL_suffix}
1N/A ;;
1N/A -*[0123456789])
1N/A conf_minmax=${conf_minmax}${LL_suffix}
1N/A ;;
1N/A *[0123456789])
1N/A conf_minmax=${conf_minmax}U${LL_suffix}
1N/A ;;
1N/A esac
1N/A conf_limit="{ $conf_limit, 0 }" conf_minmax="{ $conf_minmax, 0 }"
1N/A ;;
1N/A esac
1N/A case $conf_flags in
1N/A '0|'*) case $shell in
1N/A ksh) conf_flags=${conf_flags#0?} ;;
1N/A *) conf_flags=`echo "$conf_flags" | sed 's/^0.//'` ;;
1N/A esac
1N/A ;;
1N/A esac
1N/A echo "{ \"$conf_name\", $conf_limit, $conf_minmax, $conf_flags, $conf_standard, $conf_section, $conf_call, $conf_op },"
1N/A case $shell in
1N/A ksh) len=${#conf_name}
1N/A if ((len>=name_max))
1N/A then ((name_max=len+1))
1N/A fi
1N/A ;;
1N/A *) len=`echo ${conf_name} | wc -c`
1N/A if expr \( $len - 1 \) \>= ${name_max} >/dev/null
1N/A then name_max=$len
1N/A fi
1N/A ;;
1N/A esac
1N/Adone
1N/Aexec > /dev/null
1N/Acase $debug in
1N/A-d6) exit ;;
1N/Aesac
1N/A
1N/A# conf string table
1N/A
1N/Abase=conftab
1N/Acase $verbose in
1N/A1) echo "$command: generate ${base}.h string table header" >&2 ;;
1N/Aesac
1N/Acase $shell in
1N/Aksh) ((name_max=name_max+3)); ((name_max=name_max/4*4)) ;; # bsd /bin/sh !
1N/A*) name_max=`expr \( $name_max + 3 \) / 4 \* 4` ;;
1N/Aesac
1N/A{
1N/Acat <<!
1N/A#ifndef _CONFTAB_H
1N/A#define _CONFTAB_H
1N/A$systeminfo
1N/A
1N/A${generated}
1N/A
1N/A#if !defined(const) && !defined(__STDC__) && !defined(__cplusplus) && !defined(c_plusplus)
1N/A#define const
1N/A#endif
1N/A
1N/A#define conf _ast_conf_data
1N/A#define conf_elements _ast_conf_ndata
1N/A
1N/A#define prefix _ast_conf_prefix
1N/A#define prefix_elements _ast_conf_nprefix
1N/A
1N/A#define CONF_nop 0
1N/A#define CONF_confstr 1
1N/A#define CONF_pathconf 2
1N/A#define CONF_sysconf 3
1N/A#define CONF_sysinfo 4
1N/A
1N/A!
1N/Aindex=0
1N/Afor standard in $standards
1N/Ado echo "#define CONF_${standard} ${index}"
1N/A case $shell in
1N/A ksh) ((index=index+1)) ;;
1N/A *) index=`expr ${index} + 1` ;;
1N/A esac
1N/Adone
1N/Aecho "#define CONF_call ${index}"
1N/Acase $CONF_getconf in
1N/A?*) echo
1N/A echo "#define _pth_getconf \"$CONF_getconf\""
1N/A case $CONF_getconf_a in
1N/A ?*) echo "#define _pth_getconf_a \"$CONF_getconf_a\"" ;;
1N/A esac
1N/A ;;
1N/Aesac
1N/Acat <<!
1N/A
1N/A#define CONF_DEFER_CALL 0x0001
1N/A#define CONF_DEFER_MM 0x0002
1N/A#define CONF_FEATURE 0x0004
1N/A#define CONF_LIMIT 0x0008
1N/A#define CONF_LIMIT_DEF 0x0010
1N/A#define CONF_MINMAX 0x0020
1N/A#define CONF_MINMAX_DEF 0x0040
1N/A#define CONF_NOSECTION 0x0080
1N/A#define CONF_NOUNDERSCORE 0x0100
1N/A#define CONF_PREFIX_ONLY 0x0200
1N/A#define CONF_PREFIXED 0x0400
1N/A#define CONF_STANDARD 0x0800
1N/A#define CONF_STRING 0x1000
1N/A#define CONF_UNDERSCORE 0x2000
1N/A#define CONF_USER 0x4000
1N/A
1N/Astruct Conf_s; typedef struct Conf_s Conf_t;
1N/A
1N/Atypedef struct Value_s
1N/A{
1N/A intmax_t number;
1N/A const char* string;
1N/A} Value_t;
1N/A
1N/Astruct Conf_s
1N/A{
1N/A const char name[${name_max}];
1N/A Value_t limit;
1N/A Value_t minmax;
1N/A unsigned int flags;
1N/A short standard;
1N/A short section;
1N/A short call;
1N/A short op;
1N/A};
1N/A
1N/Atypedef struct Prefix_s
1N/A{
1N/A const char name[16];
1N/A short length;
1N/A short standard;
1N/A short call;
1N/A} Prefix_t;
1N/A
1N/Aextern const Conf_t conf[];
1N/Aextern const int conf_elements;
1N/A
1N/Aextern const Prefix_t prefix[];
1N/Aextern const int prefix_elements;
1N/A
1N/A#endif
1N/A!
1N/A} > $tmp.2
1N/Acase $debug in
1N/A-d7) echo $command: $tmp.2 ${base}.h ;;
1N/A*) cmp -s $tmp.2 ${base}.h 2>/dev/null || mv $tmp.2 ${base}.h ;;
1N/Aesac
1N/A
1N/Acase $verbose in
1N/A1) echo "$command: generate ${base}.c string table" >&2 ;;
1N/Aesac
1N/A{
1N/Acat <<!
1N/A${head}
1N/A#include <sys/types.h>
1N/A#include <limits.h>
1N/A#include <unistd.h>$systeminfo$headers
1N/A${tail}
1N/A#include "${base}.h"
1N/A
1N/A${generated}
1N/A
1N/A/*
1N/A * prefix strings -- the first few are indexed by Conf_t.standard
1N/A */
1N/A
1N/Aconst Prefix_t prefix[] =
1N/A{
1N/A!
1N/Afor standard in $standards
1N/Ado case $shell in
1N/A ksh) len=${#standard} ;;
1N/A *) len=`echo ${standard} | wc -c`; len=`expr $len - 1` ;;
1N/A esac
1N/A echo " \"${standard}\", ${len}, CONF_${standard}, -1,"
1N/Adone
1N/Acat <<!
1N/A "XX", 2, CONF_POSIX, CONF_nop,
1N/A "CS", 2, CONF_POSIX, CONF_confstr,
1N/A "PC", 2, CONF_POSIX, CONF_pathconf,
1N/A "SC", 2, CONF_POSIX, CONF_sysconf,
1N/A "SI", 2, CONF_SVID, CONF_sysinfo,
1N/A};
1N/A
1N/Aconst int prefix_elements = (int)sizeof(prefix) / (int)sizeof(prefix[0]);
1N/A
1N/A/*
1N/A * conf strings sorted in ascending order
1N/A */
1N/A
1N/Aconst Conf_t conf[] =
1N/A{
1N/A!
1N/Acat $tmp.t
1N/Acat <<!
1N/A};
1N/A
1N/Aconst int conf_elements = (int)sizeof(conf) / (int)sizeof(conf[0]);
1N/A!
1N/A} > $tmp.4
1N/Acase $debug in
1N/A-d7) echo $command: $tmp.4 ${base}.c ;;
1N/A*) cmp -s $tmp.4 ${base}.c 2>/dev/null || mv $tmp.4 ${base}.c ;;
1N/Aesac
1N/A
1N/A# limits.h generation code
1N/A
1N/Abase=conflim
1N/Acase $verbose in
1N/A1) echo "$command: generate ${base}.h supplemental <limits.h> values" >&2 ;;
1N/Aesac
1N/A{
1N/Acat <<!
1N/A${generated}
1N/A
1N/A/*
1N/A * supplemental <limits.h> values
1N/A */
1N/A
1N/A!
1N/Atest -f $tmp.l && cat $tmp.l
1N/A} > $tmp.5
1N/Acase $debug in
1N/A-d7) echo $command: $tmp.5 ${base}.h ;;
1N/A*) cmp -s $tmp.5 ${base}.h 2>/dev/null || mv $tmp.5 ${base}.h ;;
1N/Aesac
1N/Aexit 0