Hi Carlo, * Carlo Contavalli wrote on Wed, Jan 18, 2006 at 02:26:27PM CET: > On Wed, Jan 18, 2006 at 09:26:26AM +0100, Ralf Wildenhues wrote: > > Thanks for the concise bug report. Two comments: your libtest.la > > libraries are convenience archives, so this usage should probably > > be accepted. > ok, we both agree on this :) I believe in this case it should be > fixed. A simple hack that worked for me was to modify > func_extract_archives() in ltmain.sh (around line 330 on 1.5.22), > changing: > my_xdir="$my_gentop/$my_xlib" > to: > my_xdir="$my_gentop/$my_xlib.${RANDOM-0}"
Ouch. This can get you in trouble, e.g. by a full disk after several tests with RM=': '. Or, worse, it won't work on systems where the selected shell does not know $RANDOM. > Assuming that $RANDOM comes from a prng with a long period, and that > the clashing libraries will hardly exceed the number of 1-2 on > most environments, it is reasonably safe to assume that no clashing will > ever take place. Try the patch at the end (not yet tested very much); it should not be system-specific. > The error seems to be reported only while working on .a files, no > warning/error while working on .so files. It should happen for convenience archives only, I believe. > > It should be a rather easy workaround to simply to rename one of the > > libraries; is there a reason this is may be unduly difficult in your > > situation? > actually, my environment is much more complex than the example I provided. > litest.la are both supposed to be _modules_ (to be dlopened), not simple > libraries. OK, I kind of guessed it would be complex. ;-) > The directory hierarchy is some kind of "namespace", handled > directly by the application itself that takes care of handling path > problems with dlopen & family. Does it use libltdl for dlpreopening static components? > The problem is that some of the modules, choosen at configure time, > are to be compiled into the application itself, to allow the application > to "bootstrap". Those modules are thus compiled twice, in two different > build trees: once, as dynamic modules, and one more time as convenience > libraries. This may not be necessary, at least there are some situations in which you may be able to get around double compilation. > The binaries that need those modules to "bootstrap" are then linked against > them with simple libtool options. Renaming the module would both imply > a flat namespace, which is something I'd rather try to avoid, and a > complete rework of modules naming conventions (lot of changes in .m4 > macros for configure, and a lot of coding). Sure. > If there's something not allowed/portable/..., I'd expect something > like: "moron don't do that!" from libtool... Yeah, we could do that, too, iff we decide it can't be fixed. > If you need to, I can do some tests / checks or provide you with > the full command lines used to compile the various components, > or as much help as I can. I'm also open to suggestions... Either post all `libtool --mode=link' lines including complete output (also of the convenience libs!), or, even better.. > I know it's something you'd rather try to avoid, but the code I'm > working on is released under GPL. If you need to, you can test it > by yourself by checking it out from the public TLA archives or I > can send you a complete tarball with a brief description of the > installation process. ..show the source (in any one of the ways suggested). I'm eager to see complex real-world setups also to learn more about possible traps to avoid in libtool. Note to Debian libtool maintainer: do not apply the patch below (just yet). Not much tested yet, needs testsuite additions, etc. Cheers, Ralf * ltmain.in (extracted_archives, extracted_serial): New globals. (func_extract_archives): Use them to rename extraction archives for multiple convenience libraries with the same name. Reported by Carlo Contavalli <[EMAIL PROTECTED]>. Index: ltmain.in =================================================================== RCS file: /cvsroot/libtool/libtool/Attic/ltmain.in,v retrieving revision 1.334.2.116 diff -u -r1.334.2.116 ltmain.in --- ltmain.in 11 Jan 2006 17:25:31 -0000 1.334.2.116 +++ ltmain.in 18 Jan 2006 14:51:40 -0000 @@ -136,6 +136,8 @@ preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 ##################################### # Shell function definitions: @@ -327,7 +329,17 @@ *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` - my_xdir="$my_gentop/$my_xlib" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + extracted_serial=`expr $extracted_serial + 1` + my_xlib_u=$my_xlib-$extracted_serial ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]