>From 98e8919a73a40aae15ba519263c87fdcf55eb2f8 Mon Sep 17 00:00:00 2001 From: Peter Rosin Date: Wed, 11 Aug 2010 18:17:08 +0200 Subject: [PATCH] Allow the use of a listing file if the archiver supports it. * libltdl/m4/libtool.m4 (_LT_CMD_OLD_ARCHIVE): Move detection of a suitable archiver... (_LT_PROG_AR): ...to here. New macro, also detect if the archiver supports a listing file with the new variable archiver_list_spec. * libltdl/config/ltmain.m4sh: If the archiver supports a listing file, use it when max_cmd_len is exceeded. This is needed for tool chains such as MSVC which do not support piece by piece linking (-r -o). * doc/libtool.texi (libtool script contents): Update with archiver_list_spec description. Signed-off-by: Peter Rosin --- ChangeLog | 15 +++++++++++++++ doc/libtool.texi | 4 ++++ libltdl/config/ltmain.m4sh | 10 ++++++++++ libltdl/m4/libtool.m4 | 38 +++++++++++++++++++++++++++++++++----- 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ce4c9db..5951c72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2010-08-11 Peter Rosin + + Allow the use of a listing file if the archiver supports it. + * libltdl/m4/libtool.m4 (_LT_CMD_OLD_ARCHIVE): Move detection + of a suitable archiver... + (_LT_PROG_AR): ...to here. New macro, also detect if the + archiver supports a listing file with the new variable + archiver_list_spec. + * libltdl/config/ltmain.m4sh: If the archiver supports a listing + file, use it when max_cmd_len is exceeded. This is needed for + tool chains such as MSVC which do not support piece by piece + linking (-r -o). + * doc/libtool.texi (libtool script contents): Update with + archiver_list_spec description. + 2010-08-10 Gary V. Vaughan (tiny change) Make testsuite compatible with Autoconf 2.62 again. diff --git a/doc/libtool.texi b/doc/libtool.texi index 914bd1d..255e412 100644 --- a/doc/libtool.texi +++ b/doc/libtool.texi @@ -5875,6 +5875,10 @@ Commands used to create shared libraries, shared libraries with @option{-export-symbols} and static libraries, respectively. @end defvar address@hidden archiver_list_spec +How to feed a file listing to the archiver. address@hidden defvar + @defvar old_archive_from_new_cmds If the shared library depends on a static library, @samp{old_archive_from_new_cmds} contains the commands used to create that diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh index d677529..ec6ae3c 100644 --- a/libltdl/config/ltmain.m4sh +++ b/libltdl/config/ltmain.m4sh @@ -7900,6 +7900,16 @@ EOF len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + $ECHO \""$obj"\" + done > $output_objdir/$libname.libcmd + save_oldobjs="$oldobjs" + oldobjs=" $archiver_list_spec$output_objdir/$libname.libcmd" + eval cmds=\"\$old_archive_cmds\" + oldobjs="$save_oldobjs" else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4 index c36a6b4..9cf6ebf 100644 --- a/libltdl/m4/libtool.m4 +++ b/libltdl/m4/libtool.m4 @@ -1312,14 +1312,42 @@ need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([[int some_variable = 0;]], + [echo conftest.$ac_objext > conftest.lst + am_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst' + AC_TRY_EVAL([am_ar_try]) + if test "$ac_status" -eq 0; then + lt_cv_ar_at_file=@ + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) +[_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: -- 1.6.4.2