exit 1
fi
-if test ! -c /dev/null ; then
+if test -f /sys/utilities/MultiView ; then
+ # AmigaOS, test -c for /dev/null is not useful
+ :
+elif test ! -c /dev/null ; then
cat <<EOF
***
*** I'm sorry, but /dev/null appears to be a file rather than a device.
d_fd_macros=''
d_fd_set=''
d_fds_bits=''
+d_fdclose=''
d_fdim=''
d_fegetround=''
d_fgetpos=''
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_longlong=''
longlongsize=''
d_lrint=''
+d_lrintl=''
d_lround=''
+d_lroundl=''
d_lseekproto=''
d_lstat=''
d_madvise=''
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=''
d_inc_version_list=''
inc_version_list=''
inc_version_list_init=''
+doubleinfbytes=''
+doublenanbytes=''
+longdblinfbytes=''
+longdblnanbytes=''
installprefix=''
installprefixexp=''
installstyle=''
man3dir=''
man3direxp=''
man3ext=''
+doublemantbits=''
+longdblmantbits=''
+nvmantbits=''
modetype=''
multiarch=''
mydomain=''
: 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.
error=''
silent=''
extractsh=''
-override=''
knowitall=''
rm -f optdef.sh posthint.sh
cat >optdef.sh <<EOS
-s) shift; silent=true; realsilent=true;;
-E) shift; alldone=exit;;
-K) shift; knowitall=true;;
- -O) shift; override=true;;
+ -O) shift;;
-S) shift; silent=true; extractsh=true;;
-D)
shift
-Dprefix=/opt/perl5 choose your destination
-E : stop at the end of questions, after having produced config.sh.
-K : do not use unless you know what you are doing.
- -O : let -D and -U override definitions from loaded configuration file.
+ -O : ignored for backward compatibility
-S : perform variable substitutions on all .SH files (can mix with -f)
-U : undefine symbol:
-U symbol symbol gets the value 'undef'
: run the defines and the undefines, if any, but leave the file out there...
touch optdef.sh
+grep '\\' optdef.sh >/dev/null 2>&1
+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
package='perl5'
first=`echo $package | sed -e 's/^\(.\).*/\1/'`
last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
-case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
-ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
+case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
+ABYZ-abyz) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
esac
echo "Fetching answers from $config_sh..."
cd ..
. $config_sh
- test "$override" && . ./optdef.sh
+ . UU/optdef.sh
echo " "
. UU/extract
rm -rf UU
: see whether [:lower:] and [:upper:] are supported character classes
echo " "
-case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
-ABYZ)
+case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`"-"`echo AbyZ | $tr '[:upper:]' '[:lower:]' 2>/dev/null`" in
+ABYZ-abyz)
echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
up='[:upper:]'
low='[:lower:]'
$test -f /bin/mips && /bin/mips && osname=mips
$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
+ $test -f /sys/utilities/MultiView && osname=amigaos
if $test -d /MachTen -o -d /MachTen_Folder; then
osname=machten
if $test -x /sbin/version; then
hint=previous
;;
esac
-test "$override" && . ./optdef.sh
+. ./optdef.sh
: Restore computed paths
for file in $loclist $trylist; do
dos|vms)
: XXX Should be a Configure test for double-dots in filenames.
version=`echo $revision $patchlevel $subversion | \
- $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
+ $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
api_versionstring=`echo $api_revision $api_version $api_subversion | \
- $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
+ $awk '{ printf "%d_%d_%d", $1, $2, $3 }'`
;;
*)
version=`echo $revision $patchlevel $subversion | \
- $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
+ $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
api_versionstring=`echo $api_revision $api_version $api_subversion | \
- $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
+ $awk '{ printf "%d.%d.%d", $1, $2, $3 }'`
;;
esac
: Special case the 5.005_xx maintenance series, which used 5.005
# is to add the flag to the flags passed to the compiler at link time,
# as that way the compiler can do the right implementation dependant
# thing. (NWC)
- case "$gccversion" in
- ?*) set stack-protector-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
- ;;
+ case "$osname" in
+ amigaos) ;; # -fstack-protector builds but doesn't work
+ *) case "$gccversion" in
+ ?*) 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
;;
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__"
echo " "
echo "Computing filename position in cpp output for #include directives..." >&4
case "$osname" in
+amigaos) fieldn=3 ;; # Workaround for a bug in abc (pdksh).
+esac
+case "$fieldn" in
+'')
+case "$osname" in
vos) testaccess=-e ;;
*) testaccess=-r ;;
esac
chmod +x fieldn
fieldn=`./fieldn`
$rm -f foo.c fieldn
+;;
+esac
case $fieldn in
'') pos='???';;
1) pos=first;;
}
#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);
}
/* 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);
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
case "$ptrsize" in
'')
echo "Checking to see how big your pointers are..." >&4
- $cat >>try.c <<EOCP
+ $cat >try.c <<EOCP
#include <stdio.h>
#$i_stdlib I_STDLIB
#ifdef I_STDLIB
Perl can be built to support DTrace on platforms that support it.
DTrace is a diagnosis and performance analysis tool from Sun.
-If this doesn't make any sense to you, just accept the default '$dflt'.
+If this doesn't make any sense to you, just accept the default.
EOM
while $test 1 ; do
: 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
exit(1); /* fail */
}
EOM
- if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
+ if $cc $ccflags $ldflags -o a.out try.c >/dev/null 2>&1 && $run ./a.out; then
bin_ELF="$define"
fi
$rm_try
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
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
echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
case "$eagain" in
'')
- case "$d_fork:$d_pipe" in
- define:define)
+ case "$d_fork:$d_pipe:$d_alarm" in
+ define:define:define)
$cat head.c > try.c
$cat >>try.c <<EOCP
#include <errno.h>
fi
$rm_try
+: see if fdclose exists
+set fdclose d_fdclose
+eval $inlibc
+
: see if fdim exists
set fdim d_fdim
eval $inlibc
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
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
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_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
fi
fi
done
- ;;
-esac
+fi
$rm -f reflect
set d_procselfexe
eval $setvar
;;
esac
+: Check what kind of inf/nan your system has
+$echo "Checking the kind of infinities and nans you have..." >&4
+$cat >try.c <<EOP
+#define DOUBLESIZE $doublesize
+#$d_longdbl HAS_LONG_DOUBLE
+#ifdef HAS_LONG_DOUBLE
+#define LONGDBLSIZE $longdblsize
+#define LONGDBLKIND $longdblkind
+#endif
+#$i_math I_MATH
+#ifdef I_MATH
+#include <math.h>
+#endif
+#include <stdio.h>
+/* 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-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-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
+ ;;
+ esac
+fi
+$rm_try
+
+: Check the length of the double mantissa
+$echo "Checking how many mantissa bits your doubles have..." >&4
+$cat >try.c <<EOP
+#$i_float I_FLOAT
+#$i_sunmath I_SUNMATH
+#ifdef I_FLOAT
+# include <float.h>
+#endif
+#ifdef I_SUNMATH
+# include <sunmath.h>
+#endif
+#ifdef DBL_MANT_DIG
+# define BITS (DBL_MANT_DIG - 1) /* the implicit bit does not count */
+#endif
+#include <stdio.h>
+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 <<EOP
+#$i_float I_FLOAT
+#$i_sunmath I_SUNMATH
+#ifdef I_FLOAT
+# include <float.h>
+#endif
+#ifdef I_SUNMATH
+# include <sunmath.h>
+#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 || $longdblkind == 7 || $longdblkind == 8) /* 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 <stdio.h>
+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
esac
: Trace out the files included by signal.h, then look for SIGxxx names.
+case "$sig_num_init" in
+'')
if [ "X$fieldn" = X ]; then
: Just make some guesses. We check them later.
xxx="$sysroot/usr/include/signal.h $sysroot/usr/include/sys/signal.h"
}'
sig_size=`echo $sig_name | awk '{print NF}'`
$rm -f signal signal.c signal.awk signal.lst signal_cmd
+;;
+esac
: Check size of size
echo " "
;;
esac
+: see what siginfo fields we have
+case "$d_sigaction" in
+"$define")
+ echo "Checking if your siginfo_t has si_errno field...">&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
: 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
;;
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
case "$xxx" in
DynaLoader|dynaload) ;;
*)
- this_ext=`echo $xxx | $sed -e s/-/\\\//g`;
+ this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`;
case "$this_ext" in
Scalar/List/Utils) this_ext="List/Util" ;;
PathTools) this_ext="Cwd" ;;
esac;
- echo " $xs_extensions $nonxs_extensions" > $tdir/$$.tmp;
- if $contains " $this_ext " $tdir/$$.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;
esac;
echo "Ok. You will need to correct config.sh before running make." >&4;
fi;
- $ls -1 $xxx > $tdir/$$.tmp;
- if $contains "\.xs$" $tdir/$$.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$" $tdir/$$.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
+ elif $test -d "$xxx"; then
nonxs_extensions="$nonxs_extensions $this_ext";
fi;
- $rm -f $tdir/$$.tmp;
+ $rm -f "$tdir/$$.tmp";
;;
esac;
done'
avail_ext=''
for xxx in $xs_extensions ; do
case "$xxx" in
+ Amiga*)
+ case "$osname" in
+ amigaos) avail_ext="$avail_ext $xxx" ;;
+ esac
+ ;;
DB_File|db_file)
case "$i_db" in
$define) avail_ext="$avail_ext $xxx" ;;
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)
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'
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_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'
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'
direntrytype='$direntrytype'
dlext='$dlext'
dlsrc='$dlsrc'
+doubleinfbytes='$doubleinfbytes'
doublekind='$doublekind'
+doublemantbits='$doublemantbits'
+doublenanbytes='$doublenanbytes'
doublesize='$doublesize'
drand01='$drand01'
drand48_r_proto='$drand48_r_proto'
localtime_r_proto='$localtime_r_proto'
locincpth='$locincpth'
loclibpth='$loclibpth'
+longdblinfbytes='$longdblinfbytes'
longdblkind='$longdblkind'
+longdblmantbits='$longdblmantbits'
+longdblnanbytes='$longdblnanbytes'
longdblsize='$longdblsize'
longlongsize='$longlongsize'
longsize='$longsize'
nveformat='$nveformat'
nvfformat='$nvfformat'
nvgformat='$nvgformat'
+nvmantbits='$nvmantbits'
nvsize='$nvsize'
nvtype='$nvtype'
o_nonblock='$o_nonblock'