* Peter Ekberg wrote on Tue, Feb 14, 2006 at 11:19:25AM CET: > > > | + case $host_os/$with_gcc in > > | + mingw*/no | mingw*/ | cygwin*/no | cygwin*/) > > | + # Assume MSVC _and_ lib archiver interface... > > | + func_echo "using command file archive linking..." > > | + for obj in $oldobjs; do > > | + $ECHO \""$obj"\" > > | + done > $output_objdir/$libname.libcmd > > | + save_oldobjs="$oldobjs" > > | + oldobjs=" @$output_objdir/$libname.libcmd" > > | + eval cmds=\"\$old_archive_cmds\" > > | + oldobjs="$save_oldobjs" > > | + ;; *snip* > > > > I don't like this big hunk yet. It's pretty invasive, it assumes > > | + # Assume MSVC _and_ lib archiver interface... > > > > and there is room for other systems to improve, too. > > Side note: > > | + if test "X$oldobjs" = "X" ; then > > > > could be `test -z "$oldobjs"'. > > Huh? What is invasive about it? Yes, the hunk is large, but the bulk > of it is just an indentation change. The meat is 8 lines of code > specific for MSVC.
Agreed, "invasive" was an over-reaction. It's a regression for non-gcc non-MSVC compilers on w32, though. > Agreed, the test should be done in libtool.m4 and be propagated to > ltmain through some variable, Yes. So we can support PGI/w32 as well, for example. > and other systems could perhaps > benefit from a command file to the archiver as well. Right. Not that I could name such a system ATM, though. > You did not like the other command file interface, can you please > specify this one to your liking? Please ;-) You mean the file_list_spec one? I could tell you exactly how I'd like that, I just never got around to actually implementing it: - Create variable linker_list_cmds. For GNU ld, linker_list_cmds=' echo "INPUT (" >$output~ for obj in $save_libobjs; do $ECHO "\"$obj\""; done >>$output~ echo ")" >$output' For AIX ld, linker_list_cmds=' for obj in $save_libobjs; do $ECHO "$obj"; done >$output' For recent (unreleased) GCC (given that we use it for linking) and for MSVC, use a response file. - Think about a better input interface to linker_list_cmds than `$save_libobjs'. Adjust above accordingly. - Better name? Maybe archive_list_cmds? Or *_script_cmds? Maybe the latter implies support for generic linker scripts? Maybe also we _could_ support something more generic.. - Check that all variables are quoted correctly for their usage (e.g., $ECHO may not be eval'ed too often). - Write a good test. - Actually make sure that, during the execution of above, we _never_ ever build a command line for an external program that may be too long. - Document linker_list_cmds in libtool.texi. This is post-2.0 stuff. > I have found no way to do piecewise linking using Microsoft link, > so AFAIK the command file is desperately needed here, and I did > not find a better way to add it, sorry. Sure. Probably similar to above, old_archive_list_cmds would be ok. Or a better name. :-) > Comment to side note: that is just reindented old code, so don't > blame me :-) Sure. No need to feel blamed, not for this particular piece of code nor any other. I'm just commenting what I see, I may even be criticising code I wrote myself once. Making me aware of issues where I contradict myself is always good. ;) Cheers, Ralf