From 7b47ebce7dd48ce9c7f4c907d2b013c5371122a6 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Thu, 31 Oct 2002 04:46:54 +0000 Subject: [PATCH] Reinstate double-link generation of dynamic libraries. Simplify slightly. Use with Python 2.3 frameworks mostly working. [SVN r16026] --- darwin-tools.jam | 45 ++++++++++++++++++++++++++++++++------------- v1/darwin-tools.jam | 45 ++++++++++++++++++++++++++++++++------------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/darwin-tools.jam b/darwin-tools.jam index 52a8caa44..b1d9f5419 100644 --- a/darwin-tools.jam +++ b/darwin-tools.jam @@ -11,10 +11,6 @@ # For adding framwork libraries; like Python, Carbon, etc. free-feature framework ; -# For indicating wether to create a bundle instead of a shared library when -# linking a DLL target. -feature shared-link : dynamic bundle ; - # Specify the loader for bundles. free-feature bundle-loader ; @@ -56,10 +52,16 @@ flags darwin C++FLAGS off : -fno-rtti ; flags darwin C++FLAGS on : -fvtable-thunks ; flags darwin C++FLAGS off : -fvtable-thunks=0 ; flags darwin CFLAGS true : -fPIC ; -flags darwin LINKFLAGS $(SHARED_TYPES) : -Wl,-m -Wl,-prebind ; -flags darwin LINKFLAGS $(SHARED_TYPES)/dynamic : -Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ; -flags darwin LINKFLAGS $(SHARED_TYPES)/bundle : -bundle ; -flags darwin DLL $(SHARED_TYPES)/dynamic : "" ; +if $(BUNDLE_LOADER) +{ + flags darwin LINKFLAGS $(SHARED_TYPES) : + -bundle ; +} +else +{ + flags darwin LINKFLAGS $(SHARED_TYPES) : + -Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ; +} #### Link #### @@ -67,23 +69,40 @@ flags darwin DLL $(SHARED_TYPES)/dynamic : "" ; rule Link-action { _ on $(<) = " " ; - if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) + DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ; + if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) && ! $(BUNDLE_LOADER) { - DLLFLAGS on $(<) = "-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ; + DLLFLAGS on $(<) = + "-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ; + darwin-Link-DyLib-action $(<) : $(>) ; } else { DLLFLAGS on $(<) = ; + darwin-Link-action $(<) : $(>) ; } - DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ; - darwin-Link-action $(<) : $(>) ; } actions darwin-Link-action bind NEEDLIBS NEEDIMPS { $(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH) $(SHELL_EXPORT)$(gSHELL_LIBPATH) - c++ $(LINKFLAGS) -o "$(<[1])" -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(DLL)$(DLLFLAGS) -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" + c++ $(LINKFLAGS) -o "$(<[1])" "$(>)" \ + -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \ + -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" +} + +actions darwin-Link-DyLib-action bind NEEDLIBS NEEDIMPS +{ + $(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH) + $(SHELL_EXPORT)$(gSHELL_LIBPATH) + ld -dynamic -m -r -d -o "$(<[1]:S=.lo)" "$(>)" \ + && \ + c++ $(LINKFLAGS) $(DLLFLAGS) -o "$(<[1])" "$(<[1]:S=.lo)" \ + -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \ + -framework$(_)$(FRAMEWORKS) \ + && \ + rm -f "$(<[1]:S=.lo)" } #### Cc ##### diff --git a/v1/darwin-tools.jam b/v1/darwin-tools.jam index 52a8caa44..b1d9f5419 100644 --- a/v1/darwin-tools.jam +++ b/v1/darwin-tools.jam @@ -11,10 +11,6 @@ # For adding framwork libraries; like Python, Carbon, etc. free-feature framework ; -# For indicating wether to create a bundle instead of a shared library when -# linking a DLL target. -feature shared-link : dynamic bundle ; - # Specify the loader for bundles. free-feature bundle-loader ; @@ -56,10 +52,16 @@ flags darwin C++FLAGS off : -fno-rtti ; flags darwin C++FLAGS on : -fvtable-thunks ; flags darwin C++FLAGS off : -fvtable-thunks=0 ; flags darwin CFLAGS true : -fPIC ; -flags darwin LINKFLAGS $(SHARED_TYPES) : -Wl,-m -Wl,-prebind ; -flags darwin LINKFLAGS $(SHARED_TYPES)/dynamic : -Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ; -flags darwin LINKFLAGS $(SHARED_TYPES)/bundle : -bundle ; -flags darwin DLL $(SHARED_TYPES)/dynamic : "" ; +if $(BUNDLE_LOADER) +{ + flags darwin LINKFLAGS $(SHARED_TYPES) : + -bundle ; +} +else +{ + flags darwin LINKFLAGS $(SHARED_TYPES) : + -Wl,-dynamic -nostartfiles -Wl,-dylib -Wl,-ldylib1.o ; +} #### Link #### @@ -67,23 +69,40 @@ flags darwin DLL $(SHARED_TYPES)/dynamic : "" ; rule Link-action { _ on $(<) = " " ; - if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) + DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ; + if $(DLLVERSION) && $(TARGET_TYPE) in $(SHARED_TYPES) && ! $(BUNDLE_LOADER) { - DLLFLAGS on $(<) = "-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ; + DLLFLAGS on $(<) = + "-Wl,-dylib_compatibility_version,$(DLLVERSION) -W,l-dylib_current_version,$(DLLVERSION)" ; + darwin-Link-DyLib-action $(<) : $(>) ; } else { DLLFLAGS on $(<) = ; + darwin-Link-action $(<) : $(>) ; } - DEPENDS $(<) : $(NEEDLIBS) $(NEEDIMPS) ; - darwin-Link-action $(<) : $(>) ; } actions darwin-Link-action bind NEEDLIBS NEEDIMPS { $(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH) $(SHELL_EXPORT)$(gSHELL_LIBPATH) - c++ $(LINKFLAGS) -o "$(<[1])" -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(DLL)$(DLLFLAGS) -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" + c++ $(LINKFLAGS) -o "$(<[1])" "$(>)" \ + -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \ + -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" +} + +actions darwin-Link-DyLib-action bind NEEDLIBS NEEDIMPS +{ + $(SHELL_SET)$(gSHELL_LIBPATH)=$(RUN_LD_LIBRARY_PATH) + $(SHELL_EXPORT)$(gSHELL_LIBPATH) + ld -dynamic -m -r -d -o "$(<[1]:S=.lo)" "$(>)" \ + && \ + c++ $(LINKFLAGS) $(DLLFLAGS) -o "$(<[1])" "$(<[1]:S=.lo)" \ + -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) \ + -framework$(_)$(FRAMEWORKS) \ + && \ + rm -f "$(<[1]:S=.lo)" } #### Cc #####