diff --git a/darwin-tools.jam b/darwin-tools.jam index e165f7c1d..52a8caa44 100644 --- a/darwin-tools.jam +++ b/darwin-tools.jam @@ -11,6 +11,13 @@ # 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 ; + flags darwin CFLAGS ; flags darwin C++FLAGS ; flags darwin DEFINES ; @@ -25,12 +32,14 @@ flags darwin ARFLAGS ; flags darwin TARGET_TYPE ; flags darwin FRAMEWORKS ; flags darwin DLLVERSION ; +flags darwin BUNDLE_LOADER ; ARFLAGS ?= "" ; DLLVERSION = $(DLLVERSION[1]) ; DLLVERSION ?= $(BOOST_VERSION) ; -CFLAGS += -Wno-long-double ; +flags darwin CFLAGS : -Wno-long-double -no-cpp-precomp ; +flags darwin C++FLAGS : -fcoalesce-templates ; flags darwin LINKFLAGS static : -static-libgcc ; flags darwin CFLAGS on : -g ; flags darwin LINKFLAGS on : -g ; @@ -46,9 +55,11 @@ flags darwin LINKFLAGS on : -pg ; 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 : -fno-common ; -flags darwin LINKFLAGS $(SHARED_TYPES) : - -nostartfiles -Wl,-dylib -Wl,-ldylib1.o -Wl,-undefined,warning -Wl,-flat_namespace ; +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 : "" ; #### Link #### @@ -72,7 +83,7 @@ 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) $(DLLFLAGS) -framework$(_)$(FRAMEWORKS) + c++ $(LINKFLAGS) -o "$(<[1])" -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(DLL)$(DLLFLAGS) -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" } #### Cc ##### diff --git a/python.jam b/python.jam index 0dc826e03..0a1ba1e0f 100644 --- a/python.jam +++ b/python.jam @@ -135,6 +135,13 @@ rule select-python-library ( toolset variant : properties * ) properties += $(lib) ; } } + if $(OS) = MACOSX && $(toolset) = darwin + { + properties = [ replace $(properties) : dynamic bundle ] ; + properties += + $(PYTHON_ROOT)/bin/python$(PYTHON_VERSION) + ; + } return $(properties) ; } diff --git a/v1/darwin-tools.jam b/v1/darwin-tools.jam index e165f7c1d..52a8caa44 100644 --- a/v1/darwin-tools.jam +++ b/v1/darwin-tools.jam @@ -11,6 +11,13 @@ # 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 ; + flags darwin CFLAGS ; flags darwin C++FLAGS ; flags darwin DEFINES ; @@ -25,12 +32,14 @@ flags darwin ARFLAGS ; flags darwin TARGET_TYPE ; flags darwin FRAMEWORKS ; flags darwin DLLVERSION ; +flags darwin BUNDLE_LOADER ; ARFLAGS ?= "" ; DLLVERSION = $(DLLVERSION[1]) ; DLLVERSION ?= $(BOOST_VERSION) ; -CFLAGS += -Wno-long-double ; +flags darwin CFLAGS : -Wno-long-double -no-cpp-precomp ; +flags darwin C++FLAGS : -fcoalesce-templates ; flags darwin LINKFLAGS static : -static-libgcc ; flags darwin CFLAGS on : -g ; flags darwin LINKFLAGS on : -g ; @@ -46,9 +55,11 @@ flags darwin LINKFLAGS on : -pg ; 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 : -fno-common ; -flags darwin LINKFLAGS $(SHARED_TYPES) : - -nostartfiles -Wl,-dylib -Wl,-ldylib1.o -Wl,-undefined,warning -Wl,-flat_namespace ; +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 : "" ; #### Link #### @@ -72,7 +83,7 @@ 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) $(DLLFLAGS) -framework$(_)$(FRAMEWORKS) + c++ $(LINKFLAGS) -o "$(<[1])" -L"$(LIBPATH:T)" -L"$(STDLIBPATH:T)" "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(DLL)$(DLLFLAGS) -framework$(_)$(FRAMEWORKS) -bundle_loader$(_)"$(BUNDLE_LOADER)" } #### Cc ##### diff --git a/v1/python.jam b/v1/python.jam index 0dc826e03..0a1ba1e0f 100644 --- a/v1/python.jam +++ b/v1/python.jam @@ -135,6 +135,13 @@ rule select-python-library ( toolset variant : properties * ) properties += $(lib) ; } } + if $(OS) = MACOSX && $(toolset) = darwin + { + properties = [ replace $(properties) : dynamic bundle ] ; + properties += + $(PYTHON_ROOT)/bin/python$(PYTHON_VERSION) + ; + } return $(properties) ; }