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