blob: 17a4ff67510f1d08922da15c83bcab54d15223e3 [file] [log] [blame]
# hints/netbsd.sh
#
# Please check with packages@netbsd.org before making modifications
# to this file.
case "$archname" in
'')
archname=`uname -m`-${osname}
;;
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
cccdlflags="-DPIC -fPIC $cccdlflags"
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.[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
cccdlflags="-DPIC -fPIC $cccdlflags"
lddlflags="-Bshareable $lddlflags"
rpathflag="-R"
else
d_dlopen=$undef
rpathflag=
fi
;;
esac
# netbsd had these but they don't really work as advertised, in the
# versions listed below. if they are defined, then there isn't a
# way to make perl call setuid() or setgid(). if they aren't, then
# ($<, $>) = ($u, $u); will work (same for $(/$)). this is because
# you can not change the real userid of a process under 4.4BSD.
# netbsd fixed this in 1.3.2.
case "$osvers" in
0.9*|1.[012]*|1.3|1.3.1)
d_setregid="$undef"
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"
d_setruid="$undef"
# there's no problem with vfork.
usevfork=true
# 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]*)
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
# 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
# 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