X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Configure;h=1fe5fe3b124d3602e90181dfa00b2897f30e9caf;hb=21d892ea46b4eaa5d8ae1c8cd325d9940deef5b3;hp=d32c30524744e60683ddfa0433c4b6ef9ed286fa;hpb=a1cc2bdc08f9aa1504f32e5b0b782c2b3cffd124;p=p5sagit%2Fp5-mst-13.2.git diff --git a/Configure b/Configure index d32c305..1fe5fe3 100755 --- a/Configure +++ b/Configure @@ -8,14 +8,23 @@ # and edit it to reflect your system. Some packages may include samples # of config.h for certain machines, so you might look for one of those.) # -# $Header: Configure,v 1.0.1.3 88/01/26 14:14:14 root Exp $ +# $Header: Configure,v 3.0.1.7 90/03/28 09:14:53 lwall Locked $ + +: make sure these files are renamed +test -f config_h.SH || mv -f config.h.SH config_h.SH +test -f perl_man.1 || mv -f perl.man.1 perl_man.1 +test -f perl_man.2 || mv -f perl.man.2 perl_man.2 +test -f perl_man.3 || mv -f perl.man.3 perl_man.3 +test -f perl_man.4 || mv -f perl.man.4 perl_man.4 +test -f t/op.s || mv -f t/op.subst t/op.s + # # Yes, you may rip this off to use in other distribution packages. # (Note: this Configure script was generated automatically. Rather than # working with this copy of Configure, you may wish to get metaconfig.) : sanity checks -PATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc' +PATH=".:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc:/usr/new:/usr/new/bin:/usr/nbin:$PATH" export PATH || (echo "OOPS, this isn't sh. Desperation time. I will feed myself to sh."; sh $0; kill $$) if test ! -t 0; then @@ -34,9 +43,13 @@ if test ! -d ../UU; then cd UU fi +case "$1" in +-d) shift; fastread='yes';; +esac + d_eunice='' -eunicefix='' define='' +eunicefix='' loclist='' expr='' sed='' @@ -61,24 +74,123 @@ Mcc='' vi='' mailx='' mail='' +cpp='' +perl='' +emacs='' +ls='' +rmail='' +sendmail='' +shar='' +smail='' +tbl='' +troff='' +nroff='' +uname='' +uuname='' +line='' +chgrp='' +chmod='' +lint='' +sleep='' +pr='' +tar='' +ln='' +lpr='' +lp='' +touch='' +make='' +date='' +csh='' Log='' Header='' bin='' -cc='' +byteorder='' contains='' -cpp='' +cppstdin='' cppminus='' +d_bcmp='' d_bcopy='' +d_bzero='' +d_castneg='' d_charsprf='' +d_crypt='' +cryptlib='' +d_csh='' +d_dosuid='' +d_dup2='' +d_fchmod='' +d_fchown='' +d_fcntl='' +d_flock='' +d_getgrps='' +d_gethent='' +d_getpgrp='' +d_getpgrp2='' +d_getprior='' +d_htonl='' d_index='' +d_ioctl='' +d_killpg='' +d_lstat='' +d_memcmp='' +d_memcpy='' +d_mkdir='' +d_ndbm='' +d_odbm='' +d_readdir='' +d_rename='' +d_rmdir='' +d_setegid='' +d_seteuid='' +d_setpgrp='' +d_setpgrp2='' +d_setprior='' +d_setregid='' +d_setresgid='' +d_setreuid='' +d_setresuid='' +d_setrgid='' +d_setruid='' +d_socket='' +d_sockpair='' +d_oldsock='' +socketlib='' d_statblks='' d_stdstdio='' d_strctcpy='' -d_tminsys='' +d_strerror='' +d_symlink='' +d_syscall='' +d_varargs='' d_vfork='' d_voidsig='' +d_volatile='' +d_vprintf='' +d_charvspr='' +d_wait4='' +gidtype='' +i_dirent='' +d_dirnamlen='' +i_fcntl='' +i_grp='' +i_niin='' +i_pwd='' +d_pwquota='' +d_pwage='' +d_pwchange='' +d_pwclass='' +d_pwexpire='' +i_sysdir='' +i_sysioctl='' +i_sysndir='' +i_time='' +i_systime='' +d_systimekernel='' +i_utime='' +i_varargs='' +i_vfork='' +intsize='' libc='' -libnm='' mallocsrc='' mallocobj='' usemymalloc='' @@ -90,20 +202,29 @@ small='' medium='' large='' huge='' +optimize='' ccflags='' +cppflags='' ldflags='' +cc='' +libs='' n='' c='' package='' +randbits='' +sig_name='' spitshell='' shsharp='' sharpbang='' startsh='' stdchar='' +uidtype='' voidflags='' defvoidused='' +yacc='' +privlib='' +lib='' CONFIG='' - : set package name package=perl @@ -113,17 +234,41 @@ echo "Beginning of configuration questions for $package kit." echo " " define='define' -undef='/*undef' -libpth='/usr/lib /usr/local/lib /lib' +undef='undef' +: change the next line if compiling for Xenix/286 on Xenix/386 +xlibpth='/usr/lib/386 /lib/386' +libpth='/usr/lib /usr/local/lib /usr/lib/large /lib '$xlibpth' /lib/large /usr/lib/small /lib/small' smallmach='pdp11 i8086 z8000 i80286 iAPX286' rmlist='kit[1-9]isdone kit[1-9][0-9]isdone' trap 'echo " "; rm -f $rmlist; exit 1' 1 2 3 + +: We must find out about Eunice early +eunicefix=':' +if test -f /etc/unixtovms; then + eunicefix=/etc/unixtovms +fi +if test -f /etc/unixtovms.exe; then + eunicefix=/etc/unixtovms.exe +fi + +: Now test for existence of everything in MANIFEST + +echo "First let's make sure your kit is complete. Checking..." +(cd ..; awk '' `awk '$1 !~ /PACKINGLIST/ {print $1}' MANIFEST` >/dev/null || kill $$) +echo "Looks good..." + attrlist="mc68000 sun gcos unix ibm gimpel interdata tss os mert pyr" attrlist="$attrlist vax pdp11 i8086 z8000 u3b2 u3b5 u3b20 u3b200" +attrlist="$attrlist hpux hp9000s300 hp9000s500 hp9000s800" attrlist="$attrlist ns32000 ns16000 iAPX286 mc300 mc500 mc700 sparc" -pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib" +attrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX" +attrlist="$attrlist $mc68k __STDC__ UTS M_I8086 M_I186 M_I286 M_I386" +attrlist="$attrlist i186 __m88k__ m88k DGUX __DGUX__" +pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb" +d_newshome="/usr/NeWS" defvoidused=7 - +libswanted="net_s net nsl_s nsl socket nm ndir ndbm dbm sun bsd BSD x c_s" +inclwanted='/usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan' : some greps do not return status, grrr. echo "grimblepritz" >grimble if grep blurfldyick grimble >/dev/null 2>&1 ; then @@ -142,9 +287,69 @@ contains*) cat >contains <<'EOSS' grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp EOSS -chmod 755 contains +chmod +x contains esac +: see if sh knows # comments +echo " " +echo "Checking your sh to see if it knows about # comments..." +if sh -c '#' >/dev/null 2>&1 ; then + echo "Your sh handles # comments correctly." + shsharp=true + spitshell=cat + echo " " + echo "Okay, let's see if #! works on this system..." + echo "#!/bin/echo hi" > try + $eunicefix try + chmod +x try + ./try > today + if $contains hi today >/dev/null 2>&1; then + echo "It does." + sharpbang='#!' + else + echo "#! /bin/echo hi" > try + $eunicefix try + chmod +x try + ./try > today + if test -s today; then + echo "It does." + sharpbang='#! ' + else + echo "It doesn't." + sharpbang=': use ' + fi + fi +else + echo "Your sh doesn't grok # comments--I will strip them later on." + shsharp=false + echo "exec grep -v '^#'" >spitshell + chmod +x spitshell + $eunicefix spitshell + spitshell=`pwd`/spitshell + echo "I presume that if # doesn't work, #! won't work either!" + sharpbang=': use ' +fi + +: figure out how to guarantee sh startup +echo " " +echo "Checking out how to guarantee sh startup..." +startsh=$sharpbang'/bin/sh' +echo "Let's see if '$startsh' works..." +cat >try <.echotmp @@ -165,7 +370,10 @@ rm -f .echotmp : now set up to do reads with possible shell escape and default assignment cat <myread -ans='!' +case "\$fastread" in +yes) ans=''; echo " " ;; +*) ans='!';; +esac while expr "X\$ans" : "X!" >/dev/null; do read ans case "\$ans" in @@ -271,6 +479,10 @@ for dir in \$*; do if test -f \$dir/\$thing; then echo \$dir/\$thing exit 0 + elif test -f \$dir/\$thing.exe; then + : on Eunice apparently + echo \$dir/\$thing + exit 0 fi ;; esac @@ -278,26 +490,28 @@ done echo \$dflt exit 1 EOSC -chmod 755 loc +chmod +x loc $eunicefix loc loclist=" -expr -sed -echo cat -rm -mv cp -tr +echo +expr +grep mkdir +mv +rm +sed sort +tr uniq -grep " trylist=" -test -egrep Mcc +cpp +csh +egrep +test " for file in $loclist; do xxx=`loc $file $file $pth` @@ -340,14 +554,10 @@ test) echo "Hopefully test is built into your sh." ;; /bin/test) - echo " " - dflt=n - rp="Is your "'"'"test"'"'" built into sh? [$dflt] (OK to guess)" - echo $n "$rp $c" - . myread - case "$ans" in - y*) test=test ;; - esac + if sh -c "PATH= test true" >/dev/null 2>&1; then + echo "Using the test built into your sh." + test=test + fi ;; *) test=test @@ -389,88 +599,173 @@ FOO esac rmlist="$rmlist loc" -: get list of predefined functions in a handy place -echo " " -if test -f /lib/libc.a; then - echo "Your C library is in /lib/libc.a. You're normal." - libc=/lib/libc.a -else - ans=`loc libc.a blurfl/dyick $libpth` - if test -f $ans; then - echo "Your C library is in $ans, of all places." - libc=ans +: set up shell script to do ~ expansion +cat >filexp <&2 + exit 1 + fi + case "\$1" in + */*) + echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\` + ;; + *) + echo \$dir + ;; + esac + fi + ;; +*) + echo \$1 + ;; +esac +EOSS +chmod +x filexp +$eunicefix filexp - $libpth +: determine where public executables go +case "$bin" in +'') + dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin` + ;; +*) dflt="$bin" + ;; +esac +cont=true +while $test "$cont" ; do + echo " " + rp="Where do you want to put the public executables? (~name ok) [$dflt]" + $echo $n "$rp $c" + . myread + bin="$ans" + bin=`./filexp "$bin"` + if test -d $bin; then + cont='' + else + case "$fastread" in + yes) dflt=y;; + *) dflt=n;; + esac + rp="Directory $bin doesn't exist. Use that name anyway? [$dflt]" + $echo $n "$rp $c" + . myread + dflt='' + case "$ans" in + y*) cont='';; + esac + fi +done -None of these seems to contain your C library. What is the full name +: determine where manual pages go +$cat < libc.list; then - echo "done" -else +case "$mansrc" in +'') + dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1 /usr/man/man.L` + ;; +*) dflt="$mansrc" + ;; +esac +cont=true +while $test "$cont" ; do echo " " - echo "The archiver doesn't think $libc is a reasonable library." - echo "Trying nm instead..." - if nm -g $libc > libc.list; then - echo "Done. Maybe this is Unicos, or an Apollo?" + rp="Where do the manual pages (source) go? (~name ok) [$dflt]" + $echo $n "$rp $c" + . myread + mansrc=`./filexp "$ans"` + if $test -d "$mansrc"; then + cont='' else - echo "That didn't work either. Giving up." - exit 1 + if $test "$fastread" = yes; then + dflt=y + else + dflt=n + fi + rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]" + $echo $n "$rp $c" + . myread + dflt='' + case "$ans" in + y*) cont='';; + esac fi -fi -rmlist="$rmlist libc.list" +done +case "$mansrc" in +*l) + manext=l + ;; +*n) + manext=n + ;; +*o) + manext=l + ;; +*p) + manext=p + ;; +*C) + manext=C + ;; +*L) + manext=L + ;; +*) + manext=1 + ;; +esac : make some quick guesses about what we are up against echo " " $echo $n "Hmm... $c" -if $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then - echo "Looks kind of like a BSD system, but we'll see..." - echo exit 0 >bsd - echo exit 1 >usg - echo exit 1 >v7 -elif $contains fcntl libc.list >/dev/null 2>&1 ; then +cat /usr/include/signal.h /usr/include/sys/signal.h >foo +if test `echo abc | tr a-z A-Z` = Abc ; then echo "Looks kind of like a USG system, but we'll see..." echo exit 1 >bsd echo exit 0 >usg echo exit 1 >v7 +elif $contains SIGTSTP foo >/dev/null 2>&1 ; then + echo "Looks kind of like a BSD system, but we'll see..." + echo exit 0 >bsd + echo exit 1 >usg + echo exit 1 >v7 else echo "Looks kind of like a version 7 system, but we'll see..." echo exit 1 >bsd echo exit 1 >usg echo exit 0 >v7 fi -if $contains vmssystem libc.list >/dev/null 2>&1 ; then +case "$eunicefix" in +*unixtovms*) cat <<'EOI' There is, however, a strange, musty smell in the air that reminds me of something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit. EOI echo "exit 0" >eunice - eunicefix=unixtovms d_eunice="$define" -: it so happens the Eunice I know will not run shell scripts in Unix format -else + ;; +*) echo " " echo "Congratulations. You aren't running Eunice." - eunicefix=':' d_eunice="$undef" echo "exit 1" >eunice -fi + ;; +esac if test -f /xenix; then echo "Actually, this looks more like a XENIX system..." echo "exit 0" >xenix @@ -479,7 +774,8 @@ else echo "It's not Xenix..." echo "exit 1" >xenix fi -chmod 755 xenix +chmod +x xenix +$eunicefix xenix if test -f /venix; then echo "Actually, this looks more like a VENIX system..." echo "exit 0" >venix @@ -492,69 +788,464 @@ else fi echo "exit 1" >venix fi -chmod 755 bsd usg v7 eunice venix xenix -$eunicefix bsd usg v7 eunice venix xenix +chmod +x bsd usg v7 eunice venix +$eunicefix bsd usg v7 eunice venix +rm -rf foo rmlist="$rmlist bsd usg v7 eunice venix xenix" -: see if sh knows # comments -echo " " -echo "Checking your sh to see if it knows about # comments..." -if sh -c '#' >/dev/null 2>&1 ; then - echo "Your sh handles # comments correctly." - shsharp=true - spitshell=cat - echo " " - echo "Okay, let's see if #! works on this system..." - echo "#!/bin/echo hi" > try - $eunicefix try - chmod 755 try - try > today - if test -s today; then - echo "It does." - sharpbang='#!' +: see what memory models we can support +case "$models" in +'') + : We may not use Cppsym or we get a circular dependency through cc. + : But this should work regardless of which cc we eventually use. + cat >pdp11.c <<'EOP' +main() { +#ifdef pdp11 + exit(0); +#else + exit(1); +#endif +} +EOP + cc -o pdp11 pdp11.c >/dev/null 2>&1 + if pdp11 2>/dev/null; then + dflt='unsplit split' else - echo "#! /bin/echo hi" > try - $eunicefix try - chmod 755 try - try > today - if test -s today; then - echo "It does." - sharpbang='#! ' + ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge` + case "$ans" in + X) dflt='none';; + *) if $test -d /lib/small || $test -d /usr/lib/small; then + dflt='small' + else + dflt='' + fi + if $test -d /lib/medium || $test -d /usr/lib/medium; then + dflt="$dflt medium" + fi + if $test -d /lib/large || $test -d /usr/lib/large; then + dflt="$dflt large" + fi + if $test -d /lib/huge || $test -d /usr/lib/huge; then + dflt="$dflt huge" + fi + esac + fi + ;; +*) dflt="$models" ;; +esac +$cat </dev/null 2>&1 || \ + $contains '\-i' $mansrc/man1/cc.1 >/dev/null 2>&1; then + dflt='-i' else - echo "It doesn't." - sharpbang=': use ' + dflt='none' fi - fi + ;; + *) dflt="$split";; + esac + rp="What flag indicates separate I and D space? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + none) ans='';; + esac + split="$ans" + unsplit='' + ;; +*large*|*small*|*medium*|*huge*) + case "$models" in + *large*) + case "$large" in + '') dflt='-Ml';; + *) dflt="$large";; + esac + rp="What flag indicates large model? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + none) ans=''; + esac + large="$ans" + ;; + *) large='';; + esac + case "$models" in + *huge*) + case "$huge" in + '') dflt='-Mh';; + *) dflt="$huge";; + esac + rp="What flag indicates huge model? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + none) ans=''; + esac + huge="$ans" + ;; + *) huge="$large";; + esac + case "$models" in + *medium*) + case "$medium" in + '') dflt='-Mm';; + *) dflt="$medium";; + esac + rp="What flag indicates medium model? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + none) ans=''; + esac + medium="$ans" + ;; + *) medium="$large";; + esac + case "$models" in + *small*) + case "$small" in + '') dflt='none';; + *) dflt="$small";; + esac + rp="What flag indicates small model? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + none) ans=''; + esac + small="$ans" + ;; + *) small='';; + esac + ;; +*) + echo "Unrecognized memory models--you may have to edit Makefile.SH" + ;; +esac + +: see if we need a special compiler +echo " " +if usg; then + case "$cc" in + '') + case "$Mcc" in + /*) dflt='Mcc' + ;; + *) + case "$large" in + -M*) + dflt='cc' + ;; + *) + if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then + dflt='cc -M' + else + dflt='cc' + fi + ;; + esac + ;; + esac + ;; + *) dflt="$cc";; + esac + $cat <<'EOM' + +On some systems the default C compiler will not resolve multiple global +references that happen to have the same name. On some such systems the +"Mcc" command may be used to force these to be resolved. On other systems +a "cc -M" command is required. (Note that the -M flag on other systems +indicates a memory model to use!) If you have the Gnu C compiler, you +might wish to use that instead. What command will force resolution on +EOM + $echo $n "this system? [$dflt] $c" + rp="Command to resolve multiple refs? [$dflt]" + . myread + cc="$ans" else - echo "Your sh doesn't grok # comments--I will strip them later on." - shsharp=false - echo "exec grep -v '^#'" >spitshell - chmod 755 spitshell - $eunicefix spitshell - spitshell=`pwd`/spitshell - echo "I presume that if # doesn't work, #! won't work either!" - sharpbang=': use ' + case "$cc" in + '') dflt=cc;; + *) dflt="$cc";; + esac + rp="Use which C compiler? [$dflt]" + $echo $n "$rp $c" + . myread + cc="$ans" fi +case "$cc" in +gcc*) cpp=`loc gcc-cpp $cpp $pth`;; +esac -: figure out how to guarantee sh startup -echo " " -echo "Checking out how to guarantee sh startup..." -startsh=$sharpbang'/bin/sh' -echo "Let's see if '$startsh' works..." -cat >try </dev/null 2>&1; then + case "$dflt" in + *LANGUAGE_C*);; + *) dflt="$dflt -DLANGUAGE_C";; + esac fi -rm -f try today +case "$dflt" in +'') dflt=none;; +esac +cat <try.c <<'EOCP' +#include +main() +{ + int i; + union { + unsigned long l; + char c[sizeof(long)]; + } u; + + if (sizeof(long) > 4) + u.l = (0x08070605<<32) | 0x04030201; + else + u.l = 0x04030201; + for (i=0; i < sizeof(long); i++) + printf("%c",u.c[i]+'0'); + printf("\n"); +} +EOCP + if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then + dflt=`./try` + case "$dflt" in + ????|????????) echo "(The test program ran ok.)";; + *) echo "(The test program didn't run right for some reason.)";; + esac + else + dflt='4321' + echo "(I can't seem to compile the test program. Guessing big-endian...)" + fi + ;; +*) + echo " " + dflt="$byteorder" + ;; +esac +rp="What is the order of bytes in a long? [$dflt]" +$echo $n "$rp $c" +. myread +byteorder="$ans" +$rm -f try.c try : see how we invoke the C preprocessor echo " " @@ -564,71 +1255,92 @@ cat <<'EOT' >testcpp.c #define XYZ xyz ABC.XYZ EOT -echo 'Maybe "/lib/cpp" will work...' -/lib/cpp testcpp.out 2>&1 -if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then +echo 'Maybe "'"$cc"' -E" will work...' +$cc -E testcpp.out 2>&1 +: try to force gcc preprocessor if that is the compiler they are using +case $? in +0) cppstdin="$cc -E";; +*) case "$cc" in + *gcc*) + cd .. + echo 'Trying (cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c)' + echo 'cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c' >cppstdin + chmod 755 cppstdin + cppstdin=`pwd`/cppstdin + cppminus=''; + cd UU + $cppstdin testcpp.out 2>&1 + ;; + esac + ;; +esac +if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, it does." - cpp='/lib/cpp' + cppstdin="$cc -E" cppminus=''; else - echo 'Nope, maybe "/lib/cpp -" will work...' - /lib/cpp - testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + echo 'Nope, maybe "'$cpp'" will work...' + $cpp testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, it does." - cpp='/lib/cpp' - cppminus='-'; + cppstdin="$cpp" + cppminus=''; else - echo 'No such luck...maybe "cc -E" will work...' - cc -E testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + echo 'No such luck...maybe "'$cpp' -" will work...' + $cpp - testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "It works!" - cpp='cc -E' - cppminus=''; + cppstdin="$cpp" + cppminus='-'; else - echo 'Nixed again...maybe "cc -E -" will work...' - cc -E - testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + echo 'Nixed again...maybe "'"$cc"' -E -" will work...' + $cc -E - testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Hooray, it works! I was beginning to wonder." - cpp='cc -E' + cppstdin="$cc -E" cppminus='-'; else - echo 'Nope...maybe "cc -P" will work...' - cc -P testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + echo 'Nope...maybe "'"$cc"' -P" will work...' + $cc -P testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, that does." - cpp='cc -P' + cppstdin="$cc -P" cppminus=''; else - echo 'Nope...maybe "cc -P -" will work...' - cc -P - testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + echo 'Nope...maybe "'"$cc"' -P -" will work...' + $cc -P - testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Yup, that does." - cpp='cc -P' + cppstdin="$cc -P" cppminus='-'; else echo 'Hmm...perhaps you already told me...' - case "$cpp" in + case "$cppstdin" in '') ;; - *) $cpp $cppminus testcpp.out 2>&1;; + *) $cppstdin $cppminus testcpp.out 2>&1;; esac - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Hooray, you did! I was beginning to wonder." else echo 'Uh-uh. Time to get fancy...' - echo 'Trying (cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)' - cpp='(cat >/tmp/$$.c; cc -E /tmp/$$.c; rm /tmp/$$.c)' + cd .. + echo 'Trying (cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c)' + echo 'cat >/tmp/$$.c; '"$cc"' -E /tmp/$$.c; rm /tmp/$$.c' >cppstdin + chmod 755 cppstdin + cppstdin=`pwd`/cppstdin cppminus=''; - $cpp testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + cd UU + $cppstdin testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "Eureka!." else dflt=blurfl $echo $n "No dice. I can't find a C preprocessor. Name one: $c" rp='Name a C preprocessor:' . myread - cpp="$ans" - $cpp testcpp.out 2>&1 - if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then + cppstdin="$ans" + $cppstdin testcpp.out 2>&1 + if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "OK, that will do." else echo "Sorry, I can't get that to work. Go find one." @@ -642,51 +1354,600 @@ else fi fi fi -rm -f testcpp.c testcpp.out +rm -f testcpp.c testcpp.out + +: get list of predefined functions in a handy place +echo " " +case "$libc" in +'') libc=unknown;; +esac +case "$libpth" in +'') libpth='/lib /usr/lib /usr/local/lib';; +esac +case "$libs" in +*-lc_s*) libc=`loc libc_s.a $libc $libpth` +esac +libnames=''; +case "$libs" in +'') ;; +*) for thislib in $libs; do + case "$thislib" in + -l*) thislib=`expr X$thislib : 'X-l\(.*\)'` + try=`loc lib$thislib.a blurfl/dyick $libpth` + if test ! -f $try; then + try=`loc lib$thislib blurfl/dyick $libpth` + if test ! -f $try; then + try=`loc $thislib blurfl/dyick $libpth` + if test ! -f $try; then + try=`loc Slib$thislib.a blurfl/dyick $xlibpth` + if test ! -f $try; then + try='' + fi + fi + fi + fi + libnames="$libnames $try" + ;; + *) libnames="$libnames $thislib" ;; + esac + done + ;; +esac +set /usr/lib/libc.so.[0-9]* +eval set \$$# +if test -f "$1"; then + echo "Your shared C library is in $1." + libc="$1" +elif test -f $libc; then + echo "Your C library is in $libc, like you said before." +elif test -f /lib/libc.a; then + echo "Your C library is in /lib/libc.a. You're normal." + libc=/lib/libc.a +else + ans=`loc libc.a blurfl/dyick $libpth` + if test ! -f "$ans"; then + ans=`loc libc blurfl/dyick $libpth` + fi + if test ! -f "$ans"; then + ans=`loc clib blurfl/dyick $libpth` + fi + if test ! -f "$ans"; then + ans=`loc Slibc.a blurfl/dyick $xlibpth` + fi + if test ! -f "$ans"; then + ans=`loc Mlibc.a blurfl/dyick $xlibpth` + fi + if test ! -f "$ans"; then + ans=`loc Llibc.a blurfl/dyick $xlibpth` + fi + if test -f "$ans"; then + echo "Your C library is in $ans, of all places." + libc=$ans + else + cat </dev/null >libc.tmp +$sed -n -e 's/^.* [AT] *_[_.]*//p' -e 's/^.* [AT] //p' libc.list +if $contains '^printf$' libc.list >/dev/null 2>&1; then + echo "done" +else + $sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p' libc.list + $contains '^printf$' libc.list >/dev/null 2>&1 || \ + $sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p' libc.list + $contains '^printf$' libc.list >/dev/null 2>&1 || \ + $sed -n -e 's/^.* D __*//p' -e 's/^.* D //p' libc.list + $contains '^printf$' libc.list >/dev/null 2>&1 || \ + $sed -n -e 's/^_//' \ + -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p' libc.list + $contains '^printf$' libc.list >/dev/null 2>&1 || \ + $sed -n -e 's/^.*|FUNC |GLOB .*|//p' libc.list + if $contains '^printf$' libc.list >/dev/null 2>&1; then + echo "done" + else + echo " " + echo "nm didn't seem to work right." + echo "Trying ar instead..." + if ar t $libc > libc.tmp; then + for thisname in $libnames; do + ar t $thisname >>libc.tmp + done + $sed -e 's/\.o$//' < libc.tmp > libc.list + echo "Ok." + else + echo "ar didn't seem to work right." + echo "Maybe this is a Cray...trying bld instead..." + if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list; then + for thisname in $libnames; do + bld t $libnames | \ + $sed -e 's/.*\///' -e 's/\.o:.*$//' >>libc.list + ar t $thisname >>libc.tmp + done + echo "Ok." + else + echo "That didn't work either. Giving up." + exit 1 + fi + fi + fi +fi + +inlibc='echo " "; +if $contains "^$1\$" libc.list >/dev/null 2>&1; +then echo "$1() found"; eval "$2=$define"; +else echo "$1() not found"; eval "$2=$undef"; fi' + +rmlist="$rmlist libc.tmp libc.list" + +: see if bcmp exists +set bcmp d_bcmp +eval $inlibc + +: see if bcopy exists +set bcopy d_bcopy +eval $inlibc + +: see if bzero exists +set bzero d_bzero +eval $inlibc + +: check for ability to cast negative floats to unsigned +echo " " +echo 'Checking to see if your C compiler can cast negative float to unsigned' +$cat >try.c <<'EOCP' +main() +{ + double f = -123; + unsigned long along; + unsigned int aint; + unsigned short ashort; + + along = (unsigned long)f; + aint = (unsigned int)f; + ashort = (unsigned short)f; + if (along == 0L || aint == 0 || ashort == 0) + exit(1); + else + exit(0); +} +EOCP +if $cc -o try $ccflags try.c >/dev/null 2>&1 && ./try; then + d_castneg="$define" + echo "Yup, it does." +else + d_castneg="$undef" + echo "Nope, it doesn't." +fi +$rm -f try.* + +: see if sprintf is declared as int or pointer to char +echo " " +cat >.ucbsprf.c <<'EOF' +main() { char buf[10]; exit((unsigned long)sprintf(buf,"%s","foo") > 10L); } +EOF +if $cc $ccflags .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then + echo "Your sprintf() returns (int)." + d_charsprf="$undef" +else + echo "Your sprintf() returns (char*)." + d_charsprf="$define" +fi +/bin/rm -f .ucbsprf.c .ucbsprf + +: see if vprintf exists +echo " " +if $contains '^vprintf$' libc.list >/dev/null 2>&1; then + echo 'vprintf() found.' + d_vprintf="$define" + cat >.ucbsprf.c <<'EOF' +#include +#include + +main() { xxx("foo"); } + +xxx(va_alist) +va_dcl +{ + va_list args; + char buf[10]; + + va_start(args); + exit((unsigned long)vsprintf(buf,"%s",args) > 10L); +} +EOF + if $cc $ccflags .ucbsprf.c -o .ucbsprf >/dev/null 2>&1 && .ucbsprf; then + echo "Your vsprintf() returns (int)." + d_charvspr="$undef" + else + echo "Your vsprintf() returns (char*)." + d_charvspr="$define" + fi + /bin/rm -f .ucbsprf.c .ucbsprf +else + echo 'vprintf() not found.' + d_vprintf="$undef" + d_charvspr="$undef" +fi + +: see if crypt exists +echo " " +if $contains '^crypt$' libc.list >/dev/null 2>&1; then + echo 'crypt() found.' + d_crypt="$define" + cryptlib='' +else + cryptlib=`loc Slibcrypt.a "" $xlibpth` + if $test -z "$cryptlib"; then + cryptlib=`loc Mlibcrypt.a "" $xlibpth` + else + cryptlib=-lcrypt + fi + if $test -z "$cryptlib"; then + cryptlib=`loc Llibcrypt.a "" $xlibpth` + else + cryptlib=-lcrypt + fi + if $test -z "$cryptlib"; then + cryptlib=`loc libcrypt.a "" $libpth` + else + cryptlib=-lcrypt + fi + if $test -z "$cryptlib"; then + echo 'crypt() not found.' + d_crypt="$undef" + else + d_crypt="$define" + fi +fi + +: get csh whereabouts +case "$csh" in +'csh') d_csh="$undef" ;; +*) d_csh="$define" ;; +esac + +: see if this is a dirent system +echo " " +if $test -r /usr/include/dirent.h ; then + i_dirent="$define" + echo "dirent.h found." + if $contains 'd_namlen' /usr/include/sys/dirent.h >/dev/null 2>&1; then + d_dirnamlen="$define" + else + d_dirnamlen="$undef" + fi +else + i_dirent="$undef" + if $contains 'd_namlen' /usr/include/sys/dir.h >/dev/null 2>&1; then + d_dirnamlen="$define" + else + d_dirnamlen="$undef" + fi + echo "No dirent.h found." +fi + +: now see if they want to do setuid emulation +case "$d_dosuid" in +'') dflt=n;; +*undef*) dflt=n;; +*) dflt=y;; +esac +cat </dev/null 2>&1 ; then + if $contains '^strchr$' libc.list >/dev/null 2>&1 ; then + echo "Your system has both index() and strchr(). Shall I use" + rp="index() rather than strchr()? [$dflt]" + $echo $n "$rp $c" + . myread + case "$ans" in + n*) d_index="$define" ;; + *) d_index="$undef" ;; + esac + else + d_index="$undef" + echo "index() found." + fi +else + if $contains '^strchr$' libc.list >/dev/null 2>&1 ; then + d_index="$define" + echo "strchr() found." + else + echo "No index() or strchr() found!" + d_index="$undef" + fi +fi -: see if bcopy exists +: see if ioctl defs are in sgtty/termio or sys/ioctl echo " " -if $contains bcopy libc.list >/dev/null 2>&1; then - echo 'bcopy() found.' - d_bcopy="$define" +if $test -r /usr/include/sys/ioctl.h ; then + d_ioctl="$define" + echo "sys/ioctl.h found." else - echo 'bcopy() not found.' - d_bcopy="$undef" + d_ioctl="$undef" + echo "sys/ioctl.h not found, assuming ioctl args are defined in sgtty.h." fi -: see if sprintf is declared as int or pointer to char +: see if killpg exists +set killpg d_killpg +eval $inlibc + +: see if lstat exists +set lstat d_lstat +eval $inlibc + +: see if memcmp exists +set memcmp d_memcmp +eval $inlibc + +: see if memcpy exists +set memcpy d_memcpy +eval $inlibc + +: see if mkdir exists +set mkdir d_mkdir +eval $inlibc + +: see if ndbm is available echo " " -if $contains 'char.*sprintf' /usr/include/stdio.h >/dev/null 2>&1 ; then - echo "Your sprintf() returns (char*)." - d_charsprf="$define" +xxx=`loc ndbm.h x /usr/include /usr/local/include $inclwanted` +if test -f $xxx; then + d_ndbm="$define" + echo "ndbm.h found." else - echo "Your sprintf() returns (int)." - d_charsprf="$undef" + d_ndbm="$undef" + echo "ndbm.h not found." fi -: index or strcpy +: see if we have the old dbm echo " " -dflt=y -if $contains index libc.list >/dev/null 2>&1 ; then - echo "Your system appears to use index() and rindex() rather than strchr()" - $echo $n "and strrchr(). Is this correct? [$dflt] $c" - rp='index() rather than strchr()? [$dflt]' - . myread - case "$ans" in - n*|f*) d_index="$define" ;; - *) d_index="$undef" ;; - esac +xxx=`loc dbm.h x /usr/include /usr/local/include $inclwanted` +if test -f $xxx; then + d_odbm="$define" + echo "dbm.h found." else - echo "Your system appears to use strchr() and strrchr() rather than index()" - $echo $n "and rindex(). Is this correct? [$dflt] $c" - rp='strchr() rather than index()? [$dflt]' - . myread - case "$ans" in - n*|f*) d_index="$undef" ;; - *) d_index="$define" ;; - esac + d_odbm="$undef" + echo "dbm.h not found." +fi + +socketlib='' +: see whether socket exists +echo " " +if $contains socket libc.list >/dev/null 2>&1; then + echo "Looks like you have Berkeley networking support." + d_socket="$define" + : now check for advanced features + if $contains setsockopt libc.list >/dev/null 2>&1; then + d_oldsock="$undef" + else + echo "...but it uses the old 4.1c interface, rather than 4.2" + d_oldsock="$define" + fi +else + : hpux, for one, puts all the socket stuff in socklib.o + if $contains socklib libc.list >/dev/null 2>&1; then + echo "Looks like you have Berkeley networking support." + d_socket="$define" + : we will have to assume that it supports the 4.2 BSD interface + d_oldsock="$undef" + else + echo "Hmmm...you don't have Berkeley networking in libc.a..." + : look for an optional networking library + if test -f /usr/lib/libnet.a; then + (ar t /usr/lib/libnet.a || + nm -g /usr/lib/libnet.a) 2>/dev/null >> libc.list + if $contains socket libc.list >/dev/null 2>&1; then + echo "but the Wollongong group seems to have hacked it in." + socketlib="-lnet" + d_socket="$define" + : now check for advanced features + if $contains setsockopt libc.list >/dev/null 2>&1; then + d_oldsock="$undef" + else + echo "...using the old 4.1c interface, rather than 4.2" + d_oldsock="$define" + fi + else + echo "or even in libnet.a, which is peculiar." + d_socket="$undef" + d_oldsock="$undef" + fi + else + echo "or anywhere else I see." + d_socket="$undef" + d_oldsock="$undef" + fi + fi +fi +if $contains socketpair libc.list >/dev/null 2>&1; then + d_sockpair="$define" +else + d_sockpair="$undef" +fi + +: see if this is a pwd system +echo " " +if $test -r /usr/include/pwd.h ; then + i_pwd="$define" + echo "pwd.h found." + $cppstdin $cppflags $$.h + if $contains 'pw_quota' $$.h >/dev/null 2>&1; then + d_pwquota="$define" + else + d_pwquota="$undef" + fi + if $contains 'pw_age' $$.h >/dev/null 2>&1; then + d_pwage="$define" + else + d_pwage="$undef" + fi + if $contains 'pw_change' $$.h >/dev/null 2>&1; then + d_pwchange="$define" + else + d_pwchange="$undef" + fi + if $contains 'pw_class' $$.h >/dev/null 2>&1; then + d_pwclass="$define" + else + d_pwclass="$undef" + fi + if $contains 'pw_expire' $$.h >/dev/null 2>&1; then + d_pwexpire="$define" + else + d_pwexpire="$undef" + fi + rm -f $$.h +else + i_pwd="$undef" + d_pwquota="$undef" + d_pwage="$undef" + d_pwchange="$undef" + d_pwclass="$undef" + d_pwexpire="$undef" + echo "No pwd.h found." fi +: see if readdir exists +set readdir d_readdir +eval $inlibc + +: see if rename exists +set rename d_rename +eval $inlibc + +: see if rmdir exists +set rmdir d_rmdir +eval $inlibc + +: see if setegid exists +set setegid d_setegid +eval $inlibc + +: see if seteuid exists +set seteuid d_seteuid +eval $inlibc + +: see if setpgrp exists +set setpgrp d_setpgrp +eval $inlibc + +: see if setpgrp2 exists +set setpgrp2 d_setpgrp2 +eval $inlibc + +: see if setpriority exists +set setpriority d_setprior +eval $inlibc + +: see if setregid exists +set setregid d_setregid +eval $inlibc +set setresgid d_setresgid +eval $inlibc + +: see if setreuid exists +set setreuid d_setreuid +eval $inlibc +set setresuid d_setresuid +eval $inlibc + +: see if setrgid exists +set setrgid d_setrgid +eval $inlibc + +: see if setruid exists +set setruid d_setruid +eval $inlibc + : see if stat knows about block sizes echo " " if $contains 'st_blocks;' /usr/include/sys/stat.h >/dev/null 2>&1 ; then @@ -704,7 +1965,7 @@ fi : see if stdio is really std echo " " -if $contains 'char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then +if $contains 'char.*_ptr.*;' /usr/include/stdio.h >/dev/null 2>&1 ; then if $contains '_cnt;' /usr/include/stdio.h >/dev/null 2>&1 ; then echo "Your stdio is pretty std." d_stdstdio="$define" @@ -730,7 +1991,7 @@ main() foo = bar; } EOCP -if cc -c try.c >/dev/null 2>&1 ; then +if $cc -c $ccflags try.c >/dev/null 2>&1 ; then d_strctcpy="$define" echo "Yup, it can." else @@ -739,35 +2000,135 @@ else fi $rm -f try.* -: see if struct tm is defined in sys/time.h +: see if strerror exists +set strerror d_strerror +eval $inlibc + +: see if symlink exists +set symlink d_symlink +eval $inlibc + +: see if syscall exists +set syscall d_syscall +eval $inlibc + +: see if we should include time.h, sys/time.h, or both +cat <<'EOM' + +Testing to see if we should include , or both. +I'm now running the test program... +EOM +$cat >try.c <<'EOCP' +#ifdef I_TIME +#include +#endif +#ifdef I_SYSTIME +#ifdef SYSTIMEKERNEL +#define KERNEL +#endif +#include +#endif +main() +{ + struct tm foo; +#ifdef S_TIMEVAL + struct timeval bar; +#endif + if (foo.tm_sec == foo.tm_sec) + exit(0); +#ifdef S_TIMEVAL + if (bar.tv_sec == bar.tv_sec) + exit(0); +#endif + exit(1); +} +EOCP +flags='' +for s_timeval in '-DS_TIMEVAL' ''; do + for d_systimekernel in '' '-DSYSTIMEKERNEL'; do + for i_time in '' '-DI_TIME'; do + for i_systime in '-DI_SYSTIME' ''; do + case "$flags" in + '') echo Trying $i_time $i_systime $d_systimekernel $s_timeval + if $cc $ccflags \ + $i_time $i_systime $d_systimekernel $s_timeval \ + try.c -o try >/dev/null 2>&1 ; then + set X $i_time $i_systime $d_systimekernel $s_timeval + shift + flags="$*" + echo Succeeded with $flags + fi + ;; + esac + done + done + done +done +case "$flags" in +*SYSTIMEKERNEL*) d_systimekernel="$define";; +*) d_systimekernel="$undef";; +esac +case "$flags" in +*I_TIME*) i_time="$define";; +*) i_time="$undef";; +esac +case "$flags" in +*I_SYSTIME*) i_systime="$define";; +*) i_systime="$undef";; +esac +$rm -f try.c try + +: see if this is a varargs system echo " " -if $contains 'struct tm' /usr/include/time.h >/dev/null 2>&1 ; then - echo "You have struct tm defined in rather than ." - d_tminsys="$undef" +if $test -r /usr/include/varargs.h ; then + d_varargs="$define" + echo "varargs.h found." else - echo "You have struct tm defined in rather than ." - d_tminsys="$define" + d_varargs="$undef" + echo "No varargs.h found, but that's ok (I hope)." fi : see if there is a vfork -echo " " -if $contains vfork libc.list >/dev/null 2>&1 ; then - echo "vfork() found." - d_vfork="$undef" -else - echo "No vfork() found--will use fork() instead." - d_vfork="$define" -fi +set vfork d_vfork +eval $inlibc : see if signal is declared as pointer to function returning int or void echo " " -if $contains 'void.*signal' /usr/include/signal.h >/dev/null 2>&1 ; then +$cppstdin $cppflags < /usr/include/signal.h >$$.tmp +if $contains 'void.*signal' $$.tmp >/dev/null 2>&1 ; then echo "You have void (*signal())() instead of int." d_voidsig="$define" else echo "You have int (*signal())() instead of void." d_voidsig="$undef" fi +rm -f $$.tmp + +: check for volatile keyword +echo " " +echo 'Checking to see if your C compiler knows about "volatile"...' +$cat >try.c <<'EOCP' +main() +{ + typedef unsigned short foo_t; + char *volatile foo; + volatile int bar; + volatile foo_t blech; + foo = foo; +} +EOCP +if $cc -c $ccflags try.c >/dev/null 2>&1 ; then + d_volatile="$define" + echo "Yup, it does." +else + d_volatile="$undef" + echo "Nope, it doesn't." +fi +$rm -f try.* + +: see if there is a wait4 +set wait4 d_wait4 +eval $inlibc : check for void type echo " " @@ -788,8 +2149,8 @@ void main() { #else main() { #endif - extern void *moo(); - void (*goo)(); + extern void moo(); /* function returning void */ + void (*goo)(); /* ptr to func returning void */ #if TRY & 2 void (*foo[10])(); #endif @@ -802,23 +2163,23 @@ main() { exit(0); } EOCP - if cc -S -DTRY=7 try.c >.out 2>&1 ; then - voidflags=7 - echo "It appears to support void fully." + if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then + voidflags=$defvoidused + echo "It appears to support void." if $contains warning .out >/dev/null 2>&1; then echo "However, you might get some warnings that look like this:" $cat .out fi else - echo "Hmm, you compiler has some difficulty with void. Checking further..." - if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then + echo "Hmm, your compiler has some difficulty with void. Checking further..." + if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1 ; then echo "It supports 1..." - if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1 ; then voidflags=3 echo "And it supports 2 but not 4." else echo "It doesn't support 2..." - if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1 ; then voidflags=5 echo "But it supports 4." else @@ -839,418 +2200,291 @@ $echo $n "$rp $c" voidflags="$ans" $rm -f try.* .out -: see what type of char stdio uses. +: see what type gids are declared as in the kernel echo " " -if $contains 'unsigned.*char.*_ptr;' /usr/include/stdio.h >/dev/null 2>&1 ; then - echo "Your stdio uses unsigned chars." - stdchar="unsigned char" -else - echo "Your stdio uses signed chars." - stdchar="char" -fi - -: preserve RCS keywords in files with variable substitution, grrr -Log='$Log' -Header='$Header' - -: set up shell script to do ~ expansion -cat >filexp <&2 - exit 1 - fi - case "\$1" in - */*) - echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\` - ;; - *) - echo \$dir - ;; - esac - fi - ;; -*) - echo \$1 - ;; -esac -EOSS -chmod 755 filexp -$eunicefix filexp - -: determine where public executables go -case "$bin" in +case "$gidtype" in '') - dflt=`loc . /bin /usr/local/bin /usr/lbin /usr/local /usr/bin` - ;; -*) dflt="$bin" - ;; -esac -cont=true -while $test "$cont" ; do - echo " " - rp="Where do you want to put the public executables? [$dflt]" - $echo $n "$rp $c" - . myread - bin="$ans" - bin=`filexp $bin` - if test -d $bin; then - cont='' + if $contains 'getgroups.*short' /usr/lib/lint/llib-lc >/dev/null 2>&1; then + dflt='short' + elif $contains 'getgroups.*int' /usr/lib/lint/llib-lc >/dev/null 2>&1; then + dflt='int' + elif $contains 'gid_t;' /usr/include/sys/types.h >/dev/null 2>&1 ; then + dflt='gid_t' else - dflt=n - rp="Directory $bin doesn't exist. Use that name anyway? [$dflt]" - $echo $n "$rp $c" - . myread - dflt='' - case "$ans" in - y*) cont='';; + set `grep 'groups\[NGROUPS\];' /usr/include/sys/user.h 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; esac fi -done - -: determine where manual pages go -case "$mansrc" in -'') - dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1` ;; -*) dflt="$mansrc" +*) dflt="$gidtype" ;; esac cont=true -while $test "$cont" ; do - echo " " - rp="Where do the manual pages (source) go? [$dflt]" - $echo $n "$rp $c" - . myread - mansrc=`filexp "$ans"` - if test -d $mansrc; then - cont='' - else - dflt=n - rp="Directory $mansrc doesn't exist. Use that name anyway? [$dflt]" - $echo $n "$rp $c" - . myread - dflt='' - case "$ans" in - y*) cont='';; - esac - fi -done -case "$mansrc" in -*l) - manext=l - ;; -*n) - manext=n - ;; -*) - manext=1 - ;; -esac +echo "(The following only matters if you have getgroups().)" +rp="What type are the group ids returned by getgroups()? [$dflt]" +$echo $n "$rp $c" +. myread +gidtype="$ans" -: get C preprocessor symbols handy +: see if this is an fcntl system echo " " -echo $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know -$cat <Cppsym -$startsh -case "\$1" in --l) list=true - shift - ;; -esac -unknown='' -case "\$list\$#" in -1|2) - for sym do - if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then - exit 0 - elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then - : - else - unknown="\$unknown \$sym" - fi - done - set X \$unknown - shift +if $test -r /usr/include/fcntl.h ; then + i_fcntl="$define" + echo "fcntl.h found." +else + i_fcntl="$undef" + echo "No fcntl.h found, but that's ok." +fi + +: see if this is an grp system +echo " " +if $test -r /usr/include/grp.h ; then + i_grp="$define" + echo "grp.h found." +else + i_grp="$undef" + echo "No grp.h found." +fi + +: see if this is a netinet/in.h system +echo " " +xxx=`loc netinet/in.h x /usr/include /usr/local/include $inclwanted` +if test -f $xxx; then + i_niin="$define" + echo "netinet/in.h found." +else + i_niin="$undef" + echo "No netinet/in.h found." +fi + +: see if this is a sys/dir.h system +echo " " +if $test -r /usr/include/sys/dir.h ; then + i_sysdir="$define" + echo "sys/dir.h found." +else + i_sysdir="$undef" + echo "No sys/dir.h found." +fi + +: see if ioctl defs are in sgtty/termio or sys/ioctl +echo " " +if $test -r /usr/include/sys/ioctl.h ; then + i_sysioctl="$define" + echo "sys/ioctl.h found." +else + i_sysioctl="$undef" + echo "sys/ioctl.h not found, assuming ioctl args are defined in sgtty.h." +fi + +: see if this is a sys/ndir.h system +echo " " +xxx=`loc sys/ndir.h x /usr/include /usr/local/include $inclwanted` +if test -f $xxx; then + i_sysndir="$define" + echo "sys/ndir.h found." +else + i_sysndir="$undef" + echo "No sys/ndir.h found." +fi + +: see if we should include utime.h +echo " " +if $test -r /usr/include/utime.h ; then + i_utime="$define" + echo "utime.h found." +else + i_utime="$undef" + echo "No utime.h found, but that's ok." +fi + +: see if this is a varargs system +echo " " +if $test -r /usr/include/varargs.h ; then + i_varargs="$define" + echo "varargs.h found." +else + i_varargs="$undef" + echo "No varargs.h found, but that's ok (I hope)." +fi + +: see if this is a vfork system +echo " " +if $test -r /usr/include/vfork.h ; then + i_vfork="$define" + echo "vfork.h found." +else + i_vfork="$undef" + echo "No vfork.h found." +fi + +: check for length of integer +echo " " +case "$intsize" in +'') + echo "Checking to see how big your integers are..." + $cat >try.c <<'EOCP' +#include +main() +{ + printf("%d\n", sizeof(int)); +} +EOCP + if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" + fi ;; -esac -case \$# in -0) exit 1;; -esac -echo \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\ -#ifdef \1\\ -exit 0; _ _ _ _\1\\ \1\\ -#endif\\ -/' >/tmp/Cppsym\$\$ -echo exit 1 >>/tmp/Cppsym\$\$ -$cpp $cppminus /tmp/Cppsym2\$\$ -case "\$list" in -true) awk '\$6 != "" {print substr(\$6,2,100)}' Cppsym.true -cat Cppsym.true -rmlist="$rmlist Cppsym Cppsym.know Cppsym.true" +rp="What is the size of an integer (in bytes)? [$dflt]" +$echo $n "$rp $c" +. myread +intsize="$ans" +$rm -f try.c try -: see what memory models we can support -case "$models" in +: determine where private executables go +case "$privlib" in '') - if Cppsym pdp11; then - dflt='unsplit split' - else - ans=`loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge` - case "$ans" in - X) dflt='none';; - *) if $test -d /lib/small || $test -d /usr/lib/small; then - dflt='small' - else - dflt='' - fi - if $test -d /lib/medium || $test -d /usr/lib/medium; then - dflt="$dflt medium" - fi - if $test -d /lib/large || $test -d /usr/lib/large; then - dflt="$dflt large" - fi - if $test -d /lib/huge || $test -d /usr/lib/huge; then - dflt="$dflt huge" - fi - esac - fi + dflt=/usr/lib/$package + test -d /usr/local/lib && dflt=/usr/local/lib/$package + ;; +*) dflt="$privlib" ;; -*) dflt="$models" ;; esac $cat <try.c <<'EOCP' +#include +main() +{ + register int i; + register unsigned long tmp; + register unsigned long max = 0L; + + for (i=1000; i; i--) { + tmp = (unsigned long)rand(); + if (tmp > max) max = tmp; + } + for (i=0; max; i++) + max /= 2; + printf("%d\n",i); +} +EOCP + if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then + dflt=`./try` + else + dflt='?' + echo "(I can't seem to compile the test program...)" + fi ;; -*split) - case "$split" in - '') - if $contains '-i' $mansrc/ld.1 >/dev/null 2>&1 || \ - $contains '-i' $mansrc/cc.1 >/dev/null 2>&1; then - dflt='-i' - else - dflt='none' - fi - ;; - *) dflt="$split";; - esac - rp="What flag indicates separate I and D space? [$dflt]" - $echo $n "$rp $c" - . myread - case "$ans" in - none) ans='';; - esac - split="$ans" - unsplit='' +*) + dflt="$randbits" ;; -*large*|*small*|*medium*|*huge*) - case "$model" in - *large*) - case "$large" in - '') dflt='-Ml';; - *) dflt="$large";; - esac - rp="What flag indicates large model? [$dflt]" - $echo $n "$rp $c" - . myread - case "$ans" in - none) ans=''; - esac - large="$ans" - ;; - *) large='';; - esac - case "$model" in - *huge*) - case "$huge" in - '') dflt='-Mh';; - *) dflt="$huge";; - esac - rp="What flag indicates huge model? [$dflt]" - $echo $n "$rp $c" - . myread - case "$ans" in - none) ans=''; - esac - huge="$ans" - ;; - *) huge="$large";; - esac - case "$model" in - *medium*) - case "$medium" in - '') dflt='-Mm';; - *) dflt="$medium";; - esac - rp="What flag indicates medium model? [$dflt]" - $echo $n "$rp $c" - . myread - case "$ans" in - none) ans=''; - esac - medium="$ans" - ;; - *) medium="$large";; - esac - case "$model" in - *small*) - case "$small" in - '') dflt='none';; - *) dflt="$small";; - esac - rp="What flag indicates small model? [$dflt]" - $echo $n "$rp $c" - . myread - case "$ans" in - none) ans=''; +esac +rp="How many bits does your rand() function produce? [$dflt]" +$echo $n "$rp $c" +. myread +randbits="$ans" +$rm -f try.c try + +: generate list of signal names +echo " " +case "$sig_name" in +'') + echo "Generating a list of signal names..." + set X `cat /usr/include/signal.h /usr/include/sys/signal.h 2>&1 | awk ' +$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $3 ~ /^[1-9][0-9]*$/ { + sig[$3] = substr($2,4,20) + if (max < $3 && $3 < 60) { + max = $3 + } +} + +END { + for (i=1; i<=max; i++) { + if (sig[i] == "") + printf "%d", i + else + printf "%s", sig[i] + if (i < max) + printf " " + } + printf "\n" +} +'` + shift + case $# in + 0) echo 'kill -l' >/tmp/foo$$ + set X `$csh -f /dev/null 2>&1 ; then + echo "Your stdio uses unsigned chars." + stdchar="unsigned char" +else + echo "Your stdio uses signed chars." + stdchar="char" +fi -case "$ldflags" in -'') if venix; then - dflt='-i -z' +: see what type uids are declared as in the kernel +case "$uidtype" in +'') + if $contains 'uid_t;' /usr/include/sys/types.h >/dev/null 2>&1 ; then + dflt='uid_t'; else - dflt='none' + set `grep '_ruid;' /usr/include/sys/user.h 2>/dev/null` unsigned short + case $1 in + unsigned) dflt="$1 $2" ;; + *) dflt="$1" ;; + esac fi ;; -*) dflt="$ldflags";; +*) dflt="$uidtype" + ;; esac +cont=true echo " " -rp="Any additional ld flags? [$dflt]" +rp="What type are user ids returned by getuid(), etc.? [$dflt]" $echo $n "$rp $c" . myread -case "$ans" in -none) ans=''; -esac -ldflags="$ans" +uidtype="$ans" -: see if we need a special compiler -echo " " -if usg; then - case "$cc" in - '') - case "$Mcc" in - /*) dflt='Mcc' - ;; - *) - case "$large" in - -M*) - dflt='cc' - ;; - *) - if $contains '\-M' $mansrc/cc.1 >/dev/null 2>&1 ; then - dflt='cc -M' - else - dflt='cc' - fi - ;; - esac - ;; - esac - ;; - *) dflt="$cc";; - esac - $cat <<'EOM' - -On some systems the default C compiler will not resolve multiple global -references that happen to have the same name. On some such systems the -"Mcc" command may be used to force these to be resolved. On other systems -a "cc -M" command is required. (Note that the -M flag on other systems -indicates a memory model to use!) What command will force resolution on -EOM - $echo $n "this system? [$dflt] $c" - rp="Command to resolve multiple refs? [$dflt]" - . myread - cc="$ans" -else - echo "Not a USG system--assuming cc can resolve multiple definitions." - cc=cc -fi +: preserve RCS keywords in files with variable substitution, grrr +Log='$Log' +Header='$Header' -: see if we should include -lnm -echo " " -if $test -r /usr/lib/libnm.a || $test -r /usr/local/lib/libnm.a ; then - echo "New math library found." - libnm='-lnm' -else - ans=`loc libnm.a x $libpth` - case "$ans" in - x) - echo "No nm library found--the normal math library will have to do." - libnm='' - ;; - *) - echo "New math library found in $ans." - libnm="$ans" - ;; - esac -fi : determine which malloc to compile in echo " " @@ -1277,6 +2511,21 @@ y*) mallocsrc='malloc.c'; mallocobj='malloc.o';; *) mallocsrc=''; mallocobj='';; esac +: determine compiler compiler +case "$yacc" in +'') dflt=yacc;; +*) dflt="$yacc";; +esac +cont=true + echo " " +rp="Which compiler compiler (yacc or bison -y) will you use? [$dflt]" +$echo $n "$rp $c" +. myread +case "$ans" in +'') ans="$dflt";; +esac +yacc="$ans" + echo " " echo "End of configuration questions." echo " " @@ -1293,8 +2542,8 @@ $startsh # This file was produced by running the Configure script. d_eunice='$d_eunice' -eunicefix='$eunicefix' define='$define' +eunicefix='$eunicefix' loclist='$loclist' expr='$expr' sed='$sed' @@ -1319,24 +2568,123 @@ Mcc='$Mcc' vi='$vi' mailx='$mailx' mail='$mail' +cpp='$cpp' +perl='$perl' +emacs='$emacs' +ls='$ls' +rmail='$rmail' +sendmail='$sendmail' +shar='$shar' +smail='$smail' +tbl='$tbl' +troff='$troff' +nroff='$nroff' +uname='$uname' +uuname='$uuname' +line='$line' +chgrp='$chgrp' +chmod='$chmod' +lint='$lint' +sleep='$sleep' +pr='$pr' +tar='$tar' +ln='$ln' +lpr='$lpr' +lp='$lp' +touch='$touch' +make='$make' +date='$date' +csh='$csh' Log='$Log' Header='$Header' bin='$bin' -cc='$cc' +byteorder='$byteorder' contains='$contains' -cpp='$cpp' +cppstdin='$cppstdin' cppminus='$cppminus' +d_bcmp='$d_bcmp' d_bcopy='$d_bcopy' +d_bzero='$d_bzero' +d_castneg='$d_castneg' d_charsprf='$d_charsprf' +d_crypt='$d_crypt' +cryptlib='$cryptlib' +d_csh='$d_csh' +d_dosuid='$d_dosuid' +d_dup2='$d_dup2' +d_fchmod='$d_fchmod' +d_fchown='$d_fchown' +d_fcntl='$d_fcntl' +d_flock='$d_flock' +d_getgrps='$d_getgrps' +d_gethent='$d_gethent' +d_getpgrp='$d_getpgrp' +d_getpgrp2='$d_getpgrp2' +d_getprior='$d_getprior' +d_htonl='$d_htonl' d_index='$d_index' +d_ioctl='$d_ioctl' +d_killpg='$d_killpg' +d_lstat='$d_lstat' +d_memcmp='$d_memcmp' +d_memcpy='$d_memcpy' +d_mkdir='$d_mkdir' +d_ndbm='$d_ndbm' +d_odbm='$d_odbm' +d_readdir='$d_readdir' +d_rename='$d_rename' +d_rmdir='$d_rmdir' +d_setegid='$d_setegid' +d_seteuid='$d_seteuid' +d_setpgrp='$d_setpgrp' +d_setpgrp2='$d_setpgrp2' +d_setprior='$d_setprior' +d_setregid='$d_setregid' +d_setresgid='$d_setresgid' +d_setreuid='$d_setreuid' +d_setresuid='$d_setresuid' +d_setrgid='$d_setrgid' +d_setruid='$d_setruid' +d_socket='$d_socket' +d_sockpair='$d_sockpair' +d_oldsock='$d_oldsock' +socketlib='$socketlib' d_statblks='$d_statblks' d_stdstdio='$d_stdstdio' d_strctcpy='$d_strctcpy' -d_tminsys='$d_tminsys' +d_strerror='$d_strerror' +d_symlink='$d_symlink' +d_syscall='$d_syscall' +d_varargs='$d_varargs' d_vfork='$d_vfork' d_voidsig='$d_voidsig' +d_volatile='$d_volatile' +d_vprintf='$d_vprintf' +d_charvspr='$d_charvspr' +d_wait4='$d_wait4' +gidtype='$gidtype' +i_dirent='$i_dirent' +d_dirnamlen='$d_dirnamlen' +i_fcntl='$i_fcntl' +i_grp='$i_grp' +i_niin='$i_niin' +i_pwd='$i_pwd' +d_pwquota='$d_pwquota' +d_pwage='$d_pwage' +d_pwchange='$d_pwchange' +d_pwclass='$d_pwclass' +d_pwexpire='$d_pwexpire' +i_sysdir='$i_sysdir' +i_sysioctl='$i_sysioctl' +i_sysndir='$i_sysndir' +i_time='$i_time' +i_systime='$i_systime' +d_systimekernel='$d_systimekernel' +i_utime='$i_utime' +i_varargs='$i_varargs' +i_vfork='$i_vfork' +intsize='$intsize' libc='$libc' -libnm='$libnm' mallocsrc='$mallocsrc' mallocobj='$mallocobj' usemymalloc='$usemymalloc' @@ -1348,25 +2696,36 @@ small='$small' medium='$medium' large='$large' huge='$huge' +optimize='$optimize' ccflags='$ccflags' +cppflags='$cppflags' ldflags='$ldflags' +cc='$cc' +libs='$libs' n='$n' c='$c' package='$package' +randbits='$randbits' +sig_name='$sig_name' spitshell='$spitshell' shsharp='$shsharp' sharpbang='$sharpbang' startsh='$startsh' stdchar='$stdchar' +uidtype='$uidtype' voidflags='$voidflags' defvoidused='$defvoidused' +yacc='$yacc' +privlib='$privlib' +lib='$lib' CONFIG=true EOT - + CONFIG=true echo " " dflt='' +fastread='' echo "If you didn't make any mistakes, then just type a carriage return here." rp="If you need to edit config.sh, do it as a shell escape here:" $echo $n "$rp $c" @@ -1376,10 +2735,12 @@ case "$ans" in *) : in case they cannot read eval $ans;; esac +: if this fails, just run all the .SH files by hand +. ./config.sh echo " " echo "Doing variable substitutions on .SH files..." -set x `$grep '\.SH'