Originally submitted at <https://savannah.gnu.org/support/?110937>.
The check for whether the linker supports the -single_module flag
assumes that anything printed to stderr containing the string
"single_module" means it is unsupported. Xcode 15 does print such a
message, though it only indicates that the flag is deprecated. Lack of
single module support triggers some workarounds that aren't needed and
don't work very well on modern systems.
This flag has been unnecessary for many macOS versions, so teaching
libtool that it is not needed in this case is probably preferable to
just fixing the check.
- Josh
diff --git a/NEWS b/NEWS
index c853d7db..b5420bbc 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ NEWS - list of user-visible changes between releases of GNU
Libtool
* Noteworthy changes in release ?.? (????-??-??) [?]
+** Bug fixes:
+
+ - Fix incorrect use of workarounds designed for Darwin versions that
+ don't have -single_module support.
* Noteworthy changes in release 2.4.7 (2022-03-16) [stable]
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 79a2451e..973ab2aa 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1081,6 +1081,21 @@ _LT_EOF
if test yes = "$lt_cv_apple_cc_single_mod"; then
_lt_dar_single_mod='$single_module'
fi
+ _lt_dar_needs_single_mod=no
+ case $host_os in
+ rhapsody* | darwin1.*)
+ _lt_dar_needs_single_mod=yes ;;
+ darwin*)
+ # When targeting Mac OS X 10.4 (darwin 8) or later,
+ # -single_module is the default and -multi_module is unsupported.
+ # The toolchain on macOS 10.14 (darwin 18) and later cannot
+ # target any OS version that needs -single_module.
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+
10.0,*-darwin[[567]].*|10.[[0-3]],*-darwin[[5-9]].*|10.[[0-3]],*-darwin1[[0-7]].*)
+ _lt_dar_needs_single_mod=yes ;;
+ esac
+ ;;
+ esac
if test yes = "$lt_cv_ld_exported_symbols_list"; then
_lt_dar_export_syms='
$wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
else
@@ -1126,7 +1141,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols >
\$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib
\$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags
-install_name \$rpath/\$soname \$verstring
$_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
_LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols >
\$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib
-bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
m4_if([$1], [CXX],
-[ if test yes != "$lt_cv_apple_cc_single_mod"; then
+[ if test yes = "$_lt_dar_needs_single_mod" -a yes !=
"$lt_cv_apple_cc_single_mod"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o
\$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib
\$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname
\$verstring$_lt_dsymutil"
_LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols >
\$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs
-nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag
-o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name
\$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi