X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/ac839763e543196bfc9e91ed933a5109b69ebfe5..b88265bf55b10378bad9d6fa48c8bc3d9e1e763d:/Configure diff --git a/Configure b/Configure index 5177c33..3d65fd2 100755 --- a/Configure +++ b/Configure @@ -475,6 +475,7 @@ d_fcntl_can_lock='' d_fd_macros='' d_fd_set='' d_fds_bits='' +d_fdclose='' d_fdim='' d_fegetround='' d_fgetpos='' @@ -784,6 +785,13 @@ d_shmctl='' d_shmdt='' d_shmget='' d_sigaction='' +d_siginfo_si_errno='' +d_siginfo_si_pid='' +d_siginfo_si_uid='' +d_siginfo_si_addr='' +d_siginfo_si_status='' +d_siginfo_si_band='' +d_siginfo_si_value='' d_signbit='' d_sigprocmask='' d_sigsetjmp='' @@ -1464,7 +1472,7 @@ 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="cl pthread socket bind inet nsl nm ndbm gdbm dbm db malloc dl ld" +libswanted="cl pthread socket bind inet nsl 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. @@ -1679,7 +1687,6 @@ alldone='' error='' silent='' extractsh='' -override='' knowitall='' rm -f optdef.sh posthint.sh cat >optdef.sh </dev/null 2>&1 if test $? = 0; then echo "Configure does not support \\ in -D arguments" exit 1 @@ -2040,7 +2047,7 @@ true) echo "Fetching answers from $config_sh..." cd .. . $config_sh - test "$override" && . ./optdef.sh + . UU/optdef.sh echo " " . UU/extract rm -rf UU @@ -3793,7 +3800,7 @@ cd UU hint=previous ;; esac -test "$override" && . ./optdef.sh +. ./optdef.sh : Restore computed paths for file in $loclist $trylist; do @@ -5550,7 +5557,12 @@ esac : the following weeds options from ccflags that are of no interest to cpp case "$cppflags" in '') cppflags="$ccflags" ;; -*) cppflags="$cppflags $ccflags" ;; +*) set X $ccflags; shift + case " $cppflags " in + *" $1 "*) ;; # Try to avoid doubling the cppflags. + *) cppflags="$cppflags $ccflags" ;; + esac + ;; esac case "$gccversion" in 1*) cppflags="$cppflags -D__GNUC__" @@ -6952,17 +6964,26 @@ int main() { } #endif /* For alignment 32-bit platforms have the 80 bits in 12 bytes, - * while 64-bits platforms have it in 16 bytes. */ + * while 64-bits platforms have it in 16 bytes. The trailing bytes + * cannot be trusted. */ #if LDBL_MANT_DIG == 64 && (LONGDBLSIZE == 16 || LONGDBLSIZE == 12) - if (b[0] == 0xCD && b[9] == 0xBF && b[10] == 0x00) { + if (b[0] == 0xCD && b[9] == 0xBF) { /* 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? */ + if (b[0] == 0xBF && b[9] == 0xCD) { + /* Is there ever big-endian 80-bit, really? + * + * The Motorola 68881 had another "extended precision" format: + * sign:1 exp:15 zero:16 integer:1 mantissa:63 + * for total of 96 bits of bytes. The zero bits were unused. + * See "M68000 FAMILY PROGRAMMER’S REFERENCE MANUAL" for more details. + * If it ever becomes relevant, this format should be allocated + * a new doublekind code since it's quite different from the Intel x87. + */ printf("4\n"); exit(0); } @@ -6971,17 +6992,35 @@ int main() { /* 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, + /* double double 128-bit fully little-endian, + * little-endian doubles in little-endian order, * 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: + /* double double 128-bit fully big-endian, + * big-endian doubles in big-endian order, + * 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); } + if (b[0] == 0x9A && b[7] == 0xBF && b[8] == 0x9A && b[15] == 0x3C) { + /* double double 128-bit mixed endian. + * little-endian doubles in big-endian order, + * e.g. ppc64el, + * 9a 99 99 99 99 99 b9 bf 9a 99 99 99 99 99 59 3c */ + printf("7\n"); + exit(0); + } + if (b[0] == 0x3C && b[7] == 0x9A && b[8] == 0xBF && b[15] == 0x9A) { + /* double double 128-bit mixed endian, + * big-endian doubles in little-endian order, + * 3c 59 99 99 99 99 99 9a bf b9 99 99 99 99 99 9a */ + printf("8\n"); + exit(0); + } #endif printf("-1\n"); /* unknown */ exit(0); @@ -7002,8 +7041,10 @@ case "$longdblkind" in 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 ;; +5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >& 4 ;; +6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >& 4 ;; +7) echo "You have 128-bit mixed double-double long doubles (64-bit LEs in BE)." >& 4 ;; +8) echo "You have 128-bit mixed double-double long doubles (64-bit BEs in LE)." >& 4 ;; *) echo "Cannot figure out your long double." >&4 ;; esac $rm_try @@ -8279,6 +8320,7 @@ runnm=false : with g++ one needs -shared to get is-in-libc to work for dlopen case "$gccversion" in '') ;; +*Clang*) ;; *) case "$d_cplusplus" in "$define") ccflags="$ccflags -shared" ;; esac @@ -10723,6 +10765,25 @@ set $varname; eval $setvar; $rm_try' +: Define hasfield_t macro for Configure internal use +hasfield_t='varname=$1; struct=$2; type=$3; field=$4; shift; shift; shift; shift; +while $test $# -ge 2; do + case "$1" in + $define) echo "#include <$2>";; + esac ; + shift 2; +done > try.c; +echo "int main () { $struct foo; $type bar = foo.$field; }" >> try.c; +set try; +if eval $compile; then + val="$define"; +else + val="$undef"; +fi; +set $varname; +eval $setvar; +$rm_try' + : see if we should include time.h, sys/time.h, or both echo " " if test "X$timeincl" = X; then @@ -13327,7 +13388,7 @@ echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4 case "$eagain" in '') case "$d_fork:$d_pipe:$d_alarm" in - define:define) + define:define:define) $cat head.c > try.c $cat >>try.c < @@ -13957,6 +14018,10 @@ EOM fi $rm_try +: see if fdclose exists +set fdclose d_fdclose +eval $inlibc + : see if fdim exists set fdim d_fdim eval $inlibc @@ -17159,16 +17224,21 @@ EOM set readlink d_readlink eval $inlibc -: Check if exe is symlink to abs path of executing program +: Check if there is a /proc symlink to the abs path of +: the executing program. We will honor hints of d_procselfexe=$undef +: or procselfexe being non-empty, otherwise will try to determine both +: if we have readlink. +: AmigaOS will attempt to mount proc: aka /proc, if /proc/... is +: referenced, and AmigaOS does not have a proc filesystem anyway. echo " " -procselfexe='' val="$undef" -case "$d_procselfexe" in -'') -case "$d_readlink" in - "$define") - : NetBSD first as /proc/self is a symlink to /proc/curproc, and it feels - : more tidy to avoid an extra level of symlink +if $test "X$d_procselfexe" = Xundef; then + procselfexe='' +elif $test "X$procselfexe" != X -a "X$procselfexe" != 'X '; then + val="$define" +elif $test "X$d_readlink" = Xdefine; then + : NetBSD first as /proc/self is a symlink to /proc/curproc, + : and it feels more tidy to avoid an extra level of symlink set NetBSD /proc/curproc/exe Linux /proc/self/exe FreeBSD /proc/curproc/file Solaris /proc/self/path/a.out while test $# -gt 0; do type=$1; try=$2 @@ -17184,13 +17254,10 @@ case "$d_readlink" in fi fi done - ;; -esac +fi $rm -f reflect set d_procselfexe eval $setvar -;; -esac : backward compatibility for d_hvfork if test X$d_hvfork != X; then @@ -20511,14 +20578,22 @@ else ;; esac ;; - 5) # 128-bit LE "double double" + 5) # 128-bit LE-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" + 6) # 128-bit BE-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' ;; + 7) # 128-bit LE-BE "double double" + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; + 8) # 128-bit BE-LE "double double" + longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' + ;; *) # No idea. longdblinfbytes=$undef longdblnanbytes=$undef @@ -20577,7 +20652,7 @@ $cat >try.c <&4 + set d_siginfo_si_errno siginfo_t int si_errno $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_pid field...">&4 + set d_siginfo_si_pid siginfo_t $pidtype si_pid $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_uid field...">&4 + set d_siginfo_si_uid siginfo_t $uidtype si_uid $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_addr field...">&4 + set d_siginfo_si_addr siginfo_t "void *" si_addr $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_status field...">&4 + set d_siginfo_si_status siginfo_t int si_status $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_band field...">&4 + set d_siginfo_si_band siginfo_t long si_band $d_sigaction signal.h + eval $hasfield_t; + + echo "Checking if your siginfo_t has si_value field...">&4 + set d_siginfo_si_value siginfo_t "union sigval" si_value $d_sigaction signal.h + eval $hasfield_t; + + ;; +esac + : Determine if we can use sysctl with KERN_PROC_PATHNAME to find executing program echo " " echo "Determining whether we can use sysctl with KERN_PROC_PATHNAME to find executing program..." >&4 @@ -23251,7 +23360,7 @@ fi : add -D_FORTIFY_SOURCE if feasible and not already there case "$gccversion" in -4.*) case "$optimize$ccflags" in +[45].*) 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 @@ -23261,11 +23370,11 @@ case "$gccversion" in ;; esac ;; - *) echo "You have gcc 4.* but not optimizing, not adding -D_FORTIFY_SOURCE." >&4 + *) echo "You have gcc 4.* or later but not optimizing, not adding -D_FORTIFY_SOURCE." >&4 ;; esac ;; -*) echo "You seem not to have gcc 4.*, not adding -D_FORTIFY_SOURCE." >&4 +*) echo "You seem not to have gcc 4.* or later, not adding -D_FORTIFY_SOURCE." >&4 ;; esac @@ -23618,9 +23727,14 @@ for xxx in $xs_extensions ; do esac ;; Sys/Syslog|sys/syslog) - : XXX syslog requires socket - case "$d_socket" in - true|$define|y) avail_ext="$avail_ext $xxx" ;; + case $osname in + amigaos) ;; # not really very useful on AmigaOS + *) + : XXX syslog requires socket + case "$d_socket" in + true|$define|y) avail_ext="$avail_ext $xxx" ;; + esac + ;; esac ;; Thread|thread) @@ -24164,6 +24278,7 @@ 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_fdclose='$d_fdclose' d_fdim='$d_fdim' d_fds_bits='$d_fds_bits' d_fegetround='$d_fegetround' @@ -24468,6 +24583,13 @@ d_shmctl='$d_shmctl' d_shmdt='$d_shmdt' d_shmget='$d_shmget' d_sigaction='$d_sigaction' +d_siginfo_si_errno='$d_siginfo_si_errno' +d_siginfo_si_pid='$d_siginfo_si_pid' +d_siginfo_si_uid='$d_siginfo_si_uid' +d_siginfo_si_addr='$d_siginfo_si_addr' +d_siginfo_si_status='$d_siginfo_si_status' +d_siginfo_si_band='$d_siginfo_si_band' +d_siginfo_si_value='$d_siginfo_si_value' d_signbit='$d_signbit' d_sigprocmask='$d_sigprocmask' d_sigsetjmp='$d_sigsetjmp'