X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=hints%2Fopenbsd.sh;h=e4b1360d9ad861c02d37938acda43d860d909c8e;hb=4e73d6a402bc493d66d19c409c41e1e271c6450b;hp=25781577ff26277ac2951a91c371fe75173bd01e;hpb=1bd427d5f57811e9fe1d95b1b3e11e517265645f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/hints/openbsd.sh b/hints/openbsd.sh index 2578157..e4b1360 100644 --- a/hints/openbsd.sh +++ b/hints/openbsd.sh @@ -2,7 +2,7 @@ # # hints file for OpenBSD; Todd Miller # Edited to allow Configure command-line overrides by -# Andy Dougherty +# Andy Dougherty # # To build with distribution paths, use: # ./Configure -des -Dopenbsd_distribution=defined @@ -11,42 +11,62 @@ # OpenBSD has a better malloc than perl... test "$usemymalloc" || usemymalloc='n' -# Currently, vfork(2) is not a real win over fork(2) but this will -# change starting with OpenBSD 2.7. -usevfork='true' +# malloc wrap works +case "$usemallocwrap" in +'') usemallocwrap='define' ;; +esac + +# Currently, vfork(2) is not a real win over fork(2). +usevfork="$undef" -# setre?[ug]id() have been replaced by the _POSIX_SAVED_IDS versions -# in 4.4BSD. Configure will find these but they are just emulated -# and do not have the same semantics as in 4.3BSD. -d_setregid=$undef -d_setreuid=$undef -d_setrgid=$undef -d_setruid=$undef +# In OpenBSD < 3.3, the setre?[ug]id() are emulated using the +# _POSIX_SAVED_IDS functionality which does not have the same +# semantics as 4.3BSD. Starting with OpenBSD 3.3, the original +# semantics have been restored. +case "$osvers" in +[0-2].*|3.[0-2]) + d_setregid=$undef + d_setreuid=$undef + d_setrgid=$undef + d_setruid=$undef +esac # # Not all platforms support dynamic loading... +# For the case of "$openbsd_distribution", the hints file +# needs to know whether we are using dynamic loading so that +# it can set the libperl name appropriately. +# Allow command line overrides. # -ARCH=`arch|sed 's/^OpenBSD.//'` +ARCH=`arch | sed 's/^OpenBSD.//'` case "${ARCH}-${osvers}" in -alpha-*|mips-*|vax-*|powerpc-2.[0-7]|m88k-*) - usedl=$undef +alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-*|hppa-*|vax-*) + test -z "$usedl" && usedl=$undef ;; *) - usedl=$define - d_dlopen=$define - d_dlerror=$define - # we use -fPIC here because -fpic is *NOT* enough for some of the + test -z "$usedl" && usedl=$define + # We use -fPIC here because -fpic is *NOT* enough for some of the # extensions like Tk on some OpenBSD platforms (ie: sparc) cccdlflags="-DPIC -fPIC $cccdlflags" case "$osvers" in [01].*|2.[0-7]|2.[0-7].*) lddlflags="-Bshareable $lddlflags" ;; - *) # from 2.8 onwards + 2.[8-9]|3.0) + ld=${cc:-cc} + lddlflags="-shared -fPIC $lddlflags" + ;; + *) # from 3.1 onwards ld=${cc:-cc} lddlflags="-shared -fPIC $lddlflags" + libswanted=`echo $libswanted | sed 's/ dl / /'` ;; esac + + # We need to force ld to export symbols on ELF platforms. + # Without this, dlopen() is crippled. + ELF=`${cc:-cc} -dM -E - 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 < +typedef $uquadtype 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 <