Hello Stefan, Thanks for the bug report.
* Stefan Traby wrote on Wed, Sep 13, 2006 at 04:01:19AM CEST: > > I tried libtool-1.4.3 (which introduced --preserve-dup-deps) > in addition to 1.5.22 which I use normally: > > The long (real-world) output is here: > http://txt.hello-penguin.com/b841990fcf3769591e90b01c8947e03a.txt > > here a short variant: > /bin/sh ./libtool --preserve-dup-deps --mode=link gcc -g -O2 -o prog prog.o > liba.la libb.la liba.la libb.la > gcc -g -O2 -o prog prog.o ./.libs/liba.a ./.libs/libb.a > > I don't know how to make libtool to honor duplicate dependencies. In this special case, you have two convenience archives liba.la and libb.la which have a circular dependency (as opposed to: one or both libraries are to-be-installed static or shared libraries). I agree that this case should work. But this case is also the easiest to work around: you could add liba.la as a dependency to the link line of libb.la: $LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libb.la \ b.lo [OBJECTS...] liba.la This is a bit wasteful in that all objects from liba will also appear in some form or other in libb, but it should be portable. It will require you to add a dependency of libb.la on liba.la in your Makefile (in case you use Automake it should take care of that, I believe). I think we should fix this. Proposed test case below. Cheers, Ralf * tests/duplicate_deps.at: New file. Test circular depending convenience archives (currently failing). * Makefile.am: Update. Report by Stefan Traby <[EMAIL PROTECTED]>. Index: Makefile.am =================================================================== RCS file: /cvsroot/libtool/libtool/Makefile.am,v retrieving revision 1.198 diff -u -r1.198 Makefile.am --- Makefile.am 12 Sep 2006 18:02:31 -0000 1.198 +++ Makefile.am 13 Sep 2006 05:48:01 -0000 @@ -399,6 +399,7 @@ tests/libtoolize.at \ tests/duplicate_members.at \ tests/duplicate_conv.at \ + tests/duplicate_deps.at \ tests/inherited_flags.at \ tests/convenience.at \ tests/link-order.at \ --- /dev/null 2006-09-05 22:40:33.520458500 +0200 +++ tests/duplicate_deps.at 2006-09-13 07:48:16.000000000 +0200 @@ -0,0 +1,64 @@ +# Hand crafted tests for GNU Libtool. -*- Autotest -*- +# Copyright 2006 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +AT_SETUP([preserve duplicate convenience deps]) +AT_KEYWORDS([libtool]) + +# --preserve-dup-deps should work for convenience archives. + +# Create a circular dependency of liba and libb: +# a1 pulls in b1, that pulls in a2. +cat >a1.c <<\EOF +extern int b1 (); +int a1 () { return b1 (); } +EOF +cat >a2.c <<\EOF +int a2 () { return 0; } +EOF +cat >b1.c <<\EOF +extern int a2 (); +int b1 () { return a2 (); } +EOF +cat >main.c <<\EOF +extern int a1 (); +int main () { return a1 (); } +EOF + +for file in a1.c a2.c b1.c; do + $LIBTOOL --mode=compile $CC $CPPFLAGS $CFLAGS -c $file +done +$CC $CPPFLAGS $CFLAGS -c main.c +$LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o liba.la a1.lo a2.lo + +# This could be worked around by adding liba.la to libb.la +# (in that case all objects from liba would be merged into +# libb.a as well, possibly renamed.) +$LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libb.la b1.lo liba.la +AT_CHECK([$LIBTOOL --mode=link --tag=CC \ + $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT liba.la libb.la], + [0], [ignore], [ignore]) +LT_AT_EXEC_CHECK([./main]) + +# This currently fails: +AT_XFAIL_IF([:]) +$LIBTOOL --mode=link --tag=CC $CC $CFLAGS $LDFLAGS -o libb.la b1.lo +AT_CHECK([$LIBTOOL --mode=link --preserve-dup-deps --tag=CC \ + $CC $CFLAGS $LDFLAGS -o main main.$OBJEXT liba.la libb.la liba.la], + [0], [ignore], [ignore]) + +AT_CLEANUP _______________________________________________ Bug-libtool mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-libtool
