mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
libtool.m4: fix nm BSD flag detection
Libtool needs to get BSD-format (or MS-format) output out of the system nm, so that it can scan generated object files for symbol names for -export-symbols-regex support. Some nms need specific flags to turn on BSD-formatted output, so libtool checks for this in its AC_PATH_NM. Unfortunately the code to do this has a pair of interlocking flaws: - it runs the test by doing an nm of /dev/null. Some platforms reasonably refuse to do an nm on a device file, but before now this has only been worked around by assuming that the error message has a specific textual form emitted by Tru64 nm, and that getting this error means this is Tru64 nm and that nm -B would work to produce BSD-format output, even though the test never actually got anything but an error message out of nm -B. This is fixable by nm'ing *nm itself* (since we necessarily have a path to it). - the test is entirely skipped if NM is set in the environment, on the grounds that the user has overridden the test: but the user cannot reasonably be expected to know that libtool wants not only nm but also flags forcing BSD-format output. Worse yet, one such "user" is the top-level Cygnus configure script, which neither tests for nor specifies any BSD-format flags. So platforms needing BSD-format flags always fail to set them when run in a Cygnus tree, breaking -export-symbols-regex on such platforms. Libtool also needs to augment $LD on some platforms, but this is done unconditionally, augmenting whatever the user specified: the nm check should do the same. One wrinkle: if the user has overridden $NM, a path might have been provided: so we use the user-specified path if there was one, and otherwise do the path search as usual. (If the nm specified doesn't work, this might lead to a few extra pointless path searches -- but the test is going to fail anyway, so that's not a problem.) (Tested with NM unset, and set to nm, /usr/bin/nm, my-nm where my-nm is a symlink to /usr/bin/nm on the PATH, and /not-on-the-path/my-nm where *that* is a symlink to /usr/bin/nm.) ChangeLog: * libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided NM, if there is one. Run nm on itself, not on /dev/null, to avoid errors from nms that refuse to work on non-regular files. Remove other workarounds for this problem. Strip out blank lines from the nm output. fixincludes/ChangeLog: * configure: Regenerate. gcc/ChangeLog: * configure: Regenerate. libatomic/ChangeLog: * configure: Regenerate. libbacktrace/ChangeLog: * configure: Regenerate. libcc1/ChangeLog: * configure: Regenerate. libffi/ChangeLog: * configure: Regenerate. libgfortran/ChangeLog: * configure: Regenerate. libgm2/ChangeLog: * configure: Regenerate. libgomp/ChangeLog: * configure: Regenerate. libitm/ChangeLog: * configure: Regenerate. libobjc/ChangeLog: * configure: Regenerate. libphobos/ChangeLog: * configure: Regenerate. libquadmath/ChangeLog: * configure: Regenerate. libsanitizer/ChangeLog: * configure: Regenerate. libssp/ChangeLog: * configure: Regenerate. libstdc++-v3/ChangeLog: * configure: Regenerate. libvtv/ChangeLog: * configure: Regenerate. lto-plugin/ChangeLog: * configure: Regenerate. zlib/ChangeLog: * configure: Regenerate.
This commit is contained in:
committed by
Arsen Arsenović
parent
b48e994077
commit
ab42297456
89
zlib/configure
vendored
89
zlib/configure
vendored
@@ -4748,48 +4748,49 @@ if ${lt_cv_path_NM+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
if test -n "$NM"; then
|
||||
# Let the user override the test.
|
||||
lt_cv_path_NM="$NM"
|
||||
else
|
||||
lt_nm_to_check="${ac_tool_prefix}nm"
|
||||
if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
|
||||
lt_nm_to_check="$lt_nm_to_check nm"
|
||||
fi
|
||||
for lt_tmp_nm in $lt_nm_to_check; do
|
||||
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
|
||||
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
|
||||
IFS="$lt_save_ifs"
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
tmp_nm="$ac_dir/$lt_tmp_nm"
|
||||
if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
# Tru64's nm complains that /dev/null is an invalid object file
|
||||
case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
|
||||
*/dev/null* | *'Invalid file or object type'*)
|
||||
lt_cv_path_NM="$tmp_nm -B"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
|
||||
*/dev/null*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
|
||||
continue # so that we can try to find one that supports BSD flags
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
IFS="$lt_save_ifs"
|
||||
done
|
||||
: ${lt_cv_path_NM=no}
|
||||
fi
|
||||
# Let the user override the nm to test.
|
||||
lt_nm_to_check="$NM"
|
||||
else
|
||||
lt_nm_to_check="${ac_tool_prefix}nm"
|
||||
if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
|
||||
lt_nm_to_check="$lt_nm_to_check nm"
|
||||
fi
|
||||
fi
|
||||
for lt_tmp_nm in $lt_nm_to_check; do
|
||||
lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
|
||||
for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
|
||||
IFS="$lt_save_ifs"
|
||||
test -z "$ac_dir" && ac_dir=.
|
||||
case "$lt_tmp_nm" in
|
||||
*/*|*\\*) tmp_nm="$lt_tmp_nm";;
|
||||
*) tmp_nm="$ac_dir/$lt_tmp_nm";;
|
||||
esac
|
||||
if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
|
||||
# Check to see if the nm accepts a BSD-compat flag.
|
||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||
# nm: unknown option "B" ignored
|
||||
case `"$tmp_nm" -B "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||
*$tmp_nm*) lt_cv_path_NM="$tmp_nm -B"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
case `"$tmp_nm" -p "$tmp_nm" 2>&1 | grep -v '^ *$' | sed '1q'` in
|
||||
*$tmp_nm*)
|
||||
lt_cv_path_NM="$tmp_nm -p"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
|
||||
continue # so that we can try to find one that supports BSD flags
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
IFS="$lt_save_ifs"
|
||||
done
|
||||
: ${lt_cv_path_NM=no}
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
|
||||
$as_echo "$lt_cv_path_NM" >&6; }
|
||||
@@ -10794,7 +10795,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 10797 "configure"
|
||||
#line 10798 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
@@ -10900,7 +10901,7 @@ else
|
||||
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
|
||||
lt_status=$lt_dlunknown
|
||||
cat > conftest.$ac_ext <<_LT_EOF
|
||||
#line 10903 "configure"
|
||||
#line 10904 "configure"
|
||||
#include "confdefs.h"
|
||||
|
||||
#if HAVE_DLFCN_H
|
||||
|
||||
Reference in New Issue
Block a user