# Copyright (C) Christopher Currie 2003. Permission to copy, use, # modify, sell and distribute this software is granted provided this # copyright notice appears in all copies. This software is provided # "as is" without express or implied warranty, and with no claim as to # its suitability for any purpose. # Please see http://article.gmane.org/gmane.comp.lib.boost.build/3389/ # for explanation why it's a separate toolset. import feature : feature ; import toolset : flags ; import type ; import common ; import generators ; toolset.register darwin ; import gcc ; toolset.inherit-generators darwin : gcc ; generators.override darwin.prebuilt : builtin.prebuilt ; generators.override darwin.searched-lib-generator : searched-lib-generator ; toolset.inherit-rules darwin : gcc ; toolset.inherit-flags darwin : gcc : # On Darwin, static runtime is just not supported. So don't inherit # any flags settings for static static ; # No additional initialization should be necessary rule init ( version ? : command * : options * ) { local condition = [ common.check-init-parameters darwin : version $(version) ] ; local command = [ common.get-invocation-command darwin : g++ : $(command) ] ; common.handle-options darwin : $(condition) : $(command) : $(options) ; # GCC 4.0 and higher in Darwin does not have -fcoalesce-templates. local gccversion = [ SHELL "$(command) -dumpversion" ] ; if $(gccversion) < "4.0.0" { flags darwin.compile.c++ OPTIONS : -fcoalesce-templates ; } gcc.init-link-flags darwin darwin $(condition) ; flags darwin.link NEED_STRIP $(condition)/off : "" ; } feature framework : : free ; flags darwin.compile OPTIONS shared : -dynamic ; flags darwin.compile OPTIONS : -Wno-long-double -no-cpp-precomp ; flags darwin.link FRAMEWORK ; # This is flag is useful for debugging the link step # uncomment to see what libtool is doing under the hood # flags darwin.link.dll OPTIONS : -Wl,-v ; _ = " " ; # set up the -F option to include the paths to any frameworks used. local rule prepare-framework-path ( target + ) { local framework-path = [ on $(target) return $(FRAMEWORK:D) ] ; if $(framework-path) { FRAMEWORK_PATH on $(target) += -F$(framework-path) ; } else { FRAMEWORK_PATH on $(target) = ; } } rule link { prepare-framework-path $(<) ; } actions link bind LIBRARIES { $(CONFIG_COMMAND) -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=) $(OPTIONS) $(USER_OPTIONS) $(NEED_STRIP)strip $(NEED_STRIP)"$(<)" } rule link.dll { prepare-framework-path $(<) ; } actions link.dll bind LIBRARIES { $(CONFIG_COMMAND) -dynamiclib -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=) $(OPTIONS) $(USER_OPTIONS) } actions piecemeal archive { ar -c -r -s $(ARFLAGS) "$(<:T)" "$(>:T)" }