On Darwin, create dylibs with a versioning scheme like Linux/ELF, not like BSD/ELF. This patch uses intentionally ELF_* vars to make it easier to diff against the ELF Makefile. http://sourceforge.net/tracker/index.php?func=detail&aid=2555389&group_id=2406&atid=302406 --- lib/Makefile.darwin-lib +++ lib/Makefile.darwin-lib @@ -1,14 +1,15 @@ # -# This is a Makefile stub which handles the creation of Darwin BSD shared -# libraries. +# This is a Makefile stub which handles the creation of Darwin shared +# libraries based on the ELF scheme. # # In order to use this stub, the following makefile variables must be defined. -# -# BSDLIB_VERSION = 1.0 -# BSDLIB_IMAGE = libce -# BSDLIB_MYDIR = et -# BSDLIB_INSTALL_DIR = $(SHLIBDIR) -# +# +# ELF_VERSION = 1.0 +# ELF_SO_VERSION = 1 +# ELF_IMAGE = libce +# ELF_MYDIR = et +# ELF_INSTALL_DIR = $(SHLIBDIR) +# ELF_OTHER_LIBS = -lc all:: image @@ -16,36 +17,58 @@ $(E) " MKDIR pic" $(Q) mkdir -p pic -BSD_LIB = $(BSDLIB_IMAGE).$(BSDLIB_VERSION).dylib -BSDLIB_PIC_FLAG = -fPIC +ELF_LIB = $(ELF_IMAGE).$(ELF_VERSION).dylib +ELF_SONAME = $(ELF_IMAGE).$(ELF_SO_VERSION).dylib -image: $(BSD_LIB) +image: $(ELF_LIB) -$(BSD_LIB): $(OBJS) - $(E) " GEN_BSD_SOLIB $(BSD_LIB)" - $(Q) (cd pic; $(CC) -dynamiclib -compatibility_version 1.0 -current_version $(BSDLIB_VERSION) \ - -flat_namespace -undefined warning -o $(BSD_LIB) $(OBJS)) - $(Q) $(MV) pic/$(BSD_LIB) . - $(Q) $(RM) -f ../$(BSD_LIB) +$(ELF_LIB): $(OBJS) + $(E) " GEN_ELF_SOLIB $(ELF_LIB)" + $(Q) (cd pic; $(CC) -dynamiclib -o $(ELF_LIB) $(LDFLAGS) \ + -Wl,-install_name,$(libdir)/$(ELF_SONAME) $(OBJS) $(ELF_OTHER_LIBS)) + $(Q) $(MV) pic/$(ELF_LIB) . + $(Q) $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).dylib ../$(ELF_SONAME) $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) \ - `echo $(my_dir) | sed -e 's;lib/;;'`/$(BSD_LIB) $(BSD_LIB)) - $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) $(BSD_LIB) $(BSDLIB_IMAGE).dylib) - -install-shlibs install:: $(BSD_LIB) - $(E) " INSTALL_PROGRAM $(BSDLIB_INSTALL_DIR)/$(BSD_LIB)" - $(Q) $(INSTALL_PROGRAM) $(BSD_LIB) \ - $(DESTDIR)$(BSDLIB_INSTALL_DIR)/$(BSD_LIB) - -$(Q) $(LDCONFIG) + `echo $(my_dir) | sed -e 's;lib/;;'`/$(ELF_LIB) $(ELF_LIB)) + $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) $(ELF_LIB) $(ELF_IMAGE).dylib) + $(Q) (cd ..; $(LN) $(LINK_BUILD_FLAGS) $(ELF_LIB) $(ELF_SONAME)) + +installdirs-elf-lib:: + $(E) " MKINSTALLDIRS $(ELF_INSTALL_DIR) $(libdir)" + $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(ELF_INSTALL_DIR) \ + $(DESTDIR)$(libdir) + +installdirs:: installdirs-elf-lib + +install-shlibs install:: $(ELF_LIB) installdirs-elf-lib + $(E) " INSTALL-ELF-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)" + $(Q) $(INSTALL_PROGRAM) $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB) + $(E) " SYMLINK $(ELF_INSTALL_DIR)/$(ELF_SONAME)" + $(Q) $(LN_S) -f $(ELF_LIB) $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_SONAME) + $(E) " SYMLINK $(libdir)/$(ELF_IMAGE).dylib" + $(Q) if test "$(ELF_INSTALL_DIR)" = "$(libdir)"; then \ + $(LN_S) -f $(ELF_SONAME) $(DESTDIR)$(libdir)/$(ELF_IMAGE).dylib ; \ + else \ + $(LN_S) -f $(ELF_INSTALL_DIR)/$(ELF_SONAME) \ + $(DESTDIR)$(libdir)/$(ELF_IMAGE).dylib; \ + fi install-strip: install + $(E) " STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)" + $(Q) $(STRIP) --strip-unneeded --remove-section=.comment \ + --remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB) install-shlibs-strip: install-shlibs + $(E) " STRIP-LIB $(ELF_INSTALL_DIR)/$(ELF_LIB)" + $(Q) $(STRIP) --strip-unneeded --remove-section=.comment \ + --remove-section=.note $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB) uninstall-shlibs uninstall:: - $(RM) -f $(DESTDIR)$(BSDLIB_INSTALL_DIR)/$(BSD_LIB) + $(RM) -f $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_LIB) \ + $(DESTDIR)$(ELF_INSTALL_DIR)/$(ELF_SONAME) \ + $(DESTDIR)$(libdir)/$(ELF_IMAGE).dylib clean:: $(RM) -rf pic - $(RM) -f $(BSD_LIB) - $(RM) -f ../$(BSD_LIB) - $(RM) -f ../$(BSDLIB_IMAGE).dylib + $(RM) -f $(ELF_LIB) + $(RM) -f ../$(ELF_LIB) ../$(ELF_IMAGE).dylib ../$(ELF_SONAME)