Travis Vitek wrote:
Eric Lemings wrote:

Travis Vitek wrote:

Travis Vitek wrote:


Eric Lemings wrote:

Well I see one small problem already for which there is already a workaround. The BUILDDIR variable is assigned a value in makefile.in but it isn't set in the -install_name option when linking the library for some odd reason. In this case, the 4.2.0 workaround -- already documented I believe -- using DYDLD_LIBRARY_PATH is needed.
I didn't see that this was documented anywhere, but I did find some
conversation on the topic in the archives. You can peruse that thread
here [http://tinyurl.com/4saetr].

It looks like the original issue was never resolved. It seems to me that Martin is right, the build/test infrastructure should be setting DYLD_LIBRARY_PATH for shared builds just as it does for LD_LIBRARY_PATH on other platforms.
Slight problem with that.  The required change would have to be made to
a makefile that does not currently contain platform dependencies.


The two files I found that would need changes [they referenced
LD_LIBRARY_PATH] were makefile.rules and GNUmakefile.cfg, both of which
have at least one platform specific block.

Or we could just set DYLD_LIBRARY_PATH on all platforms
though I doubt some will care for that.  :)


That is what was done in one of the cases in the run block of
GNUmakefile.cfg for LD_LIBRARY_PATH and LIBPATH. I don't see any
motivating reason to avoid doing the same.

In my testing that seems to work just fine. You might have a look at the
patch shown below.

Index: gcc.config
===================================================================
--- gcc.config  (revision 652071)
+++ gcc.config  (working copy)
@@ -93,16 +93,13 @@
     endif
 endif
-ifneq ($(OSNAME),Darwin)
+ifeq ($(OSNAME),Darwin)
     # no -shared option for GCC on Mac OS X (Darwin)
-    LDSOFLAGS = -shared
+    LDSOFLAGS  = -dynamiclib
+    LDSOFLAGS += -compatibility_version 4 -current_version $(LIBVER)
 else
     # Flags needed when linking the library
-    LDSOFLAGS = \
--dynamiclib \
--install_name $(BUILDDIR)/lib/$(LIBNAME) \
--compatibility_version 4 \
--current_version $(LIBVER)
+    LDSOFLAGS = -shared
 endif
Index: GNUmakefile.cfg
===================================================================
--- GNUmakefile.cfg     (revision 652071)
+++ GNUmakefile.cfg     (working copy)
@@ -249,9 +249,10 @@
                   test -f $$file.o -a ! $$? -eq 0 ;
\
               else
\
                   echo "./$$file" >>$(LOGFILE) ;
\
+                  DYLD_LIBRARY_PATH=$$DYLD_LIBRARY_PATH:. ;

I don't think we want this. In fact, I don't even think we want
to be setting LD_LIBRARY_PATH here because it's platform-specific
too (HP-UX has SHLIB_PATH in addition to LD_LIBRARY_PATH, Solaris
has LD_LIBRARY_PATH64 for 64-bit executables). I think we might
be able to use GNU make's value function to parametrize
GNUmakefile.cfg on a generic variable that we set in each .config
file to the name of the corresponding variable on each platform.
Like so:

# gcc.config
ifeq ($(OSNAME),Darwin)
  LDPATHVAR := DYLD_LIBRARY_PATH
else
  LDPATHVAR := LD_LIBRARY_PATH
endif

# GNUmakefile.*
        $(value LDPATHVAR)=$(value $(value LDPATHVAR)):.; \
        export $(value LDPATHVAR); \
        ...

Martin

Reply via email to