d_fd_macros=''
d_fd_set=''
d_fds_bits=''
+d_fdclose=''
d_fdim=''
d_fegetround=''
d_fgetpos=''
: 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 -q '\\' optdef.sh
+grep '\\' optdef.sh >/dev/null 2>&1
if test $? = 0; then
echo "Configure does not support \\ in -D arguments"
exit 1
echo "Fetching answers from $config_sh..."
cd ..
. $config_sh
- test "$override" && . ./optdef.sh
+ . UU/optdef.sh
echo " "
. UU/extract
rm -rf UU
hint=previous
;;
esac
-test "$override" && . ./optdef.sh
+. ./optdef.sh
: Restore computed paths
for file in $loclist $trylist; do
: 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__"
}
#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 "$eagain" in
'')
case "$d_fork:$d_pipe:$d_alarm" in
- define:define)
+ 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 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
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
;;
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
* 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 */
+# 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. */
: 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
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'