Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r57558 - trunk/tools/build/v2/tools
From: grafikrobot_at_[hidden]
Date: 2009-11-10 20:09:02


Author: grafik
Date: 2009-11-10 20:09:00 EST (Tue, 10 Nov 2009)
New Revision: 57558
URL: http://svn.boost.org/trac/boost/changeset/57558

Log:
Generalize the detection and addition of OSX SDKs so that it doesn't rely on a fixed feature list.
Text files modified:
   trunk/tools/build/v2/tools/darwin.jam | 165 +++++++++++++++++++++++----------------
   1 files changed, 97 insertions(+), 68 deletions(-)

Modified: trunk/tools/build/v2/tools/darwin.jam
==============================================================================
--- trunk/tools/build/v2/tools/darwin.jam (original)
+++ trunk/tools/build/v2/tools/darwin.jam 2009-11-10 20:09:00 EST (Tue, 10 Nov 2009)
@@ -24,29 +24,11 @@
 ## Use a framework.
 feature framework : : free ;
 
-## The MacOSX versions we can target.
-.macosx-versions =
- 10.6 10.5 10.4 10.3 10.2 10.1
- iphone-3.2 iphonesim-3.2
- iphone-3.1.2 iphonesim-3.1.2
- iphone-3.1 iphonesim-3.1
- iphone-3.0 iphonesim-3.0
- iphone-2.2.1 iphonesim-2.2.1
- iphone-2.2 iphonesim-2.2
- iphone-2.1 iphonesim-2.1
- iphone-2.0 iphonesim-2.0
- iphone-1.x
- ;
-
 ## The MacOSX version to compile for, which maps to the SDK to use (sysroot).
-feature macosx-version
- : $(.macosx-versions)
- : propagated link-incompatible symmetric optional ;
+feature macosx-version : : propagated link-incompatible symmetric optional ;
 
 ## The minimal MacOSX version to target.
-feature macosx-version-min
- : $(.macosx-versions)
- : propagated optional ;
+feature macosx-version-min : : propagated optional ;
 
 #############################################################################
 
@@ -190,7 +172,7 @@
         flags darwin.link .STRIP $(condition) : $(strip[1]) ;
         if $(.debug-configuration)
         {
- ECHO notice: using strip :: $(condition) :: $(strip[1]) ;
+ ECHO notice: using strip for $(condition) at $(strip[1]) ;
         }
     }
 
@@ -202,7 +184,7 @@
     flags darwin.archive .LIBTOOL $(condition) : $(archiver[1]) ;
     if $(.debug-configuration)
     {
- ECHO notice: using archiver :: $(condition) :: $(archiver[1]) ;
+ ECHO notice: using archiver for $(condition) at $(archiver[1]) ;
     }
     
     # - Initialize the SDKs available in the root for this tool.
@@ -220,6 +202,94 @@
     #~ EXIT ;
 }
 
