From 3fec05cabefa5f41151f85f0051cba33f902653d Mon Sep 17 00:00:00 2001
From: dje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 5 May 2005 15:04:39 +0000
Subject: [PATCH]         * ltconfig: Define file_list_spec.  Pass
 file_list_spec and         with_gnu_ld to libtool.         * ltcf-c.sh
 (aix[45]): Define file_list_spec.         * ltcf-cxx.sh (aix[45]): Same.     
    * ltcf-gcj.sh (aix[45]): Same.         * ltmain.sh: If command exceeds
 max_cmd_len and file_list_spec         exists, write list of input files to
 temporary file.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99268 138bc75d-0d04-0410-961f-82ee72b054a4
---
 ChangeLog   |  10 ++++
 ltcf-c.sh   |   1 +
 ltcf-cxx.sh |   1 +
 ltcf-gcj.sh |   1 +
 ltconfig    |   9 +++-
 ltmain.sh   | 152 ++++++++++++++++++++++++++++++----------------------
 6 files changed, 109 insertions(+), 65 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 722728ecc083..1691020ae5e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-05-05  David Edelsohn  <edelsohn@gnu.org>
+
+	* ltconfig: Define file_list_spec.  Pass file_list_spec and
+	with_gnu_ld to libtool.
+	* ltcf-c.sh (aix[45]): Define file_list_spec.
+	* ltcf-cxx.sh (aix[45]): Same.
+	* ltcf-gcj.sh (aix[45]): Same.
+	* ltmain.sh: If command exceeds max_cmd_len and file_list_spec
+	exists, write list of input files to temporary file.
+
 2005-05-04  Mike Stump  <mrs@apple.com>
 
 	* configure.in: Always pass --target to target configures as
diff --git a/ltcf-c.sh b/ltcf-c.sh
index 11f897d2ef7d..f2e5ed02e390 100644
--- a/ltcf-c.sh
+++ b/ltcf-c.sh
@@ -267,6 +267,7 @@ else
     hardcode_direct=yes
     hardcode_libdir_separator=':'
     link_all_deplibs=yes
+    file_list_spec='${wl}-f,'
     # When large executables or shared objects are built, AIX ld can
     # have problems creating the table of contents.  If linking a library
     # or program results in "error TOC overflow" add -mminimal-toc to
diff --git a/ltcf-cxx.sh b/ltcf-cxx.sh
index 48d5a53f2f7d..240e40de3e90 100644
--- a/ltcf-cxx.sh
+++ b/ltcf-cxx.sh
@@ -128,6 +128,7 @@ case $host_os in
     hardcode_direct=yes
     hardcode_libdir_separator=':'
     link_all_deplibs=yes
+    file_list_spec='${wl}-f,'
     # When large executables or shared objects are built, AIX ld can
     # have problems creating the table of contents.  If linking a library
     # or program results in "error TOC overflow" add -mminimal-toc to
diff --git a/ltcf-gcj.sh b/ltcf-gcj.sh
index 950dd0031773..4c6afeb2c27e 100644
--- a/ltcf-gcj.sh
+++ b/ltcf-gcj.sh
@@ -266,6 +266,7 @@ else
     hardcode_direct=yes
     hardcode_libdir_separator=':'
     link_all_deplibs=yes
+    file_list_spec='${wl}-f,'
     # When large executables or shared objects are built, AIX ld can
     # have problems creating the table of contents.  If linking a library
     # or program results in "error TOC overflow" add -mminimal-toc to
diff --git a/ltconfig b/ltconfig
index 01e64be2cff7..53eb9421eab3 100755
--- a/ltconfig
+++ b/ltconfig
@@ -266,6 +266,7 @@ exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
 # rely on this symbol name, it's probably fine to never include it in
 # preloaded symbol tables.
 extract_expsyms_cmds=
+file_list_spec=
 
 ## Tools:
 old_AR="$AR"
@@ -2164,7 +2165,7 @@ case $ltmain in
     finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
     hardcode_libdir_flag_spec hardcode_libdir_separator  \
     sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    compiler_c_o need_locks exclude_expsyms include_expsyms; do
+    compiler_c_o need_locks exclude_expsyms include_expsyms file_list_spec; do
 
     case $var in
     reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
@@ -2557,6 +2558,12 @@ exclude_expsyms=$exclude_expsyms
 # Symbols that must always be exported.
 include_expsyms=$include_expsyms
 
+# Specify filename containing input files.
+file_list_spec=$file_list_spec
+
+# with_gnu_ld value
+with_gnu_ld=$with_gnu_ld
+
 EOF
 
 if test -z "$tagname"; then
diff --git a/ltmain.sh b/ltmain.sh
index a84825359d35..9882b46c96b6 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -3272,7 +3272,6 @@ EOF
           :
         else
 	  # The command line is too long to link in one step, link piecewise.
-          $echo "creating reloadable object files..."
 
 	  # Save the value of $output and $libobjs because we want to
 	  # use them later.  If we have whole_archive_flag_spec, we
@@ -3286,6 +3285,7 @@ EOF
 	    save_libobjs=$libobjs
 	  fi
           save_output=$output
