X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Configure;h=f4d9cfbc9116a10f07b415d2cd8e6bafdfecd64c;hb=223766f2ba0eeef12a35d112ccbad9d07bb5e8ae;hp=c1eb2c041360c966db4a7b6a5131fe014247c765;hpb=5cadb3f3d2704caddd768175a2268bb01d157be9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/Configure b/Configure index c1eb2c0..f4d9cfb 100755 --- a/Configure +++ b/Configure @@ -11,22 +11,26 @@ # Yes, you may rip this off to use in other distribution packages. This # script belongs to the public domain and cannot be copyrighted. # -# (Note: this Configure script was generated automatically. Rather than +# 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 and is available on CPAN under authors/id/RAM so -# you may fetch it yourself from your nearest archive site.) +# The dist package (which contains metaconfig) is available via SVN: +# svn co https://svn.sourceforge.net/svnroot/dist/trunk/dist # +# Though this script was generated by metaconfig from metaunits, it is +# OK to send patches against Configure itself. It's up to the Configure +# pumpkin to backport the patch to the metaunits if it is accepted. +# For more information on patching Configure, see pod/perlhack.pod +# +# The metaunits are also available from the public git repository: +# http://perl5.git.perl.org/metaconfig.git/ or +# $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig # -# Though this script was generated by metaconfig, it is OK to send -# patches against it. It's up to the Configure pumpkin to backport -# the patch to the metaunits if it is accepted. # See Porting/pumpkin.pod for more information on metaconfig. # -# $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $ +# $Id: Head.U 6 2006-08-25 22:21:46Z rmanfredi $ # -# Generated on Mon Jul 18 12:48:03 CEST 2005 [metaconfig 3.0 PL70] +# Generated on Mon Mar 29 10:12:43 CEST 2010 [metaconfig 3.5 PL0] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <&4 <&1 >/dev/null ; then - if test -n "$OS2_SHELL"; then + if test -n "$OS2_SHELL"; then p_=\; PATH=`cmd /c "echo %PATH%" | tr '\\\\' / ` OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'` @@ -133,9 +149,9 @@ if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then fi if test -f /osf_boot -a -f /usr/sbin/setld; then if test X`/usr/bin/uname -s` = XOSF1; then - avoidksh="to avoid Digital UNIX' ksh" - newsh=/bin/sh - unset BIN_SH # if this is 'xpg4' sh will start up ksh + avoidksh="to avoid Digital UNIX' ksh" + newsh=/bin/sh + unset BIN_SH fi fi case "$inksh/$needksh" in @@ -169,17 +185,19 @@ true) esac ;; esac +test -x "${newsh}" || unset newsh -: if needed set CDPATH to a harmless value that is not chatty +: if needed, set CDPATH to a harmless value that is not chatty : avoid bash 2.02 problems with empty CDPATH. case "$CDPATH" in '') ;; *) case "$SHELL" in - *bash*) CDPATH='.' ;; - *) CDPATH='' ;; + *bash*) CDPATH='.' ;; + *) CDPATH='' ;; esac ;; esac + : Configure runs within the UU subdirectory test -d UU || mkdir UU cd UU && rm -f ./* @@ -194,7 +212,9 @@ run='' targetarch='' to='' usecrosscompile='' +extern_C='' mistrustnm='' +usedevel='' perllibs='' dynamic_ext='' extensions='' @@ -208,7 +228,6 @@ d_bsd='' d_eunice='' d_xenix='' eunicefix='' -Mcc='' ar='' awk='' bash='' @@ -304,6 +323,7 @@ firstmakefile='' lib_ext='' obj_ext='' path_sep='' +rm_try='' afs='' afsroot='' alignbytes='' @@ -319,7 +339,9 @@ d_atoll='' baserev='' bin='' binexp='' +initialinstalllocation='' installbin='' +userelocatableinc='' byteorder='' cc='' ccflags='' @@ -331,6 +353,7 @@ optimize='' cf_email='' cf_by='' cf_time='' +charbits='' charsize='' contains='' cpp_stuff='' @@ -345,6 +368,7 @@ d_aintl='' d_alarm='' asctime_r_proto='' d_asctime_r='' +d_attribute_deprecated='' d_attribute_format='' d_attribute_malloc='' d_attribute_nonnull='' @@ -352,9 +376,13 @@ d_attribute_noreturn='' d_attribute_pure='' d_attribute_unused='' d_attribute_warn_unused_result='' +d_printf_format_null='' d_bcmp='' d_bcopy='' +d_builtin_choose_expr='' +d_builtin_expect='' d_bzero='' +d_c99_variadic_macros='' d_casti32='' castflags='' d_castneg='' @@ -362,17 +390,20 @@ d_chown='' d_chroot='' d_chsize='' d_class='' +d_clearenv='' d_closedir='' d_void_closedir='' d_cmsghdr_s='' d_const='' d_copysignl='' +d_cplusplus='' cryptlib='' d_crypt='' crypt_r_proto='' d_crypt_r='' d_csh='' full_csh='' +d_ctermid='' ctermid_r_proto='' d_ctermid_r='' ctime_r_proto='' @@ -381,6 +412,7 @@ d_cuserid='' d_dbl_dig='' d_dbminitproto='' d_difftime='' +d_dir_dd_fd='' d_dirfd='' d_dlerror='' d_dlopen='' @@ -440,7 +472,9 @@ d_fsync='' d_ftello='' d_ftime='' d_gettimeod='' +d_futimes='' d_Gconvert='' +d_getaddrinfo='' d_getcwd='' d_getespwnam='' d_getfsstat='' @@ -472,6 +506,7 @@ d_getlogin_r='' getlogin_r_proto='' d_getmnt='' d_getmntent='' +d_getnameinfo='' d_getnbyaddr='' d_getnbyname='' d_getnent='' @@ -528,6 +563,8 @@ d_hasmntopt='' d_htonl='' d_ilogbl='' d_inetaton='' +d_inetntop='' +d_inetpton='' d_int64_t='' d_isascii='' d_isfinite='' @@ -540,6 +577,7 @@ d_ldbl_dig='' d_libm_lib_version='' d_link='' d_localtime_r='' +d_localtime_r_needs_tzset='' localtime_r_proto='' d_locconv='' d_lockf='' @@ -550,6 +588,8 @@ longlongsize='' d_lseekproto='' d_lstat='' d_madvise='' +d_malloc_good_size='' +d_malloc_size='' d_mblen='' d_mbstowcs='' d_mbtowc='' @@ -588,6 +628,8 @@ d_pause='' d_pipe='' d_poll='' d_portable='' +d_prctl='' +d_prctl_set_name='' d_procselfexe='' procselfexe='' d_old_pthread_create_joinable='' @@ -674,9 +716,12 @@ d_shmctl='' d_shmdt='' d_shmget='' d_sigaction='' +d_signbit='' d_sigprocmask='' d_sigsetjmp='' usesitecustomize='' +d_snprintf='' +d_vsnprintf='' d_sockatmark='' d_sockatmarkproto='' d_msg_ctrunc='' @@ -692,6 +737,7 @@ sockethdr='' socketlib='' d_socklen_t='' d_socks5_init='' +d_sprintf_returns_strlen='' d_sqrtl='' d_srand48_r='' srand48_r_proto='' @@ -747,6 +793,13 @@ d_tcsetpgrp='' d_telldirproto='' d_time='' timetype='' +d_asctime64='' +d_ctime64='' +d_difftime64='' +d_gmtime64='' +d_localtime64='' +d_mktime64='' +d_timegm='' clocktype='' d_times='' d_tmpnam_r='' @@ -762,9 +815,11 @@ d_semctl_semid_ds='' d_semctl_semun='' d_union_semun='' d_unordered='' +d_unsetenv='' d_usleep='' d_usleepproto='' d_ustat='' +d_pseudofork='' d_vfork='' usevfork='' d_voidsig='' @@ -778,6 +833,7 @@ d_wcstombs='' d_wctomb='' d_writev='' dlext='' +bin_ELF='' cccdlflags='' ccdlflags='' dlsrc='' @@ -807,6 +863,7 @@ html3dir='' html3direxp='' installhtml3dir='' i_arpainet='' +i_assert='' i_crypt='' db_hashtype='' db_prefixtype='' @@ -836,9 +893,16 @@ i_limits='' i_locale='' i_machcthr='' i_malloc='' +i_mallocmalloc='' i_math='' i_memory='' i_mntent='' +d_gdbm_ndbm_h_uses_prototypes='' +d_gdbmndbm_h_uses_prototypes='' +d_ndbm='' +d_ndbm_h_uses_prototypes='' +i_gdbm_ndbm='' +i_gdbmndbm='' i_ndbm='' i_netdb='' i_neterrno='' @@ -879,6 +943,7 @@ i_sysmode='' i_sysmount='' i_sysndir='' i_sysparam='' +i_syspoll='' i_sysresrc='' i_syssecrt='' i_sysselct='' @@ -909,6 +974,7 @@ i_stdarg='' i_varargs='' i_varhdr='' i_vfork='' +d_inc_version_list='' inc_version_list='' inc_version_list_init='' installprefix='' @@ -952,6 +1018,10 @@ sPRIgldbl='' sSCNfldbl='' lseeksize='' lseektype='' +mad='' +madlyh='' +madlyobj='' +madlysrc='' make_set_make='' d_mymalloc='' freetype='' @@ -1019,6 +1089,7 @@ i8size='' i8type='' ivsize='' ivtype='' +nv_overflows_integers_at='' nv_preserves_uv_bits='' nvsize='' nvtype='' @@ -1084,6 +1155,7 @@ sig_name_init='' sig_num='' sig_num_init='' sig_size='' +d_sitearch='' installsitearch='' sitearch='' sitearchexp='' @@ -1126,6 +1198,10 @@ stdchar='' d_stdio_stream_array='' stdio_stream_array='' sysman='' +sGMTIME_max='' +sGMTIME_min='' +sLOCALTIME_max='' +sLOCALTIME_min='' trnl='' uidformat='' uidsign='' @@ -1134,6 +1210,8 @@ uidtype='' archname64='' use64bitall='' use64bitint='' +dtrace='' +usedtrace='' usefaststdio='' ccflags_uselargefiles='' ldflags_uselargefiles='' @@ -1147,7 +1225,6 @@ nm_so_opt='' runnm='' usenm='' useperlio='' -userelocatableinc='' usesocks='' d_oldpthreads='' use5005threads='' @@ -1157,6 +1234,7 @@ usethreads='' incpath='' mips_type='' usrinc='' +vaproto='' d_vendorarch='' installvendorarch='' vendorarch='' @@ -1196,6 +1274,7 @@ yacc='' yaccflags='' CONFIG='' +: Detect odd OSs define='define' undef='undef' smallmach='pdp11 i8086 z8000 i80286 iAPX286' @@ -1225,27 +1304,12 @@ elif test -d c:/. -o -n "$is_os2" ; then _exe=".exe" fi +groupstype='' i_whoami='' -ccname='' -ccversion='' -perllibs='' -: set useposix=false in your hint file to disable the POSIX extension. -useposix=true -: set useopcode=false in your hint file to disable the Opcode extension. -useopcode=true : Trailing extension. Override this in a hint file, if needed. : Extra object files, if any, needed on this platform. archobjs='' archname='' -: Possible local include directories to search. -: Set locincpth to "" in a hint file to defeat local include searches. -locincpth="/usr/local/include /opt/local/include /usr/gnu/include" -locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include" -: -: no include file wanted by default -inclwanted='' - -groupstype='' libnames='' : change the next line if compiling for Xenix/286 on Xenix/386 xlibpth='/usr/lib/386 /lib/386' @@ -1258,6 +1322,7 @@ glibpth="/lib /usr/lib $xlibpth" glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib" test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth" test -f /shlib/libc.so && glibpth="/shlib $glibpth" +test -d /usr/lib64 && glibpth="$glibpth /lib64 /usr/lib64 /usr/local/lib64" : Private path used by Configure to find libraries. Its value : is prepended to libpth. This variable takes care of special @@ -1268,20 +1333,36 @@ plibpth='' libswanted='' : some systems want to use only the non-versioned libso:s ignore_versioned_solibs='' -siteman1dir='' -siteman3dir='' -sitescript='' +: set usethreads on the Configure command line to enable threads. +usereentrant='undef' +: full support for void wanted by default +defvoidused=15 + +: Possible local include directories to search. +: Set locincpth to "" in a hint file to defeat local include searches. +locincpth="/usr/local/include /opt/local/include /usr/gnu/include" +locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include" +: +: no include file wanted by default +inclwanted='' + +: Enable -DEBUGGING and -DDEBUGGING from the command line +EBUGGING='' +DEBUGGING=old + +ccname='' +ccversion='' +perllibs='' +: set useposix=false in your hint file to disable the POSIX extension. +useposix=true +: set useopcode=false in your hint file to disable the Opcode extension. +useopcode=true archname64='' ccflags_uselargefiles='' ldflags_uselargefiles='' libswanted_uselargefiles='' : set usemultiplicity on the Configure command line to enable multiplicity. : set usesocks on the Configure command line to enable socks. -: set usethreads on the Configure command line to enable threads. -usereentrant='undef' -: full support for void wanted by default -defvoidused=15 - : List of libraries we want. : If anyone needs extra -lxxx, put those in a hint file. libswanted="sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl dld ld sun" @@ -1359,14 +1440,14 @@ if `$sh -c '#' >/dev/null 2>&1`; then echo "#!$xcat" >sharp $eunicefix sharp chmod +x sharp - ./sharp > today + ./sharp > today 2>/dev/null if test -s today; then sharpbang='#!' else echo "#! $xcat" > sharp $eunicefix sharp chmod +x sharp - ./sharp > today + ./sharp > today 2>/dev/null if test -s today; then sharpbang='#! ' else @@ -1409,11 +1490,10 @@ else fi rm -f sharp - : Save command line options in file UU/cmdline.opt for later use in : generating config.sh. cat > cmdline.opt <>cmdline.opt < cmdl.opt $arg EOC @@ -1434,8 +1513,6 @@ EOC argn=`expr $argn + 1` args_sep=' ' done -# args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@" -# used by ./hints/os2.sh rm -f cmdl.opt : produce awk script to parse command line options @@ -1523,6 +1600,7 @@ while test $# -gt 0; do fi cd UU shift;; + --help|\ -h) shift; error=true;; -r) shift; reuseval=true;; -s) shift; silent=true; realsilent=true;; @@ -1566,7 +1644,7 @@ while test $# -gt 0; do case "$zzz" in *:*) zzz='' ;; *) xxx=append - zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'` + zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'` yyy=`echo "$yyy"|sed 's!=.*!!'` ;; esac ;; @@ -1580,7 +1658,7 @@ while test $# -gt 0; do *) xxx=`echo "$yyy"|sed 's!:.*!!'` yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;; esac - ;; + ;; esac case "$xxx" in append) @@ -1605,7 +1683,7 @@ while test $# -gt 0; do esac shift ;; - -V) echo "$me generated by metaconfig 3.0 PL70." >&2 + -V) echo "$me generated by metaconfig 3.5 PL0." >&2 exit 0;; --) break;; -*) echo "$me: unknown option $1" >&2; shift; error=true;; @@ -1627,6 +1705,14 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value] -D : define symbol to have some value: -D symbol symbol gets the value 'define' -D symbol=value symbol gets the value 'value' + common used examples (see INSTALL for more info): + -Duse64bitint use 64bit integers + -Duse64bitall use 64bit integers and pointers + -Dusethreads use thread support + -Dinc_version_list=none do not include older perl trees in @INC + -DEBUGGING=none DEBUGGING options + -Dcc=gcc choose your compiler + -Dprefix=/opt/perl5 choose your destination -E : stop at the end of questions, after having produced config.sh. -K : do not use unless you know what you are doing. -O : let -D and -U override definitions from loaded configuration file. @@ -1634,16 +1720,19 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value] -U : undefine symbol: -U symbol symbol gets the value 'undef' -U symbol= symbol gets completely empty + e.g.: -Uversiononly -A : manipulate symbol after the platform specific hints have been applied: - -A symbol=value append " "value to symbol - -A append:symbol=value append value to symbol - -A define:symbol=value define symbol to have value - -A clear:symbol define symbol to be '' - -A define:symbol define symbol to be 'define' - -A eval:symbol=value define symbol to be eval of value - -A prepend:symbol=value prepend value to symbol - -A undef:symbol define symbol to be 'undef' - -A undef:symbol= define symbol to be '' + -A append:symbol=value append value to symbol + -A symbol=value like append:, but with a separating space + -A define:symbol=value define symbol to have value + -A clear:symbol define symbol to be '' + -A define:symbol define symbol to be 'define' + -A eval:symbol=value define symbol to be eval of value + -A prepend:symbol=value prepend value to symbol + -A undef:symbol define symbol to be 'undef' + -A undef:symbol= define symbol to be '' + e.g.: -A prepend:libswanted='cl pthread ' + -A ccflags=-DSOME_MACRO -V : print version number and exit (with a zero status). EOM exit 1 @@ -1678,7 +1767,7 @@ touch optdef.sh touch posthint.sh : set package name -package=perl5 +package='perl5' first=`echo $package | sed -e 's/^\(.\).*/\1/'` last=`echo $package | sed -e 's/^.\(.*\)/\1/'` case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in @@ -1724,11 +1813,11 @@ case "$src" in '') src=/ rsrc=/ ;; -/*) rsrc="$src";; -*) rsrc="../$src";; +/*) rsrc="$src";; +*) rsrc="../$src";; esac if test -f $rsrc/Configure && \ - $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1 + $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1 then : found it, so we are ok. else @@ -1882,11 +1971,13 @@ rm -f .echotmp echo " " 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}' "$rsrc/MANIFEST" | (split -l 50 2>/dev/null || split -50) + awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \ + (split -l 50 2>/dev/null || split -50) rm -f missing tmppwd=`pwd` for filelist in x??; do - (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` >/dev/null 2>>"$tmppwd/missing") + (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \ + >/dev/null 2>>"$tmppwd/missing") done if test -s missing; then cat missing >&4 @@ -1920,8 +2011,8 @@ else fi rm -f missing x?? -echo " " : Find the appropriate value for a newline for tr +echo " " if test -n "$DJGPP"; then trnl='\012' fi @@ -2065,9 +2156,11 @@ persist across sessions for $package. You may safely delete it if you wish. EOF +: See if we are using a devel version and want that xversion=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h` case "$usedevel" in -$define|true|[yY]*) ;; +$define|true|[yY]*) + usedevel="$define" ;; *) case "$xversion" in *[13579]) cat >&4 </dev/null; then + echo "Substituting less -R for less." + less="$less -R" + _less=$less + fi + ;; +esac case "$ln" in ln) echo "Substituting cp for ln." @@ -2363,7 +2464,7 @@ ln) ;; esac case "$make" in -make) +make) case "$gmake" in gmake) echo "I can't find make or gmake, and my life depends on it." >&4 @@ -2372,7 +2473,7 @@ make) ;; esac ;; -esac +esac case "$gmake" in gmake) ;; *) # We can't have osname yet. @@ -2428,6 +2529,20 @@ FOO ;; esac +# This question was auctioned at YAPC::Europe-2007 in Vienna +# I never promised you could answer it. I only auctioned the question. +cat <trygcc $startsh EOS @@ -2449,15 +2564,36 @@ EOM case "$cc" in *gcc*) trygcc=no ;; esac - case "`$cc -v -c try.c 2>&1`" in - *gcc*) trygcc=no ;; - esac + # Skip this test because it gives a false match on output like: + # ./trygcc: line 23: cc: command not found + # case "`$cc -v -c try.c 2>&1`" in + # *gcc*) trygcc=no ;; + # esac if $test X"$trygcc" = Xyes; then if gcc -o try -c try.c; then echo " " echo "You seem to have a working gcc, though." >&4 - rp="Would you like to use it?" - dflt=y + # Switching compilers may undo the work of hints files. + # The most common problem is -D_REENTRANT for threads. + # This heuristic catches that case, but gets false positives + # if -Dusethreads was not actually specified. Better to + # bail out here with a useful message than fail + # mysteriously later. Should we perhaps just try to + # re-invoke Configure -Dcc=gcc config_args ? + if $test -f usethreads.cbu; then + $cat >&4 <&4 </dev/null` $test -z "$myuname" && myuname=`hostname 2>/dev/null` # tr '[A-Z]' '[a-z]' would not work in EBCDIC # because the A-Z/a-z are not consecutive. -myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \ +myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e "s,['/],,g" | \ ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '` newmyuname="$myuname" dflt=n @@ -3122,18 +3249,21 @@ EOM domainos) osname=apollo osvers="$3" ;; - dgux) osname=dgux + dgux) osname=dgux + osvers="$3" + ;; + dragonfly) osname=dragonfly osvers="$3" ;; dynixptx*) osname=dynixptx osvers=`echo "$4"|sed 's/^v//'` ;; - freebsd) osname=freebsd + freebsd) osname=freebsd osvers="$3" ;; genix) osname=genix ;; gnu) osname=gnu osvers="$3" ;; - hp*) osname=hpux + hp*) osname=hpux osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'` ;; irix*) osname=irix @@ -3229,7 +3359,7 @@ EOM *freebsd*) ;; svr*) : svr4.x or possibly later - case "svr$3" in + case "svr$3" in ${osname}*) osname=svr$3 osvers=$4 @@ -3292,7 +3422,7 @@ EOM osvers="$5" fi fi - + case "$targetarch" in '') ;; *) hostarch=$osname @@ -3360,8 +3490,13 @@ EOM $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;; +: decide how portable to be. Allow command line overrides. +case "$d_portable" in +"$undef") ;; +*) d_portable="$define" ;; 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' +: set up shell script to do ~ expansion +cat >filexp <&2 + exit 1 + fi + case "\$1" in + */*) + echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\` + ;; + *) + echo \$dir + ;; + esac + fi + ;; +*) + echo \$1 + ;; +esac +EOSS +chmod +x filexp +$eunicefix filexp -case "$usesocks" in -$define|true|[yY]*) dflt='y';; -*) dflt='n';; +: now set up to get a file name +cat <getfile +$startsh +EOS +cat <<'EOSC' >>getfile +tilde='' +fullpath='' +already='' +skip='' +none_ok='' +exp_file='' +nopath_ok='' +orig_rp="$rp" +orig_dflt="$dflt" +case "$gfpth" in +'') gfpth='.' ;; esac -cat <getfile.ok + fn=`echo $fn | sed 's/(.*)//'` + ;; +esac -If this doesn't make any sense to you, just accept the default '$dflt'. -EOM -rp='Build Perl for SOCKS?' -. ./myread -case "$ans" in -y|Y) val="$define" ;; -*) val="$undef" ;; +case "$fn" in +*:*) + loc_file=`expr $fn : '.*:\(.*\)'` + fn=`expr $fn : '\(.*\):.*'` + ;; esac -set usesocks -eval $setvar -case "$usesocks" in -$define|true|[yY]*) useperlio="$define";; +case "$fn" in +*~*) tilde=true;; +esac +case "$fn" in +*/*) fullpath=true;; +esac +case "$fn" in +*+*) skip=true;; +esac +case "$fn" in +*n*) none_ok=true;; +esac +case "$fn" in +*e*) exp_file=true;; +esac +case "$fn" in +*p*) nopath_ok=true;; esac -case "$useperlio" in -$define|true|[yY]*|'') dflt='y';; -*) dflt='n';; +case "$fn" in +*f*) type='File';; +*d*) type='Directory';; +*l*) type='Locate';; esac -cat <. Versions 5.003_02 and later of $package allow -alternate IO mechanisms via the PerlIO abstraction layer, but the -stdio mechanism is still available if needed. The 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. +what="$type" +case "$what" in +Locate) what='File';; +esac -If this doesn't make any sense to you, just accept the default '$dflt'. -EOM -rp='Use the PerlIO abstraction layer?' -. ./myread -case "$ans" in -y|Y) - val="$define" - ;; -*) - echo "Ok, doing things the stdio way." - val="$undef" +case "$exp_file" in +'') + case "$d_portable" in + "$define") ;; + *) exp_file=true;; + esac ;; esac -set useperlio -eval $setvar - -case "$usesocks" in -$define|true|[yY]*) - case "$useperlio" in - $define|true|[yY]*) ;; - *) cat >&4 </dev/null 2>&1 + then + value="$ans" + ansexp="$ans" + break + fi + case "$ans" in + none) + value='' + ansexp='' + case "$none_ok" in + true) type='';; esac ;; - *) dflt='n';; - esac - ;; -esac -cat <&4 + echo "Use a ! shell escape if you wish to check pathnames." >&4 + ;; + *) + echo "Please give a full path name, starting with slash." >&4 + case "$tilde" in + true) + echo "Note that using ~name is ok provided it expands well." >&4 + already=true + ;; + esac + esac + ;; + esac + ;; + esac + case "$redo" in + '') + case "$type" in + File) + for fp in $gfpth; do + if test "X$fp" = X.; then + pf="$ansexp" + else + pf="$fp/$ansexp" + fi + if test -f "$pf"; then + type='' + elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1 + then + echo "($value is not a plain file, but that's ok.)" + type='' + fi + if test X"$type" = X; then + value="$pf" + break + fi + done + ;; + Directory) + for fp in $gfpth; do + if test "X$fp" = X.; then + dir="$ans" + direxp="$ansexp" + else + dir="$fp/$ansexp" + direxp="$fp/$ansexp" + fi + if test -d "$direxp"; then + type='' + value="$dir" + break + fi + done + ;; + Locate) + if test -d "$ansexp"; then + echo "(Looking for $loc_file in directory $value.)" + value="$value/$loc_file" + ansexp="$ansexp/$loc_file" + fi + if test -f "$ansexp"; then + type='' + fi + case "$nopath_ok" in + true) case "$value" in + */*) ;; + *) echo "Assuming $value will be in people's path." + type='' + ;; + esac + ;; + esac + ;; + esac -Since release 5.6, Perl has had two different threading implementations, -the newer interpreter-based version (ithreads) with one interpreter per -thread, and the older 5.005 version (5005threads). -The 5005threads version is effectively unmaintained and will probably be -removed in Perl 5.10, so there should be no need to build a Perl using it -unless needed for backwards compatibility with some existing 5.005threads -code. + case "$skip" in + true) type=''; + esac -EOM - : Default to ithreads unless overridden on command line or with - : old config.sh - dflt='y' - case "$use5005threads" in - $define|true|[yY]*) dflt='n';; - esac - case "$useithreads" in - $undef|false|[nN]*) dflt='n';; - esac - rp='Use the newer interpreter-based ithreads?' - . ./myread - case "$ans" in - y|Y) val="$define" ;; - *) val="$undef" ;; - esac - set useithreads - eval $setvar - : Now set use5005threads to the opposite value. - case "$useithreads" in - $define) val="$undef" ;; - *) val="$define" ;; + case "$type" in + '') ;; + *) + if test "$fastread" = yes; then + dflt=y + else + dflt=n + fi + rp="$what $value doesn't exist. Use that name anyway?" + . UU/myread + dflt='' + case "$ans" in + y*) type='';; + *) echo " ";; + esac + ;; + esac + ;; + esac + ;; esac - set use5005threads - eval $setvar +done +cd UU +ans="$value" +rp="$orig_rp" +dflt="$orig_dflt" +rm -f getfile.ok +test "X$gfpthkeep" != Xy && gfpth="" +EOSC + +: determine root of directory hierarchy where package will be installed. +case "$prefix" in +'') + dflt=`./loc . /usr/local /usr/local /local /opt /usr` + ;; +*?/) + dflt=`echo "$prefix" | sed 's/.$//'` ;; *) - useithreads="$undef" - use5005threads="$undef" + dflt="$prefix" ;; esac +$cat <&4 <&4 <&4 +else + echo "AFS does not seem to be running..." >&4 +fi +: determine installation prefix for where package is to be installed. +if $afs; then +$cat <installprefix +$startsh +EOS +cat <<'EOSC' >>installprefix +: Change installation prefix, if necessary. +if $test X"$prefix" != X"$installprefix"; then + eval "install${prefixvar}=\`echo \$${prefixvar}exp | sed \"s#^\$prefixexp#\$installprefixexp#\"\`" +else + eval "install${prefixvar}=\"\$${prefixvar}exp\"" fi +EOSC +chmod +x installprefix +$eunicefix installprefix + +: Set variables such as privlib and privlibexp from the output of ./getfile +: performing the prefixexp/installprefixexp correction if necessary. +cat <setprefixvar +$startsh +EOS +cat <<'EOSC' >>setprefixvar +eval "${prefixvar}=\"\$ans\"" +eval "${prefixvar}exp=\"\$ansexp\"" +. ./installprefix +EOSC +chmod +x setprefixvar +$eunicefix setprefixvar + +: set up the script used to warn in case of inconsistency +cat <whoa +$startsh +EOS +cat <<'EOSC' >>whoa +dflt=y +case "$hint" in + recommended) + case "$hintfile" in + '') echo "The $hint value for \$$var on this machine was \"$was\"!" >&4 + ;; + *) echo "Hmm. Based on the hints in hints/$hintfile.sh, " >&4 + echo "the $hint value for \$$var on this machine was \"$was\"!" >&4 + ;; + esac + ;; + *) echo " " + echo "*** WHOA THERE!!! ***" >&4 + echo " The $hint value for \$$var on this machine was \"$was\"!" >&4 + ;; +esac +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' +: Check is we will use socks +case "$usesocks" in +$define|true|[yY]*) dflt='y';; +*) dflt='n';; +esac cat <. Versions 5.003_02 and later of $package allow +alternate IO mechanisms via the PerlIO abstraction layer, but the +stdio mechanism is still available if needed. The 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. + +If this doesn't make any sense to you, just accept the default '$dflt'. EOM +rp='Use the PerlIO abstraction layer?' +. ./myread +case "$ans" in +y|Y) val="$define" ;; -*) case "$usemultiplicity" in - $define|true|[yY]*) dflt='y';; - *) dflt='n';; - esac - echo " " - echo "If this doesn't make any sense to you, just accept the default '$dflt'." - rp='Build Perl for multiplicity?' - . ./myread - case "$ans" in - y|Y) val="$define" ;; - *) val="$undef" ;; - esac +*) + echo "Ok, doing things the stdio way." + val="$undef" ;; esac -set usemultiplicity +set useperlio eval $setvar +case "$usesocks" in +$define|true|[yY]*) + case "$useperlio" in + $define|true|[yY]*) ;; + *) cat >&4 <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 +echo "Getting the current patchlevel..." >&4 +if $test -r $rsrc/patchlevel.h;then + revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h` + patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h` + subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` + api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h` + api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h` + api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` + perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'` 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" - ;; + revision=0 + patchlevel=0 + subversion=0 + api_revision=0 + api_version=0 + api_subversion=0 + perl_patchlevel=0 + $echo "(You do not have patchlevel.h. Eek.)" +fi +if $test -r $rsrc/.patch ; then + if $test "X$perl_patchlevel" = "X" || $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then + perl_patchlevel=`cat $rsrc/.patch` + fi +fi +: Define a handy string here to avoid duplication in myconfig.SH and configpm. +version_patchlevel_string="version $patchlevel subversion $subversion" +case "$perl_patchlevel" in +0|'') ;; +*) perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'` + version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" + ;; esac -: Detect OS2. The p_ variable is set above in the Head.U unit. -: Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses -: semicolon as a patch separator -case "$p_" in -:) ;; + +$echo "(You have $package $version_patchlevel_string.)" + +case "$osname" in +dos|vms) + : XXX Should be a Configure test for double-dots in filenames. + version=`echo $revision $patchlevel $subversion | \ + $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'` + api_versionstring=`echo $api_revision $api_version $api_subversion | \ + $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'` + ;; *) - $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! -(Or you may be running DOS with DJGPP.) -EOI - echo exit 0 >os2 + version=`echo $revision $patchlevel $subversion | \ + $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'` + api_versionstring=`echo $api_revision $api_version $api_subversion | \ + $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'` ;; 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 +: Special case the 5.005_xx maintenance series, which used 5.005 +: without any subversion label as a subdirectory in $sitelib +if test "${api_revision}${api_version}${api_subversion}" = "550"; then + api_versionstring='5.005' fi -chmod +x bsd usg v7 osf1 eunice xenix venix os2 -$eunicefix bsd usg v7 osf1 eunice xenix venix os2 -$rm -f foo -case "$cc" in -'') dflt=cc;; -*) dflt="$cc";; +: Do we want threads support and if so, what type +case "$usethreads" in +$define|true|[yY]*) dflt='y';; +*) # Catch case where user specified ithreads or 5005threads but + # forgot -Dusethreads (A.D. 4/2002) + case "$useithreads$use5005threads" in + *$define*) + case "$useperlio" in + "$define") dflt='y' ;; + *) dflt='n' ;; + esac + ;; + *) dflt='n';; + esac + ;; esac -rp="Use which C compiler?" +cat <&4 -$cat >try.c < -int main() { -#ifdef __GNUC__ -#ifdef __VERSION__ - printf("%s\n", __VERSION__); -#else - printf("%s\n", "1"); -#endif -#endif - return(0); -} EOM -if $cc -o try $ccflags $ldflags try.c; then - gccversion=`$run ./try` - case "$gccversion" in - '') echo "You are not using GNU cc." ;; - *) echo "You are using GNU cc $gccversion." - ccname=gcc - ;; + : Default to ithreads unless overridden on command line or with + : old config.sh + dflt='y' + case "$use5005threads" in + $define|true|[yY]*) dflt='n';; esac -else - echo " " - echo "*** WHOA THERE!!! ***" >&4 - echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4 - case "$knowitall" in - '') - echo " You'd better start hunting for one and let me know about it." >&4 - exit 1 - ;; + case "$useithreads" in + $undef|false|[nN]*) dflt='n';; esac -fi -$rm -f try try.* -case "$gccversion" in -1*) cpp=`./loc gcc-cpp $cpp $pth` ;; -esac -case "$gccversion" in -'') gccosandvers='' ;; -*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'` - gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"` - gccshortvers='' - case "$gccosandvers" in - $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr - $osname$osvers) ;; # looking good - $osname*) cat <&4 + rp='Use the newer interpreter-based ithreads?' + . ./myread + case "$ans" in + y|Y) val="$define" ;; + *) val="$undef" ;; + esac + set useithreads + eval $setvar + : Now set use5005threads to the opposite value. + case "$useithreads" in + $define) val="$undef" ;; + *) val="$define" ;; + esac + set use5005threads + eval $setvar + ;; + *) + useithreads="$undef" + use5005threads="$undef" + ;; + esac -*** WHOA THERE!!! *** + case "$useithreads$use5005threads" in + "$define$define") + $cat >&4 <&4 <try.c - for incdir in $locincpth; do - warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ - grep '^c[cp]p*[01]: warning: changing search order '` - if test "X$warn" != X; then - locincpth=`echo " $locincpth " | sed "s! $incdir ! !"` - fi - done - $rm -f try try.* -esac +5.005 threads has been removed for 5.10. Perl will be built using ithreads. -: decide how portable to be. Allow command line overrides. -case "$d_portable" in -"$undef") ;; -*) d_portable="$define" ;; +EOM + ;; + esac + fi + + use5005threads="$undef" + useithreads="$usethreads" +fi + +if test X"$usethreads" = "X$define" -a "X$useperlio" = "Xundef"; then + cat >&4 <filexp <&2 - exit 1 - fi - case "\$1" in - */*) - echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\` - ;; - *) - echo \$dir - ;; - esac - fi - ;; -*) - echo \$1 + +: Look for a hint-file generated 'call-back-unit'. If the +: user has specified that a threading perl is to be built, +: we may need to set or change some other defaults. +if $test -f usethreads.cbu; then + echo "Your platform has some specific hints regarding threaded builds, using them..." + . ./usethreads.cbu +else + case "$usethreads" in + "$define"|true|[yY]*) + $cat <getfile -$startsh -EOS -cat <<'EOSC' >>getfile -tilde='' -fullpath='' -already='' -skip='' -none_ok='' -exp_file='' -nopath_ok='' -orig_rp="$rp" -orig_dflt="$dflt" -case "$gfpth" in -'') gfpth='.' ;; -esac +: Check if multiplicity is required +cat <getfile.ok - fn=`echo $fn | sed 's/(.*)//'` +Perl can be built so that multiple Perl interpreters can coexist +within the same Perl executable. +EOM + +case "$useithreads" in +$define) + 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 - -case "$exp_file" in -'') - case "$d_portable" in - "$define") ;; - *) exp_file=true;; - esac +: Detect OS2. The p_ variable is set above in the Head.U unit. +: Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses +: semicolon as a patch separator +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! +(Or you may be running DOS with DJGPP.) +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 -cd .. -while test "$type"; do - redo='' - rp="$orig_rp" - dflt="$orig_dflt" - case "$tilde" in - true) rp="$rp (~name ok)";; +: Check if we are using GNU gcc and what its version is +echo " " +echo "Checking for GNU cc in disguise and/or its version number..." >&4 +$cat >try.c < +int main() { +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +#ifdef __VERSION__ + printf("%s\n", __VERSION__); +#else + printf("%s\n", "1"); +#endif +#endif + return(0); +} +EOM +if $cc -o try $ccflags $ldflags try.c; then + gccversion=`$run ./try` + case "$gccversion" in + '') echo "You are not using GNU cc." ;; + *) echo "You are using GNU cc $gccversion." + ccname=gcc + ;; esac - . UU/myread - if test -f UU/getfile.ok && \ - $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1 - then - value="$ans" - ansexp="$ans" - break - fi - case "$ans" in - none) - value='' - ansexp='' - case "$none_ok" in - true) type='';; - esac +else + echo " " + echo "*** WHOA THERE!!! ***" >&4 + echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4 + case "$knowitall" in + '') + echo " You'd better start hunting for one and let me know about it." >&4 + exit 1 ;; - *) - case "$tilde" in - '') value="$ans" - ansexp="$ans";; - *) - value=`UU/filexp $ans` - case $? in - 0) - if test "$ans" != "$value"; then - echo "(That expands to $value on this system.)" - fi - ;; - *) value="$ans";; - esac - ansexp="$value" - case "$exp_file" in - '') value="$ans";; - esac - ;; - esac - case "$fullpath" in - true) - case "$ansexp" in - /*) value="$ansexp" ;; - [a-zA-Z]:/*) value="$ansexp" ;; - *) - redo=true - case "$already" in - true) - echo "I shall only accept a full path name, as in /bin/ls." >&4 - echo "Use a ! shell escape if you wish to check pathnames." >&4 - ;; - *) - echo "Please give a full path name, starting with slash." >&4 - case "$tilde" in - true) - echo "Note that using ~name is ok provided it expands well." >&4 - already=true - ;; - esac - esac - ;; - esac - ;; - esac - case "$redo" in - '') - case "$type" in - File) - for fp in $gfpth; do - if test "X$fp" = X.; then - pf="$ansexp" - else - pf="$fp/$ansexp" - fi - if test -f "$pf"; then - type='' - elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1 - then - echo "($value is not a plain file, but that's ok.)" - type='' - fi - if test X"$type" = X; then - value="$pf" - break - fi - done - ;; - Directory) - for fp in $gfpth; do - if test "X$fp" = X.; then - dir="$ans" - direxp="$ansexp" - else - dir="$fp/$ansexp" - direxp="$fp/$ansexp" - fi - if test -d "$direxp"; then - type='' - value="$dir" - break - fi - done - ;; - Locate) - if test -d "$ansexp"; then - echo "(Looking for $loc_file in directory $value.)" - value="$value/$loc_file" - ansexp="$ansexp/$loc_file" - fi - if test -f "$ansexp"; then - type='' - fi - case "$nopath_ok" in - true) case "$value" in - */*) ;; - *) echo "Assuming $value will be in people's path." - type='' - ;; - esac - ;; - esac - ;; - esac + esac +fi +$rm -f try try.* +case "$gccversion" in +1*) cpp=`./loc gcc-cpp $cpp $pth` ;; +esac +case "$gccversion" in +'') gccosandvers='' ;; +*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'` + gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"` + gccshortvers='' + case "$gccosandvers" in + $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr + $osname$osvers) ;; # looking good + $osname*) cat <&4 - case "$skip" in - true) type=''; - esac +*** WHOA THERE!!! *** - case "$type" in - '') ;; - *) - if test "$fastread" = yes; then - dflt=y - else - dflt=n - fi - rp="$what $value doesn't exist. Use that name anyway?" - . UU/myread - dflt='' - case "$ans" in - y*) type='';; - *) echo " ";; - esac - ;; - esac - ;; - esac - ;; - esac -done -cd UU -ans="$value" -rp="$orig_rp" -dflt="$orig_dflt" -rm -f getfile.ok -test "X$gfpthkeep" != Xy && gfpth="" -EOSC + Your gcc has not been compiled for the exact release of + your operating system ($gccosandvers versus $osname$osvers). + + In general it is a good idea to keep gcc synchronized with + the operating system because otherwise serious problems + may ensue when trying to compile software, like Perl. + + I'm trying to be optimistic here, though, and will continue. + If later during the configuration and build icky compilation + problems appear (headerfile conflicts being the most common + manifestation), I suggest reinstalling the gcc to match + your operating system release. + +EOM + ;; + *) gccosandvers='' ;; # failed to parse, better be silent + esac + ;; +esac +case "$ccname" in +'') ccname="$cc" ;; +esac + +# gcc 3.* complain about adding -Idirectories that they already know about, +# so we will take those off from locincpth. +case "$gccversion" in +3*) + echo "main(){}">try.c + for incdir in $locincpth; do + warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \ + grep '^c[cp]p*[01]: warning: changing search order '` + if test "X$warn" != X; then + locincpth=`echo " $locincpth " | sed "s! $incdir ! !"` + fi + done + $rm -f try try.* +esac : What should the include directory be ? echo " " @@ -4537,11 +4889,14 @@ lib_ext=$_a obj_ext=$_o path_sep=$p_ +rm_try="$rm -f try try$_exe a.out .out try.[cho] try.$_o core core.try* try.core*" + : Which makefile gets called first. This is used by make depend. case "$firstmakefile" in '') firstmakefile='makefile';; esac +: Check for uselongdouble support case "$ccflags" in *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;; esac @@ -4618,7 +4973,7 @@ for thislib in $libswanted; do xxx=$thisdir/lib$thislib.$so $test -f "$xxx" && eval $libscheck $test -f "$xxx" && libstyle=shared - fi + fi if test ! -f "$xxx"; then xxx=$thisdir/lib$thislib$_a $test -f "$xxx" && eval $libscheck @@ -4660,7 +5015,7 @@ for thislib in $libswanted; do ;; esac break - fi + fi done if $test ! -f "$xxx"; then echo "No -l$thislib." @@ -4713,19 +5068,75 @@ case "$optimize" in 'none') optimize=" ";; esac +: Check what DEBUGGING is required from the command line +: -DEBUGGING or -DDEBUGGING or +: -DEBUGGING=both = -g + -DDEBUGGING +: -DEBUGGING=-g or -Doptimize=-g = -g +: -DEBUGGING=none or -UDEBUGGING = +: -DEBUGGING=old or -DEBUGGING=default = ? $optimize +case "$EBUGGING" in +'') ;; +*) DEBUGGING=$EBUGGING ;; +esac + +case "$DEBUGGING" in +-g|both|$define) + case "$optimize" in + *-g*) ;; + *) optimize="$optimize -g" ;; + esac ;; +none|$undef) + case "$optimize" in + *-g*) set `echo "X $optimize " | sed 's/ -g / /'` + shift + optimize="$*" + ;; + esac ;; +esac + dflt='' +case "$DEBUGGING" in +both|$define) dflt='-DDEBUGGING' +esac + +: argument order is deliberate, as the flag will start with - which set could +: think is an option +checkccflag='check=$1; flag=$2; callback=$3; +echo " "; +echo "Checking if your compiler accepts $flag" 2>&1; +echo "int main(void) { return 0; }" > gcctest.c; +if $cc -O2 $flag -o gcctest gcctest.c 2>gcctest.out && ./gcctest; then + echo "Yes, it does." 2>&1; + if $test -s gcctest.out ; then + echo "But your platform does not like it:"; + cat gcctest.out; + else + case "$ccflags" in + *$check*) + echo "Leaving current flags $ccflags alone." 2>&1 + ;; + *) dflt="$dflt $flag"; + eval $callback + ;; + esac + fi +else + echo "Nope, it does not, but that is ok." 2>&1; +fi +' + : We will not override a previous value, but we might want to : augment a hint file case "$hint" in default|recommended) case "$gccversion" in - 1*) dflt='-fpcc-struct-return' ;; + 1*) dflt="$dflt -fpcc-struct-return" ;; esac - case "$optimize" in - *-g*) dflt="$dflt -DDEBUGGING";; + case "$optimize:$DEBUGGING" in + *-g*:old) dflt="$dflt -DDEBUGGING";; esac case "$gccversion" in - 2*) if test -d /etc/conf/kconfig.d && + 2*) if $test -d /etc/conf/kconfig.d && $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1 then # Interactive Systems (ISC) POSIX mode. @@ -4736,54 +5147,28 @@ default|recommended) case "$gccversion" in 1*) ;; 2.[0-8]*) ;; - ?*) echo " " - echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1 - echo 'int main(void) { return 0; }' > gcctest.c - if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then - echo "Yes, it does." 2>&1 - case "$ccflags" in - *strict-aliasing*) - echo "Leaving current flags $ccflags alone." 2>&1 - ;; - *) dflt="$dflt -fno-strict-aliasing" ;; - esac - else - echo "Nope, it doesn't, but that's ok." 2>&1 - fi + ?*) set strict-aliasing -fno-strict-aliasing + eval $checkccflag ;; esac # For gcc, adding -pipe speeds up compilations for some, but apparently # some assemblers can't read from stdin. (It also slows down compilations # in other cases, but those are apparently rarer these days.) AD 5/2004. case "$gccversion" in - ?*) echo " " - echo "Checking if your compiler accepts -pipe" 2>&1 - echo 'int main(void) { return 0; }' > gcctest.c - if $cc -pipe -o gcctest gcctest.c; then - echo "Yes, it does." 2>&1 - case "$ccflags" in - *-pipe*) - echo "Leaving current flags $ccflags alone." 2>&1 - ;; - *) dflt="$dflt -pipe" ;; - esac - else - echo "Nope, it doesn't, but that's ok." 2>&1 - fi + ?*) set pipe -pipe + eval $checkccflag + ;; + esac - echo "Checking if your compiler accepts -Wdeclaration-after-statement" 2>&1 - echo 'int main(void) { return 0; }' > gcctest.c - if $cc -Wdeclaration-after-statement -o gcctest gcctest.c; then - echo "Yes, it does." 2>&1 - case "$ccflags" in - *-Wdeclaration-after-statement*) - echo "Leaving current flags $ccflags alone." 2>&1 - ;; - *) dflt="$dflt -Wdeclaration-after-statement" ;; - esac - else - echo "Nope, it doesn't, but that's ok." 2>&1 - fi + # on x86_64 (at least) we require an extra library (libssp) in the + # link command line. This library is not named, so I infer that it is + # an implementation detail that may change. Hence the safest approach + # is to add the flag to the flags passed to the compiler at link time, + # as that way the compiler can do the right implementation dependant + # thing. (NWC) + case "$gccversion" in + ?*) set stack-protector -fstack-protector + eval $checkccflag ;; esac ;; @@ -4924,6 +5309,15 @@ case "$ldflags" in ;; *) dflt="$ldflags";; esac +# See note above about -fstack-protector +case "$ccflags" in +*-fstack-protector*) + case "$dflt" in + *-fstack-protector*) ;; # Don't add it again + *) dflt="$dflt -fstack-protector" ;; + esac + ;; +esac : Try to guess additional flags to pick up local libraries. for thislibdir in $libpth; do @@ -4990,7 +5384,7 @@ and I got the following output: EOM dflt=y if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then - if $sh -c "$run ./try" >>try.msg 2>&1; then + if $sh -c "$run ./try " >>try.msg 2>&1; then xxx=`$run ./try` case "$xxx" in "Ok") dflt=n ;; @@ -5039,12 +5433,17 @@ y) ;; n) echo "OK, that should do.";; esac -$rm -f try try.* core +$rm_try gcctest gcctest.out : define a shorthand compile call compile=' mc_file=$1; shift; +case "$usedevel" in $define|true|[yY]*) if $test ! -f "${mc_file}.c"; then +echo "Internal Configure script bug - compiler test file ${mc_file}.c is missing. Please report this to perlbug@perl.org" >&4; +exit 1; +fi; +esac; $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;' : define a shorthand compile call for compilations that should be ok. compile_ok=' @@ -5214,7 +5613,7 @@ EOM fi ;; esac -$rm -f try try.* +$rm_try : check for long long echo " " @@ -5228,7 +5627,7 @@ else val="$undef" echo "You do not have long long." fi -$rm try.* +$rm_try set d_longlong eval $setvar @@ -5259,10 +5658,10 @@ EOCP fi if $test "X$longsize" = "X$longlongsize"; then echo "(That isn't any different from an ordinary long.)" - fi + fi ;; esac -$rm -f try.* try +$rm_try : see if inttypes.h is available : we want a real compile instead of Inhdr because some systems @@ -5282,7 +5681,7 @@ else echo " NOT found." >&4 val="$undef" fi -$rm -f try.c try +$rm_try set i_inttypes eval $setvar @@ -5305,11 +5704,11 @@ else val="$undef" echo "You do not have int64_t." fi -$rm -f try try.* +$rm_try set d_int64_t eval $setvar - +: Check if 64bit ints have a quad type echo " " echo "Checking which 64-bit integer type we could use..." >&4 @@ -5368,7 +5767,7 @@ case "$quadtype" in ;; esac - +: Do we want 64bit support case "$uselonglong" in "$define"|true|[yY]*) cat <&4 @@ -5377,7 +5776,7 @@ case "$uselonglong" in EOM use64bitint="$define" ;; -esac +esac case "$use64bits" in "$define"|true|[yY]*) cat <&4 @@ -5386,7 +5785,7 @@ case "$use64bits" in EOM use64bitint="$define" ;; -esac +esac case "$use64bitints" in "$define"|true|[yY]*) cat <&4 @@ -5395,7 +5794,7 @@ case "$use64bitints" in EOM use64bitint="$define" ;; -esac +esac case "$use64bitsint" in "$define"|true|[yY]*) cat <&4 @@ -5404,7 +5803,7 @@ case "$use64bitsint" in EOM use64bitint="$define" ;; -esac +esac case "$uselonglongs" in "$define"|true|[yY]*) cat <&4 @@ -5413,7 +5812,7 @@ case "$uselonglongs" in EOM use64bitint="$define" ;; -esac +esac case "$use64bitsall" in "$define"|true|[yY]*) cat <&4 @@ -5422,7 +5821,7 @@ case "$use64bitsall" in EOM use64bitall="$define" ;; -esac +esac case "$ccflags" in *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";; @@ -5473,7 +5872,7 @@ case "$use64bitall" in *) dflt='n' ;; esac ;; -esac +esac cat <&4 -else - echo "AFS does not seem to be running..." >&4 -fi - -: determine installation prefix for where package is to be installed. -if $afs; then -$cat <&4 -if $test -r $rsrc/patchlevel.h;then - revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h` - patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h` - subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` - api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h` - api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h` - api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` - perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'` -else - revision=0 - patchlevel=0 - subversion=0 - api_revision=0 - api_version=0 - api_subversion=0 - perl_patchlevel=0 - $echo "(You do not have patchlevel.h. Eek.)" -fi -if $test -r $rsrc/.patch ; then - if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then - perl_patchlevel=`cat $rsrc/.patch` - fi -fi -: Define a handy string here to avoid duplication in myconfig.SH and configpm. -version_patchlevel_string="version $patchlevel subversion $subversion" -case "$perl_patchlevel" in -0|'') ;; -*) version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" ;; -esac - -$echo "(You have $package $version_patchlevel_string.)" - -case "$osname" in -dos|vms) - : XXX Should be a Configure test for double-dots in filenames. - version=`echo $revision $patchlevel $subversion | \ - $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'` - api_versionstring=`echo $api_revision $api_version $api_subversion | \ - $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'` - ;; -*) - version=`echo $revision $patchlevel $subversion | \ - $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'` - api_versionstring=`echo $api_revision $api_version $api_subversion | \ - $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'` - ;; -esac -: Special case the 5.005_xx maintenance series, which used 5.005 -: without any subversion label as a subdirectory in $sitelib -if test "${api_revision}${api_version}${api_subversion}" = "550"; then - api_versionstring='5.005' -fi - : determine installation style : For now, try to deduce it from prefix unless it is already set. : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7. @@ -5946,14 +6194,64 @@ case "$installstyle" in ;; *) dflt="$installstyle" ;; esac -: Probably not worth prompting for this since we prompt for all -: the directories individually, and the prompt would be too long and -: confusing anyway. -installstyle=$dflt +: Probably not worth prompting for this since we prompt for all +: the directories individually, and the prompt would be too long and +: confusing anyway. +installstyle=$dflt + +: determine where public executables go +echo " " +set dflt bin bin +eval $prefixit +fn=d~ +rp='Pathname where the public executables will reside?' +. ./getfile +if $test "X$ansexp" != "X$binexp"; then + installbin='' +fi +prefixvar=bin +: XXX Bug? -- ignores Configure -Dinstallprefix setting. +: XXX If this is fixed, also fix the "start perl" hunk below, which relies on +: this via initialinstalllocation +. ./setprefixvar + +case "$userelocatableinc" in +$define|true|[yY]*) dflt='y' ;; +*) dflt='n' ;; +esac +cat <&4 </dev/null 2>&1; then + perl5=$tdir/perl + break; + elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then + perl5=$tdir/perl5 + break; + fi + done + ;; +*) perl5="$perl5" + ;; +esac +case "$perl5" in +'') echo "None found. That's ok.";; +*) echo "Using $perl5." ;; +esac + +: Set the siteprefix variables +$cat < getverlist <> getverlist <<'EOPL' +# The list found is store twice for each entry: the original name, and +# the binary broken down version as pack "sss", so sorting is easy and +# unambiguous. This will work for all versions that have a maximum of +# three digit groups, separate by '.'s or '_'s. Names are extended with +# ".0.0" to ensure at least three elements for the pack. +# -- H.Merijn Brand (m)'06 23-10-2006 + +# Can't have leading @ because metaconfig interprets it as a command! +;@inc_version_list=(); +# XXX Redo to do opendir/readdir? +if (-d $stem) { + chdir($stem); + ;@candidates = map { + [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*"); + ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates; +} +else { + ;@candidates = (); +} + +($pversion, $aversion, $vsn5005) = map { + pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005"; +foreach $d (@candidates) { + if ($d->[1] lt $pversion) { + if ($d->[1] ge $aversion) { + unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]); + } + elsif ($d->[1] ge $vsn5005) { + unshift(@inc_version_list, grep { -d } $d->[0]); + } + } + else { + # Skip newer version. I.e. don't look in + # 5.7.0 if we're installing 5.6.1. + } +} + +if (@inc_version_list) { + print join(' ', @inc_version_list); +} +else { + # Blank space to preserve value for next Configure run. + print " "; +} +EOPL +chmod +x getverlist +case "$inc_version_list" in +'') if test -x "$perl5$exe_ext"; then + dflt=`$perl5 getverlist` + else + dflt='none' + fi + ;; +$undef) dflt='none' ;; +*) eval dflt=\"$inc_version_list\" ;; +esac +case "$dflt" in +''|' ') dflt=none ;; +esac +case "$dflt" in +5.005) dflt=none ;; +esac +$cat <try.c < #include +#$i_mallocmalloc I_MALLOCMALLOC +#ifdef I_MALLOCMALLOC +# include +#endif + int main () { return 0; } EOCP set try @@ -6151,7 +6655,7 @@ else echo " NOT found." >&4 val="$undef" fi -$rm -f try.c try +$rm_try set i_malloc eval $setvar @@ -6249,7 +6753,7 @@ EOM voidflags="$ans" ;; esac -$rm -f try.* .out +$rm_try : check for length of pointer echo " " @@ -6286,7 +6790,7 @@ EOCP fi ;; esac -$rm -f try.c try +$rm_try case "$use64bitall" in "$define"|true|[yY]*) case "$ptrsize" in @@ -6392,102 +6896,31 @@ $cat >malloc.c </dev/null 2>&1; then - malloctype='void *' - else - malloctype='char *' - fi - ;; -esac -echo "Your system wants malloc to return '$malloctype', it would seem." >&4 - -case "$freetype" in -'') - if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then - freetype='void' - else - freetype='int' - fi - ;; -esac -echo "Your system uses $freetype free(), it would seem." >&4 -$rm -f malloc.[co] -$cat </dev/null 2>&1; then + malloctype='void *' + else + malloctype='char *' + fi ;; esac -siteprefix="$ans" -siteprefixexp="$ansexp" +echo "Your system wants malloc to return '$malloctype', it would seem." >&4 -: determine where site specific libraries go. -: Usual default is /usr/local/lib/perl5/site_perl/$version -: The default "style" setting is made in installstyle.U -: XXX No longer works with Prefixit stuff. -prog=`echo $package | $sed 's/-*[0-9.]*$//'` -case "$sitelib" in -'') case "$installstyle" in - *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;; - *) dflt=$siteprefix/lib/site_$prog/$version ;; - esac - ;; -*) dflt="$sitelib" +case "$freetype" in +'') + if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then + freetype='void' + else + freetype='int' + fi ;; esac -$cat <&4 +$rm -f malloc.[co] : determine where site specific architecture-dependent libraries go. : sitelib default is /usr/local/lib/perl5/site_perl/$version : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname @@ -6510,15 +6943,15 @@ EOM fn=d~+ rp='Pathname for the site-specific architecture-dependent library files?' . ./getfile -sitearch="$ans" -sitearchexp="$ansexp" -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"` +prefixvar=sitearch +. ./setprefixvar +if $test X"$sitearch" = X"$sitelib"; then + d_sitearch="$undef" else - installsitearch="$sitearchexp" + d_sitearch="$define" fi +: Set the vendorprefix variables $cat </dev/null 2>&1 \ + && rm -f perldtrace.tmp + then + echo " " + echo "Good: your $dtrace knows about the -h flag." + else + cat >&2 <&2 < ../extras.lst - val="'$extras'" - ;; -esac -set extras -eval $setvar -echo " " - -: determine where html pages for programs go -set html1dir html1dir none -eval $prefixit -$cat </dev/null 2>&1; then - perl5=$tdir/perl - break; - elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then - perl5=$tdir/perl5 - break; - fi - done - ;; -*) perl5="$perl5" - ;; -esac -case "$perl5" in -'') echo "None found. That's ok.";; -*) echo "Using $perl5." ;; -esac - -: Determine list of previous versions to include in @INC -$cat > getverlist <> getverlist <<'EOPL' -# Can't have leading @ because metaconfig interprets it as a command! -;@inc_version_list=(); -# XXX Redo to do opendir/readdir? -if (-d $stem) { - chdir($stem); - ;@candidates = glob("5.*"); -} -else { - ;@candidates = (); -} - -# XXX ToDo: These comparisons must be reworked when two-digit -# subversions come along, so that 5.7.10 compares as greater than -# 5.7.3! By that time, hope that 5.6.x is sufficiently -# widespread that we can use the built-in version vectors rather -# than reinventing them here. For 5.6.0, however, we must -# assume this script will likely be run by 5.005_0x. --AD 1/2000. -foreach $d (@candidates) { - if ($d lt $version) { - if ($d ge $api_versionstring) { - unshift(@inc_version_list, grep { -d } "$d/$archname", $d); - } - elsif ($d ge "5.005") { - unshift(@inc_version_list, grep { -d } $d); - } - } - else { - # Skip newer version. I.e. don't look in - # 5.7.0 if we're installing 5.6.1. - } -} - -if (@inc_version_list) { - print join(' ', @inc_version_list); -} -else { - # Blank space to preserve value for next Configure run. - print " "; -} -EOPL -chmod +x getverlist -case "$inc_version_list" in -'') if test -x "$perl5$exe_ext"; then - dflt=`$perl5 getverlist` - else - dflt='none' - fi - ;; -$undef) dflt='none' ;; -*) eval dflt=\"$inc_version_list\" ;; -esac -case "$dflt" in -''|' ') dflt=none ;; -esac -case "$dflt" in -5.005) dflt=none ;; + val='' + $rm -f ../extras.lst + ;; +*) echo "(Saving the list of extras for later...)" + echo "$extras" > ../extras.lst + val="'$extras'" + ;; esac -$cat <&4 cat >try.c <<'EOCP' @@ -7023,7 +7392,7 @@ int main(void) { #ifdef __GLIBC__ # ifdef __GLIBC_MINOR__ -# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 +# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus) # include printf("%s\n", gnu_get_libc_version()); # else @@ -7048,7 +7417,7 @@ else gnulibc_version='' echo "You are not using the GNU C Library" fi -$rm -f try try.* glibc.ver +$rm_try glibc.ver set d_gnulibc eval $setvar @@ -7143,6 +7512,7 @@ case "$nm_so_opt" in ;; esac +: Figure out where the libc is located case "$runnm" in true) : get list of predefined functions in a handy place @@ -7372,31 +7742,31 @@ else echo " " echo "$nm didn't seem to work right. Trying $ar instead..." >&4 com='' - if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then + if $ar t $libc > libc.tmp && \ + $contains '^fprintf$' libc.tmp >/dev/null 2>&1 + then for thisname in $libnames $libc; do $ar t $thisname >>libc.tmp done $sed -e "s/\\$_o\$//" < libc.tmp > libc.list echo "Ok." >&4 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then - # Repeat libc to extract forwarders to DLL entries too for thisname in $libnames $libc; do $ar tv $thisname >>libc.tmp - # Revision 50 of EMX has bug in $ar. - # it will not extract forwarders to DLL entries - # Use emximp which will extract exactly them. emximp -o tmp.imp $thisname \ 2>/dev/null && \ $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \ < tmp.imp >>libc.tmp - $rm tmp.imp + $rm -f tmp.imp done $sed -e "s/\\$_o\$//" -e 's/^ \+//' < 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 && + $test -s libc.list then for thisname in $libnames; do bld t $libnames | \ @@ -7421,7 +7791,8 @@ define) *) if $test -f /lib/syscalls.exp; then echo " " echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4 - $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' /lib/syscalls.exp >>libc.list + $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' \ + /lib/syscalls.exp >>libc.list fi ;; esac @@ -7433,6 +7804,32 @@ $rm -f libnames libpath set dld.h i_dld eval $inhdr +: Check if we are using C++ +echo " " +echo "Checking for C++..." >&4 +$cat >try.c <<'EOCP' +#include +int main(void) +{ +#ifdef __cplusplus + return 0; +#else + return 1; +#endif +} +EOCP +set try +if eval $compile_ok && $run ./try; then + val="$define" + echo "You are using a C++ compiler." +else + val="$undef" + echo "You are not using a C++ compiler." +fi +$rm_try cplusplus$$ +set d_cplusplus +eval $setvar + : is a C symbol defined? csym='tlook=$1; case "$3" in @@ -7440,6 +7837,10 @@ case "$3" in -a) tf=libc.tmp; tdc="[]";; *) tlook="^$1\$"; tf=libc.list; tdc="()";; esac; +case "$d_cplusplus" in + $define) extern_C="extern \"C\"" ;; + *) extern_C="extern" ;; +esac; tx=yes; case "$reuseval-$4" in true-) ;; @@ -7452,15 +7853,15 @@ yes) if $contains $tlook $tf >/dev/null 2>&1; then tval=true; elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then - echo "void *(*(p()))$tdc { extern void *$1$tdc; return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c; + echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c; $cc -o try $optimize $ccflags $ldflags try.c >/dev/null 2>&1 $libs && tval=true; $test "$mistrustnm" = run -a -x try && { $run ./try$_exe >/dev/null 2>&1 || tval=false; }; - $rm -f try$_exe try.c core core.* try.core; + $rm_try; fi; else - echo "void *(*(p()))$tdc { extern void *$1$tdc; return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c; + echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p()) return(0); else return(1); }"> try.c; $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true; - $rm -f try$_exe try.c; + $rm_try; fi; ;; *) @@ -7501,10 +7902,24 @@ esac' : see if dlopen exists xxx_runnm="$runnm" +xxx_ccflags="$ccflags" runnm=false +: with g++ one needs -shared to get is-in-libc to work for dlopen +case "$gccversion" in +'') ;; +*) case "$d_cplusplus" in + "$define") ccflags="$ccflags -shared" ;; + esac + ;; +esac set dlopen d_dlopen eval $inlibc runnm="$xxx_runnm" +ccflags="$xxx_ccflags" + +: see if this is a unistd.h system +set unistd.h i_unistd +eval $inhdr : determine which dynamic loading, if any, to compile in echo " " @@ -7518,7 +7933,7 @@ $undef|n|false) dflt='n' usedl="$undef" ;; -*) +*) dflt='n' case "$d_dlopen" in $define) dflt='y' ;; @@ -7533,6 +7948,7 @@ esac rp="Do you wish to use dynamic loading?" . ./myread usedl="$ans" +bin_ELF="$undef" case "$ans" in y*) usedl="$define" case "$dlsrc" in @@ -7581,7 +7997,7 @@ EOM ;; *) case "$osname" in darwin) dflt='none' ;; - svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;; + linux*|svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;; *) dflt='-fpic' ;; esac ;; esac ;; @@ -7609,10 +8025,14 @@ EOM #ifdef I_STDLIB #include #endif +#$i_unistd I_UNISTD +#ifdef I_UNISTD +#include +#endif int main() { char b[4]; int i = open("a.out",O_RDONLY); - if(i == -1) + 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) */ @@ -7625,11 +8045,12 @@ EOM You appear to have ELF support. I'll use $cc to build dynamic libraries. EOM dflt="$cc" + bin_ELF="$define" else echo "I'll use ld to build dynamic libraries." dflt='ld' fi - rm -f try.c a.out + $rm_try ;; *) dflt="$ld" ;; @@ -7651,12 +8072,13 @@ EOM case "$lddlflags" in '') case "$osname" in beos) dflt='-nostart' ;; + haiku) dflt='-shared' ;; hpux) dflt='-b'; case "$gccversion" in '') dflt="$dflt +vnocompatwarnings" ;; esac - ;; - linux|irix*|gnu*) dflt='-shared' ;; + ;; + linux|irix*|gnu*) dflt="-shared $optimize" ;; next) dflt='none' ;; solaris) dflt='-G' ;; sunos) dflt='-assert nodefinitions' ;; @@ -7687,6 +8109,16 @@ EOM ''|' ') dflt='none' ;; esac + case "$ldflags" in + *-fstack-protector*) + case "$dflt" in + *-fstack-protector*) ;; # Don't add it again + *) dflt="$dflt -fstack-protector" ;; + esac + ;; + esac + + rp="Any special flags to pass to $ld to create a dynamically loaded library?" . ./myread case "$ans" in @@ -7725,6 +8157,7 @@ EOM ;; esac +: Do we want a shared libperl? also='' case "$usedl" in $undef) @@ -7733,7 +8166,7 @@ $undef) ;; *) case "$useshrplib" in '') case "$osname" in - svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*) + svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|haiku|cygwin*) dflt=y also='Building a shared libperl is required for dynamic loading to work on your system.' ;; @@ -7781,15 +8214,22 @@ esac case "$useshrplib" in true) + case "$userelocatableinc" in + true|define) + echo "Cannot build with both -Duserelocatableinc and -Duseshrplib" >&4 + echo "See INSTALL for an explanation why that won't work." >&4 + exit 4 + ;; + esac case "$libperl" in '') # 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 + # A name such as libperl.so.10.1 majmin="libperl.$so.$patchlevel.$subversion" - # A name such as libperl.so.301 + # A name such as libperl.so.100 majonly=`echo $patchlevel $subversion | $awk '{printf "%d%02d", $1, $2}'` majonly=libperl.$so.$majonly @@ -7803,8 +8243,12 @@ true) linux*|gnu*) # ld won't link with a bare -lperl otherwise. dflt=libperl.$so ;; - cygwin*) # ld links against an importlib - dflt=libperl$lib_ext + cygwin*) # ld links now against the dll directly + majmin="cygperl5_${patchlevel}_${subversion}.${so}" + majonly=`echo $patchlevel $subversion | + $awk '{printf "%03d%03d", $1, $2}'` + majonly=cygperl5.$majonly.$so + dflt=$majmin ;; *) # Try to guess based on whether libc has major.minor. case "$libc" in @@ -7877,14 +8321,14 @@ shrpdir=$archlibexp/CORE xxx='' tmp_shrpenv='' if "$useshrplib"; then - case "$osname" in + case "$osname" in aix) # We'll set it in Makefile.SH... ;; solaris) xxx="-R $shrpdir" ;; - freebsd|netbsd|openbsd|interix) + freebsd|netbsd|openbsd|interix|dragonfly) xxx="-Wl,-R$shrpdir" ;; bsdos|linux|irix*|dec_osf|gnu*) @@ -7896,17 +8340,23 @@ if "$useshrplib"; then beos) # beos doesn't like the default, either. ;; + haiku) + # Haiku doesn't like the default, either. + ;; hpux*) # hpux doesn't like the default, either. tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\"" ;; + cygwin) + # cygwin needs only ldlibpth + ;; *) 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 "*) ;; @@ -7914,7 +8364,7 @@ if "$useshrplib"; then cat <&4 Adding $xxx to the flags -passed to $ld so that the perl executable will find the +passed to $ld so that the perl executable will find the installed shared $libperl. EOM @@ -7998,20 +8448,14 @@ rp="Where do the main $spackage manual pages (source) go?" if $test "X$man1direxp" != "X$ansexp"; then installman1dir='' fi -man1dir="$ans" -man1direxp="$ansexp" +prefixvar=man1dir +. ./setprefixvar + case "$man1dir" in '') man1dir=' ' installman1dir='';; esac -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"` -else - installman1dir="$man1direxp" -fi - : What suffix to use on installed man pages case "$man1dir" in @@ -8060,7 +8504,7 @@ You can't have filenames longer than 14 chars. You can't even think about them! EOM val="$undef" -fi +fi set d_flexfnam eval $setvar $rm -rf 123456789abcde* @@ -8086,7 +8530,7 @@ esac case "$d_flexfnam" in undef) $cat <<'EOM' -However, your system can't handle the long file names like File::Basename.3. +However, your system can't handle the long file names like File::Basename.3. EOM case "$man3dir" in '') man3dir="none";; @@ -8101,8 +8545,8 @@ case "$man3dir" in cat <&4 WARNING: Previous versions of perl installed man3 pages into -$privlib/man/man3. This version will suggest a -new default of $dflt. +$privlib/man/man3. This version will suggest a +new default of $dflt. EOM tdflt=$dflt dflt='n' @@ -8123,20 +8567,14 @@ echo " " fn=dn+~ rp="Where do the $package library man pages (source) go?" . ./getfile -man3dir="$ans" -man3direxp="$ansexp" +prefixvar=man3dir +. ./setprefixvar + case "$man3dir" in '') man3dir=' ' installman3dir='';; esac -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"` -else - installman3dir="$man3direxp" -fi - : What suffix to use on installed man pages case "$man3dir" in ' ') @@ -8351,11 +8789,11 @@ case "$myhostname" in 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` + -e 1q 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` + -e 1q 2>/dev/null` ;; esac fi @@ -8424,6 +8862,7 @@ case "$phostname" in ;; esac +: determine the e-mail address of the user who is running us $cat <try.c <&4 +echo "Checking the size of $zzz..." >&4 cat > try.c < #include @@ -8892,6 +9298,7 @@ else fpossize="$ans" fi +: Check for large file support # Backward compatibility (uselfs is deprecated). case "$uselfs" in "$define"|true|[yY]*) @@ -8901,7 +9308,7 @@ case "$uselfs" in EOM uselargefiles="$define" ;; -esac +esac case "$lseeksize:$fpossize" in 8:8) cat <&4 + $echo $n "Rechecking the size of $zzz...$c" >&4 $cat > try.c < #include @@ -9000,16 +9407,12 @@ EOCP . ./myread fpossize="$ans" fi - $rm -f try.c try + $rm_try fi ;; esac -# probably will refer to -# $archlib $privlib $sitearch $sitelib $vendorarch $vendorlib -need_relocation=0 -userelocatableinc=undef - +: Set the vendorbin variables case "$vendorprefix" in '') d_vendorbin="$undef" vendorbin='' @@ -9028,13 +9431,10 @@ case "$vendorprefix" in vendorbinexp="$ansexp" ;; esac -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"` -else - installvendorbin="$vendorbinexp" -fi +prefixvar=vendorbin +. ./installprefix +: Set the vendorhtml1dir variables case "$vendorprefix" in '') vendorhtml1dir='' vendorhtml1direxp='' @@ -9059,13 +9459,10 @@ case "$vendorprefix" in esac : Use ' ' for none so value is preserved next time through Configure $test X"$vendorhtml1dir" = "X" && vendorhtml1dir=' ' -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installvendorhtml1dir=`echo $vendorhtml1direxp | $sed "s#^$prefix#$installprefix#"` -else - installvendorhtml1dir="$vendorhtml1direxp" -fi +prefixvar=vendorhtml1dir +. ./installprefix +: Set the vendorhtml3dir variables case "$vendorprefix" in '') vendorhtml3dir='' vendorhtml3direxp='' @@ -9090,13 +9487,10 @@ case "$vendorprefix" in esac : Use ' ' for none so value is preserved next time through Configure $test X"$vendorhtml3dir" = "X" && vendorhtml3dir=' ' -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installvendorhtml3dir=`echo $vendorhtml3direxp | $sed "s#^$prefix#$installprefix#"` -else - installvendorhtml3dir="$vendorhtml3direxp" -fi +prefixvar=vendorhtml3dir +. ./installprefix +: Set the vendorman1dir variables case "$vendorprefix" in '') vendorman1dir='' vendorman1direxp='' @@ -9118,13 +9512,10 @@ case "$vendorprefix" in esac : Use ' ' for none so value is preserved next time through Configure $test X"$vendorman1dir" = "X" && vendorman1dir=' ' -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installvendorman1dir=`echo "$vendorman1direxp" | $sed "s#^$prefix#$installprefix#"` -else - installvendorman1dir="$vendorman1direxp" -fi +prefixvar=vendorman1dir +. ./installprefix +: Set the vendorman3dir variables case "$vendorprefix" in '') vendorman3dir='' vendorman3direxp='' @@ -9146,13 +9537,10 @@ case "$vendorprefix" in esac : Use ' ' for none so value is preserved next time through Configure $test X"$vendorman3dir" = "X" && vendorman3dir=' ' -: Change installation prefix, if necessary. -if $test X"$prefix" != X"$installprefix"; then - installvendorman3dir=`echo "$vendorman3direxp" | $sed "s#^$prefix#$installprefix#"` -else - installvendorman3dir="$vendorman3direxp" -fi +prefixvar=vendorman3dir +. ./installprefix +: Set the vendorscript variables case "$vendorprefix" in '') d_vendorscript="$undef" vendorscript='' @@ -9167,7 +9555,7 @@ case "$vendorprefix" in esac $cat <warn <msg +else + cat >msg +fi +echo "*** WARNING:" >&4 +sed -e 's/^/*** /' &4 +echo "*** " >&4 +cat msg >>config.msg +echo " " >>config.msg +rm -f msg +EOS +chmod +x warn +$eunicefix warn + +: see which of string.h or strings.h is needed +echo " " +strings=`./findhdr string.h` +if $test "$strings" && $test -r "$strings"; then + echo "Using instead of ." >&4 + val="$define" else - installvendorscript="$vendorscriptexp" + val="$undef" + strings=`./findhdr strings.h` + if $test "$strings" && $test -r "$strings"; then + echo "Using instead of ." >&4 + else + ./warn "No string header found -- You'll surely have problems." + fi fi +set i_string +eval $setvar +case "$i_string" in +"$undef") strings=`./findhdr strings.h`;; +*) strings=`./findhdr string.h`;; +esac : see if qgcvt exists set qgcvt d_qgcvt eval $inlibc +: Check print/scan long double stuff echo " " if $test X"$d_longdbl" = X"$define"; then @@ -9289,17 +9714,17 @@ else sSCNfldbl=$sPRIfldbl # expect consistency fi -$rm -f try try.* +$rm_try fi # d_longdbl case "$sPRIfldbl" in -'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; - d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; +'') d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; + d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; d_SCNfldbl="$undef"; ;; -*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; - d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; +*) d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; + d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; d_SCNfldbl="$define"; ;; esac @@ -9357,15 +9782,18 @@ char *myname = "sprintf"; #include -#define I_STDLIB $i_stdlib +#$i_stdlib I_STDLIB #ifdef I_STDLIB #include #endif +#$i_string I_STRING +#ifdef I_STRING +# include +#else +# include +#endif -int -checkit(expect, got) -char *expect; -char *got; +int checkit(char *expect, char *got) { if (strcmp(expect, got)) { printf("%s oddity: Expected %s, got %s\n", @@ -9375,8 +9803,8 @@ char *got; } int main() -{ - char buf[64]; +{ + char buf[64]; buf[63] = '\0'; /* This must be 1st test on (which?) platform */ @@ -9384,13 +9812,13 @@ int main() Gconvert((DOUBLETYPE)0.1, 8, 0, buf); checkit("0.1", buf); - Gconvert((DOUBLETYPE)0.01, 8, 0, buf); + Gconvert((DOUBLETYPE)0.01, 8, 0, buf); checkit("0.01", buf); - Gconvert((DOUBLETYPE)0.001, 8, 0, buf); + Gconvert((DOUBLETYPE)0.001, 8, 0, buf); checkit("0.001", buf); - Gconvert((DOUBLETYPE)0.0001, 8, 0, buf); + Gconvert((DOUBLETYPE)0.0001, 8, 0, buf); checkit("0.0001", buf); Gconvert((DOUBLETYPE)0.00009, 8, 0, buf); @@ -9399,42 +9827,42 @@ int main() else checkit("9e-05", buf); - Gconvert((DOUBLETYPE)1.0, 8, 0, buf); + Gconvert((DOUBLETYPE)1.0, 8, 0, buf); checkit("1", buf); - Gconvert((DOUBLETYPE)1.1, 8, 0, buf); + Gconvert((DOUBLETYPE)1.1, 8, 0, buf); checkit("1.1", buf); - Gconvert((DOUBLETYPE)1.01, 8, 0, buf); + Gconvert((DOUBLETYPE)1.01, 8, 0, buf); checkit("1.01", buf); - Gconvert((DOUBLETYPE)1.001, 8, 0, buf); + Gconvert((DOUBLETYPE)1.001, 8, 0, buf); checkit("1.001", buf); - Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); + Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); checkit("1.0001", buf); - Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); + Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); checkit("1.00001", buf); - Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); + Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); checkit("1.000001", buf); - Gconvert((DOUBLETYPE)0.0, 8, 0, buf); + Gconvert((DOUBLETYPE)0.0, 8, 0, buf); checkit("0", buf); - Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); + Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); checkit("-1", buf); /* Some Linux gcvt's give 1.e+5 here. */ - Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); + Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); checkit("100000", buf); - + /* Some Linux gcvt's give -1.e+5 here. */ - Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); + Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); checkit("-100000", buf); - Gconvert((DOUBLETYPE)123.456, 8, 0, buf); + Gconvert((DOUBLETYPE)123.456, 8, 0, buf); checkit("123.456", buf); /* Testing of 1e+129 in bigintpm.t must not get extra '.' here. */ @@ -9459,14 +9887,14 @@ for xxx_convert in $gconvert_preference; do case $xxx_convert in gcvt|gconvert|sprintf) xxx_list="$xxx_list $xxx_convert" ;; *) echo "Discarding unrecognized gconvert_preference $xxx_convert" >&4 ;; - esac + esac done : then add any others for xxx_convert in gconvert gcvt sprintf; do case "$xxx_list" in *$xxx_convert*) ;; *) xxx_list="$xxx_list $xxx_convert" ;; - esac + esac done case "$d_longdbl$uselongdouble" in @@ -9501,7 +9929,7 @@ esac for xxx_convert in $xxx_list; do echo "Trying $xxx_convert..." - $rm -f try try$_o + $rm -f try try$_o core set try -DTRY_$xxx_convert if eval $compile; then echo "$xxx_convert() found." >&4 @@ -9534,10 +9962,11 @@ qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;; d_Gconvert='sprintf((b),"%.*g",(n),(double)(x))' ;; *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;; esac - ;; + ;; esac fi +$rm_try : see if _fwalk exists set fwalk d__fwalk @@ -9607,6 +10036,26 @@ eval $inlibc set alarm d_alarm eval $inlibc +: see if 64bit time functions exists + +set ctime64 d_ctime64 +eval $inlibc + +set localtime64 d_localtime64 +eval $inlibc + +set gmtime64 d_gmtime64 +eval $inlibc + +set mktime64 d_mktime64 +eval $inlibc + +set difftime64 d_difftime64 +eval $inlibc + +set asctime64 d_asctime64 +eval $inlibc + : see if POSIX threads are available set pthread.h i_pthread eval $inhdr @@ -9619,7 +10068,7 @@ optimize="$optimize" ccflags="$ccflags" prototype="$prototype" define="$define" -rm=$rm +rm_try="$rm_try" usethreads=$usethreads i_pthread=$i_pthread pthread_h_first=$pthread_h_first @@ -9627,7 +10076,7 @@ EOSH $cat >> protochk <<'EOSH' -$rm -f try.c +$rm_try foo="$1" shift while test $# -ge 2; do @@ -9657,12 +10106,13 @@ 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] +$rm_try exit $status EOSH chmod +x protochk $eunicefix protochk +: Define hasproto macro for Configure internal use hasproto='varname=$1; func=$2; shift; shift; while $test $# -ge 2; do case "$1" in @@ -9680,7 +10130,7 @@ else fi; set $varname; eval $setvar; -$rm -f try.c tryout.c' +$rm_try tryout.c' : see if sys/types.h has to be included set sys/types.h i_systypes @@ -9690,6 +10140,7 @@ eval $inhdr set sys/select.h i_sysselct eval $inhdr +: Define hasfield macro for Configure internal use hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift; while $test $# -ge 2; do case "$1" in @@ -9706,7 +10157,7 @@ else fi; set $varname; eval $setvar; -$rm -f try.c try.o' +$rm_try' : see if we should include time.h, sys/time.h, or both echo " " @@ -9793,11 +10244,11 @@ EOCP echo "We'll include ." >&4;; *) i_systime="$undef";; esac - $rm -f try.c try + $rm_try fi : see if struct tm knows about tm_zone case "$i_systime$i_time" in -*$define*) +*$define*) echo " " echo "Checking to see if your struct tm has tm_zone field..." >&4 set d_tm_tm_zone tm tm_zone $i_systime sys/time.h $i_time time.h @@ -9814,7 +10265,7 @@ case "$d_tm_tm_zone" in esac : see if struct tm knows about tm_gmtoff case "$i_systime$i_time" in -*$define*) +*$define*) echo " " echo "Checking to see if your struct tm has tm_gmtoff field..." >&4 set d_tm_tm_gmtoff tm tm_gmtoff $i_systime sys/time.h $i_time time.h @@ -9846,19 +10297,19 @@ case "$d_asctime_r" in define) case "$asctime_r_proto" in ''|0) try='char* asctime_r(const struct tm*, char*);' - ./protochk "extern $try" $hdrs && asctime_r_proto=B_SB ;; + ./protochk "$extern_C $try" $hdrs && asctime_r_proto=B_SB ;; esac case "$asctime_r_proto" in ''|0) try='char* asctime_r(const struct tm*, char*, int);' - ./protochk "extern $try" $hdrs && asctime_r_proto=B_SBI ;; + ./protochk "$extern_C $try" $hdrs && asctime_r_proto=B_SBI ;; esac case "$asctime_r_proto" in ''|0) try='int asctime_r(const struct tm*, char*);' - ./protochk "extern $try" $hdrs && asctime_r_proto=I_SB ;; + ./protochk "$extern_C $try" $hdrs && asctime_r_proto=I_SB ;; esac case "$asctime_r_proto" in ''|0) try='int asctime_r(const struct tm*, char*, int);' - ./protochk "extern $try" $hdrs && asctime_r_proto=I_SBI ;; + ./protochk "$extern_C $try" $hdrs && asctime_r_proto=I_SBI ;; esac case "$asctime_r_proto" in ''|0) d_asctime_r=undef @@ -9900,22 +10351,66 @@ $cat >attrib.c <<'EOCP' #include void my_special_printf(char* pat,...) __attribute__((__format__(__printf__,1,2))); 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 support __attribute__((format))." - val="$undef" - else - echo "Your C compiler supports __attribute__((format))." - val="$define" +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 support __attribute__((format))." + val="$undef" + else + echo "Your C compiler supports __attribute__((format))." + val="$define" + fi +else + echo "Your C compiler doesn't seem to understand __attribute__ at all." + val="$undef" +fi +;; +*) val="$d_attribute_format" ;; +esac +set d_attribute_format +eval $setvar +$rm -f attrib* + +: Look for GCC-style attribute format with null format allowed +case "$d_printf_format_null" in +'') case "$d_attribute_format" in + $define) + echo " " + echo "Checking whether your compiler allows __printf__ format to be null ..." >&4 +$cat >attrib.c < +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int null_printf (char* pat,...) __attribute__((__format__(__printf__,1,2))); +int null_printf (char* pat,...) { return (int)pat; } +int main () { exit(null_printf(NULL)); } +EOCP + if $cc $ccflags -o attrib attrib.c >attrib.out 2>&1 ; then + : run the executable in case it produces a run-time warning + if $run ./attrib >>attrib.out 2>&1; then + if $contains 'warning' attrib.out >/dev/null 2>&1; then + echo "Your C compiler doesn't allow __printf__ format to be null." + val="$undef" + else + echo "Your C compiler allows __printf__ format to be null." + val="$define" + fi + else + echo "Your C compiler executable failed with __printf__ format null." + val="$undef" fi -else - echo "Your C compiler doesn't seem to understand __attribute__ at all." + else + echo "Your C compiler fails with __printf__ format null." val="$undef" -fi + fi + ;; + *) val="$undef" ;; + esac ;; -*) val="$d_attribute_format" ;; +*) val="$d_printf_format_null" ;; esac -set d_attribute_format +set d_printf_format_null eval $setvar $rm -f attrib* @@ -10059,6 +10554,34 @@ set d_attribute_unused eval $setvar $rm -f attrib* +: Look for GCC-style attribute deprecated +case "$d_attribute_deprecated" in +'') +echo " " +echo "Checking whether your compiler can handle __attribute__((deprecated)) ..." >&4 +$cat >attrib.c <<'EOCP' +#include +int I_am_deprecated(void) __attribute__((deprecated)); +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 support __attribute__((deprecated))." + val="$undef" + else + echo "Your C compiler supports __attribute__((deprecated))." + val="$define" + fi +else + echo "Your C compiler doesn't seem to understand __attribute__ at all." + val="$undef" +fi +;; +*) val="$d_attribute_deprecated" ;; +esac +set d_attribute_deprecated +eval $setvar +$rm -f attrib* + : Look for GCC-style attribute warn_unused_result case "$d_attribute_warn_unused_result" in '') @@ -10095,10 +10618,6 @@ eval $inlibc 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 @@ -10163,7 +10682,7 @@ EOP esac set d_bsdgetpgrp eval $setvar -$rm -f try try.* +$rm_try : see if setpgrp exists set setpgrp d_setpgrp @@ -10229,11 +10748,219 @@ EOP esac set d_bsdsetpgrp eval $setvar -$rm -f try try.* +$rm_try + +: Look for GCC-style __builtin_choose_expr +case "$d_builtin_choose_expr" in +'') + echo " " + echo "Checking whether your compiler can handle __builtin_choose_expr ..." >&4 + $cat >try.c <<'EOCP' +#include +#include +#include + +#define SYRINX(x) __builtin_choose_expr( x, (1056*2), (103*50) ) + +int main(void) { + assert( SYRINX(1) == 2112 ); + assert( SYRINX(1) != 5150 ); + assert( SYRINX(0) == 5150 ); + assert( SYRINX(0) != 2112 ); + puts( "All good!" ); + exit(0); +} + +EOCP + set try + if eval $compile && $run ./try; then + echo "Your C compiler supports __builtin_choose_expr." + val="$define" + else + echo "Your C compiler doesn't seem to understand __builtin_choose_expr." + val="$undef" + fi +;; +*) val="$d_builtin_choose_expr" ;; +esac + +set d_builtin_choose_expr +eval $setvar +$rm_try + +: Look for GCC-style __builtin_expect +case "$d_builtin_expect" in +'') + echo " " + echo "Checking whether your compiler can handle __builtin_expect ..." >&4 + $cat >try.c <<'EOCP' +int main(void) { + int n = 50; + if ( __builtin_expect(n, 0) ) n = 1; + /* Remember shell exit code truth is 0, C truth is non-zero */ + return !(n == 1); +} +EOCP + set try + if eval $compile && $run ./try; then + echo "Your C compiler supports __builtin_expect." + val="$define" + else + echo "Your C compiler doesn't seem to understand __builtin_expect." + val="$undef" + fi + ;; +*) val="$d_builtin_expect" ;; +esac + +set d_builtin_expect +eval $setvar +$rm_try + : see if bzero exists set bzero d_bzero eval $inlibc +: see if stdarg is available +echo " " +if $test `./findhdr stdarg.h`; then + echo " found." >&4 + valstd="$define" +else + echo " NOT found." >&4 + valstd="$undef" +fi + +: see if varags is available +echo " " +if $test `./findhdr varargs.h`; then + echo " found." >&4 +else + echo " NOT found, but that's ok (I hope)." >&4 +fi + +: set up the varargs testing programs +$cat > varargs.c < +#endif +#ifdef I_VARARGS +#include +#endif + +#ifdef I_STDARG +int f(char *p, ...) +#else +int f(va_alist) +va_dcl +#endif +{ + va_list ap; +#ifndef I_STDARG + char *p; +#endif +#ifdef I_STDARG + va_start(ap,p); +#else + va_start(ap); + p = va_arg(ap, char *); +#endif + va_end(ap); + return 0; +} +EOP +$cat > varargs </dev/null 2>&1; then + echo "true" +else + echo "false" +fi +$rm -f varargs$_o +EOP +chmod +x varargs + +: now check which varargs header should be included +echo " " +i_varhdr='' +case "$valstd" in +"$define") + if `./varargs I_STDARG`; then + val='stdarg.h' + elif `./varargs I_VARARGS`; then + val='varargs.h' + fi + ;; +*) + if `./varargs I_VARARGS`; then + val='varargs.h' + fi + ;; +esac +case "$val" in +'') +echo "I could not find the definition for va_dcl... You have problems..." >&4 + val="$undef"; set i_stdarg; eval $setvar + val="$undef"; set i_varargs; eval $setvar + ;; +*) + set i_varhdr + eval $setvar + case "$i_varhdr" in + stdarg.h) + val="$define"; set i_stdarg; eval $setvar + val="$undef"; set i_varargs; eval $setvar + ;; + varargs.h) + val="$undef"; set i_stdarg; eval $setvar + val="$define"; set i_varargs; eval $setvar + ;; + esac + echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;; +esac +$rm -f varargs* + +: see if the Compiler supports C99 variadic macros +case "$i_stdarg$i_stdlib" in + "$define$define") + echo "You have and , so checking for C99 variadic macros." >&4 + $cat >try.c < +#include + +#define foo(buffer, format, ...) sprintf(buffer, format, __VA_ARGS__) + +int main() { + char buf[20]; + foo(buf, "%d %g %.*s", 123, 456.0, (int)3, "789fail"); + puts(buf); + return 0; +} +EOCP + set try + if eval $compile && $run ./try 2>&1 >/dev/null; then + case "`$run ./try`" in + "123 456 789") + echo "You have C99 variadic macros." >&4 + d_c99_variadic_macros="$define" + ;; + *) + echo "You don't have functional C99 variadic macros." >&4 + d_c99_variadic_macros="$undef" + ;; + esac + else + echo "I couldn't compile and run the test program, so I assume that you don't have functional C99 variadic macros." >&4 + d_c99_variadic_macros="$undef" + fi + $rm_try + ;; + *) + echo "You don't have and , so not checking for C99 variadic macros." >&4 + d_c99_variadic_macros="$undef" + ;; +esac + : see if signal is declared as pointer to function returning int or void echo " " xxx=`./findhdr signal.h` @@ -10294,7 +11021,7 @@ $cat >try.c < #include -$signal_t blech(s) int s; { exit(3); } +$signal_t blech(int s) { exit(3); } int main() { $xxx i32; @@ -10303,8 +11030,8 @@ int main() char str[16]; signal(SIGFPE, blech); - /* Don't let compiler optimize the test away. Store the number - in a writable string for gcc to pass to sscanf under HP/UX. + /* Don't let compiler optimize the test away. Store the number + in a writable string for gcc to pass to sscanf under HP-UX. */ sprintf(str, "2147483647"); sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */ @@ -10339,7 +11066,7 @@ case "$yyy" in esac set d_casti32 eval $setvar -$rm -f try try.* +$rm_try : check for ability to cast negative floats to unsigned echo " " @@ -10352,11 +11079,11 @@ $cat >try.c < #include -$signal_t blech(s) int s; { exit(7); } -$signal_t blech_in_list(s) int s; { 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; } +$signal_t blech(int s) { exit(7); } +$signal_t blech_in_list(int s) { exit(4); } +unsigned long dummy_long(unsigned long p) { return p; } +unsigned int dummy_int(unsigned int p) { return p; } +unsigned short dummy_short(unsigned short p) { return p; } int main() { double f; @@ -10365,13 +11092,13 @@ int main() unsigned short ashort; int result = 0; char str[16]; - + /* Frustrate gcc-2.7.2's optimizer which failed this test with a direct f = -123. assignment. gcc-2.8.0 reportedly optimized the whole file away */ - /* Store the number in a writable string for gcc to pass to - sscanf under HP/UX. + /* Store the number in a writable string for gcc to pass to + sscanf under HP-UX. */ sprintf(str, "-123"); sscanf(str, "%lf", &f); /* f = -123.; */ @@ -10439,7 +11166,7 @@ case "$castflags" in esac set d_castneg eval $setvar -$rm -f try.* +$rm_try : see if vprintf exists echo " " @@ -10447,38 +11174,75 @@ if set vprintf val -f d_vprintf; eval $csym; $val; then echo 'vprintf() found.' >&4 val="$define" $cat >try.c < +#$i_stdarg I_STDARG /* Only one of these can be defined by i_varhrd */ +#$i_varargs I_VARARGS + #$i_stdlib I_STDLIB +#$i_unistd I_UNISTD + +#ifdef I_STDARG +# include +#else /* I_VARARGS */ +# include +#endif + +#ifdef I_UNISTD +# include +#endif + #ifdef I_STDLIB -#include +# include #endif -int main() { xxx("foo"); } +#include /* vsprintf prototype */ + +#ifdef I_STDARG +void xxx(int n, ...) +{ + va_list args; + char buf[10]; + va_start(args, n); + exit((unsigned long)vsprintf(buf,"%s",args) > 10L); +} +int main() { xxx(1, "foo"); } + +#else /* I_VARARGS */ xxx(va_alist) va_dcl { - va_list args; - char buf[10]; - - va_start(args); - exit((unsigned long)vsprintf(buf,"%s",args) > 10L); + va_list args; + char buf[10]; + va_start(args); + exit((unsigned long)vsprintf(buf,"%s",args) > 10L); } +int main() { xxx("foo"); } + +#endif + EOF set try - if eval $compile && $run ./try; then - echo "Your vsprintf() returns (int)." >&4 - val2="$undef" + if eval $compile_ok; then + if $run ./try; then + echo "Your vsprintf() returns (int)." >&4 + val2="$undef" + else + echo "Your vsprintf() returns (char*)." >&4 + val2="$define" + fi else - echo "Your vsprintf() returns (char*)." >&4 - val2="$define" + echo 'I am unable to compile the vsprintf() test program.' >&4 + # We shouldn't get here. If we do, assume the standard signature, + # not the old BSD one. + echo 'Guessing that vsprintf() returns (int).' >&4 + val2="$undef" fi else echo 'vprintf() NOT found.' >&4 - val="$undef" - val2="$undef" + val="$undef" + val2="$undef" fi -$rm -f try try.* +$rm_try set d_vprintf eval $setvar val=$val2 @@ -10501,6 +11265,11 @@ eval $inlibc set class d_class eval $inlibc +: see if clearenv exists +set clearenv d_clearenv +eval $inlibc + +: Define hasstruct macro for Configure internal use hasstruct='varname=$1; struct=$2; shift; shift; while $test $# -ge 2; do case "$1" in @@ -10517,11 +11286,11 @@ else fi; set $varname; eval $setvar; -$rm -f try.c try.o' +$rm_try' +: see whether socket exists socketlib='' sockethdr='' -: see whether socket exists echo " " $echo $n "Hmm... $c" >&4 if set socket val -f d_socket; eval $csym; $val; then @@ -10558,7 +11327,7 @@ else sockethdr="-I/usr/netinclude" ;; esac - echo "Found Berkeley sockets interface in lib$net." >&4 + echo "Found Berkeley sockets interface in lib$net." >&4 if $contains setsockopt libc.list >/dev/null 2>&1; then d_oldsock="$undef" else @@ -10599,14 +11368,14 @@ EOF val="$define" fi set d_${enum}; eval $setvar - $rm -f try.c try + $rm_try done : see if this is a sys/uio.h system set sys/uio.h i_sysuio eval $inhdr - +: Check for cmsghdr support echo " " echo "Checking to see if your system supports struct cmsghdr..." >&4 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h @@ -10625,7 +11394,7 @@ typedef struct spug { int drokk; } spug; int main() { const char *foo; - const spug y; + const spug y = { 0 }; } EOCP if $cc -c $ccflags const.c >/dev/null 2>&1 ; then @@ -10701,11 +11470,11 @@ case "$d_crypt_r" in define) case "$crypt_r_proto" in ''|0) try='char* crypt_r(const char*, const char*, struct crypt_data*);' - ./protochk "extern $try" $hdrs && crypt_r_proto=B_CCS ;; + ./protochk "$extern_C $try" $hdrs && crypt_r_proto=B_CCS ;; esac case "$crypt_r_proto" in ''|0) try='char* crypt_r(const char*, const char*, CRYPTD*);' - ./protochk "extern $try" $hdrs && crypt_r_proto=B_CCD ;; + ./protochk "$extern_C $try" $hdrs && crypt_r_proto=B_CCD ;; esac case "$crypt_r_proto" in ''|0) d_crypt_r=undef @@ -10742,6 +11511,10 @@ case "$full_csh" in '') full_csh=$csh ;; esac +: see if ctermid exists +set ctermid d_ctermid +eval $inlibc + : see if ctermid_r exists set ctermid_r d_ctermid_r eval $inlibc @@ -10758,7 +11531,7 @@ case "$d_ctermid_r" in define) case "$ctermid_r_proto" in ''|0) try='char* ctermid_r(char*);' - ./protochk "extern $try" $hdrs && ctermid_r_proto=B_B ;; + ./protochk "$extern_C $try" $hdrs && ctermid_r_proto=B_B ;; esac case "$ctermid_r_proto" in ''|0) d_ctermid_r=undef @@ -10799,19 +11572,19 @@ case "$d_ctime_r" in define) case "$ctime_r_proto" in ''|0) try='char* ctime_r(const time_t*, char*);' - ./protochk "extern $try" $hdrs && ctime_r_proto=B_SB ;; + ./protochk "$extern_C $try" $hdrs && ctime_r_proto=B_SB ;; esac case "$ctime_r_proto" in ''|0) try='char* ctime_r(const time_t*, char*, int);' - ./protochk "extern $try" $hdrs && ctime_r_proto=B_SBI ;; + ./protochk "$extern_C $try" $hdrs && ctime_r_proto=B_SBI ;; esac case "$ctime_r_proto" in ''|0) try='int ctime_r(const time_t*, char*);' - ./protochk "extern $try" $hdrs && ctime_r_proto=I_SB ;; + ./protochk "$extern_C $try" $hdrs && ctime_r_proto=I_SB ;; esac case "$ctime_r_proto" in ''|0) try='int ctime_r(const time_t*, char*, int);' - ./protochk "extern $try" $hdrs && ctime_r_proto=I_SBI ;; + ./protochk "$extern_C $try" $hdrs && ctime_r_proto=I_SBI ;; esac case "$ctime_r_proto" in ''|0) d_ctime_r=undef @@ -10951,7 +11724,7 @@ 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 @@ -10965,8 +11738,7 @@ else . ./myread direntrytype="$ans" fi -$rm -f try.c - +$rm_try : see if the directory entry stores field length echo " " @@ -10980,7 +11752,43 @@ else fi set d_dirnamlen eval $setvar -$rm -f try.c +$rm_try + +: Look for DIR.dd_fd +case "$i_dirent" in +"$define") + echo "Checking to see if DIR has a dd_fd member variable" >&4 + $cat >try.c < +#endif +#include + +int main() { + DIR dir; + dir.dd_fd = 1; + return 0; +} +EOCP + val=$undef + set try + if eval $compile; then + echo "Yes, it does." + val="$define" + else + echo "No, it does not." + val="$undef" + fi + ;; +*) + echo "You don't have a , so not checking for dd_fd." >&4 + val="$undef" + ;; +esac +set d_dir_dd_fd +eval $setvar +$rm_try : see if this is an sysdir system set sys/dir.h i_sysdir @@ -11055,6 +11863,7 @@ runnm="$xxx_runnm" set dlfcn.h i_dlfcn eval $inhdr +: Check what extension to use for shared libs case "$usedl" in $define|y|true) $cat << EOM @@ -11139,9 +11948,9 @@ int main() } EOM : Call the object file tmp-dyna.o in case dlext=o. - if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && - mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && - $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && + if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && + mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && + $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then xxx=`$run ./fred` case $xxx in @@ -11159,7 +11968,7 @@ EOM fi ;; esac - + $rm -f fred fred.* dyna.$dlext dyna.* tmp-dyna.* set d_dlsymun @@ -11181,7 +11990,7 @@ case "$d_drand48_r" in define) case "$drand48_r_proto" in ''|0) try='int drand48_r(struct drand48_data*, double*);' - ./protochk "extern $try" $hdrs && drand48_r_proto=I_ST ;; + ./protochk "$extern_C $try" $hdrs && drand48_r_proto=I_ST ;; esac case "$drand48_r_proto" in ''|0) d_drand48_r=undef @@ -11264,11 +12073,11 @@ case "$d_endgrent_r" in define) case "$endgrent_r_proto" in ''|0) try='int endgrent_r(FILE**);' - ./protochk "extern $try" $hdrs && endgrent_r_proto=I_H ;; + ./protochk "$extern_C $try" $hdrs && endgrent_r_proto=I_H ;; esac case "$endgrent_r_proto" in ''|0) try='void endgrent_r(FILE**);' - ./protochk "extern $try" $hdrs && endgrent_r_proto=V_H ;; + ./protochk "$extern_C $try" $hdrs && endgrent_r_proto=V_H ;; esac case "$endgrent_r_proto" in ''|0) d_endgrent_r=undef @@ -11317,11 +12126,11 @@ case "$d_endhostent_r" in define) case "$endhostent_r_proto" in ''|0) try='int endhostent_r(struct hostent_data*);' - ./protochk "extern $try" $hdrs && endhostent_r_proto=I_D ;; + ./protochk "$extern_C $try" $hdrs && endhostent_r_proto=I_D ;; esac case "$endhostent_r_proto" in ''|0) try='void endhostent_r(struct hostent_data*);' - ./protochk "extern $try" $hdrs && endhostent_r_proto=V_D ;; + ./protochk "$extern_C $try" $hdrs && endhostent_r_proto=V_D ;; esac case "$endhostent_r_proto" in ''|0) d_endhostent_r=undef @@ -11366,11 +12175,11 @@ case "$d_endnetent_r" in define) case "$endnetent_r_proto" in ''|0) try='int endnetent_r(struct netent_data*);' - ./protochk "extern $try" $hdrs && endnetent_r_proto=I_D ;; + ./protochk "$extern_C $try" $hdrs && endnetent_r_proto=I_D ;; esac case "$endnetent_r_proto" in ''|0) try='void endnetent_r(struct netent_data*);' - ./protochk "extern $try" $hdrs && endnetent_r_proto=V_D ;; + ./protochk "$extern_C $try" $hdrs && endnetent_r_proto=V_D ;; esac case "$endnetent_r_proto" in ''|0) d_endnetent_r=undef @@ -11415,11 +12224,11 @@ case "$d_endprotoent_r" in define) case "$endprotoent_r_proto" in ''|0) try='int endprotoent_r(struct protoent_data*);' - ./protochk "extern $try" $hdrs && endprotoent_r_proto=I_D ;; + ./protochk "$extern_C $try" $hdrs && endprotoent_r_proto=I_D ;; esac case "$endprotoent_r_proto" in ''|0) try='void endprotoent_r(struct protoent_data*);' - ./protochk "extern $try" $hdrs && endprotoent_r_proto=V_D ;; + ./protochk "$extern_C $try" $hdrs && endprotoent_r_proto=V_D ;; esac case "$endprotoent_r_proto" in ''|0) d_endprotoent_r=undef @@ -11552,11 +12361,11 @@ case "$d_endpwent_r" in define) case "$endpwent_r_proto" in ''|0) try='int endpwent_r(FILE**);' - ./protochk "extern $try" $hdrs && endpwent_r_proto=I_H ;; + ./protochk "$extern_C $try" $hdrs && endpwent_r_proto=I_H ;; esac case "$endpwent_r_proto" in ''|0) try='void endpwent_r(FILE**);' - ./protochk "extern $try" $hdrs && endpwent_r_proto=V_H ;; + ./protochk "$extern_C $try" $hdrs && endpwent_r_proto=V_H ;; esac case "$endpwent_r_proto" in ''|0) d_endpwent_r=undef @@ -11601,11 +12410,11 @@ case "$d_endservent_r" in define) case "$endservent_r_proto" in ''|0) try='int endservent_r(struct servent_data*);' - ./protochk "extern $try" $hdrs && endservent_r_proto=I_D ;; + ./protochk "$extern_C $try" $hdrs && endservent_r_proto=I_D ;; esac case "$endservent_r_proto" in ''|0) try='void endservent_r(struct servent_data*);' - ./protochk "extern $try" $hdrs && endservent_r_proto=V_D ;; + ./protochk "$extern_C $try" $hdrs && endservent_r_proto=V_D ;; esac case "$endservent_r_proto" in ''|0) d_endservent_r=undef @@ -11682,29 +12491,7 @@ else fi set d_open3 eval $setvar -$rm -f try try.* - -: see which of string.h or strings.h is needed -echo " " -strings=`./findhdr string.h` -if $test "$strings" && $test -r "$strings"; then - echo "Using instead of ." >&4 - val="$define" -else - val="$undef" - strings=`./findhdr strings.h` - if $test "$strings" && $test -r "$strings"; then - echo "Using instead of ." >&4 - else - echo "No string header found -- You'll surely have problems." >&4 - fi -fi -set i_string -eval $setvar -case "$i_string" in -"$undef") strings=`./findhdr strings.h`;; -*) strings=`./findhdr string.h`;; -esac +$rm_try : see if this is a sys/file.h system val='' @@ -11759,6 +12546,14 @@ esac set i_fcntl eval $setvar +: see if fork exists +set fork d_fork +eval $inlibc + +: see if pipe exists +set pipe d_pipe +eval $inlibc + : check for non-blocking I/O stuff case "$h_sysfile" in true) echo "#include " > head.c;; @@ -11813,18 +12608,20 @@ EOCP ;; *) echo "Using $hint value $o_nonblock.";; esac -$rm -f try try.* .out core +$rm_try echo " " echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4 case "$eagain" in '') + case "$d_fork:$d_pipe" in + define:define) $cat head.c > try.c $cat >>try.c < #include #include -#include +#include #$i_stdlib I_STDLIB #ifdef I_STDLIB #include @@ -11847,7 +12644,7 @@ extern int errno; #else #include #endif -$signal_t blech(x) int x; { exit(3); } +$signal_t blech(int x) { exit(3); } EOCP $cat >> try.c <<'EOCP' int main() @@ -11951,6 +12748,12 @@ EOCP echo "I can't compile the test program--assuming errno EAGAIN will do." eagain=EAGAIN fi + ;; + *) echo "Can't figure out how to test this--assuming errno EAGAIN will do." + eagain=EAGAIN + val="$define" + ;; + esac set d_eofnblk eval $setvar ;; @@ -11967,7 +12770,7 @@ EOCP esac ;; esac -$rm -f try try.* .out core head.c mtry +$rm_try head.c mtry : see if _ptr and _cnt from stdio act std echo " " @@ -12066,7 +12869,7 @@ if eval $compile && $to try.c; then else echo "Your stdio doesn't appear very std." fi -$rm -f try.c try +$rm_try # glibc 2.2.90 and above apparently change stdio streams so Perl's # direct buffer manipulation no longer works. The Configure tests @@ -12166,7 +12969,7 @@ int main() { if (cnt == FILE_cnt(fp)) { puts("Pass_unchanged"); exit (0); - } + } if (FILE_cnt(fp) == (cnt - 42)) { puts("Pass_changed"); exit (0); @@ -12193,7 +12996,7 @@ EOP else echo "It seems we can't set ptr in your stdio. Nevermind." >&4 fi - $rm -f try.c try + $rm_try ;; esac @@ -12231,7 +13034,7 @@ EOP else echo "However, it seems to be lacking the _base field." fi - $rm -f try.c try + $rm_try ;; esac set d_stdiobase @@ -12270,8 +13073,8 @@ eval $inlibc set fcntl d_fcntl eval $inlibc -echo " " : See if fcntl-based locking works. +echo " " $cat >try.c <try.c < #include #include -$signal_t blech(x) int x; { exit(3); } +$signal_t blech(int x) { exit(3); } int main() { #if defined(F_SETLK) && defined(F_SETLKW) struct flock flock; @@ -12334,8 +13137,7 @@ EOM esac set d_fcntl_can_lock eval $setvar -$rm -f try* - +$rm_try : check for fd_set items $cat <&4 @@ -12483,7 +13280,7 @@ else 8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;; esac fi -$rm -f try.* try +$rm_try set d_fpos64_t eval $setvar @@ -12499,7 +13296,7 @@ eval $inhdr set sys/mount.h i_sysmount eval $inhdr - +: Check for fs_data_s echo " " echo "Checking to see if your system supports struct fs_data..." >&4 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h @@ -12520,12 +13317,10 @@ esac set fsetpos d_fsetpos eval $inlibc - : see if fstatfs exists set fstatfs d_fstatfs eval $inlibc - : see if statvfs exists set statvfs d_statvfs eval $inlibc @@ -12546,6 +13341,99 @@ case "$longsize" in 8) echo "(Your long is 64 bits, so you could use ftell.)" ;; esac +: check for a working futimes +d_futimes="$undef" +echo " " +echo "Checking if you have a working futimes()" >&4 +$cat >try.c < +#include +#include +#include + +int main () +{ + int fd, rv; + fd = open ("try.c", O_RDWR); + if (-1 == fd) exit (1); + rv = futimes (fd, NULL); + exit (rv == -1 ? errno : 0); +} +EOCP +set try +if eval $compile; then + `$run ./try` + rc=$? + case "$rc" in + 0) echo "Yes, you have" >&4 + d_futimes="$define" + ;; + *) echo "No, you have futimes, but it isn't working ($rc) (probably harmless)" >&4 + ;; + esac +else + echo "No, it does not (probably harmless)" >&4 +fi +$rm_try + +: see if ndbm.h is available +set ndbm.h i_ndbm +eval $inhdr +: Compatibility location for RedHat 7.1 +set gdbm/ndbm.h i_gdbmndbm +eval $inhdr +: Compatibility location for Debian 4.0 +set gdbm-ndbm.h i_gdbm_ndbm +eval $inhdr + +val="$undef" +if $test "$i_ndbm" = "$define" -o "$i_gdbmndbm" = "$define" -o "$i_gdbm_ndbm" = "$define"; then + : see if dbm_open exists + set dbm_open d_dbm_open + eval $inlibc + case "$d_dbm_open" in + $undef) + i_ndbm="$undef" + i_gdbmndbm="$undef" + i_gdbm_ndbm="$undef" + echo "We won't be including " + val="$undef" + ;; + *) val="$define" + ;; + esac +fi +set d_ndbm +eval $setvar + +ndbm_hdr_protochk='name=$1; hdr=$2; +eval "ihdr=\$""i_$name"; +val="$undef"; +if $test "$ihdr" = "$define"; then + $echo "Checking if your <$hdr> uses prototypes..." >&4; + case "$d_cplusplus" in + $define) ./protochk "$extern_C void dbm_close(DBM *);" literal "extern \"C\" {" $ihdr $hdr literal "}" && val="$define" ;; + *) ./protochk "$extern_C void dbm_close(int, int);" $ihdr $hdr || val="$define" ;; + esac; + case "$val" in + $define) $echo "Your <$hdr> seems to have prototypes";; + *) $echo "Your <$hdr> does not seem to have prototypes";; + esac; +fi; +set "d_${name}_h_uses_prototypes"; +eval $setvar' + +set ndbm ndbm.h +eval $ndbm_hdr_protochk +set gdbmndbm gdbm/ndbm.h +eval $ndbm_hdr_protochk +set gdbm_ndbm gdbm-ndbm.h +eval $ndbm_hdr_protochk + +: see if getaddrinfo exists +set getaddrinfo d_getaddrinfo +eval $inlibc + : see if getcwd exists set getcwd d_getcwd eval $inlibc @@ -12554,7 +13442,6 @@ eval $inlibc set getespwnam d_getespwnam eval $inlibc - : see if getfsstat exists set getfsstat d_getfsstat eval $inlibc @@ -12579,27 +13466,27 @@ case "$d_getgrent_r" in define) case "$getgrent_r_proto" in ''|0) try='int getgrent_r(struct group*, char*, size_t, struct group**);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=I_SBWR ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBWR ;; esac case "$getgrent_r_proto" in ''|0) try='int getgrent_r(struct group*, char*, int, struct group**);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=I_SBIR ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIR ;; esac case "$getgrent_r_proto" in ''|0) try='struct group* getgrent_r(struct group*, char*, size_t);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=S_SBW ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBW ;; esac case "$getgrent_r_proto" in ''|0) try='struct group* getgrent_r(struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=S_SBI ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=S_SBI ;; esac case "$getgrent_r_proto" in ''|0) try='int getgrent_r(struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=I_SBI ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBI ;; esac case "$getgrent_r_proto" in ''|0) try='int getgrent_r(struct group*, char*, int, FILE**);' - ./protochk "extern $try" $hdrs && getgrent_r_proto=I_SBIH ;; + ./protochk "$extern_C $try" $hdrs && getgrent_r_proto=I_SBIH ;; esac case "$getgrent_r_proto" in ''|0) d_getgrent_r=undef @@ -12640,19 +13527,19 @@ case "$d_getgrgid_r" in define) case "$getgrgid_r_proto" in ''|0) try='int getgrgid_r(gid_t, struct group*, char*, size_t, struct group**);' - ./protochk "extern $try" $hdrs && getgrgid_r_proto=I_TSBWR ;; + ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBWR ;; esac case "$getgrgid_r_proto" in ''|0) try='int getgrgid_r(gid_t, struct group*, char*, int, struct group**);' - ./protochk "extern $try" $hdrs && getgrgid_r_proto=I_TSBIR ;; + ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBIR ;; esac case "$getgrgid_r_proto" in ''|0) try='int getgrgid_r(gid_t, struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrgid_r_proto=I_TSBI ;; + ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=I_TSBI ;; esac case "$getgrgid_r_proto" in ''|0) try='struct group* getgrgid_r(gid_t, struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrgid_r_proto=S_TSBI ;; + ./protochk "$extern_C $try" $hdrs && getgrgid_r_proto=S_TSBI ;; esac case "$getgrgid_r_proto" in ''|0) d_getgrgid_r=undef @@ -12693,23 +13580,23 @@ case "$d_getgrnam_r" in define) case "$getgrnam_r_proto" in ''|0) try='int getgrnam_r(const char*, struct group*, char*, size_t, struct group**);' - ./protochk "extern $try" $hdrs && getgrnam_r_proto=I_CSBWR ;; + ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBWR ;; esac case "$getgrnam_r_proto" in ''|0) try='int getgrnam_r(const char*, struct group*, char*, int, struct group**);' - ./protochk "extern $try" $hdrs && getgrnam_r_proto=I_CSBIR ;; + ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBIR ;; esac case "$getgrnam_r_proto" in ''|0) try='struct group* getgrnam_r(const char*, char*, int);' - ./protochk "extern $try" $hdrs && getgrnam_r_proto=S_CBI ;; + ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=S_CBI ;; esac case "$getgrnam_r_proto" in ''|0) try='int getgrnam_r(const char*, struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrnam_r_proto=I_CSBI ;; + ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=I_CSBI ;; esac case "$getgrnam_r_proto" in ''|0) try='struct group* getgrnam_r(const char*, struct group*, char*, int);' - ./protochk "extern $try" $hdrs && getgrnam_r_proto=S_CSBI ;; + ./protochk "$extern_C $try" $hdrs && getgrnam_r_proto=S_CSBI ;; esac case "$getgrnam_r_proto" in ''|0) d_getgrnam_r=undef @@ -12789,7 +13676,7 @@ case "$d_uname$d_gethname" in *define*) dflt=n cat <isascii.c <&4 $cat >try.c <&4 d_libm_lib_version="$define" else - echo "No, it does not (probably harmless)\n" >&4 + echo "No, it does not (probably harmless)" >&4 fi - $rm -f try.* try core core.try.* + $rm_try ;; esac @@ -14197,11 +15098,11 @@ case "$d_localtime_r" in define) case "$localtime_r_proto" in ''|0) try='struct tm* localtime_r(const time_t*, struct tm*);' - ./protochk "extern $try" $hdrs && localtime_r_proto=S_TS ;; + ./protochk "$extern_C $try" $hdrs && localtime_r_proto=S_TS ;; esac case "$localtime_r_proto" in ''|0) try='int localtime_r(const time_t*, struct tm*);' - ./protochk "extern $try" $hdrs && localtime_r_proto=I_TS ;; + ./protochk "$extern_C $try" $hdrs && localtime_r_proto=I_TS ;; esac case "$localtime_r_proto" in ''|0) d_localtime_r=undef @@ -14226,6 +15127,80 @@ case "$d_localtime_r" in ;; esac +: see if localtime_r calls tzset +case "$localtime_r_proto" in +REENTRANT_PROTO*) + $cat >try.c < +#endif +#ifdef I_UNISTD +# include +#endif +#ifdef I_TIME +# include +#endif +#ifdef I_STDLIB +#include +#endif +#ifdef I_STRING +# include +#else +# include +#endif +#ifdef I_MALLOC +# include +#endif +int main() +{ + time_t t = time(0L); + char w_tz[]="TZ" "=GMT+5", + e_tz[]="TZ" "=GMT-5", + *tz_e = (char*)malloc(16), + *tz_w = (char*)malloc(16); + struct tm tm_e, tm_w; + memset(&tm_e,'\0',sizeof(struct tm)); + memset(&tm_w,'\0',sizeof(struct tm)); + strcpy(tz_e,e_tz); + strcpy(tz_w,w_tz); + + putenv(tz_e); + localtime_r(&t, &tm_e); + + putenv(tz_w); + localtime_r(&t, &tm_w); + + if( memcmp(&tm_e, &tm_w, sizeof(struct tm)) == 0 ) + return 1; + return 0; +} +EOCP + set try + if eval $compile; then + if $run ./try; then + d_localtime_r_needs_tzset=undef; + else + d_localtime_r_needs_tzset=define; + fi; + else + d_localtime_r_needs_tzset=undef; + fi; + ;; + *) + d_localtime_r_needs_tzset=undef; + ;; +esac +$rm_try + : see if localeconv exists set localeconv d_locconv eval $inlibc @@ -14247,6 +15222,14 @@ eval $inlibc set madvise d_madvise eval $inlibc +: see if malloc_size exists +set malloc_size d_malloc_size +eval $inlibc + +: see if malloc_size_good exists +set malloc_good_size d_malloc_good_size +eval $inlibc + : see if mblen exists set mblen d_mblen eval $inlibc @@ -14355,12 +15338,12 @@ $define$define) Checking to see whether your modfl() is okay for large values... EOM $cat >try.c < +#include #include EOCP if $test "X$d_modflproto" != "X$define"; then $cat >>try.c <>try.c <&4 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h @@ -14532,40 +15515,6 @@ eval $inhdr set nl_langinfo d_nl_langinfo eval $inlibc -: check for length of character -echo " " -case "$charsize" in -'') - echo "Checking to see how big your characters are (hey, you never know)..." >&4 - $cat >try.c < -#$i_stdlib I_STDLIB -#ifdef I_STDLIB -#include -#endif -int main() -{ - printf("%d\n", (int)sizeof(char)); - exit(0); -} -EOCP - set try - if eval $compile_ok; then - dflt=`$run ./try` - else - dflt='1' - echo "(I can't seem to compile the test program. Guessing...)" - fi - ;; -*) - dflt="$charsize" - ;; -esac -rp="What is the size of a character (in bytes)?" -. ./myread -charsize="$ans" -$rm -f try.c try - : check for volatile keyword echo " " echo 'Checking to see if your C compiler knows about "volatile"...' >&4 @@ -14595,9 +15544,9 @@ else fi set d_volatile eval $setvar -$rm -f try.* - +$rm_try +: Check basic sizes echo " " $echo "Choosing the C types to be used for Perl's internal types..." >&4 @@ -14654,38 +15603,10 @@ int main() { } EOCP -case "$i8type" in -'') case "$charsize" in - 1) i8type=char - u8type="unsigned char" - i8size=$charsize - u8size=$charsize - ;; - esac - ;; -esac -case "$i8type" in -'') set try -DINT8 - if eval $compile; then - case "`$run ./try`" in - int8_t) i8type=int8_t - u8type=uint8_t - i8size=1 - u8size=1 - ;; - esac - fi - ;; -esac -case "$i8type" in -'') if $test $charsize -ge 1; then - i8type=char - u8type="unsigned char" - i8size=$charsize - u8size=$charsize - fi - ;; -esac +i8type="signed char" +u8type="unsigned char" +i8size=1 +u8size=1 case "$i16type" in '') case "$shortsize" in @@ -14790,7 +15711,7 @@ $cat <try.c #include #ifdef SIGFPE $volatile int bletched = 0; -$signal_t blech(s) int s; { bletched = 1; } +$signal_t blech(int s) { bletched = 1; } #endif int main() { $uvtype u = 0; @@ -14812,10 +15733,9 @@ int main() { if (($uvtype)d != (u - 1)) break; #ifdef SIGFPE - if (bletched) { + if (bletched) break; #endif - } } printf("%d\n", ((i == n) ? -n : i)); exit(0); @@ -14828,7 +15748,7 @@ if eval $compile; then nv_preserves_uv_bits="`$run ./try`" fi case "$nv_preserves_uv_bits" in -\-[1-9]*) +\-[1-9]*) nv_preserves_uv_bits=`expr 0 - $nv_preserves_uv_bits` $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs." 2>&1 d_nv_preserves_uv="$define" @@ -14836,10 +15756,92 @@ case "$nv_preserves_uv_bits" in [1-9]*) $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs." 2>&1 d_nv_preserves_uv="$undef" ;; *) $echo "Can't figure out how many bits your NVs preserve." 2>&1 - nv_preserves_uv_bits="$undef" ;; + nv_preserves_uv_bits="0" ;; esac +$rm_try + +$echo "Checking to find the largest integer value your NVs can hold..." >&4 +: volatile so that the compiler has to store it out to memory. +if test X"$d_volatile" = X"$define"; then + volatile=volatile +fi +$cat <try.c +#include + +typedef $nvtype NV; + +int +main() { + NV value = 2; + int count = 1; + + while(count < 256) { + $volatile NV up = value + 1.0; + $volatile NV negated = -value; + $volatile NV down = negated - 1.0; + $volatile NV got_up = up - value; + int up_good = got_up == 1.0; + int got_down = down - negated; + int down_good = got_down == -1.0; + + if (down_good != up_good) { + fprintf(stderr, + "Inconsistency - up %d %f; down %d %f; for 2**%d (%.20f)\n", + up_good, (double) got_up, down_good, (double) got_down, + count, (double) value); + return 1; + } + if (!up_good) { + while (1) { + if (count > 8) { + count -= 8; + fputs("256.0", stdout); + } else { + count--; + fputs("2.0", stdout); + } + if (!count) { + puts(""); + return 0; + } + fputs("*", stdout); + } + } + value *= 2; + ++count; + } + fprintf(stderr, "Cannot overflow integer range, even at 2**%d (%.20f)\n", + count, (double) value); + return 1; +} +EOP +set try -$rm -f try.* try +nv_overflows_integers_at='0' +if eval $compile; then + xxx="`$run ./try`" + case "$?" in + 0) + case "$xxx" in + 2*) cat >&4 <&4 <&4 <&4 : volatile so that the compiler has to store it out to memory. @@ -14862,7 +15864,7 @@ $cat <try.c #include #ifdef SIGFPE $volatile int bletched = 0; -$signal_t blech(s) int s; { bletched = 1; } +$signal_t blech(int s) { bletched = 1; } #endif int checkit($nvtype d, char *where) { @@ -14918,7 +15920,7 @@ int main(int argc, char **argv) { printf("(gives %g)\n", d); return 1; } - + #ifdef SIGFPE if (bletched) { printf("No - something bleched\n"); @@ -14960,9 +15962,7 @@ EOM ;; esac fi - -$rm -f try.* try - +$rm_try : check for off64_t echo " " @@ -14983,14 +15983,14 @@ else 8) echo "(Your off_t is 64 bits, so you could use that.)" ;; esac fi -$rm -f try.* try +$rm_try set d_off64_t eval $setvar : how to create joinable pthreads if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then echo " " - echo "Checking what constant to use for creating joinable pthreads..." >&4 + echo "Checking what constant to use for creating joinable pthreads..." >&4 $cat >try.c <<'EOCP' #include int main() { @@ -15016,7 +16016,7 @@ EOCP val=PTHREAD_CREATE_UNDETACHED set old_pthread_create_joinable eval $setvar - else + else set try -DJOINABLE=__UNDETACHED if eval $compile; then echo "You seem to use __UNDETACHED." >&4 @@ -15037,7 +16037,7 @@ EOCP fi fi fi - $rm -f try try.* + $rm_try else d_old_pthread_create_joinable="$undef" old_pthread_create_joinable="" @@ -15047,18 +16047,40 @@ fi set pause d_pause eval $inlibc -: see if pipe exists -set pipe d_pipe -eval $inlibc - : see if poll exists set poll d_poll eval $inlibc +: see if prctl exists +set prctl d_prctl +eval $inlibc + +: see if prctl supports PR_SET_NAME +d_prctl_set_name=$undef +case $d_prctl in + $define) + $cat >try.c < + +int main (int argc, char *argv[]) +{ + return (prctl (PR_SET_NAME, "Test")); + } /* main */ +EOM + set try + if eval $compile_ok && $run ./try; then + echo "Your prctl (PR_SET_NAME, ...) works" + d_prctl_set_name=$define + fi + $rm_try + ;; + esac + : see if readlink exists set readlink d_readlink eval $inlibc +: Check if exe is symlink to abs path of executing program echo " " procselfexe='' val="$undef" @@ -15086,6 +16108,54 @@ $rm -f reflect set d_procselfexe eval $setvar +: backward compatibility for d_hvfork +if test X$d_hvfork != X; then + d_vfork="$d_hvfork" + d_hvfork='' +fi +: see if there is a vfork +val='' +set vfork val +eval $inlibc + +d_pseudofork=$undef + +: Ok, but do we want to use it. vfork is reportedly unreliable in +: perl on Solaris 2.x, and probably elsewhere. +case "$val" in +$define) + echo " " + case "$usevfork" in + false) dflt='n';; + *) dflt='y';; + esac + cat <<'EOM' + +Perl can only use a vfork() that doesn't suffer from strict +restrictions on calling functions or modifying global data in +the child. For example, glibc-2.1 contains such a vfork() +that is unsuitable. If your system provides a proper fork() +call, chances are that you do NOT want perl to use vfork(). + +EOM + rp="Do you still want to use vfork()?" + . ./myread + case "$ans" in + y|Y) ;; + *) + echo "Ok, we won't use vfork()." + val="$undef" + ;; + esac + ;; +esac +set d_vfork +eval $setvar +case "$d_vfork" in +$define) usevfork='true';; +*) usevfork='false';; +esac + : see whether the pthread_atfork exists $cat >try.c < @@ -15118,7 +16188,6 @@ eval $setvar set pthread_attr_setscope d_pthread_attr_setscope eval $inlibc - : see whether the various POSIXish _yields exist $cat >try.c < @@ -15183,12 +16252,10 @@ $define) esac set d_pthread_yield eval $setvar - case "$sched_yield" in '') sched_yield=undef ;; esac - -$rm -f try try.* +$rm_try : see if random_r exists set random_r d_random_r @@ -15206,15 +16273,15 @@ case "$d_random_r" in define) case "$random_r_proto" in ''|0) try='int random_r(int*, struct random_data*);' - ./protochk "extern $try" $hdrs && random_r_proto=I_iS ;; + ./protochk "$extern_C $try" $hdrs && random_r_proto=I_iS ;; esac case "$random_r_proto" in ''|0) try='int random_r(long*, struct random_data*);' - ./protochk "extern $try" $hdrs && random_r_proto=I_lS ;; + ./protochk "$extern_C $try" $hdrs && random_r_proto=I_lS ;; esac case "$random_r_proto" in ''|0) try='int random_r(struct random_data*, int32_t*);' - ./protochk "extern $try" $hdrs && random_r_proto=I_St ;; + ./protochk "$extern_C $try" $hdrs && random_r_proto=I_St ;; esac case "$random_r_proto" in ''|0) d_random_r=undef @@ -15265,11 +16332,11 @@ case "$d_readdir64_r" in define) case "$readdir64_r_proto" in ''|0) try='int readdir64_r(DIR*, struct dirent64*, struct dirent64**);' - ./protochk "extern $try" $hdrs && readdir64_r_proto=I_TSR ;; + ./protochk "$extern_C $try" $hdrs && readdir64_r_proto=I_TSR ;; esac case "$readdir64_r_proto" in ''|0) try='int readdir64_r(DIR*, struct dirent64*);' - ./protochk "extern $try" $hdrs && readdir64_r_proto=I_TS ;; + ./protochk "$extern_C $try" $hdrs && readdir64_r_proto=I_TS ;; esac case "$readdir64_r_proto" in ''|0) d_readdir64_r=undef @@ -15310,11 +16377,11 @@ case "$d_readdir_r" in define) case "$readdir_r_proto" in ''|0) try='int readdir_r(DIR*, struct dirent*, struct dirent**);' - ./protochk "extern $try" $hdrs && readdir_r_proto=I_TSR ;; + ./protochk "$extern_C $try" $hdrs && readdir_r_proto=I_TSR ;; esac case "$readdir_r_proto" in ''|0) try='int readdir_r(DIR*, struct dirent*);' - ./protochk "extern $try" $hdrs && readdir_r_proto=I_TS ;; + ./protochk "$extern_C $try" $hdrs && readdir_r_proto=I_TS ;; esac case "$readdir_r_proto" in ''|0) d_readdir_r=undef @@ -15438,7 +16505,7 @@ exit(0); EOCP set try if eval $compile_ok; then - if ./try 2>/dev/null; then + if $run ./try 2>/dev/null; then echo "Yes, it can." val="$define" else @@ -15449,7 +16516,7 @@ EOCP fi ;; esac - $rm -f try.* try core + $rm_try ;; esac set d_safebcpy @@ -15514,7 +16581,7 @@ exit(0); EOCP set try if eval $compile_ok; then - if ./try 2>/dev/null; then + if $run ./try 2>/dev/null; then echo "Yes, it can." val="$define" else @@ -15525,7 +16592,7 @@ EOCP fi ;; esac - $rm -f try.* try core + $rm_try ;; esac set d_safemcpy @@ -15581,7 +16648,7 @@ EOCP fi ;; esac -$rm -f try.* try core +$rm_try set d_sanemcmp eval $setvar @@ -15656,7 +16723,7 @@ else echo "You do not have union semun in ." >&4 val="$undef" fi -$rm -f try try.c +$rm_try set d_union_semun eval $setvar @@ -15664,7 +16731,7 @@ eval $setvar case "$d_sem" in $define) echo " " - $cat > try.h < tryh.h < try.c < #include @@ -15699,7 +16766,7 @@ END #include #include #include -#include "try.h" +#include "tryh.h" #ifndef errno extern int errno; #endif @@ -15730,7 +16797,7 @@ int main() { printf("semctl IPC_STAT failed: errno = %d\n", errno); # ifdef IPC_RMID if (semctl(sem, 0, IPC_RMID, arg) != 0) -# endif /* IPC_RMID */ +# endif /* IPC_RMID */ printf("semctl IPC_RMID failed: errno = %d\n", errno); } else #endif /* IPC_PRIVATE && ... */ @@ -15745,11 +16812,11 @@ END semun) val="$define" ;; esac fi - $rm -f try try.c + $rm_try + set d_semctl_semun + eval $setvar ;; esac - set d_semctl_semun - eval $setvar case "$d_semctl_semun" in $define) echo "You can use union semun for semctl IPC_STAT." >&4 @@ -15761,15 +16828,15 @@ END esac : see whether semctl IPC_STAT can use struct semid_ds pointer - val="$undef" case "$d_semctl_semid_ds" in '') + val="$undef" $cat > try.c <<'END' #include #include #include #include -#include "try.h" +#include "tryh.h" #include #include #ifndef errno @@ -15807,11 +16874,11 @@ END semid_ds) val="$define" ;; esac fi - $rm -f try try.c + $rm_try + set d_semctl_semid_ds + eval $setvar ;; esac - set d_semctl_semid_ds - eval $setvar case "$d_semctl_semid_ds" in $define) echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4 @@ -15819,7 +16886,6 @@ END *) echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4 ;; esac - $rm -f try.h ;; *) val="$undef" @@ -15833,6 +16899,7 @@ END eval $setvar ;; esac +$rm_try tryh.h : see if sendmsg exists set sendmsg d_sendmsg @@ -15866,11 +16933,11 @@ case "$d_setgrent_r" in define) case "$setgrent_r_proto" in ''|0) try='int setgrent_r(FILE**);' - ./protochk "extern $try" $hdrs && setgrent_r_proto=I_H ;; + ./protochk "$extern_C $try" $hdrs && setgrent_r_proto=I_H ;; esac case "$setgrent_r_proto" in ''|0) try='void setgrent_r(FILE**);' - ./protochk "extern $try" $hdrs && setgrent_r_proto=V_H ;; + ./protochk "$extern_C $try" $hdrs && setgrent_r_proto=V_H ;; esac case "$setgrent_r_proto" in ''|0) d_setgrent_r=undef @@ -15915,11 +16982,11 @@ case "$d_sethostent_r" in define) case "$sethostent_r_proto" in ''|0) try='int sethostent_r(int, struct hostent_data*);' - ./protochk "extern $try" $hdrs && sethostent_r_proto=I_ID ;; + ./protochk "$extern_C $try" $hdrs && sethostent_r_proto=I_ID ;; esac case "$sethostent_r_proto" in ''|0) try='void sethostent_r(int, struct hostent_data*);' - ./protochk "extern $try" $hdrs && sethostent_r_proto=V_ID ;; + ./protochk "$extern_C $try" $hdrs && sethostent_r_proto=V_ID ;; esac case "$sethostent_r_proto" in ''|0) d_sethostent_r=undef @@ -15976,7 +17043,7 @@ case "$d_setlocale_r" in define) case "$setlocale_r_proto" in ''|0) try='int setlocale_r(int, const char*, char*, int);' - ./protochk "extern $try" $hdrs && setlocale_r_proto=I_ICBI ;; + ./protochk "$extern_C $try" $hdrs && setlocale_r_proto=I_ICBI ;; esac case "$setlocale_r_proto" in ''|0) d_setlocale_r=undef @@ -16021,11 +17088,11 @@ case "$d_setnetent_r" in define) case "$setnetent_r_proto" in ''|0) try='int setnetent_r(int, struct netent_data*);' - ./protochk "extern $try" $hdrs && setnetent_r_proto=I_ID ;; + ./protochk "$extern_C $try" $hdrs && setnetent_r_proto=I_ID ;; esac case "$setnetent_r_proto" in ''|0) try='void setnetent_r(int, struct netent_data*);' - ./protochk "extern $try" $hdrs && setnetent_r_proto=V_ID ;; + ./protochk "$extern_C $try" $hdrs && setnetent_r_proto=V_ID ;; esac case "$setnetent_r_proto" in ''|0) d_setnetent_r=undef @@ -16086,11 +17153,11 @@ case "$d_setprotoent_r" in define) case "$setprotoent_r_proto" in ''|0) try='int setprotoent_r(int, struct protoent_data*);' - ./protochk "extern $try" $hdrs && setprotoent_r_proto=I_ID ;; + ./protochk "$extern_C $try" $hdrs && setprotoent_r_proto=I_ID ;; esac case "$setprotoent_r_proto" in ''|0) try='void setprotoent_r(int, struct protoent_data*);' - ./protochk "extern $try" $hdrs && setprotoent_r_proto=V_ID ;; + ./protochk "$extern_C $try" $hdrs && setprotoent_r_proto=V_ID ;; esac case "$setprotoent_r_proto" in ''|0) d_setprotoent_r=undef @@ -16135,11 +17202,11 @@ case "$d_setpwent_r" in define) case "$setpwent_r_proto" in ''|0) try='int setpwent_r(FILE**);' - ./protochk "extern $try" $hdrs && setpwent_r_proto=I_H ;; + ./protochk "$extern_C $try" $hdrs && setpwent_r_proto=I_H ;; esac case "$setpwent_r_proto" in ''|0) try='void setpwent_r(FILE**);' - ./protochk "extern $try" $hdrs && setpwent_r_proto=V_H ;; + ./protochk "$extern_C $try" $hdrs && setpwent_r_proto=V_H ;; esac case "$setpwent_r_proto" in ''|0) d_setpwent_r=undef @@ -16204,11 +17271,11 @@ case "$d_setservent_r" in define) case "$setservent_r_proto" in ''|0) try='int setservent_r(int, struct servent_data*);' - ./protochk "extern $try" $hdrs && setservent_r_proto=I_ID ;; + ./protochk "$extern_C $try" $hdrs && setservent_r_proto=I_ID ;; esac case "$setservent_r_proto" in ''|0) try='void setservent_r(int, struct servent_data*);' - ./protochk "extern $try" $hdrs && setservent_r_proto=V_ID ;; + ./protochk "$extern_C $try" $hdrs && setservent_r_proto=V_ID ;; esac case "$setservent_r_proto" in ''|0) d_setservent_r=undef @@ -16245,7 +17312,6 @@ eval $inlibc set sfio.h i_sfio eval $inhdr - : see if sfio library is available case "$i_sfio" in $define) @@ -16395,8 +17461,8 @@ fi set d_shm eval $setvar -echo " " : see if we have sigaction +echo " " if set sigaction val -f d_sigaction; eval $csym; $val; then echo 'sigaction() found.' >&4 $cat > try.c <&4 +$cat >try.c < +#endif +#ifdef I_SUNMATH /* Solaris special math library */ +# include +#endif +#define NV $nvtype +int main(int argc, char **argv) +{ + NV x = 0.0; + NV y = -0.0; + if ((signbit(x) == 0) && (signbit(y) != 0)) + return 0; + else + return 1; +} +EOCP +val="$undef" +set try +if eval $compile; then + if $run ./try; then + $echo "Yes." >&4 + val="$define" + else + $echo "Signbit seems to be available, but doesn't work as I expected." + $echo "I won't use it." >&4 + val="$undef" + fi +else + $echo "Nope." >&4 + dflt="$undef" +fi +set d_signbit +eval $setvar +$rm_try : see if sigprocmask exists set sigprocmask d_sigprocmask @@ -16481,7 +17592,72 @@ EOM esac set d_sigsetjmp eval $setvar -$rm -f try.c try +$rm_try + +: see if snprintf exists +set snprintf d_snprintf +eval $inlibc + +: see if vsnprintf exists +set vsnprintf d_vsnprintf +eval $inlibc + +case "$d_snprintf-$d_vsnprintf" in +"$define-$define") + $cat <try.c <<'EOCP' +/* v?snprintf testing logic courtesy of Russ Allbery. + * According to C99: + * - if the buffer is too short it still must be \0-terminated + * - if the buffer is too short the potentially required length + * must be returned and not -1 + * - if the buffer is NULL the potentially required length + * must be returned and not -1 or core dump + */ +#include +#include + +char buf[2]; + +int test (char *format, ...) +{ + va_list args; + int count; + + va_start (args, format); + count = vsnprintf (buf, sizeof buf, format, args); + va_end (args); + return count; +} + +int main () +{ + return ((test ("%s", "abcd") == 4 && buf[0] == 'a' && buf[1] == '\0' + && snprintf (NULL, 0, "%s", "abcd") == 4) ? 0 : 1); +} +EOCP + set try + if eval $compile; then + `$run ./try` + case "$?" in + 0) echo "Your snprintf() and vsnprintf() seem to be working okay." ;; + *) cat <&4 +Your snprintf() and snprintf() don't seem to be working okay. +EOM + d_snprintf="$undef" + d_vsnprintf="$undef" + ;; + esac + else + echo "(I can't seem to compile the test program--assuming they don't)" + d_snprintf="$undef" + d_vsnprintf="$undef" + fi + $rm_try + ;; +esac : see if sockatmark exists set sockatmark d_sockatmark @@ -16496,6 +17672,69 @@ eval $hasproto set socks5_init d_socks5_init eval $inlibc +: see if sprintf returns the length of the string in the buffer as per ANSI +$echo "Checking whether sprintf returns the length of the string..." >&4 +$cat <try.c +#include +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +#$i_string I_STRING +#ifdef I_STRING +# include +#else +# include +#endif +#$i_math I_MATH +#ifdef I_MATH +#include +#endif + +char buffer[256]; + +int check (size_t expect, int test) { + size_t got = strlen(buffer); + if (expect == got) + return 0; + + printf("expected %ld, got %ld in test %d '%s'\n", (long) expect, (long) got, + test, buffer); + exit (test); +} + +int main(int argc, char **argv) { + int test = 0; + + check(sprintf(buffer, ""), ++test); + check(sprintf(buffer, "%s %s", "perl", "rules"), ++test); + check(sprintf(buffer, "I like %g", atan2(0,-1)), ++test); + + return 0; +} +EOP +set try + +if eval $compile; then + xxx="`$run ./try`" + case "$?" in + 0) cat >&4 <&4 <&4 + d_sprintf_returns_strlen="$undef" +fi +$rm_try + : see if srand48_r exists set srand48_r d_srand48_r eval $inlibc @@ -16512,7 +17751,7 @@ case "$d_srand48_r" in define) case "$srand48_r_proto" in ''|0) try='int srand48_r(long, struct drand48_data*);' - ./protochk "extern $try" $hdrs && srand48_r_proto=I_LS ;; + ./protochk "$extern_C $try" $hdrs && srand48_r_proto=I_LS ;; esac case "$srand48_r_proto" in ''|0) d_srand48_r=undef @@ -16553,7 +17792,7 @@ case "$d_srandom_r" in define) case "$srandom_r_proto" in ''|0) try='int srandom_r(unsigned int, struct random_data*);' - ./protochk "extern $try" $hdrs && srandom_r_proto=I_TS ;; + ./protochk "$extern_C $try" $hdrs && srandom_r_proto=I_TS ;; esac case "$srandom_r_proto" in ''|0) d_srandom_r=undef @@ -16592,24 +17831,21 @@ eval $hasproto set sys/stat.h i_sysstat eval $inhdr - : see if stat knows about block sizes echo " " echo "Checking to see if your struct stat has st_blocks field..." >&4 set d_statblks stat st_blocks $i_sysstat sys/stat.h eval $hasfield - : see if this is a sys/vfs.h system set sys/vfs.h i_sysvfs eval $inhdr - : see if this is a sys/statfs.h system set sys/statfs.h i_sysstatfs eval $inhdr - +: Check for statfs_s echo " " echo "Checking to see if your system supports struct statfs..." >&4 set d_statfs_s statfs $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h @@ -16620,10 +17856,9 @@ case "$d_statfs_s" in esac - : see if struct statfs knows about f_flags case "$d_statfs_s" in -define) +define) echo " " echo "Checking to see if your struct statfs has f_flags field..." >&4 set d_statfs_f_flags statfs f_flags $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h $i_sysvfs sys/vfs.h $i_sysstatfs sys/statfs.h @@ -16639,6 +17874,7 @@ case "$d_statfs_f_flags" in *) echo "No, it doesn't." ;; esac +: Check stream access $cat >&4 <&4 < -extern long long int strtoll(char *s, char **, int); +extern long long int strtoll(char *s, char **, int); static int bad = 0; int check(char *s, long long ell, int een) { long long gll; @@ -16889,7 +18125,7 @@ EOM $cat >try.c <<'EOCP' #include #include -extern unsigned long int strtoul(char *s, char **, int); +extern unsigned long int strtoul(char *s, char **, int); static int bad = 0; void check(char *s, unsigned long eul, int een) { unsigned long gul; @@ -16950,6 +18186,9 @@ EOM d_strtoul="$undef" ;; esac + else + echo "(I can't seem to compile the test program--assuming it doesn't)" + d_strtoul="$undef" fi ;; esac @@ -16969,7 +18208,7 @@ EOM #define strtoull __strtoull #endif #include -extern unsigned long long int strtoull(char *s, char **, int); +extern unsigned long long int strtoull(char *s, char **, int); static int bad = 0; int check(char *s, long long eull, int een) { long long gull; @@ -17004,6 +18243,9 @@ EOM d_strtoull="$undef" ;; esac + else + echo "(I can't seem to compile the test program--assuming it doesn't)" + d_strtoull="$undef" fi ;; esac @@ -17020,7 +18262,7 @@ EOM $cat >try.c <<'EOCP' #include #include -extern unsigned long long int strtouq(char *s, char **, int); +extern unsigned long long int strtouq(char *s, char **, int); static int bad = 0; void check(char *s, unsigned long long eull, int een) { unsigned long long gull; @@ -17056,6 +18298,9 @@ EOM d_strtouq="$undef" ;; esac + else + echo "(I can't seem to compile the test program--assuming it doesn't)" + d_strtouq="$undef" fi ;; esac @@ -17116,6 +18361,10 @@ if test "X$d_time" = X -o X"$timetype" = X; then eval $setvar fi +: see if timegm exists +set timegm d_timegm +eval $inlibc + : see if this is a sys/times.h system set sys/times.h i_systimes eval $inhdr @@ -17154,7 +18403,7 @@ case "$d_tmpnam_r" in define) case "$tmpnam_r_proto" in ''|0) try='char* tmpnam_r(char*);' - ./protochk "extern $try" $hdrs && tmpnam_r_proto=B_B ;; + ./protochk "$extern_C $try" $hdrs && tmpnam_r_proto=B_B ;; esac case "$tmpnam_r_proto" in ''|0) d_tmpnam_r=undef @@ -17199,15 +18448,15 @@ case "$d_ttyname_r" in define) case "$ttyname_r_proto" in ''|0) try='int ttyname_r(int, char*, size_t);' - ./protochk "extern $try" $hdrs && ttyname_r_proto=I_IBW ;; + ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=I_IBW ;; esac case "$ttyname_r_proto" in ''|0) try='int ttyname_r(int, char*, int);' - ./protochk "extern $try" $hdrs && ttyname_r_proto=I_IBI ;; + ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=I_IBI ;; esac case "$ttyname_r_proto" in ''|0) try='char* ttyname_r(int, char*, int);' - ./protochk "extern $try" $hdrs && ttyname_r_proto=B_IBI ;; + ./protochk "$extern_C $try" $hdrs && ttyname_r_proto=B_IBI ;; esac case "$ttyname_r_proto" in ''|0) d_ttyname_r=undef @@ -17244,6 +18493,7 @@ fi set d_tzname eval $setvar +: Check if is a multiplatform env case "$osname" in next|rhapsody|darwin) multiarch="$define" ;; esac @@ -17302,7 +18552,7 @@ int main() EOCP xxx_prompt=y set try - if eval $compile && ./try > /dev/null; then + if eval $compile && $run ./try > /dev/null; then dflt=`$run ./try` case "$dflt" in [1-4][1-4][1-4][1-4]|12345678|87654321) @@ -17330,11 +18580,11 @@ EOM esac ;; esac - $rm -f try.c try + $rm_try ;; esac - +: Checking 32bit aligndness $cat < #ifdef SIGBUS -$signal_t bletch(s) int s; { exit(4); } +$signal_t bletch(int s) { exit(4); } #endif int main() { #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321 @@ -17434,7 +18684,7 @@ else *) d_u32align="$define" ;; esac fi -$rm -f core core.try.* try.core +$rm_try ;; esac @@ -17450,6 +18700,10 @@ eval $inlibc set unordered d_unordered eval $inlibc +: see if unsetenv exists +set unsetenv d_unsetenv +eval $inlibc + : see if usleep exists set usleep d_usleep eval $inlibc @@ -17463,52 +18717,6 @@ eval $hasproto set ustat d_ustat eval $inlibc -: backward compatibility for d_hvfork -if test X$d_hvfork != X; then - d_vfork="$d_hvfork" - d_hvfork='' -fi -: see if there is a vfork -val='' -set vfork val -eval $inlibc - -: Ok, but do we want to use it. vfork is reportedly unreliable in -: perl on Solaris 2.x, and probably elsewhere. -case "$val" in -$define) - echo " " - case "$usevfork" in - false) dflt='n';; - *) dflt='y';; - esac - cat <<'EOM' - -Perl can only use a vfork() that doesn't suffer from strict -restrictions on calling functions or modifying global data in -the child. For example, glibc-2.1 contains such a vfork() -that is unsuitable. If your system provides a proper fork() -call, chances are that you do NOT want perl to use vfork(). - -EOM - rp="Do you still want to use vfork()?" - . ./myread - case "$ans" in - y|Y) ;; - *) - echo "Ok, we won't use vfork()." - val="$undef" - ;; - esac - ;; -esac -set d_vfork -eval $setvar -case "$d_vfork" in -$define) usevfork='true';; -*) usevfork='false';; -esac - : see if closedir exists set closedir d_closedir eval $inlibc @@ -17543,7 +18751,7 @@ case "$d_closedir" in #endif #endif #endif -#endif +#endif int main() { return closedir(opendir(".")); } EOM set try @@ -17566,7 +18774,8 @@ EOM esac set d_void_closedir eval $setvar -$rm -f try try.* +$rm_try + : see if there is a wait4 set wait4 d_wait4 eval $inlibc @@ -17645,13 +18854,93 @@ EOCP rp="Doubles must be aligned on a how-many-byte boundary?" . ./myread alignbytes="$ans" - $rm -f try.c try + $rm_try + ;; +esac + + +: set the base revision +baserev=5.0 + +: check for length of character +echo " " +case "$charsize" in +'') + echo "Checking to see how big your characters are (hey, you never know)..." >&4 + $cat >try.c < +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int main() +{ + printf("%d\n", (int)sizeof(char)); + exit(0); +} +EOCP + set try + if eval $compile_ok; then + dflt=`$run ./try` + else + dflt='1' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$charsize" + ;; +esac +rp="What is the size of a character (in bytes)?" +. ./myread +charsize="$ans" +$rm_try + +: Check for the number of bits in a character +case "$charbits" in +'') echo "Checking how long a character is (in bits)..." >&4 + $cat >try.c < +int main () +{ + int n; + unsigned char c; + for (c = 1, n = 0; c; c <<= 1, n++) ; + printf ("%d\n", n); + return (0); + } +EOCP + set try + if eval $compile_ok; then + dflt=`$run ./try` + else + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + fi + ;; +*) + dflt="$charbits" ;; esac - - -: set the base revision -baserev=5.0 +rp="What is the length of a character (in bits)?" +. ./myread +charbits="$ans" +$rm_try +case "$charbits" in +8) ;; +*) cat >&4 << EOM +Your system has an unsigned character size of $charbits bits, which +is rather unusual (normally it is 8 bits). Perl likely will not work +correctly on your system, with subtle bugs in various places. +EOM + rp='Do you really want to continue?' + dflt='n' + . ./myread + case "$ans" in + [yY]) echo >&4 "Okay, continuing." ;; + *) exit 1 ;; + esac +esac : how do we concatenate cpp tokens here? echo " " @@ -17724,7 +19013,7 @@ int main(int argc, char *argv[]) /* 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); + exit(3); } printf("db.h and libdb are compatible.\n") ; @@ -17736,7 +19025,7 @@ int main(int argc, char *argv[]) if (Version < 2003004) { /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */ printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ; - exit(2); + exit(2); } exit(0); @@ -17775,13 +19064,13 @@ EOCP ;; esac fi - $rm -f try.* + $rm_try ;; esac case "$i_db" in define) - : Check the return type needed for hash + : Check the return type needed for hash echo " " echo "Checking return type needed for hash for Berkeley DB ..." >&4 $cat >try.c <&4 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4 fi - $rm -f try.* + $rm_try echo "Your version of Berkeley DB uses $db_hashtype for hash." ;; *) db_hashtype=u_int32_t @@ -17826,7 +19115,7 @@ EOCP esac case "$i_db" in define) - : Check the return type needed for prefix + : Check the return type needed for prefix echo " " echo "Checking return type needed for prefix for Berkeley DB ..." >&4 cat >try.c <&4 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4 fi - $rm -f try.* + $rm_try echo "Your version of Berkeley DB uses $db_prefixtype for prefix." ;; *) db_prefixtype='size_t' ;; esac - : How can we generate normalized random numbers ? echo " " echo "Looking for a random number function..." >&4 @@ -17976,7 +19264,7 @@ EOCP rp="How many bits does your $randfunc() function produce?" . ./myread randbits="$ans" - $rm -f try.c try + $rm_try drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))" seedfunc="s$randfunc" randseedtype=unsigned @@ -18001,6 +19289,7 @@ EOCP esac done +: Determine if this is an EBCDIC system echo " " echo "Determining whether or not we are on an EBCDIC system..." >&4 $cat >try.c <<'EOM' @@ -18024,10 +19313,11 @@ else echo "I'm unable to compile the test program." >&4 echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4 fi -$rm -f try try.* +$rm_try set ebcdic eval $setvar +: Check how to flush echo " " $cat >&4 < 0) { long i; @@ -18096,7 +19386,7 @@ int main() { STDIO_STREAM_ARRAY[i]._file < open_max && STDIO_STREAM_ARRAY[i]._flag) fflush(&STDIO_STREAM_ARRAY[i]); - } + } } # endif #endif @@ -18265,7 +19555,7 @@ EOM fflushall="`$cat try.out`" fi fi - $rm -f core try.core core.try.* + $rm_try case "$fflushall" in x) $cat >&4 <&4 +echo "Checking the size of $zzz..." >&4 cat > try.c < #include @@ -18385,12 +19676,13 @@ else fi +: Check if GID is signed echo " " case "$gidtype" in *_t) zzz="$gidtype" ;; *) zzz="gid" ;; esac -echo "Checking the sign of $zzz..." >&4 +echo "Checking the sign of $zzz..." >&4 cat > try.c < #include @@ -18422,6 +19714,7 @@ else fi +: Check 64bit sizes echo " " if $test X"$quadtype" != X; then @@ -18564,21 +19857,20 @@ fi if $test X"$sPRId64" = X; then echo "Cannot figure out how to print 64-bit integers." >&4 fi - -$rm -f try try.* +$rm_try fi case "$sPRId64" in -'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; - d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; +'') d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; + d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; ;; -*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; - d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; +*) d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; + d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; ;; esac - +: Check format strings for internal types echo " " $echo "Checking the format strings to be used for Perl's internal types..." >&4 @@ -18637,6 +19929,7 @@ case "$ivdformat" in ;; esac +: Check format string for GID echo " " $echo "Checking the format string to be used for gids..." >&4 @@ -18684,7 +19977,6 @@ eval $inlibc set setgroups d_setgrps eval $inlibc - : Find type of 2nd arg to 'getgroups()' and 'setgroups()' echo " " case "$d_getgrps$d_setgrps" in @@ -18705,6 +19997,41 @@ EOM *) groupstype="$gidtype";; esac +: MAD = Misc Attribute Definition + +if $test $patchlevel -lt 9; then +: MAD is not available in 5.8.x or earlier. + ans=n; +else + case "$mad" in + $define|true|[yY]*) dflt='y' ;; + *) dflt='n' ;; + esac + cat <&4 case "$make_set_make" in @@ -18730,104 +20057,6 @@ rp="What is the type used for file modes for system calls (e.g. fchmod())?" set mode_t modetype int stdio.h sys/types.h eval $typedef_ask -: see if stdarg is available -echo " " -if $test `./findhdr stdarg.h`; then - echo " found." >&4 - valstd="$define" -else - echo " NOT found." >&4 - valstd="$undef" -fi - -: see if varags is available -echo " " -if $test `./findhdr varargs.h`; then - echo " found." >&4 -else - echo " NOT found, but that's ok (I hope)." >&4 -fi - -: set up the varargs testing programs -$cat > varargs.c < -#endif -#ifdef I_VARARGS -#include -#endif - -#ifdef I_STDARG -int f(char *p, ...) -#else -int f(va_alist) -va_dcl -#endif -{ - va_list ap; -#ifndef I_STDARG - char *p; -#endif -#ifdef I_STDARG - va_start(ap,p); -#else - va_start(ap); - p = va_arg(ap, char *); -#endif - va_end(ap); -} -EOP -$cat > varargs </dev/null 2>&1; then - echo "true" -else - echo "false" -fi -$rm -f varargs$_o -EOP -chmod +x varargs - -: now check which varargs header should be included -echo " " -i_varhdr='' -case "$valstd" in -"$define") - if `./varargs I_STDARG`; then - val='stdarg.h' - elif `./varargs I_VARARGS`; then - val='varargs.h' - fi - ;; -*) - if `./varargs I_VARARGS`; then - val='varargs.h' - fi - ;; -esac -case "$val" in -'') -echo "I could not find the definition for va_dcl... You have problems..." >&4 - val="$undef"; set i_stdarg; eval $setvar - val="$undef"; set i_varargs; eval $setvar - ;; -*) - set i_varhdr - eval $setvar - case "$i_varhdr" in - stdarg.h) - val="$define"; set i_stdarg; eval $setvar - val="$undef"; set i_varargs; eval $setvar - ;; - varargs.h) - val="$undef"; set i_stdarg; eval $setvar - val="$define"; set i_varargs; eval $setvar - ;; - esac - echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;; -esac -$rm -f varargs* - : see if we need va_copy echo " " case "$i_stdarg" in @@ -18846,28 +20075,28 @@ ivfprintf(FILE *f, const char *fmt, va_list *valp) { return vfprintf(f, fmt, *valp); } - -int + +int myvfprintf(FILE *f, const char *fmt, va_list val) { return ivfprintf(f, fmt, &val); } - + int -myprintf(char *fmt, ...) +myprintf(char *fmt, ...) { va_list val; va_start(val, fmt); - return myvfprintf(stdout, fmt, val); -} + return myvfprintf(stdout, fmt, val); +} int main(int ac, char **av) { signal(SIGSEGV, exit); - myprintf("%s%cs all right, then\n", "that", '\''); - exit(0); + myprintf("%s%cs all right, then\n", "that", '\''); + exit(0); } EOCP set try @@ -18886,7 +20115,7 @@ EOCP need_va_copy="$define" ;; esac - $rm -f try.* core core.* *.core *.core.* + $rm_try ;; *) echo "You don't have , not checking for va_copy()." >&4 ;; @@ -18915,7 +20144,7 @@ EOM for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do for yyy in size_t long int; do case "$netdb_host_type" in - '') try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);" + '') try="$extern_C struct hostent *gethostbyaddr($xxx, $yyy, int);" if ./protochk "$try" $hdrs; then echo "Your system accepts $xxx for the first arg." echo "...and $yyy for the second arg." @@ -18964,7 +20193,7 @@ EOM $i_unistd unistd.h" for xxx in "const char *" "char *"; do case "$netdb_name_type" in - '') try="extern struct hostent *gethostbyname($xxx);" + '') try="$extern_C struct hostent *gethostbyname($xxx);" if ./protochk "$try" $hdrs; then echo "Your system accepts $xxx." netdb_name_type="$xxx" @@ -19002,7 +20231,7 @@ EOM $i_unistd unistd.h" for xxx in in_addr_t "unsigned long" long "unsigned int" int; do case "$netdb_net_type" in - '') try="extern struct netent *getnetbyaddr($xxx, int);" + '') try="$extern_C struct netent *getnetbyaddr($xxx, int);" if ./protochk "$try" $hdrs; then echo "Your system accepts $xxx." netdb_net_type="$xxx" @@ -19046,9 +20275,6 @@ case "$pager" in esac ;; *) dflt="$pager" - : Instruct ./getfile to trust the hinted or previous pager value, - : even if it does not begin with a slash. For example, on os2, - : pager might be cmd /c more. See comments in UU/getfile. fn="f/($pager)" ;; esac @@ -19057,59 +20283,237 @@ rp='What pager is used on your system?' . ./getfile pager="$ans" -: see what type pids are declared as in the kernel -rp="What is the type of process ids on this system?" -set pid_t pidtype int stdio.h sys/types.h -eval $typedef_ask +: see what type pids are declared as in the kernel +rp="What is the type of process ids on this system?" +set pid_t pidtype int stdio.h sys/types.h +eval $typedef_ask + +: see if ar generates random libraries by itself +echo " " +echo "Checking how to generate random libraries on your machine..." >&4 +echo 'int bar1() { return bar2(); }' > bar1.c +echo 'int bar2() { return 2; }' > bar2.c +$cat > foo.c < +#endif +int main() { printf("%d\n", bar1()); exit(0); } +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 -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && + $run ./foobar >/dev/null 2>&1; then + echo "$ar appears to generate random libraries itself." + orderlib=false + if [ "X$ranlib" = "X" ]; then + ranlib=":" + fi +elif $ar s bar$_a >/dev/null 2>&1 && + $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && + $run ./foobar >/dev/null 2>&1; then + echo "a table of contents needs to be added with '$ar s'." + orderlib=false + ranlib="$ar s" +elif $ar ts bar$_a >/dev/null 2>&1 && + $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && + $run ./foobar >/dev/null 2>&1; then + echo "a table of contents needs to be added with '$ar ts'." + orderlib=false + ranlib="$ar ts" +else + case "$ranlib" in + :) ranlib='';; + '') + ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin` + $test -f $ranlib || ranlib='' + ;; + esac + if $test -n "$ranlib"; then + echo "your system has '$ranlib'; we'll use that." + orderlib=false + else + echo "your system doesn't seem to support random libraries" + echo "so we'll use lorder and tsort to order the libraries." + orderlib=true + ranlib=":" + fi +fi +$rm -f foo* bar* + +: see if this is a values.h system +set values.h i_values +eval $inhdr + +: Check the max offset that gmtime and localtime accept +echo "Checking max offsets that gmtime () accepts" + +case $i_values in + define) yyy="#include " ;; + *) yyy="" ;; + esac + +case "$sGMTIME_min/$sGMTIME_max" in + 0/0|/) + $cat >try.c < +#include +#include +$yyy + +int i; +struct tm *tmp; +time_t pt; + +void gm_check (time_t t, int min_year, int max_year) +{ + tmp = gmtime (&t); + if ( tmp == NULL || + /* Check tm_year overflow */ + tmp->tm_year < min_year || tmp->tm_year > max_year) + tmp = NULL; + else + pt = t; + } /* gm_check */ + +int check_max () +{ + tmp = NULL; + pt = 0; +#ifdef MAXLONG + gm_check (MAXLONG, 69, 0x7fffffff); +#endif + if (tmp == NULL || tmp->tm_year < 0) { + for (i = 63; i >= 0; i--) { + time_t x = pt | ((time_t)1 << i); + if (x < 0 || x < pt) continue; + gm_check (x, 69, 0x7fffffff); + } + } + printf ("sGMTIME_max=%ld\n", pt); + return (0); + } /* check_max */ + +int check_min () +{ + tmp = NULL; + pt = 0; +#ifdef MINLONG + gm_check (MINLONG, -1900, 70); +#endif + if (tmp == NULL) { + for (i = 36; i >= 0; i--) { + time_t x = pt - ((time_t)1 << i); + if (x > 0) continue; + gm_check (x, -1900, 70); + } + } + printf ("sGMTIME_min=%ld\n", pt); + return (0); + } /* check_min */ + +int main (int argc, char *argv[]) +{ + fprintf (stderr, "Sizeof time_t = %ld\n", sizeof (time_t)); + check_max (); + check_min (); + return (0); + } /* main */ +EOCP + set try + if eval $compile; then + eval `$run ./try` + else + echo "Cannot determine sGMTIME_max and sGMTIME_min." >&4 + fi + $rm_try + ;; + esac + +echo "Checking max offsets that localtime () accepts" + +case "$sLOCALTIME_min/$sLOCALTIME_max" in + 0/0|/) + $cat >try.c < +#include +#include +$yyy + +int i; +struct tm *tmp; +time_t pt; + +void local_check (time_t t, int min_year, int max_year) +{ + if (sizeof (time_t) > 4 && t > 0x7ffffffffffff000LL) + tmp = NULL; + else + tmp = localtime (&t); + if ( tmp == NULL || + /* Check tm_year overflow */ + tmp->tm_year < min_year || tmp->tm_year > max_year) + tmp = NULL; + else + pt = t; + } /* local_check */ + +int check_max () +{ + tmp = NULL; + pt = 0; +#ifdef MAXLONG + local_check (MAXLONG, 69, 0x7fffffff); +#endif + if (tmp == NULL || tmp->tm_year < 0) { + for (i = 63; i >= 0; i--) { + time_t x = pt | ((time_t)1 << i); + if (x < 0 || x < pt) continue; + local_check (x, 69, 0x7fffffff); + } + } + printf ("sLOCALTIME_max=%ld\n", pt); + return (0); + } /* check_max */ -: see if ar generates random libraries by itself -echo " " -echo "Checking how to generate random libraries on your machine..." >&4 -echo 'int bar1() { return bar2(); }' > bar1.c -echo 'int bar2() { return 2; }' > bar2.c -$cat > foo.c < +int check_min () +{ + tmp = NULL; + pt = 0; +#ifdef MINLONG + local_check (MINLONG, -1900, 70); #endif -int main() { printf("%d\n", bar1()); exit(0); } -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 -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && - $run ./foobar >/dev/null 2>&1; then - echo "$ar appears to generate random libraries itself." - orderlib=false - ranlib=":" -elif $ar ts bar$_a >/dev/null 2>&1 && - $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 && - $run ./foobar >/dev/null 2>&1; then - echo "a table of contents needs to be added with '$ar ts'." - orderlib=false - ranlib="$ar ts" -else - case "$ranlib" in - :) ranlib='';; - '') - ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin` - $test -f $ranlib || ranlib='' - ;; - esac - if $test -n "$ranlib"; then - echo "your system has '$ranlib'; we'll use that." - orderlib=false + if (tmp == NULL) { + for (i = 36; i >= 0; i--) { + time_t x = pt - ((time_t)1 << i); + if (x > 0) continue; + local_check (x, -1900, 70); + } + } + printf ("sLOCALTIME_min=%ld\n", pt); + return (0); + } /* check_min */ + +int main (int argc, char *argv[]) +{ + check_max (); + check_min (); + return (0); + } /* main */ +EOCP + set try + if eval $compile; then + eval `$run ./try` else - echo "your system doesn't seem to support random libraries" - echo "so we'll use lorder and tsort to order the libraries." - orderlib=true - ranlib=":" - fi -fi -$rm -f foo* bar* + echo "Cannot determine sLOCALTIME_max and sLOCALTIME_min." >&4 + fi + $rm_try + ;; + esac -: check for type of arguments to select. +: check for type of arguments to select. case "$selecttype" in '') case "$d_select" in $define) @@ -19118,7 +20522,7 @@ case "$selecttype" in Checking to see what type of arguments are accepted by select(). EOM hdrs="$define sys/types.h - $i_systime sys/time.h + $i_systime sys/time.h $i_sysselct sys/select.h $d_socket sys/socket.h" : The first arg can be int, unsigned, or size_t @@ -19130,7 +20534,7 @@ EOM for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do for tmo in 'struct timeval *' 'const struct timeval *'; do case "$val" in - '') try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));" + '') try="$extern_C select _(($nfd, $xxx, $xxx, $xxx, $tmo));" if ./protochk "$try" $hdrs; then echo "Your system accepts $xxx." val="$xxx" @@ -19204,7 +20608,7 @@ $selecttype b; #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8) #define NBITS (NBYTES * 8) int main() { - char *s = malloc(NBYTES); + char *s = (char *)malloc(NBYTES); struct timeval t; int i; FILE* fp; @@ -19257,7 +20661,7 @@ EOM val=$ans selectminbits="$val" fi - $rm -f try.* try + $rm_try ;; *) : no select, so pick a harmless default selectminbits=$safebits @@ -19267,28 +20671,20 @@ EOM esac : Trace out the files included by signal.h, then look for SIGxxx names. -: Remove SIGARRAYSIZE used by HPUX. -: Remove SIGSTKSIZE used by Linux. -: Remove SIGSTKSZ used by Posix. -: Remove SIGTYP void lines used by OS2. -: Some cpps, like os390, dont give the file name anywhere if [ "X$fieldn" = X ]; then : Just make some guesses. We check them later. xxx='/usr/include/signal.h /usr/include/sys/signal.h' else xxx=`echo '#include ' | $cppstdin $cppminus $cppflags 2>/dev/null | - $grep '^[ ]*#.*include' | - $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq` + $grep '^[ ]*#.*include' | + $awk "{print \\$$fieldn}" | $sed 's!"!!g' |\ + $sed 's!\\\\\\\\!/!g' | $sort | $uniq` fi -: Check this list of files to be sure we have parsed the cpp output ok. -: This will also avoid potentially non-existent files, such -: as ../foo/bar.h xxxfiles='' for xx in $xxx /dev/null ; do $test -f "$xx" && xxxfiles="$xxxfiles $xx" done -: If we have found no files, at least try signal.h case "$xxxfiles" in '') xxxfiles=`./findhdr signal.h` ;; esac @@ -19337,6 +20733,12 @@ int main() { #endif #ifndef NSIG +# ifdef _SIG_MAX +# define NSIG (_SIG_MAX+1) +# endif +#endif + +#ifndef NSIG # ifdef MAXSIG # define NSIG (MAXSIG+1) # endif @@ -19350,7 +20752,7 @@ int main() { #ifndef NSIG # ifdef SIGARRAYSIZE -# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */ +# define NSIG SIGARRAYSIZE /* Assume ary[SIGARRAYSIZE] */ # endif #endif @@ -19393,14 +20795,14 @@ $1 ~ /^NSIG$/ { nsig = $2 } if (sig_name[$2]) { dup_name[ndups] = $1 dup_num[ndups] = $2 - ndups++ + ndups++ } else { sig_name[$2] = $1 sig_num[$2] = $2 } } -END { +END { if (nsig == 0) { nsig = maxsig + 1 } @@ -19410,7 +20812,7 @@ END { printf("%s %d\n", sig_name[n], sig_num[n]) } else { - printf("NUM%d %d\n", n, n) + printf("NUM%d %d\n", n, n) } } for (n = 0; n < ndups; n++) { @@ -19430,7 +20832,8 @@ $cat >>signal_cmd <<'EOS' set signal if eval $compile_ok; then - $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | $uniq | $awk -f signal.awk >signal.lst + $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) |\ + $uniq | $awk -f signal.awk >signal.lst else echo "(I can't seem be able to compile the whole test program)" >&4 echo "(I'll try it in little pieces.)" >&4 @@ -19530,14 +20933,15 @@ echo $sig_name | $awk \ printf "\n" }' sig_size=`echo $sig_name | awk '{print NF}'` -$rm -f signal signal.c signal.awk signal.lst signal_cmd +$rm -f signal signal.c signal.awk signal.lst signal_cmd +: Check size of size echo " " case "$sizetype" in *_t) zzz="$sizetype" ;; *) zzz="filesize" ;; esac -echo "Checking the size of $zzz..." >&4 +echo "Checking the size of $zzz..." >&4 cat > try.c < #include @@ -19589,7 +20993,7 @@ else size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;; esac fi -$rm -f try try.* +$rm_try set d_socklen_t eval $setvar @@ -19611,7 +21015,7 @@ EOM yyy="$yyy $sizetype int long unsigned" for xxx in $yyy; do case "$socksizetype" in - '') try="extern int accept(int, struct sockaddr *, $xxx *);" + '') try="$extern_C int accept(int, struct sockaddr *, $xxx *);" case "$usesocks" in "$define") if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then @@ -19661,7 +21065,7 @@ int main() printf("$dflt\n"); else if (sizeof(Size_t) == sizeof(int)) printf("int\n"); - else + else printf("long\n"); exit(0); } @@ -19685,7 +21089,7 @@ EOM . ./myread ssizetype="$ans" fi -$rm -f try try.* +$rm_try : see what type of char stdio uses. echo " " @@ -19699,8 +21103,6 @@ else fi $rm -f stdioh - - : see what type uids are declared as in the kernel echo " " echo "Looking for the type for user ids returned by getuid()." @@ -19725,12 +21127,13 @@ uid_t) echo "uid_t found." ;; ;; esac +: Check size of UID echo " " case "$uidtype" in *_t) zzz="$uidtype" ;; *) zzz="uid" ;; esac -echo "Checking the size of $zzz..." >&4 +echo "Checking the size of $zzz..." >&4 cat > try.c < #include @@ -19759,6 +21162,7 @@ else echo "(I can't compile the test program--guessing $uidsize.)" >&4 fi +: Check if UID is signed echo " " case "$uidtype" in *_t) zzz="$uidtype" ;; @@ -19796,7 +21200,7 @@ else fi - +: Check format string for UID echo " " $echo "Checking the format string to be used for uids..." >&4 @@ -19835,7 +21239,7 @@ case "$uidsign" in ;; esac - +: Check if site customization support was requested case "$usesitecustomize" in $define|true|[Yy]*) usesitecustomize="$define" @@ -19845,6 +21249,21 @@ case "$usesitecustomize" in ;; esac +: see if prototypes support variable argument declarations +echo " " +case "$prototype$i_stdarg" in +$define$define) + echo "It appears we'll be able to prototype varargs functions." >&4 + val="$define" + ;; +*) + echo "Too bad... We won't be using prototyped varargs functions..." >&4 + val="$undef" + ;; +esac +set vaproto +eval $setvar + : determine compiler compiler case "$yacc" in '') @@ -19876,6 +21295,10 @@ case "$yacc" in ;; esac +: see if this is a assert.h system +set assert.h i_assert +eval $inhdr + : see if this is a fp.h system set fp.h i_fp eval $inhdr @@ -19884,6 +21307,26 @@ eval $inhdr set fp_class.h i_fp_class eval $inhdr +: see if gdbm.h is available +set gdbm.h t_gdbm +eval $inhdr +case "$t_gdbm" in +$define) + : see if gdbm_open exists + set gdbm_open d_gdbm_open + eval $inlibc + case "$d_gdbm_open" in + $undef) + t_gdbm="$undef" + echo "We won't be including " + ;; + esac + ;; +esac +val="$t_gdbm" +set i_gdbm +eval $setvar + : see if this is a ieeefp.h system case "$i_ieeefp" in '' ) set ieeefp.h i_ieeefp @@ -19903,46 +21346,10 @@ else i_machcthr="$undef" fi - - : see if this is a mntent.h system set mntent.h i_mntent eval $inhdr -: see if ndbm.h is available -set ndbm.h t_ndbm -eval $inhdr - -case "$t_ndbm" in -$undef) - # Some Linux distributions such as RedHat 7.1 put the - # ndbm.h header in /usr/include/gdbm/ndbm.h. - if $test -f /usr/include/gdbm/ndbm.h; then - echo ' found.' - ccflags="$ccflags -I/usr/include/gdbm" - cppflags="$cppflags -I/usr/include/gdbm" - t_ndbm=$define - fi - ;; -esac - -case "$t_ndbm" in -$define) - : see if dbm_open exists - set dbm_open d_dbm_open - eval $inlibc - case "$d_dbm_open" in - $undef) - t_ndbm="$undef" - echo "We won't be including " - ;; - esac - ;; -esac -val="$t_ndbm" -set i_ndbm -eval $setvar - : see if net/errno.h is available val='' set net/errno.h val @@ -19966,7 +21373,7 @@ EOM echo "We won't be including ." >&4 val="$undef" fi - $rm -f try.* try + $rm_try ;; esac set i_neterrno @@ -19984,12 +21391,13 @@ eval $inhdr set prot.h i_prot eval $inhdr +: Preprocessor symbols echo " " -$echo "Guessing which symbols your C compiler and preprocessor define..." >&4 +$echo "Guessing which symbols your C compiler and preprocessor define..." >&4 $cat <<'EOSH' > Cppsym.know a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE -alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX +alliant alpha am29000 AM29000 AMD64 amd64 amiga AMIGAOS AMIX ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi @@ -20009,7 +21417,7 @@ IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE -Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG +LIBCATAMOUNT Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG LONGDOUBLE LONGLONG LP64 luna luna88k Lynx M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3 @@ -20028,7 +21436,7 @@ pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc pc532 pdp11 PGC PIC plexus PORTAR posix POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE POSIX_C_SOURCE POSIX_SOURCE POWER -PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000 +PROTOTYPES PWB pyr QNX QK_USER R3000 REENTRANT RES Rhapsody RISC6000 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE sony sony_news sonyrisc sparc sparclite spectrum @@ -20047,7 +21455,7 @@ USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64 USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2 USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED USGr4 USGr4_2 -Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286 +Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms x86_64 xenix Xenix286 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED z8000 @@ -20082,16 +21490,26 @@ cat < Cppsym.try $startsh cat <<'EOCP' > try.c #include +#if cpp_stuff == 1 +#define STRINGIFY(a) "a" +#endif +#if cpp_stuff == 42 +#define StGiFy(a) #a +#define STRINGIFY(a) StGiFy(a) +#endif +#if $cpp_stuff != 1 && $cpp_stuff != 42 +# include "Bletch: How does this C preprocessor stringify macros?" +#endif int main() { EOCP $awk \\ EOSH cat <<'EOSH' >> Cppsym.try 'length($1) > 0 { - printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 - printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 - printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 - printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1 + printf "#ifdef %s\nprintf(\"%s=%%s\\n\", STRINGIFY(%s));\n#endif\n", $1, $1, $1 + printf "#ifdef _%s\nprintf(\"_%s=%%s\\n\", STRINGIFY(_%s));\n#endif\n", $1, $1, $1 + printf "#ifdef __%s\nprintf(\"__%s=%%s\\n\", STRINGIFY(__%s));\n#endif\n", $1, $1, $1 + printf "#ifdef __%s__\nprintf(\"__%s__=%%s\\n\", STRINGIFY(__%s__));\n#endif\n", $1, $1, $1 }' >> try.c echo 'return 0;}' >> try.c EOSH @@ -20101,11 +21519,26 @@ case "$osname-$gccversion" in irix-) ccflags="\$ccflags -woff 1178" ;; os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;; esac -$cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try +$cc -o try -Dcpp_stuff=$cpp_stuff $optimize \$ccflags $ldflags try.c $libs && $run ./try | $sed 's/ /\\\\ /g' EOSH chmod +x Cppsym.try $eunicefix Cppsym.try ./Cppsym < Cppsym.know > Cppsym.true +: Add in any linux cpp "predefined macros": +case "$osname::$gccversion" in + *linux*::*.*|*gnukfreebsd*::*.*|gnu::*.*) + tHdrH=_tmpHdr + rm -f $tHdrH'.h' $tHdrH + touch $tHdrH'.h' + if $cpp -dM $tHdrH'.h' > $tHdrH'_cppsym.h' && [ -s $tHdrH'_cppsym.h' ]; then + sed 's/#define[\ \ ]*//;s/[\ \ ].*$//' <$tHdrH'_cppsym.h' >$tHdrH'_cppsym.real' + if [ -s $tHdrH'_cppsym.real' ]; then + cat $tHdrH'_cppsym.real' Cppsym.know | sort | uniq | ./Cppsym | sort | uniq > Cppsym.true + fi + fi + rm -f $tHdrH'.h' $tHdrH'_cppsym.h' $tHdrH'_cppsym.real' + ;; +esac : now check the C compiler for additional symbols postprocess_cc_v='' case "$osname" in @@ -20123,7 +21556,7 @@ do -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A//' | $sed 's/\(.*\)(\(.*\))/\1=\2/';; esac done -$rm -f try.c +$rm_try EOS postprocess_cc_v='' chmod +x ccsym @@ -20137,11 +21570,9 @@ fi $awk '/\=/ { print $0; next } { print $0"=1" }' ccsym.raw >ccsym.list -$awk '/\=/ { print $0; next } - { print $0"=1" }' Cppsym.true >ccsym.true -$comm -13 ccsym.true ccsym.list >ccsym.own -$comm -12 ccsym.true ccsym.list >ccsym.com -$comm -23 ccsym.true ccsym.list >ccsym.cpp +$comm -13 Cppsym.true ccsym.list >ccsym.own +$comm -12 Cppsym.true ccsym.list >ccsym.com +$comm -23 Cppsym.true ccsym.list >ccsym.cpp also='' if $test -z ccsym.raw; then echo "Your C compiler doesn't seem to define any symbols!" >&4 @@ -20201,14 +21632,14 @@ case "$val3" in echo " found." >&4 else echo "System is pyramid with BSD universe." - echo " not found--you could have problems." >&4 + ./warn " not found--you could have problems." fi;; *) if $test `./findhdr termio.h`; then val="$define" echo " found." >&4 else echo "System is pyramid with USG universe." - echo " not found--you could have problems." >&4 + ./warn " not found--you could have problems." fi;; esac elif ./usg; then @@ -20219,7 +21650,7 @@ case "$val3" in echo " found." >&4 val2="$define" else -echo "Neither nor found--you could have problems." >&4 + ./warn "Neither nor found--cross fingers!" fi else if $test `./findhdr sgtty.h`; then @@ -20229,7 +21660,7 @@ echo "Neither nor found--you could have problems." >&4 echo " found." >&4 val="$define" else -echo "Neither nor found--you could have problems." >&4 + ./warn "Neither nor found--cross fingers!" fi fi;; esac @@ -20241,10 +21672,6 @@ val=$val3; set i_termios; eval $setvar set stddef.h i_stddef eval $inhdr -: see if this is a sunmath.h system -set sunmath.h i_sunmath -eval $inhdr - : see if sys/access.h is available set sys/access.h i_sysaccess eval $inhdr @@ -20290,16 +21717,18 @@ fi set i_syssockio eval $setvar - : see if this is a syslog.h system set syslog.h i_syslog eval $inhdr - : see if this is a sys/mode.h system set sys/mode.h i_sysmode eval $inhdr +: see if there is a sys/poll.h file +set sys/poll.h i_syspoll +eval $inhdr + : see if sys/resource.h has to be included set sys/resource.h i_sysresrc eval $inhdr @@ -20316,7 +21745,6 @@ eval $inhdr set sys/un.h i_sysun eval $inhdr - : see if this is a sys/utsname.h system set sys/utsname.h i_sysutsname eval $inhdr @@ -20333,10 +21761,6 @@ eval $inhdr 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") @@ -20348,26 +21772,7 @@ case "$d_vfork" in ;; esac -: see if gdbm.h is available -set gdbm.h t_gdbm -eval $inhdr -case "$t_gdbm" in -$define) - : see if gdbm_open exists - set gdbm_open d_gdbm_open - eval $inlibc - case "$d_gdbm_open" in - $undef) - t_gdbm="$undef" - echo "We won't be including " - ;; - esac - ;; -esac -val="$t_gdbm" -set i_gdbm -eval $setvar - +: Check extensions echo " " echo "Looking for extensions..." >&4 : If we are using the old config.sh, known_extensions may contain @@ -20381,42 +21786,72 @@ nonxs_extensions='' : Function to recursively find available extensions, ignoring DynaLoader : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness +: In 5.10.1 and later, extensions are stored in directories +: like File-Glob instead of the older File/Glob/. find_extensions=' for xxx in *; do - case "$xxx" in - DynaLoader|dynaload) ;; - *) - if $test -f $xxx/$xxx.xs; then - known_extensions="$known_extensions $1$xxx"; - elif $test -f $xxx/Makefile.PL; then - nonxs_extensions="$nonxs_extensions $1$xxx"; - else - if $test -d $xxx -a $# -lt 10; then - set $1$xxx/ $*; - cd "$xxx"; - eval $find_extensions; - cd ..; - shift; - fi; - fi - ;; - esac; + case "$xxx" in + DynaLoader|dynaload) ;; + *) + this_ext=`echo $xxx | $sed -e s/-/\\\//g`; + leaf=`echo $xxx | $sed -e s/.*-//`; + if $test -d File; then + if $test -f $xxx/$leaf.xs -o -f $xxx/$leaf.c; then + known_extensions="$known_extensions $1$this_ext"; + elif $test -f $xxx/Makefile.PL; then + nonxs_extensions="$nonxs_extensions $1$this_ext"; + else + if $test -d $xxx -a $# -lt 10; then + set $1$xxx/ $*; + cd "$xxx"; + eval $find_extensions; + cd ..; + shift; + fi; + fi; + else + $ls -1 $xxx > $$.tmp; + if $contains "\.xs$" $$.tmp > /dev/null 2>&1; then + known_extensions="$known_extensions $this_ext"; + elif $contains "\.c$" $$.tmp > /dev/null 2>&1; then + known_extensions="$known_extensions $this_ext"; + elif $test -d $xxx; then + nonxs_extensions="$nonxs_extensions $this_ext"; + fi; + $rm -f $$.tmp; + fi + ;; + esac; done' tdir=`pwd` -cd "$rsrc/ext" +cd "$rsrc/cpan" set X shift eval $find_extensions -# Special case: Add in threads/shared since it is not picked up by the -# recursive find above (and adding in general recursive finding breaks -# SDBM_File/sdbm). A.D. 10/25/2001. -known_extensions="$known_extensions threads/shared" -set X $nonxs_extensions +cd "$rsrc/dist" +set X +shift +eval $find_extensions +cd "$rsrc/ext" +set X shift -nonxs_extensions="$*" +eval $find_extensions +if $test -d File-Glob; then + : All ext/ flattened +else + # Special case: Add in modules that nest beyond the first level. + # Currently threads/shared and Hash/Util/FieldHash, since they are + # not picked up by the recursive find above (and adding in general + # recursive finding breaks SDBM_File/sdbm). + # A.D. 20011025 (SDBM), ajgough 20071008 (FieldHash) + known_extensions="$known_extensions threads/shared Hash/Util/FieldHash" +fi set X $known_extensions shift -known_extensions="$*" +known_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '` +set X $nonxs_extensions +shift +nonxs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '` cd "$tdir" : Now see which are supported on this system. @@ -20429,17 +21864,23 @@ for xxx in $known_extensions ; do esac ;; GDBM_File|gdbm_fil) - case "$i_gdbm" in + case "$i_gdbm" in $define) avail_ext="$avail_ext $xxx" ;; esac ;; I18N/Langinfo|i18n_lan) - case "$i_langinfo$d_nl_langinfo" in + case "$i_langinfo$d_nl_langinfo" in $define$define) avail_ext="$avail_ext $xxx" ;; esac ;; + IPC/SysV|ipc/sysv) + : XXX Do we need a useipcsysv variable here + case "${d_msg}${d_sem}${d_shm}" in + *"${define}"*) avail_ext="$avail_ext $xxx" ;; + esac + ;; NDBM_File|ndbm_fil) - case "$i_ndbm" in + case "$d_ndbm" in $define) case "$osname-$use64bitint" in hpux-define) @@ -20452,32 +21893,36 @@ for xxx in $known_extensions ; do ;; esac ;; - ODBM_File|odbm_fil) + ODBM_File|odbm_fil) case "${i_dbm}${i_rpcsvcdbm}" in *"${define}"*) - case "$osname-$use64bitint" in - hpux-define) - case "$libs" in - *-ldbm*) avail_ext="$avail_ext $xxx" ;; + case "$d_cplusplus" in + define) ;; # delete as a function name will not work + *) case "$osname-$use64bitint" in + hpux-define) + case "$libs" in + *-ldbm*) avail_ext="$avail_ext $xxx" ;; + esac + ;; + *) avail_ext="$avail_ext $xxx" ;; esac ;; - *) avail_ext="$avail_ext $xxx" ;; esac ;; esac ;; - POSIX|posix) - case "$useposix" in + Opcode|opcode) + case "$useopcode" in true|define|y) avail_ext="$avail_ext $xxx" ;; esac ;; - Opcode|opcode) - case "$useopcode" in + POSIX|posix) + case "$useposix" in true|define|y) avail_ext="$avail_ext $xxx" ;; esac ;; Socket|socket) - case "$d_socket" in + case "$d_socket" in true|$define|y) case "$osname" in beos) ;; # not unless BONE @@ -20488,31 +21933,18 @@ for xxx in $known_extensions ; do ;; Sys/Syslog|sys/syslog) : XXX syslog requires socket - case "$d_socket" in + case "$d_socket" in true|$define|y) avail_ext="$avail_ext $xxx" ;; esac ;; Thread|thread) case "$usethreads" in true|$define|y) - case "$useithreads" in - $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;; + case "$use5005threads" in + $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;; esac esac ;; - XS/APItest|xs/apitest) - # This is just for testing. Skip it unless we have dynamic loading. - - case "$usedl" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; - XS/Typemap|xs/typemap) - # This is just for testing. Skip it unless we have dynamic loading. - case "$usedl" in - $define) avail_ext="$avail_ext $xxx" ;; - esac - ;; threads|threads/shared) # threads and threads::shared are special cases. # To stop people from asking "Perl 5.8.0 was supposed @@ -20527,10 +21959,31 @@ for xxx in $known_extensions ; do # --jhi avail_ext="$avail_ext $xxx" ;; - IPC/SysV|ipc/sysv) - : XXX Do we need a useipcsysv variable here - case "${d_msg}${d_sem}${d_shm}" in - *"${define}"*) avail_ext="$avail_ext $xxx" ;; + VMS*) + ;; + Win32*) + case "$osname" in + cygwin) avail_ext="$avail_ext $xxx" ;; + esac + ;; + XS/APItest|xs/apitest) + # This is just for testing. Skip it unless we have dynamic loading. + + case "$usedl" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + XS/APItest/KeywordRPN|xs/apitest/keywordrpn) + # This is just for testing. Skip it unless we have dynamic loading. + + case "$usedl" in + $define) avail_ext="$avail_ext $xxx" ;; + esac + ;; + XS/Typemap|xs/typemap) + # This is just for testing. Skip it unless we have dynamic loading. + case "$usedl" in + $define) avail_ext="$avail_ext $xxx" ;; esac ;; *) avail_ext="$avail_ext $xxx" @@ -20619,11 +22072,11 @@ EOM previous) if test X"$dynamic_ext" != X"$avail_ext"; then $cat <&4 . ./config.arch fi @@ -20836,13 +22289,18 @@ $startsh # Configured by : $cf_by # Target system : $myuname +EOT +: Add in command line options if available +$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh + +$spitshell <>config.sh + Author='$Author' Date='$Date' Header='$Header' Id='$Id' Locker='$Locker' Log='$Log' -Mcc='$Mcc' RCSfile='$RCSfile' Revision='$Revision' Source='$Source' @@ -20870,6 +22328,7 @@ awk='$awk' baserev='$baserev' bash='$bash' bin='$bin' +bin_ELF='$bin_ELF' binexp='$binexp' bison='$bison' byacc='$byacc' @@ -20888,6 +22347,7 @@ ccversion='$ccversion' cf_by='$cf_by' cf_email='$cf_email' cf_time='$cf_time' +charbits='$charbits' charsize='$charsize' chgrp='$chgrp' chmod='$chmod' @@ -20932,9 +22392,11 @@ d_accessx='$d_accessx' d_aintl='$d_aintl' d_alarm='$d_alarm' d_archlib='$d_archlib' +d_asctime64='$d_asctime64' d_asctime_r='$d_asctime_r' d_atolf='$d_atolf' d_atoll='$d_atoll' +d_attribute_deprecated='$d_attribute_deprecated' d_attribute_format='$d_attribute_format' d_attribute_malloc='$d_attribute_malloc' d_attribute_nonnull='$d_attribute_nonnull' @@ -20947,7 +22409,10 @@ d_bcopy='$d_bcopy' d_bsd='$d_bsd' d_bsdgetpgrp='$d_bsdgetpgrp' d_bsdsetpgrp='$d_bsdsetpgrp' +d_builtin_choose_expr='$d_builtin_choose_expr' +d_builtin_expect='$d_builtin_expect' d_bzero='$d_bzero' +d_c99_variadic_macros='$d_c99_variadic_macros' d_casti32='$d_casti32' d_castneg='$d_castneg' d_charvspr='$d_charvspr' @@ -20955,19 +22420,25 @@ d_chown='$d_chown' d_chroot='$d_chroot' d_chsize='$d_chsize' d_class='$d_class' +d_clearenv='$d_clearenv' d_closedir='$d_closedir' d_cmsghdr_s='$d_cmsghdr_s' d_const='$d_const' d_copysignl='$d_copysignl' +d_cplusplus='$d_cplusplus' d_crypt='$d_crypt' d_crypt_r='$d_crypt_r' d_csh='$d_csh' +d_ctermid='$d_ctermid' d_ctermid_r='$d_ctermid_r' +d_ctime64='$d_ctime64' d_ctime_r='$d_ctime_r' d_cuserid='$d_cuserid' d_dbl_dig='$d_dbl_dig' d_dbminitproto='$d_dbminitproto' +d_difftime64='$d_difftime64' d_difftime='$d_difftime' +d_dir_dd_fd='$d_dir_dd_fd' d_dirfd='$d_dirfd' d_dirnamlen='$d_dirnamlen' d_dlerror='$d_dlerror' @@ -21023,6 +22494,10 @@ d_fstatvfs='$d_fstatvfs' d_fsync='$d_fsync' d_ftello='$d_ftello' d_ftime='$d_ftime' +d_futimes='$d_futimes' +d_gdbm_ndbm_h_uses_prototypes='$d_gdbm_ndbm_h_uses_prototypes' +d_gdbmndbm_h_uses_prototypes='$d_gdbmndbm_h_uses_prototypes' +d_getaddrinfo='$d_getaddrinfo' d_getcwd='$d_getcwd' d_getespwnam='$d_getespwnam' d_getfsstat='$d_getfsstat' @@ -21044,6 +22519,7 @@ d_getlogin='$d_getlogin' d_getlogin_r='$d_getlogin_r' d_getmnt='$d_getmnt' d_getmntent='$d_getmntent' +d_getnameinfo='$d_getnameinfo' d_getnbyaddr='$d_getnbyaddr' d_getnbyname='$d_getnbyname' d_getnent='$d_getnent' @@ -21079,14 +22555,18 @@ d_getservprotos='$d_getservprotos' d_getspnam='$d_getspnam' d_getspnam_r='$d_getspnam_r' d_gettimeod='$d_gettimeod' +d_gmtime64='$d_gmtime64' d_gmtime_r='$d_gmtime_r' d_gnulibc='$d_gnulibc' d_grpasswd='$d_grpasswd' d_hasmntopt='$d_hasmntopt' d_htonl='$d_htonl' d_ilogbl='$d_ilogbl' +d_inc_version_list='$d_inc_version_list' d_index='$d_index' d_inetaton='$d_inetaton' +d_inetntop='$d_inetntop' +d_inetpton='$d_inetpton' d_int64_t='$d_int64_t' d_isascii='$d_isascii' d_isfinite='$d_isfinite' @@ -21098,7 +22578,9 @@ d_lchown='$d_lchown' d_ldbl_dig='$d_ldbl_dig' d_libm_lib_version='$d_libm_lib_version' d_link='$d_link' +d_localtime64='$d_localtime64' d_localtime_r='$d_localtime_r' +d_localtime_r_needs_tzset='$d_localtime_r_needs_tzset' d_locconv='$d_locconv' d_lockf='$d_lockf' d_longdbl='$d_longdbl' @@ -21106,6 +22588,8 @@ d_longlong='$d_longlong' d_lseekproto='$d_lseekproto' d_lstat='$d_lstat' d_madvise='$d_madvise' +d_malloc_good_size='$d_malloc_good_size' +d_malloc_size='$d_malloc_size' d_mblen='$d_mblen' d_mbstowcs='$d_mbstowcs' d_mbtowc='$d_mbtowc' @@ -21119,6 +22603,7 @@ d_mkdtemp='$d_mkdtemp' d_mkfifo='$d_mkfifo' d_mkstemp='$d_mkstemp' d_mkstemps='$d_mkstemps' +d_mktime64='$d_mktime64' d_mktime='$d_mktime' d_mmap='$d_mmap' d_modfl='$d_modfl' @@ -21139,6 +22624,8 @@ d_msgsnd='$d_msgsnd' d_msync='$d_msync' d_munmap='$d_munmap' d_mymalloc='$d_mymalloc' +d_ndbm='$d_ndbm' +d_ndbm_h_uses_prototypes='$d_ndbm_h_uses_prototypes' d_nice='$d_nice' d_nl_langinfo='$d_nl_langinfo' d_nv_preserves_uv='$d_nv_preserves_uv' @@ -21155,7 +22642,11 @@ d_phostname='$d_phostname' d_pipe='$d_pipe' d_poll='$d_poll' d_portable='$d_portable' +d_prctl='$d_prctl' +d_prctl_set_name='$d_prctl_set_name' +d_printf_format_null='$d_printf_format_null' d_procselfexe='$d_procselfexe' +d_pseudofork='$d_pseudofork' d_pthread_atfork='$d_pthread_atfork' d_pthread_attr_setscope='$d_pthread_attr_setscope' d_pthread_yield='$d_pthread_yield' @@ -21235,14 +22726,18 @@ d_shmctl='$d_shmctl' d_shmdt='$d_shmdt' d_shmget='$d_shmget' d_sigaction='$d_sigaction' +d_signbit='$d_signbit' d_sigprocmask='$d_sigprocmask' d_sigsetjmp='$d_sigsetjmp' +d_sitearch='$d_sitearch' +d_snprintf='$d_snprintf' d_sockatmark='$d_sockatmark' d_sockatmarkproto='$d_sockatmarkproto' d_socket='$d_socket' d_socklen_t='$d_socklen_t' d_sockpair='$d_sockpair' d_socks5_init='$d_socks5_init' +d_sprintf_returns_strlen='$d_sprintf_returns_strlen' d_sqrtl='$d_sqrtl' d_srand48_r='$d_srand48_r' d_srandom_r='$d_srandom_r' @@ -21290,6 +22785,7 @@ d_tcsetpgrp='$d_tcsetpgrp' d_telldir='$d_telldir' d_telldirproto='$d_telldirproto' d_time='$d_time' +d_timegm='$d_timegm' d_times='$d_times' d_tm_tm_gmtoff='$d_tm_tm_gmtoff' d_tm_tm_zone='$d_tm_tm_zone' @@ -21303,6 +22799,7 @@ d_umask='$d_umask' d_uname='$d_uname' d_union_semun='$d_union_semun' d_unordered='$d_unordered' +d_unsetenv='$d_unsetenv' d_usleep='$d_usleep' d_usleepproto='$d_usleepproto' d_ustat='$d_ustat' @@ -21316,6 +22813,7 @@ d_voidsig='$d_voidsig' d_voidtty='$d_voidtty' d_volatile='$d_volatile' d_vprintf='$d_vprintf' +d_vsnprintf='$d_vsnprintf' d_wait4='$d_wait4' d_waitpid='$d_waitpid' d_wcstombs='$d_wcstombs' @@ -21335,6 +22833,7 @@ dlsrc='$dlsrc' doublesize='$doublesize' drand01='$drand01' drand48_r_proto='$drand48_r_proto' +dtrace='$dtrace' dynamic_ext='$dynamic_ext' eagain='$eagain' ebcdic='$ebcdic' @@ -21351,6 +22850,7 @@ eunicefix='$eunicefix' exe_ext='$exe_ext' expr='$expr' extensions='$extensions' +extern_C='$extern_C' extras='$extras' fflushNULL='$fflushNULL' fflushall='$fflushall' @@ -21416,6 +22916,7 @@ i64type='$i64type' i8size='$i8size' i8type='$i8type' i_arpainet='$i_arpainet' +i_assert='$i_assert' i_bsdioctl='$i_bsdioctl' i_crypt='$i_crypt' i_db='$i_db' @@ -21428,6 +22929,8 @@ i_float='$i_float' i_fp='$i_fp' i_fp_class='$i_fp_class' i_gdbm='$i_gdbm' +i_gdbm_ndbm='$i_gdbm_ndbm' +i_gdbmndbm='$i_gdbmndbm' i_grp='$i_grp' i_ieeefp='$i_ieeefp' i_inttypes='$i_inttypes' @@ -21437,6 +22940,7 @@ i_limits='$i_limits' i_locale='$i_locale' i_machcthr='$i_machcthr' i_malloc='$i_malloc' +i_mallocmalloc='$i_mallocmalloc' i_math='$i_math' i_memory='$i_memory' i_mntent='$i_mntent' @@ -21471,6 +22975,7 @@ i_sysmode='$i_sysmode' i_sysmount='$i_sysmount' i_sysndir='$i_sysndir' i_sysparam='$i_sysparam' +i_syspoll='$i_syspoll' i_sysresrc='$i_sysresrc' i_syssecrt='$i_syssecrt' i_sysselct='$i_sysselct' @@ -21502,6 +23007,7 @@ inc_version_list='$inc_version_list' inc_version_list_init='$inc_version_list_init' incpath='$incpath' inews='$inews' +initialinstalllocation='$initialinstalllocation' installarchlib='$installarchlib' installbin='$installbin' installhtml1dir='$installhtml1dir' @@ -21570,6 +23076,10 @@ lpr='$lpr' ls='$ls' lseeksize='$lseeksize' lseektype='$lseektype' +mad='$mad' +madlyh='$madlyh' +madlyobj='$madlyobj' +madlysrc='$madlysrc' mail='$mail' mailx='$mailx' make='$make' @@ -21609,6 +23119,7 @@ nroff='$nroff' nvEUformat='$nvEUformat' nvFUformat='$nvFUformat' nvGUformat='$nvGUformat' +nv_overflows_integers_at='$nv_overflows_integers_at' nv_preserves_uv_bits='$nv_preserves_uv_bits' nveformat='$nveformat' nvfformat='$nvfformat' @@ -21659,9 +23170,14 @@ readdir64_r_proto='$readdir64_r_proto' readdir_r_proto='$readdir_r_proto' revision='$revision' rm='$rm' +rm_try='$rm_try' rmail='$rmail' run='$run' runnm='$runnm' +sGMTIME_max='$sGMTIME_max' +sGMTIME_min='$sGMTIME_min' +sLOCALTIME_max='$sLOCALTIME_max' +sLOCALTIME_min='$sLOCALTIME_min' sPRIEUldbl='$sPRIEUldbl' sPRIFUldbl='$sPRIFUldbl' sPRIGUldbl='$sPRIGUldbl' @@ -21787,7 +23303,9 @@ use5005threads='$use5005threads' use64bitall='$use64bitall' use64bitint='$use64bitint' usecrosscompile='$usecrosscompile' +usedevel='$usedevel' usedl='$usedl' +usedtrace='$usedtrace' usefaststdio='$usefaststdio' useithreads='$useithreads' uselargefiles='$uselargefiles' @@ -21817,6 +23335,7 @@ uvsize='$uvsize' uvtype='$uvtype' uvuformat='$uvuformat' uvxformat='$uvxformat' +vaproto='$vaproto' vendorarch='$vendorarch' vendorarchexp='$vendorarchexp' vendorbin='$vendorbin' @@ -21848,20 +23367,18 @@ zcat='$zcat' zip='$zip' EOT -: Add in command line options if available -$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh - : add special variables $test -f $src/patchlevel.h && \ awk '/^#define[ ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh -echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh +echo "PERL_PATCHLEVEL='$perl_patchlevel'" >>config.sh echo "PERL_CONFIG_SH=true" >>config.sh : propagate old symbols if $test -f UU/config.sh; then UU/oldconfig.sh - sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\ - $sort | $uniq -u >UU/oldsyms + $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \ + config.sh config.sh UU/oldconfig.sh |\ + $sort | $uniq -u >UU/oldsyms set X `cat UU/oldsyms` shift case $# in @@ -21870,7 +23387,7 @@ if $test -f UU/config.sh; then cat <>config.sh + echo ": Variables propagated from previous config.sh file." >>config.sh for sym in `cat UU/oldsyms`; do echo " Propagating $hint variable "'$'"$sym..." eval 'tmp="$'"${sym}"'"'