X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/f4cb4c40de81ad9c5a8e775c2298ec5a52130124..dafe9eeb9e0b74c1fc0c4e480d8e9c452c2db1ba:/hints/freebsd.sh diff --git a/hints/freebsd.sh b/hints/freebsd.sh index 4efca6a..bf89069 100644 --- a/hints/freebsd.sh +++ b/hints/freebsd.sh @@ -1,4 +1,4 @@ -# Oringal based on info from +# Original based on info from # Carl M. Fongheiser # Date: Thu, 28 Jul 1994 19:17:05 -0500 (CDT) # @@ -6,21 +6,349 @@ # Ollivier Robert # Date: Wed, 28 Sep 1994 00:37:46 +0100 (MET) # +# Additional 2.* defines from +# Ollivier Robert +# Date: Sat, 8 Apr 1995 20:53:41 +0200 (MET DST) +# +# Additional 2.0.5 and 2.1 defined from +# Ollivier Robert +# Date: Fri, 12 May 1995 14:30:38 +0200 (MET DST) +# +# Additional 2.2 defines from +# Mark Murray +# Date: Wed, 6 Nov 1996 09:44:58 +0200 (MET) +# +# Modified to ensure we replace -lc with -lc_r, and +# to put in place-holders for various specific hints. +# Andy Dougherty +# Date: Tue Mar 10 16:07:00 EST 1998 +# +# Support for FreeBSD/ELF +# Ollivier Robert +# Date: Wed Sep 2 16:22:12 CEST 1998 +# +# The two flags "-fpic -DPIC" are used to indicate a +# will-be-shared object. Configure will guess the -fpic, (and the +# -DPIC is not used by perl proper) but the full define is included to +# be consistent with the FreeBSD general shared libs building process. +# +# setreuid and friends are inherently broken in all versions of FreeBSD +# before 2.1-current (before approx date 4/15/95). It is fixed in 2.0.5 +# and what-will-be-2.1 +# + case "$osvers" in 0.*|1.0*) usedl="$undef" ;; -*) d_dlopen="$define" - cccdlflags='-DPIC -fpic' - lddlflags='-Bshareable' +1.1*) malloctype='void *' groupstype='int' d_setregid='undef' d_setreuid='undef' d_setrgid='undef' d_setruid='undef' - i_unistd='undef' ;; +2.0-release*) + d_setregid='undef' + d_setreuid='undef' + d_setrgid='undef' + d_setruid='undef' + ;; +# +# Trying to cover 2.0.5, 2.1-current and future 2.1/2.2 +# It does not covert all 2.1-current versions as the output of uname +# changed a few times. +# +# Even though seteuid/setegid are available, they've been turned off +# because perl isn't coded with saved set[ug]id variables in mind. +# In addition, a small patch is required to suidperl to avoid a security +# problem with FreeBSD. +# +2.0.5*|2.0-built*|2.1*) + usevfork='true' + case "$usemymalloc" in + "") usemymalloc='n' + ;; + esac + d_setregid='define' + d_setreuid='define' + d_setegid='undef' + d_seteuid='undef' + test -r ./broken-db.msg && . ./broken-db.msg + ;; +# +# 2.2 and above have phkmalloc(3). +# don't use -lmalloc (maybe there's an old one from 1.1.5.1 floating around) +2.2*) + usevfork='true' + case "$usemymalloc" in + "") usemymalloc='n' + ;; + esac + libswanted=`echo $libswanted | sed 's/ malloc / /'` + libswanted=`echo $libswanted | sed 's/ bind / /'` + # iconv gone in Perl 5.8.1, but if someone compiles 5.8.0 or earlier. + libswanted=`echo $libswanted | sed 's/ iconv / /'` + d_setregid='define' + d_setreuid='define' + d_setegid='define' + d_seteuid='define' + # d_dosuid='define' # Obsolete. + ;; +*) usevfork='true' + case "$usemymalloc" in + "") usemymalloc='n' + ;; + esac + libswanted=`echo $libswanted | sed 's/ malloc / /'` + ;; +esac + +case "$osvers" in +10.*) + # dtrace on 10.x needs libelf symbols, but we don't know if the + # user is going to request usedtrace and there's no .cbu for usedtrace + libswanted="$libswanted elf" + ;; +esac + +# Dynamic Loading flags have not changed much, so they are separated +# out here to avoid duplicating them everywhere. +case "$osvers" in +0.*|1.0*) ;; + +1.*|2.*) + cccdlflags='-DPIC -fpic' + lddlflags="-Bshareable $lddlflags" + ;; + +3*|4*|5*|6*) + objformat=`/usr/bin/objformat` + if [ x$objformat = xaout ]; then + if [ -e /usr/lib/aout ]; then + libpth="/usr/lib/aout /usr/local/lib /usr/lib" + glibpth="/usr/lib/aout /usr/local/lib /usr/lib" + fi + lddlflags='-Bshareable' + else + libpth="/usr/lib /usr/local/lib" + glibpth="/usr/lib /usr/local/lib" + ldflags="-Wl,-E " + lddlflags="-shared " + fi + cccdlflags='-DPIC -fPIC' + ;; +*) + libpth="/usr/lib /usr/local/lib" + glibpth="/usr/lib /usr/local/lib" + ldflags="-Wl,-E " + lddlflags="-shared " + cccdlflags='-DPIC -fPIC' + ;; +esac + +case "$osvers" in +0.*|1.*|2.*|3.*) ;; + +*) + ccflags="${ccflags} -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H" + if /usr/bin/file -L /usr/lib/libc.so | /usr/bin/grep -vq "not stripped" ; then + usenm=false + fi + ;; +esac + +cat <<'EOM' >&4 + +Some users have reported that Configure halts when testing for +the O_NONBLOCK symbol with a syntax error. This is apparently a +sh error. Rerunning Configure with ksh apparently fixes the +problem. Try + ksh Configure [your options] + +EOM + +# From: Anton Berezin +# To: perl5-porters@perl.org +# Subject: [PATCH 5.005_54] Configure - hints/freebsd.sh signal handler type +# Date: 30 Nov 1998 19:46:24 +0100 +# Message-ID: <864srhhvcv.fsf@lion.plab.ku.dk> + +signal_t='void' +d_voidsig='define' + +# set libperl.so.X.X for 2.2.X +case "$osvers" in +2.2*) + # unfortunately this code gets executed before + # the equivalent in the main Configure so we copy a little + # from Configure XXX Configure should be fixed. + if $test -r $src/patchlevel.h;then + patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $src/patchlevel.h` + subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $src/patchlevel.h` + else + patchlevel=0 + subversion=0 + fi + libperl="libperl.so.$patchlevel.$subversion" + unset patchlevel + unset subversion + ;; +esac + +# 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]*) + lc_r=`/sbin/ldconfig -r|grep ':-lc_r'|awk '{print $NF}'|sed -n '$p'` + case "$osvers" in + 0.*|1.*|2.0*|2.1*) cat <&4 +I did not know that FreeBSD $osvers supports POSIX threads. + +Feel free to tell perlbug@perl.org otherwise. +EOM + exit 1 + ;; + + 2.2.[0-7]*) + cat <&4 +POSIX threads are not supported well by FreeBSD $osvers. + +Please consider upgrading to at least FreeBSD 2.2.8, +or preferably to the most recent -RELEASE or -STABLE +version (see http://www.freebsd.org/releases/). + +(While 2.2.7 does have pthreads, it has some problems + with the combination of threads and pipes and therefore + many Perl tests will either hang or fail.) +EOM + exit 1 + ;; + + [3-5].*) + if [ ! -r "$lc_r" ]; then + cat <&4 +POSIX threads should be supported by FreeBSD $osvers -- +but your system is missing the shared libc_r. +(/sbin/ldconfig -r doesn't find any). + +Consider using the latest STABLE release. +EOM + exit 1 + fi + # 500016 is the first osreldate in which one could + # just link against libc_r without disposing of libc + # at the same time. 500016 ... up to whatever it was + # on the 31st of August 2003 can still be used with -pthread, + # but it is not necessary. + + # Anton Berezin says that post 500something we're wrong to be + # to be using -lc_r, and should just be using -pthread on the + # linker line. + # So presumably really we should be checking that $osver is 5.*) + # and that `/sbin/sysctl -n kern.osreldate` -ge 500016 + # or -lt 500something and only in that range not doing this: + ldflags="-pthread $ldflags" + + # Both in 4.x and 5.x gethostbyaddr_r exists but + # it is "Temporary function, not threadsafe"... + # Presumably earlier it didn't even exist. + d_gethostbyaddr_r="undef" + d_gethostbyaddr_r_proto="0" + ;; + + *) + # 7.x doesn't install libc_r by default, and Configure + # would fail in the code following + # + # gethostbyaddr_r() appears to have been implemented in 6.x+ + ldflags="-pthread $ldflags" + ;; + + esac + + case "$osvers" in + [1-4]*) + set `echo X "$libswanted "| sed -e 's/ c / c_r /'` + shift + libswanted="$*" + ;; + *) + set `echo X "$libswanted "| sed -e 's/ c //'` + shift + libswanted="$*" + ;; + esac + + # Configure will probably pick the wrong libc to use for nm scan. + # The safest quick-fix is just to not use nm at all... + usenm=false + + case "$osvers" in + 2.2.8*) + # ... but this does not apply for 2.2.8 - we know it's safe + libc="$lc_r" + usenm=true + ;; + esac + + unset lc_r + + # Even with the malloc mutexes the Perl malloc does not + # seem to be threadsafe in FreeBSD? + case "$usemymalloc" in + '') usemymalloc=n ;; + esac +esac +EOCBU + +# malloc wrap works +case "$usemallocwrap" in +'') usemallocwrap='define' ;; +esac + +# XXX Under FreeBSD 6.0 (and probably most other similar versions) +# Perl_die(NULL) generates a warning: +# pp_sys.c:491: warning: null format string +# Configure supposedly tests for this, but apparently the test doesn't +# work. Volunteers with FreeBSD are needed to improving the Configure test. +# Meanwhile, the following workaround should be safe on all versions +# of FreeBSD. +d_printf_format_null='undef' + +# See [perl #128867] +# Interpreting: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=211743#c10 +# khw workaround no longer needed in the following FREEBSD_KERNEL_VERSIONs +#1200004 and up +#1100502 >= version < 1200000 +#1003507 >= version < 1100000 +# Experiments have shown that this doesn't fully work. The first kernel we know it works is 1200056 + +FREEBSD_KERNEL_VERSION=`uname -U` +#if [ $FREEBSD_KERNEL_VERSION -lt 1003507 ] || \ +# [ $FREEBSD_KERNEL_VERSION -ge 1100000 ] && [ $FREEBSD_KERNEL_VERSION -lt 1100502 ] || \ +# [ $FREEBSD_KERNEL_VERSION -ge 1200000 ] && [ $FREEBSD_KERNEL_VERSION -lt 1200004 ] +if [ $FREEBSD_KERNEL_VERSION -lt 1200056 ] +then + d_uselocale='undef' +fi + +# https://rt.perl.org/Ticket/Display.html?id=131337 +# Reported in 11.0-CURRENT with g++-4.8.5: +# If using g++, the Configure scan for dlopen() fails. +# Easier for now to just to forcibly set it. +case "$cc" in +*g++*) + d_dlopen='define' + ;; +esac + +case `uname -p` in +arm|mips) + ;; +*) + test "$optimize" || optimize='-O2' + ;; esac -# Avoid telldir prototype conflict in pp_sys.c (FreeBSD uses const DIR *) -pp_sys_cflags='ccflags="$ccflags -DHAS_TELLDIR_PROTOTYPE"'