1*906afcb8SAndy Fiddaman######################################################################## 2*906afcb8SAndy Fiddaman# # 3*906afcb8SAndy Fiddaman# This software is part of the ast package # 4*906afcb8SAndy Fiddaman# Copyright (c) 1994-2012 AT&T Intellectual Property # 5*906afcb8SAndy Fiddaman# and is licensed under the # 6*906afcb8SAndy Fiddaman# Eclipse Public License, Version 1.0 # 7*906afcb8SAndy Fiddaman# by AT&T Intellectual Property # 8*906afcb8SAndy Fiddaman# # 9*906afcb8SAndy Fiddaman# A copy of the License is available at # 10*906afcb8SAndy Fiddaman# http://www.eclipse.org/org/documents/epl-v10.html # 11*906afcb8SAndy Fiddaman# (with md5 checksum b35adb5213ca9657e911e9befb180842) # 12*906afcb8SAndy Fiddaman# # 13*906afcb8SAndy Fiddaman# Information and Software Systems Research # 14*906afcb8SAndy Fiddaman# AT&T Research # 15*906afcb8SAndy Fiddaman# Florham Park NJ # 16*906afcb8SAndy Fiddaman# # 17*906afcb8SAndy Fiddaman# Glenn Fowler <gsf@research.att.com> # 18*906afcb8SAndy Fiddaman# # 19*906afcb8SAndy Fiddaman######################################################################## 20*906afcb8SAndy Fiddaman# Glenn Fowler & Phong Vo 21*906afcb8SAndy Fiddaman# AT&T Research 22*906afcb8SAndy Fiddaman# 23*906afcb8SAndy Fiddaman# test if feature exists 24*906afcb8SAndy Fiddaman# this script is written to make it through all sh variants 25*906afcb8SAndy Fiddaman# 26*906afcb8SAndy Fiddaman# NOTE: .exe a.out suffix and [\\/] in path patterns for dos/nt 27*906afcb8SAndy Fiddaman 28*906afcb8SAndy Fiddamancase $-:$BASH_VERSION in 29*906afcb8SAndy Fiddaman*x*:[0123456789]*) : bash set -x is broken :; set +ex ;; 30*906afcb8SAndy Fiddamanesac 31*906afcb8SAndy Fiddaman 32*906afcb8SAndy Fiddamancommand=iffe 33*906afcb8SAndy Fiddamanversion=2012-07-17 # update in USAGE too # 34*906afcb8SAndy Fiddaman 35*906afcb8SAndy Fiddamancompile() # $cc ... 36*906afcb8SAndy Fiddaman{ 37*906afcb8SAndy Fiddaman "$@" 2>$tmp.err 38*906afcb8SAndy Fiddaman _compile_status=$? 39*906afcb8SAndy Fiddaman if test -s $tmp.err 40*906afcb8SAndy Fiddaman then cat $tmp.err >&2 41*906afcb8SAndy Fiddaman case $_compile_status in 42*906afcb8SAndy Fiddaman [1-9]|[1-9][0-9]|1[01][0-9]|12[0-7]) 43*906afcb8SAndy Fiddaman if egrep -i -c 'terminated with signal|core dump|segmentation fault' $tmp.err >&$nullout 44*906afcb8SAndy Fiddaman then _compile_status=139 45*906afcb8SAndy Fiddaman fi 46*906afcb8SAndy Fiddaman ;; 47*906afcb8SAndy Fiddaman esac 48*906afcb8SAndy Fiddaman fi 49*906afcb8SAndy Fiddaman case $_compile_status in 50*906afcb8SAndy Fiddaman ?|??|1[01]?|12[0-8]|25?) 51*906afcb8SAndy Fiddaman ;; 52*906afcb8SAndy Fiddaman *) echo "$command: $@" >&$stderr 53*906afcb8SAndy Fiddaman cat $tmp.err >&$stderr 54*906afcb8SAndy Fiddaman echo "$command: $1: core dump or fatal interruption -- results inconclusive" >&$stderr 55*906afcb8SAndy Fiddaman exit $_compile_status 56*906afcb8SAndy Fiddaman ;; 57*906afcb8SAndy Fiddaman esac 58*906afcb8SAndy Fiddaman return $_compile_status 59*906afcb8SAndy Fiddaman} 60*906afcb8SAndy Fiddaman 61*906afcb8SAndy Fiddamanis_hdr() # [ - ] [ file.c ] hdr 62*906afcb8SAndy Fiddaman{ 63*906afcb8SAndy Fiddaman case $1 in 64*906afcb8SAndy Fiddaman -) _is_hdr_flag=-; shift ;; 65*906afcb8SAndy Fiddaman *) _is_hdr_flag= ;; 66*906afcb8SAndy Fiddaman esac 67*906afcb8SAndy Fiddaman case $1 in 68*906afcb8SAndy Fiddaman *.c) _is_hdr_file=$1; shift ;; 69*906afcb8SAndy Fiddaman *) _is_hdr_file=$tmp.c ;; 70*906afcb8SAndy Fiddaman esac 71*906afcb8SAndy Fiddaman is hdr $1 72*906afcb8SAndy Fiddaman compile $cc -c $_is_hdr_file <&$nullin >&$nullout 2>$tmp.e 73*906afcb8SAndy Fiddaman _is_hdr_status=$? 74*906afcb8SAndy Fiddaman case $_is_hdr_status in 75*906afcb8SAndy Fiddaman 0) if test -s $tmp.e 76*906afcb8SAndy Fiddaman then case `grep '#.*error' $tmp.e` in 77*906afcb8SAndy Fiddaman ?*) _is_hdr_status=1 ;; 78*906afcb8SAndy Fiddaman esac 79*906afcb8SAndy Fiddaman fi 80*906afcb8SAndy Fiddaman ;; 81*906afcb8SAndy Fiddaman esac 82*906afcb8SAndy Fiddaman case $_is_hdr_status in 83*906afcb8SAndy Fiddaman 0) success $_is_hdr_flag 84*906afcb8SAndy Fiddaman ;; 85*906afcb8SAndy Fiddaman *) case $debug in 86*906afcb8SAndy Fiddaman 3) cat $tmp.e >&$stderr ;; 87*906afcb8SAndy Fiddaman esac 88*906afcb8SAndy Fiddaman failure $_is_hdr_flag 89*906afcb8SAndy Fiddaman ;; 90*906afcb8SAndy Fiddaman esac 91*906afcb8SAndy Fiddaman return $_is_hdr_status 92*906afcb8SAndy Fiddaman} 93*906afcb8SAndy Fiddaman 94*906afcb8SAndy Fiddamanpkg() # package 95*906afcb8SAndy Fiddaman{ 96*906afcb8SAndy Fiddaman case $1 in 97*906afcb8SAndy Fiddaman '') pth='' 98*906afcb8SAndy Fiddaman case $pth in 99*906afcb8SAndy Fiddaman '') pth="/bin /usr/bin" ;; 100*906afcb8SAndy Fiddaman *:*) pth=`echo "$pth" | sed 's/:/ /g'` ;; 101*906afcb8SAndy Fiddaman esac 102*906afcb8SAndy Fiddaman return 103*906afcb8SAndy Fiddaman ;; 104*906afcb8SAndy Fiddaman '<') shift 105*906afcb8SAndy Fiddaman ;; 106*906afcb8SAndy Fiddaman *) return 107*906afcb8SAndy Fiddaman ;; 108*906afcb8SAndy Fiddaman esac 109*906afcb8SAndy Fiddaman case $1 in 110*906afcb8SAndy Fiddaman X|X11*) i="openwin" 111*906afcb8SAndy Fiddaman case $1 in 112*906afcb8SAndy Fiddaman X) set X11 ;; 113*906afcb8SAndy Fiddaman esac 114*906afcb8SAndy Fiddaman case $1 in 115*906afcb8SAndy Fiddaman X11) case $# in 116*906afcb8SAndy Fiddaman 1) set $1 6 5 4 ;; 117*906afcb8SAndy Fiddaman esac 118*906afcb8SAndy Fiddaman ;; 119*906afcb8SAndy Fiddaman esac 120*906afcb8SAndy Fiddaman ;; 121*906afcb8SAndy Fiddaman *) i= 122*906afcb8SAndy Fiddaman ;; 123*906afcb8SAndy Fiddaman esac 124*906afcb8SAndy Fiddaman pth="{ usr . - . contrib local $i - . share - . lib - $1" 125*906afcb8SAndy Fiddaman i=$1 126*906afcb8SAndy Fiddaman while : 127*906afcb8SAndy Fiddaman do shift 128*906afcb8SAndy Fiddaman case $# in 129*906afcb8SAndy Fiddaman 0) break ;; 130*906afcb8SAndy Fiddaman esac 131*906afcb8SAndy Fiddaman case $1 in 132*906afcb8SAndy Fiddaman '>') shift; break ;; 133*906afcb8SAndy Fiddaman esac 134*906afcb8SAndy Fiddaman pth="$pth ${i}R$1 ${i}.$1" 135*906afcb8SAndy Fiddaman done 136*906afcb8SAndy Fiddaman pth="$pth . } $*" 137*906afcb8SAndy Fiddaman} 138*906afcb8SAndy Fiddaman 139*906afcb8SAndy Fiddamanis() # op name 140*906afcb8SAndy Fiddaman{ 141*906afcb8SAndy Fiddaman case $verbose in 142*906afcb8SAndy Fiddaman 1) case $complete in 143*906afcb8SAndy Fiddaman 1) failure ;; 144*906afcb8SAndy Fiddaman esac 145*906afcb8SAndy Fiddaman oo=$1 146*906afcb8SAndy Fiddaman shift 147*906afcb8SAndy Fiddaman case $1 in 148*906afcb8SAndy Fiddaman ?*) yy=is 149*906afcb8SAndy Fiddaman ii=$1 150*906afcb8SAndy Fiddaman complete=1 151*906afcb8SAndy Fiddaman case $oo in 152*906afcb8SAndy Fiddaman cmd) mm="a command" ;; 153*906afcb8SAndy Fiddaman dat) mm="a library data symbol" ;; 154*906afcb8SAndy Fiddaman dfn) mm="a macro with extractable value" ;; 155*906afcb8SAndy Fiddaman exp) mm="true" ;; 156*906afcb8SAndy Fiddaman hdr) mm="a header" ;; 157*906afcb8SAndy Fiddaman id) mm="an identifier" ;; 158*906afcb8SAndy Fiddaman lcl) mm="a native header" ;; 159*906afcb8SAndy Fiddaman key) mm="a reserved keyword" ;; 160*906afcb8SAndy Fiddaman lib) mm="a library function" ;; 161*906afcb8SAndy Fiddaman LIB) case $2 in 162*906afcb8SAndy Fiddaman "") mm="a library" ;; 163*906afcb8SAndy Fiddaman *) ii=$*; mm="a library group" ;; 164*906afcb8SAndy Fiddaman esac 165*906afcb8SAndy Fiddaman ;; 166*906afcb8SAndy Fiddaman mac) mm="a macro" ;; 167*906afcb8SAndy Fiddaman mem) mm="a member of $2" ;; 168*906afcb8SAndy Fiddaman mth) mm="a math library symbol" ;; 169*906afcb8SAndy Fiddaman nos) mm="a non-opaque struct" ;; 170*906afcb8SAndy Fiddaman npt) mm="a symbol that needs a prototype" ;; 171*906afcb8SAndy Fiddaman num) mm="a numeric constant or enum" ;; 172*906afcb8SAndy Fiddaman nxt) mm="an include path for the native header" ;; 173*906afcb8SAndy Fiddaman opt) mm="set in \$PACKAGE_OPTIONS" ;; 174*906afcb8SAndy Fiddaman pth) mm="a file" ;; 175*906afcb8SAndy Fiddaman run) yy="capture output of" mm= ;; 176*906afcb8SAndy Fiddaman siz) mm="a type with known size" ;; 177*906afcb8SAndy Fiddaman sym) mm="a typed variable" ;; 178*906afcb8SAndy Fiddaman sys) mm="a system header" ;; 179*906afcb8SAndy Fiddaman typ) mm="a type or typedef" ;; 180*906afcb8SAndy Fiddaman val) yy="determine" mm="value" ;; 181*906afcb8SAndy Fiddaman *) yy= mm= ;; 182*906afcb8SAndy Fiddaman esac 183*906afcb8SAndy Fiddaman case $ii in 184*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyz]*[abcdefghijklmnopqrstuvwxyz]'{') ii="$ii ... }end" ;; 185*906afcb8SAndy Fiddaman esac 186*906afcb8SAndy Fiddaman $show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr 187*906afcb8SAndy Fiddaman complete=1 188*906afcb8SAndy Fiddaman ;; 189*906afcb8SAndy Fiddaman esac 190*906afcb8SAndy Fiddaman ;; 191*906afcb8SAndy Fiddaman esac 192*906afcb8SAndy Fiddaman} 193*906afcb8SAndy Fiddaman 194*906afcb8SAndy Fiddamansuccess() 195*906afcb8SAndy Fiddaman{ 196*906afcb8SAndy Fiddaman case $1 in 197*906afcb8SAndy Fiddaman -) shift 198*906afcb8SAndy Fiddaman ;; 199*906afcb8SAndy Fiddaman *) case $result in 200*906afcb8SAndy Fiddaman UNKNOWN) result=SUCCESS ;; 201*906afcb8SAndy Fiddaman esac 202*906afcb8SAndy Fiddaman case $1 in 203*906afcb8SAndy Fiddaman +) return ;; 204*906afcb8SAndy Fiddaman esac 205*906afcb8SAndy Fiddaman ;; 206*906afcb8SAndy Fiddaman esac 207*906afcb8SAndy Fiddaman case $complete:$verbose in 208*906afcb8SAndy Fiddaman 1:1) case $suspended in 209*906afcb8SAndy Fiddaman 1) suspended=0 210*906afcb8SAndy Fiddaman $show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr 211*906afcb8SAndy Fiddaman ;; 212*906afcb8SAndy Fiddaman esac 213*906afcb8SAndy Fiddaman complete=0 214*906afcb8SAndy Fiddaman case $# in 215*906afcb8SAndy Fiddaman 0) mm="yes" ;; 216*906afcb8SAndy Fiddaman *) mm="'$*'" ;; 217*906afcb8SAndy Fiddaman esac 218*906afcb8SAndy Fiddaman case $debug in 219*906afcb8SAndy Fiddaman 0) echo " $mm" >&$stderr ;; 220*906afcb8SAndy Fiddaman *) echo "$command: ... $mm" >&$stderr ;; 221*906afcb8SAndy Fiddaman esac 222*906afcb8SAndy Fiddaman ;; 223*906afcb8SAndy Fiddaman esac 224*906afcb8SAndy Fiddaman} 225*906afcb8SAndy Fiddaman 226*906afcb8SAndy Fiddamanfailure() 227*906afcb8SAndy Fiddaman{ 228*906afcb8SAndy Fiddaman case $1 in 229*906afcb8SAndy Fiddaman -) shift ;; 230*906afcb8SAndy Fiddaman *) result=FAILURE 231*906afcb8SAndy Fiddaman case $1 in 232*906afcb8SAndy Fiddaman +) return ;; 233*906afcb8SAndy Fiddaman esac 234*906afcb8SAndy Fiddaman ;; 235*906afcb8SAndy Fiddaman esac 236*906afcb8SAndy Fiddaman case $complete:$verbose in 237*906afcb8SAndy Fiddaman 1:1) case $suspended in 238*906afcb8SAndy Fiddaman 1) suspended=0 239*906afcb8SAndy Fiddaman $show "$command: test:" $yy $ii $mm "...$SHOW" >&$stderr 240*906afcb8SAndy Fiddaman ;; 241*906afcb8SAndy Fiddaman esac 242*906afcb8SAndy Fiddaman complete=0 243*906afcb8SAndy Fiddaman case $group in 244*906afcb8SAndy Fiddaman '') case $# in 245*906afcb8SAndy Fiddaman 0) mm="no" ;; 246*906afcb8SAndy Fiddaman *) mm=$* ;; 247*906afcb8SAndy Fiddaman esac 248*906afcb8SAndy Fiddaman ;; 249*906afcb8SAndy Fiddaman *) mm= 250*906afcb8SAndy Fiddaman ;; 251*906afcb8SAndy Fiddaman esac 252*906afcb8SAndy Fiddaman case $debug in 253*906afcb8SAndy Fiddaman 0) echo " $mm" >&$stderr ;; 254*906afcb8SAndy Fiddaman *) echo "$command: ... $mm" >&$stderr ;; 255*906afcb8SAndy Fiddaman esac 256*906afcb8SAndy Fiddaman ;; 257*906afcb8SAndy Fiddaman esac 258*906afcb8SAndy Fiddaman} 259*906afcb8SAndy Fiddaman 260*906afcb8SAndy Fiddaman# report 261*906afcb8SAndy Fiddaman# 262*906afcb8SAndy Fiddaman# - ignore global status 263*906afcb8SAndy Fiddaman# -0 normal sense 264*906afcb8SAndy Fiddaman# -1 inverted sense if ! def 265*906afcb8SAndy Fiddaman# status test status 0:success *:failure 266*906afcb8SAndy Fiddaman# success success comment 267*906afcb8SAndy Fiddaman# failure failure comment 268*906afcb8SAndy Fiddaman# default default setting comment 269*906afcb8SAndy Fiddaman# 270*906afcb8SAndy Fiddaman# globals 271*906afcb8SAndy Fiddaman# 272*906afcb8SAndy Fiddaman# $not invert test sense 273*906afcb8SAndy Fiddaman# $M test variable 274*906afcb8SAndy Fiddaman# $m test macro 275*906afcb8SAndy Fiddaman# $v default macro 276*906afcb8SAndy Fiddaman 277*906afcb8SAndy Fiddamanreport() # [-] [-0] [-1] status value success failure default 278*906afcb8SAndy Fiddaman{ 279*906afcb8SAndy Fiddaman case $1 in 280*906afcb8SAndy Fiddaman -) _report_ignore=$1 281*906afcb8SAndy Fiddaman shift 282*906afcb8SAndy Fiddaman ;; 283*906afcb8SAndy Fiddaman *) _report_ignore= 284*906afcb8SAndy Fiddaman ;; 285*906afcb8SAndy Fiddaman esac 286*906afcb8SAndy Fiddaman _report_not=$not 287*906afcb8SAndy Fiddaman case $1 in 288*906afcb8SAndy Fiddaman -0) shift 289*906afcb8SAndy Fiddaman ;; 290*906afcb8SAndy Fiddaman -1) shift 291*906afcb8SAndy Fiddaman case $def in 292*906afcb8SAndy Fiddaman ''|-) case $_report_not in 293*906afcb8SAndy Fiddaman 1) _report_not= ;; 294*906afcb8SAndy Fiddaman *) _report_not=1 ;; 295*906afcb8SAndy Fiddaman esac 296*906afcb8SAndy Fiddaman ;; 297*906afcb8SAndy Fiddaman esac 298*906afcb8SAndy Fiddaman ;; 299*906afcb8SAndy Fiddaman esac 300*906afcb8SAndy Fiddaman _report_status=$1 301*906afcb8SAndy Fiddaman case $_report_ignore:$_report_status in 302*906afcb8SAndy Fiddaman -:*) ;; 303*906afcb8SAndy Fiddaman *:0) success $_report_ignore 304*906afcb8SAndy Fiddaman ;; 305*906afcb8SAndy Fiddaman *) failure $_report_ignore 306*906afcb8SAndy Fiddaman case $group in 307*906afcb8SAndy Fiddaman ?*) return ;; 308*906afcb8SAndy Fiddaman esac 309*906afcb8SAndy Fiddaman ;; 310*906afcb8SAndy Fiddaman esac 311*906afcb8SAndy Fiddaman _report_value=$2 312*906afcb8SAndy Fiddaman case $_report_not in 313*906afcb8SAndy Fiddaman 1) case $_report_status in 314*906afcb8SAndy Fiddaman 0) _report_status=1 ;; 315*906afcb8SAndy Fiddaman *) _report_status=0 ;; 316*906afcb8SAndy Fiddaman esac 317*906afcb8SAndy Fiddaman _report_success=$4 318*906afcb8SAndy Fiddaman _report_failure=$3 319*906afcb8SAndy Fiddaman ;; 320*906afcb8SAndy Fiddaman *) _report_success=$3 321*906afcb8SAndy Fiddaman _report_failure=$4 322*906afcb8SAndy Fiddaman ;; 323*906afcb8SAndy Fiddaman esac 324*906afcb8SAndy Fiddaman _report_default=$5 325*906afcb8SAndy Fiddaman case $_report_status in 326*906afcb8SAndy Fiddaman 0) case $M in 327*906afcb8SAndy Fiddaman *-*) ;; 328*906afcb8SAndy Fiddaman *) usr="$usr$nl#define $m $_report_value" 329*906afcb8SAndy Fiddaman case $_report_success in 330*906afcb8SAndy Fiddaman ''|-) ;; 331*906afcb8SAndy Fiddaman *) case $define in 332*906afcb8SAndy Fiddaman 1) echo "#define $m $_report_value /* $_report_success */" ;; 333*906afcb8SAndy Fiddaman n) echo "$m=$_report_value" 334*906afcb8SAndy Fiddaman esac 335*906afcb8SAndy Fiddaman ;; 336*906afcb8SAndy Fiddaman esac 337*906afcb8SAndy Fiddaman eval $m=\'$_report_value\' 338*906afcb8SAndy Fiddaman ;; 339*906afcb8SAndy Fiddaman esac 340*906afcb8SAndy Fiddaman ;; 341*906afcb8SAndy Fiddaman *) case $M in 342*906afcb8SAndy Fiddaman *-*) ;; 343*906afcb8SAndy Fiddaman *) case $_report_failure in 344*906afcb8SAndy Fiddaman ''|-) ;; 345*906afcb8SAndy Fiddaman *) case $define$all$config$undef in 346*906afcb8SAndy Fiddaman 1?1?|1??1)echo "#undef $m /* $_report_failure */" ;; 347*906afcb8SAndy Fiddaman 11??) echo "#define $m 0 /* $_report_failure */" ;; 348*906afcb8SAndy Fiddaman n1?1) echo "$m=" ;; 349*906afcb8SAndy Fiddaman n1??) echo "$m=0" ;; 350*906afcb8SAndy Fiddaman esac 351*906afcb8SAndy Fiddaman ;; 352*906afcb8SAndy Fiddaman esac 353*906afcb8SAndy Fiddaman case $_report_default in 354*906afcb8SAndy Fiddaman ''|-) ;; 355*906afcb8SAndy Fiddaman *) case $define$set in 356*906afcb8SAndy Fiddaman 1?*) echo "#define $v $set /* $_report_default */" ;; 357*906afcb8SAndy Fiddaman n?*) echo "$v=$set" ;; 358*906afcb8SAndy Fiddaman esac 359*906afcb8SAndy Fiddaman ;; 360*906afcb8SAndy Fiddaman esac 361*906afcb8SAndy Fiddaman eval $m=0 362*906afcb8SAndy Fiddaman ;; 363*906afcb8SAndy Fiddaman esac 364*906afcb8SAndy Fiddaman ;; 365*906afcb8SAndy Fiddaman esac 366*906afcb8SAndy Fiddaman} 367*906afcb8SAndy Fiddaman 368*906afcb8SAndy Fiddamannoisy() 369*906afcb8SAndy Fiddaman{ 370*906afcb8SAndy Fiddaman case $complete:$verbose in 371*906afcb8SAndy Fiddaman 1:1) suspended=1 372*906afcb8SAndy Fiddaman echo >&$stderr 373*906afcb8SAndy Fiddaman ;; 374*906afcb8SAndy Fiddaman esac 375*906afcb8SAndy Fiddaman} 376*906afcb8SAndy Fiddaman 377*906afcb8SAndy Fiddamanhere_broken=0 378*906afcb8SAndy Fiddaman 379*906afcb8SAndy Fiddamanliteral() # line that echo might process 380*906afcb8SAndy Fiddaman{ 381*906afcb8SAndy Fiddaman if cat <<! 382*906afcb8SAndy Fiddaman$* 383*906afcb8SAndy Fiddaman! 384*906afcb8SAndy Fiddaman then : old here doc botch not present 385*906afcb8SAndy Fiddaman else case $here_broken in 386*906afcb8SAndy Fiddaman 0) here_broken=1 387*906afcb8SAndy Fiddaman echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr 388*906afcb8SAndy Fiddaman ;; 389*906afcb8SAndy Fiddaman esac 390*906afcb8SAndy Fiddaman sh -c "cat <<! 391*906afcb8SAndy Fiddaman$* 392*906afcb8SAndy Fiddaman! 393*906afcb8SAndy Fiddaman" 394*906afcb8SAndy Fiddaman fi 395*906afcb8SAndy Fiddaman} 396*906afcb8SAndy Fiddaman 397*906afcb8SAndy Fiddamancopy() # "output-file" "data-that-must-not-be-processed-by-echo" 398*906afcb8SAndy Fiddaman{ 399*906afcb8SAndy Fiddaman case $1 in 400*906afcb8SAndy Fiddaman -) case $shell in 401*906afcb8SAndy Fiddaman ksh) print -r - "$2" 402*906afcb8SAndy Fiddaman ;; 403*906afcb8SAndy Fiddaman *) if cat <<! 404*906afcb8SAndy Fiddaman$2 405*906afcb8SAndy Fiddaman! 406*906afcb8SAndy Fiddaman then : ancient here doc botch not present 407*906afcb8SAndy Fiddaman else case $here_broken in 408*906afcb8SAndy Fiddaman 0) here_broken=1 409*906afcb8SAndy Fiddaman echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr 410*906afcb8SAndy Fiddaman ;; 411*906afcb8SAndy Fiddaman esac 412*906afcb8SAndy Fiddaman sh -c "cat <<! 413*906afcb8SAndy Fiddaman$2 414*906afcb8SAndy Fiddaman! 415*906afcb8SAndy Fiddaman" 416*906afcb8SAndy Fiddaman fi 417*906afcb8SAndy Fiddaman ;; 418*906afcb8SAndy Fiddaman esac 419*906afcb8SAndy Fiddaman ;; 420*906afcb8SAndy Fiddaman *) case $shell in 421*906afcb8SAndy Fiddaman ksh) print -r - "$2" > "$1" 422*906afcb8SAndy Fiddaman ;; 423*906afcb8SAndy Fiddaman *) if cat > "$1" <<! 424*906afcb8SAndy Fiddaman$2 425*906afcb8SAndy Fiddaman! 426*906afcb8SAndy Fiddaman then : ancient here doc botch not present 427*906afcb8SAndy Fiddaman else case $here_broken in 428*906afcb8SAndy Fiddaman 0) here_broken=1 429*906afcb8SAndy Fiddaman echo "$command: your shell botches here documents; this was fixed back in the 80's" >&$stderr 430*906afcb8SAndy Fiddaman ;; 431*906afcb8SAndy Fiddaman esac 432*906afcb8SAndy Fiddaman sh -c "cat > \"$1\" <<! 433*906afcb8SAndy Fiddaman$2 434*906afcb8SAndy Fiddaman! 435*906afcb8SAndy Fiddaman" 436*906afcb8SAndy Fiddaman fi 437*906afcb8SAndy Fiddaman ;; 438*906afcb8SAndy Fiddaman esac 439*906afcb8SAndy Fiddaman ;; 440*906afcb8SAndy Fiddaman esac 441*906afcb8SAndy Fiddaman} 442*906afcb8SAndy Fiddaman 443*906afcb8SAndy Fiddaman# verify that cc is a C compiler 444*906afcb8SAndy Fiddaman 445*906afcb8SAndy Fiddamancheckcc() 446*906afcb8SAndy Fiddaman{ 447*906afcb8SAndy Fiddaman # check for local package root directories 448*906afcb8SAndy Fiddaman 449*906afcb8SAndy Fiddaman case $PACKAGE_PATH in 450*906afcb8SAndy Fiddaman ?*) for i in `echo $PACKAGE_PATH | sed 's,:, ,g'` 451*906afcb8SAndy Fiddaman do if test -d $i/include 452*906afcb8SAndy Fiddaman then cc="$cc -I$i/include" 453*906afcb8SAndy Fiddaman occ="$occ -I$i/include" 454*906afcb8SAndy Fiddaman fi 455*906afcb8SAndy Fiddaman if test -d $i/lib 456*906afcb8SAndy Fiddaman then cc="$cc -L$i/lib" 457*906afcb8SAndy Fiddaman occ="$occ -L$i/lib" 458*906afcb8SAndy Fiddaman for y in $libpaths 459*906afcb8SAndy Fiddaman do eval $y=\"\$$y:\$i/lib\$${y}_default\" 460*906afcb8SAndy Fiddaman eval export $y 461*906afcb8SAndy Fiddaman done 462*906afcb8SAndy Fiddaman fi 463*906afcb8SAndy Fiddaman done 464*906afcb8SAndy Fiddaman ;; 465*906afcb8SAndy Fiddaman esac 466*906afcb8SAndy Fiddaman echo "int i = 1;" > $tmp.c 467*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 468*906afcb8SAndy Fiddaman then echo "(;" > $tmp.c 469*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 470*906afcb8SAndy Fiddaman then cctest="should not compile '(;'" 471*906afcb8SAndy Fiddaman fi 472*906afcb8SAndy Fiddaman else cctest="should compile 'int i = 1;'" 473*906afcb8SAndy Fiddaman fi 474*906afcb8SAndy Fiddaman case $cctest in 475*906afcb8SAndy Fiddaman "") cctest=0 476*906afcb8SAndy Fiddaman ;; 477*906afcb8SAndy Fiddaman *) echo "$command: $cc: not a C compiler: $cctest" >&$stderr 478*906afcb8SAndy Fiddaman exit 1 479*906afcb8SAndy Fiddaman ;; 480*906afcb8SAndy Fiddaman esac 481*906afcb8SAndy Fiddaman} 482*906afcb8SAndy Fiddaman 483*906afcb8SAndy Fiddamancheckread() 484*906afcb8SAndy Fiddaman{ 485*906afcb8SAndy Fiddaman case $cctest in 486*906afcb8SAndy Fiddaman "") checkcc ;; 487*906afcb8SAndy Fiddaman esac 488*906afcb8SAndy Fiddaman case $posix_read in 489*906afcb8SAndy Fiddaman -no) ;; 490*906afcb8SAndy Fiddaman *) posix_read=`(read -r _checkread_line; echo $_checkread_line) 2>/dev/null <<! 491*906afcb8SAndy Fiddamana z 492*906afcb8SAndy Fiddaman! 493*906afcb8SAndy Fiddaman` 494*906afcb8SAndy Fiddaman ;; 495*906afcb8SAndy Fiddaman esac 496*906afcb8SAndy Fiddaman case $posix_read in 497*906afcb8SAndy Fiddaman "a z") posix_read=1 498*906afcb8SAndy Fiddaman ;; 499*906afcb8SAndy Fiddaman *) copy ${tmp}r.c " 500*906afcb8SAndy Fiddaman extern int read(); 501*906afcb8SAndy Fiddaman extern int write(); 502*906afcb8SAndy Fiddaman int main() 503*906afcb8SAndy Fiddaman { 504*906afcb8SAndy Fiddaman char c; 505*906afcb8SAndy Fiddaman char r; 506*906afcb8SAndy Fiddaman int k; 507*906afcb8SAndy Fiddaman char s[32]; 508*906afcb8SAndy Fiddaman k = 0; 509*906afcb8SAndy Fiddaman while (read(0, &c, 1) == 1) 510*906afcb8SAndy Fiddaman { 511*906afcb8SAndy Fiddaman if (k >= 0) 512*906afcb8SAndy Fiddaman { 513*906afcb8SAndy Fiddaman if (c == ' ' || c == '\\t') 514*906afcb8SAndy Fiddaman { 515*906afcb8SAndy Fiddaman if (k < sizeof(s)) 516*906afcb8SAndy Fiddaman s[k++] = c; 517*906afcb8SAndy Fiddaman continue; 518*906afcb8SAndy Fiddaman } 519*906afcb8SAndy Fiddaman if (k > 1 && c != '#' && c != '\\n' && c != '\\r') 520*906afcb8SAndy Fiddaman write(1, s + 1, k - 1); 521*906afcb8SAndy Fiddaman k = -1; 522*906afcb8SAndy Fiddaman } 523*906afcb8SAndy Fiddaman if (c == '\\r') 524*906afcb8SAndy Fiddaman { 525*906afcb8SAndy Fiddaman r = c; 526*906afcb8SAndy Fiddaman if (read(0, &c, 1) == 1 && c != '\\n') 527*906afcb8SAndy Fiddaman write(1, &r, 1); 528*906afcb8SAndy Fiddaman } 529*906afcb8SAndy Fiddaman write(1, &c, 1); 530*906afcb8SAndy Fiddaman if (c == '\\n') 531*906afcb8SAndy Fiddaman return 0; 532*906afcb8SAndy Fiddaman } 533*906afcb8SAndy Fiddaman return 1; 534*906afcb8SAndy Fiddaman }" 535*906afcb8SAndy Fiddaman if compile $cc -o ${tmp}r.exe ${tmp}r.c >&$nullout 536*906afcb8SAndy Fiddaman then posix_read=${tmp}r.exe 537*906afcb8SAndy Fiddaman else echo "$command: cannot compile read -r workaround" >&$stderr 538*906afcb8SAndy Fiddaman exit 1 539*906afcb8SAndy Fiddaman fi 540*906afcb8SAndy Fiddaman ;; 541*906afcb8SAndy Fiddaman esac 542*906afcb8SAndy Fiddaman} 543*906afcb8SAndy Fiddaman 544*906afcb8SAndy Fiddamanexecute() 545*906afcb8SAndy Fiddaman{ 546*906afcb8SAndy Fiddaman case $verbose in 547*906afcb8SAndy Fiddaman 0) noteout=$nullout ;; 548*906afcb8SAndy Fiddaman *) noteout=$stderr ;; 549*906afcb8SAndy Fiddaman esac 550*906afcb8SAndy Fiddaman if test "" != "$cross" 551*906afcb8SAndy Fiddaman then crossexec $cross "$@" 9>&$noteout 552*906afcb8SAndy Fiddaman _execute_=$? 553*906afcb8SAndy Fiddaman elif test -d /NextDeveloper 554*906afcb8SAndy Fiddaman then "$@" <&$nullin >&$nullout 9>&$noteout 555*906afcb8SAndy Fiddaman _execute_=$? 556*906afcb8SAndy Fiddaman "$@" <&$nullin | cat 557*906afcb8SAndy Fiddaman else "$@" 9>&$noteout 558*906afcb8SAndy Fiddaman _execute_=$? 559*906afcb8SAndy Fiddaman fi 560*906afcb8SAndy Fiddaman return $_execute_ 561*906afcb8SAndy Fiddaman} 562*906afcb8SAndy Fiddaman 563*906afcb8SAndy Fiddamanexclude() 564*906afcb8SAndy Fiddaman{ 565*906afcb8SAndy Fiddaman case $excludes in 566*906afcb8SAndy Fiddaman '') return 0 ;; 567*906afcb8SAndy Fiddaman esac 568*906afcb8SAndy Fiddaman for _exclude_var 569*906afcb8SAndy Fiddaman do eval _exclude_old=\$$_exclude_var 570*906afcb8SAndy Fiddaman case $_exclude_old in 571*906afcb8SAndy Fiddaman *" -I"*);; 572*906afcb8SAndy Fiddaman *) continue ;; 573*906afcb8SAndy Fiddaman esac 574*906afcb8SAndy Fiddaman _exclude_new= 575*906afcb8SAndy Fiddaman _exclude_sep= 576*906afcb8SAndy Fiddaman for _exclude_arg in $_exclude_old 577*906afcb8SAndy Fiddaman do _exclude_skip= 578*906afcb8SAndy Fiddaman for _exclude_dir in $excludes 579*906afcb8SAndy Fiddaman do case $_exclude_arg in 580*906afcb8SAndy Fiddaman -I$_exclude_dir|-I*/$_exclude_dir) 581*906afcb8SAndy Fiddaman _exclude_skip=1 582*906afcb8SAndy Fiddaman break; 583*906afcb8SAndy Fiddaman ;; 584*906afcb8SAndy Fiddaman esac 585*906afcb8SAndy Fiddaman done 586*906afcb8SAndy Fiddaman case $_exclude_skip in 587*906afcb8SAndy Fiddaman '') _exclude_new="$_exclude_new$_exclude_sep$_exclude_arg" 588*906afcb8SAndy Fiddaman _exclude_sep=" " 589*906afcb8SAndy Fiddaman ;; 590*906afcb8SAndy Fiddaman esac 591*906afcb8SAndy Fiddaman done 592*906afcb8SAndy Fiddaman eval $_exclude_var=\$_exclude_new 593*906afcb8SAndy Fiddaman case $debug in 594*906afcb8SAndy Fiddaman 0) ;; 595*906afcb8SAndy Fiddaman *) echo $command: exclude $_exclude_var: "$_exclude_old => $_exclude_new" >&$stderr 596*906afcb8SAndy Fiddaman ;; 597*906afcb8SAndy Fiddaman esac 598*906afcb8SAndy Fiddaman done 599*906afcb8SAndy Fiddaman} 600*906afcb8SAndy Fiddaman 601*906afcb8SAndy Fiddamanall=0 602*906afcb8SAndy Fiddamanapis= 603*906afcb8SAndy Fiddamanbinding="-dy -dn -Bdynamic -Bstatic -Wl,-ashared -Wl,-aarchive -call_shared -non_shared '' -static" 604*906afcb8SAndy Fiddamancomplete=0 605*906afcb8SAndy Fiddamanconfig=0 606*906afcb8SAndy Fiddamandefhdr= 607*906afcb8SAndy Fiddamandefine=1 608*906afcb8SAndy Fiddamanexplicit=0 609*906afcb8SAndy Fiddamaniff= 610*906afcb8SAndy Fiddamanusr= 611*906afcb8SAndy Fiddamancross= 612*906afcb8SAndy Fiddamandebug=0 613*906afcb8SAndy Fiddamandeflib= 614*906afcb8SAndy Fiddamandir=FEATURE 615*906afcb8SAndy Fiddamanexcludes= 616*906afcb8SAndy Fiddamanexecutable="test -x" 617*906afcb8SAndy Fiddamanexists="test -e" 618*906afcb8SAndy Fiddamangothdr= 619*906afcb8SAndy Fiddamangotlib= 620*906afcb8SAndy Fiddamanidno= 621*906afcb8SAndy Fiddamanidyes= 622*906afcb8SAndy Fiddamanifs=${IFS-' 623*906afcb8SAndy Fiddaman '} 624*906afcb8SAndy Fiddamanin= 625*906afcb8SAndy Fiddamanincludes= 626*906afcb8SAndy Fiddamanintrinsic= 627*906afcb8SAndy Fiddamanlibpaths="LD_LIBRARY_PATH LD_LIBRARYN32_PATH LD_LIBRARY64_PATH LIBPATH SHLIB_PATH" 628*906afcb8SAndy Fiddaman LD_LIBRARY_PATH_default=:/lib:/usr/lib 629*906afcb8SAndy Fiddaman LD_LIBRARYN32_PATH_default=:/lib32:/usr/lib32 630*906afcb8SAndy Fiddaman LD_LIBRARY64_PATH_default=:/lib64:/usr/lib64 631*906afcb8SAndy Fiddaman LIBPATH_default=:/lib:/usr/lib 632*906afcb8SAndy Fiddaman SHLIB_PATH_default=:/shlib:/usr/shlib:/lib:/usr/lib 633*906afcb8SAndy Fiddamannl=" 634*906afcb8SAndy Fiddaman" 635*906afcb8SAndy Fiddamanoptimize=1 636*906afcb8SAndy Fiddamanocc=cc 637*906afcb8SAndy Fiddamanone= 638*906afcb8SAndy Fiddamanout= 639*906afcb8SAndy Fiddamanposix_read=-check 640*906afcb8SAndy Fiddamancase `(set -f && set x * && echo $# && set +f) 2>/dev/null` in 641*906afcb8SAndy Fiddaman2) posix_noglob="set -f" posix_glob="set +f" ;; 642*906afcb8SAndy Fiddaman*) case `(set -F && set x * && echo $# && set +F) 2>/dev/null` in 643*906afcb8SAndy Fiddaman 2) posix_noglob="set -F" posix_glob="set +F" ;; 644*906afcb8SAndy Fiddaman *) posix_noglob=":" posix_glob=":" ;; 645*906afcb8SAndy Fiddaman esac 646*906afcb8SAndy Fiddaman ;; 647*906afcb8SAndy Fiddamanesac 648*906afcb8SAndy Fiddamanprotoflags= 649*906afcb8SAndy Fiddamanputhdr= 650*906afcb8SAndy Fiddamanputlib= 651*906afcb8SAndy Fiddamanpragma= 652*906afcb8SAndy Fiddamancase $RANDOM in 653*906afcb8SAndy Fiddaman$RANDOM)shell=bsh 654*906afcb8SAndy Fiddaman ($executable .) 2>/dev/null || executable='test -r' 655*906afcb8SAndy Fiddaman ($exists .) 2>/dev/null || exists='test -r' 656*906afcb8SAndy Fiddaman ;; 657*906afcb8SAndy Fiddaman*) case $BASH_VERSION in 658*906afcb8SAndy Fiddaman ?*) shell=bash ;; 659*906afcb8SAndy Fiddaman *) shell=ksh ;; 660*906afcb8SAndy Fiddaman esac 661*906afcb8SAndy Fiddaman ;; 662*906afcb8SAndy Fiddamanesac 663*906afcb8SAndy Fiddamanreallystatic= 664*906afcb8SAndy Fiddamanreallystatictest= 665*906afcb8SAndy Fiddamanregress= 666*906afcb8SAndy Fiddamanstatic=. 667*906afcb8SAndy Fiddamanstatictest= 668*906afcb8SAndy Fiddamancase $COTEMP in 669*906afcb8SAndy Fiddaman"") case $HOSTNAME in 670*906afcb8SAndy Fiddaman ""|?|??|???|????|????) 671*906afcb8SAndy Fiddaman tmp=${HOSTNAME} 672*906afcb8SAndy Fiddaman ;; 673*906afcb8SAndy Fiddaman *) case $shell in 674*906afcb8SAndy Fiddaman bsh) eval `echo $HOSTNAME | sed 's/\\(....\\).*/tmp=\\1/'` ;; 675*906afcb8SAndy Fiddaman *) eval 'tmp=${HOSTNAME%${HOSTNAME#????}}' ;; 676*906afcb8SAndy Fiddaman esac 677*906afcb8SAndy Fiddaman ;; 678*906afcb8SAndy Fiddaman esac 679*906afcb8SAndy Fiddaman tmp=${tmp}$$ 680*906afcb8SAndy Fiddaman ;; 681*906afcb8SAndy Fiddaman*) tmp=x${COTEMP} 682*906afcb8SAndy Fiddaman ;; 683*906afcb8SAndy Fiddamanesac 684*906afcb8SAndy FiddamanCOTEMP=${tmp} 685*906afcb8SAndy Fiddamanexport COTEMP 686*906afcb8SAndy Fiddamancase $tmp in 687*906afcb8SAndy Fiddaman./*) ;; 688*906afcb8SAndy Fiddaman??????????*) 689*906afcb8SAndy Fiddaman case $shell in 690*906afcb8SAndy Fiddaman bsh) eval `echo $tmp | sed 's/\\(.........\\).*/tmp=\\1/'` ;; 691*906afcb8SAndy Fiddaman *) eval 'tmp=${tmp%${tmp#?????????}}' ;; 692*906afcb8SAndy Fiddaman esac 693*906afcb8SAndy Fiddaman ;; 694*906afcb8SAndy Fiddaman?????????) 695*906afcb8SAndy Fiddaman ;; 696*906afcb8SAndy Fiddaman????????) 697*906afcb8SAndy Fiddaman tmp=F$tmp 698*906afcb8SAndy Fiddaman ;; 699*906afcb8SAndy Fiddamanesac 700*906afcb8SAndy Fiddamancase $tmp in 701*906afcb8SAndy Fiddaman./*) ;; 702*906afcb8SAndy Fiddaman*) tmp=./$tmp ;; 703*906afcb8SAndy Fiddamanesac 704*906afcb8SAndy Fiddamanundef=0 705*906afcb8SAndy Fiddamanverbose=0 706*906afcb8SAndy Fiddamanvers= 707*906afcb8SAndy Fiddaman 708*906afcb8SAndy Fiddaman# options -- `-' for output to stdout otherwise usage 709*906afcb8SAndy Fiddaman 710*906afcb8SAndy Fiddamancase $1 in 711*906afcb8SAndy Fiddaman-) out=-; shift ;; 712*906afcb8SAndy Fiddamanesac 713*906afcb8SAndy Fiddamanset= 714*906afcb8SAndy Fiddaman 715*906afcb8SAndy Fiddamancase `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in 716*906afcb8SAndy Fiddaman0123) USAGE=$' 717*906afcb8SAndy Fiddaman[-? 718*906afcb8SAndy Fiddaman@(#)$Id: iffe (AT&T Research) 2012-07-17 $ 719*906afcb8SAndy Fiddaman] 720*906afcb8SAndy Fiddaman'$USAGE_LICENSE$' 721*906afcb8SAndy Fiddaman[+NAME?iffe - C compilation environment feature probe] 722*906afcb8SAndy Fiddaman[+DESCRIPTION?\biffe\b is a command interpreter that probes the C 723*906afcb8SAndy Fiddaman compilation environment for features. A feature is any file, option 724*906afcb8SAndy Fiddaman or symbol that controls or is controlled by the C compiler. \biffe\b 725*906afcb8SAndy Fiddaman tests features by generating and compiling C programs and observing 726*906afcb8SAndy Fiddaman the behavior of the C compiler and generated programs.] 727*906afcb8SAndy Fiddaman[+?\biffe\b statements are line oriented. Statements may appear in the 728*906afcb8SAndy Fiddaman operand list with the \b:\b operand or \bnewline\b as the line 729*906afcb8SAndy Fiddaman delimiter. The standard input is read if there are no command 730*906afcb8SAndy Fiddaman line statements or if \afile\a\b.iffe\b is omitted.] 731*906afcb8SAndy Fiddaman[+?Though similar in concept to \bautoconf\b(1) and \bconfig\b(1), there 732*906afcb8SAndy Fiddaman are fundamental differences. The latter tend to generate global 733*906afcb8SAndy Fiddaman headers accessed by all components in a package, whereas \biffe\b is 734*906afcb8SAndy Fiddaman aimed at localized, self contained feature testing.] 735*906afcb8SAndy Fiddaman[+?Output is generated in \bFEATURE/\b\atest\a by default, where \atest\a is 736*906afcb8SAndy Fiddaman the base name of \afile\a\b.iffe\b or the \biffe\b \brun\b 737*906afcb8SAndy Fiddaman file operand. Output is first generated in a temporary file; the 738*906afcb8SAndy Fiddaman output file is updated if it does not exist or if the temporary file 739*906afcb8SAndy Fiddaman is different. If the first operand is \b-\b then the output is written 740*906afcb8SAndy Fiddaman to the standard output and no update checks are done.] 741*906afcb8SAndy Fiddaman[+?Files with suffixes \b.iffe\b and \b.iff\b are assumed to contain 742*906afcb8SAndy Fiddaman \biffe\b statements.] 743*906afcb8SAndy Fiddaman[a:all?Define failed test macros \b0\b. By default only successful test macros 744*906afcb8SAndy Fiddaman are defined \b1\b.] 745*906afcb8SAndy Fiddaman[c:cc?Sets the C compiler name and flags to be used in the feature 746*906afcb8SAndy Fiddaman tests.]:[C-compiler-name [C-compiler-flags ...]]] 747*906afcb8SAndy Fiddaman[C:config?Generate \bconfig\b(1) style \aHAVE_\a* macro names. This implies 748*906afcb8SAndy Fiddaman \b--undef\b. Since \bconfig\b(1) has inconsistent naming conventions, 749*906afcb8SAndy Fiddaman the \bexp\b op may be needed to translate from the (consistent) 750*906afcb8SAndy Fiddaman \biffe\b names. Unless otherwise noted a \bconfig\b macro name 751*906afcb8SAndy Fiddaman is the \biffe\b macro name prefixed with \bHAVE\b and converted to 752*906afcb8SAndy Fiddaman upper case. \b--config\b is set by default if the command arguments 753*906afcb8SAndy Fiddaman contain a \brun\b op on an input file with the base name \bconfig\b.] 754*906afcb8SAndy Fiddaman[d:debug?Sets the debug level. Level 0 inhibits most 755*906afcb8SAndy Fiddaman error messages, level 1 shows compiler messages, and 756*906afcb8SAndy Fiddaman level 2 traces internal \biffe\b \bsh\b(1) actions and does 757*906afcb8SAndy Fiddaman not remove core dumps on exit.]#[level] 758*906afcb8SAndy Fiddaman[D:define?Successful test macro definitions are emitted. This is the default.] 759*906afcb8SAndy Fiddaman[E:explicit?Disable implicit test output.] 760*906afcb8SAndy Fiddaman[F:features?Sets the feature test header to \ahdr\a. This header typically 761*906afcb8SAndy Fiddaman defines *_SOURCE feature test macros.]:[hdr:=NONE] 762*906afcb8SAndy Fiddaman[i:input?Sets the input file name to \afile\a, which 763*906afcb8SAndy Fiddaman must contain \biffe\b statements.]:[file] 764*906afcb8SAndy Fiddaman[I:include?Adds \b-I\b\adir\a to the C compiler flags.]:[dir] 765*906afcb8SAndy Fiddaman[L:library?Adds \b-L\b\adir\a to the C compiler flags.]:[dir] 766*906afcb8SAndy Fiddaman[n:name-value?Output \aname\a=\avalue\a assignments only.] 767*906afcb8SAndy Fiddaman[N!:optimize?\b--nooptimize\b disables compiler optimization options.] 768*906afcb8SAndy Fiddaman[o:output?Sets the output file name to \afile\a.]:[file] 769*906afcb8SAndy Fiddaman[O:stdio?Sets the standard io header to \ahdr\a.]:[hdr:=stdio.h] 770*906afcb8SAndy Fiddaman[e:package?Sets the \bproto\b(1) package name to \aname\a.]:[name] 771*906afcb8SAndy Fiddaman[p:prototyped?Emits \b#pragma prototyped\b at the top of the 772*906afcb8SAndy Fiddaman output file. See \bproto\b(1).] 773*906afcb8SAndy Fiddaman[P:pragma?Emits \b#pragma\b \atext\a at the top of the output file.]:[text] 774*906afcb8SAndy Fiddaman[r:regress?Massage output for regression testing.] 775*906afcb8SAndy Fiddaman[R:root?alternate root.]:[dir] 776*906afcb8SAndy Fiddaman[s:shell?Sets the internal shell name to \aname\a. Used for debugging 777*906afcb8SAndy Fiddaman Bourne shell compatibility (otherwise \biffe\b uses \aksh\a constructs 778*906afcb8SAndy Fiddaman if available). The supported names are \bksh\b, \bbsh\b, \bbash\b, and 779*906afcb8SAndy Fiddaman \bosh\b. \bosh\b forces the \bread -r\b compatibility read command to 780*906afcb8SAndy Fiddaman be compiled and used instead of \bread -r\b. The default is determined 781*906afcb8SAndy Fiddaman by probing the shell at startup.]:[name] 782*906afcb8SAndy Fiddaman[S:static?Sets the C compiler flags that force static linking. If not set 783*906afcb8SAndy Fiddaman then \biffe\b probes the compiler to determine the flags. \biffe\b 784*906afcb8SAndy Fiddaman must use static linking (no dlls) because on some systems missing 785*906afcb8SAndy Fiddaman library symbols are only detected when referenced at runtime from 786*906afcb8SAndy Fiddaman dynamically linked executables.]:[flags] 787*906afcb8SAndy Fiddaman[u:undef?\b#undef\b failed test macros. By default only successful test macros 788*906afcb8SAndy Fiddaman are defined \b1\b.] 789*906afcb8SAndy Fiddaman[v:verbose?Produce a message line on the standard error for each test as 790*906afcb8SAndy Fiddaman it is performed.] 791*906afcb8SAndy Fiddaman[x:cross?Some tests compile an executable (\ba.out\b) and then run it. 792*906afcb8SAndy Fiddaman If the C compiler is a cross compiler and the executable format is 793*906afcb8SAndy Fiddaman incompatible with the execution environment then the generated 794*906afcb8SAndy Fiddaman executables must be run in a different environment, possibly on 795*906afcb8SAndy Fiddaman another host. \acrosstype\a is the HOSTTYPE for generated executables 796*906afcb8SAndy Fiddaman (the \bpackage\b(1) command generates a consistent HOSTTYPE namespace). 797*906afcb8SAndy Fiddaman Generated executables are run via \bcrossexec\b(1) with \acrosstype\a 798*906afcb8SAndy Fiddaman as the first argument. \bcrossexec\b supports remote execution for 799*906afcb8SAndy Fiddaman cross-compiled executables. See \bcrossexec\b(1) for 800*906afcb8SAndy Fiddaman details.]:[crosstype] 801*906afcb8SAndy Fiddaman[X:exclude?Removes \b-I\b\adir\a and \b-I\b*/\adir\a C compiler flags.]:[dir] 802*906afcb8SAndy Fiddaman 803*906afcb8SAndy Fiddaman[ - ] [ file.iffe | statement [ : statement ... ] ] 804*906afcb8SAndy Fiddaman 805*906afcb8SAndy Fiddaman[+SYNTAX?\biffe\b input consists of a sequence of statement lines. Statements 806*906afcb8SAndy Fiddaman that span more than one line contain \abegin\a\b{\b as the last 807*906afcb8SAndy Fiddaman operand (where \abegin\a is command specific) and zero 808*906afcb8SAndy Fiddaman or more data lines terminated by a line containing 809*906afcb8SAndy Fiddaman \b}end\b as the first operand. The statement syntax is: 810*906afcb8SAndy Fiddaman [\aname\a \b=\b]] [\b!\b]] \atest\a[,\atest\a...]] [\b-\b]] 811*906afcb8SAndy Fiddaman [\aarg\a[,\aarg\a...]]]] [\aprereq\a ...]] 812*906afcb8SAndy Fiddaman [\abegin\a{ ... |\bend\b ...]] [= [\adefault\a]]]]. 813*906afcb8SAndy Fiddaman \atest\as and \aarg\as may be combined, separated by commas, to perform 814*906afcb8SAndy Fiddaman a set of tests on a set of arguments. \aname\a \b=\b before \atest\a 815*906afcb8SAndy Fiddaman overrides the default test variable and macro name, and \b-\b after 816*906afcb8SAndy Fiddaman \atest\a performs the test but does not define the test variable and 817*906afcb8SAndy Fiddaman macro values. \b!\b before \atest\a inverts the test sense for \bif\b, 818*906afcb8SAndy Fiddaman \belif\b, and \byes{\b and \bno{\b blocks.] 819*906afcb8SAndy Fiddaman[+?\aprereq\as are used when applying the features tests and may be 820*906afcb8SAndy Fiddaman combinations of:]{ 821*906afcb8SAndy Fiddaman [+compiler options?\b-D\b*, \b-L\b*, etc.] 822*906afcb8SAndy Fiddaman [+library references?\b-l\b*, *\b.a\b, etc. \b_LIB_\b\aname\a 823*906afcb8SAndy Fiddaman is defined to be 1 if \b-l\b\aname\a is a library.] 824*906afcb8SAndy Fiddaman [+header references?*\b.h\b. \a_dir_name\a is defined to be 1 825*906afcb8SAndy Fiddaman if \adir/name\a\b.h\b is a header, or if \adir\a is 826*906afcb8SAndy Fiddaman omitted, \b_hdr_\b\aname\a is defined to be 1 if 827*906afcb8SAndy Fiddaman \aname\a\b.h\b is a header.] 828*906afcb8SAndy Fiddaman [+-?Prereq grouping mark; prereqs before the first \b-\b are 829*906afcb8SAndy Fiddaman passed to all feature tests. Subsequent groups 830*906afcb8SAndy Fiddaman are attempted in left-to-right order until the first 831*906afcb8SAndy Fiddaman successful group is found.] 832*906afcb8SAndy Fiddaman } 833*906afcb8SAndy Fiddaman[+?\abegin\a\b{\b ... \b}end\b delimit multiline code blocks that override 834*906afcb8SAndy Fiddaman or augment the default code provided by \biffe\b. User supplied code 835*906afcb8SAndy Fiddaman blocks should be compatible with the K&R, ANSI, and C++ C language 836*906afcb8SAndy Fiddaman dialects for maximal portability. Test code may call the function 837*906afcb8SAndy Fiddaman \bNOTE("...")\b to emit short text in \b--verbose\b output; only one 838*906afcb8SAndy Fiddaman \bNOTE()\b should be called per test for readability. In addition to 839*906afcb8SAndy Fiddaman all macro definitions generated by previous tests, all generated 840*906afcb8SAndy Fiddaman code contains the following at the top to hide dialect differences:]{ 841*906afcb8SAndy Fiddaman [+ ?#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)] 842*906afcb8SAndy Fiddaman [+ ?#define _STD_ 1] 843*906afcb8SAndy Fiddaman [+ ?#define _ARG_(x) x] 844*906afcb8SAndy Fiddaman [+ ?#define _VOID_ void] 845*906afcb8SAndy Fiddaman [+ ?#else] 846*906afcb8SAndy Fiddaman [+ ?#define _STD_ 0] 847*906afcb8SAndy Fiddaman [+ ?#define _ARG_(x) ()] 848*906afcb8SAndy Fiddaman [+ ?#define _VOID_ char] 849*906afcb8SAndy Fiddaman [+ ?#endif] 850*906afcb8SAndy Fiddaman [+ ?#if defined(__cplusplus)] 851*906afcb8SAndy Fiddaman [+ ?#define _BEGIN_EXTERNS_ extern "C" {] 852*906afcb8SAndy Fiddaman [+ ?#define _END_EXTERNS_ }] 853*906afcb8SAndy Fiddaman [+ ?#else] 854*906afcb8SAndy Fiddaman [+ ?#define _BEGIN_EXTERNS_] 855*906afcb8SAndy Fiddaman [+ ?#define _END_EXTERNS_] 856*906afcb8SAndy Fiddaman [+ ?#endif] 857*906afcb8SAndy Fiddaman [+ ?#define _NIL_(x) ((x)0)] 858*906afcb8SAndy Fiddaman [+ ?#include <stdio.h>] 859*906afcb8SAndy Fiddaman } 860*906afcb8SAndy Fiddaman[+?= \adefault\a may be specified for the \bkey\b, \blib\b, \bmac\b, \bmth\b 861*906afcb8SAndy Fiddaman and \btyp\b tests. If the test fails for \aarg\a then 862*906afcb8SAndy Fiddaman \b#define\b \aarg\a \adefault\a is emitted. \bkey\b accepts multiple 863*906afcb8SAndy Fiddaman \b= \b\adefault\a values; the first valid one is used.] 864*906afcb8SAndy Fiddaman[+?Each test statement generates a portion of a C language header that contains 865*906afcb8SAndy Fiddaman macro defintions, comments, and other text corresponding to the feature 866*906afcb8SAndy Fiddaman tests. \b#ifndef _def_\b\aname\a\b_\b\adirectory\a ... 867*906afcb8SAndy Fiddaman \b#endif\b guards the generated header from multiple \b#include\bs, 868*906afcb8SAndy Fiddaman where \aname\a is determined by either the \brun\b statement input file 869*906afcb8SAndy Fiddaman name if any, or the first \atest\a in the first statement, and \adirectory\a 870*906afcb8SAndy Fiddaman is the basename component of either the \brun\b statement file, if any, 871*906afcb8SAndy Fiddaman or the current working directory. The output file name is determined 872*906afcb8SAndy Fiddaman in this order:]{ 873*906afcb8SAndy Fiddaman [+-?If the first command line operand is \b-\b then the output 874*906afcb8SAndy Fiddaman is written to the standard output.] 875*906afcb8SAndy Fiddaman [+--output=\afile\a?Output is \afile\a.] 876*906afcb8SAndy Fiddaman [+set out \afile\a?Output is \afile\a.] 877*906afcb8SAndy Fiddaman [+[run]] [\adirectory\a/]]\abase\a[\a.suffix\a]]?Output is 878*906afcb8SAndy Fiddaman \bFEATURE/\b\abase\a.] 879*906afcb8SAndy Fiddaman } 880*906afcb8SAndy Fiddaman[+?Generated \biffe\b headers are often referenced in C source as: 881*906afcb8SAndy Fiddaman \b#include "FEATURE/\b\afile\a". The \bnmake\b(1) base rules contain 882*906afcb8SAndy Fiddaman metarules for generating \bFEATURE/\b\afile\a from 883*906afcb8SAndy Fiddaman \bfeatures/\b\afile\a[\asuffix\a]], where \asuffix\a may be omitted, 884*906afcb8SAndy Fiddaman \b.c\b, or \b.sh\b (see the \brun\b test below). Because 885*906afcb8SAndy Fiddaman \b#include\b prerequisites are automatically detected, \bnmake\b(1) 886*906afcb8SAndy Fiddaman ensures that all prerequisite \biffe\b headers are generated before 887*906afcb8SAndy Fiddaman compilation. Note that the directories are deliberately named 888*906afcb8SAndy Fiddaman \bFEATURE\b and \bfeatures\b to keep case-ignorant file systems 889*906afcb8SAndy Fiddaman happy.] 890*906afcb8SAndy Fiddaman[+?The feature tests are:]{ 891*906afcb8SAndy Fiddaman [+# \acomment\a?Comment line - ignored.] 892*906afcb8SAndy Fiddaman [+api \aname\a \aYYYYMMDD\a \asymbol ...\a?Emit api compatibility tests 893*906afcb8SAndy Fiddaman for \aname\a and \b#define\b \asymbol\a \asymbol\a_\aYYYYMMDD\a 894*906afcb8SAndy Fiddaman when \aNAME\a_API is >= \aYYYYMMDD\a (\aNAME\a is \aname\a 895*906afcb8SAndy Fiddaman converted to upper case). If \aNAME\a_API is not defined 896*906afcb8SAndy Fiddaman then \asymbol\a maps to the newest \aYYYYMMDD\a for \aname\a.] 897*906afcb8SAndy Fiddaman [+define \aname\a [ (\aarg,...\a) ]] [ \avalue\a ]]?Emit a macro 898*906afcb8SAndy Fiddaman \b#define\b for \aname\a if it is not already defined. The 899*906afcb8SAndy Fiddaman definition is passed to subsequent tests.] 900*906afcb8SAndy Fiddaman [+extern \aname\a \atype\a [ (\aarg,...\a) | [\adimension\a]] ]]?Emit 901*906afcb8SAndy Fiddaman an \bextern\b prototype for \aname\a if one is not already 902*906afcb8SAndy Fiddaman defined. The prototype is passed to subsequent tests.] 903*906afcb8SAndy Fiddaman [+header \aheader\a?Emit \b#include <\b\aheader\a\b>\b if \aheader\a 904*906afcb8SAndy Fiddaman exists. The \b#include\b is passed to subsequent tests.] 905*906afcb8SAndy Fiddaman [+print \atext\a?Copy \atext\a to the output file. \atext\a is passed 906*906afcb8SAndy Fiddaman to subsequent tests.] 907*906afcb8SAndy Fiddaman [+reference \aheader\a?If \aheader\a exists then add \b#include\b 908*906afcb8SAndy Fiddaman \aheader\a to subsequent tests.] 909*906afcb8SAndy Fiddaman [+ver \aname\a \aYYYYMMDD\a?\b#define\b \aNAME\a_VERSION \aYYYYMMDD\a 910*906afcb8SAndy Fiddaman (\aNAME\a is \aname\a converted to upper case).] 911*906afcb8SAndy Fiddaman [+cmd \aname\a?Defines \b_cmd_\b\aname\a if \aname\a is an executable 912*906afcb8SAndy Fiddaman in one of the standard system directories (\b/bin, /etc, 913*906afcb8SAndy Fiddaman /usr/bin, /usr/etc, /usr/ucb\b). 914*906afcb8SAndy Fiddaman \b_\b\adirectory\a\b_\b\aname\a is defined for \adirectory\a 915*906afcb8SAndy Fiddaman in which \aname\a is found (with \b/\b translated to \b_\b).] 916*906afcb8SAndy Fiddaman [+dat \aname\a?Defines \b_dat_\b\aname\a if \aname\a is a data symbol 917*906afcb8SAndy Fiddaman in the default libraries.] 918*906afcb8SAndy Fiddaman [+def \aname\a?Equivalent to \bcmd,dat,hdr,key,lib,mth,sys,typ\b 919*906afcb8SAndy Fiddaman \aname\a.] 920*906afcb8SAndy Fiddaman [+dfn \aname\a?If \aname\a is a macro in the candidate headers then 921*906afcb8SAndy Fiddaman a \b#define\b \aname\a \avalue\a statment is output for the 922*906afcb8SAndy Fiddaman \avalue\a defined in the headers. The definition is \b#ifndef\b 923*906afcb8SAndy Fiddaman guarded.] 924*906afcb8SAndy Fiddaman [+exp \aname\a \aexpression\a?If \aexpression\a is a \"...\" string 925*906afcb8SAndy Fiddaman then \aname\a is defined to be the string, else if the 926*906afcb8SAndy Fiddaman \bexpr\b(1) evaluation of \aexpression\a is not 0 then \aname\a 927*906afcb8SAndy Fiddaman is defined to be 1, otherwise \aname\a is defined to be 0. 928*906afcb8SAndy Fiddaman Identifiers in \aexpression\a may be previously defined names 929*906afcb8SAndy Fiddaman from other \biffe\b tests; undefined names evaluate to 0. 930*906afcb8SAndy Fiddaman If \aname\a was defined in a previous successful test then 931*906afcb8SAndy Fiddaman the current and subsequent \bexp\b test on \aname\a are 932*906afcb8SAndy Fiddaman skipped. If \aname\a is \b-\b then the \aexpression\a is 933*906afcb8SAndy Fiddaman simply evaluated.] 934*906afcb8SAndy Fiddaman [+hdr \aname\a?Defines \b_hdr_\b\aname\a if the header 935*906afcb8SAndy Fiddaman \b<\b\aname\a\b.h>\b exists. The \b--config\b macro name is 936*906afcb8SAndy Fiddaman \bHAVE_\b\aNAME\a\b_H\b.] 937*906afcb8SAndy Fiddaman [+if \astatement\a ... | \belif\b \astatement\a ... | \belse\b | \bendif\b? 938*906afcb8SAndy Fiddaman Nested if-else test control.] 939*906afcb8SAndy Fiddaman [+iff \aname\a?The generated header \b#ifndef-#endif\b macro guard is 940*906afcb8SAndy Fiddaman \b_\b\aname\a\b_H\b.] 941*906afcb8SAndy Fiddaman [+inc \afile\a [ re ]]?Read #define macro names from \afile\a 942*906afcb8SAndy Fiddaman and arrange for those names to evaluate to 1 in \bexp\b 943*906afcb8SAndy Fiddaman expressions. If \are\a is specified then macros not matching 944*906afcb8SAndy Fiddaman \are\a are ignored.] 945*906afcb8SAndy Fiddaman [+key \aname\a?Defines \b_key_\b\aname\a if \aname\a is a reserved 946*906afcb8SAndy Fiddaman word (keyword).] 947*906afcb8SAndy Fiddaman [+lcl \aname\a?Generates a \b#include\b statement for the native version 948*906afcb8SAndy Fiddaman of the header \b<\b\aname\a\b.h>\b if it exists. Defines 949*906afcb8SAndy Fiddaman \b_lcl_\b\aname\a on success. The \b--config\b macro name is 950*906afcb8SAndy Fiddaman \bHAVE_\b\aNAME\a\b_H\b. The default \are\a is \b^HAVE_\b 951*906afcb8SAndy Fiddaman for \b--config\b and \b^_\b otherwise.] 952*906afcb8SAndy Fiddaman [+lib \aname\a?Defines \b_lib_\b\aname\a if \aname\a is an external 953*906afcb8SAndy Fiddaman symbol in the default libraries.] 954*906afcb8SAndy Fiddaman [+mac \aname\a?Defines \b_mac_\b\aname\a if \aname\a is a macro.] 955*906afcb8SAndy Fiddaman [+mem \astruct.member\a?Defines \b_mem_\b\amember\a\b_\b\astruct\a 956*906afcb8SAndy Fiddaman if \amember\a is a member of the structure \astruct\a.] 957*906afcb8SAndy Fiddaman [+mth \aname\a?Defines \b_mth_\b\aname\a if \aname\a is an external 958*906afcb8SAndy Fiddaman symbol in the math library.] 959*906afcb8SAndy Fiddaman [+nop \aname\a?If this is the first test then \aname\a may be used 960*906afcb8SAndy Fiddaman to name the output file and/or the output header guard macro. 961*906afcb8SAndy Fiddaman Otherwise this test is ignored.] 962*906afcb8SAndy Fiddaman [+npt \aname\a?Defines \b_npt_\b\aname\a if the \aname\a symbol 963*906afcb8SAndy Fiddaman requires a prototype. The \b--config\b macro name is 964*906afcb8SAndy Fiddaman \bHAVE_\aNAME\a\b_DECL\b with the opposite sense.] 965*906afcb8SAndy Fiddaman [+num \aname\a?Defines \b_num_\b\aname\a if \aname\a is a numeric 966*906afcb8SAndy Fiddaman constant \aenum\a or \amacro\a.] 967*906afcb8SAndy Fiddaman [+nxt \aname\a?Defines a string macro \b_nxt_\b\aname\a suitable for 968*906afcb8SAndy Fiddaman a \b#include\b statement to include the next (on the include 969*906afcb8SAndy Fiddaman path) or native version of the header \b<\b\aname\a\b.h>\b 970*906afcb8SAndy Fiddaman if it exists. Also defines the \"...\" form 971*906afcb8SAndy Fiddaman \b_nxt_\b\aname\a\b_str\b. The \b--config\b macro name is 972*906afcb8SAndy Fiddaman \bHAVE_\b\aNAME\a\b_NEXT\b.] 973*906afcb8SAndy Fiddaman [+one \aheader\a ...?Generates a \b#include\b statement for the first 974*906afcb8SAndy Fiddaman header found in the \aheader\a list.] 975*906afcb8SAndy Fiddaman [+opt \aname\a?Defines \b_opt_\b\aname\a if \aname\a is a space-separated 976*906afcb8SAndy Fiddaman token in the global environment variable \bPACKAGE_OPTIONS\b.] 977*906afcb8SAndy Fiddaman [+pth \afile\a [ \adir\a ... | { \ag1\a - ... - \agn\a } | < \apkg\a [\aver\a ...]] > ]]?Defines 978*906afcb8SAndy Fiddaman \b_pth_\b\afile\a, with embedded \b/\b chars translated to 979*906afcb8SAndy Fiddaman \b_\b, to the path of the first instance of \afile\a in the 980*906afcb8SAndy Fiddaman \adir\a directories. \b{\b ... \b}\b forms a directory list 981*906afcb8SAndy Fiddaman from the cross-product of \b-\b separated directory groups 982*906afcb8SAndy Fiddaman \ag1\a ... \agn\a. < ... > forms a directory list for the 983*906afcb8SAndy Fiddaman package \apkg\a with optional versions. If no operands are 984*906afcb8SAndy Fiddaman specified then the default PATH directories are used. The 985*906afcb8SAndy Fiddaman \b--config\b macro name is \aNAME\a\b_PATH\b.] 986*906afcb8SAndy Fiddaman [+run \afile\a?Runs the tests in \afile\a based on the \afile\a 987*906afcb8SAndy Fiddaman suffix:]{ 988*906afcb8SAndy Fiddaman [+.c?\afile\a is compiled and executed and the output is copied 989*906afcb8SAndy Fiddaman to the \biffe\b output file. Macros and headers supplied 990*906afcb8SAndy Fiddaman to \bbegin{\b ... \b}end\b are also supplied to 991*906afcb8SAndy Fiddaman \afile\a.] 992*906afcb8SAndy Fiddaman [+.sh?\afile\a is executed as a shell script and the output is 993*906afcb8SAndy Fiddaman copied to the \biffe\b output file.] 994*906afcb8SAndy Fiddaman [+.iffe \bor no suffix?\afile\a contains \biffe\b 995*906afcb8SAndy Fiddaman statements.] 996*906afcb8SAndy Fiddaman } 997*906afcb8SAndy Fiddaman [+set \aoption value\a?Sets option values. The options are described 998*906afcb8SAndy Fiddaman above.] 999*906afcb8SAndy Fiddaman [+siz \aname\a?Defines \b_siz_\b\aname\a to be \bsizeof\b(\aname\a) if 1000*906afcb8SAndy Fiddaman \aname\a is a type in any of \b<sys/types.h>, <times.h>, 1001*906afcb8SAndy Fiddaman <stddef.h>, <stdlib.h>\b. Any \b.\b characters in \aname\a are 1002*906afcb8SAndy Fiddaman translated to space before testing and are translated to \b_\b 1003*906afcb8SAndy Fiddaman in the output macro name.] 1004*906afcb8SAndy Fiddaman [+sym \aname\a?Defines \b_ary_\b\aname\a if \aname\a is an array, 1005*906afcb8SAndy Fiddaman \b_fun_\b\aname\a if \aname\a is a function pointer, 1006*906afcb8SAndy Fiddaman \b_ptr_\b\aname\a if \aname\a is a pointer, or 1007*906afcb8SAndy Fiddaman \b_reg_\b\aname\a if \aname\a is a scalar. In most cases 1008*906afcb8SAndy Fiddaman \aname\a is part of a macro expansion.] 1009*906afcb8SAndy Fiddaman [+sys \aname\a?Defines \b_sys_\b\aname\a if the header 1010*906afcb8SAndy Fiddaman \b<sys/\b\aname\a\b.h>\b exists. The \b--config\b macro name is 1011*906afcb8SAndy Fiddaman \bHAVE_SYS_\b\aNAME\a\b_H\b.] 1012*906afcb8SAndy Fiddaman [+tst \aname\a?A user defined test on name. A source block must be 1013*906afcb8SAndy Fiddaman supplied. Defines \b_\b\aname\a on success. \btst - ...\b is 1014*906afcb8SAndy Fiddaman treated as \btst - - ...\b.] 1015*906afcb8SAndy Fiddaman [+typ \aname\a?Defines \b_typ_\b\aname\a if \aname\a is a type in any 1016*906afcb8SAndy Fiddaman of \b<sys/types.h>, <times.h>, <stddef.h>, <stdlib.h>\b. Any 1017*906afcb8SAndy Fiddaman \b.\b characters in \aname\a are translated to space before 1018*906afcb8SAndy Fiddaman testing and are translated to \b_\b in the output macro name.] 1019*906afcb8SAndy Fiddaman [+val \aname\a?The output of \becho\b \aname\a is written to the 1020*906afcb8SAndy Fiddaman output file.] 1021*906afcb8SAndy Fiddaman [+var \aname\a?A user defined test on name. A source block must be 1022*906afcb8SAndy Fiddaman supplied. Sets the \bexp\b variable \b_\b\aname\a on success 1023*906afcb8SAndy Fiddaman but does not define a macro.] 1024*906afcb8SAndy Fiddaman [+(\aexpression\a)?Equivalent to \bexp -\b \aexpression\a.] 1025*906afcb8SAndy Fiddaman} 1026*906afcb8SAndy Fiddaman[+?Code block names may be prefixed by \bno\b to invert the test sense. The 1027*906afcb8SAndy Fiddaman block names are:]{ 1028*906afcb8SAndy Fiddaman [+cat?The block is copied to the output file.] 1029*906afcb8SAndy Fiddaman [+compile?The block is compiled (\bcc -c\b).] 1030*906afcb8SAndy Fiddaman [+cross?The block is executed as a shell script using \bcrossexec\b(1) 1031*906afcb8SAndy Fiddaman if \b--cross\b is on, or on the local host otherwise, and the 1032*906afcb8SAndy Fiddaman output is copied to the output file. Test macros are not 1033*906afcb8SAndy Fiddaman exported to the script.] 1034*906afcb8SAndy Fiddaman [+execute?The block is compiled, linked, and executed. \b0\b exit 1035*906afcb8SAndy Fiddaman status means success.] 1036*906afcb8SAndy Fiddaman [+fail?If the test fails then the block text is evaluated by 1037*906afcb8SAndy Fiddaman \bsh\b(1).] 1038*906afcb8SAndy Fiddaman [+link?The block is compiled and linked (\bcc -o\b).] 1039*906afcb8SAndy Fiddaman [+macro?The block is preprocessed (\bcc -E\b) and lines containing 1040*906afcb8SAndy Fiddaman text bracketed by \b<<"\b ... \b">>\b (\aless-than less-than 1041*906afcb8SAndy Fiddaman double-quote ... double-quote greater-than greater-than\a) 1042*906afcb8SAndy Fiddaman are copied to the output file with the brackets omitted.] 1043*906afcb8SAndy Fiddaman [+no?If the test fails then the block text is copied to the 1044*906afcb8SAndy Fiddaman output file. Deprecated: use { \bif\b \belif\b \belse\b 1045*906afcb8SAndy Fiddaman \bendif\b } with unnamed \b{\b ... \b}\b blocks.] 1046*906afcb8SAndy Fiddaman [+note?If the test succeeds then the block is copied to the output 1047*906afcb8SAndy Fiddaman as a \b/*\b ... \b*/\b comment.] 1048*906afcb8SAndy Fiddaman [+output?The block is compiled, linked, and executed, and the output 1049*906afcb8SAndy Fiddaman is copied to the output file.] 1050*906afcb8SAndy Fiddaman [+pass?If the test succeeds then the block text is evaluated by 1051*906afcb8SAndy Fiddaman \bsh\b(1).] 1052*906afcb8SAndy Fiddaman [+preprocess?The block is preprocessed (\bcc -E\b).] 1053*906afcb8SAndy Fiddaman [+run?The block is executed as a shell script and the output is 1054*906afcb8SAndy Fiddaman copied to the output file. Succesful test macros are also 1055*906afcb8SAndy Fiddaman defined as shell variables with value \b1\b and are available 1056*906afcb8SAndy Fiddaman within the block. Likewise, failed test macros are defined 1057*906afcb8SAndy Fiddaman as shell variables with value \b0\b.] 1058*906afcb8SAndy Fiddaman [+status?The block is compiled, linked, and executed, and the exit 1059*906afcb8SAndy Fiddaman status is the test outcome, 0 for \afailure\a, the value 1060*906afcb8SAndy Fiddaman otherwise.] 1061*906afcb8SAndy Fiddaman [+yes?If the test succeeds then the block text is copied to the output 1062*906afcb8SAndy Fiddaman file. \byes{\b ... \b}end\b is equivalent to the unnamed block 1063*906afcb8SAndy Fiddaman \b{\b ... \b}\b. Deprecated: use { \bif\b \belif\b \belse\b 1064*906afcb8SAndy Fiddaman \bendif\b } with unnamed \b{\b ... \b}\b blocks.] 1065*906afcb8SAndy Fiddaman} 1066*906afcb8SAndy Fiddaman[+SEE ALSO?\bautoconf\b(1), \bconfig\b(1), \bgetconf\b(1), \bcrossexec\b(1), 1067*906afcb8SAndy Fiddaman \bnmake\b(1), \bpackage\b(1), \bproto\b(1), \bsh\b(1)] 1068*906afcb8SAndy Fiddaman' 1069*906afcb8SAndy Fiddaman while getopts -a "$command" "$USAGE" OPT 1070*906afcb8SAndy Fiddaman do case $OPT in 1071*906afcb8SAndy Fiddaman a) set="$set set all :" ;; 1072*906afcb8SAndy Fiddaman c) set="$set set cc $OPTARG :" ;; 1073*906afcb8SAndy Fiddaman C) set="$set set config :" ;; 1074*906afcb8SAndy Fiddaman d) set="$set set debug $OPTARG :" ;; 1075*906afcb8SAndy Fiddaman D) set="$set set define :" ;; 1076*906afcb8SAndy Fiddaman E) set="$set set explicit :" ;; 1077*906afcb8SAndy Fiddaman F) set="$set set features $OPTARG :" ;; 1078*906afcb8SAndy Fiddaman i) set="$set set input $OPTARG :" ;; 1079*906afcb8SAndy Fiddaman I) set="$set set include $OPTARG :" ;; 1080*906afcb8SAndy Fiddaman L) set="$set set library $OPTARG :" ;; 1081*906afcb8SAndy Fiddaman n) set="$set set namval $OPTARG :" ;; 1082*906afcb8SAndy Fiddaman N) set="$set set nooptimize $OPTARG :" ;; 1083*906afcb8SAndy Fiddaman o) set="$set set output $OPTARG :" ;; 1084*906afcb8SAndy Fiddaman e) set="$set set package $OPTARG :" ;; 1085*906afcb8SAndy Fiddaman p) set="$set set prototyped :" ;; 1086*906afcb8SAndy Fiddaman P) set="$set set pragma $OPTARG :" ;; 1087*906afcb8SAndy Fiddaman r) set="$set set regress :" ;; 1088*906afcb8SAndy Fiddaman R) set="$set set altroot $OPTARG :" ;; 1089*906afcb8SAndy Fiddaman s) set="$set set shell $OPTARG :" ;; 1090*906afcb8SAndy Fiddaman S) set="$set set static $OPTARG :" ;; 1091*906afcb8SAndy Fiddaman O) set="$set set stdio $OPTARG :" ;; 1092*906afcb8SAndy Fiddaman u) set="$set set undef :" ;; 1093*906afcb8SAndy Fiddaman v) set="$set set verbose :" ;; 1094*906afcb8SAndy Fiddaman x) set="$set set cross $OPTARG :" ;; 1095*906afcb8SAndy Fiddaman X) set="$set set exclude $OPTARG :" ;; 1096*906afcb8SAndy Fiddaman esac 1097*906afcb8SAndy Fiddaman done 1098*906afcb8SAndy Fiddaman shift `expr $OPTIND - 1` 1099*906afcb8SAndy Fiddaman ;; 1100*906afcb8SAndy Fiddaman*) while : 1101*906afcb8SAndy Fiddaman do case $# in 1102*906afcb8SAndy Fiddaman 0) break ;; 1103*906afcb8SAndy Fiddaman esac 1104*906afcb8SAndy Fiddaman case $1 in 1105*906afcb8SAndy Fiddaman -) break 1106*906afcb8SAndy Fiddaman ;; 1107*906afcb8SAndy Fiddaman --) shift 1108*906afcb8SAndy Fiddaman break 1109*906afcb8SAndy Fiddaman ;; 1110*906afcb8SAndy Fiddaman --a|--al|--all) 1111*906afcb8SAndy Fiddaman REM=a 1112*906afcb8SAndy Fiddaman ;; 1113*906afcb8SAndy Fiddaman --cc=*) REM=c`echo X$1 | sed 's,[^=]*=,,'` 1114*906afcb8SAndy Fiddaman ;; 1115*906afcb8SAndy Fiddaman --co|--con|--conf|--confi|--config) 1116*906afcb8SAndy Fiddaman REM=C 1117*906afcb8SAndy Fiddaman ;; 1118*906afcb8SAndy Fiddaman --cr=*|--cro=*|--cros=*|--cross=*) 1119*906afcb8SAndy Fiddaman REM=x`echo X$1 | sed -e 's,[^=]*=,,'` 1120*906afcb8SAndy Fiddaman ;; 1121*906afcb8SAndy Fiddaman --d=*|--de=*|--deb=*|--debu=*|--debug=*) 1122*906afcb8SAndy Fiddaman REM=d`echo X$1 | sed 's,[^=]*=,,'` 1123*906afcb8SAndy Fiddaman ;; 1124*906afcb8SAndy Fiddaman --def|--defi|--defin|--define) 1125*906afcb8SAndy Fiddaman REM=D 1126*906afcb8SAndy Fiddaman ;; 1127*906afcb8SAndy Fiddaman --e=*|--ex=*|--exc=*|--excl=*|--exclu=*|--exclud=*|--exclude=*) 1128*906afcb8SAndy Fiddaman REM=X`echo X$1 | sed 's,[^=]*=,,'` 1129*906afcb8SAndy Fiddaman ;; 1130*906afcb8SAndy Fiddaman --e|--ex|--exp|--expl|--expli|--explic|--explici|--explicit) 1131*906afcb8SAndy Fiddaman REM=E 1132*906afcb8SAndy Fiddaman ;; 1133*906afcb8SAndy Fiddaman --f=*|--fe=*|--fea=*|--feat=*|--featu=*|--featur=*|--feature=*|--features=*) 1134*906afcb8SAndy Fiddaman REM=F`echo X$1 | sed 's,[^=]*=,,'` 1135*906afcb8SAndy Fiddaman ;; 1136*906afcb8SAndy Fiddaman --inp=*|--inpu=*|--input=*) 1137*906afcb8SAndy Fiddaman REM=i`echo X$1 | sed 's,[^=]*=,,'` 1138*906afcb8SAndy Fiddaman ;; 1139*906afcb8SAndy Fiddaman --inc=*|--incl=*|--inclu=*|--includ=*|--include=*) 1140*906afcb8SAndy Fiddaman REM=I`echo X$1 | sed 's,[^=]*=,,'` 1141*906afcb8SAndy Fiddaman ;; 1142*906afcb8SAndy Fiddaman --l=*|--li=*|--lib=*|--libr=*|--libra=*|--librar=*|--library=*) 1143*906afcb8SAndy Fiddaman REM=L`echo X$1 | sed 's,[^=]*=,,'` 1144*906afcb8SAndy Fiddaman ;; 1145*906afcb8SAndy Fiddaman --n|--na|--nam|--name|--name-v|--name-va|--name-val|--name-valu|--name-value) 1146*906afcb8SAndy Fiddaman REM=n 1147*906afcb8SAndy Fiddaman ;; 1148*906afcb8SAndy Fiddaman --o=*|--ou=*|--out=*|--outp=*|--outpu=*|--output=*) 1149*906afcb8SAndy Fiddaman REM=o`echo X$1 | sed 's,[^=]*=,,'` 1150*906afcb8SAndy Fiddaman ;; 1151*906afcb8SAndy Fiddaman --pa=*|--pac=*|--pack=*|--packa=*|--packag=*|--package=*) 1152*906afcb8SAndy Fiddaman REM=e`echo X$1 | sed 's,[^=]*=,,'` 1153*906afcb8SAndy Fiddaman ;; 1154*906afcb8SAndy Fiddaman --pro|--prot|--proto|--protot|--prototy|--prototyp|--prototype|--prototyped) 1155*906afcb8SAndy Fiddaman REM=p 1156*906afcb8SAndy Fiddaman ;; 1157*906afcb8SAndy Fiddaman --pra=*|--prag=*|--pragma=*) 1158*906afcb8SAndy Fiddaman REM=P`echo X$1 | sed 's,[^=]*=,,'` 1159*906afcb8SAndy Fiddaman ;; 1160*906afcb8SAndy Fiddaman --r|--re|--reg|--regre|--regres|--regress) 1161*906afcb8SAndy Fiddaman REM=r 1162*906afcb8SAndy Fiddaman ;; 1163*906afcb8SAndy Fiddaman --sh=*|--she=*|--shel=*|--shell=*) 1164*906afcb8SAndy Fiddaman REM=s`echo X$1 | sed 's,[^=]*=,,'` 1165*906afcb8SAndy Fiddaman ;; 1166*906afcb8SAndy Fiddaman --sta=*|--stat=*|--stati=*|--static=*) 1167*906afcb8SAndy Fiddaman REM=S`echo X$1 | sed 's,[^=]*=,,'` 1168*906afcb8SAndy Fiddaman ;; 1169*906afcb8SAndy Fiddaman --std=*|--stdi=*|--stdio=*) 1170*906afcb8SAndy Fiddaman REM=O`echo X$1 | sed 's,[^=]*=,,'` 1171*906afcb8SAndy Fiddaman ;; 1172*906afcb8SAndy Fiddaman --u|--un|--und|--unde|--undef) 1173*906afcb8SAndy Fiddaman REM=u 1174*906afcb8SAndy Fiddaman ;; 1175*906afcb8SAndy Fiddaman --v|--ve|--ver|--verb|--verbo|--verbos|--verbose) 1176*906afcb8SAndy Fiddaman REM=v 1177*906afcb8SAndy Fiddaman ;; 1178*906afcb8SAndy Fiddaman --*) echo $command: $1: unknown option >&2 1179*906afcb8SAndy Fiddaman exit 2 1180*906afcb8SAndy Fiddaman ;; 1181*906afcb8SAndy Fiddaman -*) REM=`echo X$1 | sed 's,X-,,'` 1182*906afcb8SAndy Fiddaman ;; 1183*906afcb8SAndy Fiddaman *) break 1184*906afcb8SAndy Fiddaman ;; 1185*906afcb8SAndy Fiddaman esac 1186*906afcb8SAndy Fiddaman shift 1187*906afcb8SAndy Fiddaman while : 1188*906afcb8SAndy Fiddaman do case $REM in 1189*906afcb8SAndy Fiddaman '') break ;; 1190*906afcb8SAndy Fiddaman esac 1191*906afcb8SAndy Fiddaman eval `echo $REM | sed "s,\(.\)\(.*\),OPT='\1' REM='\2',"` 1192*906afcb8SAndy Fiddaman case $OPT in 1193*906afcb8SAndy Fiddaman [cdFiILoOePsSxX]) 1194*906afcb8SAndy Fiddaman case $REM in 1195*906afcb8SAndy Fiddaman '') case $# in 1196*906afcb8SAndy Fiddaman 0) echo $command: -$OPT: option argument expected >&2 1197*906afcb8SAndy Fiddaman exit 1 1198*906afcb8SAndy Fiddaman ;; 1199*906afcb8SAndy Fiddaman esac 1200*906afcb8SAndy Fiddaman OPTARG=$1 1201*906afcb8SAndy Fiddaman shift 1202*906afcb8SAndy Fiddaman ;; 1203*906afcb8SAndy Fiddaman *) OPTARG=$REM 1204*906afcb8SAndy Fiddaman REM='' 1205*906afcb8SAndy Fiddaman ;; 1206*906afcb8SAndy Fiddaman esac 1207*906afcb8SAndy Fiddaman esac 1208*906afcb8SAndy Fiddaman case $OPT in 1209*906afcb8SAndy Fiddaman a) set="$set set all :" ;; 1210*906afcb8SAndy Fiddaman c) set="$set set cc $OPTARG :" ;; 1211*906afcb8SAndy Fiddaman C) set="$set set config :" ;; 1212*906afcb8SAndy Fiddaman d) set="$set set debug $OPTARG :" ;; 1213*906afcb8SAndy Fiddaman D) set="$set set define :" ;; 1214*906afcb8SAndy Fiddaman E) set="$set set explicit :" ;; 1215*906afcb8SAndy Fiddaman F) set="$set set features $OPTARG :" ;; 1216*906afcb8SAndy Fiddaman i) set="$set set input $OPTARG :" ;; 1217*906afcb8SAndy Fiddaman I) set="$set set include $OPTARG :" ;; 1218*906afcb8SAndy Fiddaman L) set="$set set library $OPTARG :" ;; 1219*906afcb8SAndy Fiddaman n) set="$set set namval $OPTARG :" ;; 1220*906afcb8SAndy Fiddaman N) set="$set set nooptimize $OPTARG :" ;; 1221*906afcb8SAndy Fiddaman o) set="$set set output $OPTARG :" ;; 1222*906afcb8SAndy Fiddaman e) set="$set set package $OPTARG :" ;; 1223*906afcb8SAndy Fiddaman p) set="$set set prototyped :" ;; 1224*906afcb8SAndy Fiddaman P) set="$set set pragma $OPTARG :" ;; 1225*906afcb8SAndy Fiddaman r) set="$set set regress :" ;; 1226*906afcb8SAndy Fiddaman s) set="$set set shell $OPTARG :" ;; 1227*906afcb8SAndy Fiddaman S) set="$set set static $OPTARG :" ;; 1228*906afcb8SAndy Fiddaman O) set="$set set stdio $OPTARG :" ;; 1229*906afcb8SAndy Fiddaman u) set="$set set undef :" ;; 1230*906afcb8SAndy Fiddaman v) set="$set set verbose :" ;; 1231*906afcb8SAndy Fiddaman x) set="$set set cross $OPTARG :" ;; 1232*906afcb8SAndy Fiddaman X) set="$set set exclude $OPTARG :" ;; 1233*906afcb8SAndy Fiddaman *) echo "Usage: $command [-aCDEnpruv] [-c C-compiler-name [C-compiler-flags ...]] [-d level] 1234*906afcb8SAndy Fiddaman [-F features-header] [-i file] [-o file] [-O stdio-header] [-e name] [-P text] 1235*906afcb8SAndy Fiddaman [-s shell-path] [-S[flags]] [-x cross-exec-prefix] [-I dir] [-L dir] [-X dir] [ - ] 1236*906afcb8SAndy Fiddaman [ file.iffe | statement [ : statement ... ] ]" >&2 1237*906afcb8SAndy Fiddaman exit 2 1238*906afcb8SAndy Fiddaman ;; 1239*906afcb8SAndy Fiddaman esac 1240*906afcb8SAndy Fiddaman done 1241*906afcb8SAndy Fiddaman done 1242*906afcb8SAndy Fiddaman ;; 1243*906afcb8SAndy Fiddamanesac 1244*906afcb8SAndy Fiddamancase $1 in 1245*906afcb8SAndy Fiddaman-) out=-; shift ;; 1246*906afcb8SAndy Fiddamanesac 1247*906afcb8SAndy Fiddamancase $# in 1248*906afcb8SAndy Fiddaman0) in=- ;; 1249*906afcb8SAndy Fiddamanesac 1250*906afcb8SAndy Fiddamanset -- $set "$@" 1251*906afcb8SAndy Fiddamancase " $* " in 1252*906afcb8SAndy Fiddaman*' set config '*|*' run config.'*|*' run '*' config.'*|*' run '*'/config.'*) 1253*906afcb8SAndy Fiddaman config=1 1254*906afcb8SAndy Fiddaman ;; 1255*906afcb8SAndy Fiddamanesac 1256*906afcb8SAndy Fiddaman 1257*906afcb8SAndy Fiddaman# standard error to /dev/null unless debugging 1258*906afcb8SAndy Fiddaman# standard output to the current output file 1259*906afcb8SAndy Fiddaman# 1260*906afcb8SAndy Fiddaman# stdout original standard output 1261*906afcb8SAndy Fiddaman# stderr original standard error 1262*906afcb8SAndy Fiddaman# nullin /dev/null input 1263*906afcb8SAndy Fiddaman# nullout /dev/null output 1264*906afcb8SAndy Fiddaman 1265*906afcb8SAndy Fiddamanstdout=5 stderr=6 nullin=7 nullout=8 1266*906afcb8SAndy Fiddamaneval "exec $nullin</dev/null $nullout>/dev/null $stdout>&1 $stderr>&2" 1267*906afcb8SAndy Fiddamancase " $* " in 1268*906afcb8SAndy Fiddaman*" set debug "[3456789]*) 1269*906afcb8SAndy Fiddaman ;; 1270*906afcb8SAndy Fiddaman*) eval "exec 2>&$nullout" 1271*906afcb8SAndy Fiddaman ;; 1272*906afcb8SAndy Fiddamanesac 1273*906afcb8SAndy Fiddaman 1274*906afcb8SAndy Fiddaman# prompt complications 1275*906afcb8SAndy Fiddaman 1276*906afcb8SAndy Fiddamancase `print -n aha </dev/null 2>/dev/null` in 1277*906afcb8SAndy Fiddamanaha) show='print -n' SHOW='' ;; 1278*906afcb8SAndy Fiddaman*) case `echo -n aha 2>/dev/null` in 1279*906afcb8SAndy Fiddaman -n*) show=echo SHOW='\c' ;; 1280*906afcb8SAndy Fiddaman *) show='echo -n' SHOW='' ;; 1281*906afcb8SAndy Fiddaman esac 1282*906afcb8SAndy Fiddaman ;; 1283*906afcb8SAndy Fiddamanesac 1284*906afcb8SAndy Fiddaman 1285*906afcb8SAndy Fiddaman# tmp files cleaned up on exit 1286*906afcb8SAndy Fiddaman# status: 0:success 1:failure 2:interrupt 1287*906afcb8SAndy Fiddaman 1288*906afcb8SAndy Fiddamanstatus=1 1289*906afcb8SAndy Fiddamancase $debug in 1290*906afcb8SAndy Fiddaman2) core= 1291*906afcb8SAndy Fiddaman ;; 1292*906afcb8SAndy Fiddaman*) if (ulimit -c 0) >/dev/null 2>&1 1293*906afcb8SAndy Fiddaman then ulimit -c 0 1294*906afcb8SAndy Fiddaman core= 1295*906afcb8SAndy Fiddaman else core="core core.??*" 1296*906afcb8SAndy Fiddaman fi 1297*906afcb8SAndy Fiddaman ;; 1298*906afcb8SAndy Fiddamanesac 1299*906afcb8SAndy Fiddamantrap "rm -f $core $tmp*" 0 1300*906afcb8SAndy Fiddamanif (:>$tmp.c) 2>/dev/null 1301*906afcb8SAndy Fiddamanthen rm -f $tmp.c 1302*906afcb8SAndy Fiddamanelse echo "$command: cannot create tmp files in current dir" >&2 1303*906afcb8SAndy Fiddaman exit 1 1304*906afcb8SAndy Fiddamanfi 1305*906afcb8SAndy Fiddamanstatus=2 1306*906afcb8SAndy Fiddaman 1307*906afcb8SAndy Fiddaman# standard header for c source 1308*906afcb8SAndy Fiddaman 1309*906afcb8SAndy Fiddamanstd='#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) 1310*906afcb8SAndy Fiddaman#define _STD_ 1 1311*906afcb8SAndy Fiddaman#define _ARG_(x) x 1312*906afcb8SAndy Fiddaman#define _VOID_ void 1313*906afcb8SAndy Fiddaman#else 1314*906afcb8SAndy Fiddaman#define _STD_ 0 1315*906afcb8SAndy Fiddaman#define _ARG_(x) () 1316*906afcb8SAndy Fiddaman#define _VOID_ char 1317*906afcb8SAndy Fiddaman#endif 1318*906afcb8SAndy Fiddaman#if defined(__cplusplus) 1319*906afcb8SAndy Fiddaman#define _BEGIN_EXTERNS_ extern "C" { 1320*906afcb8SAndy Fiddaman#define _END_EXTERNS_ } 1321*906afcb8SAndy Fiddaman#else 1322*906afcb8SAndy Fiddaman#define _BEGIN_EXTERNS_ 1323*906afcb8SAndy Fiddaman#define _END_EXTERNS_ 1324*906afcb8SAndy Fiddaman#endif 1325*906afcb8SAndy Fiddaman#define _NIL_(x) ((x)0)' 1326*906afcb8SAndy Fiddamantst= 1327*906afcb8SAndy Fiddamanext="#include <stdio.h>" 1328*906afcb8SAndy Fiddamannoext='*[<"][Ss][Tt][Dd][Ii][Oo].[Hh][">]*|*<ast.h>*|*<sfio.h>*|*/[*]<NOSTDIO>[*]/*' 1329*906afcb8SAndy Fiddaman 1330*906afcb8SAndy Fiddaman# loop on op [ arg [ ... ] ] [ : op [ arg [ ... ] ] ] 1331*906afcb8SAndy Fiddaman 1332*906afcb8SAndy Fiddamanargx=0 1333*906afcb8SAndy Fiddamancur=. 1334*906afcb8SAndy Fiddamancan= 1335*906afcb8SAndy Fiddamancansep= 1336*906afcb8SAndy Fiddamancctest= 1337*906afcb8SAndy Fiddamanfile= 1338*906afcb8SAndy Fiddamanhdrtest= 1339*906afcb8SAndy Fiddamanifelse=NONE 1340*906afcb8SAndy Fiddamanifstack= 1341*906afcb8SAndy Fiddamanini= 1342*906afcb8SAndy Fiddamaninit=1 1343*906afcb8SAndy Fiddamanline=0 1344*906afcb8SAndy Fiddamannan= 1345*906afcb8SAndy Fiddamanprototyped= 1346*906afcb8SAndy Fiddamanwhile : 1347*906afcb8SAndy Fiddamando case $in in 1348*906afcb8SAndy Fiddaman "") case $argx:$* in 1349*906afcb8SAndy Fiddaman 1:$argv);; 1350*906afcb8SAndy Fiddaman 1:*) argx=0 1351*906afcb8SAndy Fiddaman set x $argv 1352*906afcb8SAndy Fiddaman shift 1353*906afcb8SAndy Fiddaman ;; 1354*906afcb8SAndy Fiddaman esac 1355*906afcb8SAndy Fiddaman ;; 1356*906afcb8SAndy Fiddaman *) case $ini in 1357*906afcb8SAndy Fiddaman '') if read lin 1358*906afcb8SAndy Fiddaman then case $shell in 1359*906afcb8SAndy Fiddaman ksh) let line=line+1 ;; 1360*906afcb8SAndy Fiddaman *) line=`expr $line + 1` ;; 1361*906afcb8SAndy Fiddaman esac 1362*906afcb8SAndy Fiddaman $posix_noglob 1363*906afcb8SAndy Fiddaman set x $lin 1364*906afcb8SAndy Fiddaman $posix_glob 1365*906afcb8SAndy Fiddaman case $# in 1366*906afcb8SAndy Fiddaman 1) continue ;; 1367*906afcb8SAndy Fiddaman esac 1368*906afcb8SAndy Fiddaman else set x 1369*906afcb8SAndy Fiddaman fi 1370*906afcb8SAndy Fiddaman ;; 1371*906afcb8SAndy Fiddaman *) $posix_noglob 1372*906afcb8SAndy Fiddaman set x $ini 1373*906afcb8SAndy Fiddaman $posix_glob 1374*906afcb8SAndy Fiddaman ini= 1375*906afcb8SAndy Fiddaman ;; 1376*906afcb8SAndy Fiddaman esac 1377*906afcb8SAndy Fiddaman shift 1378*906afcb8SAndy Fiddaman case $init in 1379*906afcb8SAndy Fiddaman 1) case $1 in 1380*906afcb8SAndy Fiddaman iff) init=0 1381*906afcb8SAndy Fiddaman ;; 1382*906afcb8SAndy Fiddaman print|ref|set) 1383*906afcb8SAndy Fiddaman ;; 1384*906afcb8SAndy Fiddaman *) init=0 1385*906afcb8SAndy Fiddaman ini=$* 1386*906afcb8SAndy Fiddaman set ini 1387*906afcb8SAndy Fiddaman ;; 1388*906afcb8SAndy Fiddaman esac 1389*906afcb8SAndy Fiddaman esac 1390*906afcb8SAndy Fiddaman ;; 1391*906afcb8SAndy Fiddaman esac 1392*906afcb8SAndy Fiddaman case $# in 1393*906afcb8SAndy Fiddaman 0) case $ifstack in 1394*906afcb8SAndy Fiddaman ?*) echo "$command: $file$line: missing endif" >&$stderr 1395*906afcb8SAndy Fiddaman exit 1 1396*906afcb8SAndy Fiddaman ;; 1397*906afcb8SAndy Fiddaman esac 1398*906afcb8SAndy Fiddaman set set out + 1399*906afcb8SAndy Fiddaman ;; 1400*906afcb8SAndy Fiddaman esac 1401*906afcb8SAndy Fiddaman 1402*906afcb8SAndy Fiddaman # if nesting 1403*906afcb8SAndy Fiddaman 1404*906afcb8SAndy Fiddaman while : 1405*906afcb8SAndy Fiddaman do case $1 in 1406*906afcb8SAndy Fiddaman "if") ifstack="$ifelse:$ifstack" 1407*906afcb8SAndy Fiddaman case $ifelse in 1408*906afcb8SAndy Fiddaman KEEP|NONE) 1409*906afcb8SAndy Fiddaman ifelse=TEST 1410*906afcb8SAndy Fiddaman ;; 1411*906afcb8SAndy Fiddaman TEST) ;; 1412*906afcb8SAndy Fiddaman *) ifelse=DONE 1413*906afcb8SAndy Fiddaman ;; 1414*906afcb8SAndy Fiddaman esac 1415*906afcb8SAndy Fiddaman shift 1416*906afcb8SAndy Fiddaman case $explicit in 1417*906afcb8SAndy Fiddaman 1) set '' - "$@"; shift ;; 1418*906afcb8SAndy Fiddaman esac 1419*906afcb8SAndy Fiddaman ;; 1420*906afcb8SAndy Fiddaman "elif") case $ifelse in 1421*906afcb8SAndy Fiddaman SKIP) ifelse=TEST 1422*906afcb8SAndy Fiddaman ;; 1423*906afcb8SAndy Fiddaman TEST) ;; 1424*906afcb8SAndy Fiddaman *) ifelse=DONE 1425*906afcb8SAndy Fiddaman ;; 1426*906afcb8SAndy Fiddaman NONE) echo "$command: $file$line: $1: no matching if" >&$stderr 1427*906afcb8SAndy Fiddaman exit 1 1428*906afcb8SAndy Fiddaman ;; 1429*906afcb8SAndy Fiddaman esac 1430*906afcb8SAndy Fiddaman shift 1431*906afcb8SAndy Fiddaman case $explicit in 1432*906afcb8SAndy Fiddaman 1) set '' - "$@"; shift ;; 1433*906afcb8SAndy Fiddaman esac 1434*906afcb8SAndy Fiddaman ;; 1435*906afcb8SAndy Fiddaman "else") case $ifelse in 1436*906afcb8SAndy Fiddaman KEEP) ifelse=DONE 1437*906afcb8SAndy Fiddaman ;; 1438*906afcb8SAndy Fiddaman SKIP|TEST) 1439*906afcb8SAndy Fiddaman ifelse=KEEP 1440*906afcb8SAndy Fiddaman ;; 1441*906afcb8SAndy Fiddaman NONE) echo "$command: $file$line: $1: no matching if" >&$stderr 1442*906afcb8SAndy Fiddaman exit 1 1443*906afcb8SAndy Fiddaman ;; 1444*906afcb8SAndy Fiddaman esac 1445*906afcb8SAndy Fiddaman shift 1446*906afcb8SAndy Fiddaman ;; 1447*906afcb8SAndy Fiddaman "endif")case $ifelse in 1448*906afcb8SAndy Fiddaman NONE) echo "$command: $file$line: $1: no matching if" >&$stderr 1449*906afcb8SAndy Fiddaman exit 1 1450*906afcb8SAndy Fiddaman ;; 1451*906afcb8SAndy Fiddaman esac 1452*906afcb8SAndy Fiddaman case $shell in 1453*906afcb8SAndy Fiddaman ksh) ifelse=${ifstack%%:*} 1454*906afcb8SAndy Fiddaman ifstack=${ifstack#*:} 1455*906afcb8SAndy Fiddaman ;; 1456*906afcb8SAndy Fiddaman *) eval `echo $ifstack | sed 's,\([^:]*\):\(.*\),ifelse=\1 ifstack=\2,'` 1457*906afcb8SAndy Fiddaman ;; 1458*906afcb8SAndy Fiddaman esac 1459*906afcb8SAndy Fiddaman shift 1460*906afcb8SAndy Fiddaman ;; 1461*906afcb8SAndy Fiddaman *) break 1462*906afcb8SAndy Fiddaman ;; 1463*906afcb8SAndy Fiddaman esac 1464*906afcb8SAndy Fiddaman done 1465*906afcb8SAndy Fiddaman 1466*906afcb8SAndy Fiddaman # check if "run xxx" is equivalent to "set in xxx" 1467*906afcb8SAndy Fiddaman 1468*906afcb8SAndy Fiddaman case $1 in 1469*906afcb8SAndy Fiddaman "("*) set exp - "$@" ;; 1470*906afcb8SAndy Fiddaman *.iffe|*.iff) set run "$@" ;; 1471*906afcb8SAndy Fiddaman esac 1472*906afcb8SAndy Fiddaman case $1 in 1473*906afcb8SAndy Fiddaman :) shift 1474*906afcb8SAndy Fiddaman continue 1475*906afcb8SAndy Fiddaman ;; 1476*906afcb8SAndy Fiddaman run) case $shell in 1477*906afcb8SAndy Fiddaman bsh) case $2 in 1478*906afcb8SAndy Fiddaman */*) x=`echo $2 | sed 's,.*[\\\\/],,'` ;; 1479*906afcb8SAndy Fiddaman *) x=$2 ;; 1480*906afcb8SAndy Fiddaman esac 1481*906afcb8SAndy Fiddaman ;; 1482*906afcb8SAndy Fiddaman *) eval 'x=${2##*[\\/]}' 1483*906afcb8SAndy Fiddaman ;; 1484*906afcb8SAndy Fiddaman esac 1485*906afcb8SAndy Fiddaman case $x in 1486*906afcb8SAndy Fiddaman *.iffe|*.iff) 1487*906afcb8SAndy Fiddaman set set in $2 ;; 1488*906afcb8SAndy Fiddaman *.*) ;; 1489*906afcb8SAndy Fiddaman *) set set in $2 ;; 1490*906afcb8SAndy Fiddaman esac 1491*906afcb8SAndy Fiddaman ;; 1492*906afcb8SAndy Fiddaman esac 1493*906afcb8SAndy Fiddaman 1494*906afcb8SAndy Fiddaman # { inc set } drop out early 1495*906afcb8SAndy Fiddaman 1496*906afcb8SAndy Fiddaman case $1 in 1497*906afcb8SAndy Fiddaman ""|"#"*)continue 1498*906afcb8SAndy Fiddaman ;; 1499*906afcb8SAndy Fiddaman inc) case $ifelse in 1500*906afcb8SAndy Fiddaman DONE|SKIP) set ''; shift; continue ;; 1501*906afcb8SAndy Fiddaman esac 1502*906afcb8SAndy Fiddaman shift 1503*906afcb8SAndy Fiddaman case $# in 1504*906afcb8SAndy Fiddaman 0) echo "$command: $file$line: path expected" >&$stderr 1505*906afcb8SAndy Fiddaman exit 1 1506*906afcb8SAndy Fiddaman ;; 1507*906afcb8SAndy Fiddaman esac 1508*906afcb8SAndy Fiddaman p=$1 1509*906afcb8SAndy Fiddaman shift 1510*906afcb8SAndy Fiddaman if test ! -f $p 1511*906afcb8SAndy Fiddaman then echo "$command: $file$line: $p: file not found" >&$stderr 1512*906afcb8SAndy Fiddaman exit 1 1513*906afcb8SAndy Fiddaman fi 1514*906afcb8SAndy Fiddaman case $# in 1515*906afcb8SAndy Fiddaman 0) case $config in 1516*906afcb8SAndy Fiddaman 1) e="^HAVE_" ;; 1517*906afcb8SAndy Fiddaman *) e="^_" ;; 1518*906afcb8SAndy Fiddaman esac 1519*906afcb8SAndy Fiddaman ;; 1520*906afcb8SAndy Fiddaman 1) e=$1 1521*906afcb8SAndy Fiddaman ;; 1522*906afcb8SAndy Fiddaman *) shift 1523*906afcb8SAndy Fiddaman echo "$command: $file$line: warning: $*: operands ignored" >&$stderr 1524*906afcb8SAndy Fiddaman ;; 1525*906afcb8SAndy Fiddaman esac 1526*906afcb8SAndy Fiddaman eval `sed -e '/^#define[ ]/!d' -e 's/#define[ ]//' -e 's/[ (].*//' ${e:+"-e/$e/!d"} -e 's/.*/&=1/' $p | LC_ALL=C sort -u` 1527*906afcb8SAndy Fiddaman continue 1528*906afcb8SAndy Fiddaman ;; 1529*906afcb8SAndy Fiddaman set) case $ifelse in 1530*906afcb8SAndy Fiddaman DONE|SKIP) set ''; shift; continue ;; 1531*906afcb8SAndy Fiddaman esac 1532*906afcb8SAndy Fiddaman shift 1533*906afcb8SAndy Fiddaman case $1 in 1534*906afcb8SAndy Fiddaman ""|"#"*)op= 1535*906afcb8SAndy Fiddaman ;; 1536*906afcb8SAndy Fiddaman *) arg= 1537*906afcb8SAndy Fiddaman op=$1 1538*906afcb8SAndy Fiddaman case $op in 1539*906afcb8SAndy Fiddaman --*) case $shell in 1540*906afcb8SAndy Fiddaman bsh) op=`echo X$op | sed 's/X--//'` ;; 1541*906afcb8SAndy Fiddaman *) op=${op#--} ;; 1542*906afcb8SAndy Fiddaman esac 1543*906afcb8SAndy Fiddaman ;; 1544*906afcb8SAndy Fiddaman -*) case $op in 1545*906afcb8SAndy Fiddaman -??*) case $shell in 1546*906afcb8SAndy Fiddaman bsh) arg=`echo X$op | sed 's/X-.//'` 1547*906afcb8SAndy Fiddaman op=`echo X$op | sed 's/X\\(-.\\).*/\\1/'` 1548*906afcb8SAndy Fiddaman ;; 1549*906afcb8SAndy Fiddaman *) arg=${op#-?} 1550*906afcb8SAndy Fiddaman op=${op%$arg} 1551*906afcb8SAndy Fiddaman ;; 1552*906afcb8SAndy Fiddaman esac 1553*906afcb8SAndy Fiddaman ;; 1554*906afcb8SAndy Fiddaman esac 1555*906afcb8SAndy Fiddaman case $op in 1556*906afcb8SAndy Fiddaman a) op=all ;; 1557*906afcb8SAndy Fiddaman c) op=cc ;; 1558*906afcb8SAndy Fiddaman C) op=config ;; 1559*906afcb8SAndy Fiddaman d) op=debug ;; 1560*906afcb8SAndy Fiddaman D) op=define ;; 1561*906afcb8SAndy Fiddaman E) op=explicit ;; 1562*906afcb8SAndy Fiddaman F) op=features ;; 1563*906afcb8SAndy Fiddaman i) op=input ;; 1564*906afcb8SAndy Fiddaman I) op=include ;; 1565*906afcb8SAndy Fiddaman L) op=library ;; 1566*906afcb8SAndy Fiddaman n) op=namval ;; 1567*906afcb8SAndy Fiddaman N) op=nooptimize ;; 1568*906afcb8SAndy Fiddaman o) op=output ;; 1569*906afcb8SAndy Fiddaman e) op=package ;; 1570*906afcb8SAndy Fiddaman p) op=prototyped ;; 1571*906afcb8SAndy Fiddaman P) op=pragma ;; 1572*906afcb8SAndy Fiddaman r) op=regress ;; 1573*906afcb8SAndy Fiddaman s) op=shell ;; 1574*906afcb8SAndy Fiddaman S) op=static ;; 1575*906afcb8SAndy Fiddaman O) op=stdio ;; 1576*906afcb8SAndy Fiddaman u) op=undef ;; 1577*906afcb8SAndy Fiddaman v) op=verbose ;; 1578*906afcb8SAndy Fiddaman x) op=cross ;; 1579*906afcb8SAndy Fiddaman X) op=exclude ;; 1580*906afcb8SAndy Fiddaman esac 1581*906afcb8SAndy Fiddaman ;; 1582*906afcb8SAndy Fiddaman esac 1583*906afcb8SAndy Fiddaman shift 1584*906afcb8SAndy Fiddaman while : 1585*906afcb8SAndy Fiddaman do case $# in 1586*906afcb8SAndy Fiddaman 0) break ;; 1587*906afcb8SAndy Fiddaman esac 1588*906afcb8SAndy Fiddaman case $1 in 1589*906afcb8SAndy Fiddaman *" "*) shift 1590*906afcb8SAndy Fiddaman continue 1591*906afcb8SAndy Fiddaman ;; 1592*906afcb8SAndy Fiddaman ""|"#"*)break 1593*906afcb8SAndy Fiddaman ;; 1594*906afcb8SAndy Fiddaman :) shift 1595*906afcb8SAndy Fiddaman break 1596*906afcb8SAndy Fiddaman ;; 1597*906afcb8SAndy Fiddaman esac 1598*906afcb8SAndy Fiddaman case $arg in 1599*906afcb8SAndy Fiddaman "") arg=$1 ;; 1600*906afcb8SAndy Fiddaman *) arg="$arg $1" ;; 1601*906afcb8SAndy Fiddaman esac 1602*906afcb8SAndy Fiddaman shift 1603*906afcb8SAndy Fiddaman done 1604*906afcb8SAndy Fiddaman ;; 1605*906afcb8SAndy Fiddaman esac 1606*906afcb8SAndy Fiddaman case $op in 1607*906afcb8SAndy Fiddaman all) all=1 1608*906afcb8SAndy Fiddaman continue 1609*906afcb8SAndy Fiddaman ;; 1610*906afcb8SAndy Fiddaman altroot) case $arg in 1611*906afcb8SAndy Fiddaman ""|-) altroot= ;; 1612*906afcb8SAndy Fiddaman *) altroot="$arg" ;; 1613*906afcb8SAndy Fiddaman esac 1614*906afcb8SAndy Fiddaman continue 1615*906afcb8SAndy Fiddaman ;; 1616*906afcb8SAndy Fiddaman cc) occ= 1617*906afcb8SAndy Fiddaman for x in $arg 1618*906afcb8SAndy Fiddaman do case $occ in 1619*906afcb8SAndy Fiddaman "") case $x in 1620*906afcb8SAndy Fiddaman *=*) case $shell in 1621*906afcb8SAndy Fiddaman bsh) eval $x 1622*906afcb8SAndy Fiddaman export `echo $x | sed 's/=.*//'` 1623*906afcb8SAndy Fiddaman ;; 1624*906afcb8SAndy Fiddaman *) export $x 1625*906afcb8SAndy Fiddaman ;; 1626*906afcb8SAndy Fiddaman esac 1627*906afcb8SAndy Fiddaman ;; 1628*906afcb8SAndy Fiddaman -O*) case $optimize in 1629*906afcb8SAndy Fiddaman 1) occ=$x ;; 1630*906afcb8SAndy Fiddaman esac 1631*906afcb8SAndy Fiddaman ;; 1632*906afcb8SAndy Fiddaman *) occ=$x 1633*906afcb8SAndy Fiddaman ;; 1634*906afcb8SAndy Fiddaman esac 1635*906afcb8SAndy Fiddaman ;; 1636*906afcb8SAndy Fiddaman *) occ="$occ $x" 1637*906afcb8SAndy Fiddaman ;; 1638*906afcb8SAndy Fiddaman esac 1639*906afcb8SAndy Fiddaman done 1640*906afcb8SAndy Fiddaman exclude occ 1641*906afcb8SAndy Fiddaman continue 1642*906afcb8SAndy Fiddaman ;; 1643*906afcb8SAndy Fiddaman config) config=1 1644*906afcb8SAndy Fiddaman continue 1645*906afcb8SAndy Fiddaman ;; 1646*906afcb8SAndy Fiddaman cross) case $arg in 1647*906afcb8SAndy Fiddaman ""|-) cross= ;; 1648*906afcb8SAndy Fiddaman *) cross="$arg" libpaths= ;; 1649*906afcb8SAndy Fiddaman esac 1650*906afcb8SAndy Fiddaman continue 1651*906afcb8SAndy Fiddaman ;; 1652*906afcb8SAndy Fiddaman debug) debug=$arg 1653*906afcb8SAndy Fiddaman case $arg in 1654*906afcb8SAndy Fiddaman 0) exec 2>&$nullout 1655*906afcb8SAndy Fiddaman set - 1656*906afcb8SAndy Fiddaman show=echo 1657*906afcb8SAndy Fiddaman SHOW= 1658*906afcb8SAndy Fiddaman ;; 1659*906afcb8SAndy Fiddaman ""|1) exec 2>&$stderr 1660*906afcb8SAndy Fiddaman set - 1661*906afcb8SAndy Fiddaman show=echo 1662*906afcb8SAndy Fiddaman SHOW= 1663*906afcb8SAndy Fiddaman ;; 1664*906afcb8SAndy Fiddaman 2|3) exec 2>&$stderr 1665*906afcb8SAndy Fiddaman case $shell in 1666*906afcb8SAndy Fiddaman ksh) eval 'PS4="${PS4%+*([ ])}+\$LINENO+ "' 1667*906afcb8SAndy Fiddaman esac 1668*906afcb8SAndy Fiddaman show=echo 1669*906afcb8SAndy Fiddaman SHOW= 1670*906afcb8SAndy Fiddaman set -x 1671*906afcb8SAndy Fiddaman ;; 1672*906afcb8SAndy Fiddaman *) echo "$command: $arg: debug levels are 0, 1, 2, 3" >&$stderr 1673*906afcb8SAndy Fiddaman ;; 1674*906afcb8SAndy Fiddaman esac 1675*906afcb8SAndy Fiddaman continue 1676*906afcb8SAndy Fiddaman ;; 1677*906afcb8SAndy Fiddaman define) define=1 1678*906afcb8SAndy Fiddaman continue 1679*906afcb8SAndy Fiddaman ;; 1680*906afcb8SAndy Fiddaman exclude)case $arg in 1681*906afcb8SAndy Fiddaman ""|-) excludes= ;; 1682*906afcb8SAndy Fiddaman *) excludes="$excludes $arg" ;; 1683*906afcb8SAndy Fiddaman esac 1684*906afcb8SAndy Fiddaman exclude includes occ 1685*906afcb8SAndy Fiddaman continue 1686*906afcb8SAndy Fiddaman ;; 1687*906afcb8SAndy Fiddaman explicit) 1688*906afcb8SAndy Fiddaman explicit=1 1689*906afcb8SAndy Fiddaman continue 1690*906afcb8SAndy Fiddaman ;; 1691*906afcb8SAndy Fiddaman features)case $arg in 1692*906afcb8SAndy Fiddaman '') tst= ;; 1693*906afcb8SAndy Fiddaman *) tst="#include \"$arg\"" ;; 1694*906afcb8SAndy Fiddaman esac 1695*906afcb8SAndy Fiddaman continue 1696*906afcb8SAndy Fiddaman ;; 1697*906afcb8SAndy Fiddaman "in"|input) 1698*906afcb8SAndy Fiddaman case $arg in 1699*906afcb8SAndy Fiddaman "") in=- 1700*906afcb8SAndy Fiddaman ;; 1701*906afcb8SAndy Fiddaman *) in=$arg 1702*906afcb8SAndy Fiddaman if test ! -r $in 1703*906afcb8SAndy Fiddaman then echo "$command: $in: not found" >&$stderr 1704*906afcb8SAndy Fiddaman exit 1 1705*906afcb8SAndy Fiddaman fi 1706*906afcb8SAndy Fiddaman exec < $in 1707*906afcb8SAndy Fiddaman file=$in: 1708*906afcb8SAndy Fiddaman case $out in 1709*906afcb8SAndy Fiddaman "") case $in in 1710*906afcb8SAndy Fiddaman *[.\\/]*) 1711*906afcb8SAndy Fiddaman case $shell in 1712*906afcb8SAndy Fiddaman bsh) eval `echo $in | sed -e 's,.*[\\\\/],,' -e 's/\\.[^.]*//' -e 's/^/out=/'` 1713*906afcb8SAndy Fiddaman ;; 1714*906afcb8SAndy Fiddaman *) eval 'out=${in##*[\\/]}' 1715*906afcb8SAndy Fiddaman eval 'out=${out%.*}' 1716*906afcb8SAndy Fiddaman ;; 1717*906afcb8SAndy Fiddaman esac 1718*906afcb8SAndy Fiddaman ;; 1719*906afcb8SAndy Fiddaman *) out=$in 1720*906afcb8SAndy Fiddaman ;; 1721*906afcb8SAndy Fiddaman esac 1722*906afcb8SAndy Fiddaman ;; 1723*906afcb8SAndy Fiddaman esac 1724*906afcb8SAndy Fiddaman ;; 1725*906afcb8SAndy Fiddaman esac 1726*906afcb8SAndy Fiddaman continue 1727*906afcb8SAndy Fiddaman ;; 1728*906afcb8SAndy Fiddaman include)case $arg in 1729*906afcb8SAndy Fiddaman ""|-) includes= ;; 1730*906afcb8SAndy Fiddaman *) includes="$includes -I$arg" ;; 1731*906afcb8SAndy Fiddaman esac 1732*906afcb8SAndy Fiddaman exclude includes 1733*906afcb8SAndy Fiddaman continue 1734*906afcb8SAndy Fiddaman ;; 1735*906afcb8SAndy Fiddaman library)for y in $libpaths 1736*906afcb8SAndy Fiddaman do eval $y=\"\$$y:\$arg\$${y}_default\" 1737*906afcb8SAndy Fiddaman eval export $y 1738*906afcb8SAndy Fiddaman done 1739*906afcb8SAndy Fiddaman continue 1740*906afcb8SAndy Fiddaman ;; 1741*906afcb8SAndy Fiddaman namval) define=n 1742*906afcb8SAndy Fiddaman continue 1743*906afcb8SAndy Fiddaman ;; 1744*906afcb8SAndy Fiddaman nodebug)exec 2>&$nullout 1745*906afcb8SAndy Fiddaman set - 1746*906afcb8SAndy Fiddaman continue 1747*906afcb8SAndy Fiddaman ;; 1748*906afcb8SAndy Fiddaman nodefine) 1749*906afcb8SAndy Fiddaman define=0 1750*906afcb8SAndy Fiddaman continue 1751*906afcb8SAndy Fiddaman ;; 1752*906afcb8SAndy Fiddaman nooptimize) 1753*906afcb8SAndy Fiddaman optimize=0 1754*906afcb8SAndy Fiddaman case $occ in 1755*906afcb8SAndy Fiddaman *" -O"*)occ=`echo $occ | sed 's/ -O[^ ]*//g'` 1756*906afcb8SAndy Fiddaman cc=$occ 1757*906afcb8SAndy Fiddaman ;; 1758*906afcb8SAndy Fiddaman esac 1759*906afcb8SAndy Fiddaman ;; 1760*906afcb8SAndy Fiddaman optimize) 1761*906afcb8SAndy Fiddaman optimize=1 1762*906afcb8SAndy Fiddaman ;; 1763*906afcb8SAndy Fiddaman out|output) 1764*906afcb8SAndy Fiddaman out=$arg 1765*906afcb8SAndy Fiddaman defhdr= 1766*906afcb8SAndy Fiddaman usr= 1767*906afcb8SAndy Fiddaman deflib= 1768*906afcb8SAndy Fiddaman one= 1769*906afcb8SAndy Fiddaman puthdr= 1770*906afcb8SAndy Fiddaman putlib= 1771*906afcb8SAndy Fiddaman case $op in 1772*906afcb8SAndy Fiddaman output) continue ;; 1773*906afcb8SAndy Fiddaman esac 1774*906afcb8SAndy Fiddaman def= 1775*906afcb8SAndy Fiddaman test= 1776*906afcb8SAndy Fiddaman ;; 1777*906afcb8SAndy Fiddaman package)protoflags="$protoflags -e $arg" 1778*906afcb8SAndy Fiddaman continue 1779*906afcb8SAndy Fiddaman ;; 1780*906afcb8SAndy Fiddaman prototyped|noprototyped) 1781*906afcb8SAndy Fiddaman pragma="$pragma $op" 1782*906afcb8SAndy Fiddaman case $op in 1783*906afcb8SAndy Fiddaman prototyped) prototyped=1 ;; 1784*906afcb8SAndy Fiddaman *) prototyped= ;; 1785*906afcb8SAndy Fiddaman esac 1786*906afcb8SAndy Fiddaman continue 1787*906afcb8SAndy Fiddaman ;; 1788*906afcb8SAndy Fiddaman pragma) pragma="$pragma $arg" 1789*906afcb8SAndy Fiddaman continue 1790*906afcb8SAndy Fiddaman ;; 1791*906afcb8SAndy Fiddaman regress)regress=1 1792*906afcb8SAndy Fiddaman version=1995-03-19 1793*906afcb8SAndy Fiddaman continue 1794*906afcb8SAndy Fiddaman ;; 1795*906afcb8SAndy Fiddaman shell) case $arg in 1796*906afcb8SAndy Fiddaman osh) posix_read=-no 1797*906afcb8SAndy Fiddaman shell=bsh 1798*906afcb8SAndy Fiddaman ;; 1799*906afcb8SAndy Fiddaman esac 1800*906afcb8SAndy Fiddaman shell=$arg 1801*906afcb8SAndy Fiddaman continue 1802*906afcb8SAndy Fiddaman ;; 1803*906afcb8SAndy Fiddaman static) static=$arg 1804*906afcb8SAndy Fiddaman continue 1805*906afcb8SAndy Fiddaman ;; 1806*906afcb8SAndy Fiddaman stdio) case $arg in 1807*906afcb8SAndy Fiddaman '') ext= 1808*906afcb8SAndy Fiddaman ;; 1809*906afcb8SAndy Fiddaman *) ext= 1810*906afcb8SAndy Fiddaman sep= 1811*906afcb8SAndy Fiddaman for i in $arg 1812*906afcb8SAndy Fiddaman do case $i in 1813*906afcb8SAndy Fiddaman -) case $ext in 1814*906afcb8SAndy Fiddaman '') continue ;; 1815*906afcb8SAndy Fiddaman *) break ;; 1816*906afcb8SAndy Fiddaman esac 1817*906afcb8SAndy Fiddaman ;; 1818*906afcb8SAndy Fiddaman esac 1819*906afcb8SAndy Fiddaman echo "#include \"$i\"" > t.c 1820*906afcb8SAndy Fiddaman if $cc -E t.c > /dev/null 2>&1 1821*906afcb8SAndy Fiddaman then ext="$ext$sep#include \"$arg\"" 1822*906afcb8SAndy Fiddaman sep=$nl 1823*906afcb8SAndy Fiddaman fi 1824*906afcb8SAndy Fiddaman done 1825*906afcb8SAndy Fiddaman ;; 1826*906afcb8SAndy Fiddaman esac 1827*906afcb8SAndy Fiddaman continue 1828*906afcb8SAndy Fiddaman ;; 1829*906afcb8SAndy Fiddaman undef) undef=1 1830*906afcb8SAndy Fiddaman continue 1831*906afcb8SAndy Fiddaman ;; 1832*906afcb8SAndy Fiddaman verbose)verbose=1 1833*906afcb8SAndy Fiddaman continue 1834*906afcb8SAndy Fiddaman ;; 1835*906afcb8SAndy Fiddaman *) echo "$command: $op: unknown option" >&$stderr 1836*906afcb8SAndy Fiddaman exit 1 1837*906afcb8SAndy Fiddaman ;; 1838*906afcb8SAndy Fiddaman esac 1839*906afcb8SAndy Fiddaman ;; 1840*906afcb8SAndy Fiddaman api|define|extern|header|include|print|reference|ver) 1841*906afcb8SAndy Fiddaman op=$1 1842*906afcb8SAndy Fiddaman shift 1843*906afcb8SAndy Fiddaman arg= 1844*906afcb8SAndy Fiddaman ;; 1845*906afcb8SAndy Fiddaman *) case $2 in 1846*906afcb8SAndy Fiddaman '=') def=$1 1847*906afcb8SAndy Fiddaman shift 1848*906afcb8SAndy Fiddaman shift 1849*906afcb8SAndy Fiddaman ;; 1850*906afcb8SAndy Fiddaman *) case $1 in 1851*906afcb8SAndy Fiddaman '-'|'?')def=- 1852*906afcb8SAndy Fiddaman shift 1853*906afcb8SAndy Fiddaman ;; 1854*906afcb8SAndy Fiddaman *) def= 1855*906afcb8SAndy Fiddaman ;; 1856*906afcb8SAndy Fiddaman esac 1857*906afcb8SAndy Fiddaman ;; 1858*906afcb8SAndy Fiddaman esac 1859*906afcb8SAndy Fiddaman case $1 in 1860*906afcb8SAndy Fiddaman '!') not=1 1861*906afcb8SAndy Fiddaman shift 1862*906afcb8SAndy Fiddaman ;; 1863*906afcb8SAndy Fiddaman *) not= 1864*906afcb8SAndy Fiddaman ;; 1865*906afcb8SAndy Fiddaman esac 1866*906afcb8SAndy Fiddaman case $1 in 1867*906afcb8SAndy Fiddaman *'{') op=- 1868*906afcb8SAndy Fiddaman ;; 1869*906afcb8SAndy Fiddaman '('*|'"'*'"'|'<'*'>') 1870*906afcb8SAndy Fiddaman op=exp 1871*906afcb8SAndy Fiddaman case $def in 1872*906afcb8SAndy Fiddaman '') def=- ;; 1873*906afcb8SAndy Fiddaman esac 1874*906afcb8SAndy Fiddaman ;; 1875*906afcb8SAndy Fiddaman *) op=$1 1876*906afcb8SAndy Fiddaman shift 1877*906afcb8SAndy Fiddaman ;; 1878*906afcb8SAndy Fiddaman esac 1879*906afcb8SAndy Fiddaman arg= 1880*906afcb8SAndy Fiddaman cc="$occ $includes" 1881*906afcb8SAndy Fiddaman group= 1882*906afcb8SAndy Fiddaman groups= 1883*906afcb8SAndy Fiddaman fail= 1884*906afcb8SAndy Fiddaman hdr= 1885*906afcb8SAndy Fiddaman lib= 1886*906afcb8SAndy Fiddaman mac= 1887*906afcb8SAndy Fiddaman no= 1888*906afcb8SAndy Fiddaman note= 1889*906afcb8SAndy Fiddaman opt= 1890*906afcb8SAndy Fiddaman pass= 1891*906afcb8SAndy Fiddaman pth= 1892*906afcb8SAndy Fiddaman run= 1893*906afcb8SAndy Fiddaman set= 1894*906afcb8SAndy Fiddaman src= 1895*906afcb8SAndy Fiddaman test= 1896*906afcb8SAndy Fiddaman yes= 1897*906afcb8SAndy Fiddaman case $# in 1898*906afcb8SAndy Fiddaman 0) ;; 1899*906afcb8SAndy Fiddaman *) case $1 in 1900*906afcb8SAndy Fiddaman "#"*) set x 1901*906afcb8SAndy Fiddaman shift 1902*906afcb8SAndy Fiddaman ;; 1903*906afcb8SAndy Fiddaman *) case $op in 1904*906afcb8SAndy Fiddaman ref) ;; 1905*906afcb8SAndy Fiddaman *) case $1 in 1906*906afcb8SAndy Fiddaman '-') case $op:$2 in 1907*906afcb8SAndy Fiddaman tst:*) arg=$1 1908*906afcb8SAndy Fiddaman case $2 in 1909*906afcb8SAndy Fiddaman -) shift ;; 1910*906afcb8SAndy Fiddaman esac 1911*906afcb8SAndy Fiddaman ;; 1912*906afcb8SAndy Fiddaman *:-*) arg=$1 1913*906afcb8SAndy Fiddaman shift 1914*906afcb8SAndy Fiddaman ;; 1915*906afcb8SAndy Fiddaman *) def=- 1916*906afcb8SAndy Fiddaman shift 1917*906afcb8SAndy Fiddaman case $1 in 1918*906afcb8SAndy Fiddaman '('*|*'{'|'"'*'"'|'<'*'>') 1919*906afcb8SAndy Fiddaman arg=- 1920*906afcb8SAndy Fiddaman ;; 1921*906afcb8SAndy Fiddaman *) arg=$1 1922*906afcb8SAndy Fiddaman case $# in 1923*906afcb8SAndy Fiddaman 0) ;; 1924*906afcb8SAndy Fiddaman *) shift ;; 1925*906afcb8SAndy Fiddaman esac 1926*906afcb8SAndy Fiddaman ;; 1927*906afcb8SAndy Fiddaman esac 1928*906afcb8SAndy Fiddaman ;; 1929*906afcb8SAndy Fiddaman esac 1930*906afcb8SAndy Fiddaman ;; 1931*906afcb8SAndy Fiddaman -*|+*|'('*|*'{'|'"'*'"'|'<'*'>') 1932*906afcb8SAndy Fiddaman arg=- 1933*906afcb8SAndy Fiddaman ;; 1934*906afcb8SAndy Fiddaman *) arg=$1 1935*906afcb8SAndy Fiddaman shift 1936*906afcb8SAndy Fiddaman ;; 1937*906afcb8SAndy Fiddaman esac 1938*906afcb8SAndy Fiddaman ;; 1939*906afcb8SAndy Fiddaman esac 1940*906afcb8SAndy Fiddaman ;; 1941*906afcb8SAndy Fiddaman esac 1942*906afcb8SAndy Fiddaman case $1 in 1943*906afcb8SAndy Fiddaman '('*|'"'*'"'|'<'*'>') 1944*906afcb8SAndy Fiddaman while : 1945*906afcb8SAndy Fiddaman do case $# in 1946*906afcb8SAndy Fiddaman 0) break ;; 1947*906afcb8SAndy Fiddaman esac 1948*906afcb8SAndy Fiddaman case $1 in 1949*906afcb8SAndy Fiddaman *[.{}]*)break ;; 1950*906afcb8SAndy Fiddaman esac 1951*906afcb8SAndy Fiddaman case $test in 1952*906afcb8SAndy Fiddaman '') test=$1 ;; 1953*906afcb8SAndy Fiddaman *) test="$test $1" ;; 1954*906afcb8SAndy Fiddaman esac 1955*906afcb8SAndy Fiddaman shift 1956*906afcb8SAndy Fiddaman done 1957*906afcb8SAndy Fiddaman case $arg in 1958*906afcb8SAndy Fiddaman '') arg=- ;; 1959*906afcb8SAndy Fiddaman esac 1960*906afcb8SAndy Fiddaman case $op in 1961*906afcb8SAndy Fiddaman exp) case $def in 1962*906afcb8SAndy Fiddaman ''|'-') ;; 1963*906afcb8SAndy Fiddaman *) arg=$def ;; 1964*906afcb8SAndy Fiddaman esac 1965*906afcb8SAndy Fiddaman ;; 1966*906afcb8SAndy Fiddaman esac 1967*906afcb8SAndy Fiddaman ;; 1968*906afcb8SAndy Fiddaman esac 1969*906afcb8SAndy Fiddaman sline=$line 1970*906afcb8SAndy Fiddaman while : 1971*906afcb8SAndy Fiddaman do case $# in 1972*906afcb8SAndy Fiddaman 0) break ;; 1973*906afcb8SAndy Fiddaman esac 1974*906afcb8SAndy Fiddaman case $1 in 1975*906afcb8SAndy Fiddaman "") ;; 1976*906afcb8SAndy Fiddaman "#"*) set x 1977*906afcb8SAndy Fiddaman ;; 1978*906afcb8SAndy Fiddaman "=") shift 1979*906afcb8SAndy Fiddaman set=$* 1980*906afcb8SAndy Fiddaman case $set in 1981*906afcb8SAndy Fiddaman "") set=" " ;; 1982*906afcb8SAndy Fiddaman esac 1983*906afcb8SAndy Fiddaman while : 1984*906afcb8SAndy Fiddaman do case $# in 1985*906afcb8SAndy Fiddaman 0) break ;; 1986*906afcb8SAndy Fiddaman esac 1987*906afcb8SAndy Fiddaman shift 1988*906afcb8SAndy Fiddaman done 1989*906afcb8SAndy Fiddaman break 1990*906afcb8SAndy Fiddaman ;; 1991*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyz]*'{'|'{') 1992*906afcb8SAndy Fiddaman v=$1 1993*906afcb8SAndy Fiddaman shift 1994*906afcb8SAndy Fiddaman x= 1995*906afcb8SAndy Fiddaman case $v in 1996*906afcb8SAndy Fiddaman "note{") 1997*906afcb8SAndy Fiddaman sep=" " ;; 1998*906afcb8SAndy Fiddaman *) sep=$nl ;; 1999*906afcb8SAndy Fiddaman esac 2000*906afcb8SAndy Fiddaman case $v in 2001*906afcb8SAndy Fiddaman '{') e='}' ;; 2002*906afcb8SAndy Fiddaman *) e='}end' ;; 2003*906afcb8SAndy Fiddaman esac 2004*906afcb8SAndy Fiddaman n=1 2005*906afcb8SAndy Fiddaman SEP= 2006*906afcb8SAndy Fiddaman while : 2007*906afcb8SAndy Fiddaman do case $# in 2008*906afcb8SAndy Fiddaman 0) case $posix_read in 2009*906afcb8SAndy Fiddaman -*) checkread ;; 2010*906afcb8SAndy Fiddaman esac 2011*906afcb8SAndy Fiddaman case $in in 2012*906afcb8SAndy Fiddaman "") echo "$command: $file$line: missing }end" >&$stderr 2013*906afcb8SAndy Fiddaman exit 1 2014*906afcb8SAndy Fiddaman ;; 2015*906afcb8SAndy Fiddaman esac 2016*906afcb8SAndy Fiddaman while : 2017*906afcb8SAndy Fiddaman do case $posix_read in 2018*906afcb8SAndy Fiddaman 1) case $shell in 2019*906afcb8SAndy Fiddaman ksh) IFS= read -r lin 2020*906afcb8SAndy Fiddaman eof=$? 2021*906afcb8SAndy Fiddaman while : 2022*906afcb8SAndy Fiddaman do lin="${lin#[' ']}" 2023*906afcb8SAndy Fiddaman case $lin in 2024*906afcb8SAndy Fiddaman [' ']*'#'*);; 2025*906afcb8SAndy Fiddaman *) break ;; 2026*906afcb8SAndy Fiddaman esac 2027*906afcb8SAndy Fiddaman done 2028*906afcb8SAndy Fiddaman ;; 2029*906afcb8SAndy Fiddaman *) IFS= 2030*906afcb8SAndy Fiddaman read -r lin 2031*906afcb8SAndy Fiddaman eof=$? 2032*906afcb8SAndy Fiddaman IFS=$ifs 2033*906afcb8SAndy Fiddaman case $lin in 2034*906afcb8SAndy Fiddaman [' ']*) lin=`sed -e 's,^[ ],,' -e 's,^[ ]*#,#,' <<! 2035*906afcb8SAndy Fiddaman$lin 2036*906afcb8SAndy Fiddaman! 2037*906afcb8SAndy Fiddaman` 2038*906afcb8SAndy Fiddaman ;; 2039*906afcb8SAndy Fiddaman esac 2040*906afcb8SAndy Fiddaman ;; 2041*906afcb8SAndy Fiddaman esac 2042*906afcb8SAndy Fiddaman ;; 2043*906afcb8SAndy Fiddaman *) lin=`$posix_read` 2044*906afcb8SAndy Fiddaman eof=$? 2045*906afcb8SAndy Fiddaman ;; 2046*906afcb8SAndy Fiddaman esac 2047*906afcb8SAndy Fiddaman case $eof in 2048*906afcb8SAndy Fiddaman 0) case $shell in 2049*906afcb8SAndy Fiddaman ksh) let line=line+1 ;; 2050*906afcb8SAndy Fiddaman *) line=`expr $line + 1` ;; 2051*906afcb8SAndy Fiddaman esac 2052*906afcb8SAndy Fiddaman $posix_noglob 2053*906afcb8SAndy Fiddaman set x $lin 2054*906afcb8SAndy Fiddaman $posix_glob 2055*906afcb8SAndy Fiddaman case $2 in 2056*906afcb8SAndy Fiddaman $v) case $shell in 2057*906afcb8SAndy Fiddaman ksh) let n=n+1 ;; 2058*906afcb8SAndy Fiddaman *) n=`expr $n + 1` ;; 2059*906afcb8SAndy Fiddaman esac 2060*906afcb8SAndy Fiddaman ;; 2061*906afcb8SAndy Fiddaman $e|$e';') 2062*906afcb8SAndy Fiddaman case $n in 2063*906afcb8SAndy Fiddaman 1) shift 2064*906afcb8SAndy Fiddaman break 2 2065*906afcb8SAndy Fiddaman ;; 2066*906afcb8SAndy Fiddaman esac 2067*906afcb8SAndy Fiddaman case $shell in 2068*906afcb8SAndy Fiddaman ksh) let n=n-1 ;; 2069*906afcb8SAndy Fiddaman *) n=`expr $n - 1` ;; 2070*906afcb8SAndy Fiddaman esac 2071*906afcb8SAndy Fiddaman ;; 2072*906afcb8SAndy Fiddaman esac 2073*906afcb8SAndy Fiddaman x="$x$SEP$lin" 2074*906afcb8SAndy Fiddaman SEP=$sep 2075*906afcb8SAndy Fiddaman ;; 2076*906afcb8SAndy Fiddaman *) echo "$command: $file$line: missing $e" >&$stderr 2077*906afcb8SAndy Fiddaman exit 1 2078*906afcb8SAndy Fiddaman ;; 2079*906afcb8SAndy Fiddaman esac 2080*906afcb8SAndy Fiddaman done 2081*906afcb8SAndy Fiddaman ;; 2082*906afcb8SAndy Fiddaman esac 2083*906afcb8SAndy Fiddaman case $1 in 2084*906afcb8SAndy Fiddaman $v) case $shell in 2085*906afcb8SAndy Fiddaman ksh) let n=n+1 ;; 2086*906afcb8SAndy Fiddaman *) n=`expr $n + 1` ;; 2087*906afcb8SAndy Fiddaman esac 2088*906afcb8SAndy Fiddaman ;; 2089*906afcb8SAndy Fiddaman $e|$e';') 2090*906afcb8SAndy Fiddaman case $n in 2091*906afcb8SAndy Fiddaman 1) break ;; 2092*906afcb8SAndy Fiddaman esac 2093*906afcb8SAndy Fiddaman case $shell in 2094*906afcb8SAndy Fiddaman ksh) let n=n-1 ;; 2095*906afcb8SAndy Fiddaman *) n=`expr $n - 1` ;; 2096*906afcb8SAndy Fiddaman esac 2097*906afcb8SAndy Fiddaman ;; 2098*906afcb8SAndy Fiddaman esac 2099*906afcb8SAndy Fiddaman x="$x$SEP$1" 2100*906afcb8SAndy Fiddaman SEP=$sep 2101*906afcb8SAndy Fiddaman shift 2102*906afcb8SAndy Fiddaman done 2103*906afcb8SAndy Fiddaman case $v in 2104*906afcb8SAndy Fiddaman 'note{');; 2105*906afcb8SAndy Fiddaman *) x="$x$nl" # \r\n bash needs this barf # ;; 2106*906afcb8SAndy Fiddaman esac 2107*906afcb8SAndy Fiddaman case $v in 2108*906afcb8SAndy Fiddaman 'fail{') fail=$x ;; 2109*906afcb8SAndy Fiddaman 'nofail{') pass=$x v='pass{' ;; 2110*906afcb8SAndy Fiddaman 'nopass{') fail=$x v='fail{' ;; 2111*906afcb8SAndy Fiddaman 'no{') no=$x ;; 2112*906afcb8SAndy Fiddaman 'note{') note=$x ;; 2113*906afcb8SAndy Fiddaman 'pass{') pass=$x ;; 2114*906afcb8SAndy Fiddaman 'test{') test=$x ;; 2115*906afcb8SAndy Fiddaman 'yes{'|'{') yes=$x ;; 2116*906afcb8SAndy Fiddaman *) src=$x run=$v ;; 2117*906afcb8SAndy Fiddaman esac 2118*906afcb8SAndy Fiddaman ;; 2119*906afcb8SAndy Fiddaman :) shift 2120*906afcb8SAndy Fiddaman break 2121*906afcb8SAndy Fiddaman ;; 2122*906afcb8SAndy Fiddaman *[\"\'\(\)\{\}\ \ ]*) 2123*906afcb8SAndy Fiddaman case $op in 2124*906afcb8SAndy Fiddaman pth) pth="$pth $1" 2125*906afcb8SAndy Fiddaman ;; 2126*906afcb8SAndy Fiddaman *) case $test in 2127*906afcb8SAndy Fiddaman '') test=$1 ;; 2128*906afcb8SAndy Fiddaman *) test="$test $1" ;; 2129*906afcb8SAndy Fiddaman esac 2130*906afcb8SAndy Fiddaman ;; 2131*906afcb8SAndy Fiddaman esac 2132*906afcb8SAndy Fiddaman ;; 2133*906afcb8SAndy Fiddaman -) group=$group$1 2134*906afcb8SAndy Fiddaman case $group in 2135*906afcb8SAndy Fiddaman -) com_hdr=$hdr 2136*906afcb8SAndy Fiddaman com_lib=$lib 2137*906afcb8SAndy Fiddaman com_mac=$mac 2138*906afcb8SAndy Fiddaman com_opt=$opt 2139*906afcb8SAndy Fiddaman com_pth=$pth 2140*906afcb8SAndy Fiddaman com_test=$test 2141*906afcb8SAndy Fiddaman ;; 2142*906afcb8SAndy Fiddaman *) groups="$groups $1" 2143*906afcb8SAndy Fiddaman ;; 2144*906afcb8SAndy Fiddaman esac 2145*906afcb8SAndy Fiddaman ;; 2146*906afcb8SAndy Fiddaman -l*) case $group in 2147*906afcb8SAndy Fiddaman --*) groups="$groups $1" ;; 2148*906afcb8SAndy Fiddaman *) lib="$lib $1" ;; 2149*906afcb8SAndy Fiddaman esac 2150*906afcb8SAndy Fiddaman ;; 2151*906afcb8SAndy Fiddaman +l*) case $shell in 2152*906afcb8SAndy Fiddaman bsh) x=`echo X$1 | sed 's/X+/-/'` ;; 2153*906afcb8SAndy Fiddaman *) eval 'x=-${1#+}' ;; 2154*906afcb8SAndy Fiddaman esac 2155*906afcb8SAndy Fiddaman case $group in 2156*906afcb8SAndy Fiddaman --*) groups="$groups $x" ;; 2157*906afcb8SAndy Fiddaman *) lib="$lib $x" ;; 2158*906afcb8SAndy Fiddaman esac 2159*906afcb8SAndy Fiddaman ;; 2160*906afcb8SAndy Fiddaman -*|+*) case $op in 2161*906afcb8SAndy Fiddaman ref) cc="$cc $1" 2162*906afcb8SAndy Fiddaman occ="$occ $1" 2163*906afcb8SAndy Fiddaman case $1 in 2164*906afcb8SAndy Fiddaman -L*) case $shell in 2165*906afcb8SAndy Fiddaman ksh) x=${1#-L} ;; 2166*906afcb8SAndy Fiddaman *) x=`echo x$1 | sed 's,^x-L,,'` ;; 2167*906afcb8SAndy Fiddaman esac 2168*906afcb8SAndy Fiddaman for y in $libpaths 2169*906afcb8SAndy Fiddaman do eval $y=\"\$$y:\$x\$${y}_default\" 2170*906afcb8SAndy Fiddaman eval export $y 2171*906afcb8SAndy Fiddaman done 2172*906afcb8SAndy Fiddaman ;; 2173*906afcb8SAndy Fiddaman esac 2174*906afcb8SAndy Fiddaman ;; 2175*906afcb8SAndy Fiddaman *) case $group in 2176*906afcb8SAndy Fiddaman --*) groups="$groups $1" 2177*906afcb8SAndy Fiddaman ;; 2178*906afcb8SAndy Fiddaman *) case $op in 2179*906afcb8SAndy Fiddaman run) opt="$opt $1" 2180*906afcb8SAndy Fiddaman ;; 2181*906afcb8SAndy Fiddaman *) case $1 in 2182*906afcb8SAndy Fiddaman -D*) mac="$mac $1" ;; 2183*906afcb8SAndy Fiddaman *) cc="$cc $1" ;; 2184*906afcb8SAndy Fiddaman esac 2185*906afcb8SAndy Fiddaman ;; 2186*906afcb8SAndy Fiddaman esac 2187*906afcb8SAndy Fiddaman ;; 2188*906afcb8SAndy Fiddaman esac 2189*906afcb8SAndy Fiddaman ;; 2190*906afcb8SAndy Fiddaman esac 2191*906afcb8SAndy Fiddaman ;; 2192*906afcb8SAndy Fiddaman *.[aAxX]|*.[dD][lL][lL]|*.[lL][iI][bB]) 2193*906afcb8SAndy Fiddaman case $group in 2194*906afcb8SAndy Fiddaman --*) groups="$groups $1" ;; 2195*906afcb8SAndy Fiddaman *) lib="$lib $1" ;; 2196*906afcb8SAndy Fiddaman esac 2197*906afcb8SAndy Fiddaman ;; 2198*906afcb8SAndy Fiddaman *[.\\/]*) 2199*906afcb8SAndy Fiddaman case $group in 2200*906afcb8SAndy Fiddaman --*) groups="$groups $1" 2201*906afcb8SAndy Fiddaman ;; 2202*906afcb8SAndy Fiddaman *) case $op in 2203*906afcb8SAndy Fiddaman pth) pth="$pth $1" ;; 2204*906afcb8SAndy Fiddaman *) hdr="$hdr $1" ;; 2205*906afcb8SAndy Fiddaman esac 2206*906afcb8SAndy Fiddaman ;; 2207*906afcb8SAndy Fiddaman esac 2208*906afcb8SAndy Fiddaman ;; 2209*906afcb8SAndy Fiddaman *) case $group in 2210*906afcb8SAndy Fiddaman --*) groups="$groups $1" 2211*906afcb8SAndy Fiddaman ;; 2212*906afcb8SAndy Fiddaman *) case $op in 2213*906afcb8SAndy Fiddaman pth) pth="$pth $1" 2214*906afcb8SAndy Fiddaman ;; 2215*906afcb8SAndy Fiddaman *) case $test in 2216*906afcb8SAndy Fiddaman '') test=$1 ;; 2217*906afcb8SAndy Fiddaman *) test="$test $1" ;; 2218*906afcb8SAndy Fiddaman esac 2219*906afcb8SAndy Fiddaman ;; 2220*906afcb8SAndy Fiddaman esac 2221*906afcb8SAndy Fiddaman ;; 2222*906afcb8SAndy Fiddaman esac 2223*906afcb8SAndy Fiddaman ;; 2224*906afcb8SAndy Fiddaman esac 2225*906afcb8SAndy Fiddaman shift 2226*906afcb8SAndy Fiddaman done 2227*906afcb8SAndy Fiddaman case $group in 2228*906afcb8SAndy Fiddaman -) group= ;; 2229*906afcb8SAndy Fiddaman esac 2230*906afcb8SAndy Fiddaman ;; 2231*906afcb8SAndy Fiddaman esac 2232*906afcb8SAndy Fiddaman ;; 2233*906afcb8SAndy Fiddaman esac 2234*906afcb8SAndy Fiddaman case $ifelse in 2235*906afcb8SAndy Fiddaman DONE|SKIP) continue ;; 2236*906afcb8SAndy Fiddaman esac 2237*906afcb8SAndy Fiddaman 2238*906afcb8SAndy Fiddaman # make sure $cc compiles C 2239*906afcb8SAndy Fiddaman 2240*906afcb8SAndy Fiddaman case $cc in 2241*906afcb8SAndy Fiddaman "") cc="$occ $includes" ;; 2242*906afcb8SAndy Fiddaman esac 2243*906afcb8SAndy Fiddaman case $cctest in 2244*906afcb8SAndy Fiddaman "") checkcc ;; 2245*906afcb8SAndy Fiddaman esac 2246*906afcb8SAndy Fiddaman 2247*906afcb8SAndy Fiddaman # some ops allow no args 2248*906afcb8SAndy Fiddaman 2249*906afcb8SAndy Fiddaman case $arg in 2250*906afcb8SAndy Fiddaman '') case $op in 2251*906afcb8SAndy Fiddaman api) arg=- 2252*906afcb8SAndy Fiddaman case $1:$2 in 2253*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) 2254*906afcb8SAndy Fiddaman a=$1 2255*906afcb8SAndy Fiddaman shift 2256*906afcb8SAndy Fiddaman case " $apis " in 2257*906afcb8SAndy Fiddaman *" $a "*) 2258*906afcb8SAndy Fiddaman ;; 2259*906afcb8SAndy Fiddaman *) apis="$apis $a" 2260*906afcb8SAndy Fiddaman eval api_sym_${a}= api_ver_${a}= 2261*906afcb8SAndy Fiddaman ;; 2262*906afcb8SAndy Fiddaman esac 2263*906afcb8SAndy Fiddaman rel= 2264*906afcb8SAndy Fiddaman while : 2265*906afcb8SAndy Fiddaman do case $# in 2266*906afcb8SAndy Fiddaman 0) break ;; 2267*906afcb8SAndy Fiddaman esac 2268*906afcb8SAndy Fiddaman case $1 in 2269*906afcb8SAndy Fiddaman [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) 2270*906afcb8SAndy Fiddaman rel="$rel $1" 2271*906afcb8SAndy Fiddaman ;; 2272*906afcb8SAndy Fiddaman *) break 2273*906afcb8SAndy Fiddaman ;; 2274*906afcb8SAndy Fiddaman esac 2275*906afcb8SAndy Fiddaman shift 2276*906afcb8SAndy Fiddaman done 2277*906afcb8SAndy Fiddaman while : 2278*906afcb8SAndy Fiddaman do case $# in 2279*906afcb8SAndy Fiddaman 0) break ;; 2280*906afcb8SAndy Fiddaman esac 2281*906afcb8SAndy Fiddaman case $1 in 2282*906afcb8SAndy Fiddaman :) break ;; 2283*906afcb8SAndy Fiddaman esac 2284*906afcb8SAndy Fiddaman eval syms='$'api_sym_${a} 2285*906afcb8SAndy Fiddaman case $syms in 2286*906afcb8SAndy Fiddaman '') sep='' ;; 2287*906afcb8SAndy Fiddaman *) sep=$nl ;; 2288*906afcb8SAndy Fiddaman esac 2289*906afcb8SAndy Fiddaman for r in $rel 2290*906afcb8SAndy Fiddaman do syms=$syms$sep${1}:${r} 2291*906afcb8SAndy Fiddaman sep=$nl 2292*906afcb8SAndy Fiddaman done 2293*906afcb8SAndy Fiddaman eval api_sym_${a}='$'syms 2294*906afcb8SAndy Fiddaman shift 2295*906afcb8SAndy Fiddaman done 2296*906afcb8SAndy Fiddaman ;; 2297*906afcb8SAndy Fiddaman *) echo "$command: $op: expected: name YYYYMMDD symbol ..." >&$stderr 2298*906afcb8SAndy Fiddaman ;; 2299*906afcb8SAndy Fiddaman esac 2300*906afcb8SAndy Fiddaman while : 2301*906afcb8SAndy Fiddaman do case $# in 2302*906afcb8SAndy Fiddaman 0) break ;; 2303*906afcb8SAndy Fiddaman esac 2304*906afcb8SAndy Fiddaman case $1 in 2305*906afcb8SAndy Fiddaman :) break ;; 2306*906afcb8SAndy Fiddaman esac 2307*906afcb8SAndy Fiddaman shift 2308*906afcb8SAndy Fiddaman done 2309*906afcb8SAndy Fiddaman ;; 2310*906afcb8SAndy Fiddaman iff|ini)arg=- 2311*906afcb8SAndy Fiddaman ;; 2312*906afcb8SAndy Fiddaman comment)copy - "/* $* */" 2313*906afcb8SAndy Fiddaman continue 2314*906afcb8SAndy Fiddaman ;; 2315*906afcb8SAndy Fiddaman define) x=$1 2316*906afcb8SAndy Fiddaman shift 2317*906afcb8SAndy Fiddaman case $1 in 2318*906afcb8SAndy Fiddaman '('*')') 2319*906afcb8SAndy Fiddaman arg=$1 2320*906afcb8SAndy Fiddaman shift 2321*906afcb8SAndy Fiddaman ;; 2322*906afcb8SAndy Fiddaman esac 2323*906afcb8SAndy Fiddaman case $in in 2324*906afcb8SAndy Fiddaman "") v= 2325*906afcb8SAndy Fiddaman while : 2326*906afcb8SAndy Fiddaman do case $# in 2327*906afcb8SAndy Fiddaman 0) break ;; 2328*906afcb8SAndy Fiddaman esac 2329*906afcb8SAndy Fiddaman t=$1 2330*906afcb8SAndy Fiddaman shift 2331*906afcb8SAndy Fiddaman case $t in 2332*906afcb8SAndy Fiddaman ":") break ;; 2333*906afcb8SAndy Fiddaman esac 2334*906afcb8SAndy Fiddaman v="$v $t" 2335*906afcb8SAndy Fiddaman done 2336*906afcb8SAndy Fiddaman ;; 2337*906afcb8SAndy Fiddaman *) v=$* 2338*906afcb8SAndy Fiddaman ;; 2339*906afcb8SAndy Fiddaman esac 2340*906afcb8SAndy Fiddaman is mac $x 2341*906afcb8SAndy Fiddaman copy $tmp.c "$std 2342*906afcb8SAndy Fiddaman$usr 2343*906afcb8SAndy Fiddaman#ifndef $x 2344*906afcb8SAndy Fiddaman( 2345*906afcb8SAndy Fiddaman#endif 2346*906afcb8SAndy Fiddamanint x; 2347*906afcb8SAndy Fiddaman" 2348*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 2349*906afcb8SAndy Fiddaman then success - 2350*906afcb8SAndy Fiddaman else failure - 2351*906afcb8SAndy Fiddaman copy - "#define $x$arg $v" 2352*906afcb8SAndy Fiddaman usr="$usr${nl}#define $x$arg $v" 2353*906afcb8SAndy Fiddaman fi 2354*906afcb8SAndy Fiddaman continue 2355*906afcb8SAndy Fiddaman ;; 2356*906afcb8SAndy Fiddaman extern) x=$1 2357*906afcb8SAndy Fiddaman shift 2358*906afcb8SAndy Fiddaman t=$1 2359*906afcb8SAndy Fiddaman shift 2360*906afcb8SAndy Fiddaman is npt $x 2361*906afcb8SAndy Fiddaman copy $tmp.c " 2362*906afcb8SAndy Fiddaman$std 2363*906afcb8SAndy Fiddaman#include <sys/types.h> 2364*906afcb8SAndy Fiddaman$usr 2365*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 2366*906afcb8SAndy Fiddamanstruct _iffe_struct { int _iffe_member; }; 2367*906afcb8SAndy Fiddamanextern struct _iffe_struct* $x _ARG_((struct _iffe_struct*)); 2368*906afcb8SAndy Fiddaman_END_EXTERNS_ 2369*906afcb8SAndy Fiddaman" 2370*906afcb8SAndy Fiddaman # some compilers with -O only warn for invalid intrinsic prototypes 2371*906afcb8SAndy Fiddaman case " $cc " in 2372*906afcb8SAndy Fiddaman *" -O "*) xx=`echo $cc | sed 's/ -O / /g'` ;; 2373*906afcb8SAndy Fiddaman *) xx=$cc ;; 2374*906afcb8SAndy Fiddaman esac 2375*906afcb8SAndy Fiddaman if compile $xx -c $tmp.c <&$nullin >&$nullout 2376*906afcb8SAndy Fiddaman then success - 2377*906afcb8SAndy Fiddaman while : 2378*906afcb8SAndy Fiddaman do case $1 in 2379*906afcb8SAndy Fiddaman ''|'('*|'['*) 2380*906afcb8SAndy Fiddaman break 2381*906afcb8SAndy Fiddaman ;; 2382*906afcb8SAndy Fiddaman esac 2383*906afcb8SAndy Fiddaman t="$t $1" 2384*906afcb8SAndy Fiddaman shift 2385*906afcb8SAndy Fiddaman done 2386*906afcb8SAndy Fiddaman case $in in 2387*906afcb8SAndy Fiddaman "") v= 2388*906afcb8SAndy Fiddaman while : 2389*906afcb8SAndy Fiddaman do case $# in 2390*906afcb8SAndy Fiddaman 0) break ;; 2391*906afcb8SAndy Fiddaman esac 2392*906afcb8SAndy Fiddaman t=$1 2393*906afcb8SAndy Fiddaman shift 2394*906afcb8SAndy Fiddaman case $t in 2395*906afcb8SAndy Fiddaman ":") break ;; 2396*906afcb8SAndy Fiddaman esac 2397*906afcb8SAndy Fiddaman v="$v $t" 2398*906afcb8SAndy Fiddaman done 2399*906afcb8SAndy Fiddaman ;; 2400*906afcb8SAndy Fiddaman *) v=$* 2401*906afcb8SAndy Fiddaman ;; 2402*906afcb8SAndy Fiddaman esac 2403*906afcb8SAndy Fiddaman copy - "extern $t $x$v;" 2404*906afcb8SAndy Fiddaman # NOTE: technically if prototyped is on all tests should 2405*906afcb8SAndy Fiddaman # be run through proto(1), but we'd like iffe to 2406*906afcb8SAndy Fiddaman # work sans proto -- so we drop the extern's in 2407*906afcb8SAndy Fiddaman # the test headers 2408*906afcb8SAndy Fiddaman case $prototyped in 2409*906afcb8SAndy Fiddaman '') usr="$usr${nl}extern $t $x$v;" ;; 2410*906afcb8SAndy Fiddaman esac 2411*906afcb8SAndy Fiddaman else failure - 2412*906afcb8SAndy Fiddaman case $in in 2413*906afcb8SAndy Fiddaman "") while : 2414*906afcb8SAndy Fiddaman do case $# in 2415*906afcb8SAndy Fiddaman 0) break ;; 2416*906afcb8SAndy Fiddaman esac 2417*906afcb8SAndy Fiddaman case $1 in 2418*906afcb8SAndy Fiddaman ":") break ;; 2419*906afcb8SAndy Fiddaman esac 2420*906afcb8SAndy Fiddaman done 2421*906afcb8SAndy Fiddaman ;; 2422*906afcb8SAndy Fiddaman esac 2423*906afcb8SAndy Fiddaman fi 2424*906afcb8SAndy Fiddaman continue 2425*906afcb8SAndy Fiddaman ;; 2426*906afcb8SAndy Fiddaman header|include|reference) 2427*906afcb8SAndy Fiddaman while : 2428*906afcb8SAndy Fiddaman do case $# in 2429*906afcb8SAndy Fiddaman 0) break ;; 2430*906afcb8SAndy Fiddaman esac 2431*906afcb8SAndy Fiddaman x=$1 2432*906afcb8SAndy Fiddaman shift 2433*906afcb8SAndy Fiddaman case $x in 2434*906afcb8SAndy Fiddaman ":") break ;; 2435*906afcb8SAndy Fiddaman esac 2436*906afcb8SAndy Fiddaman case " $gothdr " in 2437*906afcb8SAndy Fiddaman *" - $x "*) 2438*906afcb8SAndy Fiddaman ;; 2439*906afcb8SAndy Fiddaman *" + $x "*) 2440*906afcb8SAndy Fiddaman case $usr in 2441*906afcb8SAndy Fiddaman *"# include <"$x">"*) 2442*906afcb8SAndy Fiddaman ;; 2443*906afcb8SAndy Fiddaman *) case $op in 2444*906afcb8SAndy Fiddaman reference) 2445*906afcb8SAndy Fiddaman ;; 2446*906afcb8SAndy Fiddaman *) copy - "#include <$x>" 2447*906afcb8SAndy Fiddaman ;; 2448*906afcb8SAndy Fiddaman esac 2449*906afcb8SAndy Fiddaman usr="$usr${nl}#include <$x>" 2450*906afcb8SAndy Fiddaman ;; 2451*906afcb8SAndy Fiddaman esac 2452*906afcb8SAndy Fiddaman ;; 2453*906afcb8SAndy Fiddaman *) copy $tmp.c "$std 2454*906afcb8SAndy Fiddaman$usr 2455*906afcb8SAndy Fiddaman#include <$x> 2456*906afcb8SAndy Fiddamanint x; 2457*906afcb8SAndy Fiddaman" 2458*906afcb8SAndy Fiddaman if is_hdr - $x 2459*906afcb8SAndy Fiddaman then gothdr="$gothdr + $x" 2460*906afcb8SAndy Fiddaman case $op in 2461*906afcb8SAndy Fiddaman reference) 2462*906afcb8SAndy Fiddaman ;; 2463*906afcb8SAndy Fiddaman *) copy - "#include <$x>" 2464*906afcb8SAndy Fiddaman ;; 2465*906afcb8SAndy Fiddaman esac 2466*906afcb8SAndy Fiddaman usr="$usr${nl}#include <$x>" 2467*906afcb8SAndy Fiddaman else gothdr="$gothdr - $x" 2468*906afcb8SAndy Fiddaman fi 2469*906afcb8SAndy Fiddaman ;; 2470*906afcb8SAndy Fiddaman esac 2471*906afcb8SAndy Fiddaman done 2472*906afcb8SAndy Fiddaman continue 2473*906afcb8SAndy Fiddaman ;; 2474*906afcb8SAndy Fiddaman print) case $in in 2475*906afcb8SAndy Fiddaman "") v= 2476*906afcb8SAndy Fiddaman while : 2477*906afcb8SAndy Fiddaman do case $# in 2478*906afcb8SAndy Fiddaman 0) break ;; 2479*906afcb8SAndy Fiddaman esac 2480*906afcb8SAndy Fiddaman t=$1 2481*906afcb8SAndy Fiddaman shift 2482*906afcb8SAndy Fiddaman case $t in 2483*906afcb8SAndy Fiddaman ":") break ;; 2484*906afcb8SAndy Fiddaman esac 2485*906afcb8SAndy Fiddaman v="$v $t" 2486*906afcb8SAndy Fiddaman done 2487*906afcb8SAndy Fiddaman ;; 2488*906afcb8SAndy Fiddaman *) v=$* 2489*906afcb8SAndy Fiddaman ;; 2490*906afcb8SAndy Fiddaman esac 2491*906afcb8SAndy Fiddaman copy - "$*" 2492*906afcb8SAndy Fiddaman usr="$usr${nl}$v" 2493*906afcb8SAndy Fiddaman continue 2494*906afcb8SAndy Fiddaman ;; 2495*906afcb8SAndy Fiddaman ver) arg=- 2496*906afcb8SAndy Fiddaman case $1:$2 in 2497*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]) 2498*906afcb8SAndy Fiddaman vers="$vers$nl$1" 2499*906afcb8SAndy Fiddaman eval ver_$1=$2 2500*906afcb8SAndy Fiddaman ;; 2501*906afcb8SAndy Fiddaman *) echo "$command: $op: expected: name YYYYMMDD" >&$stderr 2502*906afcb8SAndy Fiddaman ;; 2503*906afcb8SAndy Fiddaman esac 2504*906afcb8SAndy Fiddaman while : 2505*906afcb8SAndy Fiddaman do case $# in 2506*906afcb8SAndy Fiddaman 0) break ;; 2507*906afcb8SAndy Fiddaman esac 2508*906afcb8SAndy Fiddaman case $1 in 2509*906afcb8SAndy Fiddaman :) break ;; 2510*906afcb8SAndy Fiddaman esac 2511*906afcb8SAndy Fiddaman shift 2512*906afcb8SAndy Fiddaman done 2513*906afcb8SAndy Fiddaman ;; 2514*906afcb8SAndy Fiddaman esac 2515*906afcb8SAndy Fiddaman ;; 2516*906afcb8SAndy Fiddaman esac 2517*906afcb8SAndy Fiddaman 2518*906afcb8SAndy Fiddaman # NOTE() support 2519*906afcb8SAndy Fiddaman 2520*906afcb8SAndy Fiddaman case $ext in 2521*906afcb8SAndy Fiddaman *"<stdio.h>"*) 2522*906afcb8SAndy Fiddaman case $ext in 2523*906afcb8SAndy Fiddaman *"#define NOTE("*) 2524*906afcb8SAndy Fiddaman ;; 2525*906afcb8SAndy Fiddaman *) ext="$ext 2526*906afcb8SAndy Fiddaman#define NOTE(s) do{write(9,\" \",1);write(9,s,strlen(s));write(9,\" ...\",4);}while(0)" 2527*906afcb8SAndy Fiddaman ;; 2528*906afcb8SAndy Fiddaman esac 2529*906afcb8SAndy Fiddaman ;; 2530*906afcb8SAndy Fiddaman esac 2531*906afcb8SAndy Fiddaman 2532*906afcb8SAndy Fiddaman # save $* for ancient shells 2533*906afcb8SAndy Fiddaman 2534*906afcb8SAndy Fiddaman argx=1 2535*906afcb8SAndy Fiddaman argv=$* 2536*906afcb8SAndy Fiddaman 2537*906afcb8SAndy Fiddaman # loop on all candidate groups 2538*906afcb8SAndy Fiddaman 2539*906afcb8SAndy Fiddaman while : 2540*906afcb8SAndy Fiddaman do 2541*906afcb8SAndy Fiddaman # check the candidate macros 2542*906afcb8SAndy Fiddaman 2543*906afcb8SAndy Fiddaman cc="$cc $mac" 2544*906afcb8SAndy Fiddaman 2545*906afcb8SAndy Fiddaman # check for global default headers (some cc -E insist on compiling) 2546*906afcb8SAndy Fiddaman 2547*906afcb8SAndy Fiddaman case $hdrtest in 2548*906afcb8SAndy Fiddaman '') hdrtest=1 2549*906afcb8SAndy Fiddaman allinc= 2550*906afcb8SAndy Fiddaman for x in types 2551*906afcb8SAndy Fiddaman do case $config in 2552*906afcb8SAndy Fiddaman 0) c=_sys_${x} 2553*906afcb8SAndy Fiddaman ;; 2554*906afcb8SAndy Fiddaman 1) case $shell in 2555*906afcb8SAndy Fiddaman ksh) typeset -u u=$x ;; 2556*906afcb8SAndy Fiddaman *) u=`echo $x | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 2557*906afcb8SAndy Fiddaman esac 2558*906afcb8SAndy Fiddaman c=HAVE_SYS_${u}_H 2559*906afcb8SAndy Fiddaman ;; 2560*906afcb8SAndy Fiddaman esac 2561*906afcb8SAndy Fiddaman x=sys/$x.h 2562*906afcb8SAndy Fiddaman echo "${allinc}#include <$x>" > $tmp.c 2563*906afcb8SAndy Fiddaman if is_hdr $x 2564*906afcb8SAndy Fiddaman then gothdr="$gothdr + $x" 2565*906afcb8SAndy Fiddaman case $explicit in 2566*906afcb8SAndy Fiddaman 0) can="$can$cansep#define $c 1 /* #include <$x> ok */" 2567*906afcb8SAndy Fiddaman nan="$nan$cansep$c=1" 2568*906afcb8SAndy Fiddaman cansep=$nl 2569*906afcb8SAndy Fiddaman ;; 2570*906afcb8SAndy Fiddaman esac 2571*906afcb8SAndy Fiddaman eval $c=1 2572*906afcb8SAndy Fiddaman allinc="${allinc}#include <$x>$nl" 2573*906afcb8SAndy Fiddaman else gothdr="$gothdr - $x" 2574*906afcb8SAndy Fiddaman case $explicit$all$config$undef in 2575*906afcb8SAndy Fiddaman 0?1?|0??1) 2576*906afcb8SAndy Fiddaman can="$can$cansep#undef $c /* #include <$x> not ok */" 2577*906afcb8SAndy Fiddaman nan="$nan$cansep$c=" 2578*906afcb8SAndy Fiddaman cansep=$nl 2579*906afcb8SAndy Fiddaman ;; 2580*906afcb8SAndy Fiddaman 01??) can="$can$cansep#define $c 0 /* #include <$x> not ok */" 2581*906afcb8SAndy Fiddaman nan="$nan$cansep$c=0" 2582*906afcb8SAndy Fiddaman cansep=$nl 2583*906afcb8SAndy Fiddaman ;; 2584*906afcb8SAndy Fiddaman esac 2585*906afcb8SAndy Fiddaman fi 2586*906afcb8SAndy Fiddaman done 2587*906afcb8SAndy Fiddaman ;; 2588*906afcb8SAndy Fiddaman esac 2589*906afcb8SAndy Fiddaman 2590*906afcb8SAndy Fiddaman # add implicit headers/libraries before the checks 2591*906afcb8SAndy Fiddaman 2592*906afcb8SAndy Fiddaman case $op in 2593*906afcb8SAndy Fiddaman npt) hdr="sys/types.h stdlib.h unistd.h $hdr" 2594*906afcb8SAndy Fiddaman ;; 2595*906afcb8SAndy Fiddaman siz|typ)hdr="sys/types.h time.h sys/time.h sys/times.h stddef.h stdlib.h $hdr" 2596*906afcb8SAndy Fiddaman ;; 2597*906afcb8SAndy Fiddaman esac 2598*906afcb8SAndy Fiddaman 2599*906afcb8SAndy Fiddaman # check the candidate headers 2600*906afcb8SAndy Fiddaman 2601*906afcb8SAndy Fiddaman case $hdr in 2602*906afcb8SAndy Fiddaman ?*) z=$hdr 2603*906afcb8SAndy Fiddaman hdr= 2604*906afcb8SAndy Fiddaman dis=0 2605*906afcb8SAndy Fiddaman for x in $z 2606*906afcb8SAndy Fiddaman do case $x in 2607*906afcb8SAndy Fiddaman *.h) case " $gothdr " in 2608*906afcb8SAndy Fiddaman *" - $x "*) 2609*906afcb8SAndy Fiddaman continue 2610*906afcb8SAndy Fiddaman ;; 2611*906afcb8SAndy Fiddaman *" + $x "*) 2612*906afcb8SAndy Fiddaman ;; 2613*906afcb8SAndy Fiddaman *) case $shell in 2614*906afcb8SAndy Fiddaman bsh) eval `echo $x | sed -e 's,^\\([^\\\\/]*\\).*[\\\\/]\\([^\\\\/]*\\)\$,\\1_\\2,' -e 's/\\..*//' -e 's/^/c=/'` 2615*906afcb8SAndy Fiddaman ;; 2616*906afcb8SAndy Fiddaman *) eval 'c=${x##*[\\/]}' 2617*906afcb8SAndy Fiddaman eval 'c=${c%%.*}' 2618*906afcb8SAndy Fiddaman case $x in 2619*906afcb8SAndy Fiddaman */*) eval 'c=${x%%[\\/]*}_${c}' ;; 2620*906afcb8SAndy Fiddaman esac 2621*906afcb8SAndy Fiddaman ;; 2622*906afcb8SAndy Fiddaman esac 2623*906afcb8SAndy Fiddaman case $explicit in 2624*906afcb8SAndy Fiddaman 0) dis=0 2625*906afcb8SAndy Fiddaman ;; 2626*906afcb8SAndy Fiddaman *) case $x in 2627*906afcb8SAndy Fiddaman */*) dis=$c ;; 2628*906afcb8SAndy Fiddaman *) dis=hdr ;; 2629*906afcb8SAndy Fiddaman esac 2630*906afcb8SAndy Fiddaman case ${dis}_ in 2631*906afcb8SAndy Fiddaman ${op}_*)dis=0 ;; 2632*906afcb8SAndy Fiddaman *) dis=1 ;; 2633*906afcb8SAndy Fiddaman esac 2634*906afcb8SAndy Fiddaman ;; 2635*906afcb8SAndy Fiddaman esac 2636*906afcb8SAndy Fiddaman case $config in 2637*906afcb8SAndy Fiddaman 0) case $x in 2638*906afcb8SAndy Fiddaman */*) c=_${c} ;; 2639*906afcb8SAndy Fiddaman *) c=_hdr_${c} ;; 2640*906afcb8SAndy Fiddaman esac 2641*906afcb8SAndy Fiddaman ;; 2642*906afcb8SAndy Fiddaman 1) case $shell in 2643*906afcb8SAndy Fiddaman ksh) typeset -u u=$c ;; 2644*906afcb8SAndy Fiddaman *) u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 2645*906afcb8SAndy Fiddaman esac 2646*906afcb8SAndy Fiddaman c=HAVE_${u}_H 2647*906afcb8SAndy Fiddaman ;; 2648*906afcb8SAndy Fiddaman esac 2649*906afcb8SAndy Fiddaman echo "${allinc}#include <$x>" > $tmp.c 2650*906afcb8SAndy Fiddaman if is_hdr $x 2651*906afcb8SAndy Fiddaman then gothdr="$gothdr + $x" 2652*906afcb8SAndy Fiddaman case $dis in 2653*906afcb8SAndy Fiddaman 0) can="$can$cansep#define $c 1 /* #include <$x> ok */" 2654*906afcb8SAndy Fiddaman nan="$nan$cansep$c=1" 2655*906afcb8SAndy Fiddaman cansep=$nl 2656*906afcb8SAndy Fiddaman ;; 2657*906afcb8SAndy Fiddaman esac 2658*906afcb8SAndy Fiddaman eval $c=1 2659*906afcb8SAndy Fiddaman else gothdr="$gothdr - $x" 2660*906afcb8SAndy Fiddaman case $dis$all$config$undef in 2661*906afcb8SAndy Fiddaman 0?1?|0??1) 2662*906afcb8SAndy Fiddaman can="$can$cansep#undef $c /* #include <$x> not ok */" 2663*906afcb8SAndy Fiddaman nan="$nan$cansep$c=" 2664*906afcb8SAndy Fiddaman cansep=$nl 2665*906afcb8SAndy Fiddaman ;; 2666*906afcb8SAndy Fiddaman 01??) can="$can$cansep#define $c 0 /* #include <$x> not ok */" 2667*906afcb8SAndy Fiddaman nan="$nan$cansep$c=0" 2668*906afcb8SAndy Fiddaman cansep=$nl 2669*906afcb8SAndy Fiddaman ;; 2670*906afcb8SAndy Fiddaman esac 2671*906afcb8SAndy Fiddaman continue 2672*906afcb8SAndy Fiddaman fi 2673*906afcb8SAndy Fiddaman ;; 2674*906afcb8SAndy Fiddaman esac 2675*906afcb8SAndy Fiddaman ;; 2676*906afcb8SAndy Fiddaman *) test -r $x || continue 2677*906afcb8SAndy Fiddaman ;; 2678*906afcb8SAndy Fiddaman esac 2679*906afcb8SAndy Fiddaman hdr="$hdr $x" 2680*906afcb8SAndy Fiddaman done 2681*906afcb8SAndy Fiddaman ;; 2682*906afcb8SAndy Fiddaman esac 2683*906afcb8SAndy Fiddaman 2684*906afcb8SAndy Fiddaman # check the candidate libraries 2685*906afcb8SAndy Fiddaman 2686*906afcb8SAndy Fiddaman case $lib in 2687*906afcb8SAndy Fiddaman ?*) z= 2688*906afcb8SAndy Fiddaman for p in $lib 2689*906afcb8SAndy Fiddaman do z="$p $z" 2690*906afcb8SAndy Fiddaman done 2691*906afcb8SAndy Fiddaman lib= 2692*906afcb8SAndy Fiddaman p= 2693*906afcb8SAndy Fiddaman hit=0 2694*906afcb8SAndy Fiddaman echo "int main(){return(0);}" > $tmp.c 2695*906afcb8SAndy Fiddaman for x in $z 2696*906afcb8SAndy Fiddaman do p=$x 2697*906afcb8SAndy Fiddaman case " $gotlib " in 2698*906afcb8SAndy Fiddaman *"- $p "*) 2699*906afcb8SAndy Fiddaman failure + 2700*906afcb8SAndy Fiddaman p= 2701*906afcb8SAndy Fiddaman ;; 2702*906afcb8SAndy Fiddaman *"+ $p "*) 2703*906afcb8SAndy Fiddaman success + 2704*906afcb8SAndy Fiddaman lib="$p $lib" 2705*906afcb8SAndy Fiddaman ;; 2706*906afcb8SAndy Fiddaman *) rm -f $tmp.exe 2707*906afcb8SAndy Fiddaman is LIB $p 2708*906afcb8SAndy Fiddaman if compile $cc -o $tmp.exe $tmp.c $p $lib <&$nullin >&$nullout 2709*906afcb8SAndy Fiddaman then success 2710*906afcb8SAndy Fiddaman gotlib="$gotlib + $p" 2711*906afcb8SAndy Fiddaman lib="$p $lib" 2712*906afcb8SAndy Fiddaman e=0 2713*906afcb8SAndy Fiddaman else a= 2714*906afcb8SAndy Fiddaman e=1 2715*906afcb8SAndy Fiddaman for l in $z 2716*906afcb8SAndy Fiddaman do case $l in 2717*906afcb8SAndy Fiddaman -) a= 2718*906afcb8SAndy Fiddaman continue 2719*906afcb8SAndy Fiddaman ;; 2720*906afcb8SAndy Fiddaman $p) a=$p 2721*906afcb8SAndy Fiddaman continue 2722*906afcb8SAndy Fiddaman ;; 2723*906afcb8SAndy Fiddaman *) case $gotlib in 2724*906afcb8SAndy Fiddaman *" $l "*) continue ;; 2725*906afcb8SAndy Fiddaman esac 2726*906afcb8SAndy Fiddaman ;; 2727*906afcb8SAndy Fiddaman esac 2728*906afcb8SAndy Fiddaman case $a in 2729*906afcb8SAndy Fiddaman $p) a="$a $l" 2730*906afcb8SAndy Fiddaman if compile $cc -o $tmp.exe $tmp.c $a <&$nullin >&$nullout 2731*906afcb8SAndy Fiddaman then success 2732*906afcb8SAndy Fiddaman gotlib="$gotlib + $p" 2733*906afcb8SAndy Fiddaman lib="$p $lib" 2734*906afcb8SAndy Fiddaman e=0 2735*906afcb8SAndy Fiddaman break 2736*906afcb8SAndy Fiddaman fi 2737*906afcb8SAndy Fiddaman ;; 2738*906afcb8SAndy Fiddaman esac 2739*906afcb8SAndy Fiddaman done 2740*906afcb8SAndy Fiddaman case $e in 2741*906afcb8SAndy Fiddaman 1) failure 2742*906afcb8SAndy Fiddaman gotlib="$gotlib - $p" 2743*906afcb8SAndy Fiddaman ;; 2744*906afcb8SAndy Fiddaman esac 2745*906afcb8SAndy Fiddaman fi 2746*906afcb8SAndy Fiddaman y= 2747*906afcb8SAndy Fiddaman for x in $p 2748*906afcb8SAndy Fiddaman do case $shell in 2749*906afcb8SAndy Fiddaman bsh) c=`echo X$x | sed 's,X-l,,'` ;; 2750*906afcb8SAndy Fiddaman *) eval 'c=${x#-l}' ;; 2751*906afcb8SAndy Fiddaman esac 2752*906afcb8SAndy Fiddaman case $c in 2753*906afcb8SAndy Fiddaman *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*) 2754*906afcb8SAndy Fiddaman c=`echo '' $c | sed -e 's,.*[\\\\/],,' -e 's,\.[^.]*$,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g' -e '/^lib./s,^lib,,'` 2755*906afcb8SAndy Fiddaman ;; 2756*906afcb8SAndy Fiddaman esac 2757*906afcb8SAndy Fiddaman case $config in 2758*906afcb8SAndy Fiddaman 0) case $e$p in 2759*906afcb8SAndy Fiddaman 0*' '*) case " $gotlib " in 2760*906afcb8SAndy Fiddaman *[-+]" $x "*) 2761*906afcb8SAndy Fiddaman ;; 2762*906afcb8SAndy Fiddaman *) can="$can$cansep#define _LIB_$c 1 /* $x is a library */" 2763*906afcb8SAndy Fiddaman nan="$nan${cansep}_LIB_$c=1" 2764*906afcb8SAndy Fiddaman cansep=$nl 2765*906afcb8SAndy Fiddaman eval _LIB_$c=1 2766*906afcb8SAndy Fiddaman ;; 2767*906afcb8SAndy Fiddaman esac 2768*906afcb8SAndy Fiddaman ;; 2769*906afcb8SAndy Fiddaman esac 2770*906afcb8SAndy Fiddaman ;; 2771*906afcb8SAndy Fiddaman 1) case $shell in 2772*906afcb8SAndy Fiddaman ksh) typeset -u u=$c ;; 2773*906afcb8SAndy Fiddaman *) u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 2774*906afcb8SAndy Fiddaman esac 2775*906afcb8SAndy Fiddaman c=$u 2776*906afcb8SAndy Fiddaman case $e in 2777*906afcb8SAndy Fiddaman 0*' '*) case " $gotlib " in 2778*906afcb8SAndy Fiddaman *[-+]" $x "*) 2779*906afcb8SAndy Fiddaman ;; 2780*906afcb8SAndy Fiddaman *) can="$can$cansep#define HAVE_${c}_LIB 1 /* $x is a library */" 2781*906afcb8SAndy Fiddaman nan="$nan${cansep}HAVE_${c}_LIB=1" 2782*906afcb8SAndy Fiddaman cansep=$nl 2783*906afcb8SAndy Fiddaman eval HAVE_${c}_LIB=1 2784*906afcb8SAndy Fiddaman ;; 2785*906afcb8SAndy Fiddaman esac 2786*906afcb8SAndy Fiddaman ;; 2787*906afcb8SAndy Fiddaman esac 2788*906afcb8SAndy Fiddaman ;; 2789*906afcb8SAndy Fiddaman esac 2790*906afcb8SAndy Fiddaman y=${y}_$c 2791*906afcb8SAndy Fiddaman done 2792*906afcb8SAndy Fiddaman case $config in 2793*906afcb8SAndy Fiddaman 0) c=_LIB${y} ;; 2794*906afcb8SAndy Fiddaman 1) c=HAVE${y}_LIB ;; 2795*906afcb8SAndy Fiddaman esac 2796*906afcb8SAndy Fiddaman case $p in 2797*906afcb8SAndy Fiddaman *' '*) q="a library group" ;; 2798*906afcb8SAndy Fiddaman *) q="a library" ;; 2799*906afcb8SAndy Fiddaman esac 2800*906afcb8SAndy Fiddaman case $e in 2801*906afcb8SAndy Fiddaman 0) can="$can$cansep#define $c 1 /* $p is $q */" 2802*906afcb8SAndy Fiddaman nan="$nan$cansep$c=1" 2803*906afcb8SAndy Fiddaman cansep=$nl 2804*906afcb8SAndy Fiddaman eval $c=1 2805*906afcb8SAndy Fiddaman case $hit in 2806*906afcb8SAndy Fiddaman 1) break ;; 2807*906afcb8SAndy Fiddaman esac 2808*906afcb8SAndy Fiddaman ;; 2809*906afcb8SAndy Fiddaman 1) case $all$config$undef in 2810*906afcb8SAndy Fiddaman ?1?|??1)can="$can$cansep#undef $c /* $p is not $q */" 2811*906afcb8SAndy Fiddaman nan="$nan$cansep$c=" 2812*906afcb8SAndy Fiddaman cansep=$nl 2813*906afcb8SAndy Fiddaman ;; 2814*906afcb8SAndy Fiddaman 1??) can="$can$cansep#define $c 0 /* $p is not $q */" 2815*906afcb8SAndy Fiddaman nan="$nan$cansep$c=0" 2816*906afcb8SAndy Fiddaman cansep=$nl 2817*906afcb8SAndy Fiddaman ;; 2818*906afcb8SAndy Fiddaman esac 2819*906afcb8SAndy Fiddaman eval $c=0 2820*906afcb8SAndy Fiddaman ;; 2821*906afcb8SAndy Fiddaman esac 2822*906afcb8SAndy Fiddaman p= 2823*906afcb8SAndy Fiddaman ;; 2824*906afcb8SAndy Fiddaman esac 2825*906afcb8SAndy Fiddaman done 2826*906afcb8SAndy Fiddaman ;; 2827*906afcb8SAndy Fiddaman esac 2828*906afcb8SAndy Fiddaman 2829*906afcb8SAndy Fiddaman # last op precheck 2830*906afcb8SAndy Fiddaman 2831*906afcb8SAndy Fiddaman case $op in 2832*906afcb8SAndy Fiddaman ref) deflib="$deflib $lib" 2833*906afcb8SAndy Fiddaman defhdr="$defhdr $hdr" 2834*906afcb8SAndy Fiddaman break 2835*906afcb8SAndy Fiddaman ;; 2836*906afcb8SAndy Fiddaman esac 2837*906afcb8SAndy Fiddaman IFS=" ," 2838*906afcb8SAndy Fiddaman case $shell in 2839*906afcb8SAndy Fiddaman bash) op=`echo $op` 2840*906afcb8SAndy Fiddaman arg=`echo $arg` 2841*906afcb8SAndy Fiddaman ;; 2842*906afcb8SAndy Fiddaman *) eval op=\"$op\" 2843*906afcb8SAndy Fiddaman eval arg=\"$arg\" 2844*906afcb8SAndy Fiddaman ;; 2845*906afcb8SAndy Fiddaman esac 2846*906afcb8SAndy Fiddaman IFS=$ifs 2847*906afcb8SAndy Fiddaman 2848*906afcb8SAndy Fiddaman # check for op aliases 2849*906afcb8SAndy Fiddaman 2850*906afcb8SAndy Fiddaman x= 2851*906afcb8SAndy Fiddaman for o in $op 2852*906afcb8SAndy Fiddaman do case $o in 2853*906afcb8SAndy Fiddaman def|default) x="$x cmd dat hdr key lib mth sys typ" ;; 2854*906afcb8SAndy Fiddaman *) x="$x $o" ;; 2855*906afcb8SAndy Fiddaman esac 2856*906afcb8SAndy Fiddaman done 2857*906afcb8SAndy Fiddaman 2858*906afcb8SAndy Fiddaman # loop on the ops o and args a 2859*906afcb8SAndy Fiddaman 2860*906afcb8SAndy Fiddaman result=UNKNOWN 2861*906afcb8SAndy Fiddaman for o in $x 2862*906afcb8SAndy Fiddaman do for a in $arg 2863*906afcb8SAndy Fiddaman do c= 2864*906afcb8SAndy Fiddaman case $a in 2865*906afcb8SAndy Fiddaman *[.\\/]*) 2866*906afcb8SAndy Fiddaman case $o in 2867*906afcb8SAndy Fiddaman hdr|lcl|nxt|pth|sys) 2868*906afcb8SAndy Fiddaman x=$a 2869*906afcb8SAndy Fiddaman case $x in 2870*906afcb8SAndy Fiddaman *.lcl|*.nxt) 2871*906afcb8SAndy Fiddaman case $o in 2872*906afcb8SAndy Fiddaman sys) x=sys/$x ;; 2873*906afcb8SAndy Fiddaman esac 2874*906afcb8SAndy Fiddaman case $shell in 2875*906afcb8SAndy Fiddaman bsh) eval `echo $x | sed 's,\\(.*\\)\.\\([^.]*\\),x=\\1 o=\\2,'` 2876*906afcb8SAndy Fiddaman ;; 2877*906afcb8SAndy Fiddaman *) o=${x##*.} 2878*906afcb8SAndy Fiddaman x=${x%.${o}} 2879*906afcb8SAndy Fiddaman ;; 2880*906afcb8SAndy Fiddaman esac 2881*906afcb8SAndy Fiddaman v=$x 2882*906afcb8SAndy Fiddaman ;; 2883*906afcb8SAndy Fiddaman esac 2884*906afcb8SAndy Fiddaman case $x in 2885*906afcb8SAndy Fiddaman *[\\/]*)case $shell in 2886*906afcb8SAndy Fiddaman bsh) eval `echo $x | sed 's,\\(.*\\)[\\\\//]\\(.*\\),p=\\1 v=\\2,'` 2887*906afcb8SAndy Fiddaman ;; 2888*906afcb8SAndy Fiddaman *) eval 'p=${x%/*}' 2889*906afcb8SAndy Fiddaman eval 'v=${x##*/}' 2890*906afcb8SAndy Fiddaman ;; 2891*906afcb8SAndy Fiddaman esac 2892*906afcb8SAndy Fiddaman ;; 2893*906afcb8SAndy Fiddaman *.*) case $shell in 2894*906afcb8SAndy Fiddaman bsh) eval `echo $x | sed 's,\\(.*\\)\\.\\(.*\\),p=\\1 v=\\2,'` 2895*906afcb8SAndy Fiddaman ;; 2896*906afcb8SAndy Fiddaman *) eval 'p=${x%.*}' 2897*906afcb8SAndy Fiddaman eval 'v=${x##*.}' 2898*906afcb8SAndy Fiddaman ;; 2899*906afcb8SAndy Fiddaman esac 2900*906afcb8SAndy Fiddaman ;; 2901*906afcb8SAndy Fiddaman *) p= 2902*906afcb8SAndy Fiddaman ;; 2903*906afcb8SAndy Fiddaman esac 2904*906afcb8SAndy Fiddaman case $o in 2905*906afcb8SAndy Fiddaman lcl|nxt) c=$v.$o ;; 2906*906afcb8SAndy Fiddaman *) c=$v ;; 2907*906afcb8SAndy Fiddaman esac 2908*906afcb8SAndy Fiddaman ;; 2909*906afcb8SAndy Fiddaman *) case $shell in 2910*906afcb8SAndy Fiddaman bsh) eval `echo $a | sed -e 's,.*[\\\\/],,' -e 's/\\(.*\\)\\.\\(.*\\)/p=\\1 v=\\2/'` 2911*906afcb8SAndy Fiddaman ;; 2912*906afcb8SAndy Fiddaman *) eval 'p=${a%.*}' 2913*906afcb8SAndy Fiddaman eval 'p=${p##*[\\/]}' 2914*906afcb8SAndy Fiddaman eval 'v=${a##*.}' 2915*906afcb8SAndy Fiddaman eval 'v=${v##*[\\/]}' 2916*906afcb8SAndy Fiddaman ;; 2917*906afcb8SAndy Fiddaman esac 2918*906afcb8SAndy Fiddaman ;; 2919*906afcb8SAndy Fiddaman esac 2920*906afcb8SAndy Fiddaman case $p in 2921*906afcb8SAndy Fiddaman '') f=${v} ;; 2922*906afcb8SAndy Fiddaman *) f=${p}/${v} ;; 2923*906afcb8SAndy Fiddaman esac 2924*906afcb8SAndy Fiddaman case $o in 2925*906afcb8SAndy Fiddaman run) v=$p 2926*906afcb8SAndy Fiddaman p= 2927*906afcb8SAndy Fiddaman m=_${v} 2928*906afcb8SAndy Fiddaman ;; 2929*906afcb8SAndy Fiddaman mem) case $p in 2930*906afcb8SAndy Fiddaman *.*) case $shell in 2931*906afcb8SAndy Fiddaman bsh) eval `echo $p | sed 's/\\([^.]*\\)\\.\\(.*\\)/p=\\1 m=\\2/'` 2932*906afcb8SAndy Fiddaman ;; 2933*906afcb8SAndy Fiddaman *) eval 'm=${p#*.}' 2934*906afcb8SAndy Fiddaman eval 'p=${p%%.*}' 2935*906afcb8SAndy Fiddaman ;; 2936*906afcb8SAndy Fiddaman esac 2937*906afcb8SAndy Fiddaman v=${m}.${v} 2938*906afcb8SAndy Fiddaman esac 2939*906afcb8SAndy Fiddaman case $config in 2940*906afcb8SAndy Fiddaman 0) m=_${v}_${p} ;; 2941*906afcb8SAndy Fiddaman 1) m=_${v}_in_${p} ;; 2942*906afcb8SAndy Fiddaman esac 2943*906afcb8SAndy Fiddaman ;; 2944*906afcb8SAndy Fiddaman *) case $p in 2945*906afcb8SAndy Fiddaman '') m=_${v} ;; 2946*906afcb8SAndy Fiddaman *) m=_${p}_${v} ;; 2947*906afcb8SAndy Fiddaman esac 2948*906afcb8SAndy Fiddaman ;; 2949*906afcb8SAndy Fiddaman esac 2950*906afcb8SAndy Fiddaman ;; 2951*906afcb8SAndy Fiddaman *) p= 2952*906afcb8SAndy Fiddaman v=$a 2953*906afcb8SAndy Fiddaman f=$a 2954*906afcb8SAndy Fiddaman m=_${v} 2955*906afcb8SAndy Fiddaman ;; 2956*906afcb8SAndy Fiddaman esac 2957*906afcb8SAndy Fiddaman case $c in 2958*906afcb8SAndy Fiddaman '') c=$v ;; 2959*906afcb8SAndy Fiddaman esac 2960*906afcb8SAndy Fiddaman M=$m 2961*906afcb8SAndy Fiddaman case $o in 2962*906afcb8SAndy Fiddaman out) case $a in 2963*906afcb8SAndy Fiddaman -) a=- 2964*906afcb8SAndy Fiddaman ;; 2965*906afcb8SAndy Fiddaman ?*) test="$a $test" 2966*906afcb8SAndy Fiddaman a= 2967*906afcb8SAndy Fiddaman ;; 2968*906afcb8SAndy Fiddaman esac 2969*906afcb8SAndy Fiddaman ;; 2970*906afcb8SAndy Fiddaman *) case " $idyes " in 2971*906afcb8SAndy Fiddaman *" $m "*) 2972*906afcb8SAndy Fiddaman i=1 2973*906afcb8SAndy Fiddaman ;; 2974*906afcb8SAndy Fiddaman *) case " $idno " in 2975*906afcb8SAndy Fiddaman *" $m "*) 2976*906afcb8SAndy Fiddaman i=0 2977*906afcb8SAndy Fiddaman ;; 2978*906afcb8SAndy Fiddaman *) case $m in 2979*906afcb8SAndy Fiddaman *'*') m=`echo "$m" | sed 's,\*,_ptr,g'` ;; 2980*906afcb8SAndy Fiddaman esac 2981*906afcb8SAndy Fiddaman case $m in 2982*906afcb8SAndy Fiddaman *[-+/\\]*) 2983*906afcb8SAndy Fiddaman i=0 2984*906afcb8SAndy Fiddaman ;; 2985*906afcb8SAndy Fiddaman *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*) 2986*906afcb8SAndy Fiddaman is id $m 2987*906afcb8SAndy Fiddaman copy $tmp.c "int $m = 0;" 2988*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c 2989*906afcb8SAndy Fiddaman then success - 2990*906afcb8SAndy Fiddaman idyes="$idyes $m" 2991*906afcb8SAndy Fiddaman i=1 2992*906afcb8SAndy Fiddaman else failure - 2993*906afcb8SAndy Fiddaman idno="$idno $m" 2994*906afcb8SAndy Fiddaman i=0 2995*906afcb8SAndy Fiddaman fi 2996*906afcb8SAndy Fiddaman ;; 2997*906afcb8SAndy Fiddaman *) i=1 2998*906afcb8SAndy Fiddaman ;; 2999*906afcb8SAndy Fiddaman esac 3000*906afcb8SAndy Fiddaman ;; 3001*906afcb8SAndy Fiddaman esac 3002*906afcb8SAndy Fiddaman case $i in 3003*906afcb8SAndy Fiddaman 0) case $o in 3004*906afcb8SAndy Fiddaman dat|dfn|key|lib|mac|mth|nos|npt|siz|sym|typ|val) 3005*906afcb8SAndy Fiddaman continue 3006*906afcb8SAndy Fiddaman ;; 3007*906afcb8SAndy Fiddaman esac 3008*906afcb8SAndy Fiddaman ;; 3009*906afcb8SAndy Fiddaman esac 3010*906afcb8SAndy Fiddaman ;; 3011*906afcb8SAndy Fiddaman esac 3012*906afcb8SAndy Fiddaman ;; 3013*906afcb8SAndy Fiddaman esac 3014*906afcb8SAndy Fiddaman case $m in 3015*906afcb8SAndy Fiddaman *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*) 3016*906afcb8SAndy Fiddaman m=`echo "X$m" | sed -e 's,^.,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'` 3017*906afcb8SAndy Fiddaman ;; 3018*906afcb8SAndy Fiddaman esac 3019*906afcb8SAndy Fiddaman 3020*906afcb8SAndy Fiddaman # check output redirection 3021*906afcb8SAndy Fiddaman 3022*906afcb8SAndy Fiddaman case $out in 3023*906afcb8SAndy Fiddaman $cur) ;; 3024*906afcb8SAndy Fiddaman *) case $cur in 3025*906afcb8SAndy Fiddaman $a|$c) ;; 3026*906afcb8SAndy Fiddaman *) case $cur in 3027*906afcb8SAndy Fiddaman .) ;; 3028*906afcb8SAndy Fiddaman *) case $vers in 3029*906afcb8SAndy Fiddaman ?*) echo 3030*906afcb8SAndy Fiddaman for api in $vers 3031*906afcb8SAndy Fiddaman do API=`echo $api | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` 3032*906afcb8SAndy Fiddaman eval ver='${'ver_${api}'}' 3033*906afcb8SAndy Fiddaman echo "#define ${API}_VERSION ${ver}" 3034*906afcb8SAndy Fiddaman done 3035*906afcb8SAndy Fiddaman esac 3036*906afcb8SAndy Fiddaman case $apis in 3037*906afcb8SAndy Fiddaman ?*) for api in $apis 3038*906afcb8SAndy Fiddaman do API=`echo $api | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` 3039*906afcb8SAndy Fiddaman echo "#define ${API}API(rel) ( _BLD_${api} || !_API_${api} || _API_${api} >= rel )" 3040*906afcb8SAndy Fiddaman map= 3041*906afcb8SAndy Fiddaman sep= 3042*906afcb8SAndy Fiddaman eval syms='"${'api_sym_${api}'}"' 3043*906afcb8SAndy Fiddaman # old solaris requires -k<space><junk> # 3044*906afcb8SAndy Fiddaman set x x `echo "$syms" | sort -t: -u -k 1,1 -k 2,2nr 2>/dev/null | sed 's/:/ /'` 3045*906afcb8SAndy Fiddaman case $# in 3046*906afcb8SAndy Fiddaman 2) # ancient sort doesn't have -k # 3047*906afcb8SAndy Fiddaman set x x `echo "$syms" | sort -t: -u +0 -1 +1 -2nr 2>/dev/null | sed 's/:/ /'` 3048*906afcb8SAndy Fiddaman ;; 3049*906afcb8SAndy Fiddaman esac 3050*906afcb8SAndy Fiddaman sym= 3051*906afcb8SAndy Fiddaman while : 3052*906afcb8SAndy Fiddaman do shift 2 3053*906afcb8SAndy Fiddaman case $# in 3054*906afcb8SAndy Fiddaman [01]) break ;; 3055*906afcb8SAndy Fiddaman esac 3056*906afcb8SAndy Fiddaman prv=$sym 3057*906afcb8SAndy Fiddaman sym=$1 3058*906afcb8SAndy Fiddaman rel=$2 3059*906afcb8SAndy Fiddaman case $prv in 3060*906afcb8SAndy Fiddaman $sym) echo "#elif _API_${api} >= $rel" 3061*906afcb8SAndy Fiddaman ;; 3062*906afcb8SAndy Fiddaman *) case $prv in 3063*906afcb8SAndy Fiddaman '') echo 3064*906afcb8SAndy Fiddaman echo "#if !defined(_API_${api}) && defined(_API_DEFAULT)" 3065*906afcb8SAndy Fiddaman echo "#define _API_${api} _API_DEFAULT" 3066*906afcb8SAndy Fiddaman echo "#endif" 3067*906afcb8SAndy Fiddaman ;; 3068*906afcb8SAndy Fiddaman *) echo "#endif" 3069*906afcb8SAndy Fiddaman ;; 3070*906afcb8SAndy Fiddaman esac 3071*906afcb8SAndy Fiddaman echo 3072*906afcb8SAndy Fiddaman echo "#if ${API}API($rel)" 3073*906afcb8SAndy Fiddaman ;; 3074*906afcb8SAndy Fiddaman esac 3075*906afcb8SAndy Fiddaman echo "#undef ${sym}" 3076*906afcb8SAndy Fiddaman echo "#define ${sym} ${sym}_${rel}" 3077*906afcb8SAndy Fiddaman map=$map$sep${sym}_${rel} 3078*906afcb8SAndy Fiddaman sep=' ' 3079*906afcb8SAndy Fiddaman done 3080*906afcb8SAndy Fiddaman echo "#endif" 3081*906afcb8SAndy Fiddaman echo 3082*906afcb8SAndy Fiddaman echo "#define _API_${api}_MAP \"$map\"" 3083*906afcb8SAndy Fiddaman done 3084*906afcb8SAndy Fiddaman echo 3085*906afcb8SAndy Fiddaman ;; 3086*906afcb8SAndy Fiddaman esac 3087*906afcb8SAndy Fiddaman case $iff in 3088*906afcb8SAndy Fiddaman ?*) echo "#endif" ;; 3089*906afcb8SAndy Fiddaman esac 3090*906afcb8SAndy Fiddaman case $cur in 3091*906afcb8SAndy Fiddaman -) ;; 3092*906afcb8SAndy Fiddaman *) exec >/dev/null 3093*906afcb8SAndy Fiddaman case $cur in 3094*906afcb8SAndy Fiddaman *[\\/]*|*.h) x=$cur ;; 3095*906afcb8SAndy Fiddaman *) x=$dir/$cur ;; 3096*906afcb8SAndy Fiddaman esac 3097*906afcb8SAndy Fiddaman case $define in 3098*906afcb8SAndy Fiddaman n) sed '/^#/d' $tmp.h > $tmp.c 3099*906afcb8SAndy Fiddaman sed '/^#/d' $x > $tmp.t 3100*906afcb8SAndy Fiddaman ;; 3101*906afcb8SAndy Fiddaman *) (proto -r $protoflags $tmp.h) >/dev/null 2>&1 3102*906afcb8SAndy Fiddaman sed 's,/\*[^/]*\*/, ,g' $tmp.h > $tmp.c 3103*906afcb8SAndy Fiddaman sed 's,/\*[^/]*\*/, ,g' $x > $tmp.t 3104*906afcb8SAndy Fiddaman ;; 3105*906afcb8SAndy Fiddaman esac 3106*906afcb8SAndy Fiddaman if cmp -s $tmp.c $tmp.t 3107*906afcb8SAndy Fiddaman then rm -f $tmp.h 3108*906afcb8SAndy Fiddaman case $verbose in 3109*906afcb8SAndy Fiddaman 1) echo "$command: $x: unchanged" >&$stderr ;; 3110*906afcb8SAndy Fiddaman esac 3111*906afcb8SAndy Fiddaman else case $x in 3112*906afcb8SAndy Fiddaman ${dir}[\\/]$cur) test -d $dir || mkdir $dir || exit 1 ;; 3113*906afcb8SAndy Fiddaman esac 3114*906afcb8SAndy Fiddaman mv $tmp.h $x 3115*906afcb8SAndy Fiddaman fi 3116*906afcb8SAndy Fiddaman ;; 3117*906afcb8SAndy Fiddaman esac 3118*906afcb8SAndy Fiddaman ;; 3119*906afcb8SAndy Fiddaman esac 3120*906afcb8SAndy Fiddaman case $out in 3121*906afcb8SAndy Fiddaman +) case $status in 3122*906afcb8SAndy Fiddaman 1) ;; 3123*906afcb8SAndy Fiddaman *) status=0 ;; 3124*906afcb8SAndy Fiddaman esac 3125*906afcb8SAndy Fiddaman exit $status 3126*906afcb8SAndy Fiddaman ;; 3127*906afcb8SAndy Fiddaman -) eval "exec >&$stdout" 3128*906afcb8SAndy Fiddaman ;; 3129*906afcb8SAndy Fiddaman *) exec >$tmp.h 3130*906afcb8SAndy Fiddaman ;; 3131*906afcb8SAndy Fiddaman esac 3132*906afcb8SAndy Fiddaman case $out in 3133*906afcb8SAndy Fiddaman "") case $a in 3134*906afcb8SAndy Fiddaman *[\\/]*|???????????????*) cur=$c ;; 3135*906afcb8SAndy Fiddaman *) cur=$a ;; 3136*906afcb8SAndy Fiddaman esac 3137*906afcb8SAndy Fiddaman ;; 3138*906afcb8SAndy Fiddaman *) cur=$out 3139*906afcb8SAndy Fiddaman ;; 3140*906afcb8SAndy Fiddaman esac 3141*906afcb8SAndy Fiddaman case $in in 3142*906afcb8SAndy Fiddaman ""|-|+) case $o in 3143*906afcb8SAndy Fiddaman run) x=" from $a" ;; 3144*906afcb8SAndy Fiddaman *) x= ;; 3145*906afcb8SAndy Fiddaman esac 3146*906afcb8SAndy Fiddaman ;; 3147*906afcb8SAndy Fiddaman *) x=" from $in" 3148*906afcb8SAndy Fiddaman ;; 3149*906afcb8SAndy Fiddaman esac 3150*906afcb8SAndy Fiddaman 3151*906afcb8SAndy Fiddaman # output header comments 3152*906afcb8SAndy Fiddaman 3153*906afcb8SAndy Fiddaman case $define in 3154*906afcb8SAndy Fiddaman n) ;; 3155*906afcb8SAndy Fiddaman ?) echo "/* : : generated$x by $command version $version : : */" 3156*906afcb8SAndy Fiddaman for x in $pragma 3157*906afcb8SAndy Fiddaman do echo "#pragma $x" 3158*906afcb8SAndy Fiddaman done 3159*906afcb8SAndy Fiddaman case $out in 3160*906afcb8SAndy Fiddaman ""|-|+) x=$m 3161*906afcb8SAndy Fiddaman ;; 3162*906afcb8SAndy Fiddaman *.*) case $shell in 3163*906afcb8SAndy Fiddaman bsh) eval `echo $in | sed -e 's,\\.,_,g' -e 's/^/x=/'` 3164*906afcb8SAndy Fiddaman ;; 3165*906afcb8SAndy Fiddaman *) i=$out 3166*906afcb8SAndy Fiddaman x=_ 3167*906afcb8SAndy Fiddaman while : 3168*906afcb8SAndy Fiddaman do case $i in 3169*906afcb8SAndy Fiddaman *.*) eval 'x=$x${i%%.*}_' 3170*906afcb8SAndy Fiddaman eval 'i=${i#*.}' 3171*906afcb8SAndy Fiddaman ;; 3172*906afcb8SAndy Fiddaman *) x=$x$i 3173*906afcb8SAndy Fiddaman break 3174*906afcb8SAndy Fiddaman ;; 3175*906afcb8SAndy Fiddaman esac 3176*906afcb8SAndy Fiddaman done 3177*906afcb8SAndy Fiddaman ;; 3178*906afcb8SAndy Fiddaman esac 3179*906afcb8SAndy Fiddaman ;; 3180*906afcb8SAndy Fiddaman *) x=_$out 3181*906afcb8SAndy Fiddaman ;; 3182*906afcb8SAndy Fiddaman esac 3183*906afcb8SAndy Fiddaman case $o in 3184*906afcb8SAndy Fiddaman iff) case $M in 3185*906afcb8SAndy Fiddaman ""|*-*) ;; 3186*906afcb8SAndy Fiddaman *) iff=${m}_H ;; 3187*906afcb8SAndy Fiddaman esac 3188*906afcb8SAndy Fiddaman ;; 3189*906afcb8SAndy Fiddaman *) case $regress in 3190*906afcb8SAndy Fiddaman '') case $x in 3191*906afcb8SAndy Fiddaman *-*) ;; 3192*906afcb8SAndy Fiddaman *) x=`pwd | sed -e 's,.*[\\\\/],,' -e 's,\\..*,,' -e 's,^lib,,' -e 's,^,'${x}_',' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'` 3193*906afcb8SAndy Fiddaman # ksh n+ bug workaround 3194*906afcb8SAndy Fiddaman case $x in 3195*906afcb8SAndy Fiddaman *[!_]*) ;; 3196*906afcb8SAndy Fiddaman *) x=_$$ ;; 3197*906afcb8SAndy Fiddaman esac 3198*906afcb8SAndy Fiddaman iff=_def${x} 3199*906afcb8SAndy Fiddaman ;; 3200*906afcb8SAndy Fiddaman esac 3201*906afcb8SAndy Fiddaman ;; 3202*906afcb8SAndy Fiddaman *) case $x in 3203*906afcb8SAndy Fiddaman *-*) ;; 3204*906afcb8SAndy Fiddaman *) iff=_REGRESS 3205*906afcb8SAndy Fiddaman ;; 3206*906afcb8SAndy Fiddaman esac 3207*906afcb8SAndy Fiddaman ;; 3208*906afcb8SAndy Fiddaman esac 3209*906afcb8SAndy Fiddaman ;; 3210*906afcb8SAndy Fiddaman esac 3211*906afcb8SAndy Fiddaman case $iff in 3212*906afcb8SAndy Fiddaman ?*) echo "#ifndef $iff" 3213*906afcb8SAndy Fiddaman echo "#define $iff 1" 3214*906afcb8SAndy Fiddaman ;; 3215*906afcb8SAndy Fiddaman esac 3216*906afcb8SAndy Fiddaman ;; 3217*906afcb8SAndy Fiddaman esac 3218*906afcb8SAndy Fiddaman ;; 3219*906afcb8SAndy Fiddaman esac 3220*906afcb8SAndy Fiddaman ;; 3221*906afcb8SAndy Fiddaman esac 3222*906afcb8SAndy Fiddaman case $can in 3223*906afcb8SAndy Fiddaman ?*) case $define in 3224*906afcb8SAndy Fiddaman 1) echo "$can" ;; 3225*906afcb8SAndy Fiddaman n) echo "$nan" ;; 3226*906afcb8SAndy Fiddaman esac 3227*906afcb8SAndy Fiddaman can= 3228*906afcb8SAndy Fiddaman nan= 3229*906afcb8SAndy Fiddaman cansep= 3230*906afcb8SAndy Fiddaman ;; 3231*906afcb8SAndy Fiddaman esac 3232*906afcb8SAndy Fiddaman 3233*906afcb8SAndy Fiddaman # set up the candidate include list 3234*906afcb8SAndy Fiddaman 3235*906afcb8SAndy Fiddaman pre= 3236*906afcb8SAndy Fiddaman inc= 3237*906afcb8SAndy Fiddaman for x in $defhdr - $hdr 3238*906afcb8SAndy Fiddaman do case $x in 3239*906afcb8SAndy Fiddaman -) case $pre in 3240*906afcb8SAndy Fiddaman ?*) continue ;; 3241*906afcb8SAndy Fiddaman esac 3242*906afcb8SAndy Fiddaman case $v in 3243*906afcb8SAndy Fiddaman *.*) for x in `echo $v | sed 's,\\., ,g'` 3244*906afcb8SAndy Fiddaman do pre="$pre 3245*906afcb8SAndy Fiddaman#undef $x" 3246*906afcb8SAndy Fiddaman done 3247*906afcb8SAndy Fiddaman ;; 3248*906afcb8SAndy Fiddaman *) case $o in 3249*906afcb8SAndy Fiddaman siz|typ)case $v in 3250*906afcb8SAndy Fiddaman char|short|int|long) 3251*906afcb8SAndy Fiddaman ;; 3252*906afcb8SAndy Fiddaman *) pre="#undef $v" 3253*906afcb8SAndy Fiddaman ;; 3254*906afcb8SAndy Fiddaman esac 3255*906afcb8SAndy Fiddaman ;; 3256*906afcb8SAndy Fiddaman *) pre="#undef $v" 3257*906afcb8SAndy Fiddaman ;; 3258*906afcb8SAndy Fiddaman esac 3259*906afcb8SAndy Fiddaman ;; 3260*906afcb8SAndy Fiddaman esac 3261*906afcb8SAndy Fiddaman ;; 3262*906afcb8SAndy Fiddaman *.h) case $shell in 3263*906afcb8SAndy Fiddaman bsh) eval `echo $x | sed -e 's,^\\([^\\\\/]*\\).*[\\\\/]\\([^\\\\/]*\\)\$,\\1_\\2,' -e 's/\\..*//' -e 's/^/c=/'` 3264*906afcb8SAndy Fiddaman ;; 3265*906afcb8SAndy Fiddaman *) eval 'c=${x##*[\\/]}' 3266*906afcb8SAndy Fiddaman eval 'c=${c%%.*}' 3267*906afcb8SAndy Fiddaman case $x in 3268*906afcb8SAndy Fiddaman */*) eval 'c=${x%%[\\/]*}_${c}' ;; 3269*906afcb8SAndy Fiddaman esac 3270*906afcb8SAndy Fiddaman ;; 3271*906afcb8SAndy Fiddaman esac 3272*906afcb8SAndy Fiddaman case $config in 3273*906afcb8SAndy Fiddaman 0) case $x in 3274*906afcb8SAndy Fiddaman */*) c=_${c} ;; 3275*906afcb8SAndy Fiddaman *) c=_hdr_${c} ;; 3276*906afcb8SAndy Fiddaman esac 3277*906afcb8SAndy Fiddaman ;; 3278*906afcb8SAndy Fiddaman 1) case $shell in 3279*906afcb8SAndy Fiddaman ksh) typeset -u u=$c ;; 3280*906afcb8SAndy Fiddaman *) u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 3281*906afcb8SAndy Fiddaman esac 3282*906afcb8SAndy Fiddaman c=HAVE_${u}_H 3283*906afcb8SAndy Fiddaman ;; 3284*906afcb8SAndy Fiddaman esac 3285*906afcb8SAndy Fiddaman case " $puthdr " in 3286*906afcb8SAndy Fiddaman *" $c "*) 3287*906afcb8SAndy Fiddaman ;; 3288*906afcb8SAndy Fiddaman *) puthdr="$puthdr $c" 3289*906afcb8SAndy Fiddaman usr="$usr$nl#define $c 1" 3290*906afcb8SAndy Fiddaman ;; 3291*906afcb8SAndy Fiddaman esac 3292*906afcb8SAndy Fiddaman inc="$inc 3293*906afcb8SAndy Fiddaman#include <$x>" 3294*906afcb8SAndy Fiddaman ;; 3295*906afcb8SAndy Fiddaman esac 3296*906afcb8SAndy Fiddaman done 3297*906afcb8SAndy Fiddaman 3298*906afcb8SAndy Fiddaman # set up the candidate lib list 3299*906afcb8SAndy Fiddaman 3300*906afcb8SAndy Fiddaman for x in $lib $deflib 3301*906afcb8SAndy Fiddaman do case $shell in 3302*906afcb8SAndy Fiddaman ksh) eval 'c=${x#-l}' ;; 3303*906afcb8SAndy Fiddaman *) c=`echo X$x | sed 's,X-l,,'` ;; 3304*906afcb8SAndy Fiddaman esac 3305*906afcb8SAndy Fiddaman case $c in 3306*906afcb8SAndy Fiddaman *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*) 3307*906afcb8SAndy Fiddaman c=`echo '' $c | sed -e 's,.*[\\\\/],,' -e 's,\.[^.]*$,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g' -e '/^lib./s,^lib,,'` 3308*906afcb8SAndy Fiddaman ;; 3309*906afcb8SAndy Fiddaman esac 3310*906afcb8SAndy Fiddaman case $config in 3311*906afcb8SAndy Fiddaman 0) c=_LIB_${c} 3312*906afcb8SAndy Fiddaman ;; 3313*906afcb8SAndy Fiddaman 1) case $shell in 3314*906afcb8SAndy Fiddaman ksh) typeset -u u=$c ;; 3315*906afcb8SAndy Fiddaman *) u=`echo $c | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 3316*906afcb8SAndy Fiddaman esac 3317*906afcb8SAndy Fiddaman c=HAVE_${u}_LIB 3318*906afcb8SAndy Fiddaman ;; 3319*906afcb8SAndy Fiddaman esac 3320*906afcb8SAndy Fiddaman case " $putlib " in 3321*906afcb8SAndy Fiddaman *" $c "*) 3322*906afcb8SAndy Fiddaman ;; 3323*906afcb8SAndy Fiddaman *) putlib="$putlib $c" 3324*906afcb8SAndy Fiddaman usr="$usr$nl#define $c 1" 3325*906afcb8SAndy Fiddaman ;; 3326*906afcb8SAndy Fiddaman esac 3327*906afcb8SAndy Fiddaman done 3328*906afcb8SAndy Fiddaman 3329*906afcb8SAndy Fiddaman # src overrides builtin test 3330*906afcb8SAndy Fiddaman 3331*906afcb8SAndy Fiddaman case $config:$def in 3332*906afcb8SAndy Fiddaman 0:) case $o in 3333*906afcb8SAndy Fiddaman tst|var);; 3334*906afcb8SAndy Fiddaman *) m=_${o}${m} ;; 3335*906afcb8SAndy Fiddaman esac 3336*906afcb8SAndy Fiddaman ;; 3337*906afcb8SAndy Fiddaman 1:) case $o in 3338*906afcb8SAndy Fiddaman tst|var)m=${v} ;; 3339*906afcb8SAndy Fiddaman esac 3340*906afcb8SAndy Fiddaman case $shell in 3341*906afcb8SAndy Fiddaman ksh) typeset -u u=$m ;; 3342*906afcb8SAndy Fiddaman *) u=`echo $m | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 3343*906afcb8SAndy Fiddaman esac 3344*906afcb8SAndy Fiddaman case $o in 3345*906afcb8SAndy Fiddaman tst|var)case $m in 3346*906afcb8SAndy Fiddaman $u) ;; 3347*906afcb8SAndy Fiddaman *) case $m in 3348*906afcb8SAndy Fiddaman hdr_*|lib_*|sys_*) 3349*906afcb8SAndy Fiddaman case $shell in 3350*906afcb8SAndy Fiddaman ksh) u=${u#????} ;; 3351*906afcb8SAndy Fiddaman *) u=`echo $u | sed 's/....//'` ;; 3352*906afcb8SAndy Fiddaman esac 3353*906afcb8SAndy Fiddaman ;; 3354*906afcb8SAndy Fiddaman esac 3355*906afcb8SAndy Fiddaman m=HAVE_${u} 3356*906afcb8SAndy Fiddaman ;; 3357*906afcb8SAndy Fiddaman esac 3358*906afcb8SAndy Fiddaman ;; 3359*906afcb8SAndy Fiddaman dat) m=HAVE${u}_DATA ;; 3360*906afcb8SAndy Fiddaman hdr|lcl)m=HAVE${u}_H ;; 3361*906afcb8SAndy Fiddaman key) m=HAVE${u}_RESERVED ;; 3362*906afcb8SAndy Fiddaman mth) m=HAVE${u}_MATH ;; 3363*906afcb8SAndy Fiddaman npt) m=HAVE${u}_DECL ;; 3364*906afcb8SAndy Fiddaman pth) m=${u}_PATH 3365*906afcb8SAndy Fiddaman case $shell in 3366*906afcb8SAndy Fiddaman ksh) m=${m#_} ;; 3367*906afcb8SAndy Fiddaman *) m=`echo $m | sed 's,^_,,'` ;; 3368*906afcb8SAndy Fiddaman esac 3369*906afcb8SAndy Fiddaman ;; 3370*906afcb8SAndy Fiddaman nxt) m=HAVE${u}_NEXT ;; 3371*906afcb8SAndy Fiddaman siz) m=SIZEOF${u} ;; 3372*906afcb8SAndy Fiddaman sys) m=HAVE_SYS${u}_H ;; 3373*906afcb8SAndy Fiddaman *) m=HAVE${u} ;; 3374*906afcb8SAndy Fiddaman esac 3375*906afcb8SAndy Fiddaman ;; 3376*906afcb8SAndy Fiddaman *) m=$def 3377*906afcb8SAndy Fiddaman M=$m 3378*906afcb8SAndy Fiddaman ;; 3379*906afcb8SAndy Fiddaman esac 3380*906afcb8SAndy Fiddaman case $src in 3381*906afcb8SAndy Fiddaman ?*) case $src in 3382*906afcb8SAndy Fiddaman $noext) EXT= ;; 3383*906afcb8SAndy Fiddaman *) EXT="$tst 3384*906afcb8SAndy Fiddaman$ext" 3385*906afcb8SAndy Fiddaman ;; 3386*906afcb8SAndy Fiddaman esac 3387*906afcb8SAndy Fiddaman copy $tmp.c "$std 3388*906afcb8SAndy Fiddaman$EXT 3389*906afcb8SAndy Fiddaman$usr 3390*906afcb8SAndy Fiddaman$inc 3391*906afcb8SAndy Fiddaman$src 3392*906afcb8SAndy Fiddaman" 3393*906afcb8SAndy Fiddaman V=1 3394*906afcb8SAndy Fiddaman e=0 3395*906afcb8SAndy Fiddaman is tst "${note:-$run}" 3396*906afcb8SAndy Fiddaman case $run in 3397*906afcb8SAndy Fiddaman cat*|nocat*) 3398*906afcb8SAndy Fiddaman copy - "$src" 3399*906afcb8SAndy Fiddaman ;; 3400*906afcb8SAndy Fiddaman cross*|nocross*) 3401*906afcb8SAndy Fiddaman copy $tmp.sh "$src" 3402*906afcb8SAndy Fiddaman chmod +x $tmp.sh 3403*906afcb8SAndy Fiddaman execute $tmp.sh <&$nullin || e=1 3404*906afcb8SAndy Fiddaman ;; 3405*906afcb8SAndy Fiddaman run*|norun*) 3406*906afcb8SAndy Fiddaman (eval "$src") <&$nullin || e=1 3407*906afcb8SAndy Fiddaman ;; 3408*906afcb8SAndy Fiddaman mac*|nomac*) 3409*906afcb8SAndy Fiddaman if compile $cc -E -P $tmp.c <&$nullin >$tmp.i 3410*906afcb8SAndy Fiddaman then sed -e '/<<[ ]*".*"[ ]*>>/!d' -e 's/<<[ ]*"//g' -e 's/"[ ]*>>//g' $tmp.i 3411*906afcb8SAndy Fiddaman else e=1 3412*906afcb8SAndy Fiddaman fi 3413*906afcb8SAndy Fiddaman ;; 3414*906afcb8SAndy Fiddaman p*|nop*)compile $cc -DTEST=$p -DID=$v -E $tmp.c <&$nullin >&$nullout || e=1 3415*906afcb8SAndy Fiddaman ;; 3416*906afcb8SAndy Fiddaman c*|noc*)compile $cc -DTEST=$p -DID=$v -c $tmp.c <&$nullin >&$nullout || e=1 3417*906afcb8SAndy Fiddaman ;; 3418*906afcb8SAndy Fiddaman *) case $run in 3419*906afcb8SAndy Fiddaman status*)ccflags= 3420*906afcb8SAndy Fiddaman ;; 3421*906afcb8SAndy Fiddaman s*|nos*)case $reallystatictest in 3422*906afcb8SAndy Fiddaman '') #UNDENT... 3423*906afcb8SAndy Fiddaman 3424*906afcb8SAndy Fiddaman reallystatictest=. 3425*906afcb8SAndy Fiddaman echo "$tst 3426*906afcb8SAndy Fiddaman$ext 3427*906afcb8SAndy Fiddamanint main(){printf("hello");return(0);}" > ${tmp}s.c 3428*906afcb8SAndy Fiddaman rm -f ${tmp}s.exe 3429*906afcb8SAndy Fiddaman if compile $cc -c ${tmp}s.c <&$nullin >&$nullout && 3430*906afcb8SAndy Fiddaman compile $cc -o ${tmp}s.exe ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e && 3431*906afcb8SAndy Fiddaman $executable ${tmp}s.exe 3432*906afcb8SAndy Fiddaman then e=`wc -l ${tmp}s.e` 3433*906afcb8SAndy Fiddaman eval set x x $binding 3434*906afcb8SAndy Fiddaman while : 3435*906afcb8SAndy Fiddaman do shift 3436*906afcb8SAndy Fiddaman shift 3437*906afcb8SAndy Fiddaman case $# in 3438*906afcb8SAndy Fiddaman 0) break ;; 3439*906afcb8SAndy Fiddaman esac 3440*906afcb8SAndy Fiddaman rm -f ${tmp}s.exe 3441*906afcb8SAndy Fiddaman compile $cc -o ${tmp}s.exe $1 ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e && $executable ${tmp}s.exe || continue 3442*906afcb8SAndy Fiddaman case `wc -l ${tmp}s.e` in 3443*906afcb8SAndy Fiddaman $e) ;; 3444*906afcb8SAndy Fiddaman *) continue ;; 3445*906afcb8SAndy Fiddaman esac 3446*906afcb8SAndy Fiddaman d=`ls -s ${tmp}s.exe` 3447*906afcb8SAndy Fiddaman rm -f ${tmp}s.exe 3448*906afcb8SAndy Fiddaman compile $cc -o ${tmp}s.exe $2 ${tmp}s.o <&$nullin >&$nullout 2>${tmp}s.e && $executable ${tmp}s.exe || continue 3449*906afcb8SAndy Fiddaman case `wc -l ${tmp}s.e` in 3450*906afcb8SAndy Fiddaman $e) ;; 3451*906afcb8SAndy Fiddaman *) continue ;; 3452*906afcb8SAndy Fiddaman esac 3453*906afcb8SAndy Fiddaman case `ls -s ${tmp}s.exe` in 3454*906afcb8SAndy Fiddaman $d) ;; 3455*906afcb8SAndy Fiddaman *) reallystatic=$2 3456*906afcb8SAndy Fiddaman set x 3457*906afcb8SAndy Fiddaman shift 3458*906afcb8SAndy Fiddaman break 3459*906afcb8SAndy Fiddaman ;; 3460*906afcb8SAndy Fiddaman esac 3461*906afcb8SAndy Fiddaman done 3462*906afcb8SAndy Fiddaman fi 3463*906afcb8SAndy Fiddaman rm -f ${tmp}s.* 3464*906afcb8SAndy Fiddaman #...INDENT 3465*906afcb8SAndy Fiddaman ;; 3466*906afcb8SAndy Fiddaman esac 3467*906afcb8SAndy Fiddaman ccflags=$reallystatic 3468*906afcb8SAndy Fiddaman ;; 3469*906afcb8SAndy Fiddaman *) ccflags= 3470*906afcb8SAndy Fiddaman ;; 3471*906afcb8SAndy Fiddaman esac 3472*906afcb8SAndy Fiddaman set x $mac 3473*906afcb8SAndy Fiddaman e=1 3474*906afcb8SAndy Fiddaman while : 3475*906afcb8SAndy Fiddaman do o= 3476*906afcb8SAndy Fiddaman shift 3477*906afcb8SAndy Fiddaman while : 3478*906afcb8SAndy Fiddaman do case $# in 3479*906afcb8SAndy Fiddaman 0) break ;; 3480*906afcb8SAndy Fiddaman esac 3481*906afcb8SAndy Fiddaman case $1 in 3482*906afcb8SAndy Fiddaman -) break ;; 3483*906afcb8SAndy Fiddaman esac 3484*906afcb8SAndy Fiddaman o="$o $1" 3485*906afcb8SAndy Fiddaman shift 3486*906afcb8SAndy Fiddaman done 3487*906afcb8SAndy Fiddaman rm -f $tmp.exe 3488*906afcb8SAndy Fiddaman if compile $cc $ccflags $o -DTEST=$p -DID=$v -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout && $executable $tmp.exe 3489*906afcb8SAndy Fiddaman then case $run in 3490*906afcb8SAndy Fiddaman 3491*906afcb8SAndy Fiddaman status*)execute $tmp.exe <&$nullin >&$nullout 3492*906afcb8SAndy Fiddaman V=$? 3493*906afcb8SAndy Fiddaman case $V in 3494*906afcb8SAndy Fiddaman 0) e=1 ;; 3495*906afcb8SAndy Fiddaman *) e=0 ;; 3496*906afcb8SAndy Fiddaman esac 3497*906afcb8SAndy Fiddaman break 3498*906afcb8SAndy Fiddaman ;; 3499*906afcb8SAndy Fiddaman no[ls]*);; 3500*906afcb8SAndy Fiddaman [ls]*) e=0 && break ;; 3501*906afcb8SAndy Fiddaman noo*) execute $tmp.exe <&$nullin >$tmp.out || break ;; 3502*906afcb8SAndy Fiddaman o*) execute $tmp.exe <&$nullin >$tmp.out && e=0 && break ;; 3503*906afcb8SAndy Fiddaman no*) execute $tmp.exe <&$nullin >&$nullout || break ;; 3504*906afcb8SAndy Fiddaman *) execute $tmp.exe <&$nullin >&$nullout && e=0 && break ;; 3505*906afcb8SAndy Fiddaman 3506*906afcb8SAndy Fiddaman esac 3507*906afcb8SAndy Fiddaman else case $run in 3508*906afcb8SAndy Fiddaman no[els]*)e=1 && break ;; 3509*906afcb8SAndy Fiddaman esac 3510*906afcb8SAndy Fiddaman fi 3511*906afcb8SAndy Fiddaman case $# in 3512*906afcb8SAndy Fiddaman 0) case $run in 3513*906afcb8SAndy Fiddaman no*) e=0 ;; 3514*906afcb8SAndy Fiddaman esac 3515*906afcb8SAndy Fiddaman break 3516*906afcb8SAndy Fiddaman ;; 3517*906afcb8SAndy Fiddaman esac 3518*906afcb8SAndy Fiddaman done 3519*906afcb8SAndy Fiddaman ;; 3520*906afcb8SAndy Fiddaman esac 3521*906afcb8SAndy Fiddaman o=1 3522*906afcb8SAndy Fiddaman case $run in 3523*906afcb8SAndy Fiddaman no*) case $e in 3524*906afcb8SAndy Fiddaman 0) e=1 ;; 3525*906afcb8SAndy Fiddaman *) e=0 ;; 3526*906afcb8SAndy Fiddaman esac 3527*906afcb8SAndy Fiddaman ;; 3528*906afcb8SAndy Fiddaman esac 3529*906afcb8SAndy Fiddaman case $run in 3530*906afcb8SAndy Fiddaman o*|noo*)case $e in 3531*906afcb8SAndy Fiddaman 0) cat $tmp.out ;; 3532*906afcb8SAndy Fiddaman esac 3533*906afcb8SAndy Fiddaman rm -f $tmp.out 3534*906afcb8SAndy Fiddaman ;; 3535*906afcb8SAndy Fiddaman esac 3536*906afcb8SAndy Fiddaman report $e $V "${note:-$run\ passed}" "${note:-$run} failed" 3537*906afcb8SAndy Fiddaman continue 3538*906afcb8SAndy Fiddaman ;; 3539*906afcb8SAndy Fiddaman esac 3540*906afcb8SAndy Fiddaman 3541*906afcb8SAndy Fiddaman # initialize common builtin state 3542*906afcb8SAndy Fiddaman 3543*906afcb8SAndy Fiddaman case $o in 3544*906afcb8SAndy Fiddaman dat|lib|mth|run) 3545*906afcb8SAndy Fiddaman case $statictest in 3546*906afcb8SAndy Fiddaman "") statictest=FoobaR 3547*906afcb8SAndy Fiddaman copy $tmp.c " 3548*906afcb8SAndy Fiddaman$tst 3549*906afcb8SAndy Fiddaman$ext 3550*906afcb8SAndy Fiddaman$std 3551*906afcb8SAndy Fiddaman$usr 3552*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 3553*906afcb8SAndy Fiddamanextern int $statictest; 3554*906afcb8SAndy Fiddaman_END_EXTERNS_ 3555*906afcb8SAndy Fiddamanint main(){char* i = (char*)&$statictest; return ((unsigned int)i)^0xaaaa;} 3556*906afcb8SAndy Fiddaman" 3557*906afcb8SAndy Fiddaman rm -f $tmp.exe 3558*906afcb8SAndy Fiddaman if compile $cc -o $tmp.exe $tmp.c <&$nullin >&$nullout && $executable $tmp.exe 3559*906afcb8SAndy Fiddaman then case $static in 3560*906afcb8SAndy Fiddaman .) static= 3561*906afcb8SAndy Fiddaman copy $tmp.c " 3562*906afcb8SAndy Fiddaman$tst 3563*906afcb8SAndy Fiddaman$ext 3564*906afcb8SAndy Fiddamanint main(){printf("hello");return(0);} 3565*906afcb8SAndy Fiddaman" 3566*906afcb8SAndy Fiddaman rm -f $tmp.exe 3567*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout && 3568*906afcb8SAndy Fiddaman compile $cc -o $tmp.exe $tmp.o <&$nullin >&$nullout && 3569*906afcb8SAndy Fiddaman $executable $tmp.exe 3570*906afcb8SAndy Fiddaman then e=`wc -l $tmp.e` 3571*906afcb8SAndy Fiddaman eval set x x $binding 3572*906afcb8SAndy Fiddaman while : 3573*906afcb8SAndy Fiddaman do shift 3574*906afcb8SAndy Fiddaman shift 3575*906afcb8SAndy Fiddaman case $# in 3576*906afcb8SAndy Fiddaman 0) break ;; 3577*906afcb8SAndy Fiddaman esac 3578*906afcb8SAndy Fiddaman rm -f $tmp.exe 3579*906afcb8SAndy Fiddaman compile $cc -o $tmp.exe $1 $tmp.o <&$nullin >&$nullout && $executable $tmp.exe || continue 3580*906afcb8SAndy Fiddaman case `wc -l $tmp.e` in 3581*906afcb8SAndy Fiddaman $e) ;; 3582*906afcb8SAndy Fiddaman *) continue ;; 3583*906afcb8SAndy Fiddaman esac 3584*906afcb8SAndy Fiddaman d=`ls -s $tmp.exe` 3585*906afcb8SAndy Fiddaman rm -f $tmp.exe 3586*906afcb8SAndy Fiddaman compile $cc -o $tmp.exe $2 $tmp.o <&$nullin >&$nullout && $executable $tmp.exe || continue 3587*906afcb8SAndy Fiddaman case `wc -l $tmp.e` in 3588*906afcb8SAndy Fiddaman $e) ;; 3589*906afcb8SAndy Fiddaman *) continue ;; 3590*906afcb8SAndy Fiddaman esac 3591*906afcb8SAndy Fiddaman case `ls -s $tmp.exe` in 3592*906afcb8SAndy Fiddaman $d) ;; 3593*906afcb8SAndy Fiddaman *) static=$2 3594*906afcb8SAndy Fiddaman set x 3595*906afcb8SAndy Fiddaman shift 3596*906afcb8SAndy Fiddaman break 3597*906afcb8SAndy Fiddaman ;; 3598*906afcb8SAndy Fiddaman esac 3599*906afcb8SAndy Fiddaman done 3600*906afcb8SAndy Fiddaman fi 3601*906afcb8SAndy Fiddaman ;; 3602*906afcb8SAndy Fiddaman esac 3603*906afcb8SAndy Fiddaman else static= 3604*906afcb8SAndy Fiddaman fi 3605*906afcb8SAndy Fiddaman ;; 3606*906afcb8SAndy Fiddaman esac 3607*906afcb8SAndy Fiddaman ;; 3608*906afcb8SAndy Fiddaman esac 3609*906afcb8SAndy Fiddaman 3610*906afcb8SAndy Fiddaman # builtin tests 3611*906afcb8SAndy Fiddaman 3612*906afcb8SAndy Fiddaman case $o in 3613*906afcb8SAndy Fiddaman api) ;; 3614*906afcb8SAndy Fiddaman cmd) case $p in 3615*906afcb8SAndy Fiddaman ?*) continue ;; 3616*906afcb8SAndy Fiddaman esac 3617*906afcb8SAndy Fiddaman is $o $a 3618*906afcb8SAndy Fiddaman k=1 3619*906afcb8SAndy Fiddaman for j in "" usr 3620*906afcb8SAndy Fiddaman do case $j in 3621*906afcb8SAndy Fiddaman "") d= s= ;; 3622*906afcb8SAndy Fiddaman *) d=/$j s=_$j ;; 3623*906afcb8SAndy Fiddaman esac 3624*906afcb8SAndy Fiddaman for i in bin etc ucb 3625*906afcb8SAndy Fiddaman do if test -f $altroot/$d/$i/$a 3626*906afcb8SAndy Fiddaman then case $k in 3627*906afcb8SAndy Fiddaman 1) k=0 3628*906afcb8SAndy Fiddaman case $M in 3629*906afcb8SAndy Fiddaman *-*) ;; 3630*906afcb8SAndy Fiddaman *) usr="$usr$nl#define $m 1" 3631*906afcb8SAndy Fiddaman case $define in 3632*906afcb8SAndy Fiddaman 1) echo "#define $m 1 /* $a in ?(/usr)/(bin|etc|ucb) */" ;; 3633*906afcb8SAndy Fiddaman n) echo "$m=1" ;; 3634*906afcb8SAndy Fiddaman esac 3635*906afcb8SAndy Fiddaman ;; 3636*906afcb8SAndy Fiddaman esac 3637*906afcb8SAndy Fiddaman ;; 3638*906afcb8SAndy Fiddaman esac 3639*906afcb8SAndy Fiddaman c=${s}_${i}_${v} 3640*906afcb8SAndy Fiddaman usr="$usr$nl#define $c 1" 3641*906afcb8SAndy Fiddaman case $define in 3642*906afcb8SAndy Fiddaman 1) echo "#define $c 1 /* $d/$i/$a found */" ;; 3643*906afcb8SAndy Fiddaman n) echo "$c=1" ;; 3644*906afcb8SAndy Fiddaman esac 3645*906afcb8SAndy Fiddaman fi 3646*906afcb8SAndy Fiddaman done 3647*906afcb8SAndy Fiddaman done 3648*906afcb8SAndy Fiddaman case $k in 3649*906afcb8SAndy Fiddaman 0) success ;; 3650*906afcb8SAndy Fiddaman 1) failure ;; 3651*906afcb8SAndy Fiddaman esac 3652*906afcb8SAndy Fiddaman ;; 3653*906afcb8SAndy Fiddaman dat) case $p in 3654*906afcb8SAndy Fiddaman ?*) continue ;; 3655*906afcb8SAndy Fiddaman esac 3656*906afcb8SAndy Fiddaman { 3657*906afcb8SAndy Fiddaman copy - " 3658*906afcb8SAndy Fiddaman$tst 3659*906afcb8SAndy Fiddaman$ext 3660*906afcb8SAndy Fiddaman$std 3661*906afcb8SAndy Fiddaman$usr 3662*906afcb8SAndy Fiddaman$pre 3663*906afcb8SAndy Fiddaman" 3664*906afcb8SAndy Fiddaman case $inc in 3665*906afcb8SAndy Fiddaman ?*) echo "$inc" 3666*906afcb8SAndy Fiddaman ;; 3667*906afcb8SAndy Fiddaman *) echo "_BEGIN_EXTERNS_ 3668*906afcb8SAndy Fiddamanextern int $v; 3669*906afcb8SAndy Fiddaman_END_EXTERNS_" 3670*906afcb8SAndy Fiddaman ;; 3671*906afcb8SAndy Fiddaman esac 3672*906afcb8SAndy Fiddaman echo " 3673*906afcb8SAndy Fiddaman#ifdef _DLL 3674*906afcb8SAndy Fiddaman#define _REF_ 3675*906afcb8SAndy Fiddaman#else 3676*906afcb8SAndy Fiddaman#define _REF_ & 3677*906afcb8SAndy Fiddaman#endif 3678*906afcb8SAndy Fiddamanint main(){char* i = (char*) _REF_ $v; return ((unsigned int)i)^0xaaaa;}" 3679*906afcb8SAndy Fiddaman } > $tmp.c 3680*906afcb8SAndy Fiddaman is $o $v 3681*906afcb8SAndy Fiddaman rm -f $tmp.exe 3682*906afcb8SAndy Fiddaman compile $cc -c $tmp.c <&$nullin >&$nullout && 3683*906afcb8SAndy Fiddaman compile $cc $static -o $tmp.exe $tmp.o $lib $deflib <&$nullin >&$nullout && 3684*906afcb8SAndy Fiddaman $executable $tmp.exe 3685*906afcb8SAndy Fiddaman report $? 1 "$v in default lib(s)" "$v not in default lib(s)" 3686*906afcb8SAndy Fiddaman ;; 3687*906afcb8SAndy Fiddaman dfn) case $p in 3688*906afcb8SAndy Fiddaman ?*) continue ;; 3689*906afcb8SAndy Fiddaman esac 3690*906afcb8SAndy Fiddaman is dfn $v 3691*906afcb8SAndy Fiddaman echo "$pre 3692*906afcb8SAndy Fiddaman$tst 3693*906afcb8SAndy Fiddaman$ext 3694*906afcb8SAndy Fiddaman$inc 3695*906afcb8SAndy Fiddaman#ifdef $v 3696*906afcb8SAndy Fiddaman<<\"#ifndef $v\">> 3697*906afcb8SAndy Fiddaman<<\"#define $v\">> $v <<\"/* native $v */\">> 3698*906afcb8SAndy Fiddaman<<\"#endif\">> 3699*906afcb8SAndy Fiddaman#endif" > $tmp.c 3700*906afcb8SAndy Fiddaman if compile $cc -E -P $tmp.c <&$nullin >$tmp.i 3701*906afcb8SAndy Fiddaman then sed -e '/<<[ ]*".*"[ ]*>>/!d' -e 's/<<[ ]*"//g' -e 's/"[ ]*>>//g' $tmp.i > $tmp.t 3702*906afcb8SAndy Fiddaman if test -s $tmp.t 3703*906afcb8SAndy Fiddaman then success 3704*906afcb8SAndy Fiddaman cat $tmp.t 3705*906afcb8SAndy Fiddaman else failure 3706*906afcb8SAndy Fiddaman fi 3707*906afcb8SAndy Fiddaman else failure 3708*906afcb8SAndy Fiddaman fi 3709*906afcb8SAndy Fiddaman ;; 3710*906afcb8SAndy Fiddaman exp) case $test in 3711*906afcb8SAndy Fiddaman '') echo "$command: $file$sline: test expression expected for $o" >&$stderr 3712*906afcb8SAndy Fiddaman exit 1 3713*906afcb8SAndy Fiddaman ;; 3714*906afcb8SAndy Fiddaman esac 3715*906afcb8SAndy Fiddaman case $a in 3716*906afcb8SAndy Fiddaman -|'') ;; 3717*906afcb8SAndy Fiddaman *) eval x='$'$a 3718*906afcb8SAndy Fiddaman case $x in 3719*906afcb8SAndy Fiddaman 1) result=FAILURE 3720*906afcb8SAndy Fiddaman continue 3721*906afcb8SAndy Fiddaman ;; 3722*906afcb8SAndy Fiddaman esac 3723*906afcb8SAndy Fiddaman ;; 3724*906afcb8SAndy Fiddaman esac 3725*906afcb8SAndy Fiddaman case $test in 3726*906afcb8SAndy Fiddaman [01]|'"'*'"'|'<'*'>') 3727*906afcb8SAndy Fiddaman case $a in 3728*906afcb8SAndy Fiddaman -|'') ;; 3729*906afcb8SAndy Fiddaman *) case $define$note in 3730*906afcb8SAndy Fiddaman 1) echo "#define $a $test" ;; 3731*906afcb8SAndy Fiddaman 1*) echo "#define $a $test /* $note */" ;; 3732*906afcb8SAndy Fiddaman n) echo "$a=$test" ;; 3733*906afcb8SAndy Fiddaman esac 3734*906afcb8SAndy Fiddaman eval $a='$test' 3735*906afcb8SAndy Fiddaman ;; 3736*906afcb8SAndy Fiddaman esac 3737*906afcb8SAndy Fiddaman ;; 3738*906afcb8SAndy Fiddaman *) case $note in 3739*906afcb8SAndy Fiddaman '') note=$test ;; 3740*906afcb8SAndy Fiddaman esac 3741*906afcb8SAndy Fiddaman case $test in 3742*906afcb8SAndy Fiddaman '') c=1 3743*906afcb8SAndy Fiddaman ;; 3744*906afcb8SAndy Fiddaman *) is exp "$note" 3745*906afcb8SAndy Fiddaman x= 3746*906afcb8SAndy Fiddaman for i in `echo '' $test | sed 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_], & ,g'` 3747*906afcb8SAndy Fiddaman do case $i in 3748*906afcb8SAndy Fiddaman [\ \ ]) 3749*906afcb8SAndy Fiddaman ;; 3750*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]*) 3751*906afcb8SAndy Fiddaman eval i='${'$i'}' 3752*906afcb8SAndy Fiddaman case $i in 3753*906afcb8SAndy Fiddaman '') i=0 3754*906afcb8SAndy Fiddaman ;; 3755*906afcb8SAndy Fiddaman '"'*'"');; 3756*906afcb8SAndy Fiddaman *[!-+0123456789]*) 3757*906afcb8SAndy Fiddaman case $i in 3758*906afcb8SAndy Fiddaman *'"'*) i=1 ;; 3759*906afcb8SAndy Fiddaman *) i='"'$i'"' ;; 3760*906afcb8SAndy Fiddaman esac 3761*906afcb8SAndy Fiddaman ;; 3762*906afcb8SAndy Fiddaman esac 3763*906afcb8SAndy Fiddaman x="$x $i" 3764*906afcb8SAndy Fiddaman ;; 3765*906afcb8SAndy Fiddaman '!') x="$x 0 =" 3766*906afcb8SAndy Fiddaman ;; 3767*906afcb8SAndy Fiddaman '&'|'|')case $x in 3768*906afcb8SAndy Fiddaman *"$i") ;; 3769*906afcb8SAndy Fiddaman *) x="$x \\$i" ;; 3770*906afcb8SAndy Fiddaman esac 3771*906afcb8SAndy Fiddaman ;; 3772*906afcb8SAndy Fiddaman *) x="$x \\$i" 3773*906afcb8SAndy Fiddaman ;; 3774*906afcb8SAndy Fiddaman esac 3775*906afcb8SAndy Fiddaman done 3776*906afcb8SAndy Fiddaman c=`eval expr $x 2>&$stderr` 3777*906afcb8SAndy Fiddaman ;; 3778*906afcb8SAndy Fiddaman esac 3779*906afcb8SAndy Fiddaman case $c in 3780*906afcb8SAndy Fiddaman 0) c=1 ;; 3781*906afcb8SAndy Fiddaman *) c=0 ;; 3782*906afcb8SAndy Fiddaman esac 3783*906afcb8SAndy Fiddaman M=$a 3784*906afcb8SAndy Fiddaman m=$a 3785*906afcb8SAndy Fiddaman report $c 1 "$note is true" "$note is false" 3786*906afcb8SAndy Fiddaman ;; 3787*906afcb8SAndy Fiddaman esac 3788*906afcb8SAndy Fiddaman ;; 3789*906afcb8SAndy Fiddaman hdr|lcl|nxt|sys) 3790*906afcb8SAndy Fiddaman case $o in 3791*906afcb8SAndy Fiddaman lcl|nxt)case $M in 3792*906afcb8SAndy Fiddaman *-*) continue ;; 3793*906afcb8SAndy Fiddaman esac 3794*906afcb8SAndy Fiddaman eval x='$'_$m 3795*906afcb8SAndy Fiddaman case $x in 3796*906afcb8SAndy Fiddaman ?*) continue ;; 3797*906afcb8SAndy Fiddaman esac 3798*906afcb8SAndy Fiddaman eval _$m=1 3799*906afcb8SAndy Fiddaman is $o $f 3800*906afcb8SAndy Fiddaman echo "$pre 3801*906afcb8SAndy Fiddaman$tst 3802*906afcb8SAndy Fiddaman$ext 3803*906afcb8SAndy Fiddaman$inc 3804*906afcb8SAndy Fiddaman#include <$f.h>" > $tmp.c 3805*906afcb8SAndy Fiddaman case $f in 3806*906afcb8SAndy Fiddaman sys/*) e= ;; 3807*906afcb8SAndy Fiddaman *) e='-e /[\\\\\/]sys[\\\\\/]'$f'\\.h"/d' ;; 3808*906afcb8SAndy Fiddaman esac 3809*906afcb8SAndy Fiddaman if compile $cc -E $tmp.c <&$nullin >$tmp.i 3810*906afcb8SAndy Fiddaman then i=`sed -e '/^#[line ]*[0123456789][0123456789]*[ ][ ]*"[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:]*[\\\\\/].*[\\\\\/]'$f'\\.h"/!d' $e -e s'/.*"\\(.*\\)".*/\\1/' -e 's,\\\\,/,g' -e 's,///*,/,g' $tmp.i | sed 1q` 3811*906afcb8SAndy Fiddaman case $i in 3812*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]:[\\/]*) 3813*906afcb8SAndy Fiddaman ;; 3814*906afcb8SAndy Fiddaman */*/*) k=`echo "$i" | sed 's,.*/\([^/]*/[^/]*\)$,../\1,'` 3815*906afcb8SAndy Fiddaman echo "$pre 3816*906afcb8SAndy Fiddaman$tst 3817*906afcb8SAndy Fiddaman$ext 3818*906afcb8SAndy Fiddaman$inc 3819*906afcb8SAndy Fiddaman#include <$k>" > $tmp.c 3820*906afcb8SAndy Fiddaman if compile $cc -E $tmp.c <&$nullin >$tmp.i 3821*906afcb8SAndy Fiddaman then j=`sed -e '/^#[line ]*[0123456789][0123456789]*[ ][ ]*"[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ:]*[\\\\\/].*[\\\\\/]'$f'\\.h"/!d' $e -e s'/.*"\\(.*\\)".*/\\1/' -e 's,\\\\,/,g' -e 's,///*,/,g' $tmp.i | sed 1q` 3822*906afcb8SAndy Fiddaman wi=`wc < "$i"` 3823*906afcb8SAndy Fiddaman wj=`wc < "$j"` 3824*906afcb8SAndy Fiddaman case $wi in 3825*906afcb8SAndy Fiddaman $wj) i=$k ;; 3826*906afcb8SAndy Fiddaman esac 3827*906afcb8SAndy Fiddaman fi 3828*906afcb8SAndy Fiddaman ;; 3829*906afcb8SAndy Fiddaman *) echo "$pre 3830*906afcb8SAndy Fiddaman$tst 3831*906afcb8SAndy Fiddaman$ext 3832*906afcb8SAndy Fiddaman$inc 3833*906afcb8SAndy Fiddaman#include <../include/$f.h>" > $tmp.c 3834*906afcb8SAndy Fiddaman if compile $cc -E $tmp.c <&$nullin >&$nullout 3835*906afcb8SAndy Fiddaman then i=../include/$f.h 3836*906afcb8SAndy Fiddaman fi 3837*906afcb8SAndy Fiddaman ;; 3838*906afcb8SAndy Fiddaman esac 3839*906afcb8SAndy Fiddaman else i= 3840*906afcb8SAndy Fiddaman fi 3841*906afcb8SAndy Fiddaman case $i in 3842*906afcb8SAndy Fiddaman [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]:[\\/]*|[\\/]*) 3843*906afcb8SAndy Fiddaman success 3844*906afcb8SAndy Fiddaman case $o in 3845*906afcb8SAndy Fiddaman lcl) echo "#if defined(__STDPP__directive)" 3846*906afcb8SAndy Fiddaman echo "__STDPP__directive pragma pp:hosted" 3847*906afcb8SAndy Fiddaman echo "#endif" 3848*906afcb8SAndy Fiddaman echo "#include <$i> /* the native <$f.h> */" 3849*906afcb8SAndy Fiddaman echo "#undef $m" 3850*906afcb8SAndy Fiddaman usr="$usr$nl#define $m 1" 3851*906afcb8SAndy Fiddaman echo "#define $m 1" 3852*906afcb8SAndy Fiddaman ;; 3853*906afcb8SAndy Fiddaman nxt) echo "#define $m <$i> /* include path for the native <$f.h> */" 3854*906afcb8SAndy Fiddaman echo "#define ${m}_str \"$i\" /* include string for the native <$f.h> */" 3855*906afcb8SAndy Fiddaman usr="$usr$nl#define $m <$i>$nl#define ${m}_str \"$i\"" 3856*906afcb8SAndy Fiddaman eval $m=\\\<$i\\\> 3857*906afcb8SAndy Fiddaman ;; 3858*906afcb8SAndy Fiddaman esac 3859*906afcb8SAndy Fiddaman break 3860*906afcb8SAndy Fiddaman ;; 3861*906afcb8SAndy Fiddaman ../*/*) success 3862*906afcb8SAndy Fiddaman case $o in 3863*906afcb8SAndy Fiddaman lcl) echo "#include <$i> /* the native <$f.h> */" 3864*906afcb8SAndy Fiddaman echo "#undef $m" 3865*906afcb8SAndy Fiddaman usr="$usr$nl#define $m 1" 3866*906afcb8SAndy Fiddaman echo "#define $m 1" 3867*906afcb8SAndy Fiddaman eval $m=1 3868*906afcb8SAndy Fiddaman ;; 3869*906afcb8SAndy Fiddaman nxt) echo "#define $m <$i> /* include path for the native <$f.h> */" 3870*906afcb8SAndy Fiddaman echo "#define ${m}_str \"$i\" /* include string for the native <$f.h> */" 3871*906afcb8SAndy Fiddaman usr="$usr$nl#define $m <$i>$nl#define ${m}_str \"$i\"" 3872*906afcb8SAndy Fiddaman eval $m=\\\<$i\\\> 3873*906afcb8SAndy Fiddaman ;; 3874*906afcb8SAndy Fiddaman esac 3875*906afcb8SAndy Fiddaman break 3876*906afcb8SAndy Fiddaman ;; 3877*906afcb8SAndy Fiddaman *) failure 3878*906afcb8SAndy Fiddaman case $o in 3879*906afcb8SAndy Fiddaman lcl) case $all$config$undef in 3880*906afcb8SAndy Fiddaman ?1?|??1)echo "#undef $m /* no native <$f.h> */" ;; 3881*906afcb8SAndy Fiddaman 1??) echo "#define $m 0 /* no native <$f.h> */" ;; 3882*906afcb8SAndy Fiddaman esac 3883*906afcb8SAndy Fiddaman eval $m=0 3884*906afcb8SAndy Fiddaman ;; 3885*906afcb8SAndy Fiddaman nxt) case $all$config$undef in 3886*906afcb8SAndy Fiddaman ?1?|??1)echo "#undef $m /* no include path for the native <$f.h> */" ;; 3887*906afcb8SAndy Fiddaman esac 3888*906afcb8SAndy Fiddaman ;; 3889*906afcb8SAndy Fiddaman esac 3890*906afcb8SAndy Fiddaman ;; 3891*906afcb8SAndy Fiddaman esac 3892*906afcb8SAndy Fiddaman ;; 3893*906afcb8SAndy Fiddaman *) case $o in 3894*906afcb8SAndy Fiddaman hdr) x=$f.h ;; 3895*906afcb8SAndy Fiddaman sys) x=sys/$f.h ;; 3896*906afcb8SAndy Fiddaman esac 3897*906afcb8SAndy Fiddaman case " $gothdr " in 3898*906afcb8SAndy Fiddaman *" - $x "*) 3899*906afcb8SAndy Fiddaman failure + 3900*906afcb8SAndy Fiddaman ;; 3901*906afcb8SAndy Fiddaman *" + $x "*) 3902*906afcb8SAndy Fiddaman success + 3903*906afcb8SAndy Fiddaman ;; 3904*906afcb8SAndy Fiddaman *) echo " 3905*906afcb8SAndy Fiddaman$tst 3906*906afcb8SAndy Fiddaman$ext 3907*906afcb8SAndy Fiddaman$allinc 3908*906afcb8SAndy Fiddaman$inc 3909*906afcb8SAndy Fiddaman#include <$x>" > $tmp.c 3910*906afcb8SAndy Fiddaman if is_hdr $x 3911*906afcb8SAndy Fiddaman then gothdr="$gothdr + $x" 3912*906afcb8SAndy Fiddaman case $M in 3913*906afcb8SAndy Fiddaman *-*) ;; 3914*906afcb8SAndy Fiddaman *) case " $puthdr " in 3915*906afcb8SAndy Fiddaman *" $m "*) 3916*906afcb8SAndy Fiddaman ;; 3917*906afcb8SAndy Fiddaman *) puthdr="$puthdr $m" 3918*906afcb8SAndy Fiddaman usr="$usr$nl#define $m 1" 3919*906afcb8SAndy Fiddaman ;; 3920*906afcb8SAndy Fiddaman esac 3921*906afcb8SAndy Fiddaman case $define in 3922*906afcb8SAndy Fiddaman 1) echo "#define $m 1 /* #include <$x> ok */" ;; 3923*906afcb8SAndy Fiddaman n) echo "$m=1" ;; 3924*906afcb8SAndy Fiddaman esac 3925*906afcb8SAndy Fiddaman eval $m=1 3926*906afcb8SAndy Fiddaman ;; 3927*906afcb8SAndy Fiddaman esac 3928*906afcb8SAndy Fiddaman else gothdr="$gothdr - $x" 3929*906afcb8SAndy Fiddaman case $M in 3930*906afcb8SAndy Fiddaman *-*) ;; 3931*906afcb8SAndy Fiddaman *) case $define$all$config$undef in 3932*906afcb8SAndy Fiddaman 1?1?|1??1)echo "#undef $m /* #include <$x> not ok */" ;; 3933*906afcb8SAndy Fiddaman 11??) echo "#define $m 0 /* #include <$x> not ok */" ;; 3934*906afcb8SAndy Fiddaman n1?1) echo "$m=" ;; 3935*906afcb8SAndy Fiddaman n1??) echo "$m=0" ;; 3936*906afcb8SAndy Fiddaman esac 3937*906afcb8SAndy Fiddaman eval $m=0 3938*906afcb8SAndy Fiddaman ;; 3939*906afcb8SAndy Fiddaman esac 3940*906afcb8SAndy Fiddaman fi 3941*906afcb8SAndy Fiddaman ;; 3942*906afcb8SAndy Fiddaman esac 3943*906afcb8SAndy Fiddaman continue 3944*906afcb8SAndy Fiddaman ;; 3945*906afcb8SAndy Fiddaman esac 3946*906afcb8SAndy Fiddaman ;; 3947*906afcb8SAndy Fiddaman iff) ;; 3948*906afcb8SAndy Fiddaman ini) ;; 3949*906afcb8SAndy Fiddaman key) case $p in 3950*906afcb8SAndy Fiddaman ?*) continue ;; 3951*906afcb8SAndy Fiddaman esac 3952*906afcb8SAndy Fiddaman w=$v 3953*906afcb8SAndy Fiddaman while : 3954*906afcb8SAndy Fiddaman do is $o $w 3955*906afcb8SAndy Fiddaman echo "$pre 3956*906afcb8SAndy Fiddaman$tst 3957*906afcb8SAndy Fiddaman$ext 3958*906afcb8SAndy Fiddamanint f(){int $w = 1;return($w);}" > $tmp.c 3959*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 3960*906afcb8SAndy Fiddaman then failure 3961*906afcb8SAndy Fiddaman case $set in 3962*906afcb8SAndy Fiddaman *" ="|*" = "*) 3963*906afcb8SAndy Fiddaman set x $set 3964*906afcb8SAndy Fiddaman shift 3965*906afcb8SAndy Fiddaman w= 3966*906afcb8SAndy Fiddaman while : 3967*906afcb8SAndy Fiddaman do case $# in 3968*906afcb8SAndy Fiddaman 0) break ;; 3969*906afcb8SAndy Fiddaman esac 3970*906afcb8SAndy Fiddaman case $1 in 3971*906afcb8SAndy Fiddaman =) break ;; 3972*906afcb8SAndy Fiddaman esac 3973*906afcb8SAndy Fiddaman case $w in 3974*906afcb8SAndy Fiddaman '') w=$1 ;; 3975*906afcb8SAndy Fiddaman *) w="$w $1" ;; 3976*906afcb8SAndy Fiddaman esac 3977*906afcb8SAndy Fiddaman shift 3978*906afcb8SAndy Fiddaman done 3979*906afcb8SAndy Fiddaman case $1 in 3980*906afcb8SAndy Fiddaman =) shift 3981*906afcb8SAndy Fiddaman case $# in 3982*906afcb8SAndy Fiddaman 0) set=" " ;; 3983*906afcb8SAndy Fiddaman *) set=$* ;; 3984*906afcb8SAndy Fiddaman esac 3985*906afcb8SAndy Fiddaman ;; 3986*906afcb8SAndy Fiddaman *) set= 3987*906afcb8SAndy Fiddaman ;; 3988*906afcb8SAndy Fiddaman esac 3989*906afcb8SAndy Fiddaman case $shell in 3990*906afcb8SAndy Fiddaman ksh) typeset -u u=$w ;; 3991*906afcb8SAndy Fiddaman *) u=`echo $w | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` ;; 3992*906afcb8SAndy Fiddaman esac 3993*906afcb8SAndy Fiddaman u=_$u 3994*906afcb8SAndy Fiddaman M=$w 3995*906afcb8SAndy Fiddaman case $M in 3996*906afcb8SAndy Fiddaman *[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*) 3997*906afcb8SAndy Fiddaman M=`echo "X$m" | sed -e 's,^.,,' -e 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_],_,g'` 3998*906afcb8SAndy Fiddaman ;; 3999*906afcb8SAndy Fiddaman esac 4000*906afcb8SAndy Fiddaman case $config in 4001*906afcb8SAndy Fiddaman 1) m=HAVE${u}_RESERVED ;; 4002*906afcb8SAndy Fiddaman *) m=_key_${w} ;; 4003*906afcb8SAndy Fiddaman esac 4004*906afcb8SAndy Fiddaman continue 4005*906afcb8SAndy Fiddaman ;; 4006*906afcb8SAndy Fiddaman esac 4007*906afcb8SAndy Fiddaman report - 1 - - "$w is not a reserved keyword" "default for reserved keyword $v" 4008*906afcb8SAndy Fiddaman else report 0 1 "$w is a reserved keyword" - 4009*906afcb8SAndy Fiddaman case $M in 4010*906afcb8SAndy Fiddaman *-*) ;; 4011*906afcb8SAndy Fiddaman *) case $define$w in 4012*906afcb8SAndy Fiddaman 1$v) ;; 4013*906afcb8SAndy Fiddaman 1*) echo "#define $v $w /* alternate for reserved keyword $v */" ;; 4014*906afcb8SAndy Fiddaman n*) echo "$v=$w" ;; 4015*906afcb8SAndy Fiddaman esac 4016*906afcb8SAndy Fiddaman ;; 4017*906afcb8SAndy Fiddaman esac 4018*906afcb8SAndy Fiddaman fi 4019*906afcb8SAndy Fiddaman break 4020*906afcb8SAndy Fiddaman done 4021*906afcb8SAndy Fiddaman ;; 4022*906afcb8SAndy Fiddaman lib|mth)case $p in 4023*906afcb8SAndy Fiddaman ?*) continue ;; 4024*906afcb8SAndy Fiddaman esac 4025*906afcb8SAndy Fiddaman case $v in 4026*906afcb8SAndy Fiddaman -) continue ;; 4027*906afcb8SAndy Fiddaman esac 4028*906afcb8SAndy Fiddaman is $o $v 4029*906afcb8SAndy Fiddaman copy $tmp.c " 4030*906afcb8SAndy Fiddaman$tst 4031*906afcb8SAndy Fiddaman$ext 4032*906afcb8SAndy Fiddaman$std 4033*906afcb8SAndy Fiddaman$usr 4034*906afcb8SAndy Fiddaman$pre 4035*906afcb8SAndy Fiddaman$inc 4036*906afcb8SAndy Fiddamantypedef int (*_IFFE_fun)(); 4037*906afcb8SAndy Fiddaman#ifdef _IFFE_extern 4038*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 4039*906afcb8SAndy Fiddamanextern int $v(); 4040*906afcb8SAndy Fiddaman_END_EXTERNS_ 4041*906afcb8SAndy Fiddaman#endif 4042*906afcb8SAndy Fiddamanstatic _IFFE_fun i=(_IFFE_fun)$v;int main(){return ((unsigned int)i)^0xaaaa;} 4043*906afcb8SAndy Fiddaman" 4044*906afcb8SAndy Fiddaman d=-D_IFFE_extern 4045*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 4046*906afcb8SAndy Fiddaman then d= 4047*906afcb8SAndy Fiddaman elif compile $cc $d -c $tmp.c <&$nullin >&$nullout 4048*906afcb8SAndy Fiddaman then : 4049*906afcb8SAndy Fiddaman else d=error 4050*906afcb8SAndy Fiddaman fi 4051*906afcb8SAndy Fiddaman if test error != "$d" 4052*906afcb8SAndy Fiddaman then rm -f $tmp.exe 4053*906afcb8SAndy Fiddaman if compile $cc $d $static -o $tmp.exe $tmp.o $lib $deflib <&$nullin >&$nullout && 4054*906afcb8SAndy Fiddaman $executable $tmp.exe 4055*906afcb8SAndy Fiddaman then case $o in 4056*906afcb8SAndy Fiddaman lib) c=0 ;; 4057*906afcb8SAndy Fiddaman *) c=1 ;; 4058*906afcb8SAndy Fiddaman esac 4059*906afcb8SAndy Fiddaman report $c 1 "$v() in default lib(s)" "$v() not in default lib(s)" "default for function $v()" 4060*906afcb8SAndy Fiddaman else case $o in 4061*906afcb8SAndy Fiddaman mth) rm -f $tmp.exe 4062*906afcb8SAndy Fiddaman compile $cc $d $static -o $tmp.exe $tmp.o -lm <&$nullin >&$nullout && 4063*906afcb8SAndy Fiddaman $executable $tmp.exe 4064*906afcb8SAndy Fiddaman report $? 1 "$v() in math lib" "$v() not in math lib" "default for function $v()" 4065*906afcb8SAndy Fiddaman ;; 4066*906afcb8SAndy Fiddaman *) report 1 1 - "$v() not in default lib(s)" "default for function $v()" 4067*906afcb8SAndy Fiddaman ;; 4068*906afcb8SAndy Fiddaman esac 4069*906afcb8SAndy Fiddaman fi 4070*906afcb8SAndy Fiddaman else case $intrinsic in 4071*906afcb8SAndy Fiddaman '') copy $tmp.c " 4072*906afcb8SAndy Fiddaman$tst 4073*906afcb8SAndy Fiddaman$ext 4074*906afcb8SAndy Fiddaman$std 4075*906afcb8SAndy Fiddaman$usr 4076*906afcb8SAndy Fiddaman$pre 4077*906afcb8SAndy Fiddaman$inc 4078*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 4079*906afcb8SAndy Fiddamanextern int foo(); 4080*906afcb8SAndy Fiddaman_END_EXTERNS_ 4081*906afcb8SAndy Fiddamanstatic int ((*i)())=foo;int main(){return(i==0);} 4082*906afcb8SAndy Fiddaman" 4083*906afcb8SAndy Fiddaman compile $cc -c $tmp.c <&$nullin >&$nullout 4084*906afcb8SAndy Fiddaman intrinsic=$? 4085*906afcb8SAndy Fiddaman ;; 4086*906afcb8SAndy Fiddaman esac 4087*906afcb8SAndy Fiddaman case $o in 4088*906afcb8SAndy Fiddaman mth) report $intrinsic 1 "$v() in math lib" "$v() not in math lib" "default for function $v()" ;; 4089*906afcb8SAndy Fiddaman *) report $intrinsic 1 "$v() in default lib(s)" "$v() not in default lib(s)" "default for function $v()" ;; 4090*906afcb8SAndy Fiddaman esac 4091*906afcb8SAndy Fiddaman fi 4092*906afcb8SAndy Fiddaman ;; 4093*906afcb8SAndy Fiddaman mac) case $p in 4094*906afcb8SAndy Fiddaman ?*) continue ;; 4095*906afcb8SAndy Fiddaman esac 4096*906afcb8SAndy Fiddaman is mac $v 4097*906afcb8SAndy Fiddaman echo " 4098*906afcb8SAndy Fiddaman$tst 4099*906afcb8SAndy Fiddaman$ext 4100*906afcb8SAndy Fiddaman$pre 4101*906afcb8SAndy Fiddaman$inc 4102*906afcb8SAndy Fiddaman#ifdef $v 4103*906afcb8SAndy Fiddaman'$m:$v' 4104*906afcb8SAndy Fiddaman#endif" > $tmp.c 4105*906afcb8SAndy Fiddaman compile $cc -E $tmp.c <&$nullin | grep -c "'$m:$v'" >&$nullout 4106*906afcb8SAndy Fiddaman report $? 1 "$v is a macro" "$v is not a macro" "default for macro $v" 4107*906afcb8SAndy Fiddaman ;; 4108*906afcb8SAndy Fiddaman mem) case $p in 4109*906afcb8SAndy Fiddaman ?*) eval i='$'_iffe_typedef_$p 4110*906afcb8SAndy Fiddaman case $i in 4111*906afcb8SAndy Fiddaman 0|1) ;; 4112*906afcb8SAndy Fiddaman *) echo "$pre 4113*906afcb8SAndy Fiddaman$tst 4114*906afcb8SAndy Fiddaman$ext 4115*906afcb8SAndy Fiddaman$inc 4116*906afcb8SAndy Fiddamanstatic $p i; 4117*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c 4118*906afcb8SAndy Fiddaman is typ $p 4119*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 4120*906afcb8SAndy Fiddaman then success - 4121*906afcb8SAndy Fiddaman eval _iffe_typedef_$p=1 4122*906afcb8SAndy Fiddaman i=1 4123*906afcb8SAndy Fiddaman else failure - 4124*906afcb8SAndy Fiddaman eval _iffe_typedef_$p=0 4125*906afcb8SAndy Fiddaman i=0 4126*906afcb8SAndy Fiddaman fi 4127*906afcb8SAndy Fiddaman ;; 4128*906afcb8SAndy Fiddaman esac 4129*906afcb8SAndy Fiddaman case $i in 4130*906afcb8SAndy Fiddaman 0) i="$v is not a member of $p" p="struct $p" ;; 4131*906afcb8SAndy Fiddaman *) i=- ;; 4132*906afcb8SAndy Fiddaman esac 4133*906afcb8SAndy Fiddaman is mem $v "$p" 4134*906afcb8SAndy Fiddaman echo "$pre 4135*906afcb8SAndy Fiddaman$tst 4136*906afcb8SAndy Fiddaman$ext 4137*906afcb8SAndy Fiddaman$inc 4138*906afcb8SAndy Fiddamanstatic $p i; 4139*906afcb8SAndy Fiddamanint n = sizeof(i.$v);" > $tmp.c 4140*906afcb8SAndy Fiddaman compile $cc -c $tmp.c <&$nullin >&$nullout 4141*906afcb8SAndy Fiddaman report $? 1 "$v is a member of $p" "$i" 4142*906afcb8SAndy Fiddaman ;; 4143*906afcb8SAndy Fiddaman *) p=$v 4144*906afcb8SAndy Fiddaman eval i='$'_iffe_typedef_$p 4145*906afcb8SAndy Fiddaman case $i in 4146*906afcb8SAndy Fiddaman 0|1) ;; 4147*906afcb8SAndy Fiddaman *) echo "$pre 4148*906afcb8SAndy Fiddaman$tst 4149*906afcb8SAndy Fiddaman$ext 4150*906afcb8SAndy Fiddaman$inc 4151*906afcb8SAndy Fiddamanstatic $p i; 4152*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c 4153*906afcb8SAndy Fiddaman is typ $p 4154*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 4155*906afcb8SAndy Fiddaman then success - 4156*906afcb8SAndy Fiddaman eval _iffe_typedef_$p=1 4157*906afcb8SAndy Fiddaman i=1 4158*906afcb8SAndy Fiddaman else failure - 4159*906afcb8SAndy Fiddaman eval _iffe_typedef_$p=0 4160*906afcb8SAndy Fiddaman i=0 4161*906afcb8SAndy Fiddaman fi 4162*906afcb8SAndy Fiddaman ;; 4163*906afcb8SAndy Fiddaman esac 4164*906afcb8SAndy Fiddaman case $i in 4165*906afcb8SAndy Fiddaman 0) i="$p is not a non-opaque struct" p="struct $p" ;; 4166*906afcb8SAndy Fiddaman *) i=- ;; 4167*906afcb8SAndy Fiddaman esac 4168*906afcb8SAndy Fiddaman is nos "$p" 4169*906afcb8SAndy Fiddaman echo "$pre 4170*906afcb8SAndy Fiddaman$tst 4171*906afcb8SAndy Fiddaman$ext 4172*906afcb8SAndy Fiddaman$inc 4173*906afcb8SAndy Fiddamanstatic $p i; 4174*906afcb8SAndy Fiddamanint n = sizeof(i);" > $tmp.c 4175*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 4176*906afcb8SAndy Fiddaman then echo "$pre 4177*906afcb8SAndy Fiddaman$tst 4178*906afcb8SAndy Fiddaman$ext 4179*906afcb8SAndy Fiddaman$inc 4180*906afcb8SAndy Fiddamanstatic $p i; 4181*906afcb8SAndy Fiddamanunsigned long f() { return (unsigned long)i; }" > $tmp.c 4182*906afcb8SAndy Fiddaman if compile $cc -c $tmp.c <&$nullin >&$nullout 4183*906afcb8SAndy Fiddaman then c=1 4184*906afcb8SAndy Fiddaman else c=0 4185*906afcb8SAndy Fiddaman fi 4186*906afcb8SAndy Fiddaman else c=1 4187*906afcb8SAndy Fiddaman fi 4188*906afcb8SAndy Fiddaman report $c 1 "$p is a non-opaque struct" "$i" 4189*906afcb8SAndy Fiddaman esac 4190*906afcb8SAndy Fiddaman ;; 4191*906afcb8SAndy Fiddaman nop) ;; 4192*906afcb8SAndy Fiddaman npt) is npt $v 4193*906afcb8SAndy Fiddaman copy $tmp.c " 4194*906afcb8SAndy Fiddaman$tst 4195*906afcb8SAndy Fiddaman$ext 4196*906afcb8SAndy Fiddaman$std 4197*906afcb8SAndy Fiddaman$usr 4198*906afcb8SAndy Fiddaman$pre 4199*906afcb8SAndy Fiddaman$inc 4200*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 4201*906afcb8SAndy Fiddamanstruct _iffe_struct { int _iffe_member; }; 4202*906afcb8SAndy Fiddaman#if _STD_ 4203*906afcb8SAndy Fiddamanextern struct _iffe_struct* $v(struct _iffe_struct*); 4204*906afcb8SAndy Fiddaman#else 4205*906afcb8SAndy Fiddamanextern struct _iffe_struct* $v(); 4206*906afcb8SAndy Fiddaman#endif 4207*906afcb8SAndy Fiddaman_END_EXTERNS_ 4208*906afcb8SAndy Fiddaman" 4209*906afcb8SAndy Fiddaman # some compilers with -O only warn for invalid intrinsic prototypes 4210*906afcb8SAndy Fiddaman case " $cc " in 4211*906afcb8SAndy Fiddaman *" -O "*) xx=`echo $cc | sed 's/ -O / /g'` ;; 4212*906afcb8SAndy Fiddaman *) xx=$cc ;; 4213*906afcb8SAndy Fiddaman esac 4214*906afcb8SAndy Fiddaman compile $xx -c $tmp.c <&$nullin >&$nullout 4215*906afcb8SAndy Fiddaman report -$config $? 1 "$v() needs a prototype" "$v() does not need a prototype" 4216*906afcb8SAndy Fiddaman ;; 4217*906afcb8SAndy Fiddaman num) is num $v 4218*906afcb8SAndy Fiddaman copy $tmp.c " 4219*906afcb8SAndy Fiddaman$tst 4220*906afcb8SAndy Fiddaman$ext 4221*906afcb8SAndy Fiddaman$std 4222*906afcb8SAndy Fiddaman$usr 4223*906afcb8SAndy Fiddaman$pre 4224*906afcb8SAndy Fiddaman$inc 4225*906afcb8SAndy Fiddaman_BEGIN_EXTERNS_ 4226*906afcb8SAndy Fiddamanint _iffe_int = $v / 2; 4227*906afcb8SAndy Fiddaman_END_EXTERNS_ 4228*906afcb8SAndy Fiddaman" 4229*906afcb8SAndy Fiddaman compile $cc -c $tmp.c <&$nullin >&$nullout 4230*906afcb8SAndy Fiddaman report $? 1 "$v is a numeric constant" "$v is not a numeric constant" 4231*906afcb8SAndy Fiddaman ;; 4232*906afcb8SAndy Fiddaman one) for i in $a $hdr 4233*906afcb8SAndy Fiddaman do x="#include <$i>" 4234*906afcb8SAndy Fiddaman case " $gothdr " in 4235*906afcb8SAndy Fiddaman *" - $i "*) 4236*906afcb8SAndy Fiddaman continue 4237*906afcb8SAndy Fiddaman ;; 4238*906afcb8SAndy Fiddaman *" + $i "*) 4239*906afcb8SAndy Fiddaman ;; 4240*906afcb8SAndy Fiddaman *) echo "$x" > $tmp.c 4241*906afcb8SAndy Fiddaman if is_hdr $x 4242*906afcb8SAndy Fiddaman then gothdr="$gothdr + $x" 4243*906afcb8SAndy Fiddaman else gothdr="$gothdr - $x" 4244*906afcb8SAndy Fiddaman continue 4245*906afcb8SAndy Fiddaman fi 4246*906afcb8SAndy Fiddaman ;; 4247*906afcb8SAndy Fiddaman esac 4248*906afcb8SAndy Fiddaman case $one in 4249*906afcb8SAndy Fiddaman "") one=$x 4250*906afcb8SAndy Fiddaman ;; 4251*906afcb8SAndy Fiddaman *"$x"*) break 4252*906afcb8SAndy Fiddaman ;; 4253*906afcb8SAndy Fiddaman *) echo "$one" > $tmp.c 4254*906afcb8SAndy Fiddaman if compile $cc -E $tmp.c <&$nullin >$tmp.i 4255*906afcb8SAndy Fiddaman then c=$i 4256*906afcb8SAndy Fiddaman case $c in 4257*906afcb8SAndy Fiddaman *[\\/]*) c=`echo $c | sed 's,[\\\\/],[\\\\/],g'` ;; 4258*906afcb8SAndy Fiddaman esac 4259*906afcb8SAndy Fiddaman case `sed -e '/^#[line ]*1[ ][ ]*"[\\\\\/].*[\\\\\/]'$c'"/!d' $tmp.i` in 4260*906afcb8SAndy Fiddaman ?*) break ;; 4261*906afcb8SAndy Fiddaman esac 4262*906afcb8SAndy Fiddaman fi 4263*906afcb8SAndy Fiddaman one="$one$nl$x" 4264*906afcb8SAndy Fiddaman ;; 4265*906afcb8SAndy Fiddaman esac 4266*906afcb8SAndy Fiddaman echo "$x" 4267*906afcb8SAndy Fiddaman break 4268*906afcb8SAndy Fiddaman done 4269*906afcb8SAndy Fiddaman ;; 4270*906afcb8SAndy Fiddaman opt) M=$m 4271*906afcb8SAndy Fiddaman is opt $a 4272*906afcb8SAndy Fiddaman case " $PACKAGE_OPTIONS " in 4273*906afcb8SAndy Fiddaman *" $a "*) c=0 ;; 4274*906afcb8SAndy Fiddaman *) c=1 ;; 4275*906afcb8SAndy Fiddaman esac 4276*906afcb8SAndy Fiddaman report $c 1 "$a is set in \$PACKAGE_OPTIONS" "$a is not set in \$PACKAGE_OPTIONS" 4277*906afcb8SAndy Fiddaman ;; 4278*906afcb8SAndy Fiddaman out|output) 4279*906afcb8SAndy Fiddaman ;; 4280*906afcb8SAndy Fiddaman pth) is pth $a 4281*906afcb8SAndy Fiddaman pkg $pth 4282*906afcb8SAndy Fiddaman tab=" " 4283*906afcb8SAndy Fiddaman e= 4284*906afcb8SAndy Fiddaman f= 4285*906afcb8SAndy Fiddaman for i in $pth 4286*906afcb8SAndy Fiddaman do case $i in 4287*906afcb8SAndy Fiddaman '{') e="${nl}}" 4288*906afcb8SAndy Fiddaman l= 4289*906afcb8SAndy Fiddaman x=i 4290*906afcb8SAndy Fiddaman v="\$${x}" 4291*906afcb8SAndy Fiddaman t=${nl}${tab} 4292*906afcb8SAndy Fiddaman b="fnd()${nl}{${t}for ${x} in" 4293*906afcb8SAndy Fiddaman ;; 4294*906afcb8SAndy Fiddaman '}') b="${b}${t}do${tab}if $exists ${v}/\${1}${t}${tab}${tab}then${tab}f=${v}/\${1}${t}${tab}${tab}${tab}return${t}${tab}${tab}fi" 4295*906afcb8SAndy Fiddaman e="${t}done${e}" 4296*906afcb8SAndy Fiddaman eval "${b}${e}" 4297*906afcb8SAndy Fiddaman fnd $a 4298*906afcb8SAndy Fiddaman case $f in 4299*906afcb8SAndy Fiddaman ?*) break ;; 4300*906afcb8SAndy Fiddaman esac 4301*906afcb8SAndy Fiddaman ;; 4302*906afcb8SAndy Fiddaman -) b="${b}${t}do${tab}test \"${v}\" = '' -o -d \"${v}\" &&${t}${tab}${tab}" 4303*906afcb8SAndy Fiddaman x=${x}i 4304*906afcb8SAndy Fiddaman v="${v}\$${x}" 4305*906afcb8SAndy Fiddaman b="${b}for ${x} in" 4306*906afcb8SAndy Fiddaman e="${t}done${e}" 4307*906afcb8SAndy Fiddaman t="${t}${tab}${tab}" 4308*906afcb8SAndy Fiddaman ;; 4309*906afcb8SAndy Fiddaman *) case $e in 4310*906afcb8SAndy Fiddaman '') if $exists ${i}/${a} 4311*906afcb8SAndy Fiddaman then f=${i}/${a} 4312*906afcb8SAndy Fiddaman break 4313*906afcb8SAndy Fiddaman fi 4314*906afcb8SAndy Fiddaman ;; 4315*906afcb8SAndy Fiddaman *) case $i in 4316*906afcb8SAndy Fiddaman /|.) b="${b} ''" ;; 4317*906afcb8SAndy Fiddaman *) b="${b} /${i}" ;; 4318*906afcb8SAndy Fiddaman esac 4319*906afcb8SAndy Fiddaman ;; 4320*906afcb8SAndy Fiddaman esac 4321*906afcb8SAndy Fiddaman ;; 4322*906afcb8SAndy Fiddaman esac 4323*906afcb8SAndy Fiddaman done 4324*906afcb8SAndy Fiddaman case $f in 4325*906afcb8SAndy Fiddaman '') case $set in 4326*906afcb8SAndy Fiddaman ' ') f=$a ;; 4327*906afcb8SAndy Fiddaman ?*) f=$set ;; 4328*906afcb8SAndy Fiddaman esac 4329*906afcb8SAndy Fiddaman ;; 4330*906afcb8SAndy Fiddaman esac 4331*906afcb8SAndy Fiddaman case $f in 4332*906afcb8SAndy Fiddaman '') c=1 4333*906afcb8SAndy Fiddaman ;; 4334*906afcb8SAndy Fiddaman *) c=0 4335*906afcb8SAndy Fiddaman f="\"$f\"" 4336*906afcb8SAndy Fiddaman ;; 4337*906afcb8SAndy Fiddaman esac 4338*906afcb8SAndy Fiddaman report $c "$f" "${note:-$a path}" "$a path not found" 4339*906afcb8SAndy Fiddaman ;; 4340*906afcb8SAndy Fiddaman run) is run $a 4341*906afcb8SAndy Fiddaman if test ! -r $a 4342*906afcb8SAndy Fiddaman then failure not found 4343*906afcb8SAndy Fiddaman case $verbose in 4344*906afcb8SAndy Fiddaman 0) echo "$command: $file$line: $a: not found" >&$stderr ;; 4345*906afcb8SAndy Fiddaman esac 4346*906afcb8SAndy Fiddaman exit 1 4347*906afcb8SAndy Fiddaman fi 4348*906afcb8SAndy Fiddaman noisy 4349*906afcb8SAndy Fiddaman case $a in 4350*906afcb8SAndy Fiddaman *.c) rm -f $tmp.exe 4351*906afcb8SAndy Fiddaman { 4352*906afcb8SAndy Fiddaman echo "$tst 4353*906afcb8SAndy Fiddaman$ext 4354*906afcb8SAndy Fiddaman$std 4355*906afcb8SAndy Fiddaman$usr 4356*906afcb8SAndy Fiddaman$inc" 4357*906afcb8SAndy Fiddaman cat $a 4358*906afcb8SAndy Fiddaman } > $tmp.c 4359*906afcb8SAndy Fiddaman compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$stderr 2>&$stderr && 4360*906afcb8SAndy Fiddaman $executable $tmp.exe && 4361*906afcb8SAndy Fiddaman execute $tmp.exe $opt <&$nullin 4362*906afcb8SAndy Fiddaman ;; 4363*906afcb8SAndy Fiddaman *.sh) { 4364*906afcb8SAndy Fiddaman copy - ": 4365*906afcb8SAndy Fiddamanset \"cc='$cc' executable='$executable' id='$m' static='$static' tmp='$tmp'\" $opt $hdr $test" 4366*906afcb8SAndy Fiddaman cat $a 4367*906afcb8SAndy Fiddaman } > $tmp.sh 4368*906afcb8SAndy Fiddaman chmod +x $tmp.sh 4369*906afcb8SAndy Fiddaman ( . $tmp.sh ) <&$nullin 4370*906afcb8SAndy Fiddaman ;; 4371*906afcb8SAndy Fiddaman *) false 4372*906afcb8SAndy Fiddaman ;; 4373*906afcb8SAndy Fiddaman esac 4374*906afcb8SAndy Fiddaman case $? in 4375*906afcb8SAndy Fiddaman 0) success 4376*906afcb8SAndy Fiddaman ;; 4377*906afcb8SAndy Fiddaman *) failure cannot run 4378*906afcb8SAndy Fiddaman case $verbose in 4379*906afcb8SAndy Fiddaman 0) echo "$command: $file$line: $a: cannot run" >&$stderr ;; 4380*906afcb8SAndy Fiddaman esac 4381*906afcb8SAndy Fiddaman exit 1 4382*906afcb8SAndy Fiddaman ;; 4383*906afcb8SAndy Fiddaman esac 4384*906afcb8SAndy Fiddaman ;; 4385*906afcb8SAndy Fiddaman siz) case $p in 4386*906afcb8SAndy Fiddaman "") x= ;; 4387*906afcb8SAndy Fiddaman *) x="$p " ;; 4388*906afcb8SAndy Fiddaman esac 4389*906afcb8SAndy Fiddaman is siz "$x$v" 4390*906afcb8SAndy Fiddaman { 4391*906afcb8SAndy Fiddaman case $p:$v in 4392*906afcb8SAndy Fiddaman long:*|*:*[_0123456789]int[_0123456789]*) 4393*906afcb8SAndy Fiddaman echo "$pre 4394*906afcb8SAndy Fiddaman$tst 4395*906afcb8SAndy Fiddaman$ext 4396*906afcb8SAndy Fiddaman$inc 4397*906afcb8SAndy Fiddamanstatic $x$v i; 4398*906afcb8SAndy Fiddaman$x$v f() { 4399*906afcb8SAndy Fiddaman$x$v v; i = 1; v = i;" 4400*906afcb8SAndy Fiddaman echo "i = v * i; i = i / v; v = v + i; i = i - v;" 4401*906afcb8SAndy Fiddaman case $v in 4402*906afcb8SAndy Fiddaman float|double) ;; 4403*906afcb8SAndy Fiddaman *) echo "v <<= 4; i = v >> 2; i = 10; i = v % i; i |= v; v ^= i; i = 123; v &= i;" ;; 4404*906afcb8SAndy Fiddaman esac 4405*906afcb8SAndy Fiddaman echo "return v; }" 4406*906afcb8SAndy Fiddaman ;; 4407*906afcb8SAndy Fiddaman *) echo "$pre 4408*906afcb8SAndy Fiddaman$inc 4409*906afcb8SAndy Fiddamanstruct xxx { $x$v mem; }; 4410*906afcb8SAndy Fiddamanstatic struct xxx v; 4411*906afcb8SAndy Fiddamanstruct xxx* f() { return &v; }" 4412*906afcb8SAndy Fiddaman ;; 4413*906afcb8SAndy Fiddaman esac 4414*906afcb8SAndy Fiddaman case $x in 4415*906afcb8SAndy Fiddaman ""|"struct "|"union ") 4416*906afcb8SAndy Fiddaman echo "int g() { return 0; }" 4417*906afcb8SAndy Fiddaman ;; 4418*906afcb8SAndy Fiddaman *) echo "int g() { return sizeof($x$v)<=sizeof($v); }" ;; 4419*906afcb8SAndy Fiddaman esac 4420*906afcb8SAndy Fiddaman copy - " 4421*906afcb8SAndy Fiddamanint main() { 4422*906afcb8SAndy Fiddaman f(); 4423*906afcb8SAndy Fiddaman g(); 4424*906afcb8SAndy Fiddaman printf(\"%u\\n\", sizeof($x$v)); 4425*906afcb8SAndy Fiddaman return 0; 4426*906afcb8SAndy Fiddaman}" 4427*906afcb8SAndy Fiddaman } > $tmp.c 4428*906afcb8SAndy Fiddaman rm -f $tmp.exe $tmp.dat 4429*906afcb8SAndy Fiddaman if compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout && 4430*906afcb8SAndy Fiddaman $executable $tmp.exe && 4431*906afcb8SAndy Fiddaman execute $tmp.exe > $tmp.dat 4432*906afcb8SAndy Fiddaman then z=`cat $tmp.dat` 4433*906afcb8SAndy Fiddaman c=0 4434*906afcb8SAndy Fiddaman else z=0 4435*906afcb8SAndy Fiddaman c=1 4436*906afcb8SAndy Fiddaman fi 4437*906afcb8SAndy Fiddaman report $c "$z" "sizeof($x$v)" "$x$v not a type with known size" 4438*906afcb8SAndy Fiddaman ;; 4439*906afcb8SAndy Fiddaman sym) case $test in 4440*906afcb8SAndy Fiddaman "") x=$v ;; 4441*906afcb8SAndy Fiddaman *) x=$test ;; 4442*906afcb8SAndy Fiddaman esac 4443*906afcb8SAndy Fiddaman echo "$pre 4444*906afcb8SAndy Fiddaman$tst 4445*906afcb8SAndy Fiddaman$ext 4446*906afcb8SAndy Fiddaman$inc 4447*906afcb8SAndy Fiddaman'=' $x '='" > $tmp.c 4448*906afcb8SAndy Fiddaman compile $cc -E $tmp.c <&$nullin \ 4449*906afcb8SAndy Fiddaman | sed \ 4450*906afcb8SAndy Fiddaman -e "/'='/!d" \ 4451*906afcb8SAndy Fiddaman -e "s/'='//g" \ 4452*906afcb8SAndy Fiddaman -e 's/[ ]//g' \ 4453*906afcb8SAndy Fiddaman -e 's/((([^()]*)))->/->/g' \ 4454*906afcb8SAndy Fiddaman -e 's/(([^()]*))->/->/g' \ 4455*906afcb8SAndy Fiddaman -e 's/([^()]*)->/->/g' \ 4456*906afcb8SAndy Fiddaman -e 's/\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\)\[/\ 4457*906afcb8SAndy Fiddamanary \1[/g' \ 4458*906afcb8SAndy Fiddaman -e 's/\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\)(/\ 4459*906afcb8SAndy Fiddamanfun \1[/g' \ 4460*906afcb8SAndy Fiddaman -e 's/\*->\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]\)/->\ 4461*906afcb8SAndy Fiddamanptr \1/g' \ 4462*906afcb8SAndy Fiddaman -e 's/->\([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_]\)/->\ 4463*906afcb8SAndy Fiddamanreg \1/g' \ 4464*906afcb8SAndy Fiddaman -e "/^$v\$/d" \ 4465*906afcb8SAndy Fiddaman -e 's/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*$/\ 4466*906afcb8SAndy Fiddamannam &/g' \ 4467*906afcb8SAndy Fiddaman | sed \ 4468*906afcb8SAndy Fiddaman -e '/^... /!d' \ 4469*906afcb8SAndy Fiddaman | LC_ALL=C sort \ 4470*906afcb8SAndy Fiddaman -u \ 4471*906afcb8SAndy Fiddaman | sed \ 4472*906afcb8SAndy Fiddaman -e 's/\(...\) \([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*\).*/#ifndef _\1_'$v'\ 4473*906afcb8SAndy Fiddaman#define _\1_'$v' \2\ 4474*906afcb8SAndy Fiddaman#define _\1_'$v'_str "\2"\ 4475*906afcb8SAndy Fiddaman#endif/' 4476*906afcb8SAndy Fiddaman ;; 4477*906afcb8SAndy Fiddaman typ) case $p in 4478*906afcb8SAndy Fiddaman "") x= ;; 4479*906afcb8SAndy Fiddaman *) x="$p " ;; 4480*906afcb8SAndy Fiddaman esac 4481*906afcb8SAndy Fiddaman is typ "$x$v" 4482*906afcb8SAndy Fiddaman { 4483*906afcb8SAndy Fiddaman case $p:$v in 4484*906afcb8SAndy Fiddaman long:*|*:*[_0123456789]int[_0123456789]*) 4485*906afcb8SAndy Fiddaman echo "$pre 4486*906afcb8SAndy Fiddaman$tst 4487*906afcb8SAndy Fiddaman$ext 4488*906afcb8SAndy Fiddaman$inc 4489*906afcb8SAndy Fiddamanstatic $x$v i; 4490*906afcb8SAndy Fiddaman$x$v f() { 4491*906afcb8SAndy Fiddaman$x$v v; i = 1; v = i;" 4492*906afcb8SAndy Fiddaman echo "i = v * i; i = i / v; v = v + i; i = i - v;" 4493*906afcb8SAndy Fiddaman case $v in 4494*906afcb8SAndy Fiddaman float|double) ;; 4495*906afcb8SAndy Fiddaman *) echo "v <<= 4; i = v >> 2; i = 10; i = v % i; i |= v; v ^= i; i = 123; v &= i;" ;; 4496*906afcb8SAndy Fiddaman esac 4497*906afcb8SAndy Fiddaman echo "return v; }" 4498*906afcb8SAndy Fiddaman ;; 4499*906afcb8SAndy Fiddaman *) echo "$pre 4500*906afcb8SAndy Fiddaman$tst 4501*906afcb8SAndy Fiddaman$ext 4502*906afcb8SAndy Fiddaman$inc 4503*906afcb8SAndy Fiddamanstruct xxx { $x$v mem; }; 4504*906afcb8SAndy Fiddamanstatic struct xxx v; 4505*906afcb8SAndy Fiddamanstruct xxx* f() { return &v; }" 4506*906afcb8SAndy Fiddaman ;; 4507*906afcb8SAndy Fiddaman esac 4508*906afcb8SAndy Fiddaman case $x in 4509*906afcb8SAndy Fiddaman ""|"struct "|"union ") 4510*906afcb8SAndy Fiddaman echo "int main() { f(); return 0; }" ;; 4511*906afcb8SAndy Fiddaman *) echo "int main() { f(); return sizeof($x$v)<=sizeof($v); }" ;; 4512*906afcb8SAndy Fiddaman esac 4513*906afcb8SAndy Fiddaman } > $tmp.c 4514*906afcb8SAndy Fiddaman rm -f $tmp.exe 4515*906afcb8SAndy Fiddaman compile $cc -o $tmp.exe $tmp.c $lib $deflib <&$nullin >&$nullout && 4516*906afcb8SAndy Fiddaman $executable $tmp.exe && 4517*906afcb8SAndy Fiddaman execute $tmp.exe 4518*906afcb8SAndy Fiddaman report $? 1 "$x$v is a type" "$x$v is not a type" "default for type $x$v" 4519*906afcb8SAndy Fiddaman ;; 4520*906afcb8SAndy Fiddaman val) case $arg in 4521*906afcb8SAndy Fiddaman '"'*'"')echo $arg=\'$val\' ;; 4522*906afcb8SAndy Fiddaman *) echo $arg=\"$val\" ;; 4523*906afcb8SAndy Fiddaman esac 4524*906afcb8SAndy Fiddaman ;; 4525*906afcb8SAndy Fiddaman ver) ;; 4526*906afcb8SAndy Fiddaman 0) result=FAILURE 4527*906afcb8SAndy Fiddaman ;; 4528*906afcb8SAndy Fiddaman 1) result=SUCCESS 4529*906afcb8SAndy Fiddaman ;; 4530*906afcb8SAndy Fiddaman :) ;; 4531*906afcb8SAndy Fiddaman -) ;; 4532*906afcb8SAndy Fiddaman *) echo "$command: $file$line: $o: unknown feature test" >&$stderr 4533*906afcb8SAndy Fiddaman status=1 4534*906afcb8SAndy Fiddaman ;; 4535*906afcb8SAndy Fiddaman esac 4536*906afcb8SAndy Fiddaman done 4537*906afcb8SAndy Fiddaman done 4538*906afcb8SAndy Fiddaman case $not in 4539*906afcb8SAndy Fiddaman 1) case $result in 4540*906afcb8SAndy Fiddaman FAILURE) result=SUCCESS ;; 4541*906afcb8SAndy Fiddaman *) result=FAILURE ;; 4542*906afcb8SAndy Fiddaman esac 4543*906afcb8SAndy Fiddaman ;; 4544*906afcb8SAndy Fiddaman esac 4545*906afcb8SAndy Fiddaman case $result in 4546*906afcb8SAndy Fiddaman FAILURE) user_pf=$fail user_yn=$no ;; 4547*906afcb8SAndy Fiddaman *) user_pf=$pass user_yn=$yes ;; 4548*906afcb8SAndy Fiddaman esac 4549*906afcb8SAndy Fiddaman case $user_pf in 4550*906afcb8SAndy Fiddaman ?*) eval "$user_pf" <&$nullin ;; 4551*906afcb8SAndy Fiddaman esac 4552*906afcb8SAndy Fiddaman case $user_yn in 4553*906afcb8SAndy Fiddaman ?*) case $def in 4554*906afcb8SAndy Fiddaman -) ;; 4555*906afcb8SAndy Fiddaman *) case $note in 4556*906afcb8SAndy Fiddaman ?*) case $user_yn in 4557*906afcb8SAndy Fiddaman *$nl*) user_yn="/* $note */$nl$user_yn" ;; 4558*906afcb8SAndy Fiddaman *) user_yn="$user_yn /* $note */" ;; 4559*906afcb8SAndy Fiddaman esac 4560*906afcb8SAndy Fiddaman ;; 4561*906afcb8SAndy Fiddaman esac 4562*906afcb8SAndy Fiddaman ;; 4563*906afcb8SAndy Fiddaman esac 4564*906afcb8SAndy Fiddaman copy - "$user_yn" 4565*906afcb8SAndy Fiddaman ;; 4566*906afcb8SAndy Fiddaman esac 4567*906afcb8SAndy Fiddaman case $ifelse:$result in 4568*906afcb8SAndy Fiddaman TEST:SUCCESS) ifelse=KEEP ;; 4569*906afcb8SAndy Fiddaman TEST:*) ifelse=SKIP ;; 4570*906afcb8SAndy Fiddaman esac 4571*906afcb8SAndy Fiddaman case $group:$result in 4572*906afcb8SAndy Fiddaman :*|*:SUCCESS) break ;; 4573*906afcb8SAndy Fiddaman esac 4574*906afcb8SAndy Fiddaman set '' $groups '' "$@" 4575*906afcb8SAndy Fiddaman shift 4576*906afcb8SAndy Fiddaman case $1 in 4577*906afcb8SAndy Fiddaman '') shift; break ;; 4578*906afcb8SAndy Fiddaman esac 4579*906afcb8SAndy Fiddaman shift 4580*906afcb8SAndy Fiddaman 4581*906afcb8SAndy Fiddaman # set up and try the next group 4582*906afcb8SAndy Fiddaman 4583*906afcb8SAndy Fiddaman hdr=$com_hdr 4584*906afcb8SAndy Fiddaman lib=$com_lib 4585*906afcb8SAndy Fiddaman mac=$com_mac 4586*906afcb8SAndy Fiddaman opt=$com_opt 4587*906afcb8SAndy Fiddaman pth=$com_pth 4588*906afcb8SAndy Fiddaman test=$com_test 4589*906afcb8SAndy Fiddaman cc="$occ $includes" 4590*906afcb8SAndy Fiddaman group= 4591*906afcb8SAndy Fiddaman groups= 4592*906afcb8SAndy Fiddaman while : 4593*906afcb8SAndy Fiddaman do case $1 in 4594*906afcb8SAndy Fiddaman '') shift; break ;; 4595*906afcb8SAndy Fiddaman esac 4596*906afcb8SAndy Fiddaman case $1 in 4597*906afcb8SAndy Fiddaman *[\"\'\(\)\{\}\ \ ]*) 4598*906afcb8SAndy Fiddaman case $op in 4599*906afcb8SAndy Fiddaman pth) pth="$pth $1" 4600*906afcb8SAndy Fiddaman ;; 4601*906afcb8SAndy Fiddaman *) case $test in 4602*906afcb8SAndy Fiddaman '') test=$1 ;; 4603*906afcb8SAndy Fiddaman *) test="$test $1" ;; 4604*906afcb8SAndy Fiddaman esac 4605*906afcb8SAndy Fiddaman ;; 4606*906afcb8SAndy Fiddaman esac 4607*906afcb8SAndy Fiddaman ;; 4608*906afcb8SAndy Fiddaman -) group=$group$1 4609*906afcb8SAndy Fiddaman groups="$groups $1" 4610*906afcb8SAndy Fiddaman ;; 4611*906afcb8SAndy Fiddaman -l*) case $group in 4612*906afcb8SAndy Fiddaman -*) groups="$groups $1" ;; 4613*906afcb8SAndy Fiddaman *) lib="$lib $1" ;; 4614*906afcb8SAndy Fiddaman esac 4615*906afcb8SAndy Fiddaman ;; 4616*906afcb8SAndy Fiddaman +l*) case $shell in 4617*906afcb8SAndy Fiddaman bsh) x=`echo X$1 | sed 's/X+/-/'` ;; 4618*906afcb8SAndy Fiddaman *) eval 'x=-${1#+}' ;; 4619*906afcb8SAndy Fiddaman esac 4620*906afcb8SAndy Fiddaman case $group in 4621*906afcb8SAndy Fiddaman -*) groups="$groups $x" ;; 4622*906afcb8SAndy Fiddaman *) lib="$lib $x" ;; 4623*906afcb8SAndy Fiddaman esac 4624*906afcb8SAndy Fiddaman ;; 4625*906afcb8SAndy Fiddaman -*|+*) case $group in 4626*906afcb8SAndy Fiddaman -*) groups="$groups $1" 4627*906afcb8SAndy Fiddaman ;; 4628*906afcb8SAndy Fiddaman *) case $op in 4629*906afcb8SAndy Fiddaman run) opt="$opt $1" 4630*906afcb8SAndy Fiddaman ;; 4631*906afcb8SAndy Fiddaman *) case $1 in 4632*906afcb8SAndy Fiddaman -D*) mac="$mac $1" ;; 4633*906afcb8SAndy Fiddaman *) cc="$cc $1" ;; 4634*906afcb8SAndy Fiddaman esac 4635*906afcb8SAndy Fiddaman ;; 4636*906afcb8SAndy Fiddaman esac 4637*906afcb8SAndy Fiddaman ;; 4638*906afcb8SAndy Fiddaman esac 4639*906afcb8SAndy Fiddaman ;; 4640*906afcb8SAndy Fiddaman *.[aAxX]|*.[dD][lL][lL]|*.[lL][iI][bB]) 4641*906afcb8SAndy Fiddaman case $group in 4642*906afcb8SAndy Fiddaman -*) groups="$groups $1" ;; 4643*906afcb8SAndy Fiddaman *) lib="$lib $1" ;; 4644*906afcb8SAndy Fiddaman esac 4645*906afcb8SAndy Fiddaman ;; 4646*906afcb8SAndy Fiddaman *[.\\/]*) 4647*906afcb8SAndy Fiddaman case $group in 4648*906afcb8SAndy Fiddaman -*) groups="$groups $1" 4649*906afcb8SAndy Fiddaman ;; 4650*906afcb8SAndy Fiddaman *) case $op in 4651*906afcb8SAndy Fiddaman pth) pth="$pth $1" ;; 4652*906afcb8SAndy Fiddaman *) hdr="$hdr $1" ;; 4653*906afcb8SAndy Fiddaman esac 4654*906afcb8SAndy Fiddaman ;; 4655*906afcb8SAndy Fiddaman esac 4656*906afcb8SAndy Fiddaman ;; 4657*906afcb8SAndy Fiddaman *) case $group in 4658*906afcb8SAndy Fiddaman -*) groups="$groups $1" 4659*906afcb8SAndy Fiddaman ;; 4660*906afcb8SAndy Fiddaman *) case $op in 4661*906afcb8SAndy Fiddaman pth) pth="$pth $1" 4662*906afcb8SAndy Fiddaman ;; 4663*906afcb8SAndy Fiddaman *) case $test in 4664*906afcb8SAndy Fiddaman '') test=$1 ;; 4665*906afcb8SAndy Fiddaman *) test="$test $1" ;; 4666*906afcb8SAndy Fiddaman esac 4667*906afcb8SAndy Fiddaman ;; 4668*906afcb8SAndy Fiddaman esac 4669*906afcb8SAndy Fiddaman ;; 4670*906afcb8SAndy Fiddaman esac 4671*906afcb8SAndy Fiddaman ;; 4672*906afcb8SAndy Fiddaman esac 4673*906afcb8SAndy Fiddaman shift 4674*906afcb8SAndy Fiddaman done 4675*906afcb8SAndy Fiddaman done 4676*906afcb8SAndy Fiddamandone 4677