X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/624b29b43ee9bc440524a09e1ee6bd5a04cfc94f..b2e3501558a1017eb529be0915c25d31671e7869:/hints/freebsd.sh diff --git a/hints/freebsd.sh b/hints/freebsd.sh index 394abb8..8d436a1 100644 --- a/hints/freebsd.sh +++ b/hints/freebsd.sh @@ -20,7 +20,7 @@ # # Modified to ensure we replace -lc with -lc_r, and # to put in place-holders for various specific hints. -# Andy Dougherty +# Andy Dougherty # Date: Tue Mar 10 16:07:00 EST 1998 # # Support for FreeBSD/ELF @@ -62,12 +62,15 @@ case "$osvers" in # # 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 requried to suidperl to avoid a security +# 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' - usemymalloc='n' + case "$usemymalloc" in + "") usemymalloc='n' + ;; + esac d_setregid='define' d_setreuid='define' d_setegid='undef' @@ -79,15 +82,25 @@ case "$osvers" in # don't use -lmalloc (maybe there's an old one from 1.1.5.1 floating around) 2.2*) usevfork='true' - usemymalloc='n' + 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='undef' - d_seteuid='undef' + d_setegid='define' + d_seteuid='define' + # d_dosuid='define' # Obsolete. ;; *) usevfork='true' - usemymalloc='n' + case "$usemymalloc" in + "") usemymalloc='n' + ;; + esac libswanted=`echo $libswanted | sed 's/ malloc / /'` ;; esac @@ -97,30 +110,38 @@ esac case "$osvers" in 0.*|1.0*) ;; -1*|2*) cccdlflags='-DPIC -fpic' +1.*|2.*) + cccdlflags='-DPIC -fpic' lddlflags="-Bshareable $lddlflags" ;; -*) +3*|4*|5*|6*) objformat=`/usr/bin/objformat` - if [ x$objformat = xelf ]; then - libpth="/usr/lib /usr/local/lib" - glibpth="/usr/lib /usr/local/lib" - ldflags="-Wl,-E " - lddlflags="-shared " - else + 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' + 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*) ;; +0.*|1.*|2.*|3.*) ;; *) ccflags="${ccflags} -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H" @@ -175,7 +196,7 @@ 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 + 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. @@ -198,7 +219,7 @@ EOM exit 1 ;; - *) + [3-5].*) if [ ! -r "$lc_r" ]; then cat <&4 POSIX threads should be supported by FreeBSD $osvers -- @@ -209,21 +230,50 @@ 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" - case "$osvers" in - 4.5*) # 4.5 has gethostbyaddr_r but it is - # "Temporary function, not threadsafe"... - d_gethostbyaddr_r="undef" - d_gethostbyaddr_r_proto="undef" - ;; - esac ;; esac - set `echo X "$libswanted "| sed -e 's/ c / c_r /'` - shift - libswanted="$*" + 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 @@ -237,6 +287,26 @@ EOM 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 supposedely 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' +