Until otherwise proven.
[p5sagit/p5-mst-13.2.git] / hints / openbsd.sh
index 2578157..4839d04 100644 (file)
@@ -25,28 +25,40 @@ d_setruid=$undef
 
 #
 # 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-*|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 - </dev/null | grep __ELF__`
+       test -n "$ELF" && ldflags="-Wl,-E $ldflags"
        ;;
 esac
 
@@ -69,7 +81,7 @@ d_suidsafe=$define
 
 # cc is gcc so we can do better than -O
 # Allow a command-line override, such as -Doptimize=-g
-case "$ARCH" in
+case ${ARCH} in
 m88k)
    optimize='-O0'
    ;;
@@ -86,7 +98,9 @@ $define|true|[yY]*)
        # any openbsd version dependencies with pthreads?
        ccflags="-pthread $ccflags"
        ldflags="-pthread $ldflags"
+       # Add -lpthread.  Also change from -lc to -lc_r
        libswanted="$libswanted pthread"
+       libswanted=`echo " $libswanted "| sed -e 's/ c / c_r /' -e 's/^ //' -e 's/ $//'`
        # This is strange.
        usevfork="$undef"
 esac