This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
In FreeBSD allow one to try using Perl's malloc with threads.
[perl5.git] / hints / freebsd.sh
index cc48351..28e22ac 100644 (file)
@@ -20,7 +20,7 @@
 #
 # Modified to ensure we replace -lc with -lc_r, and
 # to put in place-holders for various specific hints.
 #
 # Modified to ensure we replace -lc with -lc_r, and
 # to put in place-holders for various specific hints.
-# Andy Dougherty <doughera@lafcol.lafayette.edu>
+# Andy Dougherty <doughera@lafayette.edu>
 # Date: Tue Mar 10 16:07:00 EST 1998
 #
 # Support for FreeBSD/ELF
 # Date: Tue Mar 10 16:07:00 EST 1998
 #
 # Support for FreeBSD/ELF
@@ -67,7 +67,10 @@ case "$osvers" in
 #
 2.0.5*|2.0-built*|2.1*)
        usevfork='true'
 #
 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'
        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'
 # 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/ 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_setregid='define'
        d_setreuid='define'
-       d_setegid='undef'
-       d_seteuid='undef'
+       d_setegid='define'
+       d_seteuid='define'
+       # d_dosuid='define' # Obsolete.
        ;;
 *)     usevfork='true'
        ;;
 *)     usevfork='true'
-       usemymalloc='n'
+       case "$usemymalloc" in
+           "") usemymalloc='n'
+               ;;
+       esac
        libswanted=`echo $libswanted | sed 's/ malloc / /'`
        ;;
 esac
        libswanted=`echo $libswanted | sed 's/ malloc / /'`
        ;;
 esac
@@ -115,7 +128,7 @@ case "$osvers" in
             fi
             lddlflags='-Bshareable'
         fi
             fi
             lddlflags='-Bshareable'
         fi
-        cccdlflags='-DPIC -fpic'
+        cccdlflags='-DPIC -fPIC'
         ;;
 esac
 
         ;;
 esac
 
@@ -123,6 +136,7 @@ case "$osvers" in
 0*|1*|2*|3*) ;;
 
 *)
 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
        if /usr/bin/file -L /usr/lib/libc.so | /usr/bin/grep -vq "not stripped" ; then
            usenm=false
        fi
@@ -172,7 +186,7 @@ esac
 cat > UU/usethreads.cbu <<'EOCBU'
 case "$usethreads" in
 $define|true|[yY]*)
 cat > UU/usethreads.cbu <<'EOCBU'
 case "$usethreads" in
 $define|true|[yY]*)
-        lc_r=`/sbin/ldconfig -r|grep ':-lc_r'|awk '{print $NF}'|tail -1`
+        lc_r=`/sbin/ldconfig -r|grep ':-lc_r'|awk '{print $NF}'|sed -n '$p'`
         case "$osvers" in  
        0*|1*|2.0*|2.1*)   cat <<EOM >&4
 I did not know that FreeBSD $osvers supports POSIX threads.
         case "$osvers" in  
        0*|1*|2.0*|2.1*)   cat <<EOM >&4
 I did not know that FreeBSD $osvers supports POSIX threads.
@@ -187,7 +201,8 @@ EOM
 POSIX threads are not supported well by FreeBSD $osvers.
 
 Please consider upgrading to at least FreeBSD 2.2.8,
 POSIX threads are not supported well by FreeBSD $osvers.
 
 Please consider upgrading to at least FreeBSD 2.2.8,
-or preferably to 3.something.
+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
 
 (While 2.2.7 does have pthreads, it has some problems
  with the combination of threads and pipes and therefore
@@ -207,7 +222,24 @@ Consider using the latest STABLE release.
 EOM
                 exit 1
              fi
 EOM
                 exit 1
              fi
-             ldflags="-pthread $ldflags"
+             case "$osvers" in
+             # 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.
+             5.*)      if [ `/sbin/sysctl -n kern.osreldate` -lt 500016 ]; then
+                                ldflags="-pthread $ldflags"
+                        fi
+                       ;;
+             *)        ldflags="-pthread $ldflags"
+                       ;;
+             esac
+             # 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"
              ;;
 
        esac
              ;;
 
        esac
@@ -228,5 +260,12 @@ EOM
         esac
 
         unset lc_r
         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
 esac
 EOCBU
+