X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/03deea9fedb299950b5262e0fa48a6d31cd3f290..912fd71114648888551a4750534463f20ae16c7c:/Configure diff --git a/Configure b/Configure index 078537f..f16a4bf 100755 --- a/Configure +++ b/Configure @@ -11,10 +11,13 @@ # 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 -# working with this copy of Configure, you may wish to get metaconfig. -# The dist package (which contains metaconfig) is available via SVN: -# svn co https://svn.code.sf.net/p/dist/code/trunk/dist +# Note: this Configure script was generated automatically by the tool +# called "metaconfig". Rather than working with this copy of Configure, +# you may wish to get metaconfig. Perl uses a modified version of this +# tool, available in the "dist" folder in the checkout of the git repo +# $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig +# The original dist package (including metaconfig) is available via SVN: +# $ svn co https://svn.code.sf.net/p/dist/code/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 @@ -26,9 +29,8 @@ # $ git clone git://perl5.git.perl.org/metaconfig.git metaconfig # # See Porting/pumpkin.pod for more information on metaconfig. -# -# Generated on Wed Jan 22 12:03:46 CET 2014 [metaconfig 3.5 PL0] +# Generated using [metaconfig 3.5 PL0] # (with additional metaconfig patches by perlbug@perl.org) cat >c1$$ <&1 >/dev/null ; then +if test -d c:/. || ( uname -a | grep -i 'os\(/\|\)2' 2>&1 ) 2>&1 >/dev/null ; then if test -n "$OS2_SHELL"; then p_=\; PATH=`cmd /c "echo %PATH%" | tr '\\\\' / ` @@ -206,16 +208,18 @@ ccsymbols='' cppccsymbols='' cppsymbols='' from='' +hostgenerate='' +hostosname='' +hostperl='' run='' targetarch='' targetdir='' +targetenv='' targethost='' targetmkdir='' targetport='' to='' usecrosscompile='' -hostperl='' -hostgenerate='' extern_C='' mistrustnm='' usedevel='' @@ -370,10 +374,13 @@ cppstdin='' d__fwalk='' d_access='' d_accessx='' +d_acosh='' d_aintl='' d_alarm='' asctime_r_proto='' d_asctime_r='' +d_asinh='' +d_atanh='' d_attribute_deprecated='' d_attribute_format='' d_attribute_malloc='' @@ -383,6 +390,7 @@ d_attribute_pure='' d_attribute_unused='' d_attribute_warn_unused_result='' d_printf_format_null='' +d_backtrace='' d_bcmp='' d_bcopy='' d_builtin_choose_expr='' @@ -392,6 +400,7 @@ d_c99_variadic_macros='' d_casti32='' castflags='' d_castneg='' +d_cbrt='' d_chown='' d_chroot='' d_chsize='' @@ -401,6 +410,7 @@ d_closedir='' d_void_closedir='' d_cmsghdr_s='' d_const='' +d_copysign='' d_copysignl='' d_cplusplus='' cryptlib='' @@ -420,6 +430,7 @@ d_dbminitproto='' d_difftime='' d_dir_dd_fd='' d_dirfd='' +d_dladdr='' d_dlerror='' d_dlopen='' d_dlsymun='' @@ -448,6 +459,10 @@ endpwent_r_proto='' d_endsent='' d_endservent_r='' endservent_r_proto='' +d_erf='' +d_erfc='' +d_exp2='' +d_expm1='' d_faststdio='' d_fchdir='' d_fchmod='' @@ -457,17 +472,25 @@ d_fcntl_can_lock='' d_fd_macros='' d_fd_set='' d_fds_bits='' +d_fdim='' +d_fegetround='' d_fgetpos='' d_finite='' d_finitel='' d_flexfnam='' d_flock='' d_flockproto='' +d_fma='' +d_fmax='' +d_fmin='' d_fork='' d_fp_class='' +d_fp_classl='' d_fpclass='' +d_fp_classify='' d_fpclassify='' d_fpclassl='' +d_fpgetround='' d_fpos64_t='' d_frexpl='' d_fs_data_s='' @@ -567,6 +590,8 @@ d_gnulibc='' gnulibc_version='' d_hasmntopt='' d_htonl='' +d_hypot='' +d_ilogb='' d_ilogbl='' d_inetaton='' d_inetntop='' @@ -575,23 +600,45 @@ d_int64_t='' d_isascii='' d_isblank='' d_isfinite='' +d_isfinitel='' d_isinf='' +d_isinfl='' +d_isless='' d_isnan='' d_isnanl='' +d_isnormal='' +d_j0='' +d_j0l='' d_killpg='' +d_lc_monetary_2008='' d_lchown='' d_ldbl_dig='' +d_lgamma='' +d_lgamma_r='' d_libm_lib_version='' d_link='' +d_llrint='' +d_llrintl='' +d_llround='' +d_llroundl='' d_localtime_r='' d_localtime_r_needs_tzset='' localtime_r_proto='' d_locconv='' d_lockf='' +d_log1p='' +d_log2='' +d_logb='' +d_ldexpl='' d_longdbl='' +longdblkind='' longdblsize='' d_longlong='' longlongsize='' +d_lrint='' +d_lrintl='' +d_lround='' +d_lroundl='' d_lseekproto='' d_lstat='' d_madvise='' @@ -625,6 +672,10 @@ d_msgrcv='' d_msgsnd='' d_msync='' d_munmap='' +d_nan='' +d_nearbyint='' +d_nextafter='' +d_nexttoward='' d_nice='' d_nl_langinfo='' d_off64_t='' @@ -646,6 +697,7 @@ d_pthread_attr_setscope='' d_pthread_yield='' d_sched_yield='' sched_yield='' +d_ptrdiff_t='' d_qgcvt='' d_random_r='' random_r_proto='' @@ -660,12 +712,20 @@ readdir_r_proto='' d_readlink='' d_readv='' d_recvmsg='' +d_re_comp='' +d_regcmp='' +d_regcomp='' +d_remainder='' +d_remquo='' d_rename='' +d_rint='' d_rmdir='' +d_round='' d_safebcpy='' d_safemcpy='' d_sanemcmp='' d_sbrkproto='' +d_scalbn='' d_scalbnl='' d_select='' d_sem='' @@ -757,6 +817,7 @@ d_srandom_r='' srandom_r_proto='' d_sresgproto='' d_sresuproto='' +d_stat='' d_statblks='' d_statfs_f_flags='' d_statfs_s='' @@ -805,6 +866,7 @@ d_system='' d_tcgetpgrp='' d_tcsetpgrp='' d_telldirproto='' +d_tgamma='' d_time='' timetype='' d_asctime64='' @@ -818,7 +880,9 @@ clocktype='' d_times='' d_tmpnam_r='' tmpnam_r_proto='' +d_trunc='' d_truncate='' +d_truncl='' d_ttyname_r='' ttyname_r_proto='' d_tzname='' @@ -843,7 +907,9 @@ d_charvspr='' d_vprintf='' d_wait4='' d_waitpid='' +d_wcscmp='' d_wcstombs='' +d_wcsxfrm='' d_wctomb='' d_writev='' dlext='' @@ -856,7 +922,6 @@ ld_can_script='' lddlflags='' usedl='' doublesize='' -bootstrap_charset='' ebcdic='' fflushNULL='' fflushall='' @@ -880,6 +945,7 @@ html3direxp='' installhtml3dir='' i_arpainet='' i_assert='' +i_bfd='' i_crypt='' db_hashtype='' db_prefixtype='' @@ -893,7 +959,9 @@ d_dirnamlen='' direntrytype='' i_dirent='' i_dlfcn='' +i_execinfo='' i_fcntl='' +i_fenv='' i_float='' i_fp='' i_fp_class='' @@ -936,10 +1004,12 @@ d_pwgecos='' d_pwpasswd='' d_pwquota='' i_pwd='' +i_quadmath='' i_shadow='' i_socks='' i_stdbool='' i_stddef='' +i_stdint='' i_stdlib='' i_string='' strings='' @@ -992,6 +1062,10 @@ i_vfork='' d_inc_version_list='' inc_version_list='' inc_version_list_init='' +doubleinfbytes='' +doublenanbytes='' +longdblinfbytes='' +longdblnanbytes='' installprefix='' installprefixexp='' installstyle='' @@ -1025,6 +1099,7 @@ d_PRIeldbl='' d_PRIfldbl='' d_PRIgldbl='' d_SCNfldbl='' +doublekind='' sPRIEUldbl='' sPRIFUldbl='' sPRIGUldbl='' @@ -1034,10 +1109,6 @@ sPRIgldbl='' sSCNfldbl='' lseeksize='' lseektype='' -mad='' -madlyh='' -madlyobj='' -madlysrc='' make_set_make='' d_mymalloc='' freetype='' @@ -1054,6 +1125,9 @@ installman3dir='' man3dir='' man3direxp='' man3ext='' +doublemantbits='' +longdblmantbits='' +nvmantbits='' modetype='' multiarch='' mydomain='' @@ -1165,6 +1239,7 @@ scriptdirexp='' selectminbits='' selecttype='' sh='' +targetsh='' sig_count='' sig_name='' sig_name_init='' @@ -1229,6 +1304,7 @@ uidtype='' archname64='' use64bitall='' use64bitint='' +usecbacktrace='' dtrace='' usedtrace='' usefaststdio='' @@ -1246,6 +1322,7 @@ runnm='' usenm='' usensgetexecutablepath='' useperlio='' +usequadmath='' usesocks='' d_oldpthreads='' use5005threads='' @@ -1384,8 +1461,8 @@ libswanted_uselargefiles='' : set usesocks on the Configure command line to enable socks. : List of libraries we want. : If anyone needs extra -lxxx, put those in a hint file. -libswanted="socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld sun" -libswanted="$libswanted m crypt sec util c cposix posix ucb bsd BSD" +libswanted="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld" +libswanted="$libswanted sun m crypt sec util c cposix posix ucb bsd BSD" : We probably want to search /usr/shlib before most other libraries. : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist. glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'` @@ -1438,6 +1515,10 @@ EOM ;; esac +: When cross-compiling we need to separate the sh-to-run-Configure-with from the sh-to-use-in-Perl +: default both to the same thing, cross-compilers can then set targetsh differently if they like +targetsh=$sh + : see if sh knows # comments if `$sh -c '#' >/dev/null 2>&1`; then shsharp=true @@ -1781,6 +1862,11 @@ esac : run the defines and the undefines, if any, but leave the file out there... touch optdef.sh +grep -q '\\' optdef.sh +if test $? = 0; then + echo "Configure does not support \\ in -D arguments" + exit 1 +fi . ./optdef.sh : create the posthint manipulation script and leave the file out there... touch posthint.sh @@ -2511,7 +2597,7 @@ egrep) esac case "$less" in '') ;; -*) if $less -R /dev/null; then +*) if $less -R /dev/null 2>&1; then echo "Substituting less -R for less." less="$less -R" _less=$less @@ -2639,11 +2725,11 @@ EOM # 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 + # 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 <&2 exit 1 fi - fi + fi case "$ans" in [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no; esac @@ -2681,9 +2767,9 @@ cat <checkcc $startsh EOS cat <<'EOSC' >>checkcc -case "$cc" in +case "$cc" in '') ;; -*) $rm -f try try.* +*) $rm -f try try.* $cat >try.c <&4 fi - $cat >&4 <&4 <&4 - echo "(First creating the subdirectories...)" >&4 cd .. - awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do - read directory - test -z "$directory" && break - mkdir -p $directory - done + awk '{print $1}' $src/MANIFEST | sed -e 's:/\([^/]*\)$: \1:' | + awk 'NF == 1 { + dir="."; + file=$1 ""; + } + NF == 2 { + dir=$1 ""; + file=$2 ""; + } + { + print "# dir = ", dir, "file = ", file + mf[dir] = mf[dir]" "source"/"dir"/"file; + } END { + for (d in mf) { + if (d != ".") { print("mkdir -p "d) } + print("ln -sf "mf[d]" "d); + } + }' source="$src" > UU/mksymlinks.$$ + sh UU/mksymlinks.$$ + rm UU/mksymlinks.$$ # Sanity check 1. if test ! -d t/base; then echo "Failed to create the subdirectories. Aborting." >&4 exit 1 fi - echo "(Then creating the symlinks...)" >&4 - awk '{print $1}' $src/MANIFEST | while true; do - read filename - test -z "$filename" && break - if test -f $filename; then - if $issymlink $filename; then - rm -f $filename - fi - fi - if test -f $filename; then - echo "$filename already exists, not symlinking." - else - ln -s $src/$filename $filename - fi - done # Sanity check 2. if test ! -f t/base/lex.t; then echo "Failed to create the symlinks (t/base/lex.t missing). Aborting." >&4 exit 1 fi + if test ! -f win32/win32.c; then + echo "Failed to create the symlinks (win32/win32.c missing). Aborting." >&4 + exit 1 + fi cd UU ;; *) echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4 @@ -2834,6 +2923,9 @@ esac if $test "X$targethost" = "X"; then targethost="" fi +if $test "X$targetenv" = "X"; then + targetenv="" +fi case "$usecrosscompile" in $define|true|[yY]*) $echo "Cross-compiling..." @@ -2876,20 +2968,29 @@ $define|true|[yY]*) : compile a host miniperl and generate_uudmap, unless we got passed them if $test "X$hostperl" = X; then echo "Building host miniperl and generate_uudmap binaries" >&4 + before_host=`pwd` cd .. - test -d host || mkdir host - cd host && rm -rf ./* - ../Configure -des -Dusedevel -Dmksymlinks - make miniperl - make generate_uudmap - hostperl=host/miniperl - hostgenerate=host/generate_uudmap - cd .. - cd UU + cd $src + src=`pwd` + rm -rf $src/host + mkdir $src/host + cd $src/host + $src/Configure -des -Dusedevel -Dmksymlinks + $make miniperl + case "$hostgenerate" in + '') $make generate_uudmap + hostgenerate=$src/host/generate_uudmap + ;; + "$undef") hostgenerate='' + ;; + esac + hostperl=$src/host/miniperl + cd $before_host fi + hostosname=`$hostperl -le 'print $^O'` ;; *) - usecrosscompile='undef' + usecrosscompile="$undef" ;; esac @@ -2986,6 +3087,9 @@ $to \$exe $targetrun -p $targetport -l $targetuser $targethost "cd \$cwd && \$env \$exe \$@" EOF ;; + adb) + $touch $run + ;; *) echo "Unknown targetrun '$targetrun'" >&4 exit 1 ;; @@ -3011,11 +3115,11 @@ do case "\$f" in /*) $targetmkdir \`dirname \$f\` - $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f || exit 1 + $targetto -P $targetport -r $q \$f $targetuser@$targethost:\$f 2>/dev/null || exit 1 ;; *) $targetmkdir $targetdir/\`dirname \$f\` - $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1 + $targetto -P $targetport -r $q \$f $targetuser@$targethost:$targetdir/\$f 2>/dev/null || exit 1 ;; esac done @@ -3097,7 +3201,7 @@ EOF *) run='' to=: from=: - usecrosscompile='undef' + usecrosscompile="$undef" targetarch='' ;; esac @@ -3251,11 +3355,9 @@ EOM $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r` $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r` $test -f /bin/mips && /bin/mips && osname=mips - $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \ - $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4 $test -d /usr/apollo/bin && osname=apollo $test -f /etc/saf/_sactab && osname=svr4 - $test -d /usr/include/minix && osname=minix + $test -d /usr/include/minix && osname=minix && osvers=`$uname -r` $test -f /system/gnu_library/bin/ar.pm && osname=vos if $test -d /MachTen -o -d /MachTen_Folder; then osname=machten @@ -3289,7 +3391,6 @@ EOM *) osname=mips ;; esac;; [23]100) osname=mips ;; - next*) osname=next ;; i386*) tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'` if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then @@ -3374,6 +3475,7 @@ EOM case "$3" in *) osvers="$3" ;; esac + $test -f /system/lib/libandroid.so && osname=linux-android ;; MiNT) osname=mint ;; @@ -3386,7 +3488,6 @@ EOM *) osname=newsos ;; esac ;; - next*) osname=next ;; nonstop-ux) osname=nonstopux ;; openbsd) osname=openbsd osvers="$3" @@ -3523,8 +3624,42 @@ EOM case "$targetarch" in '') ;; *) hostarch=$osname - osname=`echo $targetarch|sed 's,^[^-]*-,,'` - osvers='' + case "$targetarch" in + nto*|*-nto-*) + # Will load qnx.sh, which should change osname to nto + osname=qnx + osvers='' + ;; + *linux-android*) + # Catch arm-linux-androideabi, mipsel-linux-android, + # and i686-linux-android + osname=linux-android + osvers='' + ;; + *linux*) + # Something like arm-linux-gnueabihf is really just + # plain linux. + osname=linux + osvers='' + ;; + *solaris*|*sunos*) + osname=solaris + # XXX perhaps we should just assume + # osvers to be 2, or maybe take the value + # from targetarch. Using $run before the + # hints are run is somewhat icky. + set X `$run $uname -a 2>/dev/null` + shift + case "$3" in + 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;; + *) osvers="$3" ;; + esac + ;; + *) + osname=`echo $targetarch|sed 's,^[^-]*-,,'` + osvers='' + ;; + esac ;; esac @@ -4586,6 +4721,22 @@ case "$gccversion" in $rm -f try try.* esac +# gcc 4.9 by default does some optimizations that break perl. +# see ticket 121505. +# +# The -fwrapv disables those optimizations (and probably others,) so +# for gcc 4.9 (and later, since the optimizations probably won't go +# away), add -fwrapv unless the user requests -fno-wrapv, which +# disables -fwrapv, or if the user requests -fsanitize=undefined, +# which turns the overflows -fwrapv ignores into runtime errors. +case "$gccversion" in +4.[3-9].*|4.[1-9][0-9]*|[5-9].*|[1-9][0-9]*) + case "$ccflags" in + *-fno-wrapv*|*-fsanitize=undefined*|*-fwrapv*) ;; + *) ccflags="$ccflags -fwrapv" ;; + esac +esac + : What should the include directory be ? : Use sysroot if set, so findhdr looks in the right place. echo " " @@ -5065,6 +5216,12 @@ EOM esac fi +: Check if quadmath is requested +case "$usequadmath" in +"$define"|true|[yY]*) usequadmath="$define" ;; +*) usequadmath="$undef" ;; +esac + : Looking for optional libraries echo " " echo "Checking for optional libraries..." >&4 @@ -5078,6 +5235,12 @@ esac case "$usesocks" in "$define") libswanted="$libswanted socks5 socks5_sh" ;; esac +case "$usecbacktrace" in +"$define") libswanted="$libswanted bfd" ;; +esac +case "$usequadmath" in +"$define") libswanted="$libswanted quadmath" ;; +esac libsfound='' libsfiles='' libsdirs='' @@ -5092,6 +5255,9 @@ for thislib in $libswanted; do xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|sed -n '$p'` $test -f "$xxx" && eval $libscheck $test -f "$xxx" && libstyle=shared + xxx=`ls $thisdir/lib$thislib.[0-9].$so 2>/dev/null|sed -n '$p'` + $test -f "$xxx" && eval $libscheck + $test -f "$xxx" && libstyle=shared fi if test ! -f "$xxx"; then xxx=$thisdir/lib$thislib.$so @@ -5228,7 +5394,7 @@ esac checkccflag='check=$1; flag=$2; callback=$3; echo " "; echo "Checking if your compiler accepts $flag" 2>&1; -[ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot" +[ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot"; echo "int main(void) { return 0; }" > gcctest.c; if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then echo "Yes, it does." 2>&1; @@ -5292,8 +5458,15 @@ default|recommended) # as that way the compiler can do the right implementation dependant # thing. (NWC) case "$gccversion" in - ?*) set stack-protector -fstack-protector + ?*) set stack-protector-strong -fstack-protector-strong eval $checkccflag + case "$dflt" in + *-fstack-protector-strong*) ;; # It got added. + *) # Try the plain/older -fstack-protector. + set stack-protector -fstack-protector + eval $checkccflag + ;; + esac ;; esac ;; @@ -5436,6 +5609,12 @@ case "$ldflags" in esac # See note above about -fstack-protector case "$ccflags" in +*-fstack-protector-strong*) + case "$dflt" in + *-fstack-protector-strong*) ;; # Don't add it again + *) dflt="$dflt -fstack-protector-strong" ;; + esac + ;; *-fstack-protector*) case "$dflt" in *-fstack-protector*) ;; # Don't add it again @@ -6115,1858 +6294,1969 @@ EOF ;; esac -: check for length of double +: Check if we are using the GNU C library echo " " -case "$doublesize" in -'') - echo "Checking to see how big your double precision numbers are..." >&4 - $cat >try.c <&4 +cat >try.c <<'EOCP' +/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__ + alone are insufficient to distinguish different versions, such as + 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in + libc version 2.1.0. A. Dougherty, June 3, 2002. +*/ #include -#$i_stdlib I_STDLIB -#ifdef I_STDLIB -#include -#endif -int main() +int main(void) { - printf("%d\n", (int)sizeof(double)); - exit(0); +#ifdef __GLIBC__ +# ifdef __GLIBC_MINOR__ +# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus) +# include + printf("%s\n", gnu_get_libc_version()); +# else + printf("%d.%d\n", __GLIBC__, __GLIBC_MINOR__); +# endif +# else + printf("%d\n", __GLIBC__); +# endif + return 0; +#else + return 1; +#endif } EOCP - set try - if eval $compile_ok; then - doublesize=`$run ./try` - echo "Your double is $doublesize bytes long." - else - dflt='8' - echo "(I can't seem to compile the test program. Guessing...)" - rp="What is the size of a double precision number (in bytes)?" - . ./myread - doublesize="$ans" - fi - ;; -esac -$rm_try - -: check for long doubles -echo " " -echo "Checking to see if you have long double..." >&4 -echo 'int main() { long double x = 7.0; }' > try.c set try -if eval $compile; then +if eval $compile_ok && $run ./try > glibc.ver; then val="$define" - echo "You have long double." + gnulibc_version=`$cat glibc.ver` + echo "You are using the GNU C Library version $gnulibc_version" else val="$undef" - echo "You do not have long double." + gnulibc_version='' + echo "You are not using the GNU C Library" fi -$rm_try -set d_longdbl +$rm_try glibc.ver +set d_gnulibc eval $setvar -: check for length of long double -case "${d_longdbl}${longdblsize}" in -$define) - echo " " - echo "Checking to see how big your long doubles are..." >&4 - $cat >try.c <<'EOCP' -#include -int main() -{ - printf("%d\n", sizeof(long double)); -} -EOCP - set try - set try - if eval $compile; then - longdblsize=`$run ./try` - echo "Your long doubles are $longdblsize bytes long." - else - dflt='8' +: see if nm is to be used to determine whether a symbol is defined or not +case "$usenm" in +'') + dflt='' + case "$d_gnulibc" in + "$define") echo " " - echo "(I can't seem to compile the test program. Guessing...)" >&4 - rp="What is the size of a long double (in bytes)?" - . ./myread - longdblsize="$ans" - fi - if $test "X$doublesize" = "X$longdblsize"; then - echo "That isn't any different from an ordinary double." - echo "I'll keep your setting anyway, but you may see some" - echo "harmless compilation warnings." - fi + echo "nm probably won't work on the GNU C Library." >&4 + dflt=n + ;; + esac + case "$dflt" in + '') + if $test "$osname" = aix -a "X$PASE" != "Xdefine" -a ! -f /lib/syscalls.exp; then + echo " " + echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4 + echo "'nm' won't be sufficient on this system." >&4 + dflt=n + fi + ;; + esac + case "$dflt" in + '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null` + if $test $dflt -gt 20; then + dflt=y + else + dflt=n + fi + ;; + esac ;; -esac -$rm_try - -: determine the architecture name -echo " " -if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then - tarch=`arch`"-$osname" -elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then - if uname -m > tmparch 2>&1 ; then - tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \ - -e 's/$/'"-$osname/" tmparch` - else - tarch="$osname" - fi - $rm -f tmparch -else - tarch="$osname" -fi -case "$myarchname" in -''|"$tarch") ;; *) - echo "(Your architecture name used to be $myarchname.)" - archname='' + case "$usenm" in + true|$define) dflt=y;; + *) dflt=n;; + esac ;; esac -case "$targetarch" in -'') ;; -*) archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;; -esac -myarchname="$tarch" -case "$archname" in -'') dflt="$tarch";; -*) dflt="$archname";; -esac -rp='What is your architecture name' -. ./myread -archname="$ans" +$cat <&4 - ;; - *) - archname="$archname-$api_versionstring" - echo "...setting architecture name to $archname." >&4 - ;; - esac - ;; +[Nn]*) usenm=false;; +*) usenm=true;; esac -case "$usethreads" in -$define) - echo "Threads selected." >&4 - case "$archname" in - *-thread*) echo "...and architecture name already has -thread." >&4 - ;; - *) archname="$archname-thread" - echo "...setting architecture name to $archname." >&4 - ;; - esac - ;; -esac -case "$usemultiplicity" in -$define) - echo "Multiplicity selected." >&4 - case "$archname" in - *-multi*) echo "...and architecture name already has -multi." >&4 - ;; - *) archname="$archname-multi" - echo "...setting architecture name to $archname." >&4 - ;; - esac - ;; +runnm=$usenm +case "$reuseval" in +true) runnm=false;; esac -case "$use64bitint$use64bitall" in -*"$define"*) - case "$archname64" in - '') - echo "This architecture is naturally 64-bit, not changing architecture name." >&4 - ;; - *) - case "$use64bitint" in - "$define") echo "64 bit integers selected." >&4 ;; - esac - case "$use64bitall" in - "$define") echo "Maximal 64 bitness selected." >&4 ;; - esac - case "$archname" in - *-$archname64*) echo "...and architecture name already has $archname64." >&4 - ;; - *) archname="$archname-$archname64" - echo "...setting architecture name to $archname." >&4 - ;; - esac + +: nm options which may be necessary +case "$nm_opt" in +'') if $test -f /mach_boot; then + nm_opt='' # Mach + elif $test -d /usr/ccs/lib; then + nm_opt='-p' # Solaris (and SunOS?) + elif $test -f /dgux; then + nm_opt='-p' # DG-UX + elif $test -f /lib64/rld; then + nm_opt='-p' # 64-bit Irix + else + nm_opt='' + fi;; +esac + +: nm options which may be necessary for shared libraries but illegal +: for archive libraries. Thank you, Linux. +case "$nm_so_opt" in +'') case "$myuname" in + *linux*|gnu*) + if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then + nm_so_opt='--dynamic' + fi ;; esac + ;; esac -case "$uselongdouble" in -$define) - echo "Long doubles selected." >&4 - case "$longdblsize" in - $doublesize) - echo "...but long doubles are equal to doubles, not changing architecture name." >&4 + +: Figure out where the libc is located +case "$runnm" in +true) +: get list of predefined functions in a handy place +echo " " +case "$libc" in +'') libc=unknown + case "$libs" in + *-lc_s*) libc=`./loc libc_s$_a $libc $libpth` + esac + ;; +esac +case "$libs" in +'') ;; +*) for thislib in $libs; do + case "$thislib" in + -lc|-lc_s) + : Handle C library specially below. ;; - *) - case "$archname" in - *-ld*) echo "...and architecture name already has -ld." >&4 - ;; - *) archname="$archname-ld" - echo "...setting architecture name to $archname." >&4 - ;; - esac + -l*) + thislib=`echo $thislib | $sed -e 's/^-l//'` + if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then + : + elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then + : + elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then + : + elif try=`./loc $thislib X $libpth`; $test -f "$try"; then + : + elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then + : + else + try='' + fi + libnames="$libnames $try" ;; + *) libnames="$libnames $thislib" ;; esac + done ;; esac -if $test -f archname.cbu; then - echo "Your platform has some specific hints for architecture name, using them..." - . ./archname.cbu -fi - -: set the prefixit variable, to compute a suitable default value -prefixit='case "$3" in -""|none) - case "$oldprefix" in - "") eval "$1=\"\$$2\"";; - *) - case "$3" in - "") eval "$1=";; - none) - eval "tp=\"\$$2\""; - case "$tp" in - ""|" ") eval "$1=\"\$$2\"";; - *) eval "$1=";; - esac;; - esac;; - esac;; +xxx=normal +case "$libc" in +unknown) + set /lib/libc.$so + for xxx in $libpth; do + $test -r $1 || set $xxx/libc.$so + : The messy sed command sorts on library version numbers. + $test -r $1 || \ + set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \ + tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e ' + h + s/[0-9][0-9]*/0000&/g + s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g + G + s/\n/ /' | \ + $sort | $sed -e 's/^.* //'` + eval set \$$# + done + $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so + $test -r $1 || set $sysroot/lib/libsys_s$_a + ;; *) - eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\""; - case "$tp" in - --|/*--|\~*--) eval "$1=\"$prefix/$3\"";; - /*-$oldprefix/*|\~*-$oldprefix/*) - eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";; - *) eval "$1=\"\$$2\"";; - esac;; -esac' - -: 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. -case "$installstyle" in -'') case "$prefix" in - *perl*) dflt='lib';; - *) dflt='lib/perl5' ;; - esac + set blurfl ;; -*) 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 - -: 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='' +if $test -r "$1"; then + echo "Your (shared) C library seems to be in $1." + libc="$1" +elif $test -r /lib/libc && $test -r /lib/clib; then + echo "Your C library seems to be in both /lib/clib and /lib/libc." + xxx=apollo + libc='/lib/clib /lib/libc' + if $test -r /lib/syslib; then + echo "(Your math library is in /lib/syslib.)" + libc="$libc /lib/syslib" + fi +elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then + echo "Your C library seems to be in $libc, as you said before." +elif $test -r $incpath/usr/lib/libc$_a; then + libc=$incpath/usr/lib/libc$_a; + echo "Your C library seems to be in $libc. That's fine." +elif $test -r /lib/libc$_a; then + libc=/lib/libc$_a; + echo "Your C library seems to be in $libc. You're normal." +else + if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then + : + elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then + libnames="$libnames "`./loc clib blurfl/dyick $libpth` + elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then + : + elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then + : + elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then + : + else + tans=`./loc Llibc$_a blurfl/dyick $xlibpth` + fi + if $test -r "$tans"; then + echo "Your C library seems to be in $tans, of all places." + libc=$tans + else + libc='blurfl' + fi 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 +if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then + dflt="$libc" + cat < libpath + cat >&4 < libnames +set X `cat libnames` +shift +xxx=files +case $# in 1) xxx=file; esac +echo "Extracting names from the following $xxx for later perusal:" >&4 +echo " " +$sed 's/^/ /' libnames >&4 +echo " " +$echo $n "This may take a while...$c" >&4 -$spackage contains architecture-dependent library files. If you are -sharing libraries in a heterogeneous environment, you might store -these files in a separate location. Otherwise, you can just include -them with the rest of the public library files. +for file in $*; do + case $file in + *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;; + *) $nm $nm_opt $file 2>/dev/null;; + esac +done >libc.tmp -EOM -fn=$binexp -fn=d+~ -rp='Where do you want to put the public architecture-dependent libraries?' -. ./getfile -prefixvar=archlib -. ./setprefixvar -if $test X"$archlib" = X"$privlib"; then - d_archlib="$undef" +$echo $n ".$c" +$grep fprintf libc.tmp > libc.ptf +xscan='eval "libc.list"; $echo $n ".$c" >&4' +xrun='eval "libc.list"; echo "done." >&4' +xxx='[ADTSIWi]' +if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \ + -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun +elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\ + eval $xscan;\ + $contains '^fprintf$' libc.list >/dev/null 2>&1; then + eval $xrun else - d_archlib="$define" -fi - -: see if setuid scripts can be secure -$cat <reflect - chmod +x,u+s reflect - ./reflect >flect 2>&1 - if $contains "/dev/fd" flect >/dev/null; then - echo "Congratulations, your kernel has secure setuid scripts!" >&4 - val="$define" + $nm -p $* 2>/dev/null >libc.tmp + $grep fprintf libc.tmp > libc.ptf + if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ + eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1 + then + nm_opt='-p' + eval $xrun else - $cat <&4 - dflt=n;; - "$undef") - echo "Well, the $hint value is *not* secure." >&4 - dflt=n;; - *) echo "Well, the $hint value *is* secure." >&4 - dflt=y;; - esac - ;; - *) - $rm -f reflect flect - echo "#!$ls" >reflect - chmod +x,u+s reflect - echo >flect - chmod a+w flect - echo '"su" will (probably) prompt you for '"$ans's password." - su $ans -c './reflect >flect' - if $contains "/dev/fd" flect >/dev/null; then - echo "Okay, it looks like setuid scripts are secure." >&4 - dflt=y + 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 + 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 + for thisname in $libnames $libc; do + $ar tv $thisname >>libc.tmp + emximp -o tmp.imp $thisname \ + 2>/dev/null && \ + $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \ + < tmp.imp >>libc.tmp + $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 && + $test -s libc.list + then + for thisname in $libnames; do + bld t $libnames | \ + $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list + $ar t $thisname >>libc.tmp + done + echo "Ok." >&4 else - echo "I don't think setuid scripts are secure." >&4 - dflt=n + echo "That didn't work either. Giving up." >&4 + exit 1 fi - ;; - esac - rp='Does your kernel have *secure* setuid scripts?' - . ./myread - case "$ans" in - [yY]*) val="$define";; - *) val="$undef";; - esac + fi fi -else - echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4 - echo "(That's for file descriptors, not floppy disks.)" - val="$undef" fi -set d_suidsafe -eval $setvar - -$rm -f reflect flect - -: now see if they want to do setuid emulation -if $test $patchlevel -lt 11; then -echo " " -val="$undef" -case "$d_suidsafe" in -"$define") - val="$undef" - echo "No need to emulate SUID scripts since they are secure here." >&4 - ;; -*) - $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" - ;; +nm_extract="$com" +case "$PASE" in +define) + echo " " + echo "Since you are compiling for PASE, extracting more symbols from libc.a ...">&4 + dump -Tv /lib/libc.a | awk '$7 == "/unix" {print $5 " " $8}' | grep "^SV" | awk '{print $2}' >> libc.list + ;; +*) 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 + fi + ;; esac -case "$perl5" in -'') echo "None found. That's ok.";; -*) echo "Using $perl5." ;; +;; esac +$rm -f libnames libpath -: Set the siteprefix variables -$cat <&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 -: 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 +: is a C symbol defined? +csym='tlook=$1; +case "$3" in +-v) tf=libc.tmp; tdc="";; +-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-) ;; +true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;; +esac; +case "$tx" in +yes) + tval=false; + if $test "$runnm" = true; then + if $contains $tlook $tf >/dev/null 2>&1; then + tval=true; + elif $test "$mistrustnm" = compile -o "$mistrustnm" = run; then + echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) 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_try; + fi; + else + echo "$extern_C void *$1$tdc; void *(*(p()))$tdc { return &$1; } int main() { if(p() && p() != (void *)main) return(0); else return(1); }"> try.c; + $cc -o try $optimize $ccflags $ldflags try.c $libs >/dev/null 2>&1 && tval=true; + $rm_try; + fi; ;; -*) dflt="$sitelib" +*) + case "$tval" in + $define) tval=true;; + *) tval=false;; + esac; ;; -esac -$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 = (); -} +esac; +eval "$2=$tval"' -($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. - } -} +: define an is-in-libc? function +inlibc='echo " "; td=$define; tu=$undef; +sym=$1; var=$2; eval "was=\$$2"; +tx=yes; +case "$reuseval$was" in +true) ;; +true*) tx=no;; +esac; +case "$tx" in +yes) + set $sym tres -f; + eval $csym; + case "$tres" in + true) + echo "$sym() found." >&4; + case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";; + *) + echo "$sym() NOT found." >&4; + case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";; + esac;; +*) + case "$was" in + $define) echo "$sym() found." >&4;; + *) echo "$sym() NOT found." >&4;; + esac;; +esac' -if (@inc_version_list) { - print join(' ', @inc_version_list); -} -else { - # Blank space to preserve value for next Configure run. - print " "; +: check for length of double +echo " " +case "$doublesize" in +'') + echo "Checking to see how big your double precision numbers are..." >&4 + $cat >try.c < +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int main() +{ + printf("%d\n", (int)sizeof(double)); + exit(0); } -EOPL -chmod +x getverlist -case "$inc_version_list" in -'') if test -x "$perl5$exe_ext"; then - dflt=`$perl5 getverlist` +EOCP + set try + if eval $compile_ok; then + doublesize=`$run ./try` + echo "Your double is $doublesize bytes long." else - dflt='none' + dflt='8' + echo "(I can't seem to compile the test program. Guessing...)" + rp="What is the size of a double precision number (in bytes)?" + . ./myread + doublesize="$ans" fi ;; -$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 +echo "Checking to see if you have long double..." >&4 +echo 'int main() { long double x = 7.0; }' > try.c set try if eval $compile; then - echo " found." >&4 - val="$define" + val="$define" + echo "You have long double." else - echo " NOT found." >&4 - val="$undef" + val="$undef" + echo "You do not have long double." fi $rm_try -set i_malloc +set d_longdbl eval $setvar -: check for length of pointer -echo " " -case "$ptrsize" in -'') - echo "Checking to see how big your pointers are..." >&4 - $cat >>try.c <&4 + $cat >try.c <<'EOCP' #include -#$i_stdlib I_STDLIB -#ifdef I_STDLIB -#include -#endif int main() { - printf("%d\n", (int)sizeof(void *)); - exit(0); + printf("%d\n", sizeof(long double)); } EOCP set try - if eval $compile_ok; then - ptrsize=`$run ./try` - echo "Your pointers are $ptrsize bytes long." + set try + if eval $compile; then + longdblsize=`$run ./try` + echo "Your long doubles are $longdblsize bytes long." else - dflt='4' + dflt='8' + echo " " echo "(I can't seem to compile the test program. Guessing...)" >&4 - rp="What is the size of a pointer (in bytes)?" + rp="What is the size of a long double (in bytes)?" . ./myread - ptrsize="$ans" + longdblsize="$ans" + fi + if $test "X$doublesize" = "X$longdblsize"; then + echo "That isn't any different from an ordinary double." + echo "I'll keep your setting anyway, but you may see some" + echo "harmless compilation warnings." fi ;; esac $rm_try -case "$use64bitall" in -"$define"|true|[yY]*) - case "$ptrsize" in - 4) cat <&4 -*** You have chosen a maximally 64-bit build, -*** but your pointers are only 4 bytes wide. -*** Please rerun Configure without -Duse64bitall. -EOM - case "$d_quad" in - define) - cat <&4 -*** Since you have quads, you could possibly try with -Duse64bitint. -EOM - ;; - esac - cat <&4 -*** Cannot continue, aborting. +$echo "Checking the kind of long doubles you have..." >&4 +case "$d_longdbl" in +define) +$cat <try.c +#$i_float I_FLOAT +#$i_stdlib I_STDLIB +#define LONGDBLSIZE $longdblsize +#define DOUBLESIZE $doublesize +#ifdef I_FLOAT +#include +#endif +#ifdef I_STDLIB +#include +#endif +#include +static const long double d = -0.1L; +int main() { + unsigned const char* b = (unsigned const char*)(&d); +#if DOUBLESIZE == LONGDBLSIZE + printf("0\n"); /* if it floats like double */ + exit(0); +#endif +#if (LDBL_MANT_DIG == 113 || FLT128_MANT_DIG == 113) && LONGDBLSIZE == 16 + if (b[0] == 0x9A && b[1] == 0x99 && b[15] == 0xBF) { + /* IEEE 754 128-bit little-endian */ + printf("1\n"); + exit(0); + } + if (b[0] == 0xBF && b[14] == 0x99 && b[15] == 0x9A) { + /* IEEE 128-bit big-endian, e.g. solaris sparc */ + printf("2\n"); + exit(0); + } +#endif +/* For alignment 32-bit platforms have the 80 bits in 12 bytes, + * while 64-bits platforms have it in 16 bytes. */ +#if LDBL_MANT_DIG == 64 && (LONGDBLSIZE == 16 || LONGDBLSIZE == 12) + if (b[0] == 0xCD && b[9] == 0xBF && b[10] == 0x00) { + /* x86 80-bit little-endian, sizeof 12 (ILP32, Solaris x86) + * or 16 (LP64, Linux and OS X), 4 or 6 bytes of padding. + * Also known as "extended precision". */ + printf("3\n"); + exit(0); + } + if (b[0] == 0xBF && b[9] == 0xCD && b[10] == 0x00) { + /* is there ever big-endian 80-bit, really? */ + printf("4\n"); + exit(0); + } +#endif +#if (LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 107) && LONGDBLSIZE == 16 + /* software "double double", the 106 is 53+53. + * but irix thinks it is 107. */ + if (b[0] == 0x9A && b[7] == 0x3C && b[8] == 0x9A && b[15] == 0xBF) { + /* double double 128-bit little-endian, + * 9a 99 99 99 99 99 59 3c 9a 99 99 99 99 99 b9 bf */ + printf("5\n"); + exit(0); + } + if (b[0] == 0xBF && b[7] == 0x9A && b[8] == 0x3C && b[15] == 0x9A) { + /* double double 128-bit big-endian, e.g. PPC/Power and MIPS: + * bf b9 99 99 99 99 99 9a 3c 59 99 99 99 99 99 9a */ + printf("6\n"); + exit(0); + } +#endif + printf("-1\n"); /* unknown */ + exit(0); +} +EOP +set try +if eval $compile; then + longdblkind=`$run ./try` +else + longdblkind=-1 +fi +;; +*) longdblkind=0 ;; +esac +case "$longdblkind" in +0) echo "Your long doubles are doubles." >&4 ;; +1) echo "You have IEEE 754 128-bit little endian long doubles." >&4 ;; +2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;; +3) echo "You have x86 80-bit little endian long doubles." >& 4 ;; +4) echo "You have x86 80-bit big endian long doubles." >& 4 ;; +5) echo "You have 128-bit little-endian double-double long doubles." >& 4 ;; +6) echo "You have 128-bit big-endian double-double long doubles." >& 4 ;; +*) echo "Cannot figure out your long double." >&4 ;; +esac +$rm_try -EOM +: determine the architecture name +echo " " +if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then + tarch=`arch`"-$osname" +elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then + if uname -m > tmparch 2>&1 ; then + tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \ + -e 's/$/'"-$osname/" tmparch` + else + tarch="$osname" + fi + $rm -f tmparch +else + tarch="$osname" +fi +case "$myarchname" in +''|"$tarch") ;; +*) + echo "(Your architecture name used to be $myarchname.)" + archname='' + ;; +esac +case "$targetarch" in +'') ;; +*) archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;; +esac +myarchname="$tarch" +case "$archname" in +'') dflt="$tarch";; +*) dflt="$archname";; +esac +rp='What is your architecture name' +. ./myread +archname="$ans" - exit 1 +: optionally add API version to the architecture for versioned archlibs +case "$useversionedarchname" in +$define|true|[yY]*) dflt='y';; +*) dflt='n';; +esac +rp='Add the Perl API version to your archname?' +. ./myread +case "$ans" in +y|Y) useversionedarchname="$define" ;; +*) useversionedarchname="$undef" ;; +esac +case "$useversionedarchname" in +$define) + case "$archname" in + *-$api_versionstring) + echo "...and architecture name already has -$api_versionstring" >&4 + ;; + *) + archname="$archname-$api_versionstring" + echo "...setting architecture name to $archname." >&4 + ;; + esac + ;; +esac + +case "$usethreads" in +$define) + echo "Threads selected." >&4 + case "$archname" in + *-thread*) echo "...and architecture name already has -thread." >&4 + ;; + *) archname="$archname-thread" + echo "...setting architecture name to $archname." >&4 ;; esac ;; esac - - -: determine whether to use malloc wrapping -echo " " -case "$usemallocwrap" in -[yY]*|true|$define) dflt='y' ;; -[nN]*|false|$undef) dflt='n' ;; -*) case "$usedevel" in - [yY]*|true|$define) dflt='y' ;; - *) dflt='n' ;; +case "$usemultiplicity" in +$define) + echo "Multiplicity selected." >&4 + case "$archname" in + *-multi*) echo "...and architecture name already has -multi." >&4 + ;; + *) archname="$archname-multi" + echo "...setting architecture name to $archname." >&4 + ;; esac ;; esac -rp="Do you wish to wrap malloc calls to protect against potential overflows?" -. ./myread -usemallocwrap="$ans" -case "$ans" in -y*|true) - usemallocwrap="$define" ;; -*) - usemallocwrap="$undef" ;; +case "$use64bitint$use64bitall" in +*"$define"*) + case "$archname64" in + '') + echo "This architecture is naturally 64-bit, not changing architecture name." >&4 + ;; + *) + case "$use64bitint" in + "$define") echo "64 bit integers selected." >&4 ;; + esac + case "$use64bitall" in + "$define") echo "Maximal 64 bitness selected." >&4 ;; + esac + case "$archname" in + *-$archname64*) echo "...and architecture name already has $archname64." >&4 + ;; + *) archname="$archname-$archname64" + echo "...setting architecture name to $archname." >&4 + ;; + esac + ;; + esac esac - -: determine which malloc to compile in -echo " " -case "$usemymalloc" in -[yY]*|true|$define) dflt='y' ;; -[nN]*|false|$undef) dflt='n' ;; -*) case "$ptrsize" in - 4) dflt='y' ;; - *) dflt='n' ;; +case "$uselongdouble" in +$define) + echo "Long doubles selected." >&4 + case "$longdblsize" in + $doublesize) + echo "...but long doubles are equal to doubles, not changing architecture name." >&4 + ;; + *) + case "$archname" in + *-ld*) echo "...and architecture name already has -ld." >&4 + ;; + *) archname="$archname-ld" + echo "...setting architecture name to $archname." >&4 + ;; + esac + ;; esac - if test "$useithreads" = "$define"; then dflt='n'; fi ;; esac -rp="Do you wish to attempt to use the malloc that comes with $package?" -. ./myread -usemymalloc="$ans" -case "$ans" in -y*|true) - usemymalloc='y' - mallocsrc='malloc.c' - mallocobj="malloc$_o" - d_mymalloc="$define" - case "$libs" in - *-lmalloc*) - : Remove malloc from list of libraries to use - echo "Removing unneeded -lmalloc from library list" >&4 - set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'` - shift - libs="$*" - echo "libs = $libs" >&4 +case "$usequadmath" in +$define) + echo "quadmath selected." >&4 + case "$archname" in + *-ld*) echo "...and architecture name already has -quadmath." >&4 + ;; + *) archname="$archname-quadmath" + echo "...setting architecture name to $archname." >&4 ;; esac ;; +esac +if $test -f archname.cbu; then + echo "Your platform has some specific hints for architecture name, using them..." + . ./archname.cbu +fi + +: set the prefixit variable, to compute a suitable default value +prefixit='case "$3" in +""|none) + case "$oldprefix" in + "") eval "$1=\"\$$2\"";; + *) + case "$3" in + "") eval "$1=";; + none) + eval "tp=\"\$$2\""; + case "$tp" in + ""|" ") eval "$1=\"\$$2\"";; + *) eval "$1=";; + esac;; + esac;; + esac;; *) - usemymalloc='n' - mallocsrc='' - mallocobj='' - d_mymalloc="$undef" + eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\""; + case "$tp" in + --|/*--|\~*--) eval "$1=\"$prefix/$3\"";; + /*-$oldprefix/*|\~*-$oldprefix/*) + eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";; + *) eval "$1=\"\$$2\"";; + esac;; +esac' + +: 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. +case "$installstyle" in +'') case "$prefix" in + *perl*) dflt='lib';; + *) dflt='lib/perl5' ;; + esac ;; +*) 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 -: compute the return types of malloc and free +: determine where public executables go echo " " -$cat >malloc.c < -#include -#ifdef I_MALLOC -#include -#endif -#ifdef I_STDLIB -#include -#endif -#ifdef TRY_MALLOC -void *malloc(); -#endif -#ifdef TRY_FREE -void free(); -#endif -END -case "$malloctype" in -'') - if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then - malloctype='void *' - else - malloctype='char *' - fi - ;; +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 -echo "Your system wants malloc to return '$malloctype', it would seem." >&4 +cat </dev/null 2>&1; then - freetype='void' - else - freetype='int' - fi - ;; +Would you like to build Perl so that the installation is relocatable, so that +library paths in @INC are determined relative to the path of the perl binary? +This is not advised for system Perl installs, or if you need to run setid +scripts or scripts under taint mode. + +If this doesn't make any sense to you, just accept the default '$dflt'. +EOM +rp='Use relocatable @INC?' +. ./myread +case "$ans" in +y|Y) val="$define" ;; +*) val="$undef" ;; esac -echo "Your system uses $freetype free(), it would seem." >&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 -: sitelib may have an optional trailing /share. -case "$sitearch" in -'') dflt=`echo $sitelib | $sed 's,/share$,,'` - dflt="$dflt/$archname" - ;; -*) dflt="$sitearch" +set userelocatableinc +eval $setvar + +initialinstalllocation="$binexp" +: Default prefix is now "up one level from where the binaries are" +case "$userelocatableinc" in +$define|true|[yY]*) + bin=".../" + binexp=".../" + prefix=".../.." + prefixexp=".../.." + installprefixexp=".../.." + ;; +esac + +: determine where private library files go +: Usual default is /usr/local/lib/perl5/$version. +: Also allow things like /opt/perl/lib/$version, since +: /opt/perl/lib/perl5... would be redundant. +: The default "style" setting is made in installstyle.U +case "$installstyle" in +*lib/perl5*) set dflt privlib lib/$package/$version ;; +*) set dflt privlib lib/$version ;; +esac +eval $prefixit +$cat <reflect + chmod +x,u+s reflect + ./reflect >flect 2>&1 + if $contains "/dev/fd" flect >/dev/null; then + echo "Congratulations, your kernel has secure setuid scripts!" >&4 + val="$define" + else + $cat <&4 + dflt=n;; + "$undef") + echo "Well, the $hint value is *not* secure." >&4 + dflt=n;; + *) echo "Well, the $hint value *is* secure." >&4 + dflt=y;; + esac + ;; + *) + $rm -f reflect flect + echo "#!$ls" >reflect + chmod +x,u+s reflect + echo >flect + chmod a+w flect + echo '"su" will (probably) prompt you for '"$ans's password." + su $ans -c './reflect >flect' + if $contains "/dev/fd" flect >/dev/null; then + echo "Okay, it looks like setuid scripts are secure." >&4 + dflt=y + else + echo "I don't think setuid scripts are secure." >&4 + dflt=n + fi + ;; + esac + rp='Does your kernel have *secure* setuid scripts?' + . ./myread + case "$ans" in + [yY]*) val="$define";; + *) val="$undef";; + esac + fi +else + echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4 + echo "(That's for file descriptors, not floppy disks.)" + val="$undef" +fi +set d_suidsafe +eval $setvar + +$rm -f reflect flect + +: now see if they want to do setuid emulation +if $test $patchlevel -lt 11; then +echo " " +val="$undef" +case "$d_suidsafe" in +"$define") + val="$undef" + echo "No need to emulate SUID scripts since they are secure here." >&4 ;; -esac -. ./myread -case "$ans" in -[yY]*) fn=d~+ - rp='Installation prefix to use for vendor-supplied add-ons?' - case "$vendorprefix" in - '') dflt="$prefix" ;; - *) dflt=$vendorprefix ;; +*) + $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 ;; -*) d_vendorarch="$define" - : determine where vendor-supplied architecture-dependent libraries go. - : vendorlib default is /usr/local/lib/perl5/vendor_perl/$version - : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname - : vendorlib may have an optional trailing /share. - case "$vendorarch" in - '') dflt=`echo $vendorlib | $sed 's,/share$,,'` - dflt="$dflt/$archname" - ;; - *) dflt="$vendorarch" ;; - esac - fn=d~+ - rp='Pathname for vendor-supplied architecture-dependent files?' - . ./getfile - vendorarch="$ans" - vendorarchexp="$ansexp" +*) perl5="$perl5" ;; esac -prefixvar=vendorarch -. ./installprefix -if $test X"$vendorarch" = X"$vendorlib"; then - d_vendorarch="$undef" -else - d_vendorarch="$define" -fi +case "$perl5" in +'') echo "None found. That's ok.";; +*) echo "Using $perl5." ;; +esac -: Final catch-all directories to search +: Set the siteprefix variables $cat <&4 -$cat >prototype.c < -#endif -int main(int argc, char *argv[]) { - exit(0);} -EOCP -if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then - echo "Your C compiler appears to support function prototypes." - val="$define" -else - echo "Your C compiler doesn't seem to understand function prototypes." - val="$undef" -fi -set prototype -eval $setvar -$rm -f prototype* +: 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" + ;; +esac +$cat <&4 +The installation process will create a directory for +site-specific extensions and modules. Most users find it convenient +to place all site-specific files in this directory rather than in the +main distribution directory. -$me: FATAL ERROR: -This version of $package can only be compiled by a compiler that -understands function prototypes. Unfortunately, your C compiler - $cc $ccflags -doesn't seem to understand them. Sorry about that. +EOM +fn=d~+ +rp='Pathname for the site-specific library files?' +. ./getfile +prefixvar=sitelib +. ./setprefixvar +sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"` + +: Determine list of previous versions to include in @INC +$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 -If GNU cc is available for your system, perhaps you could try that instead. +# 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 = (); +} -Eventually, we hope to support building Perl with pre-ANSI compilers. -If you would like to help in that effort, please contact . +($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. + } +} -Aborting Configure now. -EOM - exit 2 +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 </dev/null 2>&1 \ - && rm -f perldtrace.tmp - then - echo " " - echo "Good: your $dtrace knows about the -h flag." - else - cat >&2 <try.c < +#include +#$i_mallocmalloc I_MALLOCMALLOC +#ifdef I_MALLOCMALLOC +# include +#endif -*** $me: Fatal Error: $dtrace doesn't support -h flag -*** -*** Your installed dtrace doesn't support the -h switch to compile a D -*** program into a C header. Can't continue. +int main () { return 0; } +EOCP +set try +if eval $compile; then + echo " found." >&4 + val="$define" +else + echo " NOT found." >&4 + val="$undef" +fi +$rm_try +set i_malloc +eval $setvar -EOM - exit 1 - fi - break; +: check for length of pointer +echo " " +case "$ptrsize" in +'') + echo "Checking to see how big your pointers are..." >&4 + $cat >try.c < +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int main() +{ + printf("%d\n", (int)sizeof(void *)); + exit(0); +} +EOCP + set try + if eval $compile_ok; then + ptrsize=`$run ./try` + echo "Your pointers are $ptrsize bytes long." + else + dflt='4' + echo "(I can't seem to compile the test program. Guessing...)" >&4 + rp="What is the size of a pointer (in bytes)?" + . ./myread + ptrsize="$ans" fi + ;; +esac +$rm_try +case "$use64bitall" in +"$define"|true|[yY]*) + case "$ptrsize" in + 4) cat <&4 - case "$fastread" in - yes) - cat >&2 <&4 +*** Since you have quads, you could possibly try with -Duse64bitint. +EOM + ;; + esac + cat <&4 +*** Cannot continue, aborting. EOM + exit 1 ;; - *) - echo "*** $dtrace was not found." - echo " " - ;; esac -done - -: See if we want extra modules installed -echo " " -case "$extras" in -'') dflt='n';; -*) dflt='y';; + ;; esac -cat <&4 + set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'` + shift + libs="$*" + echo "libs = $libs" >&4 + ;; + esac + ;; +*) + usemymalloc='n' + mallocsrc='' + mallocobj='' + d_mymalloc="$undef" + ;; +esac -Please list any extra modules or bundles to be installed from CPAN, -with spaces between the names. The names can be in any format the -'install' command of CPAN.pm will understand. (Answer 'none', -without the quotes, to install no extra modules or bundles.) -EOM - rp='Extras?' - dflt="$extras" - . ./myread - extras="$ans" +: compute the return types of malloc and free +echo " " +$cat >malloc.c < +#include +#ifdef I_MALLOC +#include +#endif +#ifdef I_STDLIB +#include +#endif +#ifdef TRY_MALLOC +void *malloc(); +#endif +#ifdef TRY_FREE +void free(); +#endif +END +case "$malloctype" in +'') + if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then + malloctype='void *' + else + malloctype='char *' + fi + ;; esac -case "$extras" in -''|'none') - val='' - $rm -f ../extras.lst +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 ;; -*) echo "(Saving the list of extras for later...)" - echo "$extras" > ../extras.lst - val="'$extras'" +esac +echo "Your system uses $freetype free(), it would seem." >&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 +: sitelib may have an optional trailing /share. +case "$sitearch" in +'') dflt=`echo $sitelib | $sed 's,/share$,,'` + dflt="$dflt/$archname" + ;; +*) dflt="$sitearch" ;; esac -set extras -eval $setvar -echo " " - -: determine where html pages for programs go -set html1dir html1dir none +set sitearch sitearch none eval $prefixit $cat <&4 -cat >try.c <<'EOCP' -/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__ - alone are insufficient to distinguish different versions, such as - 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in - libc version 2.1.0. A. Dougherty, June 3, 2002. -*/ -#include -int main(void) -{ -#ifdef __GLIBC__ -# ifdef __GLIBC_MINOR__ -# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1 && !defined(__cplusplus) -# include - printf("%s\n", gnu_get_libc_version()); -# else - printf("%d.%d\n", __GLIBC__, __GLIBC_MINOR__); -# endif -# else - printf("%d\n", __GLIBC__); -# endif - return 0; -#else - return 1; +echo "Checking out function prototypes..." >&4 +$cat >prototype.c < #endif -} +int main(int argc, char *argv[]) { + exit(0);} EOCP -set try -if eval $compile_ok && $run ./try > glibc.ver; then +if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then + echo "Your C compiler appears to support function prototypes." val="$define" - gnulibc_version=`$cat glibc.ver` - echo "You are using the GNU C Library version $gnulibc_version" else + echo "Your C compiler doesn't seem to understand function prototypes." val="$undef" - gnulibc_version='' - echo "You are not using the GNU C Library" fi -$rm_try glibc.ver -set d_gnulibc +set prototype eval $setvar +$rm -f prototype* -: see if nm is to be used to determine whether a symbol is defined or not -case "$usenm" in -'') - dflt='' - case "$d_gnulibc" in - "$define") - echo " " - echo "nm probably won't work on the GNU C Library." >&4 - dflt=n - ;; - esac - case "$dflt" in - '') - if $test "$osname" = aix -a "X$PASE" != "Xdefine" -a ! -f /lib/syscalls.exp; then - echo " " - echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4 - echo "'nm' won't be sufficient on this system." >&4 - dflt=n - fi - ;; - esac - case "$dflt" in - '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null` - if $test $dflt -gt 20; then - dflt=y - else - dflt=n - fi - ;; - esac - ;; -*) - case "$usenm" in - true|$define) dflt=y;; - *) dflt=n;; - esac - ;; -esac -$cat <&4 -I can use $nm to extract the symbols from your C libraries. This -is a time consuming task which may generate huge output on the disk (up -to 3 megabytes) but that should make the symbols extraction faster. The -alternative is to skip the 'nm' extraction part and to compile a small -test program instead to determine whether each symbol is present. If -you have a fast C compiler and/or if your 'nm' output cannot be parsed, -this may be the best solution. +$me: FATAL ERROR: +This version of $package can only be compiled by a compiler that +understands function prototypes. Unfortunately, your C compiler + $cc $ccflags +doesn't seem to understand them. Sorry about that. -You probably shouldn't let me use 'nm' if you are using the GNU C Library. +If GNU cc is available for your system, perhaps you could try that instead. + +Eventually, we hope to support building Perl with pre-ANSI compilers. +If you would like to help in that effort, please contact . +Aborting Configure now. EOM -rp="Shall I use $nm to extract C symbols from the libraries?" -. ./myread -case "$ans" in -[Nn]*) usenm=false;; -*) usenm=true;; + exit 2 + ;; esac -runnm=$usenm -case "$reuseval" in -true) runnm=false;; -esac +: DTrace support +dflt_dtrace='/usr/sbin/dtrace' +$test -x /usr/bin/dtrace && dflt_dtrace='/usr/bin/dtrace' -: nm options which may be necessary -case "$nm_opt" in -'') if $test -f /mach_boot; then - nm_opt='' # Mach - elif $test -d /usr/ccs/lib; then - nm_opt='-p' # Solaris (and SunOS?) - elif $test -f /dgux; then - nm_opt='-p' # DG-UX - elif $test -f /lib64/rld; then - nm_opt='-p' # 64-bit Irix - else - nm_opt='' - fi;; -esac +cat < /dev/null 2>&1; then - nm_so_opt='--dynamic' - fi - ;; - esac - ;; -esac +Perl can be built to support DTrace on platforms that support it. +DTrace is a diagnosis and performance analysis tool from Sun. -: Figure out where the libc is located -case "$runnm" in -true) -: get list of predefined functions in a handy place -echo " " -case "$libc" in -'') libc=unknown - case "$libs" in - *-lc_s*) libc=`./loc libc_s$_a $libc $libpth` - esac - ;; -esac -case "$libs" in -'') ;; -*) for thislib in $libs; do - case "$thislib" in - -lc|-lc_s) - : Handle C library specially below. +If this doesn't make any sense to you, just accept the default '$dflt'. +EOM + +while $test 1 ; do + case "$usedtrace" in + $define|true|[yY]*) + dflt='y' ;; - -l*) - thislib=`echo $thislib | $sed -e 's/^-l//'` - if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then - : - elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then - : - elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then - : - elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then - : - elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then - : - elif try=`./loc $thislib X $libpth`; $test -f "$try"; then - : - elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then - : - else - try='' - fi - libnames="$libnames $try" + ?*) + dflt='y' + dflt_dtrace=$usedtrace + ;; + *) + dflt='n' ;; - *) libnames="$libnames $thislib" ;; esac - done - ;; -esac -xxx=normal -case "$libc" in -unknown) - set /lib/libc.$so - for xxx in $libpth; do - $test -r $1 || set $xxx/libc.$so - : The messy sed command sorts on library version numbers. - $test -r $1 || \ - set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \ - tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e ' - h - s/[0-9][0-9]*/0000&/g - s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g - G - s/\n/ /' | \ - $sort | $sed -e 's/^.* //'` - eval set \$$# - done - $test -r $1 || set $sysroot/usr/ccs/lib/libc.$so - $test -r $1 || set $sysroot/lib/libsys_s$_a - ;; -*) - set blurfl - ;; -esac -if $test -r "$1"; then - echo "Your (shared) C library seems to be in $1." - libc="$1" -elif $test -r /lib/libc && $test -r /lib/clib; then - echo "Your C library seems to be in both /lib/clib and /lib/libc." - xxx=apollo - libc='/lib/clib /lib/libc' - if $test -r /lib/syslib; then - echo "(Your math library is in /lib/syslib.)" - libc="$libc /lib/syslib" - fi -elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then - echo "Your C library seems to be in $libc, as you said before." -elif $test -r $incpath/usr/lib/libc$_a; then - libc=$incpath/usr/lib/libc$_a; - echo "Your C library seems to be in $libc. That's fine." -elif $test -r /lib/libc$_a; then - libc=/lib/libc$_a; - echo "Your C library seems to be in $libc. You're normal." -else - if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then - : - elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then - libnames="$libnames "`./loc clib blurfl/dyick $libpth` - elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then - : - elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then - : - elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then - : - else - tans=`./loc Llibc$_a blurfl/dyick $xlibpth` - fi - if $test -r "$tans"; then - echo "Your C library seems to be in $tans, of all places." - libc=$tans - else - libc='blurfl' - fi -fi -if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then - dflt="$libc" - cat < libpath - cat >&4 </dev/null 2>&1 \ + && rm -f perldtrace.tmp + then + echo " " + echo "Good: your $dtrace knows about the -h flag." + else + cat >&2 <&2 < libnames -set X `cat libnames` -shift -xxx=files -case $# in 1) xxx=file; esac -echo "Extracting names from the following $xxx for later perusal:" >&4 -echo " " -$sed 's/^/ /' libnames >&4 +case "$extras" in +'') dflt='n';; +*) dflt='y';; +esac +cat < ../extras.lst + val="'$extras'" + ;; +esac +set extras +eval $setvar echo " " -$echo $n "This may take a while...$c" >&4 -for file in $*; do - case $file in - *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;; - *) $nm $nm_opt $file 2>/dev/null;; - esac -done >libc.tmp +: determine where html pages for programs go +set html1dir html1dir none +eval $prefixit +$cat < libc.ptf -xscan='eval "libc.list"; $echo $n ".$c" >&4' -xrun='eval "libc.list"; echo "done." >&4' -xxx='[ADTSIWi]' -if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \ - -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\ - eval $xscan;\ - $contains '^fprintf$' libc.list >/dev/null 2>&1; then - eval $xrun -else - $nm -p $* 2>/dev/null >libc.tmp - $grep fprintf libc.tmp > libc.ptf - if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\ - eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1 - then - nm_opt='-p' - eval $xrun - 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 - 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 - for thisname in $libnames $libc; do - $ar tv $thisname >>libc.tmp - emximp -o tmp.imp $thisname \ - 2>/dev/null && \ - $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \ - < tmp.imp >>libc.tmp - $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 && - $test -s libc.list - then - for thisname in $libnames; do - bld t $libnames | \ - $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list - $ar t $thisname >>libc.tmp - done - echo "Ok." >&4 - else - echo "That didn't work either. Giving up." >&4 - exit 1 - fi - fi - fi -fi -nm_extract="$com" -case "$PASE" in -define) - echo " " - echo "Since you are compiling for PASE, extracting more symbols from libc.a ...">&4 - dump -Tv /lib/libc.a | awk '$7 == "/unix" {print $5 " " $8}' | grep "^SV" | awk '{print $2}' >> libc.list - ;; -*) 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 - fi - ;; +If you wish to install html files for programs in $spackage, indicate +the appropriate directory here. To skip installing html files, +answer "none". +EOM +case "$html1dir" in +''|none|$undef|' ') dflt=none ;; +*) dflt=$html1dir ;; esac -;; +fn=dn+~ +rp="Directory for the main $spackage html pages?" +. ./getfile +prefixvar=html1dir +. ./setprefixvar +: Use ' ' for none so value is preserved next time through Configure +$test X"$html1dir" = "X" && html1dir=' ' + +: determine where html pages for libraries and modules go +set html3dir html3dir none +eval $prefixit +$cat <&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." +if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then + $cat <&4 + usecbacktrace=$undef + ;; + esac + ;; + esac + : Check if faststdio is requested and available case "$usefaststdio" in $define|true|[yY]*|'') @@ -9761,6 +10039,93 @@ esac set qgcvt d_qgcvt eval $inlibc +: Check what kind of doubles your system has +$echo "Checking the kind of doubles you have..." >&4 +$cat >try.c < +#endif +#include +static const double d = -0.1; +int main() { + unsigned const char* b = (unsigned const char*)(&d); +#if DOUBLESIZE == 4 + if (b[0] == 0xCD && b[3] == 0xBD) { + /* IEEE 754 32-bit little-endian */ + printf("1\n"); + exit(0); + } + if (b[0] == 0xBD && b[3] == 0xCD) { + /* IEEE 754 32-bit big-endian */ + printf("2\n"); + exit(0); + } +#endif +#if DOUBLESIZE == 8 + if (b[0] == 0x9A && b[7] == 0xBF) { + /* IEEE 754 64-bit little-endian */ + printf("3\n"); + exit(0); + } + if (b[0] == 0xBF && b[7] == 0x9A) { + /* IEEE 754 64-bit big-endian */ + printf("4\n"); + exit(0); + } + if (b[0] == 0x99 && b[3] == 0xBF && b[4] == 0x9A && b[7] == 0x99) { + /* ARM mixed endian: two little-endian 32-bit floats, in big endian order: + * 4 5 6 7 0 1 2 3 (MSB = 7, LSB = 0) + * 99 99 b9 bf 9a 99 99 99 */ + printf("7\n"); + exit(0); + } + if (b[0] == 0x99 && b[3] == 0x9A && b[4] == 0xBF && b[7] == 0x99) { + /* The opposite of case 7, mixed endian: two big-endian 32-bit floats, + * in little endian order: 3 2 1 0 7 6 5 4 (MSB = 7, LSB = 0) + * 99 99 99 9a bf b9 99 99 */ + printf("8\n"); + exit(0); + } +#endif +#if DOUBLESIZE == 16 + if (b[0] == 0x9A && b[15] == 0xBF) { + /* IEEE 754 128-bit little-endian */ + printf("5\n"); + exit(0); + } + if (b[0] == 0xBF && b[15] == 0x9A) { + /* IEEE 754 128-bit big-endian */ + printf("6\n"); + exit(0); + } +#endif + /* Then there are old mainframe/miniframe formats like VAX, IBM, and CRAY. + * Whether those environments can still build Perl is debatable. */ + printf("-1\n"); /* unknown */ + exit(0); +} +EOP +set try +if eval $compile; then + doublekind=`$run ./try` +else + doublekind=-1 +fi +case "$doublekind" in +1) echo "You have IEEE 754 32-bit little endian doubles." >&4 ;; +2) echo "You have IEEE 754 32-bit big endian doubles." >&4 ;; +3) echo "You have IEEE 754 64-bit little endian doubles." >&4 ;; +4) echo "You have IEEE 754 64-bit big endian doubles." >&4 ;; +5) echo "You have IEEE 754 128-bit little endian doubles." >&4 ;; +6) echo "You have IEEE 754 128-bit big endian doubles." >&4 ;; +7) echo "You have IEEE 754 64-bit mixed endian doubles (32-bit LEs in BE)." >&4 ;; +8) echo "You have IEEE 754 64-bit mixed endian doubles (32-bit BEs in LE)." >&4 ;; +*) echo "Cannot figure out your double. You VAX, or something?" >&4 ;; +esac +$rm_try + : Check print/scan long double stuff echo " " @@ -9783,7 +10148,7 @@ EOCP case "$yyy" in 123.456) sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"'; - sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"'; + sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"'; echo "We will use %f." ;; esac @@ -9805,7 +10170,7 @@ EOCP case "$yyy" in 123.456) sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"'; - sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"'; + sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"'; echo "We will use %Lf." ;; esac @@ -9827,7 +10192,7 @@ EOCP case "$yyy" in 123.456) sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"'; - sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"'; + sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"'; echo "We will use %llf." ;; esac @@ -9849,7 +10214,7 @@ EOCP case "$yyy" in 123.456) sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"'; - sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"'; + sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"'; echo "We will use %lf." ;; esac @@ -9877,6 +10242,38 @@ case "$sPRIfldbl" in ;; esac +: Before committing on uselongdouble, see whether that looks sane. +if $test "$uselongdouble" = "$define"; then + message="" + echo " " + echo "Checking if your long double math functions work right..." >&4 + $cat > try.c < +#include +int main() { + printf("%"$sPRIgldbl"\n", sqrtl(logl(expl(cosl(sinl(0.0L))))+powl(2.0L, 3.0L))); +} +EOF + case "$osname:$gccversion" in + aix:) saveccflags="$ccflags" + ccflags="$ccflags -qlongdouble" ;; # to avoid core dump + esac + set try + if eval $compile_ok; then + yyy=`$run ./try` + fi + case "$yyy" in + 3) echo "Your long double math functions are working correctly." >&4 ;; + *) echo "Your long double math functions are broken, not using long doubles." >&4 + uselongdouble=$undef + ;; + esac + $rm_try + case "$osname:$gccversion" in + aix:) ccflags="$saveccflags" ;; # restore + esac +fi + : Check how to convert floats to strings. if test "X$d_Gconvert" = X; then @@ -10176,6 +10573,10 @@ $rm -f access* set accessx d_accessx eval $inlibc +: see if acosh exists +set acosh d_acosh +eval $inlibc + : see if aintl exists set aintl d_aintl eval $inlibc @@ -10482,6 +10883,14 @@ case "$d_asctime_r" in ;; esac +: see if asinh exists +set asinh d_asinh +eval $inlibc + +: see if atanh exists +set atanh d_atanh +eval $inlibc + : see if atolf exists set atolf d_atolf eval $inlibc @@ -11208,7 +11617,7 @@ int main() EOCP set try if eval $compile_ok; then - $run ./try + $run ./try 2>/dev/null yyy=$? else echo "(I can't seem to compile the test program--assuming it can't)" @@ -11308,7 +11717,7 @@ int main() EOCP set try if eval $compile_ok; then - $run ./try + $run ./try 2>/dev/null castflags=$? else echo "(I can't seem to compile the test program--assuming it can't)" @@ -11326,6 +11735,10 @@ set d_castneg eval $setvar $rm_try +: see if cbrt exists +set cbrt d_cbrt +eval $inlibc + : see if vprintf exists echo " " if set vprintf val -f d_vprintf; eval $csym; $val; then @@ -11690,6 +12103,10 @@ fi set d_const eval $setvar +: see if copysign exists +set copysign d_copysign +eval $inlibc + : see if copysignl exists set copysignl d_copysignl eval $inlibc @@ -11900,10 +12317,6 @@ eval $inlibc set limits.h i_limits eval $inhdr -: see if this is a float.h system -set float.h i_float -eval $inhdr - : See if number of significant digits in a double precision number is known echo " " $cat >dbl_dig.c <dirfd.c < -#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */ -#include -#endif #else #ifdef I_SYS_NDIR #include @@ -12135,6 +12545,10 @@ set d_dirfd eval $setvar $rm -f dirfd* +: see if dladdr exists +set dladdr d_dladdr +eval $inlibc + : see if dlerror exists xxx_runnm="$runnm" runnm=false @@ -12936,11 +13350,15 @@ int main() int pu[2]; char buf[1]; char string[100]; - - pipe(pd); /* Down: child -> parent */ - pipe(pu); /* Up: parent -> child */ + int ret; + + ret = pipe(pd); /* Down: child -> parent */ + if (ret != 0) + exit(3); + ret = pipe(pu); /* Up: parent -> child */ + if (ret != 0) + exit(3); if (0 != fork()) { - int ret; close(pd[1]); /* Parent reads from pd[0] */ close(pu[0]); /* Parent writes (blocking) to pu[1] */ #ifdef F_SETFL @@ -12954,7 +13372,9 @@ int main() if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */ exit(2); sprintf(string, "%d\n", ret); - write(2, string, strlen(string)); + ret = write(2, string, strlen(string)); + if (ret != strlen(string)) + exit(3); alarm(0); #ifdef EAGAIN if (errno == EAGAIN) { @@ -12967,19 +13387,25 @@ int main() printf("EWOULDBLOCK\n"); #endif ok: - write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */ + ret = write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */ + if (ret != 1) + exit(3); sleep(2); /* Give it time to close our pipe */ alarm(5); ret = read(pd[0], buf, 1); /* Should read EOF */ alarm(0); sprintf(string, "%d\n", ret); - write(4, string, strlen(string)); + ret = write(4, string, strlen(string)); + if (ret != strlen(string)) + exit(3); exit(0); } close(pd[0]); /* We write to pd[1] */ close(pu[1]); /* We read from pu[0] */ - read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */ + ret = read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */ + if (ret != 1) + exit(3); close(pd[1]); /* Pipe pd is now fully closed! */ exit(0); /* Bye bye, thank you for playing! */ } @@ -13055,6 +13481,22 @@ EOCP esac $rm_try head.c mtry +: see if erf exists +set erf d_erf +eval $inlibc + +: see if erfc exists +set erfc d_erfc +eval $inlibc + +: see if exp2 exists +set exp2 d_exp2 +eval $inlibc + +: see if expm1 exists +set expm1 d_expm1 +eval $inlibc + : see if _ptr and _cnt from stdio act std echo " " @@ -13500,6 +13942,14 @@ EOM fi $rm_try +: see if fdim exists +set fdim d_fdim +eval $inlibc + +: see if fegetround exists +set fegetround d_fegetround +eval $inlibc + : see if fgetpos exists set fgetpos d_fgetpos eval $inlibc @@ -13521,10 +13971,55 @@ echo " " set d_flockproto flock $i_sysfile sys/file.h eval $hasproto +: see if fma exists +set fma d_fma +eval $inlibc + +: see if fmax exists +set fmax d_fmax +eval $inlibc + +: see if fmin exists +set fmin d_fmin +eval $inlibc + : see if fp_class exists set fp_class d_fp_class eval $inlibc +: see if this is a math.h system +set math.h i_math +eval $inhdr + +: check for fpclassify +echo "Checking to see if you have fpclassify..." >&4 +$cat >try.c < +#endif +int main() { return fpclassify(1.0) == FP_NORMAL ? 0 : 1; } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have fpclassify." +else + val="$undef" + echo "You do not have fpclassify." +fi +$rm_try +set d_fpclassify +eval $setvar + +: see if fp_classify exists +set fp_classify d_fp_classify +eval $inlibc + +: see if fp_classl exists +set fp_classl d_fp_classl +eval $inlibc + : see if pathconf exists set pathconf d_pathconf eval $inlibc @@ -13537,14 +14032,14 @@ eval $inlibc set fpclass d_fpclass eval $inlibc -: see if fpclassify exists -set fpclassify d_fpclassify -eval $inlibc - : see if fpclassl exists set fpclassl d_fpclassl eval $inlibc +: see if fpgetround exists +set fpgetround d_fpgetround +eval $inlibc + : check for fpos64_t echo " " echo "Checking to see if you have fpos64_t..." >&4 @@ -15172,6 +15667,14 @@ esac set d_htonl eval $setvar +: see if hypot exists +set hypot d_hypot +eval $inlibc + +: see if ilogb exists +set ilogb d_ilogb +eval $inlibc + : see if ilogbl exists set ilogbl d_ilogbl eval $inlibc @@ -15274,26 +15777,160 @@ set d_isblank eval $setvar $rm -f isblank* -: see if isfinite exists -set isfinite d_isfinite -eval $inlibc +: check for isfinite +echo "Checking to see if you have isfinite..." >&4 +$cat >try.c < +#endif +int main() { return isfinite(0.0); } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have isfinite." +else + val="$undef" + echo "You do not have isfinite." +fi +$rm_try +set d_isfinite +eval $setvar -: see if isinf exists -set isinf d_isinf +: see if isfinitel exists +set isfinitel d_isfinitel eval $inlibc -: see if isnan exists -set isnan d_isnan +: check for isinf +echo "Checking to see if you have isinf..." >&4 +$cat >try.c < +#endif +int main() { return isinf(0.0); } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have isinf." +else + val="$undef" + echo "You do not have isinf." +fi +$rm_try +set d_isinf +eval $setvar + +: see if isinfl exists +set isinfl d_isinfl eval $inlibc +: check for isless +echo "Checking to see if you have isless..." >&4 +$cat >try.c < +#endif +int main() { return isless(0.0); } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have isless." +else + val="$undef" + echo "You do not have isless." +fi +$rm_try +set d_isless +eval $setvar + +: check for isnan +echo "Checking to see if you have isnan..." >&4 +$cat >try.c < +#endif +int main() { return isnan(0.0); } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have isnan." +else + val="$undef" + echo "You do not have isnan." +fi +$rm_try +set d_isnan +eval $setvar + : see if isnanl exists set isnanl d_isnanl eval $inlibc +: check for isnormal +echo "Checking to see if you have isnormal..." >&4 +$cat >try.c < +#endif +int main() { return isnormal(0.0); } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have isnormal." +else + val="$undef" + echo "You do not have isnormal." +fi +$rm_try +set d_isnormal +eval $setvar + +: see if j0 exists +set j0 d_j0 +eval $inlibc + +: see if j0l exists +set j0l d_j0l +eval $inlibc + : see if killpg exists set killpg d_killpg eval $inlibc +: see if localeconv exists +set localeconv d_locconv +eval $inlibc + +: see if libc has the POSIX.1-2008 currency locale rules +case "$d_locconv:$d_lc_monetary_2008" in +$define:) + $cat >try.c < +int main() { + struct lconv *lc = localeconv(); + char int_p_cs_precedes = lc->int_p_cs_precedes; + return 0; +} +EOCP + set try + if eval $compile; then + d_lc_monetary_2008="$define" + else + d_lc_monetary_2008="$undef" + fi; + $rm_try + ;; +esac + : see if lchown exists echo " " $cat > try.c <<'EOCP' @@ -15353,9 +15990,13 @@ $rm -f ldbl_dig.? set d_ldbl_dig eval $setvar -: see if this is a math.h system -set math.h i_math -eval $inhdr +: see if lgamma exists +set lgamma d_lgamma +eval $inlibc + +: see if lgamma_r exists +set lgamma_r d_lgamma_r +eval $inlibc : check to see if math.h defines _LIB_VERSION d_libm_lib_version="$undef" @@ -15389,6 +16030,22 @@ EOCP set link d_link eval $inlibc +: see if llrint exists +set llrint d_llrint +eval $inlibc + +: see if llrintl exists +set llrintl d_llrintl +eval $inlibc + +: see if llround exists +set llround d_llround +eval $inlibc + +: see if llroundl exists +set llroundl d_llroundl +eval $inlibc + : see if localtime_r exists set localtime_r d_localtime_r eval $inlibc @@ -15508,14 +16165,38 @@ EOCP esac $rm_try -: see if localeconv exists -set localeconv d_locconv -eval $inlibc - : see if lockf exists set lockf d_lockf eval $inlibc +: see if log1p exists +set log1p d_log1p +eval $inlibc + +: see if log2 exists +set log2 d_log2 +eval $inlibc + +: see if logb exists +set logb d_logb +eval $inlibc + +: see if lrint exists +set lrint d_lrint +eval $inlibc + +: see if lrintl exists +set lrintl d_lrintl +eval $inlibc + +: see if lround exists +set lround d_lround +eval $inlibc + +: see if lroundl exists +set lroundl d_lroundl +eval $inlibc + : see if prototype for lseek is available echo " " set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h @@ -15628,6 +16309,10 @@ eval $inlibc set scalbnl d_scalbnl eval $inlibc +: see if truncl exists +set truncl d_truncl +eval $inlibc + : see if modfl exists set modfl d_modfl eval $inlibc @@ -15706,10 +16391,14 @@ if $test "$uselongdouble" = "$define"; then message="$message sqrtl" fi if $test "$d_modfl" != "$define"; then - if $test "$d_aintl:$d_copysignl" = "$define:$define"; then - echo "You have both aintl and copysignl, so I can emulate modfl." + if $test "$d_truncl:$d_copysignl" = "$define:$define"; then + echo "You have both truncl and copysignl, so I can emulate modfl." else - message="$message modfl" + if $test "$d_aintl:$d_copysignl" = "$define:$define"; then + echo "You have both aintl and copysignl, so I can emulate modfl." + else + message="$message modfl" + fi fi fi if $test "$d_frexpl" != "$define"; then @@ -15719,6 +16408,9 @@ if $test "$uselongdouble" = "$define"; then message="$message frexpl" fi fi + if $test "$d_ldexpl" != "$define"; then + message="$message ldexpl" + fi if $test "$message" != ""; then $cat <&4 @@ -15810,6 +16502,22 @@ eval $inlibc set munmap d_munmap eval $inlibc +: see if nan exists +set nan d_nan +eval $inlibc + +: see if nearbyint exists +set nearbyint d_nearbyint +eval $inlibc + +: see if nextafter exists +set nextafter d_nextafter +eval $inlibc + +: see if nexttoward exists +set nexttoward d_nexttoward +eval $inlibc + : see if nice exists set nice d_nice eval $inlibc @@ -15822,6 +16530,10 @@ eval $inhdr set nl_langinfo d_nl_langinfo eval $inlibc +: see if this is a quadmath.h system +set quadmath.h i_quadmath +eval $inhdr + : check for volatile keyword echo " " echo 'Checking to see if your C compiler knows about "volatile"...' >&4 @@ -15881,6 +16593,48 @@ define:define) ;; esac +case "$usequadmath:$i_quadmath" in +define:define) + nvtype="__float128" + nvsize=16 + case "$libs" in + *quadmath*) ;; + *) $cat <&4 + +*** You requested the use of the quadmath library, but you +*** do not seem to have the quadmath library installed. +*** Cannot continue, aborting. +EOM + exit 1 + ;; + esac + ;; +define:*) $cat <&4 + +*** You requested the use of the quadmath library, but you +*** do not seem to have the required header, . +EOM + case "$gccversion" in + [23].*|4.[0-5]*) + $cat <&4 +*** Your gcc looks a bit old: +*** $gccversion +EOM + ;; + '') + $cat <&4 +*** You are not running a gcc. +EOM + ;; + esac + $cat <&4 +*** For the quadmath library you need at least gcc 4.6. +*** Cannot continue, aborting. +EOM + exit 1 + ;; +esac + $echo "(IV will be "$ivtype", $ivsize bytes)" $echo "(UV will be "$uvtype", $uvsize bytes)" $echo "(NV will be "$nvtype", $nvsize bytes)" @@ -16367,6 +17121,9 @@ d_prctl_set_name=$undef case $d_prctl in $define) $cat >try.c < +#endif #include int main (int argc, char *argv[]) @@ -16565,6 +17322,25 @@ case "$sched_yield" in esac $rm_try +: check for ptrdiff_t +echo " " +echo "Checking to see if you have ptrdiff_t..." >&4 +$cat >try.c < +int main() { ptrdiff_t x = 7; } +EOCP +set try +if eval $compile; then + val="$define" + echo "You have ptrdiff_t." +else + val="$undef" + echo "You do not have ptrdiff_t." +fi +$rm_try +set d_ptrdiff_t +eval $setvar + : see if random_r exists set random_r d_random_r eval $inlibc @@ -16722,14 +17498,56 @@ eval $inlibc set recvmsg d_recvmsg eval $inlibc +: see if regcomp, regcmp, or re_comp exist, for regular pattern matching +echo " " +if set regcomp val -f d_regcomp; eval $csym; $val; then + echo 'regcomp() found.' >&4 + d_regcomp="$define" + d_regcmp="$undef" + d_re_comp="$undef" +elif set regcmp val -f d_regcmp; eval $csym; $val; then + echo 'regcmp() found.' >&4 + d_regcmp="$define" + d_regcomp="$undef" + d_re_comp="$undef" +elif set re_comp val -f d_re_comp; eval $csym; $val; then + echo 're_comp() found, assuming re_exec() also exists.' >&4 + d_re_comp="$define" + d_regcomp="$undef" + d_regcmp="$undef" +else + $cat >&4 < -#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */ -#include -#endif #else #ifdef I_SYS_NDIR #include @@ -19126,10 +19957,67 @@ eval $inlibc set waitpid d_waitpid eval $inlibc +: look for wcscmp +echo " " +$cat >try.c <<'EOCP' +#include +#include +int main () +{ + wchar_t *s = L" "; + return (wcscmp (s, s) ? 1 : 0); + } +EOCP +set try +val="$undef" +if eval $compile; then + `$run ./try` + case "$?" in + 0) echo "A working wcscmp() found." >&4 + val="$define" ;; + *) echo "wcscmp() found, but it doesn't work" >&4 + ;; + esac +else + echo "wcscmp() NOT found." >&4 + fi +set d_wcscmp +eval $setvar +$rm_try + : see if wcstombs exists set wcstombs d_wcstombs eval $inlibc +: look for wcsxfrm +echo " " +$cat >try.c <<'EOCP' +#include +#include +int main () +{ + wchar_t dst[4], *src = L" "; + errno = 0; + return (wcsxfrm (dst, src, 1) ? errno ? errno : 0 : 1); + } +EOCP +set try +val="$undef" +if eval $compile; then + `$run ./try` + case "$?" in + 0) echo "A working wcsxfrm() found." >&4 + val="$define" ;; + *) echo "wcsxfrm() found, but it doesn't work" >&4 + ;; + esac +else + echo "wcsxfrm() NOT found." >&4 + fi +set d_wcsxfrm +eval $setvar +$rm_try + : see if wctomb exists set wctomb d_wctomb eval $inlibc @@ -19138,13 +20026,6 @@ eval $inlibc set writev d_writev eval $inlibc -: preserve RCS keywords in files with variable substitution, grrr -Date='$Date' -Id='$Id' -Log='$Log' -RCSfile='$RCSfile' -Revision='$Revision' - : check for alignment requirements echo " " case "$alignbytes" in @@ -19200,39 +20081,6 @@ $rm_try : set the base revision baserev=5.0 -: Determine if this is an EBCDIC system -echo " " -echo "Determining whether or not we are on an EBCDIC system..." >&4 -$cat >try.c <<'EOM' -int main() -{ - if ('M'==0xd4) return 0; - return 1; -} -EOM - -case "$BOOTSTRAP_CHARSET" in - Y|y|define) bootstrap_charset=$define ;; - *) bootstrap_charset=$undef ;; -esac - -val=$undef -set try -if eval $compile_ok; then - if $run ./try; then - echo "You seem to speak EBCDIC." >&4 - val="$define" - else - echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4 - fi -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_try -set ebcdic -eval $setvar - : length of character in bytes. Is always 1, otherwise it is not C : This used to be a test using sizeof charsize=1 @@ -19423,9 +20271,7 @@ define) #include #ifndef DB_VERSION_MAJOR -u_int32_t hash_cb (ptr, size) -const void *ptr; -size_t size; +u_int32_t hash_cb (const void* ptr, size_t size) { } HASHINFO info; @@ -19468,9 +20314,7 @@ define) #include #ifndef DB_VERSION_MAJOR -size_t prefix_cb (key1, key2) -const DBT *key1; -const DBT *key2; +size_t prefix_cb (const DBT *key1, const DBT *key2) { } BTREEINFO info; @@ -19500,6 +20344,261 @@ EOCP ;; esac +: Check what kind of inf/nan your system has +$echo "Checking the kind of infinities and nans you have..." >&4 +$cat >try.c < +#endif +#include +/* Note that whether the sign bit is on or off + * for NaN depends on the CPU/FPU, and possibly + * can be affected by the build toolchain. + * + * For example for older MIPS and HP-PA 2.0 the quiet NaN is: + * 0x7f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + * 0x7f, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + * (respectively) as opposed to the more usual + * 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + */ +static void bytes(unsigned char *p, unsigned int n) { + int i; + for (i = 0; i < n; i++) { + printf("0x%02x%s", p[i], i < n - 1 ? ", " : "\n"); + } +} +int main(int argc, char *argv[]) { + /* We cannot use 1.0/0.0 and 0.0/0.0 (with L suffixes for long double) + * because some compilers are 'smart' and not only warn but refuse to + * compile such 'illegal' values. */ + double dinf = exp(1e9); + double dnan = sqrt(-1.0); +#ifdef HAS_LONG_DOUBLE + long double ldinf = (long double)exp(1e9); + long double ldnan = (long double)sqrt(-1.0); +#endif + if (argc == 2) { + switch (argv[1][0]) { + case '1': bytes(&dinf, sizeof(dinf)); break; + case '2': bytes(&dnan, sizeof(dnan)); break; +#ifdef HAS_LONG_DOUBLE +# if LONG_DOUBLEKIND == 3 || LONG_DOUBLEKIND == 4 +/* the 80-bit long doubles might have garbage in their excess bytes */ + memset((char *)&ldinf + 10, '\0', LONG_DOUBLESIZE - 10); +# endif + case '3': bytes(&ldinf, sizeof(ldinf)); break; + case '4': bytes(&ldnan, sizeof(ldnan)); break; +#endif + } + } + return 0; +} +EOP +set try +if eval $compile; then + doubleinfbytes=`$run ./try 1` + doublenanbytes=`$run ./try 2` + case "$d_longdbl" in + $define) + longdblinfbytes=`$run ./try 3` + longdblnanbytes=`$run ./try 4` + ;; + esac +else + # Defaults in case the above test program failed. + case "$doublekind" in + 1) # IEEE 754 32-bit LE + doubleinfbytes='0x00, 0x00, 0xf0, 0x7f' + doublenanbytes='0x00, 0x00, 0xf8, 0x7f' + ;; + 2) # IEEE 754 32-bit BE + doubleinfbytes='0x7f, 0xf0, 0x00, 0x00' + doublenanbytes='0x7f, 0xf8, 0x00, 0x00' + ;; + 3) # IEEE 754 64-bit LE + doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f' + doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f' + ;; + 4) # IEEE 754 64-bit BE + doubleinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + doublenanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + 5) # IEEE 754 128-bit LE + doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f' + doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f' + ;; + 6) # IEEE 754 128-bit BE + doubleinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + doublenanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + 7) # IEEE 754 64-bit mixed: 32-bit LEs in BE + doubleinfbytes='0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00' + doublenanbytes='0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00' + ;; + 8) # IEEE 754 64-bit mixed: 32-bit BEs in LE + doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00' + doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00' + ;; + *) # No idea. + doubleinfbytes=$undef + doublenanbytes=$undef + ;; + esac + case "$longdblkind" in + 1) # IEEE 754 128-bit LE + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f' + ;; + 2) # IEEE 754 128-bit BE + longdblinfbytes='0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + 3) # IEEE 754 80-bit LE, 12 or 16 bytes (x86) + case "$longdblsize" in + 12) # x86 32-bit (96 bits, or 4 x 32, or 12 x 8) + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00' + ;; + 16) # x86_64 + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + *) # No idea. + longdblinfbytes=$undef + longdblnanbytes=$undef + ;; + esac + ;; + 4) # IEEE 754 80-bit BE, 12 or 16 bytes + case "$longdblsize" in + 12) # 32-bit system + longdblinfbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + 16) # 64-bit system + longdblinfbytes='0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + *) # No idea. + longdblinfbytes=$undef + longdblnanbytes=$undef + ;; + esac + ;; + 5) # 128-bit LE "double double" + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f' + ;; + 6) # 128-bit BE "double double" + longdblinfbytes='0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + *) # No idea. + longdblinfbytes=$undef + longdblnanbytes=$undef + ;; + esac +fi +$rm_try + +: Check the length of the double mantissa +$echo "Checking how many mantissa bits your doubles have..." >&4 +$cat >try.c < +#endif +#ifdef I_SUNMATH +# include +#endif +#ifdef DBL_MANT_DIG +# define BITS (DBL_MANT_DIG - 1) /* the implicit bit does not count */ +#endif +#include +int main(int argc, char *argv[]) { +#ifdef BITS + printf("%d\n", BITS); +#endif + return 0; +} +EOP +set try +if eval $compile; then + doublemantbits=`$run ./try` +else + doublemantbits="$undef" +fi +$rm_try + +: Check the length of the longdouble mantissa +$echo "Checking how many mantissa bits your long doubles have..." >&4 +$cat >try.c < +#endif +#ifdef I_SUNMATH +# include +#endif +#$d_longdbl HAS_LONG_DOUBLE +#if defined(HAS_LONG_DOUBLE) && defined(LDBL_MANT_DIG) +# if ($longdblkind == 3) || ($longdblkind == 4) /* 80-bit extended precision */ +/* This format has no implicit bit. Beware, however, that for + * this format the bare LDBL_MANT_DIG is misleading for inf/nan: + * the top three bits are used for inf (100) / qnan (11x) / snan (101), + * and the top bit must have been one since 387, zero is plain invalid. + * For normal fp values, the LDBL_MANT_DIG is fine, though. */ +# define BITS LDBL_MANT_DIG +# elif ($longdblkind == 5 || $longdblkind == 6) /* double double */ +/* LDBL_MANT_DIG of 106 (twice 53) would be logical, but for some + * reason e.g. Irix thinks 107. But in any case, we want only + * the number of real bits, the implicit bits are of no interest. */ +# define BITS 2 * (DBL_MANT_DIG - 1) +# else +# define BITS (LDBL_MANT_DIG - 1) /* the implicit bit does not count */ +# endif +#endif +#include +int main(int argc, char *argv[]) { +#ifdef BITS + printf("%d\n", BITS); +#endif + return 0; +} +EOP +set try +if eval $compile; then + longdblmantbits=`$run ./try` +else + longdblmantbits="$undef" +fi +$rm_try + +: Check the length of the NV mantissa +$echo "Checking how many mantissa bits your NVs have..." >&4 +if test "X$usequadmath" = "X$define"; then + nvmantbits=112 # 128-1-15 +else + if test "X$nvsize" = "X$doublesize"; then + nvmantbits="$doublemantbits" + else + if test "X$nvsize" = "X$longdblsize"; then + nvmantbits="$longdblmantbits" + else + nvmantbits="$undef" + fi + fi +fi + : How can we generate normalized random numbers ? echo " " echo "Using our internal random number implementation..." >&4 @@ -19519,6 +20618,34 @@ seedfunc="Perl_drand48_init" randbits=48 randseedtype=U32 +: Determine if this is an EBCDIC system +echo " " +echo "Determining whether or not we are on an EBCDIC system..." >&4 +$cat >try.c <<'EOM' +int main() +{ + if ('M'==0xd4) return 0; + return 1; +} +EOM + +val=$undef +set try +if eval $compile_ok; then + if $run ./try; then + echo "You seem to speak EBCDIC." >&4 + val="$define" + else + echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4 + fi +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_try +set ebcdic +eval $setvar + : Check how to flush echo " " $cat >&4 </dev/null > tryp.out + $to tryp + $run "cat tryp.c | ./tryp " 2>/dev/null > tryp.out else - $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out + $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out fi if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 </dev/null > tryp.out + $to tryp + $run "cat tryp.c | ./tryp " 2>/dev/null > tryp.out else - $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out + $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out fi if cmp tryp.c tryp.out >/dev/null 2>&1; then $cat >&4 <&4 @@ -20340,7 +21444,7 @@ rp="What is the type used for the length parameter for string functions?" set size_t sizetype 'unsigned int' stdio.h sys/types.h eval $typedef_ask -: check for type of arguments to gethostbyaddr. +: check for type of arguments to gethostbyaddr. if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then case "$d_gethbyaddr" in $define) @@ -20349,8 +21453,8 @@ if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then Checking to see what type of arguments are accepted by gethostbyaddr(). EOM hdrs="$define sys/types.h - $d_socket sys/socket.h - $i_niin netinet/in.h + $d_socket sys/socket.h + $i_niin netinet/in.h $i_netdb netdb.h $i_unistd unistd.h" : The first arg can 'char *' or 'void *' @@ -20387,12 +21491,12 @@ EOM netdb_hlen_type="$sizetype" ;; esac - # Remove the "const" if needed. -- but then we'll have a + # Remove the "const" if needed. -- but then we'll have a # prototype clash! # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'` fi -: check for type of argument to gethostbyname. +: check for type of argument to gethostbyname. if test "X$netdb_name_type" = X ; then case "$d_gethbyname" in $define) @@ -20401,8 +21505,8 @@ if test "X$netdb_name_type" = X ; then Checking to see what type of argument is accepted by gethostbyname(). EOM hdrs="$define sys/types.h - $d_socket sys/socket.h - $i_niin netinet/in.h + $d_socket sys/socket.h + $i_niin netinet/in.h $i_netdb netdb.h $i_unistd unistd.h" for xxx in "const char *" "char *"; do @@ -20430,7 +21534,7 @@ EOM esac fi -: check for type of 1st argument to getnetbyaddr. +: check for type of 1st argument to getnetbyaddr. if test "X$netdb_net_type" = X ; then case "$d_getnbyaddr" in $define) @@ -20439,8 +21543,8 @@ if test "X$netdb_net_type" = X ; then Checking to see what type of 1st argument is accepted by getnetbyaddr(). EOM hdrs="$define sys/types.h - $d_socket sys/socket.h - $i_niin netinet/in.h + $d_socket sys/socket.h + $i_niin netinet/in.h $i_netdb netdb.h $i_unistd unistd.h" for xxx in in_addr_t "unsigned long" long "unsigned int" int; do @@ -20630,7 +21734,7 @@ int check_min () int main (int argc, char *argv[]) { - fprintf (stderr, "Sizeof time_t = %ld\n", sizeof (time_t)); + /* fprintf (stderr, "Sizeof time_t = %ld\n", sizeof (time_t)); */ check_max (); check_min (); return (0); @@ -20638,7 +21742,7 @@ int main (int argc, char *argv[]) EOCP set try if eval $compile; then - eval `$run ./try` + eval `$run ./try 2>/dev/null` else echo "Cannot determine sGMTIME_max and sGMTIME_min." >&4 fi @@ -20719,7 +21823,7 @@ int main (int argc, char *argv[]) EOCP set try if eval $compile; then - eval `$run ./try` + eval `$run ./try 2>/dev/null` else echo "Cannot determine sLOCALTIME_max and sLOCALTIME_min." >&4 fi @@ -20851,7 +21955,7 @@ int main() { EOCP set try if eval $compile_ok; then - selectminbits=`$run ./try` + selectminbits=`$run ./try 2>/dev/null` case "$selectminbits" in '') cat >&4 <&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 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 -bull c cadmus clipper CMU COFF COMPILER_VERSION -concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX -CYGWIN DECC DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO -Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD -FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel -GLIBC GLIBC_MINOR -GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN -H3050R H3050RX hbullx20 hcx host_mips -hp200 hp300 hp700 HP700 hp800 hp9000 -hp9000s200 hp9000s300 hp9000s400 hp9000s500 -hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE -i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960 -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 -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 -M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen -MATH_HAS_NO_SIDE_EFFECTS -mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040 -mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin -mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT -MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola -mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr -NetBSD news1500 news1700 news1800 news1900 news3700 -news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000 -ns32016 ns32332 ns32k nsc32000 +a29k aarch64 ABI64 aegis AES_SOURCE AIX AIX32 AIX370 AIX41 AIX42 +AIX43 aixpc AIX_SOURCE alliant ALL_SOURCE alpha AM29000 am29000 +AMD64 amd64 amiga AMIGAOS AMIX ansi ANSI_C_SOURCE apollo arch_ppc +arch_pwr ardent ARM ARM32 atarist att386 att3b +BeOS BIG_ENDIAN BIT_MSF BSD bsd bsd43 bsd4_2 BSD4_3 bsd4_3 bsd4_4 +BSDCOMPAT bsdi BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES bull +byteorder byte_order +c cadmus clang clipper CMU COFF COMPILER_VERSION concurrent +convex cpu CRAY cray CRAYMPP ctix CX_UX CYGWIN +DECC DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO Dynix DynixPTX +ELF encore EPI EXTENSIONS +FAVOR_BSD FILE_OFFSET_BITS FORTIFY_SOURCE FreeBSD +GCC_NEW_VARARGS gcos gcx gimpel GLIBC GLIBC_MINOR GNUC GNUC_MINOR +GNU_LIBRARY GNU_SOURCE GO32 gould GOULD_PN +H3050R H3050RX hbullx20 hcx host_mips hp200 hp300 HP700 hp700 +hp800 hp9000 hp9000s200 hp9000s300 hp9000s400 hp9000s500 +hp9000s700 hp9000s800 hp9k8 hppa hpux HPUX_SOURCE hp_osf +i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960 IA32 IA64 +iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64 +INLINE_INTRINSICS INT64 INTEL interdata INTRINSICS is68k itanium +ksr1 +LANGUAGE_C LARGEFILE64_SOURCE LARGEFILE_SOURCE LARGE_FILE_API +LFS64_LARGEFILE LFS_LARGEFILE LIBCATAMOUNT Linux LITTLE_ENDIAN +LONG64 LONGDOUBLE LONGLONG LONG_DOUBLE LONG_LONG LP64 luna +luna88k Lynx +M68000 m68k m88100 m88k M88KBCS_TARGET MACH machine MachTen +MATH_HAS_NO_SIDE_EFFECTS mc300 mc500 mc68000 mc68010 mc68020 +mc68030 mc68040 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 +merlin mert MiNT mips MIPSEB MIPSEL MIPS_FPSET MIPS_ISA MIPS_SIM +MIPS_SZINT MIPS_SZLONG MIPS_SZPTR MODERN_C motorola mpeix MSDOS +MTXINU MULTIMAX MVS mvs M_AMD64 M_ARM M_ARMT M_COFF M_I186 M_I286 +M_I386 M_I8086 M_I86 M_I86SM M_IA64 M_IX86 M_PPC M_SYS3 M_SYS5 +M_SYSIII M_SYSV M_UNIX M_X86 M_XENIX +n16 ncl_el ncl_mr NetBSD news1500 news1700 news1800 news1900 +news3700 news700 news800 news900 NeXT NLS nonstopux ns16000 +ns32000 ns32016 ns32332 ns32k nsc32000 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE -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 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 -stardent stdc STDC_EXT stratos sun sun3 sun386 -Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5 -SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44 -SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5 -sysV68 sysV88 Tek4132 Tek4300 titan -TM3200 TM5400 TM5600 -tower tower32 tower32_200 tower32_600 tower32_700 +PARAGON parisc pa_risc PA_RISC1_1 PA_RISC2_0 pc532 pdp11 PGC PIC +plexus PORTAR posix POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE +POSIX_C_SOURCE POSIX_SOURCE POWER powerpc ppc PROTOTYPES PWB pyr +QK_USER QNX +R3000 REENTRANT RES Rhapsody RISC6000 riscix riscos RT +S390 S390x SA110 SCO scs sequent sgi SGI_SOURCE SH SH3 sinix +SIZE_INT SIZE_LONG SIZE_PTR SOCKETS_SOURCE SOCKET_SOURCE sony +sonyrisc sony_news sparc sparclite sparcv8 sparcv9 spectrum +stardent stdc STDC_EXT stratos sun sun3 sun386 Sun386i svr3 svr4 +SVR4_2 SVR4_SOURCE svr5 SX system SYSTYPE_BSD SYSTYPE_BSD43 +SYSTYPE_BSD44 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 +SYSV4 SYSV5 sysV68 sysV88 +Tek4132 Tek4300 thumb thw_370 thw_intel thw_rs6000 titan TM3200 +TM5400 TM5600 tower tower32 tower32_200 tower32_600 tower32_700 tower32_800 tower32_850 tss -u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5 -ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK -unix UNIX95 UNIX99 unixpc unos -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 x86_64 xenix Xenix286 -XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED -XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED -z8000 +u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5 ultrix UMAXV UnicomPBB +UnicomPBD UNICOS UNICOSMK unix UNIX95 UNIX99 unixpc unos 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 +x86_64 xenix Xenix286 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 +XPG2_EXTENDED XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED +z8000 zarch EOSH # Maybe put other stuff here too. -cat <>Cppsym.know +./tr '-' '_' <>Cppsym.know $osname EOSH ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a @@ -21971,8 +23086,8 @@ $startsh if $test \$# -gt 0; then echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got if $test -s Cppsym.got; then - $rm -f Cppsym.got - exit 0 + $rm -f Cppsym.got + exit 0 fi $rm -f Cppsym.got exit 1 @@ -22061,9 +23176,9 @@ chmod +x ccsym $eunicefix ccsym ./ccsym > ccsym1.raw if $test -s ccsym1.raw; then - $sort ccsym1.raw | $uniq >ccsym.raw + $sort ccsym1.raw | $uniq >ccsym.raw else - mv ccsym1.raw ccsym.raw + mv ccsym1.raw ccsym.raw fi $awk '/\=/ { print $0; next } @@ -22077,9 +23192,9 @@ if $test -z ccsym.raw; then echo " " echo "However, your C preprocessor defines the following symbols:" $cat Cppsym.true - ccsymbols='' + ccsymbols='' cppsymbols=`$cat Cppsym.true` - cppsymbols=`echo $cppsymbols` + cppsymbols=`echo $cppsymbols` cppccsymbols="$cppsymbols" else if $test -s ccsym.com; then @@ -22105,12 +23220,32 @@ else echo "Your C compiler ${also}defines the following cpp symbols:" $sed -e 's/\(..*\)=1/\1/' ccsym.own $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true - ccsymbols=`$cat ccsym.own` - ccsymbols=`echo $ccsymbols` + ccsymbols=`$cat ccsym.own` + ccsymbols=`echo $ccsymbols` $test "$silent" || sleep 1 fi fi +: add -D_FORTIFY_SOURCE if feasible and not already there +case "$gccversion" in +4.*) case "$optimize$ccflags" in + *-O*) case "$ccflags$cppsymbols" in + *_FORTIFY_SOURCE=*) # Don't add it again. + echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4 + ;; + *) echo "Adding -D_FORTIFY_SOURCE=2 to ccflags..." >&4 + ccflags="$ccflags -D_FORTIFY_SOURCE=2" + ;; + esac + ;; + *) echo "You have gcc 4.* but not optimizing, not adding -D_FORTIFY_SOURCE." >&4 + ;; + esac + ;; +*) echo "You seem not to have gcc 4.*, not adding -D_FORTIFY_SOURCE." >&4 + ;; +esac + : see if this is a termio system val="$undef" val2="$undef" @@ -22199,6 +23334,10 @@ eval $setvar set stddef.h i_stddef eval $inhdr +: see if stdint is available +set stdint.h i_stdint +eval $inhdr + : see if sys/access.h is available set sys/access.h i_sysaccess eval $inhdr @@ -22325,8 +23464,8 @@ find_extensions=' Scalar/List/Utils) this_ext="List/Util" ;; PathTools) this_ext="Cwd" ;; esac; - echo " $xs_extensions $nonxs_extensions" > $$.tmp; - if $contains " $this_ext " $$.tmp; then + echo " $xs_extensions $nonxs_extensions" > $tdir/$$.tmp; + if $contains " $this_ext " $tdir/$$.tmp; then echo >&4; echo "Duplicate directories detected for extension $xxx" >&4; echo "Configure cannot correctly recover from this - shall I abort?" >&4; @@ -22344,15 +23483,15 @@ find_extensions=' esac; echo "Ok. You will need to correct config.sh before running make." >&4; fi; - $ls -1 $xxx > $$.tmp; - if $contains "\.xs$" $$.tmp > /dev/null 2>&1; then + $ls -1 $xxx > $tdir/$$.tmp; + if $contains "\.xs$" $tdir/$$.tmp > /dev/null 2>&1; then xs_extensions="$xs_extensions $this_ext"; - elif $contains "\.c$" $$.tmp > /dev/null 2>&1; then + elif $contains "\.c$" $tdir/$$.tmp > /dev/null 2>&1; then xs_extensions="$xs_extensions $this_ext"; elif $test -d $xxx; then nonxs_extensions="$nonxs_extensions $this_ext"; fi; - $rm -f $$.tmp; + $rm -f $tdir/$$.tmp; ;; esac; done' @@ -22846,7 +23985,6 @@ bin='$bin' bin_ELF='$bin_ELF' binexp='$binexp' bison='$bison' -bootstrap_charset='$bootstrap_charset' byacc='$byacc' byteorder='$byteorder' c='$c' @@ -22905,11 +24043,14 @@ d_SCNfldbl='$d_SCNfldbl' d__fwalk='$d__fwalk' d_access='$d_access' d_accessx='$d_accessx' +d_acosh='$d_acosh' d_aintl='$d_aintl' d_alarm='$d_alarm' d_archlib='$d_archlib' d_asctime64='$d_asctime64' d_asctime_r='$d_asctime_r' +d_asinh='$d_asinh' +d_atanh='$d_atanh' d_atolf='$d_atolf' d_atoll='$d_atoll' d_attribute_deprecated='$d_attribute_deprecated' @@ -22920,6 +24061,7 @@ d_attribute_noreturn='$d_attribute_noreturn' d_attribute_pure='$d_attribute_pure' d_attribute_unused='$d_attribute_unused' d_attribute_warn_unused_result='$d_attribute_warn_unused_result' +d_backtrace='$d_backtrace' d_bcmp='$d_bcmp' d_bcopy='$d_bcopy' d_bsd='$d_bsd' @@ -22931,6 +24073,7 @@ d_bzero='$d_bzero' d_c99_variadic_macros='$d_c99_variadic_macros' d_casti32='$d_casti32' d_castneg='$d_castneg' +d_cbrt='$d_cbrt' d_charvspr='$d_charvspr' d_chown='$d_chown' d_chroot='$d_chroot' @@ -22940,6 +24083,7 @@ d_clearenv='$d_clearenv' d_closedir='$d_closedir' d_cmsghdr_s='$d_cmsghdr_s' d_const='$d_const' +d_copysign='$d_copysign' d_copysignl='$d_copysignl' d_cplusplus='$d_cplusplus' d_crypt='$d_crypt' @@ -22957,6 +24101,7 @@ d_difftime='$d_difftime' d_dir_dd_fd='$d_dir_dd_fd' d_dirfd='$d_dirfd' d_dirnamlen='$d_dirnamlen' +d_dladdr='$d_dladdr' d_dlerror='$d_dlerror' d_dlopen='$d_dlopen' d_dlsymun='$d_dlsymun' @@ -22978,7 +24123,11 @@ d_endpwent_r='$d_endpwent_r' d_endsent='$d_endsent' d_endservent_r='$d_endservent_r' d_eofnblk='$d_eofnblk' +d_erf='$d_erf' +d_erfc='$d_erfc' d_eunice='$d_eunice' +d_exp2='$d_exp2' +d_expm1='$d_expm1' d_faststdio='$d_faststdio' d_fchdir='$d_fchdir' d_fchmod='$d_fchmod' @@ -22987,19 +24136,27 @@ d_fcntl='$d_fcntl' d_fcntl_can_lock='$d_fcntl_can_lock' d_fd_macros='$d_fd_macros' d_fd_set='$d_fd_set' +d_fdim='$d_fdim' d_fds_bits='$d_fds_bits' +d_fegetround='$d_fegetround' d_fgetpos='$d_fgetpos' d_finite='$d_finite' d_finitel='$d_finitel' d_flexfnam='$d_flexfnam' d_flock='$d_flock' d_flockproto='$d_flockproto' +d_fma='$d_fma' +d_fmax='$d_fmax' +d_fmin='$d_fmin' d_fork='$d_fork' d_fp_class='$d_fp_class' +d_fp_classify='$d_fp_classify' +d_fp_classl='$d_fp_classl' d_fpathconf='$d_fpathconf' d_fpclass='$d_fpclass' d_fpclassify='$d_fpclassify' d_fpclassl='$d_fpclassl' +d_fpgetround='$d_fpgetround' d_fpos64_t='$d_fpos64_t' d_frexpl='$d_frexpl' d_fs_data_s='$d_fs_data_s' @@ -23077,6 +24234,8 @@ d_gnulibc='$d_gnulibc' d_grpasswd='$d_grpasswd' d_hasmntopt='$d_hasmntopt' d_htonl='$d_htonl' +d_hypot='$d_hypot' +d_ilogb='$d_ilogb' d_ilogbl='$d_ilogbl' d_inc_version_list='$d_inc_version_list' d_index='$d_index' @@ -23091,22 +24250,43 @@ d_ipv6_mreq_source='$d_ipv6_mreq_source' d_isascii='$d_isascii' d_isblank='$d_isblank' d_isfinite='$d_isfinite' +d_isfinitel='$d_isfinitel' d_isinf='$d_isinf' +d_isinfl='$d_isinfl' +d_isless='$d_isless' d_isnan='$d_isnan' d_isnanl='$d_isnanl' +d_isnormal='$d_isnormal' +d_j0='$d_j0' +d_j0l='$d_j0l' d_killpg='$d_killpg' +d_lc_monetary_2008='$d_lc_monetary_2008' d_lchown='$d_lchown' d_ldbl_dig='$d_ldbl_dig' +d_ldexpl='$d_ldexpl' +d_lgamma='$d_lgamma' +d_lgamma_r='$d_lgamma_r' d_libm_lib_version='$d_libm_lib_version' d_libname_unique='$d_libname_unique' d_link='$d_link' +d_llrint='$d_llrint' +d_llrintl='$d_llrintl' +d_llround='$d_llround' +d_llroundl='$d_llroundl' 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_log1p='$d_log1p' +d_log2='$d_log2' +d_logb='$d_logb' d_longdbl='$d_longdbl' d_longlong='$d_longlong' +d_lrint='$d_lrint' +d_lrintl='$d_lrintl' +d_lround='$d_lround' +d_lroundl='$d_lroundl' d_lseekproto='$d_lseekproto' d_lstat='$d_lstat' d_madvise='$d_madvise' @@ -23146,8 +24326,12 @@ d_msgsnd='$d_msgsnd' d_msync='$d_msync' d_munmap='$d_munmap' d_mymalloc='$d_mymalloc' +d_nan='$d_nan' d_ndbm='$d_ndbm' d_ndbm_h_uses_prototypes='$d_ndbm_h_uses_prototypes' +d_nearbyint='$d_nearbyint' +d_nextafter='$d_nextafter' +d_nexttoward='$d_nexttoward' d_nice='$d_nice' d_nl_langinfo='$d_nl_langinfo' d_nv_preserves_uv='$d_nv_preserves_uv' @@ -23172,6 +24356,7 @@ d_pseudofork='$d_pseudofork' d_pthread_atfork='$d_pthread_atfork' d_pthread_attr_setscope='$d_pthread_attr_setscope' d_pthread_yield='$d_pthread_yield' +d_ptrdiff_t='$d_ptrdiff_t' d_pwage='$d_pwage' d_pwchange='$d_pwchange' d_pwclass='$d_pwclass' @@ -23183,19 +24368,27 @@ d_pwquota='$d_pwquota' d_qgcvt='$d_qgcvt' d_quad='$d_quad' d_random_r='$d_random_r' +d_re_comp='$d_re_comp' d_readdir64_r='$d_readdir64_r' d_readdir='$d_readdir' d_readdir_r='$d_readdir_r' d_readlink='$d_readlink' d_readv='$d_readv' d_recvmsg='$d_recvmsg' +d_regcmp='$d_regcmp' +d_regcomp='$d_regcomp' +d_remainder='$d_remainder' +d_remquo='$d_remquo' d_rename='$d_rename' d_rewinddir='$d_rewinddir' +d_rint='$d_rint' d_rmdir='$d_rmdir' +d_round='$d_round' d_safebcpy='$d_safebcpy' d_safemcpy='$d_safemcpy' d_sanemcmp='$d_sanemcmp' d_sbrkproto='$d_sbrkproto' +d_scalbn='$d_scalbn' d_scalbnl='$d_scalbnl' d_sched_yield='$d_sched_yield' d_scm_rights='$d_scm_rights' @@ -23267,6 +24460,7 @@ d_srand48_r='$d_srand48_r' d_srandom_r='$d_srandom_r' d_sresgproto='$d_sresgproto' d_sresuproto='$d_sresuproto' +d_stat='$d_stat' d_statblks='$d_statblks' d_statfs_f_flags='$d_statfs_f_flags' d_statfs_s='$d_statfs_s' @@ -23309,13 +24503,16 @@ d_tcgetpgrp='$d_tcgetpgrp' d_tcsetpgrp='$d_tcsetpgrp' d_telldir='$d_telldir' d_telldirproto='$d_telldirproto' +d_tgamma='$d_tgamma' 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' d_tmpnam_r='$d_tmpnam_r' +d_trunc='$d_trunc' d_truncate='$d_truncate' +d_truncl='$d_truncl' d_ttyname_r='$d_ttyname_r' d_tzname='$d_tzname' d_u32align='$d_u32align' @@ -23341,7 +24538,9 @@ d_vprintf='$d_vprintf' d_vsnprintf='$d_vsnprintf' d_wait4='$d_wait4' d_waitpid='$d_waitpid' +d_wcscmp='$d_wcscmp' d_wcstombs='$d_wcstombs' +d_wcsxfrm='$d_wcsxfrm' d_wctomb='$d_wctomb' d_writev='$d_writev' d_xenix='$d_xenix' @@ -23354,6 +24553,10 @@ db_version_patch='$db_version_patch' direntrytype='$direntrytype' dlext='$dlext' dlsrc='$dlsrc' +doubleinfbytes='$doubleinfbytes' +doublekind='$doublekind' +doublemantbits='$doublemantbits' +doublenanbytes='$doublenanbytes' doublesize='$doublesize' drand01='$drand01' drand48_r_proto='$drand48_r_proto' @@ -23427,12 +24630,13 @@ h_fcntl='$h_fcntl' h_sysfile='$h_sysfile' hint='$hint' hostcat='$hostcat' +hostgenerate='$hostgenerate' +hostosname='$hostosname' +hostperl='$hostperl' html1dir='$html1dir' html1direxp='$html1direxp' html3dir='$html3dir' html3direxp='$html3direxp' -hostgenerate='$hostgenerate' -hostperl='$hostperl' i16size='$i16size' i16type='$i16type' i32size='$i32size' @@ -23443,13 +24647,16 @@ i8size='$i8size' i8type='$i8type' i_arpainet='$i_arpainet' i_assert='$i_assert' +i_bfd='$i_bfd' i_bsdioctl='$i_bsdioctl' i_crypt='$i_crypt' i_db='$i_db' i_dbm='$i_dbm' i_dirent='$i_dirent' i_dlfcn='$i_dlfcn' +i_execinfo='$i_execinfo' i_fcntl='$i_fcntl' +i_fenv='$i_fenv' i_float='$i_float' i_fp='$i_fp' i_fp_class='$i_fp_class' @@ -23478,6 +24685,7 @@ i_poll='$i_poll' i_prot='$i_prot' i_pthread='$i_pthread' i_pwd='$i_pwd' +i_quadmath='$i_quadmath' i_rpcsvcdbm='$i_rpcsvcdbm' i_sgtty='$i_sgtty' i_shadow='$i_shadow' @@ -23485,6 +24693,7 @@ i_socks='$i_socks' i_stdarg='$i_stdarg' i_stdbool='$i_stdbool' i_stddef='$i_stddef' +i_stdint='$i_stdint' i_stdlib='$i_stdlib' i_string='$i_string' i_sunmath='$i_sunmath' @@ -23595,6 +24804,10 @@ lns='$lns' localtime_r_proto='$localtime_r_proto' locincpth='$locincpth' loclibpth='$loclibpth' +longdblinfbytes='$longdblinfbytes' +longdblkind='$longdblkind' +longdblmantbits='$longdblmantbits' +longdblnanbytes='$longdblnanbytes' longdblsize='$longdblsize' longlongsize='$longlongsize' longsize='$longsize' @@ -23603,10 +24816,6 @@ lpr='$lpr' ls='$ls' lseeksize='$lseeksize' lseektype='$lseektype' -mad='$mad' -madlyh='$madlyh' -madlyobj='$madlyobj' -madlysrc='$madlysrc' mail='$mail' mailx='$mailx' make='$make' @@ -23651,6 +24860,7 @@ nv_preserves_uv_bits='$nv_preserves_uv_bits' nveformat='$nveformat' nvfformat='$nvfformat' nvgformat='$nvgformat' +nvmantbits='$nvmantbits' nvsize='$nvsize' nvtype='$nvtype' o_nonblock='$o_nonblock' @@ -23804,9 +25014,11 @@ tail='$tail' tar='$tar' targetarch='$targetarch' targetdir='$targetdir' +targetenv='$targetenv' targethost='$targethost' targetmkdir='$targetmkdir' targetport='$targetport' +targetsh='$targetsh' tbl='$tbl' tee='$tee' test='$test' @@ -23837,6 +25049,7 @@ uquadtype='$uquadtype' use5005threads='$use5005threads' use64bitall='$use64bitall' use64bitint='$use64bitint' +usecbacktrace='$usecbacktrace' usecrosscompile='$usecrosscompile' usedevel='$usedevel' usedl='$usedl' @@ -23855,6 +25068,7 @@ usensgetexecutablepath='$usensgetexecutablepath' useopcode='$useopcode' useperlio='$useperlio' useposix='$useposix' +usequadmath='$usequadmath' usereentrant='$usereentrant' userelocatableinc='$userelocatableinc' useshrplib='$useshrplib' @@ -23934,6 +25148,9 @@ EOM esac fi +: preserve RCS keywords in files with variable substitution, grrr +Id='$Id' + : Finish up by extracting the .SH files case "$alldone" in exit)