libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [patch #6448] [MSVC 7/7] Add MSVC Support


From: Ralf Wildenhues
Subject: Re: [patch #6448] [MSVC 7/7] Add MSVC Support
Date: Tue, 5 Aug 2008 21:47:25 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

* Peter Rosin wrote on Tue, Aug 05, 2008 at 10:38:14AM CEST:
> Peter Rosin skrev:
>> Attached, I'll work through all the failures to try to find out why
>> they fail...
>
>   16: duplicate_conv.at:25 duplicate convenience archive names
> MS link doesn't have reloadable objects (i.e. like "ld -r").

Should be fixed by at-file support I hope.

>   25: link-order2.at:46  Link order of deplibs.
> Don't know. Should defbindir=`pwd`/lib be defbindir=`pwd`/bin in
> link-order2.at? Maybe the MSVC fixup of -L options is too coarse?

Forget about this failure for now.  The link-order tests all suffer a
bit from being too system-specific.

>   29: static.at:68       static linking flags for programs
> m-all-static.exe.manifest isn't installed

What does the manifest file do?

>   30: static.at:357      ccache -all-static
> cl.exe spews out a banner on stderr which isn't [ignore]d

I think that banner should just be ignored.

>   46: lt_dladvise.at:28  lt_dlopenadvise library loading
> -avoid-version causes the names of the import lib and the static
> lib to be the same. But something else<TM> also seems bad...

Several issues:
- the test is somewhat broken (also on other systems)
- maybe we need to forbid enabling both static and shared at the same
  time

>   47: need_lib_prefix.at:25 enforced lib prefix
> -avoid-version problem from 46, but also needs -no-undefined.

Sigh.

>   72: stresstest.at:31   Link option thorough search test
> Automatic path conversion in MSYS doesn't kick in for the argument
> -OUT:/some/absolute/path so lib.exe barfs.

Not the biggest problem.

>   73: cmdline_wrap.at:28 Run tests with low max_cmd_len
> I just ran out of steam...

That's where I hope most of the failures are either
- failing for the same reason the non-low test is failing,
- and/or fixed with at-file support.

Please try the patch below for simplistic at-file support with $NM.
While testing, I set nm_file_list_spec to '@' and always_export_symbols
to yes on GNU/Linux, and saw no test failure, probably because my nm
also understands '@'.  :-)
(IOW, we could enable that for when 'nm --help' lists @FILE.)

Probably the setting of nm_file_list_spec should be moved to where $NM
is set; not sure, as this is actually a Windows feature, not a $NM one.

Cheers,
Ralf

2008-08-05  Ralf Wildenhues  <address@hidden>

        * libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) <nm_file_list_spec>:
        New tag variable.
        [ cygwin, mingw, cegcc ] <cl*>: Set to '@'.
        (_LT_LANG_CXX_CONFIG): Likewise.
        * libltdl/config/ltmain.m4sh (func_mode_link): When
        nm_file_list_spec is nonempty, use it to avoid skipped_export.

diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 35ae02f..29f7fba 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -6613,14 +6613,30 @@ EOF
            $opt_dry_run || $RM $export_symbols
            cmds=$export_symbols_cmds
            save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
+           for cmd1 in $cmds; do
              IFS="$save_ifs"
-             eval cmd=\"$cmd\"
+             eval cmd=\"$cmd1\"
              func_len " $cmd"
              len=$func_len_result
              if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; 
then
                func_show_eval "$cmd" 'exit $?'
                skipped_export=false
+             elif test -n "$nm_file_list_spec"; then
+               output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+               save_libobjs=$libobjs
+               save_output=$output
+               output=${output_objdir}/${output_la}.nm
+               libobjs=$nm_file_list_spec$output
+               delfiles="$delfiles $output"
+               func_verbose "creating $NM input file list: $output"
+               for obj in $save_libobjs; do
+                 $ECHO "$obj"
+               done > "$output"
+               eval cmd=\"$cmd1\"
+               func_show_eval "$cmd" 'exit $?'
+               output=$save_output
+               libobjs=$save_libobjs
+               skipped_export=false
              else
                # The command line is too long to execute in one step.
                func_verbose "using reloadable object file for export list..."
diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
index 37c0f71..c8b29ce 100644
--- a/libltdl/m4/libtool.m4
+++ b/libltdl/m4/libtool.m4
@@ -4785,6 +4785,7 @@ _LT_EOF
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        _LT_TAGVAR(always_export_symbols, $1)=yes
        _LT_TAGVAR(file_list_spec, $1)='@'
+       _LT_TAGVAR(nm_file_list_spec, $1)='@'
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
@@ -5358,6 +5359,8 @@ _LT_TAGDECL([], [prelink_cmds], [2],
     [Commands necessary for linking programs (against libraries) with 
templates])
 _LT_TAGDECL([], [file_list_spec], [1],
     [Specify filename containing input files])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
 _LT_TAGDECL([], [dashL_envvar], [1],
     [When linking, move all paths specified with -L options to this variable])
 _LT_TAGDECL([], [dashL_envvar_spec], [1],
@@ -5777,6 +5780,7 @@ if test "$_lt_caught_CXX_error" != yes; then
          _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
          _LT_TAGVAR(always_export_symbols, $1)=yes
          _LT_TAGVAR(file_list_spec, $1)='@'
+         _LT_TAGVAR(nm_file_list_spec, $1)='@'
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]