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