Christian Lohmaier wrote:
Hi Stephan,
On Tue, Mar 18, 2008 at 05:14:02PM +0100, Stephan Bergmann wrote:
Christian Lohmaier wrote:
I have not
seen this happen on any other box, and the tinderbox output is not enough
information to track this problem down. If anybody can help, I would be
grateful.
Well, since I still have the buildtree of the breaking build lying
around - what should I try?
For starters, can you make the libcosv.a delivered from module cosv
available to me? Maybe that already helps.
http://muenchen-surf.de/lohmaier/mac/sb83/
the lib is from the build that was done yesterday (08-03-17)
This appears to be a really unfortunate side effect. The problem is in
linking the autodoc executable, with a command line containing
[...] -ludm -lcosv [...] -filelist
../../../unxmacxp.pro/misc/autodoc.list
Both libudm.a and libcosv.a are archives, from which symbols are
referenced by the objects in the autodoc.list filelist.
Older Mac OS X ld versions (like ld -v "Apple Computer, Inc. version
cctools-622.5.obj~13"; Tiger-era) seem to have a bug, that symbols from
archives are not taken into consideration when resolving symbol
references in objects later on the command line. (That is, the
permutated command line
[...] -filelist ../../../unxmacxp.pro/misc/autodoc.list [...] -ludm
-lcosv
would work.) With newer Mac OS X ld versions (like ld -v
"@(#)PROGRAM:ld PROJECT:ld64-77"; Leopard-era) this bug appears to be
fixed (i.e., both command line versions would work.)
The build breaker does not happen in other builds (even with the old ld)
for at least two different reasons:
- Outside CWS sb83, the default is still to build against OOo's STLport,
so there happens to be a -lstlport_gcc before the -ludm -lcosv on the
command line (there is also a second -lstlport_gcc further down the
command line). For some magic reason, this modification of the command
line appears to hide the ld bug (if you remove the first -lstlport_gcc,
the build breaker appears).
- With Aqua instead of X11 builds (even on CWS sb83),
solenv/inc/unxmacx.mk:1.22.14.6 l. 209 causes a -lobjc to appear before
the -ludm -lcosv on the command line. Again, for some magic reason,
this modification of the command line appears to hide the ld bug (again,
if you remove the -lobjc, which is not even needed to link the autodoc
executable, the build breaker appears).
As a workaround for the broken ld, it appears that -Wl,-all_load
anywhere on the command line fixes the problem, too. (There should also
be -noall_load, and maybe wrapping -ludm and -lcosv in
-Wl,-all_load/-Wl,-noall_load would localize its effect, but at least my
ld complains that -noall_load is unknown...) Thus,
---8<---
Index: source/exes/adc_uni/makefile.mk
===================================================================
RCS file: /cvs/tools/autodoc/source/exes/adc_uni/makefile.mk,v
retrieving revision 1.14
diff -u -r1.14 makefile.mk
--- source/exes/adc_uni/makefile.mk 1.14
+++ source/exes/adc_uni/makefile.mk
@@ -85,7 +85,7 @@
APP1STDLIBS= $(LIBSTLPORT) $(COSVLIB) $(UDMLIB)
.ELSE
.IF "$(OS)"=="MACOSX"
-APP1STDLIBS= $(LIBSTLPORT) -ludm -lcosv
+APP1STDLIBS= $(LIBSTLPORT) -Wl,-all_load -ludm -lcosv
.ELSE
APP1STDLIBS= -lcosv -ludm
.ENDIF
---8<---
should solve this.
-Stephan
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]