+	  output_la=`$echo "X$output" | $Xsed -e "s,^.*/,,"`
 
 	  # Clear the reloadable object creation command queue and
 	  # initialize k to one.
@@ -3295,63 +3295,87 @@ EOF
           delfiles=
           last_robj=
           k=1
-          output=$output_objdir/$save_output-${k}.$objext
-	  # Loop over the list of objects to be linked.
-          for obj in $save_libobjs
-          do
-            eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-            if test "X$objlist" = X ||
-	       { len=`expr "X$test_cmds" : ".*"` &&
-                 test $len -le $max_cmd_len; }; then
-              objlist="$objlist $obj"
-            else
-	      # The command $test_cmds is almost too long, add a
-	      # command to the queue.
-              if test $k -eq 1 ; then
-	        # The first file doesn't have a previous command to add.
-                eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-              else
-	        # All subsequent reloadable object files will link in
-	        # the last one created.
-                eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-              fi
-              last_robj=$output_objdir/$save_output-${k}.$objext
-              k=`expr $k + 1`
-              output=$output_objdir/$save_output-${k}.$objext
-              objlist=$obj
-              len=1
-            fi
-          done
-	  # Handle the remaining objects by creating one last
-	  # reloadable object file.  All subsequent reloadable object
-	  # files will link in the last one created.
-	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
-          eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
-	  # Set up a command to remove the reloadale object files
-	  # after they are used.
-          i=0
-          while test $i -lt $k
-          do
-            i=`expr $i + 1`
-            delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
-          done
 
-          $echo "creating a temporary reloadable object file: $output"
+	  if test "$with_gnu_ld" = yes; then
+	    output=${output_objdir}/${output_la}.lnkscript
+	    $echo "creating GNU ld script: $output"
+	    $echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      $echo \""$obj"\" >> $output
+	    done
+	    $echo ')' >> $output
+	    delfiles="$delfiles $output"
+	  elif test "X$file_list_spec" != X; then
+	    output=${output_objdir}/${output_la}.lnk
+	    $echo "creating linker input file list: $output"
+	    : > $output
+	    for obj in $save_libobjs
+	    do
+	      $echo "$obj" >> $output
+	    done
+	    delfiles="$delfiles $output"
+	    output=\"$file_list_spec$output\"
+	  else
+	    $echo "creating reloadable object files..."
+	    output=$output_objdir/$save_output-${k}.$objext
+	    # Loop over the list of objects to be linked.
+	    for obj in $save_libobjs
+	    do
+	      eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+	      if test "X$objlist" = X ||
+		 { len=`expr "X$test_cmds" : ".*"` &&
+		   test $len -le $max_cmd_len; }; then
+		objlist="$objlist $obj"
+	      else
+		# The command $test_cmds is almost too long, add a
+		# command to the queue.
+		if test $k -eq 1 ; then
+		  # The first file doesn't have a previous command to add.
+		  eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+		else
+		  # All subsequent reloadable object files will link in
+		  # the last one created.
+		  eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+		fi
+		last_robj=$output_objdir/$save_output-${k}.$objext
+		k=`expr $k + 1`
+		output=$output_objdir/$save_output-${k}.$objext
+		objlist=$obj
+		len=1
+	      fi
+	    done
+	    # Handle the remaining objects by creating one last
+	    # reloadable object file.  All subsequent reloadable object
+	    # files will link in the last one created.
+	    test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	    eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+	    # Set up a command to remove the reloadale object files
+	    # after they are used.
+	    i=0
+	    while test $i -lt $k
+	    do
+	      i=`expr $i + 1`
+	      delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+	    done
 
-	  # Loop through the commands generated above and execute them.
-          IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-          for cmd in $concat_cmds; do
-            IFS="$save_ifs"
-	    eval cmd=\"$cmd\"
-            $show "$cmd"
-            $run eval "$cmd" || exit $?
-          done
-          IFS="$save_ifs"
+	    $echo "creating a temporary reloadable object file: $output"
 
-          libobjs=$output
+	    # Loop through the commands generated above and execute them.
+	    IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS="$save_ifs"
+	      eval cmd=\"$cmd\"
+	      $show "$cmd"
+	      $run eval "$cmd" || exit $?
+	    done
+	    IFS="$save_ifs"
+	  fi
+
+	  libobjs=$output
 	  # Restore the value of output.
-          output=$save_output
+	  output=$save_output
 
 	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
 	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
@@ -3364,20 +3388,20 @@ EOF
 	    cmds=$archive_expsym_cmds
 	  else
 	    cmds=$archive_cmds
-          fi
+	  fi
 
 	  # Append the command to remove the reloadable object files
 	  # to the just-reset $cmds.
-          eval cmds=\"\$cmds~$rm $delfiles\"
-        fi
-        IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
-        for cmd in $cmds; do
-          IFS="$save_ifs"
+	  eval cmds=\"\$cmds~$rm $delfiles\"
+	fi
+	IFS="${IFS= 	}"; save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
 	  eval cmd=\"$cmd\"
-          $show "$cmd"
-          $run eval "$cmd" || exit $?
-        done
-        IFS="$save_ifs"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
 
 	# Restore the uninstalled library and exit
 	if test "$mode" = relink; then
-- 
GitLab