This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #132087) correct *at() function detection on older darwin
[perl5.git] / hints / linux.sh
index ed05b46..3f38ea0 100644 (file)
@@ -58,17 +58,10 @@ shift
 libswanted="$*"
 
 # Debian 4.0 puts ndbm in the -lgdbm_compat library.
-libswanted="$libswanted gdbm_compat"
-
-# If you have glibc, then report the version for ./myconfig bug reporting.
-# (Configure doesn't need to know the specific version since it just uses
-# gcc to load the library for all tests.)
-# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
-# are insufficiently precise to distinguish things like
-# libc-2.0.6 and libc-2.0.7.
-if test -L /lib/libc.so.6; then
-    libc=`ls -l /lib/libc.so.6 | awk '{print $NF}'`
-    libc=/lib/$libc
+echo $libs
+if echo " $libswanted " | grep -q ' gdbm '; then
+    # Only add if gdbm is in libswanted.
+    libswanted="$libswanted gdbm_compat"
 fi
 
 # Configure may fail to find lstat() since it's a static/inline
@@ -185,91 +178,48 @@ case "$plibpth" in
     ;;
 esac
 
-# Are we using ELF?  Thanks to Kenneth Albanowski <kjahds@kjahds.com>
-# for this test.
-cat >try.c <<'EOM'
-/* Test for whether ELF binaries are produced */
-#include <fcntl.h>
-#include <stdlib.h>
-#include <unistd.h>
-main() {
-       char buffer[4];
-       int i=open("a.out",O_RDONLY);
-       if(i==-1)
-               exit(1); /* fail */
-       if(read(i,&buffer[0],4)<4)
-               exit(1); /* fail */
-       if(buffer[0] != 127 || buffer[1] != 'E' ||
-           buffer[2] != 'L' || buffer[3] != 'F')
-               exit(1); /* fail */
-       exit(0); /* succeed (yes, it's ELF) */
-}
-EOM
-if ${cc:-gcc} $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
-    cat <<'EOM' >&4
-
-You appear to have ELF support.  I'll try to use it for dynamic loading.
-If dynamic loading doesn't work, read hints/linux.sh for further information.
-EOM
-
-else
-    cat <<'EOM' >&4
-
-You don't have an ELF gcc.  I will use dld if possible.  If you are
-using a version of DLD earlier than 3.2.6, or don't have it at all, you
-should probably upgrade. If you are forced to use 3.2.4, you should
-uncomment a couple of lines in hints/linux.sh and restart Configure so
-that shared libraries will be disallowed.
-
-EOM
-    lddlflags="-r $lddlflags"
-    # These empty values are so that Configure doesn't put in the
-    # Linux ELF values.
-    ccdlflags=' '
-    cccdlflags=' '
-    ccflags="-DOVR_DBL_DIG=14 $ccflags"
-    so='sa'
-    dlext='o'
-    nm_so_opt=' '
-    ## If you are using DLD 3.2.4 which does not support shared libs,
-    ## uncomment the next two lines:
-    #ldflags="-static"
-    #so='none'
-
-       # In addition, on some systems there is a problem with perl and NDBM
-       # which causes AnyDBM and NDBM_File to lock up. This is evidenced
-       # in the tests as AnyDBM just freezing.  Apparently, this only
-       # happens on a.out systems, so we disable NDBM for all a.out linux
-       # systems.  If someone can suggest a more robust test
-       #  that would be appreciated.
-       #
-       # More info:
-       # Date: Wed, 7 Feb 1996 03:21:04 +0900
-       # From: Jeffrey Friedl <jfriedl@nff.ncl.omron.co.jp>
-       #
-       # I tried compiling with DBM support and sure enough things locked up
-       # just as advertised. Checking into it, I found that the lockup was
-       # during the call to dbm_open. Not *in* dbm_open -- but between the call
-       # to and the jump into.
-       #
-       # To make a long story short, making sure that the *.a and *.sa pairs of
-       #   /usr/lib/lib{m,db,gdbm}.{a,sa}
-       # were perfectly in sync took care of it.
-       #
-       # This will generate a harmless Whoa There! message
-       case "$d_dbm_open" in
-       '')     cat <<'EOM' >&4
-
-Disabling ndbm.  This will generate a Whoa There message in Configure.
-Read hints/linux.sh for further information.
-EOM
-               # You can override this with Configure -Dd_dbm_open
-               d_dbm_open=undef
-               ;;
-       esac
-fi
+# libquadmath is sometimes installed as gcc internal library,
+# so contrary to our usual policy of *not* looking at gcc internal
+# directories we now *do* look at them, in case they contain
+# the quadmath library.
+# XXX This may apply to other gcc internal libraries, if such exist.
+# XXX This could be at Configure level, but then the $gcc is messy.
+case "$usequadmath" in
+"$define")
+  for d in `LANG=C LC_ALL=C $gcc $ccflags $ldflags -print-search-dirs | grep libraries | cut -f2- -d= | tr ':' $trnl | grep 'gcc' | sed -e 's:/$::'`
+  do
+    case `ls $d/*libquadmath*$so* 2>/dev/null` in
+    $d/*libquadmath*$so*) xlibpth="$xlibpth $d" ;;
+    esac
+  done
+  ;;
+esac
 
-rm -f try.c a.out
+case "$libc" in
+'')
+# If you have glibc, then report the version for ./myconfig bug reporting.
+# (Configure doesn't need to know the specific version since it just uses
+# gcc to load the library for all tests.)
+# We don't use __GLIBC__ and  __GLIBC_MINOR__ because they
+# are insufficiently precise to distinguish things like
+# libc-2.0.6 and libc-2.0.7.
+    for p in $plibpth
+    do
+        for trylib in libc.so.6 libc.so
+        do
+            if $test -e $p/$trylib; then
+                libc=`ls -l $p/$trylib | awk '{print $NF}'`
+                if $test "X$libc" != X; then
+                    break
+                fi
+            fi
+        done
+        if $test "X$libc" != X; then
+            break
+        fi
+    done
+    ;;
+esac
 
 if ${sh:-/bin/sh} -c exit; then
   echo ''
@@ -353,16 +303,27 @@ esac
 # version of -lgdbm which is a bad idea. So if we have 'nm'
 # make sure it can read the file
 # NI-S 2003/08/07
-if [ -r /usr/lib/libndbm.so  -a  -x /usr/bin/nm ] ; then
-   if /usr/bin/nm /usr/lib/libndbm.so >/dev/null 2>&1 ; then
-    echo 'Your shared -lndbm seems to be a real library.'
-   else
-    echo 'Your shared -lndbm is not a real library.'
-    set `echo X "$libswanted "| sed -e 's/ ndbm / /'`
-    shift
-    libswanted="$*"
-   fi
-fi
+case "$nm" in
+    '') ;;
+    *)
+    for p in $plibpth
+    do
+        if $test -r $p/libndbm.so; then
+            if $nm $p/libndbm.so >/dev/null 2>&1 ; then
+                echo 'Your shared -lndbm seems to be a real library.'
+                _libndbm_real=1
+                break
+            fi
+        fi
+    done
+    if $test "X$_libndbm_real" = X; then
+        echo 'Your shared -lndbm is not a real library.'
+        set `echo X "$libswanted "| sed -e 's/ ndbm / /'`
+        shift
+        libswanted="$*"
+    fi
+    ;;
+esac
 
 # Linux on Synology.
 if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
@@ -467,7 +428,7 @@ then
        DBLIB="$DBDIR/libdb.so"
        if [ -f $DBLIB ]
        then
-         if ${nm:-nm} -u $DBLIB | grep pthread >/dev/null
+         if ${nm:-nm} -u $DBLIB 2>/dev/null | grep pthread >/dev/null
          then
            if ldd $DBLIB | grep pthread >/dev/null
            then