prevent attempts to load extension libraries more than once on darwin.
[p5sagit/p5-mst-13.2.git] / hints / netbsd.sh
index 7bd0a25..741413e 100644 (file)
@@ -1,11 +1,7 @@
 # hints/netbsd.sh
 #
-# talk to packages@netbsd.org if you want to change this file.
-#
-# netbsd keeps dynamic loading dl*() functions in /usr/lib/crt0.o,
-# so Configure doesn't find them (unless you abandon the nm scan).
-# this should be *just* 0.9 below as netbsd 0.9a was the first to
-# introduce shared libraries.
+# Please check with packages@netbsd.org before making modifications
+# to this file.
 
 case "$archname" in
 '')
@@ -13,30 +9,54 @@ case "$archname" in
     ;;
 esac
 
+# NetBSD keeps dynamic loading dl*() functions in /usr/lib/crt0.o,
+# so Configure doesn't find them (unless you abandon the nm scan).
+# Also, NetBSD 0.9a was the first release to introduce shared
+# libraries.
+#
 case "$osvers" in
 0.9|0.8*)
        usedl="$undef"
        ;;
 *)
-       if [ -f /usr/libexec/ld.elf_so ]; then
+       case `uname -m` in
+       pmax)
+               # NetBSD 1.3 and 1.3.1 on pmax shipped an `old' ld.so,
+               # which will not work.
+               case "$osvers" in
+               1.3|1.3.1)
+                       d_dlopen=$undef
+                       ;;
+               esac
+               ;;
+       esac
+       if test -f /usr/libexec/ld.elf_so; then
+               # ELF
                d_dlopen=$define
                d_dlerror=$define
-               ccdlflags="-Wl,-E -Wl,-R${PREFIX}/lib $ccdlflags"
                cccdlflags="-DPIC -fPIC $cccdlflags"
                lddlflags="--whole-archive -shared $lddlflags"
-       elif [ "`uname -m`" = "pmax" ]; then
-# NetBSD 1.3 and 1.3.1 on pmax shipped an `old' ld.so, which will not work.
-               d_dlopen=$undef
-       elif [ -f /usr/libexec/ld.so ]; then
+               rpathflag="-Wl,-rpath,"
+               #
+               # Include the whole libgcc.a into the perl executable so
+               # that certain symbols needed by loadable modules built as
+               # C++ objects (__eh_alloc, __pure_virtual, etc.) will always
+               # be defined.
+               #
+               # XXX This should be obsoleted by gcc-3.0.
+               #
+               ccdlflags="-Wl,-whole-archive -lgcc -Wl,-no-whole-archive \
+                       -Wl,-E $ccdlflags"
+       elif test -f /usr/libexec/ld.so; then
+               # a.out
                d_dlopen=$define
                d_dlerror=$define
-               ccdlflags="-Wl,-R${PREFIX}/lib $ccdlflags"
-# we use -fPIC here because -fpic is *NOT* enough for some of the
-# extensions like Tk on some netbsd platforms (the sparc is one)
                cccdlflags="-DPIC -fPIC $cccdlflags"
                lddlflags="-Bshareable $lddlflags"
+               rpathflag="-R"
        else
                d_dlopen=$undef
+               rpathflag=
        fi
        ;;
 esac
@@ -59,14 +79,68 @@ d_setrgid="$undef"
 d_setruid="$undef"
 
 # there's no problem with vfork.
-case "$usevfork" in
-'') usevfork=true ;;
-esac
+usevfork=true
+
+# This is there but in machine/ieeefp_h.
+ieeefp_h="define"
 
-# Pre-empt the /usr/bin/perl question of installperl.
-installusrbinperl='n'
+# This script UU/usethreads.cbu will get 'called-back' by Configure 
+# after it has prompted the user for whether to use threads. 
+cat > UU/usethreads.cbu <<'EOCBU' 
+case "$usethreads" in 
+$define|true|[yY]*) 
+       lpthread=
+       for xxx in pthread; do
+               for yyy in $loclibpth $plibpth $glibpth dummy; do
+                       zzz=$yyy/lib$xxx.a
+                       if test -f "$zzz"; then
+                               lpthread=$xxx
+                               break;
+                       fi
+                       zzz=$yyy/lib$xxx.so
+                       if test -f "$zzz"; then
+                               lpthread=$xxx
+                               break;
+                       fi
+                       zzz=`ls $yyy/lib$xxx.so.* 2>/dev/null`
+                       if test "X$zzz" != X; then
+                               lpthread=$xxx
+                               break;
+                       fi
+               done
+               if test "X$lpthread" != X; then
+                       break;
+               fi
+       done
+       if test "X$lpthread" != X; then
+               # Add -lpthread. 
+               libswanted="$libswanted $lpthread" 
+               # There is no libc_r as of NetBSD 1.5.2, so no c -> c_r.
+               # This will be revisited when NetBSD gains a native pthreads
+               # implementation.
+        else 
+               echo "$0: No POSIX threads library (-lpthread) found.  " \
+                    "You may want to install GNU pth.  Aborting." >&4 
+               exit 1 
+        fi
+       unset lpthread
+        ;; 
+esac 
+EOCBU
 
-# Recognize the NetBSD packages collection.
-# GDBM might be here.
-test -d /usr/pkg/lib     && loclibpth="$loclibpth /usr/pkg/lib"
-test -d /usr/pkg/include && locincpth="$locincpth /usr/pkg/include"
+# Set sensible defaults for NetBSD: look for local software in
+# /usr/pkg (NetBSD Packages Collection) and in /usr/local.
+#
+loclibpth="/usr/pkg/lib /usr/local/lib"
+locincpth="/usr/pkg/include /usr/local/include"
+case "$rpathflag" in
+'')
+       ldflags=
+       ;;
+*)
+       ldflags=
+       for yyy in $loclibpth; do
+               ldflags="$ldflags $rpathflag$yyy"
+       done
+       ;;
+esac