summaryrefslogtreecommitdiff
path: root/hints
diff options
context:
space:
mode:
authorMarcus Holland-Moritz <mhx-perl@gmx.net>2004-04-28 20:53:29 +0000
committerMarcus Holland-Moritz <mhx-perl@gmx.net>2004-04-28 20:53:29 +0000
commitcde164536693acd1d43df2720603245542e0ff9b (patch)
treee58aedbd7276d50c743a94a1d4d7f06925360b71 /hints
parent178eb895c5deb67bb37c347449d4e8f3288b8b7e (diff)
downloadperl-cde164536693acd1d43df2720603245542e0ff9b.tar.gz
When configuring for 64-bit support, check that the
C library functions for casting floating point values to 64-bit integer values are not broken. p4raw-id: //depot/perl@22750
Diffstat (limited to 'hints')
-rw-r--r--hints/openbsd.sh57
1 files changed, 57 insertions, 0 deletions
diff --git a/hints/openbsd.sh b/hints/openbsd.sh
index 51a75a9e63..b7f4d794e8 100644
--- a/hints/openbsd.sh
+++ b/hints/openbsd.sh
@@ -125,6 +125,63 @@ $define|true|[yY]*)
esac
EOCBU
+# This script UU/use64bitint.cbu will get 'called-back' by Configure
+# after it has prompted the user for whether to use 64-bitness.
+cat > UU/use64bitint.cbu <<'EOCBU'
+case "$use64bitint" in
+$define|true|[yY]*)
+ echo " "
+ echo "Checking if your C library has broken 64-bit functions..." >&4
+ $cat >check.c <<EOCP
+#include <stdio.h>
+typedef unsigned long long myULL;
+int main (void)
+{
+ struct {
+ double d;
+ myULL u;
+ } *p, test[] = {
+ {4294967303.15, 4294967303ULL},
+ {4294967294.2, 4294967294ULL},
+ {4294967295.7, 4294967295ULL},
+ {0.0, 0ULL}
+ };
+ for (p = test; p->u; p++) {
+ myULL x = (myULL)p->d;
+ if (x != p->u) {
+ printf("buggy\n");
+ return 0;
+ }
+ }
+ printf("ok\n");
+ return 0;
+}
+EOCP
+ set check
+ if eval $compile_ok; then
+ libcquad=`./check`
+ echo "Your C library's 64-bit functions are $libcquad."
+ else
+ echo "(I can't seem to compile the test program.)"
+ echo "Assuming that your C library's 64-bit functions are ok."
+ libcquad="ok"
+ fi
+ $rm -f check.c check
+
+ case "$libcquad" in
+ buggy*)
+ cat >&4 <<EOM
+
+*** You have a C library with broken 64-bit functions.
+*** 64-bit support does not work reliably in this configuration.
+*** Cannot continue, aborting.
+EOM
+ exit 1
+ ;;
+ esac
+esac
+EOCBU
+
# When building in the OpenBSD tree we use different paths
# This is only part of the story, the rest comes from config.over
case "$openbsd_distribution" in