# 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
'')
;;
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"
;;
*)
+ 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
- # Include the whole libgcc.a, required for Xerces-P, which
- # needs __eh_alloc, __pure_virtual, and others.
- # XXX This should be obsoleted by gcc-3.0.
- ccdlflags="-Wl,-whole-archive -lgcc -Wl,-no-whole-archive \
- -Wl,-E $ccdlflags"
cccdlflags="-DPIC -fPIC $cccdlflags"
- lddlflags="--whole-archive -shared $lddlflags"
- elif test "`uname -m`" = "pmax"; then
-# NetBSD 1.3 and 1.3.1 on pmax shipped an `old' ld.so, which will not work.
+ lddlflags="-shared $lddlflags"
+ cat >UU/cc.cbu <<'EOCBU'
+# gcc 4.6 doesn't support --whole-archive, but it's required for the
+# system gcc to build correctly, so check for it
+echo 'int f(void) { return 0; }' >try.c
+if ${cc:-cc} $cccdlflags -c try.c -otry.o 2>&1 &&
+ ${cc:-cc} --whole-archive $lddlflags try.o -otry.so 2>&1 ; then
+ lddlflags="--whole-archive $lddlflags"
+fi
+rm try.c try.o try.so 2>/dev/null
+EOCBU
+ rpathflag="-Wl,-rpath,"
case "$osvers" in
- 1.3|1.3.1)
- d_dlopen=$undef
+ 1.[0-5]*)
+ #
+ # 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.
+ #
+ ccdlflags="-Wl,-whole-archive -lgcc \
+ -Wl,-no-whole-archive -Wl,-E $ccdlflags"
+ ;;
+ *)
+ ccdlflags="-Wl,-E $ccdlflags"
;;
esac
elif test -f /usr/libexec/ld.so; then
+ # a.out
d_dlopen=$define
d_dlerror=$define
-# 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
d_setreuid="$undef"
;;
esac
+case "$osvers" in
+0.9*|1.*|2.*|3.*|4.*|5.*|6.*)
+ d_getprotoent_r="$undef"
+ d_getprotobyname_r="$undef"
+ d_getprotobynumber_r="$undef"
+ d_setprotoent_r="$undef"
+ d_endprotoent_r="$undef"
+ d_getservent_r="$undef"
+ d_getservbyname_r="$undef"
+ d_getservbyport_r="$undef"
+ d_setservent_r="$undef"
+ d_endservent_r="$undef"
+ d_getprotoent_r_proto="0"
+ d_getprotobyname_r_proto="0"
+ d_getprotobynumber_r_proto="0"
+ d_setprotoent_r_proto="0"
+ d_endprotoent_r_proto="0"
+ d_getservent_r_proto="0"
+ d_getservbyname_r_proto="0"
+ d_getservbyport_r_proto="0"
+ d_setservent_r_proto="0"
+ d_endservent_r_proto="0"
+ ;;
+esac
# These are obsolete in any netbsd.
d_setrgid="$undef"
# This is there but in machine/ieeefp_h.
ieeefp_h="define"
-# 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]*)
+# 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 thislib in pthread; do
- for thisdir in $loclibpth $plibpth $glibpth dummy; do
- xxx=$thisdir/lib$thislib.a
- if test -f "$xxx"; then
- lpthread=$thislib
+ 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
- xxx=$thisdir/lib$thislib.so
- if test -f "$xxx"; then
- lpthread=$thislib
+ zzz=$yyy/lib$xxx.so
+ if test -f "$zzz"; then
+ lpthread=$xxx
break;
fi
- xxx=`ls $thisdir/lib$thislib.so.* 2>/dev/null`
- if test "X$xxx" != X; then
- lpthread=$thislib
+ zzz=`ls $yyy/lib$xxx.so.* 2>/dev/null`
+ if test "X$zzz" != X; then
+ lpthread=$xxx
break;
fi
done
fi
done
if test "X$lpthread" != X; then
- # Add -lpthread.
- libswanted="$libswanted $lpthread"
+ # 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
+ else
echo "$0: No POSIX threads library (-lpthread) found. " \
- "You may want to install GNU pth. Aborting." >&4
- exit 1
- fi
- unset thisdir
- unset thislib
+ "You may want to install GNU pth. Aborting." >&4
+ exit 1
+ fi
unset lpthread
- ;;
-esac
+
+ # several reentrant functions are embedded in libc, but haven't
+ # been added to the header files yet. Let's hold off on using
+ # them until they are a valid part of the API
+ case "$osvers" in
+ [012].*|3.[0-1])
+ d_getprotobyname_r=$undef
+ d_getprotobynumber_r=$undef
+ d_getprotoent_r=$undef
+ d_getservbyname_r=$undef
+ d_getservbyport_r=$undef
+ d_getservent_r=$undef
+ d_setprotoent_r=$undef
+ d_setservent_r=$undef
+ d_endprotoent_r=$undef
+ d_endservent_r=$undef ;;
+ esac
+ ;;
+
+esac
EOCBU
-# Recognize the NetBSD packages collection.
-# GDBM might be here, GNU pth might be there.
-if test -d /usr/pkg/lib; then
- loclibpth="$loclibpth /usr/pkg/lib"
- if test -f /usr/libexec/ld.elf_so; then
- ldflags="$ldflags -Wl,-R/usr/pkg/lib"
- else
- ldflags="$ldflags -R/usr/pkg/lib"
- fi
-fi
-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
+
+case `uname -m` in
+alpha)
+ echo 'int main() {}' > try.c
+ gcc=`${cc:-cc} -v -c try.c 2>&1|grep 'gcc version egcs-2'`
+ case "$gcc" in
+ '' | "gcc version egcs-2.95."[3-9]*) ;; # 2.95.3 or better okay
+ *) cat >&4 <<EOF
+***
+*** Your gcc ($gcc) is known to be
+*** too buggy on netbsd/alpha to compile Perl with optimization.
+*** It is suggested you install the lang/gcc package which should
+*** have at least gcc 2.95.3 which should work okay: use for example
+*** Configure -Dcc=/usr/pkg/gcc-2.95.3/bin/cc. You could also
+*** Configure -Doptimize=-O0 to compile Perl without any optimization
+*** but that is not recommended.
+***
+EOF
+ exit 1
+ ;;
+ esac
+ rm -f try.*
+ ;;
+esac
+
+# NetBSD/sparc 1.5.3/1.6.1 dumps core in the semid_ds test of Configure.
+case `uname -m` in
+sparc) d_semctl_semid_ds=undef ;;
+esac
+
+# malloc wrap works
+case "$usemallocwrap" in
+'') usemallocwrap='define' ;;
+esac
+
+# don't use perl malloc by default
+case "$usemymalloc" in
+'') usemymalloc=n ;;
+esac