]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
libtool: Prefer response files over linker scripts for mingw tools
authorMartin Storsjö <martin@martin.st>
Wed, 10 Oct 2018 07:47:21 +0000 (10:47 +0300)
committerIleana Dumitrescu <ileanadumitrescu95@gmail.com>
Fri, 25 Oct 2024 16:36:53 +0000 (19:36 +0300)
The GCC/binutils tools support response files just fine, while
lld (impersonating GNU ld) only supports response files, not
linker scripts. Using a linker script as input just to pass a
list of files is overkill for cases when a response file is enough.

* build-aux/ltmain.in: Move creation of ld script.
* m4/libtool.m4: Add new variable tag for file_list_spec.

build-aux/ltmain.in
m4/libtool.m4

index be94b032d6097d1f35cfe24d3dc10408b23a4854..83aaaf92a7c4fe1fb1fde0b1af30c2e2dd529783 100644 (file)
@@ -7937,20 +7937,7 @@ func_mode_link ()
          last_robj=
          k=1
 
-         if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
-           output=$output_objdir/$output_la.lnkscript
-           func_verbose "creating GNU ld script: $output"
-           echo 'INPUT (' > $output
-           for obj in $save_libobjs
-           do
-             func_to_tool_file "$obj"
-             $ECHO "$func_to_tool_file_result" >> $output
-           done
-           echo ')' >> $output
-           func_append delfiles " $output"
-           func_to_tool_file "$output"
-           output=$func_to_tool_file_result
-         elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+         if test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
            output=$output_objdir/$output_la.lnk
            func_verbose "creating linker input file list: $output"
            : > $output
@@ -7969,6 +7956,19 @@ func_mode_link ()
            func_append delfiles " $output"
            func_to_tool_file "$output"
            output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+         elif test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+           output=$output_objdir/$output_la.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           echo 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             func_to_tool_file "$obj"
+             $ECHO "$func_to_tool_file_result" >> $output
+           done
+           echo ')' >> $output
+           func_append delfiles " $output"
+           func_to_tool_file "$output"
+           output=$func_to_tool_file_result
          else
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
index 0a8aaaec96b4c07879587c8e18233e7e0047ab3c..5092b0e31f772a60353580d8493ffad36588f652 100644 (file)
@@ -5204,6 +5204,7 @@ _LT_EOF
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      _LT_TAGVAR(file_list_spec, $1)='@'
 
       if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
@@ -6781,6 +6782,7 @@ if test yes != "$_lt_caught_CXX_error"; then
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          _LT_TAGVAR(always_export_symbols, $1)=no
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+         _LT_TAGVAR(file_list_spec, $1)='@'
 
          if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'