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