+# Add and set options for a discovered SDK version.
+local rule init-sdk ( condition * : root ? : version + : version-feature ? )
+{
+ local rule version-to-feature ( version + )
+ {
+ switch $(version[1])
+ {
+ case iphone* :
+ {
+ return $(version[1])-$(version[2-]:J=.) ;
+ }
+ case mac* :
+ {
+ return $(version[2-]:J=.) ;
+ }
+ case * :
+ {
+ return $(version:J=.) ;
+ }
+ }
+ }
+
+ if $(version-feature)
+ {
+ if $(.debug-configuration)
+ {
+ ECHO notice: available sdk for $(condition)/<macosx-version>$(version-feature) at $(sdk) ;
+ }
+
+ # Add the version to the features for specifying them.
+ if ! $(version-feature) in [ feature.values macosx-version ]
+ {
+ feature.extend macosx-version : $(version-feature) ;
+ }
+ if ! $(version-feature) in [ feature.values macosx-version-min ]
+ {
+ feature.extend macosx-version-min : $(version-feature) ;
+ }
+
+ # Set the flags the version needs to compile with, first
+ # generic options.
+ flags darwin.compile OPTIONS $(condition)/<macosx-version>$(version-feature)
+ : -isysroot $(sdk) ;
+ flags darwin.link OPTIONS $(condition)/<macosx-version>$(version-feature)
+ : -isysroot $(sdk) ;
+
+ # Then device variation options.
+ switch $(version[1])
+ {
+ case iphone* :
+ {
+ flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ }
+
+ case mac* :
+ {
+ flags darwin.compile OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ flags darwin.link OPTIONS <macosx-version-min>$(version-feature)
+ : -miphoneos-version-min=$(version[2-]:J=.) ;
+ }
+ }
+
+ return $(version-feature) ;
+ }
+ else if $(version[4])
+ {
+ # We have a patch version of an SDK. We want to set up
+ # both the specific patch version, and the minor version.
+ # So we recurse to set up the minor version. Plus the minor version.
+ return
+ [ init-sdk $(condition) : $(root)
+ : $(version[1-3]) : [ version-to-feature $(version[1-3]) ] ]
+ [ init-sdk $(condition) : $(root)
+ : $(version) : [ version-to-feature $(version) ] ] ;
+ }
+ else
+ {
+ # Yes, this is intentionally recursive.
+ return
+ [ init-sdk $(condition) : $(root)
+ : $(version) : [ version-to-feature $(version) ] ] ;
+ }
+}
+
 # Determine the MacOSX SDK versions installed and their locations.
 local rule init-available-sdk-versions ( condition * : root ? )
 {
@@ -231,45 +301,29 @@
     {
         local sdk-match = [ MATCH ([^0-9]+)([0-9]+)[.]([0-9x]+)[.]?([0-9x]+)? : $(sdk:D=) ] ;
         local sdk-platform = $(sdk-match[1]:L) ;
- local sdk-version = $(sdk-match[2]).$(sdk-match[3]) ;
+ local sdk-version = $(sdk-match[2-]) ;
         if $(sdk-version)
         {
             switch $(sdk-platform)
             {
                 case macosx :
                 {
- sdk-version = $(sdk-version) ;
+ sdk-version = mac $(sdk-version) ;
                 }
                 case iphoneos :
                 {
- if $(sdk-match[4])
- {
- sdk-version = $(sdk-version).$(sdk-match[4]) ;
- }
- sdk-version = iphone-$(sdk-version) ;
+ sdk-version = iphone $(sdk-version) ;
                 }
                 case iphonesimulator :
                 {
- if $(sdk-match[4])
- {
- sdk-version = $(sdk-version).$(sdk-match[4]) ;
- }
- sdk-version = iphonesim-$(sdk-version) ;
+ sdk-version = iphonesim $(sdk-version) ;
                 }
                 case * :
                 {
                     sdk-version = $(sdk-version:J=-) ;
                 }
             }
- result += $(sdk-version) ;
- flags darwin.compile OPTIONS $(condition)/<macosx-version>$(sdk-version)
- : -isysroot $(sdk) ;
- flags darwin.link OPTIONS $(condition)/<macosx-version>$(sdk-version)
- : -isysroot $(sdk) ;
- if $(.debug-configuration)
- {
- ECHO notice: available sdk :: $(condition)/<macosx-version>$(sdk-version) :: $(sdk) ;
- }
+ result += [ init-sdk $(condition) : $(sdk) : $(sdk-version) ] ;
         }
     }
     return $(result) ;
@@ -278,31 +332,6 @@
 # Generic options.
 flags darwin.compile OPTIONS <flags> ;
 
-# Minimal OSX target option. Note that the default is for the min-version
-# option to not be included to let the compiler default take hold.
-for local macosx-version in $(.macosx-versions)
-{
- switch $(macosx-version)
- {
- case iphone* :
- {
- local version-match = [ MATCH ([^0-9]+)([0-9.]+) : $(macosx-version) ] ;
- flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
- : -miphoneos-version-min=$(version-match[2]) ;
- flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
- : -miphoneos-version-min=$(version-match[2]) ;
- }
-
- case * :
- {
- flags darwin.compile OPTIONS <macosx-version-min>$(macosx-version)
- : -mmacosx-version-min=$(macosx-version) ;
- flags darwin.link OPTIONS <macosx-version-min>$(macosx-version)
- : -mmacosx-version-min=$(macosx-version) ;
- }
- }
-}
-
 # The following adds objective-c support to darwin.
 # Thanks to http://thread.gmane.org/gmane.comp.lib.boost.build/13759
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk