X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Configure;h=4695391a6617cdf96753d33f371d2e966f91ead4;hb=693762b493165ab96822ef2342af62f74dc0367b;hp=432398c0040d1a18049456fbed8add69a2cfb989;hpb=4633a7c4bad06b471d9310620b7fe8ddd158cccd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/Configure b/Configure index 432398c..4695391 100755 --- a/Configure +++ b/Configure @@ -14,13 +14,13 @@ # (Note: this Configure script was generated automatically. Rather than # working with this copy of Configure, you may wish to get metaconfig. # The dist-3.0 package (which contains metaconfig) was posted in -# comp.sources.misc so you may fetch it yourself from your nearest -# archive site. Check with Archie if you don't know where that can be.) +# comp.sources.misc and is available on CPAN under authors/id/RAM so +# you may fetch it yourself from your nearest archive site.) # -# $Id: Head.U,v 3.0.1.8 1995/07/25 13:40:02 ram Exp $ +# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ # -# Generated on Mon Nov 20 09:55:37 EST 1995 [metaconfig 3.0 PL58] +# Generated on Tue Mar 3 11:16:26 EST 1998 [metaconfig 3.0 PL70] cat >/tmp/c1$$ </dev/null 2>&1; then + inksh=true fi - -: On HP-UX, large Configure scripts may exercise a bug in /bin/sh if test -f /hp-ux -a -f /bin/ksh; then - if (PATH=.; alias -x) >/dev/null 2>&1; then - : already under /bin/ksh - else - cat <<'EOM' -(Feeding myself to ksh to avoid nasty sh bug in "here document" expansion.) -EOM - unset ENV - exec /bin/ksh $0 "$@" + needksh='to avoid sh bug in "here document" expansion' +fi +if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then + if test X`/usr/bin/uname -v` = X4; then + avoidksh="to avoid AIX 4's /bin/sh" + newsh=/usr/bin/bsh fi -else - : Warn them if they use ksh on other systems - (PATH=.; alias -x) >/dev/null 2>&1 && \ +fi +case "$inksh/$needksh" in +/[a-z]*) + unset ENV + changesh=true + reason="$needksh" + ;; +esac +case "$inksh/$avoidksh" in +true/[a-z]*) + changesh=true + reason="$avoidksh" + ;; +esac +case "$inksh/$needksh-$avoidksh-" in +true/--) cat <extract <<'EOS' -CONFIG=true -echo "Doing variable substitutions on .SH files..." -if test -f MANIFEST; then - shlist=`awk '{print $1}' &2 +$me: Fatal Error: I can't find a Bourne Shell anywhere. + +Usually it's in /bin/sh. How did you even get this far? +Please contact me (Andy Dougherty) at doughera@lafcol.lafayette.edu and +we'll try to straighten this all out. +EOM + exit 1 + ;; +esac + +: see if sh knows # comments +if `$sh -c '#' >/dev/null 2>&1`; then + shsharp=true + spitshell=cat + xcat=/bin/cat + test -f $xcat || xcat=/usr/bin/cat + echo "#!$xcat" >try + $eunicefix try + chmod +x try + ./try > today + if test -s today; then + sharpbang='#!' + else + echo "#! $xcat" > try + $eunicefix try + chmod +x try + ./try > today + if test -s today; then + sharpbang='#! ' + else + sharpbang=': use ' fi - done - set x $shlist + fi else - echo "(Looking for .SH files under the current directory.)" - set x `find . -name "*.SH" -print` + echo " " + echo "Your $sh doesn't grok # comments--I will strip them later on." + shsharp=false + cd .. + echo "exec grep -v '^[ ]*#'" >spitshell + chmod +x spitshell + $eunicefix spitshell + spitshell=`pwd`/spitshell + cd UU + echo "I presume that if # doesn't work, #! won't work either!" + sharpbang=': use ' fi -shift -case $# in -0) set x *.SH; shift;; +rm -f try today + +: figure out how to guarantee sh startup +case "$startsh" in +'') startsh=${sharpbang}${sh} ;; +*) esac -if test ! -f $1; then - shift -fi -for file in $*; do - case "$file" in - */*) - dir=`expr X$file : 'X\(.*\)/'` - file=`expr X$file : 'X.*/\(.*\)'` - (cd $dir && . ./$file) - ;; - *) - . ./$file - ;; - esac -done -if test -f config_h.SH; then - if test ! -f config.h; then - : oops, they left it out of MANIFEST, probably, so do it anyway. - . ./config_h.SH - fi +cat >try <options.awk <<'EOF' @@ -806,6 +962,10 @@ extractsh='' override='' knowitall='' rm -f optdef.sh +cat >optdef.sh <&2 + -V) echo "$me generated by metaconfig 3.0 PL70." >&2 exit 0;; --) break;; -*) echo "$me: unknown option $1" >&2; shift; error=true;; @@ -866,7 +1026,7 @@ done case "$error" in true) cat >&2 <&1 case "$silent" in true) exec 1>/dev/null;; @@ -899,26 +1070,6 @@ esac touch optdef.sh . ./optdef.sh -case "$extractsh" in -true) - case "$config_sh" in - '') config_sh='config.sh'; config='./config.sh';; - /*) config="$config_sh";; - *) config="./$config_sh";; - esac - echo " " - echo "Fetching answers from $config_sh..." - cd .. - . $config - test "$override" && . ./optdef.sh - echo " " - . ./UU/extract - rm -rf UU - echo "Done." - exit 0 - ;; -esac - : set package name package=perl5 first=`echo $package | sed -e 's/^\(.\).*/\1/'` @@ -928,13 +1079,6 @@ ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;; *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;; esac -: Eunice requires " " instead of "", can you believe it -echo " " -: Here we go... -echo "Beginning of configuration questions for $package." - -trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15 - : Some greps do not return status, grrr. echo "grimblepritz" >grimble if grep blurfldyick grimble >/dev/null 2>&1 ; then @@ -956,6 +1100,152 @@ EOSS chmod +x contains esac +: Find the path to the source tree +case "$src" in +'') case "$0" in + */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;; + *) src='.';; + esac;; +esac +case "$src" in +'') src=/ + rsrc=/ + ;; +/*) rsrc="$src";; +*) rsrc="../$src";; +esac +if test -f $rsrc/Configure && \ + $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1 +then + : found it, so we are ok. +else + rsrc='' + for src in . .. ../.. ../../.. ../../../..; do + if test -f ../$src/Configure && \ + $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1 + then + rsrc=../$src + break + fi + done +fi +case "$rsrc" in +'') + cat <&4 + +Sorry, I can't seem to locate the source dir for $package. Please start +Configure with an explicit path -- i.e. /some/path/Configure. + +EOM + exit 1 + ;; +../.) rsrc='..';; +*) + echo " " + echo "Sources for $package found in \"$src\"." >&4 + ;; +esac + +: script used to extract .SH files with variable substitutions +cat >extract <<'EOS' +CONFIG=true +echo "Doing variable substitutions on .SH files..." +if test -f $src/MANIFEST; then + set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH'` +else + echo "(Looking for .SH files under the source directory.)" + set x `(cd $src; find . -name "*.SH" -print)` +fi +shift +case $# in +0) set x `(cd $src; echo *.SH)`; shift;; +esac +if test ! -f $src/$1; then + shift +fi +mkdir_p=' +name=$1; +create=""; +while test $name; do + if test ! -d "$name"; then + create="$name $create"; + name=`echo $name | sed -e "s|^[^/]*$||"`; + name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`; + else + name=""; + fi; +done; +for file in $create; do + mkdir $file; +done +' +for file in $*; do + case "$src" in + ".") + case "$file" in + */*) + dir=`expr X$file : 'X\(.*\)/'` + file=`expr X$file : 'X.*/\(.*\)'` + (cd $dir && . ./$file) + ;; + *) + . ./$file + ;; + esac + ;; + *) + case "$file" in + */*) + dir=`expr X$file : 'X\(.*\)/'` + file=`expr X$file : 'X.*/\(.*\)'` + (set x $dir; shift; eval $mkdir_p) + sh <$src/$dir/$file + ;; + *) + sh <$src/$file + ;; + esac + ;; + esac +done +if test -f $src/config_h.SH; then + if test ! -f config.h; then + : oops, they left it out of MANIFEST, probably, so do it anyway. + . $src/config_h.SH + fi +fi +EOS + +: extract files and exit if asked to do so +case "$extractsh" in +true) + case "$realsilent" in + true) ;; + *) exec 1>&4;; + esac + case "$config_sh" in + '') config_sh='config.sh';; + esac + echo " " + echo "Fetching answers from $config_sh..." + cd .. + . $config_sh + test "$override" && . ./optdef.sh + echo " " + . UU/extract + rm -rf UU + echo "Done." + exit 0 + ;; +esac + +: Eunice requires " " instead of "", can you believe it +echo " " +: Here we go... +echo "Beginning of configuration questions for $package." + +trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15 + : first determine how to suppress newline on echo command echo " " echo "Checking echo to see how to suppress newlines..." @@ -977,12 +1267,13 @@ rm -f .echotmp : Now test for existence of everything in MANIFEST echo " " -if test -f ../MANIFEST; then +if test -f $rsrc/MANIFEST; then echo "First let's make sure your kit is complete. Checking..." >&4 - awk '$1 !~ /PACK[A-Z]+/ {print $1}' ../MANIFEST | split -50 + awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50 rm -f missing + tmppwd=`pwd` for filelist in x??; do - (cd ..; ls `cat UU/$filelist` >/dev/null 2>>UU/missing) + (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing) done if test -s missing; then cat missing >&4 @@ -993,7 +1284,7 @@ THIS PACKAGE SEEMS TO BE INCOMPLETE. You have the option of continuing the configuration process, despite the distinct possibility that your kit is damaged, by typing 'y'es. If you do, don't blame me if something goes wrong. I advise you to type 'n'o -and contact the author (lwall@netlabs.com). +and contact the author (doughera@lafcol.lafayette.edu). EOM echo $n "Continue? [n] $c" >&4 @@ -1009,7 +1300,7 @@ EOM ;; esac else - echo "Looks good..." >&4 + echo "Looks good..." fi else echo "There is no MANIFEST file. I hope your kit is complete !" @@ -1039,6 +1330,7 @@ esac" : now set up to do reads with possible shell escape and default assignment cat <myread +$startsh xxxm=\$dflt $myecho ans='!' @@ -1061,37 +1353,37 @@ while expr "X\$ans" : "X!" >/dev/null; do read answ set x \$xxxm shift - aok=''; eval "ans=\"\$answ\"" && aok=y + aok=''; eval "ans=\\"\$answ\\"" && aok=y case "\$answ" in - "\$ans") - case "\$ans" in - \\&*) - set x \`expr "X\$ans" : "X&\(.*\)\$"\` - shift - case "\$1" in + "!") + sh 1>&4 + echo " " + $myecho + ;; + !*) + set x \`expr "X\$ans" : "X!\(.*\)\$"\` + shift + sh 1>&4 -c "\$*" + echo " " + $myecho + ;; + "\$ans") + case "\$ans" in + \\&*) + set x \`expr "X\$ans" : "X&\(.*\)\$"\` + shift + case "\$1" in -d) fastread=yes - echo "(OK, I'll run with -d after this question.)" + echo "(OK, I'll run with -d after this question.)" >&4 ;; -*) - echo "*** Sorry, \$1 not supported yet." + echo "*** Sorry, \$1 not supported yet." >&4 ;; esac $myecho ans=! ;; - "!") - sh 1>&4 - echo " " - $myecho - ;; - !*) - set x \`expr "X\$ans" : "X!\(.*\)\$"\` - shift - sh 1>&4 -c "\$*" - echo " " - $myecho - ;; esac;; *) case "\$aok" in @@ -1126,7 +1418,7 @@ EOSC test -d ../.config || mkdir ../.config cat >../.config/README </dev/null || whoami) 2>&1` +user=`(logname) 2>/dev/null` +case "$user" in +'') user=`whoami 2>&1`;; +esac if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then firsttime=false echo " " @@ -1148,7 +1443,7 @@ if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then fi if $needman; then cat <&4 -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..." - xcat=/bin/cat - test -f $xcat || xcat=/usr/bin/cat - echo "#!$xcat" >try - $eunicefix try - chmod +x try - ./try > today - if test -s today; then - echo "It does." - sharpbang='#!' - else - echo "#! $xcat" > try - $eunicefix try - chmod +x try - ./try > today - if test -s today; then - echo "It does." - sharpbang='#! ' - else - echo "It's just a comment." - sharpbang=': use ' - fi - fi -else - echo "Your sh doesn't grok # comments--I will strip them later on." - shsharp=false - cd .. - echo "exec grep -v '^[ ]*#'" >spitshell - chmod +x spitshell - $eunicefix spitshell - spitshell=`pwd`/spitshell - cd UU - echo "I presume that if # doesn't work, #! won't work either!" - sharpbang=': use ' -fi -rm -f try today - -: figure out how to guarantee sh startup -echo " " -echo "Checking out how to guarantee sh startup..." >&4 -case "$SYSTYPE" in -*bsd*|sys5*) startsh=$sharpbang"/$SYSTYPE/bin/sh";; -*) startsh=$sharpbang'/bin/sh';; -esac -echo "Let's see if '$startsh' works..." -cat >try <&4 @@ -1303,7 +1530,7 @@ for dir in \$*; do for thisthing in \$dir/\$thing; do : just loop through to pick last item done - if test -f \$thisthing -a -r \$thisthing; then + if test -f \$thisthing; then echo \$thisthing exit 0 elif test -f \$dir/\$thing.exe; then @@ -1328,34 +1555,55 @@ echo expr find grep -ln ls +make mkdir rm sed sort -tail touch tr uniq " trylist=" Mcc +ar byacc cpp csh date egrep +gzip +less line +ln +more +nm nroff perl +pg +sendmail +tee test uname +zip " pth=`echo $PATH | sed -e "s/$p_/ /g"` pth="$pth /lib /usr/lib" for file in $loclist; do - xxx=`./loc $file $file $pth` + eval xxx=\$$file + case "$xxx" in + /*|?:[\\/]*) + if test -f "$xxx"; then + : ok + else + echo "WARNING: no $xxx -- ignoring your setting for $file." >&4 + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac eval $file=$xxx eval _$file=$xxx case "$xxx" in @@ -1366,8 +1614,8 @@ for file in $loclist; do echo $file is in $xxx. ;; *) - echo "I don't know where '$file' is, and my life depends on it." - echo "Go find a public domain implementation or fix your PATH setting!" + echo "I don't know where '$file' is, and my life depends on it." >&4 + echo "Go find a public domain implementation or fix your PATH setting!" >&4 exit 1 ;; esac @@ -1376,7 +1624,19 @@ echo " " echo "Don't worry if any of the following aren't found..." say=offhand for file in $trylist; do - xxx=`./loc $file $file $pth` + eval xxx=\$$file + case "$xxx" in + /*|?:[\\/]*) + if test -f "$xxx"; then + : ok + else + echo "WARNING: no $xxx -- ignoring your setting for $file." >&4 + xxx=`./loc $file $file $pth` + fi + ;; + '') xxx=`./loc $file $file $pth`;; + *) xxx=`./loc $xxx $xxx $pth`;; + esac eval $file=$xxx eval _$file=$xxx case "$xxx" in @@ -1398,6 +1658,12 @@ egrep) egrep=$grep ;; esac +case "$ln" in +ln) + echo "Substituting cp for ln." + ln=$cp + ;; +esac case "$test" in test) echo "Hopefully test is built into your sh." @@ -1514,10 +1780,16 @@ if test -f config.sh; then *) echo "Fetching default answers from your old config.sh file..." >&4 tmp_n="$n" tmp_c="$c" + tmp_sh="$sh" . ./config.sh cp config.sh UU n="$tmp_n" c="$tmp_c" + : Older versions did not always set $sh. Catch re-use of such + : an old config.sh. + case "$sh" in + '') sh="$tmp_sh" ;; + esac hint=previous ;; esac @@ -1525,19 +1797,22 @@ fi if test ! -f config.sh; then $cat <&4 + (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4 dflt='' : Half the following guesses are probably wrong... If you have better - : tests or hints, please send them to lwall@netlabs.com + : tests or hints, please send them to doughera@lafcol.lafayette.edu : The metaconfig authors would also appreciate a copy... $test -f /irix && osname=irix $test -f /xenix && osname=sco_xenix $test -f /dynix && osname=dynix $test -f /dnix && osname=dnix - $test -f /unicos && osname=unicos && osvers=`$uname -r` + $test -f /lynx.os && osname=lynxos + $test -f /unicos && osname=unicos && osvers=`$uname -r` + $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r` $test -f /bin/mips && /bin/mips && osname=mips $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \ $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4 @@ -1545,12 +1820,12 @@ EOM $test -f /etc/saf/_sactab && osname=svr4 $test -d /usr/include/minix && osname=minix if $test -d /MachTen; then - osname=machten + osname=machten if $test -x /sbin/version; then - osvers=`/sbin/version | $awk '{print $2}' | + osvers=`/sbin/version | $awk '{print $2}' | $sed -e 's/[A-Za-z]$//'` elif $test -x /usr/etc/version; then - osvers=`/usr/etc/version | $awk '{print $2}' | + osvers=`/usr/etc/version | $awk '{print $2}' | $sed -e 's/[A-Za-z]$//'` else osvers="$2.$3" @@ -1569,7 +1844,6 @@ EOM esac;; [23]100) osname=mips ;; next*) osname=next ;; - news*) osname=news ;; i386*) if $test -f /etc/kconfig; then osname=isc @@ -1595,6 +1869,9 @@ EOM *) osvers=$tmp;; esac ;; + *dc.osx) osname=dcosx + osvers="$3" + ;; dnix) osname=dnix osvers="$3" ;; @@ -1604,6 +1881,9 @@ EOM dgux) osname=dgux osvers="$3" ;; + dynixptx*) osname=dynixptx + osvers="$3" + ;; freebsd) osname=freebsd osvers="$3" ;; genix) osname=genix ;; @@ -1615,7 +1895,7 @@ EOM *) osvers="$3" ;; esac ;; - irix) osname=irix + irix*) osname=irix case "$3" in 4*) osvers=4 ;; 5*) osvers=5 ;; @@ -1624,16 +1904,25 @@ EOM ;; linux) osname=linux case "$3" in - 1*) osvers=1 ;; *) osvers="$3" ;; esac ;; netbsd*) osname=netbsd osvers="$3" ;; + news-os) osvers="$3" + case "$3" in + 4*) osname=newsos4 ;; + *) osname=newsos ;; + esac + ;; bsd386) osname=bsd386 osvers=`$uname -r` ;; + powerux | power_ux | powermax_os | powermaxos | \ + powerunix | power_unix) osname=powerux + osvers="$3" + ;; next*) osname=next ;; solaris) osname=solaris case "$3" in @@ -1660,10 +1949,10 @@ EOM ultrix) osname=ultrix osvers="$3" ;; - osf1) case "$5" in + osf1|mls+) case "$5" in alpha) osname=dec_osf - osvers=`echo "$3" | sed 's/^[vt]//'` + osvers=`echo "$3" | sed 's/^[xvt]//'` ;; hp*) osname=hp_osf1 ;; mips) osname=mips_osf1 ;; @@ -1672,10 +1961,13 @@ EOM uts) osname=uts osvers="$3" ;; + qnx) osname=qnx + osvers="$4" + ;; $2) case "$osname" in *isc*) ;; *freebsd*) ;; - svr*) + svr*) : svr4.x or possibly later case "svr$3" in ${osname}*) @@ -1728,16 +2020,20 @@ EOM ;; esac else - if test -f /vmunix -a -f news_os.sh; then - (what /vmunix | ../UU/tr '[A-Z]' '[a-z]') > ../UU/kernel.what 2>&1 - if $contains news-os ../UU/kernel.what >/dev/null 2>&1; then + if test -f /vmunix -a -f $src/hints/news_os.sh; then + (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1 + if $contains news-os UU/kernel.what >/dev/null 2>&1; then osname=news_os fi - $rm -f ../UU/kernel.what + $rm -f UU/kernel.what elif test -d c:/.; then set X $myuname osname=os2 osvers="$5" + if test -n "$DJDIR"; then + osname=dos + osvers=djgpp + fi fi fi @@ -1756,17 +2052,17 @@ EOM *) case "$osvers" in '') dflt=$file ;; - *) if $test -f $file.sh ; then + *) if $test -f $src/hints/$file.sh ; then dflt=$file - elif $test -f $xfile.sh ; then + elif $test -f $src/hints/$xfile.sh ; then dflt=$xfile - elif $test -f $xxfile.sh ; then + elif $test -f $src/hints/$xxfile.sh ; then dflt=$xxfile - elif $test -f $xxxfile.sh ; then + elif $test -f $src/hints/$xxxfile.sh ; then dflt=$xxxfile - elif $test -f $xxxxfile.sh ; then + elif $test -f $src/hints/$xxxxfile.sh ; then dflt=$xxxxfile - elif $test -f "${osname}.sh" ; then + elif $test -f "$src/hints/${osname}.sh" ; then dflt="${osname}" else dflt=none @@ -1775,25 +2071,46 @@ EOM esac ;; esac + if $test -f Policy.sh ; then + case "$dflt" in + *Policy*) ;; + none) dflt="Policy" ;; + *) dflt="Policy $dflt" ;; + esac + fi ;; *) dflt=`echo $hintfile | $sed 's/\.sh$//'` ;; esac + if $test -f Policy.sh ; then + $cat <> ../UU/config.sh + if $test X$file = XPolicy -a -f Policy.sh; then + . Policy.sh + $cat Policy.sh >> UU/config.sh + elif $test -f $src/hints/$file.sh; then + . $src/hints/$file.sh + $cat $src/hints/$file.sh >> UU/config.sh elif $test X$tans = X -o X$tans = Xnone ; then : nothing else @@ -1801,11 +2118,11 @@ EOM echo "$file.sh does not exist" dflt=$file rp="hint to use instead?" - . ../UU/myread + . UU/myread for file in $ans; do - if $test -f "$file.sh"; then - . ./$file.sh - $cat $file.sh >> ../UU/config.sh + if $test -f "$src/hints/$file.sh"; then + . $src/hints/$file.sh + $cat $src/hints/$file.sh >> UU/config.sh elif $test X$ans = X -o X$ans = Xnone ; then : nothing else @@ -1817,13 +2134,11 @@ EOM hint=recommended : Remember our hint file for later. - if $test -f "$file.sh" ; then + if $test -f "$src/hints/$file.sh" ; then hintfile="$file" else hintfile='' fi - - cd .. fi cd UU ;; @@ -1834,6 +2149,7 @@ cd UU tmp_c="$c" cd .. cp $config_sh config.sh 2>/dev/null + chmod +w config.sh . ./config.sh cd UU cp ../config.sh . @@ -1873,13 +2189,94 @@ case "$ans" in none) osname='' ;; *) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;; esac +echo " " +case "$osvers" in + ''|' ') + case "$hintfile" in + ''|' '|none) dflt=none ;; + *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'` + dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'` + case "$dflt" in + ''|' ') dflt=none ;; + esac + ;; + esac + ;; + *) dflt="$osvers" ;; +esac +rp="Operating system version?" +. ./myread +case "$ans" in +none) osvers='' ;; +*) osvers="$ans" ;; +esac + : who configured the system -cf_time=`$date 2>&1` -(logname > .temp) >/dev/null 2>&1 -$test -s .temp || (whoami > .temp) >/dev/null 2>&1 -$test -s .temp || echo unknown > .temp -cf_by=`$cat .temp` -$rm -f .temp +cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1` +cf_by=`(logname) 2>/dev/null` +case "$cf_by" in +"") + cf_by=`(whoami) 2>/dev/null` + case "$cf_by" in + "") cf_by=unknown ;; + esac ;; +esac + +: set up the script used to warn in case of inconsistency +cat <whoa +$startsh +EOS +cat <<'EOSC' >>whoa +dflt=y +echo " " +echo "*** WHOA THERE!!! ***" >&4 +echo " The $hint value for \$$var on this machine was \"$was\"!" >&4 +rp=" Keep the $hint value?" +. ./myread +case "$ans" in +y) td=$was; tu=$was;; +esac +EOSC + +: function used to set $1 to $val +setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef; +case "$val$was" in +$define$undef) . ./whoa; eval "$var=\$td";; +$undef$define) . ./whoa; eval "$var=\$tu";; +*) eval "$var=$val";; +esac' + +cat < tmparch 2>&1 ; then - tarch=`$sed -e 's/ /_/g' -e 's/$/'"-$osname/" tmparch` + tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \ + -e 's/$/'"-$osname/" tmparch` else tarch="$osname" fi @@ -1908,17 +2306,36 @@ case "$archname" in esac rp='What is your architecture name' . ./myread -archname="$ans" +case "$usethreads" in +$define) echo "Threads selected." >&4 + case "$ans" in + *-thread) echo "...and architecture name already ends in -thread." >&4 + archname="$ans" + ;; + *) archname="$ans-thread" + echo "...setting architecture name to $archname." >&4 + ;; + esac + ;; +*) archname="$ans" ;; +esac myarchname="$tarch" - : is AFS running? echo " " -if test -d /afs; then +case "$afs" in +$define|true) afs=true ;; +$undef|false) afs=false ;; +*) if test -d /afs; then + afs=true + else + afs=false + fi + ;; +esac +if $afs; then echo "AFS may be running... I'll be extra cautious then..." >&4 - afs=true else echo "AFS does not seem to be running..." >&4 - afs=false fi : decide how portable to be. Allow command line overrides. @@ -1968,7 +2385,10 @@ chmod +x filexp $eunicefix filexp : now set up to get a file name -cat <<'EOSC' >getfile +cat <getfile +$startsh +EOS +cat <<'EOSC' >>getfile tilde='' fullpath='' already='' @@ -2282,12 +2702,21 @@ baserev=5.0 : get the patchlevel echo " " echo "Getting the current patchlevel..." >&4 -if $test -r ../patchlevel.h;then - patchlevel=`awk '/PATCHLEVEL/ {print $3}' < ../patchlevel.h` +if $test -r $rsrc/patchlevel.h;then + patchlevel=`awk '/PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h` + subversion=`awk '/SUBVERSION/ {print $3}' $rsrc/patchlevel.h` else patchlevel=0 + subversion=0 fi -echo "(You have $package $baserev PL$patchlevel.)" +$echo $n "(You have $package" $c +case "$package" in +"*$baserev") ;; +*) $echo $n " $baserev" $c ;; +esac +$echo $n " patchlevel $patchlevel" $c +test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c +echo ".)" : set the prefixup variable, to restore leading tilda escape prefixup='case "$prefixexp" in @@ -2300,18 +2729,27 @@ set archlib archlib eval $prefixit case "$archlib" in '') - case "$privlib" in - '') - dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib` - set dflt - eval $prefixup - ;; - *) version=`echo $baserev $patchlevel | $awk '{print $1 + $2/1000.0}'` - dflt="$privlib/$archname/$version" - ;; - esac + case "$privlib" in + '') dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib` + set dflt + eval $prefixup + ;; + *) if test 0 -eq "$subversion"; then + version=`LC_ALL=C; export LC_ALL; \ + echo $baserev $patchlevel | \ + $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'` + else + version=`LC_ALL=C; export LC_ALL; \ + echo $baserev $patchlevel $subversion | \ + $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'` + fi + dflt="$privlib/$archname/$version" ;; -*) dflt="$archlib";; + esac + ;; +*) + dflt="$archlib" + ;; esac cat <whoa -dflt=y +: make some quick guesses about what we are up against echo " " -echo "*** WHOA THERE!!! ***" >&4 -echo " The $hint value for \$$var on this machine was \"$was\"!" >&4 -rp=" Keep the $hint value?" -. ./myread -case "$ans" in -y) td=$was; tu=$was;; -esac -EOSC - -: function used to set $1 to $val -setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef; -case "$val$was" in -$define$undef) . ./whoa; eval "$var=\$td";; -$undef$define) . ./whoa; eval "$var=\$tu";; -*) eval "$var=$val";; -esac' - -: determine where old public architecture dependent libraries might be -case "$oldarchlib" in -'') case "$privlib" in - '') ;; - *) dflt="$privlib/$archname" - ;; - esac - ;; -*) dflt="$oldarchlib" - ;; -esac -if $test ! -d "$dflt/auto"; then - dflt=none -fi -cat <bsd +echo exit 1 >usg +echo exit 1 >v7 +echo exit 1 >osf1 +echo exit 1 >eunice +echo exit 1 >xenix +echo exit 1 >venix +echo exit 1 >os2 +d_bsd="$undef" +$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null +if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1 +then + echo "Looks kind of like an OSF/1 system, but we'll see..." + echo exit 0 >osf1 +elif test `echo abc | tr a-z A-Z` = Abc ; then + xxx=`./loc addbib blurfl $pth` + if $test -f $xxx; then + echo "Looks kind of like a USG system with BSD features, but we'll see..." + echo exit 0 >bsd + echo exit 0 >usg + else + if $contains SIGTSTP foo >/dev/null 2>&1 ; then + echo "Looks kind of like an extended USG system, but we'll see..." + else + echo "Looks kind of like a USG system, but we'll see..." + fi + echo exit 0 >usg + fi +elif $contains SIGTSTP foo >/dev/null 2>&1 ; then + echo "Looks kind of like a BSD system, but we'll see..." + d_bsd="$define" + echo exit 0 >bsd +else + echo "Looks kind of like a Version 7 system, but we'll see..." + echo exit 0 >v7 +fi +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 + d_eunice="$define" +: it so happens the Eunice I know will not run shell scripts in Unix format + ;; +*) + echo " " + echo "Congratulations. You aren't running Eunice." + d_eunice="$undef" + ;; +esac +: Detect OS2. The p_ variable is set above in the Head.U unit. +case "$p_" in +:) ;; +*) + $cat <<'EOI' +I have the feeling something is not exactly right, however...don't tell me... +lemme think...does HAL ring a bell?...no, of course, you're only running OS/2! +EOI + echo exit 0 >os2 + ;; +esac +if test -f /xenix; then + echo "Actually, this looks more like a XENIX system..." + echo exit 0 >xenix + d_xenix="$define" +else + echo " " + echo "It's not Xenix..." + d_xenix="$undef" +fi +chmod +x xenix +$eunicefix xenix +if test -f /venix; then + echo "Actually, this looks more like a VENIX system..." + echo exit 0 >venix +else + echo " " + if ./xenix; then + : null + else + echo "Nor is it Venix..." + fi +fi +chmod +x bsd usg v7 osf1 eunice xenix venix os2 +$eunicefix bsd usg v7 osf1 eunice xenix venix os2 +$rm -f foo -In 5.001, Perl stored architecutre-dependent library files in a library -with a name such as $privlib/$archname, -and this directory contained files from the standard extensions and -files from any additional extensions you might have added. Starting -with version 5.002, all the architecture-dependent standard extensions -will go into $archlib, -while locally-added extensions will go into -$sitearch. +: see if setuid scripts can be secure +$cat <reflect + chmod +x,u+s reflect + ./reflect >flect 2>&1 + if $contains "/dev/fd" flect >/dev/null; then + echo "Congratulations, your kernel has secure setuid scripts!" >&4 + val="$define" + else + $cat <&4 + dflt=n;; + "$undef") + echo "Well, the $hint value is *not* secure." >&4 + dflt=n;; + *) echo "Well, the $hint value *is* secure." >&4 + dflt=y;; + esac + ;; + *) + $rm -f reflect flect + echo "#!$ls" >reflect + chmod +x,u+s reflect + echo >flect + chmod a+w flect + echo '"su" will (probably) prompt you for '"$ans's password." + su $ans -c './reflect >flect' + if $contains "/dev/fd" flect >/dev/null; then + echo "Okay, it looks like setuid scripts are secure." >&4 + dflt=y + else + echo "I don't think setuid scripts are secure." >&4 + dflt=n + fi + ;; + esac + rp='Does your kernel have *secure* setuid scripts?' + . ./myread + case "$ans" in + [yY]*) val="$define";; + *) val="$undef";; + esac + fi +else + echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4 + echo "(That's for file descriptors, not floppy disks.)" + val="$undef" +fi +set d_suidsafe +eval $setvar + +$rm -f reflect flect + +: now see if they want to do setuid emulation +echo " " +val="$undef" +case "$d_suidsafe" in +"$define") + val="$undef" + echo "No need to emulate SUID scripts since they are secure here." >& 4 + ;; +*) + $cat <pdp11.c <<'EOP' -main() { +The installation process will also create a directory for +architecture-dependent site-specific extensions and modules. + +EOM +fn=nd~+ +rp='Pathname for the site-specific architecture-dependent library files?' +. ./getfile +if $test "X$sitearchexp" != "X$ansexp"; then + installsitearch='' +fi +sitearch="$ans" +sitearchexp="$ansexp" +if $afs; then + $cat <pdp11.c <<'EOP' +main() { #ifdef pdp11 exit(0); #else @@ -2847,8 +3475,8 @@ main() { #endif } EOP - cc -o pdp11 pdp11.c >/dev/null 2>&1 - if ./pdp11 2>/dev/null; then + ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1 + if $test -f pdp11 && ./pdp11 2>/dev/null; then dflt='unsplit split' else tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge` @@ -2882,6 +3510,8 @@ put the appropriate flags later when it asks you for other cc and ld flags. Venix systems may wish to put "none" and let the compiler figure things out. (In the following question multiple model names should be space separated.) +The default for most systems is "none". + EOM rp="Which memory models are supported?" . ./myread @@ -2977,86 +3607,7 @@ none) echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4 ;; esac - -: make some quick guesses about what we are up against -echo " " -$echo $n "Hmm... $c" -echo exit 1 >bsd -echo exit 1 >usg -echo exit 1 >v7 -echo exit 1 >osf1 -echo exit 1 >eunice -echo exit 1 >xenix -echo exit 1 >venix -d_bsd="$undef" -$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null -if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1 -then - echo "Looks kind of like an OSF/1 system, but we'll see..." - echo exit 0 >osf1 -elif test `echo abc | tr a-z A-Z` = Abc ; then - xxx=`./loc addbib blurfl $pth` - if $test -f $xxx; then - echo "Looks kind of like a USG system with BSD features, but we'll see..." - echo exit 0 >bsd - echo exit 0 >usg - else - if $contains SIGTSTP foo >/dev/null 2>&1 ; then - echo "Looks kind of like an extended USG system, but we'll see..." - else - echo "Looks kind of like a USG system, but we'll see..." - fi - echo exit 0 >usg - fi -elif $contains SIGTSTP foo >/dev/null 2>&1 ; then - echo "Looks kind of like a BSD system, but we'll see..." - d_bsd="$define" - echo exit 0 >bsd -else - echo "Looks kind of like a Version 7 system, but we'll see..." - echo exit 0 >v7 -fi -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 - d_eunice="$define" -: it so happens the Eunice I know will not run shell scripts in Unix format - ;; -*) - echo " " - echo "Congratulations. You aren't running Eunice." - d_eunice="$undef" - ;; -esac -if test -f /xenix; then - echo "Actually, this looks more like a XENIX system..." - echo exit 0 >xenix - d_xenix="$define" -else - echo " " - echo "It's not Xenix..." - d_xenix="$undef" -fi -chmod +x xenix -$eunicefix xenix -if test -f /venix; then - echo "Actually, this looks more like a VENIX system..." - echo exit 0 >venix -else - echo " " - if ./xenix; then - : null - else - echo "Nor is it Venix..." - fi -fi -chmod +x bsd usg v7 osf1 eunice xenix venix -$eunicefix bsd usg v7 osf1 eunice xenix venix -$rm -f foo +$rm -f pdp11.* pdp11 : see if we need a special compiler echo " " @@ -3079,8 +3630,9 @@ if ./usg; then esac;; *) dflt="$cc";; esac - $cat <<'EOM' -On some systems the default C compiler will not resolve multiple global + case "$dflt" in + *M*) $cat <<'EOM' +On some older 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 @@ -3088,7 +3640,9 @@ memory model to use!) If you have the Gnu C compiler, you might wish to use that instead. EOM - rp="What command will force resolution on this system?" + ;; + esac + rp="Use which C compiler?" . ./myread cc="$ans" else @@ -3100,6 +3654,12 @@ else . ./myread cc="$ans" fi +: Look for a hint-file generated 'call-back-unit'. Now that the +: user has specified the compiler, we may need to set or change some +: other defaults. +if $test -f cc.cbu; then + . ./cc.cbu +fi echo " " echo "Checking for GNU cc in disguise and/or its version number..." >&4 $cat >gccvers.c <&4 -cat <<'EOT' >testcpp.c -#define ABC abc -#define XYZ xyz -ABC.XYZ -EOT -cd .. -echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin -chmod 755 cppstdin -wrapper=`pwd`/cppstdin -ok='false' -cd UU +: Set private lib path +case "$plibpth" in +'') if ./mips; then + plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib" + fi;; +esac +case "$libpth" in +' ') dlist='';; +'') dlist="$loclibpth $plibpth $glibpth";; +*) dlist="$libpth";; +esac -if $test "X$cppstdin" != "X" && \ - $cppstdin $cppminus testcpp.out 2>&1 && \ - $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 -then - echo "You used to use $cppstdin $cppminus so we'll use that again." - case "$cpprun" in - '') echo "But let's see if we can live without a wrapper..." ;; - *) - if $cpprun $cpplast testcpp.out 2>&1 && \ - $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 - then - echo "(And we'll use $cpprun $cpplast to preprocess directly.)" - ok='true' - else - echo "(However, $cpprun $cpplast does not work, let's see...)" - fi - ;; +: Now check and see which directories actually exist, avoiding duplicates +libpth='' +for xxx in $dlist +do + if $test -d $xxx; then + case " $libpth " in + *" $xxx "*) ;; + *) libpth="$libpth $xxx";; + esac + fi +done +$cat <<'EOM' + +Some systems have incompatible or broken versions of libraries. Among +the directories listed in the question below, please remove any you +know not to be holding relevant libraries, and add any that are needed. +Say "none" for none. + +EOM +case "$libpth" in +'') dflt='none';; +*) + set X $libpth + shift + dflt=${1+"$@"} + ;; +esac +rp="Directories to use for library searches?" +. ./myread +case "$ans" in +none) libpth=' ';; +*) libpth="$ans";; +esac + +: compute shared library extension +case "$so" in +'') + if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then + dflt='sl' + else + dflt='so' + fi + ;; +*) dflt="$so";; +esac +$cat <testcpp.out 2>&1; \ - $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then - echo "Yup, it does." - x_cpp="$cc -E" - x_minus=''; -elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ - $cc -E - testcpp.out 2>&1; \ - $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then - echo "Yup, it does." - x_cpp="$cc -E" - x_minus='-'; -elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ - $cc -P testcpp.out 2>&1; \ - $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then - echo "Yipee, that works!" - x_cpp="$cc -P" - x_minus=''; -elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ +: Which makefile gets called first. This is used by make depend. +case "$firstmakefile" in +'') firstmakefile='makefile';; +esac + +: Looking for optional libraries +echo " " +echo "Checking for optional libraries..." >&4 +case "$libs" in +' '|'') dflt='';; +*) dflt="$libs";; +esac +case "$libswanted" in +'') libswanted='c_s';; +esac +for thislib in $libswanted; do + + if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then + echo "Found -l$thislib (shared)." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l$thislib";; + esac + elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then + echo "Found -l$thislib (shared)." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l$thislib";; + esac + elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then + echo "Found -l$thislib." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l$thislib";; + esac + elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then + echo "Found -l$thislib." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l$thislib";; + esac + elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then + echo "Found -l${thislib}_s." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l${thislib}_s";; + esac + elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then + echo "Found -l$thislib." + case " $dflt " in + *"-l$thislib "*);; + *) dflt="$dflt -l$thislib";; + esac + else + echo "No -l$thislib." + fi +done +set X $dflt +shift +dflt="$*" +case "$libs" in +'') dflt="$dflt";; +*) dflt="$libs";; +esac +case "$dflt" in +' '|'') dflt='none';; +esac + +$cat <&4 +cat <<'EOT' >testcpp.c +#define ABC abc +#define XYZ xyz +ABC.XYZ +EOT +cd .. +echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin +chmod 755 cppstdin +wrapper=`pwd`/cppstdin +ok='false' +cd UU + +if $test "X$cppstdin" != "X" && \ + $cppstdin $cppminus testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 +then + echo "You used to use $cppstdin $cppminus so we'll use that again." + case "$cpprun" in + '') echo "But let's see if we can live without a wrapper..." ;; + *) + if $cpprun $cpplast testcpp.out 2>&1 && \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 + then + echo "(And we'll use $cpprun $cpplast to preprocess directly.)" + ok='true' + else + echo "(However, $cpprun $cpplast does not work, let's see...)" + fi + ;; + esac +else + case "$cppstdin" in + '') ;; + *) + echo "Good old $cppstdin $cppminus does not seem to be of any help..." + ;; + esac +fi + +if $ok; then + : nothing +elif echo 'Maybe "'"$cc"' -E" will work...'; \ + $cc -E testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus=''; +elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \ + $cc -E - testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yup, it does." + x_cpp="$cc -E" + x_minus='-'; +elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \ + $cc -P testcpp.out 2>&1; \ + $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then + echo "Yipee, that works!" + x_cpp="$cc -P" + x_minus=''; +elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \ $cc -P - testcpp.out 2>&1; \ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then echo "At long last!" @@ -3321,61 +4075,15 @@ case "$cppstdin" in esac $rm -f testcpp.c testcpp.out -: Set private lib path -case "$plibpth" in -'') if ./mips; then - plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib" - fi;; -esac -case "$libpth" in -' ') dlist='';; -'') dlist="$loclibpth $plibpth $glibpth";; -*) dlist="$libpth";; -esac - -: Now check and see which directories actually exist, avoiding duplicates -libpth='' -for xxx in $dlist -do - if $test -d $xxx; then - case " $libpth " in - *" $xxx "*) ;; - *) libpth="$libpth $xxx";; - esac - fi -done -$cat <<'EOM' - -Some systems have incompatible or broken versions of libraries. Among -the directories listed in the question below, please remove any you -know not to be holding relevant libraries, and add any that are needed. -Say "none" for none. - -EOM -case "$libpth" in -'') dflt='none';; -*) - set X $libpth - shift - dflt=${1+"$@"} - ;; -esac -rp="Directories to use for library searches?" -. ./myread -case "$ans" in -none) libpth=' ';; -*) libpth="$ans";; -esac - : determine optimize, if desired, or use for debug flag also case "$optimize" in -' ') dflt='none';; +' '|$undef) dflt='none';; '') dflt='-O';; *) dflt="$optimize";; esac $cat <cpp1.out 2>/dev/null && \ - $cpprun -DLFRULB=bar $ftry $cpplast cpp2.out 2>/dev/null && \ $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \ $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1 @@ -3528,7 +4236,6 @@ EOM esac : flags used in final linking phase - case "$ldflags" in '') if ./venix; then dflt='-i -z' @@ -3547,7 +4254,7 @@ for thislibdir in $libpth; do case " $loclibpth " in *" $thislibdir "*) case "$dflt " in - "-L$thislibdir ") ;; + *"-L$thislibdir "*) ;; *) dflt="$dflt -L$thislibdir" ;; esac ;; @@ -3583,7 +4290,7 @@ rmlist="$rmlist pdp11" : coherency check echo " " echo "Checking your choice of C compiler and flags for coherency..." >&4 -set X $cc $optimize $ccflags $ldflags try.c -o try +set X $cc $optimize $ccflags $ldflags -o try try.c $libs shift $cat >try.msg < try.c <<'EOF' #include -main() { exit(0); } +main() { printf("Ok\n"); exit(0); } EOF dflt=y -if sh -c "$cc $optimize $ccflags try.c -o try $ldflags" >>try.msg 2>&1; then +if sh -c "$cc $optimize $ccflags $ldflags -o try try.c $libs" >>try.msg 2>&1; then if sh -c './try' >>try.msg 2>&1; then - dflt=n + xxx=`./try` + case "$xxx" in + "Ok") dflt=n ;; + *) echo 'The program compiled OK, but produced no output.' >> try.msg + case " $libs " in + *" -lsfio "*) + cat >> try.msg <<'EOQS' +If $libs contains -lsfio, and sfio is mis-configured, then it +sometimes (apparently) runs and exits with a 0 status, but with no +output! It may have to do with sfio's use of _exit vs. exit. + +EOQS + rp="You have a big problem. Shall I abort Configure" + dflt=y + ;; + esac + ;; + esac else echo "The program compiled OK, but exited with status $?." >>try.msg rp="You have a problem. Shall I abort Configure" @@ -3614,7 +4338,7 @@ else fi case "$dflt" in y) - $cat try.msg + $cat try.msg >&4 case "$knowitall" in '') echo "(The supplied flags might be incorrect with this C compiler.)" @@ -3634,145 +4358,75 @@ n) echo "OK, that should do.";; esac $rm -f try try.* core -: compute shared library extension -case "$so" in +: define a shorthand compile call +compile=' +mc_file=$1; +shift; +$cc $optimize $ccflags $ldflags -o ${mc_file}$_exe $* ${mc_file}.c $libs > /dev/null 2>&1;' + +echo " " +echo "Checking for GNU C Library..." >&4 +cat >gnulibc.c </dev/null 2>&1; then + val="$define" + echo "You are using the GNU C Library" +else + val="$undef" + echo "You are not using the GNU C Library" +fi +$rm -f gnulibc* +set d_gnulibc +eval $setvar + +: see if nm is to be used to determine whether a symbol is defined or not +case "$usenm" in '') - if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then - dflt='sl' - else - dflt='so' - fi + case "$d_gnulibc" in + $define) + dflt=n + ;; + *) + dflt=`egrep 'inlibc|csym' ../Configure | wc -l 2>/dev/null` + if $test $dflt -gt 20; then + dflt=y + else + dflt=n + fi + ;; + esac + ;; +*) + case "$usenm" in + true) dflt=y;; + *) dflt=n;; + esac ;; -*) dflt="$so";; esac $cat <&4 -case "$libs" in -' '|'') dflt='';; -*) dflt="$libs";; -esac -case "$libswanted" in -'') libswanted='c_s';; -esac -for thislib in $libswanted; do - - if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`; $test -f "$xxx"; then - echo "Found -l$thislib (shared)." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l$thislib";; - esac - elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then - echo "Found -l$thislib (shared)." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l$thislib";; - esac - elif xxx=`./loc lib$thislib.a X $libpth`; $test -f "$xxx"; then - echo "Found -l$thislib." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l$thislib";; - esac - elif xxx=`./loc $thislib.a X $libpth`; $test -f "$xxx"; then - echo "Found -l$thislib." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l$thislib";; - esac - elif xxx=`./loc lib${thislib}_s.a X $libpth`; $test -f "$xxx"; then - echo "Found -l${thislib}_s." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l${thislib}_s";; - esac - elif xxx=`./loc Slib$thislib.a X $xlibpth`; $test -f "$xxx"; then - echo "Found -l$thislib." - case " $dflt " in - *"-l$thislib "*);; - *) dflt="$dflt -l$thislib";; - esac - else - echo "No -l$thislib." - fi -done -set X $dflt -shift -dflt="$*" -case "$libs" in -'') dflt="$dflt";; -*) dflt="$libs";; -esac -case "$dflt" in -' '|'') dflt='none';; -esac - -$cat </dev/null` - if $test $dflt -gt 20; then - dflt=y - else - dflt=n - fi - ;; -*) - case "$usenm" in - true) dflt=y;; - *) dflt=n;; - esac - ;; -esac -$cat < /dev/null 2>&1; then + nm_so_opt='--dynamic' + fi + ;; + esac + ;; +esac + case "$runnm" in true) : get list of predefined functions in a handy place @@ -3799,7 +4468,7 @@ echo " " case "$libc" in '') libc=unknown case "$libs" in - *-lc_s*) libc=`./loc libc_s.a $libc $libpth` + *-lc_s*) libc=`./loc libc_s$_a $libc $libpth` esac ;; esac @@ -3817,13 +4486,15 @@ case "$libs" in : elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then : - elif try=`./loc lib$thislib.a X $libpth`; $test -f "$try"; then + elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then + : + elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then : elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then : elif try=`./loc $thislib X $libpth`; $test -f "$try"; then : - elif try=`./loc Slib$thislib.a X $xlibpth`; $test -f "$try"; then + elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then : else try='' @@ -3838,21 +4509,23 @@ esac xxx=normal case "$libc" in unknown) - set /usr/ccs/lib/libc.$so - $test -r $1 || set /usr/lib/libc.$so - $test -r $1 || set /usr/shlib/libc.$so - $test -r $1 || \ - set `echo blurfl; echo /usr/lib/libc.$so.[0-9]* | \ - tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e ' - h - s/[0-9][0-9]*/0000&/g - s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g - G - s/\n/ /' | \ - sort | $sed -e 's/^.* //'` - eval set \$$# - $test -r $1 || set /lib/libc.$so - $test -r $1 || set /lib/libsys_s.a + set /lib/libc.$so + for xxx in $libpth; do + $test -r $1 || set $xxx/libc.$so + : The messy sed command sorts on library version numbers. + $test -r $1 || \ + set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \ + tr ' ' '\012' | egrep -v '\.[A-Za-z]*$' | $sed -e ' + h + s/[0-9][0-9]*/0000&/g + s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g + G + s/\n/ /' | \ + sort | $sed -e 's/^.* //'` + eval set \$$# + done + $test -r $1 || set /usr/ccs/lib/libc.$so + $test -r $1 || set /lib/libsys_s$_a ;; *) set blurfl @@ -3871,25 +4544,25 @@ elif $test -r /lib/libc && $test -r /lib/clib; then fi elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then echo "Your C library seems to be in $libc, as you said before." -elif $test -r $incpath/usr/lib/libc.a; then - libc=$incpath/usr/lib/libc.a; +elif $test -r $incpath/usr/lib/libc$_a; then + libc=$incpath/usr/lib/libc$_a; echo "Your C library seems to be in $libc. That's fine." -elif $test -r /lib/libc.a; then - libc=/lib/libc.a; +elif $test -r /lib/libc$_a; then + libc=/lib/libc$_a; echo "Your C library seems to be in $libc. You're normal." else - if tans=`./loc libc.a blurfl/dyick $libpth`; $test -r "$tans"; then + if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then : elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then libnames="$libnames "`./loc clib blurfl/dyick $libpth` elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then : - elif tans=`./loc Slibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then + elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then : - elif tans=`./loc Mlibc.a blurfl/dyick $xlibpth`; $test -r "$tans"; then + elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then : else - tans=`./loc Llibc.a blurfl/dyick $xlibpth` + tans=`./loc Llibc$_a blurfl/dyick $xlibpth` fi if $test -r "$tans"; then echo "Your C library seems to be in $tans, of all places." @@ -3937,13 +4610,19 @@ $sed 's/^/ /' libnames >&4 echo " " $echo $n "This may take a while...$c" >&4 -nm $nm_opt $* 2>/dev/null >libc.tmp +for file in $*; do + case $file in + *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;; + *) $nm $nm_opt $file 2>/dev/null;; + esac +done >libc.tmp + $echo $n ".$c" $grep fprintf libc.tmp > libc.ptf xscan='eval "libc.list"; $echo $n ".$c" >&4' xrun='eval "libc.list"; echo "done" >&4' xxx='[ADTSIW]' -if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx //p'";\ +if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun @@ -3980,6 +4659,10 @@ elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun +elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then @@ -3988,8 +4671,12 @@ elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\ eval $xscan;\ $contains '^fprintf$' libc.list >/dev/null 2>&1; then eval $xrun +elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun else - nm -p $* 2>/dev/null >libc.tmp + $nm -p $* 2>/dev/null >libc.tmp $grep fprintf libc.tmp > libc.ptf if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1 @@ -3998,22 +4685,22 @@ else eval $xrun else echo " " - echo "nm didn't seem to work right. Trying ar instead..." >&4 + echo "$nm didn't seem to work right. Trying ar instead..." >&4 com='' 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 + $sed -e "s/\\$_o\$//" < libc.tmp > libc.list echo "Ok." >&4 else echo "ar didn't seem to work right." >&4 echo "Maybe this is a Cray...trying bld instead..." >&4 - if bld t $libc | $sed -e 's/.*\///' -e 's/\.o:.*$//' > libc.list + 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 + $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list ar t $thisname >>libc.tmp done echo "Ok." >&4 @@ -4034,6 +4721,100 @@ fi esac $rm -f libnames libpath +: determine filename position in cpp output +echo " " +echo "Computing filename position in cpp output for #include directives..." >&4 +echo '#include ' > foo.c +$cat >fieldn </dev/null | \ +$grep '^[ ]*#.*stdio\.h' | \ +while read cline; do + pos=1 + set \$cline + while $test \$# -gt 0; do + if $test -r \`echo \$1 | $tr -d '"'\`; then + echo "\$pos" + exit 0 + fi + shift + pos=\`expr \$pos + 1\` + done +done +EOF +chmod +x fieldn +fieldn=`./fieldn` +$rm -f foo.c fieldn +case $fieldn in +'') pos='???';; +1) pos=first;; +2) pos=second;; +3) pos=third;; +*) pos="${fieldn}th";; +esac +echo "Your cpp writes the filename in the $pos field of the line." + +: locate header file +$cat >findhdr <" > foo\$\$.c +$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \ +$grep "^[ ]*#.*\$wanted" | \ +while read cline; do + name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\` + case "\$name" in + */\$wanted) echo "\$name"; exit 0;; + *) name='';; + esac; +done; +$rm -f foo\$\$.c; +case "\$name" in +'') exit 1;; +esac +EOF +chmod +x findhdr + +: define an alternate in-header-list? function +inhdr='echo " "; td=$define; tu=$undef; yyy=$@; +cont=true; xxf="echo \"<\$1> found.\" >&4"; +case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";; +*) xxnf="echo \"<\$1> NOT found, ...\" >&4";; +esac; +case $# in 4) instead=instead;; *) instead="at last";; esac; +while $test "$cont"; do + xxx=`./findhdr $1` + var=$2; eval "was=\$$2"; + if $test "$xxx" && $test -r "$xxx"; + then eval $xxf; + eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td"; + cont=""; + else eval $xxnf; + eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi; + set $yyy; shift; shift; yyy=$@; + case $# in 0) cont="";; + 2) xxf="echo \"but I found <\$1> $instead.\" >&4"; + xxnf="echo \"and I did not find <\$1> either.\" >&4";; + *) xxf="echo \"but I found <\$1\> instead.\" >&4"; + xxnf="echo \"there is no <\$1>, ...\" >&4";; + esac; +done; +while $test "$yyy"; +do set $yyy; var=$2; eval "was=\$$2"; + eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; + set $yyy; shift; shift; yyy=$@; +done' + +: see if dld is available +set dld.h i_dld +eval $inhdr + : is a C symbol defined? csym='tlook=$1; case "$3" in @@ -4056,7 +4837,7 @@ yes) fi;; *) echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c; - if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1; + if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1; then tval=true; else tval=false; fi; @@ -4097,965 +4878,1595 @@ yes) esac;; esac' -: Check how to convert floats to strings. +: see if dlopen exists +xxx_runnm="$runnm" +runnm=false +set dlopen d_dlopen +eval $inlibc +runnm="$xxx_runnm" + +: determine which dynamic loading, if any, to compile in echo " " -echo "Checking for an efficient way to convert floats to strings." -$cat >try.c <<'EOP' -#ifdef TRY_gconvert -#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b)) -#endif -#ifdef TRY_gcvt -#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) -#endif -#ifdef TRY_sprintf -#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) -#endif -main() { - char buf[64]; - Gconvert(1.0, 8, 0, buf); - if (buf[0] != '1' || buf[1] != '\0') - exit(1); - Gconvert(0.0, 8, 0, buf); - if (buf[0] != '0' || buf[1] != '\0') - exit(1); - Gconvert(-1.0, 8, 0, buf); - if (buf[0] != '-' || buf[1] != '1' || buf[2] != '\0') - exit(1); - exit(0); -} -EOP -case "$d_Gconvert" in -gconvert*) xxx_list='gconvert gcvt sprintf' ;; -gcvt*) xxx_list='gcvt gconvert sprintf' ;; -sprintf*) xxx_list='sprintf gconvert gcvt' ;; -*) xxx_list='gconvert gcvt sprintf' ;; +dldir="ext/DynaLoader" +case "$usedl" in +$define|y|true) + dflt='y' + usedl="$define" + ;; +$undef|n|false) + dflt='n' + usedl="$undef" + ;; +*) + dflt='n' + case "$d_dlopen" in + $define) dflt='y' ;; + esac + case "$i_dld" in + $define) dflt='y' ;; + esac + : Does a dl_xxx.xs file exist for this operating system + $test -f ../$dldir/dl_${osname}.xs && dflt='y' + ;; esac - -for xxx_convert in $xxx_list; do - echo "Trying $xxx_convert" - $rm -f try try.o - if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \ - try.c $libs > /dev/null 2>&1 ; then - echo "$xxx_convert" found. >&4 - if ./try; then - echo "Good, $xxx_convert drops a trailing decimal point." - echo "I'll use $xxx_convert to convert floats into a string." >&4 - break; +rp="Do you wish to use dynamic loading?" +. ./myread +usedl="$ans" +case "$ans" in +y*) usedl="$define" + case "$dlsrc" in + '') + if $test -f ../$dldir/dl_${osname}.xs ; then + dflt="$dldir/dl_${osname}.xs" + elif $test "$d_dlopen" = "$define" ; then + dflt="$dldir/dl_dlopen.xs" + elif $test "$i_dld" = "$define" ; then + dflt="$dldir/dl_dld.xs" else - echo "But $xxx_convert keeps a trailing decimal point". + dflt='' fi - else - echo "$xxx_convert NOT found." >&4 - fi -done - -case "$xxx_convert" in -gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;; -gcvt) d_Gconvert='gcvt((x),(n),(b))' ;; -*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;; -esac + ;; + *) dflt="$dldir/$dlsrc" + ;; + esac + echo "The following dynamic loading files are available:" + : Can not go over to $dldir because getfile has path hard-coded in. + cd ..; ls -C $dldir/dl*.xs; cd UU + rp="Source file to use for dynamic loading" + fn="fne" + . ./getfile + usedl="$define" + : emulate basename + dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'` -: Initialize h_fcntl -h_fcntl=false + $cat << EOM -: Initialize h_sysfile -h_sysfile=false +Some systems may require passing special flags to $cc -c to +compile modules that will be used to create a shared library. +To use no flags, say "none". -: determine filename position in cpp output -echo " " -echo "Computing filename position in cpp output for #include directives..." >&4 -echo '#include ' > foo.c -$cat >fieldn </dev/null | \ -$grep '^[ ]*#.*stdio\.h' | \ -while read cline; do - pos=1 - set \$cline - while $test \$# -gt 0; do - if $test -r \`echo \$1 | $tr -d '"'\`; then - echo "\$pos" - exit 0 - fi - shift - pos=\`expr \$pos + 1\` - done -done -EOF -chmod +x fieldn -fieldn=`./fieldn` -$rm -f foo.c fieldn -case $fieldn in -'') pos='???';; -1) pos=first;; -2) pos=second;; -3) pos=third;; -*) pos="${fieldn}th";; -esac -echo "Your cpp writes the filename in the $pos field of the line." +EOM + case "$cccdlflags" in + '') case "$gccversion" in + '') case "$osname" in + hpux) dflt='+z' ;; + next) dflt='none' ;; + irix*) dflt='-KPIC' ;; + svr4*|esix*|solaris) + case "$ccflags" in + *-DDEBUGGING*) dflt='-KPIC' ;; + *) dflt='-Kpic' ;; + esac + ;; + sunos) dflt='-pic' ;; + *) dflt='none' ;; + esac + ;; + *) case "$osname" in + svr4*|esix*|solaris) + case "$ccflags" in + *-DDEBUGGING*) dflt='-fPIC' ;; + *) dflt='-fpic' ;; + esac + ;; + *) dflt='-fpic' ;; + esac ;; + esac ;; + *) dflt="$cccdlflags" ;; + esac + rp="Any special flags to pass to $cc -c to compile shared library modules?" + . ./myread + case "$ans" in + none) cccdlflags=' ' ;; + *) cccdlflags="$ans" ;; + esac -: locate header file -$cat >findhdr <" > foo\$\$.c -$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \ -$grep "^[ ]*#.*\$wanted" | \ -while read cline; do - name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\` - case "\$name" in - */\$wanted) echo "\$name"; exit 0;; - *) name='';; - esac; -done; -$rm -f foo\$\$.c; -case "\$name" in -'') exit 1;; -esac -EOF -chmod +x findhdr + cat << EOM -: access call always available on UNIX -set access d_access -eval $inlibc +Some systems use ld to create libraries that can be dynamically loaded, +while other systems (such as those using ELF) use $cc. -: locate the flags for 'access()' -case "$d_access" in -"$define") - echo " " - $cat >access.c <<'EOCP' -#include -#ifdef I_FCNTL +EOM + case "$ld" in + '') $cat >try.c <<'EOM' +/* Test for whether ELF binaries are produced */ #include -#endif -#ifdef I_SYS_FILE -#include -#endif -#ifdef I_UNISTD -#include -#endif +#include main() { - exit(R_OK); -} -EOCP - : check sys/file.h first, no particular reason here - if $test `./findhdr sys/file.h` && \ - $cc $cppflags -DI_SYS_FILE access.c -o access >/dev/null 2>&1 ; then - h_sysfile=true; - echo " defines the *_OK access constants." >&4 - elif $test `./findhdr fcntl.h` && \ - $cc $cppflags -DI_FCNTL access.c -o access >/dev/null 2>&1 ; then - h_fcntl=true; - echo " defines the *_OK access constants." >&4 - elif $test `./findhdr unistd.h` && \ - $cc $cppflags -DI_UNISTD access.c -o access >/dev/null 2>&1 ; then - echo " defines the *_OK access constants." >&4 + char b[4]; + int i = open("a.out",O_RDONLY); + if(i == -1) + exit(1); /* fail */ + if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F') + exit(0); /* succeed (yes, it's ELF) */ else - echo "I can't find the four *_OK access constants--I'll use mine." >&4 - fi - ;; -esac -$rm -f access* + exit(1); /* fail */ +} +EOM + if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then + cat <&4 -$cat >attrib.c <<'EOCP' -#include -void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn)); -EOCP -if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then - echo "Your C compiler doesn't fully support __attribute__." - val="$undef" - else - echo "Your C compiler supports __attribute__." - val="$define" - fi -else - echo "Your C compiler doesn't seem to understand __attribute__ at all." - val="$undef" -fi -set d_attribut -eval $setvar -$rm -f attrib* + cat << EOM -: see if bcmp exists -set bcmp d_bcmp -eval $inlibc +Some systems may require passing special flags to $ld to create a +library that can be dynamically loaded. If your ld flags include +-L/other/path options to locate libraries outside your loader's normal +search path, you may need to specify those -L options here as well. To +use no flags, say "none". -: see if bcopy exists -set bcopy d_bcopy -eval $inlibc - -: see if setpgrp exists -set setpgrp d_setpgrp -eval $inlibc +EOM + case "$lddlflags" in + '') case "$osname" in + hpux) dflt='-b' ;; + linux|irix*) dflt='-shared' ;; + next) dflt='none' ;; + solaris) dflt='-G' ;; + sunos) dflt='-assert nodefinitions' ;; + svr4*|esix*) dflt="-G $ldflags" ;; + *) dflt='none' ;; + esac + ;; + *) dflt="$lddlflags" ;; + esac -: see which flavor of setpgrp is in use -case "$d_setpgrp" in -"$define") - echo " " - $cat >set.c </dev/null 2>&1; then - ./set 2>/dev/null - case $? in - 0) echo "You have to use setpgrp() instead of setpgrp(pid, pgrp)." >&4 - val="$undef";; - *) echo "You have to use setpgrp(pid, pgrp) instead of setpgrp()." >&4 - val="$define";; +: Try to guess additional flags to pick up local libraries. +for thisflag in $ldflags; do + case "$thisflag" in + -L*) + case " $dflt " in + *" $thisflag "*) ;; + *) dflt="$dflt $thisflag" ;; esac - else - if ./usg; then - xxx="USG one, i.e. you use setpgrp()." - val="$undef" - else - xxx="BSD one, i.e. you use setpgrp(pid, pgrp)." - val="$define" - fi - echo "Assuming your setpgrp is a $xxx" >&4 - fi - ;; -*) val="$undef";; + ;; + esac +done + +case "$dflt" in +'') dflt='none' ;; esac -set d_bsdpgrp -eval $setvar -$rm -f set set.c -: see if bzero exists -set bzero d_bzero -eval $inlibc + rp="Any special flags to pass to $ld to create a dynamically loaded library?" + . ./myread + case "$ans" in + none) lddlflags=' ' ;; + *) lddlflags="$ans" ;; + esac -: check for length of integer -echo " " -case "$intsize" in -'') - echo "Checking to see how big your integers are..." >&4 - $cat >try.c <<'EOCP' -#include -main() -{ - printf("%d\n", sizeof(int)); - exit(0); -} -EOCP - if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then - intsize=`./try` - echo "Your integers are $intsize bytes long." - else - dflt='4' - echo "(I can't seem to compile the test program. Guessing...)" - rp="What is the size of an integer (in bytes)?" - . ./myread - intsize="$ans" - fi + cat <&4 + +To build perl, you must add the current working directory to your +$xxx environment variable before running make. You can do +this with + $xxx=\`pwd\`; export $xxx +for Bourne-style shells, or + setenv $xxx \`pwd\` +for Csh-style shells. You *MUST* do this before running make. + +EOM + ;; + *) useshrplib='false' ;; + esac ;; esac -$rm -f try.c try -: see if signal is declared as pointer to function returning int or void -echo " " -xxx=`./findhdr signal.h` -$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null -if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then - echo "You have int (*signal())() instead of void." >&4 - val="$undef" -elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then - echo "You have void (*signal())() instead of int." >&4 - val="$define" -elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then - echo "You have int (*signal())() instead of void." >&4 - val="$undef" -else - case "$d_voidsig" in +case "$useshrplib" in +true) + case "$libperl" in '') - echo "I can't determine whether signal handler returns void or int..." >&4 - dflt=void - rp="What type does your signal handler return?" - . ./myread - case "$ans" in - v*) val="$define";; - *) val="$undef";; - esac;; - "$define") - echo "As you already told me, signal handler returns void." >&4;; - *) - echo "As you already told me, signal handler returns int." >&4;; + # Figure out a good name for libperl.so. Since it gets stored in + # a version-specific architecture-dependent library, the version + # number isn't really that important, except for making cc/ld happy. + # + # A name such as libperl.so.3.1 + majmin="libperl.$so.$patchlevel.$subversion" + # A name such as libperl.so.301 + majonly=`echo $patchlevel $subversion | + $awk '{printf "%d%02d", $1, $2}'` + majonly=libperl.$so.$majonly + # I'd prefer to keep the os-specific stuff here to a minimum, and + # rely on figuring it out from the naming of libc. + case "${osname}${osvers}" in + next4*) + dflt=libperl.5.$so + # XXX How handle the --version stuff for MAB? + ;; + linux*) # ld won't link with a bare -lperl otherwise. + dflt=libperl.$so + ;; + *) # Try to guess based on whether libc has major.minor. + case "$libc" in + *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;; + *libc.$so.[0-9]*) dflt=$majonly ;; + *) dflt=libperl.$so ;; + esac + ;; + esac + ;; + *) dflt=$libperl + ;; esac -fi -set d_voidsig -eval $setvar -case "$d_voidsig" in -"$define") signal_t="void";; -*) signal_t="int";; -esac -$rm -f $$.tmp + cat << EOM -: check for ability to cast large floats to 32-bit ints. -echo " " -echo 'Checking whether your C compiler can cast large floats to int32.' >&4 -if $test "$intsize" -eq 4; then - xxx=int -else - xxx=long -fi -$cat >try.c < -#include -$signal_t blech() { exit(3); } -main() -{ - $xxx i32; - double f; - int result = 0; - signal(SIGFPE, blech); +I need to select a good name for the shared libperl. If your system uses +library names with major and minor numbers, then you might want something +like $majmin. Alternatively, if your system uses a single version +number for shared libraries, then you might want to use $majonly. +Or, your system might be quite happy with a simple libperl.$so. - f = (double) 0x7fffffff; - f = 10 * f; - i32 = ($xxx) f; +Since the shared libperl will get installed into a version-specific +architecture-dependent directory, the version number of the shared perl +library probably isn't important, so the default should be o.k. - if (i32 != ($xxx) f) - result |= 1; - exit(result); -} -EOCP -if $cc -o try $ccflags try.c >/dev/null 2>&1; then - ./try - yyy=$? -else - echo "(I can't seem to compile the test program--assuming it can't)" - yyy=1 -fi -case "$yyy" in -0) val="$define" - echo "Yup, it can." +EOM + rp='What name do you want to give to the shared libperl?' + . ./myread + libperl=$ans + echo "Ok, I'll use $libperl" ;; -*) val="$undef" - echo "Nope, it can't." +*) + libperl="libperl${_a}" ;; esac -set d_casti32 -eval $setvar -$rm -f try try.* -: check for ability to cast negative floats to unsigned -echo " " -echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4 -$cat >try.c < -#include -$signal_t blech() { exit(7); } -$signal_t blech_in_list() { exit(4); } -unsigned long dummy_long(p) unsigned long p; { return p; } -unsigned int dummy_int(p) unsigned int p; { return p; } -unsigned short dummy_short(p) unsigned short p; { return p; } -main() -{ - double f = -123.; - unsigned long along; - unsigned int aint; - unsigned short ashort; - int result = 0; +# Detect old use of shrpdir via undocumented Configure -Dshrpdir +case "$shrpdir" in +'') ;; +*) $cat >&4 </dev/null 2>&1; then - ./try - castflags=$? -else - echo "(I can't seem to compile the test program--assuming it can't)" - castflags=7 -fi -case "$castflags" in -0) val="$define" - echo "Yup, it can." - ;; -*) val="$undef" - echo "Nope, it can't." +EOM + case "$shrpdir" in + "$archlibexp/CORE") + $cat >&4 <&4 <&4 - val="$define" - $cat >vprintf.c <<'EOF' -#include -main() { xxx("foo"); } +# How will the perl executable find the installed shared $libperl? +# Add $xxx to ccdlflags. +# If we can't figure out a command-line option, use $shrpenv to +# set env LD_RUN_PATH. The main perl makefile uses this. +shrpdir=$archlibexp/CORE +xxx='' +tmp_shrpenv='' +if "$useshrplib"; then + case "$osname" in + aix) + # We'll set it in Makefile.SH... + ;; + solaris|netbsd) + xxx="-R $shrpdir" + ;; + freebsd) + xxx="-Wl,-R$shrpdir" + ;; + linux|irix*|dec_osf) + xxx="-Wl,-rpath,$shrpdir" + ;; + next) + # next doesn't like the default... + ;; + *) + tmp_shrpenv="env LD_RUN_PATH=$shrpdir" + ;; + esac + case "$xxx" in + '') ;; + *) + # Only add $xxx if it isn't already in ccdlflags. + case " $ccdlflags " in + *" $xxx "*) ;; + *) ccdlflags="$ccdlflags $xxx" + cat <&4 -xxx(va_alist) -va_dcl -{ - va_list args; - char buf[10]; +Adding $xxx to the flags +passed to $ld so that the perl executable will find the +installed shared $libperl. - va_start(args); - exit((unsigned long)vsprintf(buf,"%s",args) > 10L); -} -EOF - if $cc $ccflags vprintf.c -o vprintf >/dev/null 2>&1 && ./vprintf; then - echo "Your vsprintf() returns (int)." >&4 - val2="$undef" - else - echo "Your vsprintf() returns (char*)." >&4 - val2="$define" - fi -else - echo 'vprintf() NOT found.' >&4 - val="$undef" - val2="$undef" +EOM + ;; + esac + ;; + esac fi -set d_vprintf -eval $setvar -val=$val2 -set d_charvspr -eval $setvar - -: see if chown exists -set chown d_chown -eval $inlibc - -: see if chroot exists -set chroot d_chroot -eval $inlibc - -: see if chsize exists -set chsize d_chsize -eval $inlibc +# Respect a hint or command-line value. +case "$shrpenv" in +'') shrpenv="$tmp_shrpenv" ;; +esac -: check for const keyword -echo " " -echo 'Checking to see if your C compiler knows about "const"...' >&4 -$cat >const.c <<'EOCP' -typedef struct spug { int drokk; } spug; -main() -{ - const char *foo; - const spug y; -} -EOCP -if $cc -c $ccflags const.c >/dev/null 2>&1 ; then - val="$define" - echo "Yup, it does." -else - val="$undef" - echo "Nope, it doesn't." +: see if we have to deal with yellow pages, now NIS. +if $test -d /usr/etc/yp || $test -d /etc/yp; then + if $test -f /usr/etc/nibindd; then + echo " " + echo "I'm fairly confident you're on a NeXT." + echo " " + rp='Do you get the hosts file via NetInfo?' + dflt=y + case "$hostcat" in + nidump*) ;; + '') ;; + *) dflt=n;; + esac + . ./myread + case "$ans" in + y*) hostcat='nidump hosts .';; + *) case "$hostcat" in + nidump*) hostcat='';; + esac + ;; + esac + fi + case "$hostcat" in + nidump*) ;; + *) + case "$hostcat" in + *ypcat*) dflt=y;; + '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then + dflt=y + else + dflt=n + fi;; + *) dflt=n;; + esac + echo " " + rp='Are you getting the hosts file via yellow pages?' + . ./myread + case "$ans" in + y*) hostcat='ypcat hosts';; + *) hostcat='cat /etc/hosts';; + esac + ;; + esac fi -set d_const -eval $setvar +case "$hostcat" in +'') hostcat='cat /etc/hosts';; +esac +case "$groupcat" in +'') groupcat='cat /etc/group';; +esac +case "$passcat" in +'') passcat='cat /etc/passwd';; +esac -: see if crypt exists +: now get the host name echo " " -if set crypt val -f d_crypt; eval $csym; $val; then - echo 'crypt() found.' >&4 - val="$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 +echo "Figuring out host name..." >&4 +case "$myhostname" in +'') cont=true + echo 'Maybe "hostname" will work...' + if tans=`sh -c hostname 2>&1` ; then + myhostname=$tans + phostname=hostname + cont='' fi - if $test -z "$cryptlib"; then - cryptlib=`./loc libcrypt.a "" $libpth` - else - cryptlib=-lcrypt + ;; +*) cont='';; +esac +if $test "$cont"; then + if ./xenix; then + echo 'Oh, dear. Maybe "/etc/systemid" is the key...' + if tans=`cat /etc/systemid 2>&1` ; then + myhostname=$tans + phostname='cat /etc/systemid' + echo "Whadyaknow. Xenix always was a bit strange..." + cont='' + fi + elif $test -r /etc/systemid; then + echo "(What is a non-Xenix system doing with /etc/systemid?)" fi - if $test -z "$cryptlib"; then - echo 'crypt() NOT found.' >&4 - val="$undef" +fi +if $test "$cont"; then + echo 'No, maybe "uuname -l" will work...' + if tans=`sh -c 'uuname -l' 2>&1` ; then + myhostname=$tans + phostname='uuname -l' else - val="$define" + echo 'Strange. Maybe "uname -n" will work...' + if tans=`sh -c 'uname -n' 2>&1` ; then + myhostname=$tans + phostname='uname -n' + else + echo 'Oh well, maybe I can mine it out of whoami.h...' + if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then + myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'` + phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h" + else + case "$myhostname" in + '') echo "Does this machine have an identity crisis or something?" + phostname='';; + *) + echo "Well, you said $myhostname before..." + phostname='echo $myhostname';; + esac + fi + fi fi fi -set d_crypt -eval $setvar - -: get csh whereabouts -case "$csh" in -'csh') val="$undef" ;; -*) val="$define" ;; -esac -set d_csh -eval $setvar -full_csh=$csh - -: see if cuserid exists -set cuserid d_cuserid -eval $inlibc - -: define an alternate in-header-list? function -inhdr='echo " "; td=$define; tu=$undef; yyy=$@; -cont=true; xxf="echo \"<\$1> found.\" >&4"; -case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";; -*) xxnf="echo \"<\$1> NOT found, ...\" >&4";; -esac; -case $# in 4) instead=instead;; *) instead="at last";; esac; -while $test "$cont"; do - xxx=`./findhdr $1` - var=$2; eval "was=\$$2"; - if $test "$xxx" && $test -r "$xxx"; - then eval $xxf; - eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td"; - cont=""; - else eval $xxnf; - eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi; - set $yyy; shift; shift; yyy=$@; - case $# in 0) cont="";; - 2) xxf="echo \"but I found <\$1> $instead.\" >&4"; - xxnf="echo \"and I did not find <\$1> either.\" >&4";; - *) xxf="echo \"but I found <\$1\> instead.\" >&4"; - xxnf="echo \"there is no <\$1>, ...\" >&4";; - esac; -done; -while $test "$yyy"; -do set $yyy; var=$2; eval "was=\$$2"; - eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; - set $yyy; shift; shift; yyy=$@; -done' - -: see if this is a limits.h system -set limits.h i_limits -eval $inhdr - -: see if this is a float.h system -set float.h i_float -eval $inhdr +: you do not want to know about this +set $myhostname +myhostname=$1 -: See if number of significant digits in a double precision number is known -echo " " -$cat >dbl_dig.c < -#endif -#ifdef I_FLOAT -#include -#endif -#ifdef DBL_DIG -printf("Contains DBL_DIG"); -#endif -EOM -$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null -if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then - echo "DBL_DIG found." >&4 - val="$define" -else - echo "DBL_DIG NOT found." >&4 - val="$undef" +: verify guess +if $test "$myhostname" ; then + dflt=y + rp='Your host name appears to be "'$myhostname'".'" Right?" + . ./myread + case "$ans" in + y*) ;; + *) myhostname='';; + esac fi -$rm -f dbl_dig.? -set d_dbl_dig -eval $setvar -: see if difftime exists -set difftime d_difftime -eval $inlibc +: bad guess or no guess +while $test "X$myhostname" = X ; do + dflt='' + rp="Please type the (one word) name of your host:" + . ./myread + myhostname="$ans" +done -: see if this is a dirent system -echo " " -if xinc=`./findhdr dirent.h`; $test "$xinc"; then - val="$define" - echo " found." >&4 -else - val="$undef" - if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then - echo " found." >&4 - echo " " - else - xinc=`./findhdr sys/ndir.h` - fi - echo " NOT found." >&4 -fi -set i_dirent -eval $setvar +: translate upper to lower if necessary +case "$myhostname" in +*[A-Z]*) + echo "(Normalizing case in your host name)" + myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'` + ;; +esac -: Look for type of directory structure. +case "$myhostname" in +*.*) + dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"` + myhostname=`expr "X$myhostname" : "X\([^.]*\)\."` + echo "(Trimming domain name from host name--host name is now $myhostname)" + ;; +*) case "$mydomain" in + '') + { + test "X$hostcat" = "Xypcat hosts" && + ypmatch "$myhostname" hosts 2>/dev/null |\ + $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \ + $test -s hosts + } || { + $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ / + /[ ]$myhostname[ . ]/p" > hosts + } + tmp_re="[ . ]" + $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ } + END { print sum }" hosts` = x1 || tmp_re="[ ]" + dflt=.`$awk "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \ + hosts | $sort | $uniq | \ + $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"` + case `$echo X$dflt` in + X*\ *) echo "(Several hosts in /etc/hosts matched hostname)" + dflt=. + ;; + X.) echo "(You do not have fully-qualified names in /etc/hosts)" + ;; + esac + case "$dflt" in + .) + tans=`./loc resolv.conf X /etc /usr/etc` + if $test -f "$tans"; then + echo "(Attempting domain name extraction from $tans)" + dflt=.`$sed -n -e 's/ / /g' \ + -e 's/^search *\([^ ]*\).*/\1/p' $tans \ + | ./tr '[A-Z]' '[a-z]' 2>/dev/null` + case "$dflt" in + .) dflt=.`$sed -n -e 's/ / /g' \ + -e 's/^domain *\([^ ]*\).*/\1/p' $tans \ + | ./tr '[A-Z]' '[a-z]' 2>/dev/null` + ;; + esac + fi + ;; + esac + case "$dflt" in + .) echo "(No help from resolv.conf either -- attempting clever guess)" + dflt=.`sh -c domainname 2>/dev/null` + case "$dflt" in + '') dflt='.';; + .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;; + esac + ;; + esac + case "$dflt" in + .) echo "(Lost all hope -- silly guess then)" + dflt='.uucp' + ;; + esac + $rm -f hosts + ;; + *) dflt="$mydomain";; + esac;; +esac echo " " -$cppstdin $cppflags $cppminus < "$xinc" > try.c +rp="What is your domain name?" +. ./myread +tans="$ans" +case "$ans" in +'') ;; +.*) ;; +*) tans=".$tans";; +esac +mydomain="$tans" -case "$direntrytype" in -''|' ') - case "$i_dirent" in - $define) guess1='struct dirent' ;; - *) guess1='struct direct' ;; - esac - ;; -*) guess1="$direntrytype" +: translate upper to lower if necessary +case "$mydomain" in +*[A-Z]*) + echo "(Normalizing case in your domain name)" + mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'` ;; esac -case "$guess1" in -'struct dirent') guess2='struct direct' ;; -*) guess2='struct dirent' ;; +: a little sanity check here +case "$phostname" in +'') ;; +*) + case `$phostname | ./tr '[A-Z]' '[a-z]'` in + $myhostname$mydomain|$myhostname) ;; + *) + case "$phostname" in + sed*) + echo "(That doesn't agree with your whoami.h file, by the way.)" + ;; + *) + echo "(That doesn't agree with your $phostname command, by the way.)" + ;; + esac + ;; + esac + ;; esac - -if $contains "$guess1" try.c >/dev/null 2>&1; then - direntrytype="$guess1" - echo "Your directory entries are $direntrytype." >&4 -elif $contains "$guess2" try.c >/dev/null 2>&1; then - direntrytype="$guess2" - echo "Your directory entries seem to be $direntrytype." >&4 -else - echo "I don't recognize your system's directory entries." >&4 - rp="What type is used for directory entries on this system?" - dflt="$guess1" - . ./myread - direntrytype="$ans" -fi -$rm -f try.c - -: see if the directory entry stores field length -echo " " -$cppstdin $cppflags $cppminus < "$xinc" > try.c -if $contains 'd_namlen' try.c >/dev/null 2>&1; then - echo "Good, your directory entry keeps length information in d_namlen." >&4 - val="$define" -else - echo "Your directory entry does not know about the d_namlen field." >&4 - val="$undef" -fi -set d_dirnamlen -eval $setvar -$rm -f try.c - -: see if dlerror exists -xxx_runnm="$runnm" -runnm=false -set dlerror d_dlerror -eval $inlibc -runnm="$xxx_runnm" +$cat <&4 <try.c <<'EOM' -/* Test for whether ELF binaries are produced */ -#include -#include -main() { - char b[4]; - int i = open("a.out",O_RDONLY); - if(i == -1) - exit(1); /* fail */ - if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F') - exit(0); /* succeed (yes, it's ELF) */ - else - exit(1); /* fail */ -} -EOM - if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then - cat <. Versions 5.003_02 and later of perl allow alternate IO +mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still +the default. This abstraction layer can use AT&T's sfio (if you already +have sfio installed) or regular stdio. Using PerlIO with sfio may cause +problems with some extension modules. Using PerlIO with stdio is safe, +but it is slower than plain stdio and therefore is not the default. + +If this doesn't make any sense to you, just accept the default 'n'. +EOM +case "$useperlio" in +$define|true|[yY]*) dflt='y';; +*) dflt='n';; +esac +rp='Use the experimental PerlIO abstraction layer?' +. ./myread +case "$ans" in +y|Y) + val="$define" + ;; +*) + echo "Ok, doing things the stdio way" + val="$undef" + ;; esac +set useperlio +eval $setvar - rp="Any special flags to pass to $ld to create a dynamically loaded library?" - . ./myread - case "$ans" in - none) lddlflags=' ' ;; - *) lddlflags="$ans" ;; - esac +: Check how to convert floats to strings. +echo " " +echo "Checking for an efficient way to convert floats to strings." +$cat >try.c <<'EOP' +#ifdef TRY_gconvert +#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b)) +char *myname = "gconvert"; +#endif +#ifdef TRY_gcvt +#define Gconvert(x,n,t,b) gcvt((x),(n),(b)) +char *myname = "gcvt"; +#endif +#ifdef TRY_sprintf +#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) +char *myname = "sprintf"; +#endif - cat < -Some systems may require passing special flags to $cc to indicate that -the resulting executable will use dynamic linking. To use no flags, -say "none". +int +checkit(expect, got) +char *expect; +char *got; +{ + if (strcmp(expect, got)) { + printf("%s oddity: Expected %s, got %s\n", + myname, expect, got); + exit(1); + } +} -EOM - case "$ccdlflags" in - '') case "$osname" in - hpux) dflt='-Wl,-E' ;; - linux) dflt='-rdynamic' ;; - next) dflt='none' ;; - sunos) dflt='none' ;; - *) dflt='none' ;; - esac ;; - *) dflt="$ccdlflags" ;; - esac - rp="Any special flags to pass to $cc to use dynamic loading?" - . ./myread - case "$ans" in - none) ccdlflags=' ' ;; - *) ccdlflags="$ans" ;; - esac - ;; -*) usedl="$undef" - ld='ld' - dlsrc='dl_none.xs' - lddlflags='' - ccdlflags='' - ;; +int +main() +{ + char buf[64]; + buf[63] = '\0'; + + /* This must be 1st test on (which?) platform */ + /* Alan Burlison */ + Gconvert(0.1, 8, 0, buf); + checkit("0.1", buf); + + Gconvert(1.0, 8, 0, buf); + checkit("1", buf); + + Gconvert(0.0, 8, 0, buf); + checkit("0", buf); + + Gconvert(-1.0, 8, 0, buf); + checkit("-1", buf); + + /* Some Linux gcvt's give 1.e+5 here. */ + Gconvert(100000.0, 8, 0, buf); + checkit("100000", buf); + + /* Some Linux gcvt's give -1.e+5 here. */ + Gconvert(-100000.0, 8, 0, buf); + checkit("-100000", buf); + + exit(0); +} +EOP +case "$d_Gconvert" in +gconvert*) xxx_list='gconvert gcvt sprintf' ;; +gcvt*) xxx_list='gcvt gconvert sprintf' ;; +sprintf*) xxx_list='sprintf gconvert gcvt' ;; +*) xxx_list='gconvert gcvt sprintf' ;; +esac + +for xxx_convert in $xxx_list; do + echo "Trying $xxx_convert" + $rm -f try try$_o + set try -DTRY_$xxx_convert + if eval $compile; then + echo "$xxx_convert" found. >&4 + if ./try; then + echo "I'll use $xxx_convert to convert floats into a string." >&4 + break; + else + echo "...But $xxx_convert didn't work as I expected." + fi + else + echo "$xxx_convert NOT found." >&4 + fi +done + +case "$xxx_convert" in +gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;; +gcvt) d_Gconvert='gcvt((x),(n),(b))' ;; +*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;; +esac + +: Initialize h_fcntl +h_fcntl=false + +: Initialize h_sysfile +h_sysfile=false + +: access call always available on UNIX +set access d_access +eval $inlibc + +: locate the flags for 'access()' +case "$d_access" in +"$define") + echo " " + $cat >access.c <<'EOCP' +#include +#ifdef I_FCNTL +#include +#endif +#ifdef I_SYS_FILE +#include +#endif +#ifdef I_UNISTD +#include +#endif +main() { + exit(R_OK); +} +EOCP + : check sys/file.h first, no particular reason here + if $test `./findhdr sys/file.h` && \ + $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then + h_sysfile=true; + echo " defines the *_OK access constants." >&4 + elif $test `./findhdr fcntl.h` && \ + $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then + h_fcntl=true; + echo " defines the *_OK access constants." >&4 + elif $test `./findhdr unistd.h` && \ + $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then + echo " defines the *_OK access constants." >&4 + else + echo "I can't find the four *_OK access constants--I'll use mine." >&4 + fi + ;; +esac +$rm -f access* + +: see if alarm exists +set alarm d_alarm +eval $inlibc + +: Look for GNU-cc style attribute checking +echo " " +echo "Checking whether your compiler can handle __attribute__ ..." >&4 +$cat >attrib.c <<'EOCP' +#include +void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn)); +EOCP +if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then + if $contains 'warning' attrib.out >/dev/null 2>&1; then + echo "Your C compiler doesn't fully support __attribute__." + val="$undef" + else + echo "Your C compiler supports __attribute__." + val="$define" + fi +else + echo "Your C compiler doesn't seem to understand __attribute__ at all." + val="$undef" +fi +set d_attribut +eval $setvar +$rm -f attrib* + +: see if bcmp exists +set bcmp d_bcmp +eval $inlibc + +: see if bcopy exists +set bcopy d_bcopy +eval $inlibc + +: see if this is a unistd.h system +set unistd.h i_unistd +eval $inhdr + +: see if getpgrp exists +set getpgrp d_getpgrp +eval $inlibc + +case "$d_getpgrp" in +"$define") + echo " " + echo "Checking to see which flavor of getpgrp is in use..." + $cat >set.c < +#ifdef I_UNISTD +# include +#endif +main() +{ + if (getuid() == 0) { + printf("(I see you are running Configure as super-user...)\n"); + setuid(1); + } +#ifdef TRY_BSD_PGRP + if (getpgrp(1) == 0) + exit(0); +#else + if (getpgrp() > 0) + exit(0); +#endif + exit(1); +} +EOP + if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo "You have to use getpgrp(pid) instead of getpgrp()." >&4 + val="$define" + elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo "You have to use getpgrp() instead of getpgrp(pid)." >&4 + val="$undef" + else + echo "I can't seem to compile and run the test program." + if ./usg; then + xxx="a USG one, i.e. you use getpgrp()." + else + # SVR4 systems can appear rather BSD-ish. + case "$i_unistd" in + $undef) + xxx="a BSD one, i.e. you use getpgrp(pid)." + val="$define" + ;; + $define) + xxx="probably a USG one, i.e. you use getpgrp()." + val="$undef" + ;; + esac + fi + echo "Assuming your getpgrp is $xxx" >&4 + fi + ;; +*) val="$undef";; +esac +set d_bsdgetpgrp +eval $setvar +$rm -f set set.c + +: see if setpgrp exists +set setpgrp d_setpgrp +eval $inlibc + +case "$d_setpgrp" in +"$define") + echo " " + echo "Checking to see which flavor of setpgrp is in use..." + $cat >set.c < +#ifdef I_UNISTD +# include +#endif +main() +{ + if (getuid() == 0) { + printf("(I see you are running Configure as super-user...)\n"); + setuid(1); + } +#ifdef TRY_BSD_PGRP + if (-1 == setpgrp(1, 1)) + exit(0); +#else + if (setpgrp() != -1) + exit(0); +#endif + exit(1); +} +EOP + if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4 + val="$define" + elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then + echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4 + val="$undef" + else + echo "(I can't seem to compile and run the test program.)" + if ./usg; then + xxx="a USG one, i.e. you use setpgrp()." + else + # SVR4 systems can appear rather BSD-ish. + case "$i_unistd" in + $undef) + xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)." + val="$define" + ;; + $define) + xxx="probably a USG one, i.e. you use setpgrp()." + val="$undef" + ;; + esac + fi + echo "Assuming your setpgrp is $xxx" >&4 + fi + ;; +*) val="$undef";; +esac +set d_bsdsetpgrp +eval $setvar +$rm -f set set.c +: see if bzero exists +set bzero d_bzero +eval $inlibc + +: check for lengths of integral types +echo " " +case "$intsize" in +'') + echo "Checking to see how big your integers are..." >&4 + $cat >intsize.c <<'EOCP' +#include +main() +{ + printf("intsize=%d;\n", sizeof(int)); + printf("longsize=%d;\n", sizeof(long)); + printf("shortsize=%d;\n", sizeof(short)); + exit(0); +} +EOCP + set intsize + if eval $compile && ./intsize > /dev/null; then + eval `./intsize` + echo "Your integers are $intsize bytes long." + echo "Your long integers are $longsize bytes long." + echo "Your short integers are $shortsize bytes long." + else + $cat >&4 <$$.tmp 2>/dev/null +if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have int (*signal())() instead of void." >&4 + val="$undef" +elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have void (*signal())()." >&4 + val="$define" +elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then + echo "You have int (*signal())() instead of void." >&4 + val="$undef" +elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then + echo "You have void (*signal())()." >&4 + val="$define" +else + case "$d_voidsig" in + '') + echo "I can't determine whether signal handler returns void or int..." >&4 + dflt=void + rp="What type does your signal handler return?" + . ./myread + case "$ans" in + v*) val="$define";; + *) val="$undef";; + esac;; + "$define") + echo "As you already told me, signal handler returns void." >&4 + val="$define" + ;; + *) echo "As you already told me, signal handler returns int." >&4 + val="$undef" + ;; + esac +fi +set d_voidsig +eval $setvar +case "$d_voidsig" in +"$define") signal_t="void";; +*) signal_t="int";; +esac +$rm -f $$.tmp + +: check for ability to cast large floats to 32-bit ints. +echo " " +echo 'Checking whether your C compiler can cast large floats to int32.' >&4 +if $test "$intsize" -eq 4; then + xxx=int +else + xxx=long +fi +$cat >try.c < +#include +$signal_t blech() { exit(3); } +main() +{ + $xxx i32; + double f; + int result = 0; + signal(SIGFPE, blech); + + f = (double) 0x7fffffff; + f = 10 * f; + i32 = ($xxx) f; + + if (i32 != ($xxx) f) + result |= 1; + exit(result); +} +EOCP +set try +if eval $compile; then + ./try + yyy=$? +else + echo "(I can't seem to compile the test program--assuming it can't)" + yyy=1 +fi +case "$yyy" in +0) val="$define" + echo "Yup, it can." + ;; +*) val="$undef" + echo "Nope, it can't." + ;; +esac +set d_casti32 +eval $setvar +$rm -f try try.* + +: check for ability to cast negative floats to unsigned +echo " " +echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4 +$cat >try.c < +#include +$signal_t blech() { exit(7); } +$signal_t blech_in_list() { exit(4); } +unsigned long dummy_long(p) unsigned long p; { return p; } +unsigned int dummy_int(p) unsigned int p; { return p; } +unsigned short dummy_short(p) unsigned short p; { return p; } +main() +{ + double f = -123.; + unsigned long along; + unsigned int aint; + unsigned short ashort; + int result = 0; + + signal(SIGFPE, blech); + along = (unsigned long)f; + aint = (unsigned int)f; + ashort = (unsigned short)f; + if (along != (unsigned long)-123) + result |= 1; + if (aint != (unsigned int)-123) + result |= 1; + if (ashort != (unsigned short)-123) + result |= 1; + f = (double)0x40000000; + f = f + f; + along = 0; + along = (unsigned long)f; + if (along != 0x80000000) + result |= 2; + f -= 1.; + along = 0; + along = (unsigned long)f; + if (along != 0x7fffffff) + result |= 1; + f += 2.; + along = 0; + along = (unsigned long)f; + if (along != 0x80000001) + result |= 2; + if (result) + exit(result); + signal(SIGFPE, blech_in_list); + f = 123.; + along = dummy_long((unsigned long)f); + aint = dummy_int((unsigned int)f); + ashort = dummy_short((unsigned short)f); + if (along != (unsigned long)123) + result |= 4; + if (aint != (unsigned int)123) + result |= 4; + if (ashort != (unsigned short)123) + result |= 4; + exit(result); + +} +EOCP +set try +if eval $compile; then + ./try + castflags=$? +else + echo "(I can't seem to compile the test program--assuming it can't)" + castflags=7 +fi +case "$castflags" in +0) val="$define" + echo "Yup, it can." + ;; +*) val="$undef" + echo "Nope, it can't." + ;; +esac +set d_castneg +eval $setvar +$rm -f try.* + +: see if vprintf exists +echo " " +if set vprintf val -f d_vprintf; eval $csym; $val; then + echo 'vprintf() found.' >&4 + val="$define" + $cat >vprintf.c <<'EOF' +#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 + set vprintf + if eval $compile && ./vprintf; then + echo "Your vsprintf() returns (int)." >&4 + val2="$undef" + else + echo "Your vsprintf() returns (char*)." >&4 + val2="$define" + fi +else + echo 'vprintf() NOT found.' >&4 + val="$undef" + val2="$undef" +fi +set d_vprintf +eval $setvar +val=$val2 +set d_charvspr +eval $setvar + +: see if chown exists +set chown d_chown +eval $inlibc + +: see if chroot exists +set chroot d_chroot +eval $inlibc + +: see if chsize exists +set chsize d_chsize +eval $inlibc + +: check for const keyword +echo " " +echo 'Checking to see if your C compiler knows about "const"...' >&4 +$cat >const.c <<'EOCP' +typedef struct spug { int drokk; } spug; +main() +{ + const char *foo; + const spug y; +} +EOCP +if $cc -c $ccflags const.c >/dev/null 2>&1 ; then + val="$define" + echo "Yup, it does." +else + val="$undef" + echo "Nope, it doesn't." +fi +set d_const +eval $setvar + +: see if crypt exists +echo " " +if set crypt val -f d_crypt; eval $csym; $val; then + echo 'crypt() found.' >&4 + val="$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.' >&4 + val="$undef" + else + val="$define" + fi +fi +set d_crypt +eval $setvar + +: get csh whereabouts +case "$csh" in +'csh') val="$undef" ;; +*) val="$define" ;; +esac +set d_csh +eval $setvar +: Respect a hint or command line value for full_csh. +case "$full_csh" in +'') full_csh=$csh ;; esac -val="$undef" -case "$osname" in -esix*|svr4*) - case "$usedl" in - $define) - $cat <dbl_dig.c < +#endif +#ifdef I_FLOAT +#include +#endif +#ifdef DBL_DIG +printf("Contains DBL_DIG"); +#endif EOM +$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null +if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then + echo "DBL_DIG found." >&4 val="$define" - ;; - esac ;; -esac -set d_shrplib; eval $setvar -case "$d_shrplib" in -$define) - cat <&4 +else + echo "DBL_DIG NOT found." >&4 + val="$undef" +fi +$rm -f dbl_dig.? +set d_dbl_dig +eval $setvar -Be sure to add the perl source directory to the LD_LIBRARY_PATH -environment variable before running make: - LD_LIBRARY_PATH=`cd ..;pwd`; export LD_LIBRARY_PATH -or - setenv LD_LIBRARY_PATH `cd ..;pwd` +: see if difftime exists +set difftime d_difftime +eval $inlibc -EOM -;; -esac -case "$d_shrplib" in -$define) - case "$shrpdir" in - "") dflt="$archlib/CORE";; - *) dflt="$shrpdir";; +: see if this is a dirent system +echo " " +if xinc=`./findhdr dirent.h`; $test "$xinc"; then + val="$define" + echo " found." >&4 +else + val="$undef" + if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then + echo " found." >&4 + echo " " + else + xinc=`./findhdr sys/ndir.h` + fi + echo " NOT found." >&4 +fi +set i_dirent +eval $setvar + +: Look for type of directory structure. +echo " " +$cppstdin $cppflags $cppminus < "$xinc" > try.c + +case "$direntrytype" in +''|' ') + case "$i_dirent" in + $define) guess1='struct dirent' ;; + *) guess1='struct direct' ;; esac - rp="What directory should we install the shared libperl into?" - fn="d~" - . ./getfile - shrpdir="$ans" ;; -*) shrpdir='none' +*) guess1="$direntrytype" ;; esac +case "$guess1" in +'struct dirent') guess2='struct direct' ;; +*) guess2='struct dirent' ;; +esac + +if $contains "$guess1" try.c >/dev/null 2>&1; then + direntrytype="$guess1" + echo "Your directory entries are $direntrytype." >&4 +elif $contains "$guess2" try.c >/dev/null 2>&1; then + direntrytype="$guess2" + echo "Your directory entries seem to be $direntrytype." >&4 +else + echo "I don't recognize your system's directory entries." >&4 + rp="What type is used for directory entries on this system?" + dflt="$guess1" + . ./myread + direntrytype="$ans" +fi +$rm -f try.c + + +: see if the directory entry stores field length +echo " " +$cppstdin $cppflags $cppminus < "$xinc" > try.c +if $contains 'd_namlen' try.c >/dev/null 2>&1; then + echo "Good, your directory entry keeps length information in d_namlen." >&4 + val="$define" +else + echo "Your directory entry does not know about the d_namlen field." >&4 + val="$undef" +fi +set d_dirnamlen +eval $setvar +$rm -f try.c + +: see if dlerror exists +xxx_runnm="$runnm" +runnm=false +set dlerror d_dlerror +eval $inlibc +runnm="$xxx_runnm" + : see if dlfcn is available set dlfcn.h i_dlfcn eval $inhdr @@ -5117,156 +6528,52 @@ main() int mode = RTLD_LAZY ; #endif handle = dlopen("./dyna.$dlext", mode) ; - if (handle == NULL) { - printf ("1\n") ; - exit(0); - } - symbol = dlsym(handle, "fred") ; - if (symbol == NULL) { - /* try putting a leading underscore */ - symbol = dlsym(handle, "_fred") ; - if (symbol == NULL) { - printf ("2\n") ; - exit(0); - } - printf ("3\n") ; - } - else - printf ("4\n") ; - exit(0); -} -EOM - if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && - $ld $lddlflags -o dyna.$dlext dyna.o > /dev/null 2>&1 && - $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then - xxx=`./fred` - case $xxx in - 1) echo "Test program failed using dlopen." >&4 - echo "Perhaps you should not use dynamic loading." >&4;; - 2) echo "Test program failed using dlsym." >&4 - echo "Perhaps you should not use dynamic loading." >&4;; - 3) echo "dlsym needs a leading underscore" >&4 - val="$define" ;; - 4) echo "dlsym doesn't need a leading underscore." >&4;; - esac - else - echo "I can't compile and run the test program." >&4 - fi - ;; -esac - -$rm -f fred fred.? dyna.$dlext dyna.? - -set d_dlsymun -eval $setvar - -: see if setuid scripts can be secure -$cat <reflect - chmod +x,u+s reflect - ./reflect >flect 2>&1 - if $contains "/dev/fd" flect >/dev/null; then - echo "Congratulations, your kernel has secure setuid scripts!" >&4 - val="$define" - else - $cat <&4 - dflt=n;; - "$undef") - echo "Well, the $hint value is *not* secure." >&4 - dflt=n;; - *) echo "Well, the $hint value *is* secure." >&4 - dflt=y;; - esac - ;; - *) - $rm -f reflect flect - echo "#!$ls" >reflect - chmod +x,u+s reflect - echo >flect - chmod a+w flect - echo '"su" will (probably) prompt you for '"$ans's password." - su $ans -c './reflect >flect' - if $contains "/dev/fd" flect >/dev/null; then - echo "Okay, it looks like setuid scripts are secure." >&4 - dflt=y - else - echo "I don't think setuid scripts are secure." >&4 - dflt=n - fi - ;; - esac - rp='Does your kernel have *secure* setuid scripts?' - . ./myread - case "$ans" in - [yY]*) val="$define";; - *) val="$undef";; - esac - fi -else - echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4 - val="$undef" -fi -set d_suidsafe -eval $setvar - -$rm -f reflect flect - -: now see if they want to do setuid emulation -echo " " -val="$undef" -case "$d_suidsafe" in -"$define") - val="$undef" - echo "No need to emulate SUID scripts since they are secure here." >& 4 - ;; -*) - $cat < /dev/null 2>&1 && + mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && + $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && + $cc $ccflags $ldflags $cccdlflags $ccdlflags fred.c -o fred $libs > /dev/null 2>&1; then + xxx=`./fred` + case $xxx in + 1) echo "Test program failed using dlopen." >&4 + echo "Perhaps you should not use dynamic loading." >&4;; + 2) echo "Test program failed using dlsym." >&4 + echo "Perhaps you should not use dynamic loading." >&4;; + 3) echo "dlsym needs a leading underscore" >&4 + val="$define" ;; + 4) echo "dlsym doesn't need a leading underscore." >&4;; + esac + else + echo "I can't compile and run the test program." >&4 + fi ;; esac -set d_dosuid + +$rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.? + +set d_dlsymun eval $setvar : see if dup2 exists @@ -5294,7 +6601,7 @@ main() { EOCP : check sys/file.h first to get FREAD on Sun if $test `./findhdr sys/file.h` && \ - $cc $cppflags "-DI_SYS_FILE" open3.c -o open3 >/dev/null 2>&1 ; then + set open3 -DI_SYS_FILE && eval $compile; then h_sysfile=true; echo " defines the O_* constants..." >&4 if ./open3; then @@ -5305,7 +6612,7 @@ if $test `./findhdr sys/file.h` && \ val="$undef" fi elif $test `./findhdr fcntl.h` && \ - $cc "-DI_FCNTL" open3.c -o open3 >/dev/null 2>&1 ; then + set open3 -DI_FCNTL && eval $compile; then h_fcntl=true; echo " defines the O_* constants..." >&4 if ./open3; then @@ -5355,7 +6662,8 @@ main() { exit(0); } EOCP - if $cc $ccflags $ldflags try.c -o try >/dev/null 2>&1; then + set try + if eval $compile; then o_nonblock=`./try` case "$o_nonblock" in '') echo "I can't figure it out, assuming O_NONBLOCK will do.";; @@ -5433,8 +6741,10 @@ main() exit(0); /* Bye bye, thank you for playing! */ } EOCP - if $cc $ccflags $ldflags try.c -o try >/dev/null; 2>&1; then - echo "./try >try.out 2>try.ret 3>try.err || exit 4" >mtry + set try + if eval $compile; then + echo "$startsh" >mtry + echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry chmod +x mtry ./mtry >/dev/null 2>&1 case $? in @@ -5469,7 +6779,7 @@ EOCP *) echo "However, your read() returns '$status' on EOF??";; esac val="$define" - if test "$status" -eq "$rd_nodata"; then + if test "$status" = "$rd_nodata"; then echo "WARNING: you can't distinguish between EOF and no data!" val="$undef" fi @@ -5531,6 +6841,14 @@ eval $inlibc set fsetpos d_fsetpos eval $inlibc +: see if gethostbyaddr exists +set gethostbyaddr d_gethbyaddr +eval $inlibc + +: see if gethostbyname exists +set gethostbyname d_gethbyname +eval $inlibc + : see if gethostent exists set gethostent d_gethent eval $inlibc @@ -5539,8 +6857,24 @@ eval $inlibc set getlogin d_getlogin eval $inlibc -: see if getpgrp exists -set getpgrp d_getpgrp +: see if getnetbyaddr exists +set getnetbyaddr d_getnbyaddr +eval $inlibc + +: see if getnetbyname exists +set getnetbyname d_getnbyname +eval $inlibc + + +: see if getprotobyname exists +set getprotobyname d_getpbyname +eval $inlibc + +: see if getprotobynumber exists +set getprotobynumber d_getpbynumber +eval $inlibc +: see if getpgid exists +set getpgid d_getpgid eval $inlibc : see if getpgrp2 exists @@ -5555,6 +6889,33 @@ eval $inlibc set getpriority d_getprior eval $inlibc + +: see if getservbyname exists +set getservbyname d_getsbyname +eval $inlibc + +: see if getservbyport exists +set getservbyport d_getsbyport +eval $inlibc +: see if gettimeofday or ftime exists +set gettimeofday d_gettimeod +eval $inlibc +case "$d_gettimeod" in +"$undef") + set ftime d_ftime + eval $inlibc + ;; +*) + val="$undef"; set d_ftime; eval $setvar + ;; +esac +case "$d_gettimeod$d_ftime" in +"$undef$undef") + echo " " + echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4 + ;; +esac + : see if this is a netinet/in.h or sys/in.h system set netinet/in.h i_niin sys/in.h i_sysin eval $inhdr @@ -5648,6 +7009,10 @@ set d_strchr; eval $setvar val="$vali" set d_index; eval $setvar +: check whether inet_aton exists +set inet_aton d_inetaton +eval $inlibc + : Look for isascii echo " " $cat >isascii.c <<'EOCP' @@ -5661,7 +7026,8 @@ main() { exit(1); } EOCP -if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then +set isascii +if eval $compile; then echo "isascii() found." >&4 val="$define" else @@ -5787,7 +7153,7 @@ case "$ans" in y*|true) usemymalloc='y' mallocsrc='malloc.c' - mallocobj='malloc.o' + mallocobj="malloc$_o" d_mymalloc="$define" case "$libs" in *-lmalloc*) @@ -5866,6 +7232,81 @@ eval $inlibc set poll d_poll eval $inlibc + +: see whether the various POSIXish _yields exist within given cccmd +$cat >try.c < +main() { + YIELD(); + exit(0); +} +EOP +: see if pthread_yield exists within given cccmd, +: if we do not usethreads this may well end up undef. +set try -DYIELD=pthread_yield +if eval $compile; then + val="$define" + echo 'pthread_yield() found.' >&4 +else + val="$undef" + echo 'pthread_yield() NOT found.' >&4 +fi +set d_pthread_yield +eval $setvar + +: see if sched_yield exists within given cccmd, +: if we do not usethreads this may well end up undef. +set try -DYIELD=sched_yield +if eval $compile; then + val="$define" + echo 'sched_yield() found.' >&4 +else + val="$undef" + echo 'sched_yield() NOT found.' >&4 +fi +set d_sched_yield +eval $setvar +$rm -f try try.* + +: test whether pthreads are created in joinable -- aka undetached -- state +if test "X$usethreads" != X; then + echo >&4 "Checking whether pthreads are created joinable." + $cat >try.c <<'EOCP' +#include +#include +int main() { + pthread_attr_t attr; + int detachstate; + printf("%s\n", + pthread_attr_init(&attr) == 0 && + pthread_attr_getdetachstate(&attr, &detachstate) == 0 && + detachstate == PTHREAD_CREATE_DETACHED ? + "detached" : "joinable"); + exit(0); +} +EOCP + set try + if eval $compile; then + yyy=`./try` + case "$yyy" in + detached) echo "Nope, they aren't." ;; + *) echo "Yup, they are." ;; + esac + else + echo "(I can't execute the test program--assuming they are.)" + yyy=joinable + fi + $rm -f try try.* + case "$yyy" in + detached) val="$undef" ;; + *) val="$define" ;; + esac + set d_pthreads_created_joinable + eval $setvar +else + d_pthreads_created_joinable="$undef" +fi + : see if this is a pwd.h system set pwd.h i_pwd eval $inhdr @@ -5958,13 +7399,58 @@ eval $inlibc set rmdir d_rmdir eval $inlibc +: see if memory.h is available. +val='' +set memory.h val +eval $inhdr + +: See if it conflicts with string.h +case "$val" in +$define) + case "$strings" in + '') ;; + *) + $cppstdin $cppflags $cppminus < $strings > mem.h + if $contains 'memcpy' mem.h >/dev/null 2>&1; then + echo " " + echo "We won't be including ." + val="$undef" + fi + $rm -f mem.h + ;; + esac +esac +set i_memory +eval $setvar + : can bcopy handle overlapping blocks? val="$undef" case "$d_bcopy" in "$define") echo " " echo "Checking to see if your bcopy() can do overlapping copies..." >&4 - $cat >foo.c <<'EOCP' + $cat >try.c <>try.c <<'EOCP' +#include +#ifdef I_MEMORY +# include +#endif +#ifdef I_STDLIB +# include +#endif +#ifdef I_STRING +# include +#else +# include +#endif +#ifdef I_UNISTD +# include /* Needed for NetBSD */ +#endif main() { char buf[128], abc[128]; @@ -5990,19 +7476,26 @@ for (align = 7; align >= 0; align--) { exit(0); } EOCP - if $cc $ccflags $ldflags foo.c -o safebcpy $libs >/dev/null 2>&1; then - if ./safebcpy 2>/dev/null; then + set try + if eval $compile; then + if ./try 2>/dev/null; then echo "Yes, it can." val="$define" else echo "It can't, sorry." + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac fi else echo "(I can't compile the test program, so we'll assume not...)" + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac fi ;; esac -$rm -f foo.* safebcpy core +$rm -f try.* try core set d_safebcpy eval $setvar @@ -6012,7 +7505,28 @@ case "$d_memcpy" in "$define") echo " " echo "Checking to see if your memcpy() can do overlapping copies..." >&4 - $cat >foo.c <<'EOCP' + $cat >try.c <>try.c <<'EOCP' +#include +#ifdef I_MEMORY +# include +#endif +#ifdef I_STDLIB +# include +#endif +#ifdef I_STRING +# include +#else +# include +#endif +#ifdef I_UNISTD +# include /* Needed for NetBSD */ +#endif main() { char buf[128], abc[128]; @@ -6021,6 +7535,8 @@ int len; int off; int align; +/* Copy "abcde..." string to char abc[] so that gcc doesn't + try to store the string in read-only memory. */ memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36); for (align = 7; align >= 0; align--) { @@ -6038,22 +7554,83 @@ for (align = 7; align >= 0; align--) { exit(0); } EOCP - if $cc $ccflags $ldflags foo.c -o safemcpy $libs >/dev/null 2>&1; then - if ./safemcpy 2>/dev/null; then + set try + if eval $compile; then + if ./try 2>/dev/null; then echo "Yes, it can." val="$define" else echo "It can't, sorry." + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac fi else echo "(I can't compile the test program, so we'll assume not...)" + case "$d_memmove" in + "$define") echo "But that's Ok since you have memmove()." ;; + esac fi ;; esac -$rm -f foo.* safemcpy core +$rm -f try.* try core set d_safemcpy eval $setvar +: can memcmp be trusted to compare relative magnitude? +val="$undef" +case "$d_memcmp" in +"$define") + echo " " + echo "Checking if your memcmp() can compare relative magnitude..." >&4 + $cat >try.c <>try.c <<'EOCP' +#include +#ifdef I_MEMORY +# include +#endif +#ifdef I_STDLIB +# include +#endif +#ifdef I_STRING +# include +#else +# include +#endif +#ifdef I_UNISTD +# include /* Needed for NetBSD */ +#endif +main() +{ +char a = -1; +char b = 0; +if ((a < b) && memcmp(&a, &b, 1) < 0) + exit(1); +exit(0); +} +EOCP + set try + if eval $compile; then + if ./try 2>/dev/null; then + echo "Yes, it can." + val="$define" + else + echo "No, it can't (it uses signed chars)." + fi + else + echo "(I can't compile the test program, so we'll assume not...)" + fi + ;; +esac +$rm -f try.* try core +set d_sanemcmp +eval $setvar + : see if select exists set select d_select eval $inlibc @@ -6095,6 +7672,10 @@ eval $inlibc set seteuid d_seteuid eval $inlibc +: see if sethostent exists +set sethostent d_sethent +eval $inlibc + : see if setlinebuf exists set setlinebuf d_setlinebuf eval $inlibc @@ -6139,6 +7720,59 @@ eval $inlibc set setsid d_setsid eval $inlibc +: see if sfio.h is available +set sfio.h i_sfio +eval $inhdr + + +: see if sfio library is available +case "$i_sfio" in +$define) + val='' + set sfreserve val + eval $inlibc + ;; +*) + val="$undef" + ;; +esac +: Ok, but do we want to use it. +case "$val" in +$define) + case "$usesfio" in + true|$define|[yY]*) dflt='y';; + *) dflt='n';; + esac + echo "$package can use the sfio library, but it is experimental." + rp="You seem to have sfio available, do you want to try using it?" + . ./myread + case "$ans" in + y|Y) ;; + *) echo "Ok, avoiding sfio this time. I'll use stdio instead." + val="$undef" + : Remove sfio from list of libraries to use + set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'` + shift + libs="$*" + echo "libs = $libs" >&4 + ;; + esac + ;; +*) case "$usesfio" in + true|$define|[yY]*) + echo "Sorry, cannot find sfio on this machine" >&4 + echo "Ignoring your setting of usesfio=$usesfio" >&4 + ;; + esac + ;; +esac +set d_sfio +eval $setvar +case "$d_sfio" in +$define) usesfio='true';; +*) usesfio='false';; +esac + : see if shmctl exists set shmctl d_shmctl eval $inlibc @@ -6190,16 +7824,89 @@ echo " " case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in *"$undef"*) h_shm=false;; esac -: we could also check for sys/ipc.h ... -if $h_shm && $test `./findhdr sys/shm.h`; then - echo "You have the full shm*(2) library." >&4 - val="$define" -else - echo "You don't have the full shm*(2) library." >&4 - val="$undef" -fi -set d_shm +: we could also check for sys/ipc.h ... +if $h_shm && $test `./findhdr sys/shm.h`; then + echo "You have the full shm*(2) library." >&4 + val="$define" +else + echo "You don't have the full shm*(2) library." >&4 + val="$undef" +fi +set d_shm +eval $setvar + +echo " " +: see if we have sigaction +if set sigaction val -f d_sigaction; eval $csym; $val; then + echo 'sigaction() found.' >&4 + val="$define" +else + echo 'sigaction NOT found.' >&4 + val="$undef" +fi +$cat > try.c <<'EOP' +#include +#include +#include +main() +{ + struct sigaction act, oact; +} +EOP +set try +if eval $compile; then + : +else + echo "But you don't seem to have a useable struct sigaction." >&4 + val="$undef" +fi +set d_sigaction; eval $setvar +$rm -f try try$_o try.c + +: see if sigsetjmp exists +echo " " +case "$d_sigsetjmp" in +'') + $cat >try.c <<'EOP' +#include +sigjmp_buf env; +int set = 1; +main() +{ + if (sigsetjmp(env,1)) + exit(set); + set = 0; + siglongjmp(env, 1); + exit(1); +} +EOP + set try + if eval $compile; then + if ./try >/dev/null 2>&1; then + echo "POSIX sigsetjmp found." >&4 + val="$define" + else + $cat >&4 <&4 + val="$undef" + fi + ;; +*) val="$d_sigsetjmp" + case "$d_sigsetjmp" in + $define) echo "POSIX sigsetjmp found." >&4;; + $undef) echo "sigsetjmp not found." >&4;; + esac + ;; +esac +set d_sigsetjmp eval $setvar +$rm -f try.c try socketlib='' sockethdr='' @@ -6222,10 +7929,10 @@ else : we will have to assume that it supports the 4.2 BSD interface d_oldsock="$undef" else - echo "You don't have Berkeley networking in libc.a..." >&4 - if test -f /usr/lib/libnet.a; then - ( (nm $nm_opt /usr/lib/libnet.a | eval $nm_extract) || \ - ar t /usr/lib/libnet.a) 2>/dev/null >> libc.list + echo "You don't have Berkeley networking in libc$_a..." >&4 + if test -f /usr/lib/libnet$_a; then + ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) || \ + ar t /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." >&4 socketlib="-lnet" @@ -6238,7 +7945,7 @@ else d_oldsock="$define" fi else - echo "or even in libnet.a, which is peculiar." >&4 + echo "or even in libnet$_a, which is peculiar." >&4 d_socket="$undef" d_oldsock="$undef" fi @@ -6320,7 +8027,7 @@ $cat >try.c < #define FILE_ptr(fp) $stdio_ptr #define FILE_cnt(fp) $stdio_cnt -main() { +main() { FILE *fp = fopen("try.c", "r"); char c = getc(fp); if ( @@ -6332,7 +8039,8 @@ main() { } EOP val="$undef" -if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then +set try +if eval $compile; then if ./try; then echo "Your stdio acts pretty std." val="$define" @@ -6370,7 +8078,7 @@ $define) #include #define FILE_base(fp) $stdio_base #define FILE_bufsiz(fp) $stdio_bufsiz -main() { +main() { FILE *fp = fopen("try.c", "r"); char c = getc(fp); if ( @@ -6381,9 +8089,10 @@ main() { exit(1); } EOP - if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then + set try + if eval $compile; then if ./try; then - echo "Even its _base field acts std." + echo "And its _base field acts std." val="$define" else echo "But its _base field isn't std." @@ -6462,6 +8171,18 @@ else d_strerrm='"unknown"' fi +: see if strtod exists +set strtod d_strtod +eval $inlibc + +: see if strtol exists +set strtol d_strtol +eval $inlibc + +: see if strtoul exists +set strtoul d_strtoul +eval $inlibc + : see if strxfrm exists set strxfrm d_strxfrm eval $inlibc @@ -6498,275 +8219,65 @@ esac; eval "varval=\$$var"; case "$varval" in "") - $rm -f temp.c; - for inc in $inclist; do - echo "#include <$inc>" >>temp.c; - done; - $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null; - if $contains $type temp.E >/dev/null 2>&1; then - eval "$var=\$type"; - else - eval "$var=\$def"; - fi; - $rm -f temp.?;; -*) eval "$var=\$varval";; -esac' - -: see if this is a sys/times.h system -set sys/times.h i_systimes -eval $inhdr - -: see if times exists -echo " " -if set times val -f d_times; eval $csym; $val; then - echo 'times() found.' >&4 - d_times="$define" - inc='' - case "$i_systimes" in - "$define") inc='sys/times.h';; - esac - set clock_t clocktype long stdio.h sys/types.h $inc - eval $typedef - dflt="$clocktype" - echo " " - rp="What type is returned by times() on this system?" - . ./myread - clocktype="$ans" -else - echo 'times() NOT found, hope that will do.' >&4 - d_times="$undef" - clocktype='int' -fi - -: see if truncate exists -set truncate d_truncate -eval $inlibc - -: see if tzname[] exists -echo " " -if set tzname val -a d_tzname; eval $csym; $val; then - val="$define" - echo 'tzname[] found.' >&4 -else - val="$undef" - echo 'tzname[] NOT found.' >&4 -fi -set d_tzname -eval $setvar - -: see if umask exists -set umask d_umask -eval $inlibc - -: see if we have to deal with yellow pages, now NIS. -if $test -d /usr/etc/yp || $test -d /etc/yp; then - if $test -f /usr/etc/nibindd; then - echo " " - echo "I'm fairly confident you're on a NeXT." - echo " " - rp='Do you get the hosts file via NetInfo?' - dflt=y - case "$hostcat" in - nidump*) ;; - '') ;; - *) dflt=n;; - esac - . ./myread - case "$ans" in - y*) hostcat='nidump hosts .';; - *) case "$hostcat" in - nidump*) hostcat='';; - esac - ;; - esac - fi - case "$hostcat" in - nidump*) ;; - *) - case "$hostcat" in - *ypcat*) dflt=y;; - '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then - dflt=y - else - dflt=n - fi;; - *) dflt=n;; - esac - echo " " - rp='Are you getting the hosts file via yellow pages?' - . ./myread - case "$ans" in - y*) hostcat='ypcat hosts';; - *) hostcat='cat /etc/hosts';; - esac - ;; - esac -fi - -: now get the host name -echo " " -echo "Figuring out host name..." >&4 -case "$myhostname" in -'') cont=true - echo 'Maybe "hostname" will work...' - if tans=`sh -c hostname 2>&1` ; then - myhostname=$tans - phostname=hostname - cont='' - fi - ;; -*) cont='';; -esac -if $test "$cont"; then - if ./xenix; then - echo 'Oh, dear. Maybe "/etc/systemid" is the key...' - if tans=`cat /etc/systemid 2>&1` ; then - myhostname=$tans - phostname='cat /etc/systemid' - echo "Whadyaknow. Xenix always was a bit strange..." - cont='' - fi - elif $test -r /etc/systemid; then - echo "(What is a non-Xenix system doing with /etc/systemid?)" - fi -fi -if $test "$cont"; then - echo 'No, maybe "uuname -l" will work...' - if tans=`sh -c 'uuname -l' 2>&1` ; then - myhostname=$tans - phostname='uuname -l' - else - echo 'Strange. Maybe "uname -n" will work...' - if tans=`sh -c 'uname -n' 2>&1` ; then - myhostname=$tans - phostname='uname -n' - else - echo 'Oh well, maybe I can mine it out of whoami.h...' - if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then - myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'` - phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h" - else - case "$myhostname" in - '') echo "Does this machine have an identity crisis or something?" - phostname='';; - *) - echo "Well, you said $myhostname before..." - phostname='echo $myhostname';; - esac - fi - fi - fi -fi -: you do not want to know about this -set $myhostname -myhostname=$1 - -: verify guess -if $test "$myhostname" ; then - dflt=y - rp='Your host name appears to be "'$myhostname'".'" Right?" - . ./myread - case "$ans" in - y*) ;; - *) myhostname='';; - esac -fi - -: bad guess or no guess -while $test "X$myhostname" = X ; do - dflt='' - rp="Please type the (one word) name of your host:" - . ./myread - myhostname="$ans" -done - -: translate upper to lower if necessary -case "$myhostname" in -*[A-Z]*) - echo "(Normalizing case in your host name)" - myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'` - ;; -esac - -case "$myhostname" in -*.*) - dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"` - myhostname=`expr "X$myhostname" : "X\([^.]*\)\."` - echo "(Trimming domain name from host name--host name is now $myhostname)" - ;; -*) case "$mydomain" in - '') - $hostcat >hosts - dflt=.`$awk "/[0-9].*$myhostname/ {for(i=2; i<=NF;i++) print \\\$i}" \ - hosts | $sort | $uniq | \ - $sed -n -e "s/$myhostname\.\([a-zA-Z_.]\)/\1/p"` - case "$dflt" in - .) echo "(You do not have fully-qualified names in /etc/hosts)" - tans=`./loc resolv.conf X /etc /usr/etc` - if $test -f "$tans"; then - echo "(Attempting domain name extraction from $tans)" - dflt=.`egrep '^domain' $tans | $sed 's/domain[ ]*\(.*\)/\1/' \ - | ./tr '[A-Z]' '[a-z]' 2>/dev/null` - fi - ;; - esac - case "$dflt" in - .) echo "(No help from resolv.conf either -- attempting clever guess)" - dflt=.`sh -c domainname 2>/dev/null` - case "$dflt" in - '') dflt='.';; - .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;; - esac - ;; - esac - case "$dflt" in - .) echo "(Lost all hope -- silly guess then)" - dflt='.uucp' - ;; - esac - $rm -f hosts - ;; - *) dflt="$mydomain";; - esac;; -esac -echo " " -rp="What is your domain name?" -. ./myread -tans="$ans" -case "$ans" in -'') ;; -.*) ;; -*) tans=".$tans";; -esac -mydomain="$tans" + $rm -f temp.c; + for inc in $inclist; do + echo "#include <$inc>" >>temp.c; + done; + $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null; + if $contains $type temp.E >/dev/null 2>&1; then + eval "$var=\$type"; + else + eval "$var=\$def"; + fi; + $rm -f temp.?;; +*) eval "$var=\$varval";; +esac' -: translate upper to lower if necessary -case "$mydomain" in -*[A-Z]*) - echo "(Normalizing case in your domain name)" - mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'` - ;; -esac +: see if this is a sys/times.h system +set sys/times.h i_systimes +eval $inhdr -: a little sanity check here -case "$phostname" in -'') ;; -*) - case `$phostname | ./tr '[A-Z]' '[a-z]'` in - $myhostname$mydomain|$myhostname) ;; - *) - case "$phostname" in - sed*) - echo "(That doesn't agree with your whoami.h file, by the way.)" - ;; - *) - echo "(That doesn't agree with your $phostname command, by the way.)" - ;; - esac - ;; +: see if times exists +echo " " +if set times val -f d_times; eval $csym; $val; then + echo 'times() found.' >&4 + d_times="$define" + inc='' + case "$i_systimes" in + "$define") inc='sys/times.h';; esac - ;; -esac + set clock_t clocktype long stdio.h sys/types.h $inc + eval $typedef + dflt="$clocktype" + echo " " + rp="What type is returned by times() on this system?" + . ./myread + clocktype="$ans" +else + echo 'times() NOT found, hope that will do.' >&4 + d_times="$undef" + clocktype='int' +fi + +: see if truncate exists +set truncate d_truncate +eval $inlibc + +: see if tzname[] exists +echo " " +if set tzname val -a d_tzname; eval $csym; $val; then + val="$define" + echo 'tzname[] found.' >&4 +else + val="$undef" + echo 'tzname[] NOT found.' >&4 +fi +set d_tzname +eval $setvar + +: see if umask exists +set umask d_umask +eval $inlibc : see how we will look up host name echo " " @@ -6883,7 +8394,8 @@ case "$d_closedir" in #endif int main() { return closedir(opendir(".")); } EOM - if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then + set closedir + if eval $compile; then if ./closedir > /dev/null 2>&1 ; then echo "Yes, it does." val="$undef" @@ -6971,11 +8483,12 @@ main() printf("%d\n", (char *)&try.bar - (char *)&try.foo); } EOCP - if $cc $ccflags try.c -o try >/dev/null 2>&1; then + set try + if eval $compile; then dflt=`./try` else dflt='8' - echo"(I can't seem to compile the test program...)" + echo "(I can't seem to compile the test program...)" fi ;; *) dflt="$alignbytes" @@ -6986,17 +8499,6 @@ rp="Doubles must be aligned on a how-many-byte boundary?" alignbytes="$ans" $rm -f try.c try -: Define several unixisms. These can be overridden in hint files. -ar='ar' -exe_ext='' -lib_ext='.a' -obj_ext='.o' -path_sep='/' -: Extra object files needed on this platform. -archobjs='' -: Which makefile gets called first. This is used by make depend. -firstmakefile='makefile' - : check for ordering of bytes in a long case "$byteorder" in '') @@ -7030,7 +8532,8 @@ main() } EOCP xxx_prompt=y - if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then + set try + if eval $compile && ./try > /dev/null; then dflt=`./try` case "$dflt" in [1-4][1-4][1-4][1-4]|12345678|87654321) @@ -7071,11 +8574,11 @@ ACAT(Cir,cus) EOCP $cppstdin $cppflags $cppminus cpp_stuff.out 2>&1 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then - echo "Oh! Smells like ANSI's been here." + echo "Oh! Smells like ANSI's been here." >&4 echo "We can catify or stringify, separately or together!" cpp_stuff=42 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then - echo "Ah, yes! The good old days!" + echo "Ah, yes! The good old days!" >&4 echo "However, in the good old days we don't know how to stringify and" echo "catify at the same time." cpp_stuff=1 @@ -7104,6 +8607,8 @@ define) #endif #include #include + +#ifndef DB_VERSION_MAJOR u_int32_t hash_cb (ptr, size) const void *ptr; size_t size; @@ -7114,6 +8619,7 @@ main() { info.hash = hash_cb; } +#endif EOCP if $cc $ccflags -c try.c >try.out 2>&1 ; then if $contains warning try.out >>/dev/null 2>&1 ; then @@ -7122,13 +8628,91 @@ EOCP db_hashtype='u_int32_t' fi else - echo "I can't seem to compile the test program." >&4 - db_hashtype=int + : XXX Maybe we should just give up here. + db_hashtype=u_int32_t + echo "Help: I can't seem to compile the db test program." >&4 + echo "Something's wrong, but I'll assume you use $db_hashtype." >&4 fi $rm -f try.* echo "Your version of Berkeley DB uses $db_hashtype for hash." ;; -*) db_hashtype=int +*) db_hashtype=u_int32_t + ;; +esac + +case "$i_db" in +$define) + : Check db version. + echo " " + echo "Checking Berkeley DB version ..." >&4 + $cat >try.c < +#include +#include +main() +{ +#ifdef DB_VERSION_MAJOR /* DB version >= 2 */ + int Major, Minor, Patch ; + unsigned long Version ; + (void)db_version(&Major, &Minor, &Patch) ; + printf("You have Berkeley DB Version 2 or greater\n"); + + printf("db.h is from Berkeley DB Version %d.%d.%d\n", + DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH); + printf("libdb is from Berkeley DB Version %d.%d.%d\n", + Major, Minor, Patch) ; + + /* check that db.h & libdb are compatible */ + if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) { + printf("db.h and libdb are incompatible\n") ; + exit(3); + } + + printf("db.h and libdb are compatible\n") ; + + Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000 + + DB_VERSION_PATCH ; + + /* needs to be >= 2.3.4 */ + if (Version < 2003004) { + /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */ + printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ; + exit(2); + } + + exit(0); +#else +#if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC) + printf("You have Berkeley DB Version 1\n"); + exit(0); /* DB version < 2: the coast is clear. */ +#else + exit(1); /* not Berkeley DB? */ +#endif +#endif +} +EOCP + set try + if eval $compile && ./try; then + echo 'Looks OK.' >&4 + else + echo "I can't use Berkeley DB with your . I'll disable Berkeley DB." >&4 + i_db=$undef + case " $libs " in + *"-ldb "*) + : Remove db from list of libraries to use + echo "Removing unusable -ldb from library list" >&4 + set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'` + shift + libs="$*" + echo "libs = $libs" >&4 + ;; + esac + fi + $rm -f try.* ;; esac @@ -7144,6 +8728,8 @@ define) #endif #include #include + +#ifndef DB_VERSION_MAJOR size_t prefix_cb (key1, key2) const DBT *key1; const DBT *key2; @@ -7154,6 +8740,7 @@ main() { info.prefix = prefix_cb; } +#endif EOCP if $cc $ccflags -c try.c >try.out 2>&1 ; then if $contains warning try.out >>/dev/null 2>&1 ; then @@ -7162,13 +8749,15 @@ EOCP db_prefixtype='size_t' fi else - echo "I can't seem to compile the test program." >&4 - db_prefixtype='int' + db_prefixtype='size_t' + : XXX Maybe we should just give up here. + echo "Help: I can't seem to compile the db test program." >&4 + echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4 fi $rm -f try.* echo "Your version of Berkeley DB uses $db_prefixtype for prefix." ;; -*) db_prefixtype='int' +*) db_prefixtype='size_t' ;; esac @@ -7188,9 +8777,9 @@ case "$voidflags" in '') $cat >try.c <<'EOCP' #if TRY & 1 -void main() { +void sub() { #else -main() { +sub() { #endif extern void moo(); /* function returning void */ void (*goo)(); /* ptr to func returning void */ @@ -7208,8 +8797,9 @@ main() { #endif exit(0); } +main() { sub(); } EOCP - if $cc -c -DTRY=$defvoidused try.c >.out 2>&1 ; then + if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then voidflags=$defvoidused echo "It appears to support void to the level $package wants ($defvoidused)." if $contains warning .out >/dev/null 2>&1; then @@ -7218,16 +8808,16 @@ EOCP fi else echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4 - if $cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then echo "It supports 1..." - if $cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then echo "It also supports 2..." - if $cc -c -DTRY=7 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then voidflags=7 echo "And it supports 4 but not 8 definitely." else echo "It doesn't support 4..." - if $cc -c -DTRY=11 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then voidflags=11 echo "But it supports 8." else @@ -7237,11 +8827,11 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4 fi else echo "It does not support 2..." - if $cc -c -DTRY=13 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then voidflags=13 echo "But it supports 4 and 8." else - if $cc -c -DTRY=5 try.c >/dev/null 2>&1 ; then + if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then voidflags=5 echo "And it supports 4 but has not heard about 8." else @@ -7255,11 +8845,10 @@ echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4 fi fi esac -: Only prompt user if voidflags is not 15. If voidflags is 15, then -: we presume all is well. case "$voidflags" in -15) ;; -*) dflt="$voidflags"; +"$defvoidused") ;; +*) + dflt="$voidflags"; rp="Your void support flags add up to what?" . ./myread voidflags="$ans" @@ -7267,6 +8856,32 @@ case "$voidflags" in esac $rm -f try.* .out +: check for length of double +echo " " +case "$doublesize" in +'') + echo "Checking to see how big your double precision numbers are..." >&4 + $cat >try.c <<'EOCP' +#include +main() +{ + printf("%d\n", sizeof(double)); +} +EOCP + set try + if eval $compile; then + doublesize=`./try` + else + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + rp="What is the size of a double precision number (in bytes)?" + . ./myread + doublesize="$ans" + fi + ;; +esac +$rm -f try.c try + : see what type file positions are declared as in the library set fpos_t fpostype long stdio.h sys/types.h eval $typedef @@ -7302,20 +8917,25 @@ gidtype="$ans" set getgroups d_getgrps eval $inlibc -: Find type of 2nd arg to getgroups +: see if setgroups exists +set setgroups d_setgrps +eval $inlibc + + +: Find type of 2nd arg to 'getgroups()' and 'setgroups()' echo " " -case "$d_getgrps" in -'define') +case "$d_getgrps$d_setgrps" in +*define*) case "$groupstype" in '') dflt="$gidtype" ;; *) dflt="$groupstype" ;; esac $cat <&4 +case "$make_set_make" in +'') + $sed 's/^X //' > testmake.mak << 'EOF' +Xall: +X @echo 'maketemp="$(MAKE)"' +EOF + case "`$make -f testmake.mak 2>/dev/null`" in + *maketemp=*) make_set_make='#' ;; + *) make_set_make="MAKE=$make" ;; + esac + $rm -f testmake.mak + ;; +esac +case "$make_set_make" in +'#') echo "Yup, it does.";; +*) echo "Nope, it doesn't.";; +esac + : see what type is used for mode_t set mode_t modetype int stdio.h sys/types.h eval $typedef @@ -7338,33 +8978,290 @@ dflt="$modetype" echo " " rp="What type is used for file modes?" . ./myread -modetype="$ans" +modetype="$ans" + +: Cruising for prototypes +echo " " +echo "Checking out function prototypes..." >&4 +$cat >prototype.c <<'EOCP' +main(int argc, char *argv[]) { + exit(0);} +EOCP +if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then + echo "Your C compiler appears to support function prototypes." + val="$define" +else + echo "Your C compiler doesn't seem to understand function prototypes." + val="$undef" +fi +set prototype +eval $setvar +$rm -f prototype* + +: define a fucntion to check prototypes +$cat > protochk <> protochk <<'EOSH' + +$rm -f try.c +foo="$1" +shift +while test $# -ge 2; do + case "$1" in + $define) echo "#include <$2>" >> try.c ;; + literal) echo "$2" >> try.c ;; + esac + shift 2 +done +test "$prototype" = "$define" && echo '#define CAN_PROTOTYPE' >> try.c +cat >> try.c <<'EOCP' +#ifdef CAN_PROTOTYPE +#define _(args) args +#else +#define _(args) () +#endif +EOCP +echo "$foo" >> try.c +echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c +$cc $optimize $ccflags -c try.c > /dev/null 2>&1 +status=$? +$rm -f try.[co] +exit $status +EOSH +chmod +x protochk +$eunicefix protochk + +: see if this is a netdb.h system +set netdb.h i_netdb +eval $inhdr + +: see what type is used for size_t +set size_t sizetype 'unsigned int' stdio.h sys/types.h +eval $typedef +dflt="$sizetype" +echo " " +rp="What type is used for the length parameter for string functions?" +. ./myread +sizetype="$ans" + +: check for type of arguments to gethostbyaddr. +if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then + case "$d_gethbyaddr" in + $define) + $cat <&4 -$cat >prototype.c <<'EOCP' -main(int argc, char *argv[]) { - exit(0);} +case "$ptrsize" in +'') + echo "Checking to see how big your pointers are..." >&4 + if test "$voidflags" -gt 7; then + echo '#define VOID_PTR char *' > try.c + else + echo '#define VOID_PTR void *' > try.c + fi + $cat >>try.c <<'EOCP' +#include +main() +{ + printf("%d\n", sizeof(VOID_PTR)); + exit(0); +} EOCP -if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then - echo "Your C compiler appears to support function prototypes." - val="$define" -else - echo "Your C compiler doesn't seem to understand function prototypes." - val="$undef" -fi -set prototype -eval $setvar -$rm -f prototype* + set try + if eval $compile; then + ptrsize=`./try` + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" >&4 + rp="What is the size of a pointer (in bytes)?" + . ./myread + ptrsize="$ans" + fi + ;; +esac +$rm -f try.c try : check for size of random number generator echo " " case "$randbits" in '') echo "Checking to see how many bits your rand function produces..." >&4 - $cat >try.c <<'EOCP' + $cat >try.c < +#ifdef I_UNISTD +# include +#endif +#ifdef I_STDLIB +# include +#endif +EOCP + $cat >>try.c <<'EOCP' main() { register int i; @@ -7380,8 +9277,9 @@ main() printf("%d\n",i); } EOCP - if $cc try.c -o try >/dev/null 2>&1 ; then - dflt=`try` + set try + if eval $compile; then + dflt=`./try$_exe` else dflt='?' echo "(I can't seem to compile the test program...)" @@ -7394,7 +9292,7 @@ esac rp='How many bits does your rand() function produce?' . ./myread randbits="$ans" -$rm -f try.c try +$rm -f try.* try : see if ar generates random libraries by itself echo " " @@ -7407,18 +9305,18 @@ EOP $cc $ccflags -c bar1.c >/dev/null 2>&1 $cc $ccflags -c bar2.c >/dev/null 2>&1 $cc $ccflags -c foo.c >/dev/null 2>&1 -ar rc bar.a bar2.o bar1.o >/dev/null 2>&1 -if $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 && +$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1 +if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 && ./foobar >/dev/null 2>&1; then - echo "ar appears to generate random libraries itself." + echo "$ar appears to generate random libraries itself." orderlib=false ranlib=":" -elif ar ts bar.a >/dev/null 2>&1 && - $cc $ccflags $ldflags -o foobar foo.o bar.a $libs > /dev/null 2>&1 && +elif $ar ts bar$_a >/dev/null 2>&1 && + $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 && ./foobar >/dev/null 2>&1; then - echo "a table of contents needs to be added with 'ar ts'." + echo "a table of contents needs to be added with '$ar ts'." orderlib=false - ranlib="ar ts" + ranlib="$ar ts" else case "$ranlib" in :) ranlib='';; @@ -7480,7 +9378,7 @@ main() } EOCP flags='' -s_timezone='' +for s_timezone in '-DS_TIMEZONE' ''; do sysselect='' for s_timeval in '-DS_TIMEVAL' ''; do for i_systimek in '' '-DSYSTIMEKERNEL'; do @@ -7488,10 +9386,9 @@ for i_time in '' '-DI_TIME'; do for i_systime in '-DI_SYSTIME' ''; do case "$flags" in '') $echo $n ".$c" - if $cc $ccflags \ - $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \ - try.c -o try >/dev/null 2>&1 ; then - set X $i_time $i_systime $i_systimek $sysselect $s_timeval + set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone + if eval $compile; then + set X $i_time $i_systime $i_systimek $sysselect $s_timeval shift flags="$*" echo " " @@ -7503,6 +9400,7 @@ done done done done +done timeincl='' echo " " case "$flags" in @@ -7540,11 +9438,10 @@ $cat >fd_set.c < -#else +#endif #ifdef I_SYS_SELECT #include #endif -#endif main() { fd_set fds; @@ -7559,7 +9456,8 @@ main() { #endif } EOCP -if $cc $ccflags -DTRYBITS fd_set.c -o fd_set >fd_set.out 2>&1 ; then +set fd_set -DTRYBITS +if eval $compile; then d_fds_bits="$define" d_fd_set="$define" echo "Well, your system knows about the normal fd_set typedef..." >&4 @@ -7576,7 +9474,8 @@ else $cat <<'EOM' Hmm, your compiler has some difficulty with fd_set. Checking further... EOM - if $cc $ccflags fd_set.c -o fd_set >fd_set.out 2>&1 ; then + set fd_set + if eval $compile; then d_fds_bits="$undef" d_fd_set="$define" echo "Well, your system has some sort of fd_set available..." >&4 @@ -7598,74 +9497,50 @@ EOM fi $rm -f fd_set* - -: check for type of arguments to select. This will only really -: work if the system supports prototypes and provides one for -: select. -case "$d_select" in -$define) - : Make initial guess - case "$selecttype" in - ''|' ') - case "$d_fd_set" in - $define) xxx='fd_set *' ;; - *) xxx='int *' ;; +: check for type of arguments to select. +case "$selecttype" in +'') case "$d_select" in + $define) + $cat <try.c < -#ifdef HAS_SOCKET -#include /* Might include */ -#endif -#ifdef I_SYS_TIME -#include -#else -#ifdef I_SYS_SELECT -#include -#endif -#endif -main() -{ - int width; - Select_fd_set_t readfds; - Select_fd_set_t writefds; - Select_fd_set_t exceptfds; - struct timeval timeout; - select(width, readfds, writefds, exceptfds, &timeout); - exit(0); -} -EOCP - if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then - selecttype="$xxx" - echo "Your system uses $xxx for the arguments to select." >&4 - elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then - selecttype="$yyy" - echo "Your system uses $yyy for the arguments to select." >&4 - else - rp='What is the type for the 2nd, 3rd, and 4th arguments to select?' - dflt="$xxx" - . ./myread - selecttype="$ans" - fi - $rm -f try.[co] - ;; -*) selecttype='int *' ;; esac @@ -7704,13 +9579,59 @@ $cat > signal.c <<'EOP' #include #include int main() { -#ifdef NSIG -printf("NSIG %d\n", NSIG); -#else -#ifdef _NSIG -printf("NSIG %d\n", _NSIG); + +/* Strange style to avoid deeply-nested #if/#else/#endif */ +#ifndef NSIG +# ifdef _NSIG +# define NSIG (_NSIG) +# endif +#endif + +#ifndef NSIG +# ifdef SIGMAX +# define NSIG (SIGMAX+1) +# endif +#endif + +#ifndef NSIG +# ifdef SIG_MAX +# define NSIG (SIG_MAX+1) +# endif +#endif + +#ifndef NSIG +# ifdef MAXSIG +# define NSIG (MAXSIG+1) +# endif +#endif + +#ifndef NSIG +# ifdef MAX_SIG +# define NSIG (MAX_SIG+1) +# endif +#endif + +#ifndef NSIG +# ifdef SIGARRAYSIZE +# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */ +# endif +#endif + +#ifndef NSIG +# ifdef _sys_nsig +# define NSIG (_sys_nsig) /* Solaris 2.5 */ +# endif #endif + +/* Default to some arbitrary number that's big enough to get most + of the common signals. +*/ +#ifndef NSIG +# define NSIG 50 #endif + +printf("NSIG %d\n", NSIG); + EOP echo $xxx | $tr ' ' '\012' | $sort | $uniq | $awk ' { @@ -7757,8 +9678,8 @@ EOP $cat >signal_cmd </dev/null 2>&1; then - ./signal | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst +if $cc $optimize $ccflags $ldflags -o signal signal.c $libs >/dev/null 2>&1; then + ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst else echo "(I can't seem be able to compile the test program -- Guessing)" echo 'kill -l' >signal @@ -7769,29 +9690,27 @@ else 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;; esac echo \$@ | $tr ' ' '\012' | \ - $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst + $awk '{ printf \$1; printf " %d\n", ++s; }' >signal.lst fi -$rm -f signal.c signal signal.o +$rm -f signal.c signal signal$_o EOS chmod a+x signal_cmd $eunicefix signal_cmd : generate list of signal names echo " " -case "$sig_name" in -'') sig_num='' ;; -esac -case "$sig_num" in -'') sig_name='' ;; -esac -case "$sig_name" in +case "$sig_name_init" in '') echo "Generating a list of signal names and numbers..." >&4 ./signal_cmd sig_name=`$awk '{printf "%s ", $1}' signal.lst` sig_name="ZERO $sig_name" - sig_num=`$awk '{printf "%d ", $2}' signal.lst` - sig_num="0 $sig_num" + sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " } + { printf "\"%s\", ", $1 } + END { printf "0\n" }' signal.lst` + sig_num=`$awk 'BEGIN { printf "0, " } + { printf "%d, ", $2} + END { printf "0\n"}' signal.lst` ;; esac echo "The following signals are available:" @@ -7812,15 +9731,6 @@ echo $sig_name | $awk \ }' $rm -f signal signal.c signal.awk signal.lst signal_cmd -: see what type is used for size_t -set size_t sizetype 'unsigned int' stdio.h sys/types.h -eval $typedef -dflt="$sizetype" -echo " " -rp="What type is used for the length parameter for string functions?" -. ./myread -sizetype="$ans" - : see what type is used for signed size_t set ssize_t ssizetype int stdio.h sys/types.h eval $typedef @@ -7838,25 +9748,29 @@ main() printf("int\n"); else printf("long\n"); + exit(0); } EOM echo " " -if $cc $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 ; then +set ssize +if eval $compile && ./ssize > /dev/null; then ssizetype=`./ssize` echo "I'll be using $ssizetype for functions returning a byte count." >&4 else - echo "(I can't compile the test program--please enlighten me!)" - $cat <&4 < mem.h - if $contains 'memcpy' mem.h >/dev/null 2>&1; then - echo " " - echo "We won't be including ." - val="$undef" - fi - $rm -f mem.h - ;; - esac -esac -set i_memory -eval $setvar - : see if ndbm.h is available set ndbm.h t_ndbm eval $inhdr @@ -8285,12 +10175,13 @@ va_dcl } EOP $cat > varargs </dev/null 2>&1; then echo "true" else echo "false" fi -$rm -f varargs.o +$rm -f varargs$_o EOP chmod +x varargs @@ -8363,6 +10254,10 @@ eval $setvar set sys/param.h i_sysparam eval $inhdr +: see if sys/resource.h has to be included +set sys/resource.h i_sysresrc +eval $inhdr + : see if sys/stat.h is available set sys/stat.h i_sysstat eval $inhdr @@ -8371,14 +10266,22 @@ eval $inhdr set sys/types.h i_systypes eval $inhdr -: see if this is a unistd.h system -set unistd.h i_unistd +: see if this is a sys/un.h system +set sys/un.h i_sysun +eval $inhdr + +: see if this is a syswait system +set sys/wait.h i_syswait eval $inhdr : see if this is an utime system set utime.h i_utime eval $inhdr +: see if this is a values.h system +set values.h i_values +eval $inhdr + : see if this is a vfork system case "$d_vfork" in "$define") @@ -8421,19 +10324,23 @@ known_extensions='' : some additional extensions into the source tree and expect them : to be built. for xxx in * ; do - if $test -f $xxx/$xxx.xs; then - known_extensions="$known_extensions $xxx" - else - if $test -d $xxx; then - cd $xxx - for yyy in * ; do + case "$xxx" in + DynaLoader) ;; + *) if $test -f $xxx/$xxx.xs; then + known_extensions="$known_extensions $xxx" + else + if $test -d $xxx; then + cd $xxx + for yyy in * ; do if $test -f $yyy/$yyy.xs; then known_extensions="$known_extensions $xxx/$yyy" fi - done + done cd .. - fi - fi + fi + fi + ;; + esac done set X $known_extensions shift @@ -8443,34 +10350,50 @@ cd ../UU : Now see which are supported on this system. avail_ext='' for xxx in $known_extensions ; do - case "$xxx" in - DB_File) case "$i_db" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - GDBM_File) case "$i_gdbm" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - NDBM_File) case "$i_ndbm" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - ODBM_File) case "${i_dbm}${i_rpcsvcdbm}" in - *"${define}"*) avail_ext="$avail_ext $xxx" ;; - esac - ;; - POSIX) case "$useposix" in - true|define|y) avail_ext="$avail_ext $xxx" ;; - esac - ;; - Socket) case "$d_socket" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - *) avail_ext="$avail_ext $xxx" - ;; - esac + case "$xxx" in + DB_File|db_file) + case "$i_db" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + GDBM_File|gdbm_fil) + case "$i_gdbm" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + NDBM_File|ndbm_fil) + case "$i_ndbm" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + ODBM_File|odbm_fil) + case "${i_dbm}${i_rpcsvcdbm}" in + *"${define}"*) avail_ext="$avail_ext $xxx" ;; + esac + ;; + POSIX|posix) + case "$useposix" in + true|define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Opcode|opcode) + case "$useopcode" in + true|define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Socket|socket) + case "$d_socket" in + true|$define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + Thread|thread) + case "$usethreads" in + true|$define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; + *) avail_ext="$avail_ext $xxx" + ;; + esac done set X $avail_ext @@ -8484,11 +10407,28 @@ A number of extensions are supplied with $package. You may choose to compile these extensions for dynamic loading (the default), compile them into the $package executable (static loading), or not include them at all. Answer "none" to include no extensions. +Note that DynaLoader is always built and need not be mentioned here. EOM case "$dynamic_ext" in '') dflt="$avail_ext" ;; - *) dflt="$dynamic_ext" ;; + *) dflt="$dynamic_ext" + # Perhaps we are reusing an old out-of-date config.sh. + case "$hint" in + previous) + if test X"$dynamic_ext" != X$"avail_ext"; then + $cat <>config.sh +$test -f $src/patchlevel.h && \ +awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh echo "CONFIG=true" >>config.sh : propagate old symbols @@ -9225,6 +11194,22 @@ else echo "Done." fi +if $test -f Policy.sh; then + $cat <&4 + $rm -f config.msg +fi $rm -f kit*isdone ark*isdone $rm -rf UU