From 6db40621b9bdcc75f653485defaa44449525740e Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Wed, 19 Feb 2003 00:57:28 +0000 Subject: [PATCH] Uniquely-identify value-specific subfeatures [SVN r17516] --- new/build-request.jam | 12 ++++++------ new/feature.jam | 37 ++++++++++++++++++++++++------------- v2/build/build-request.jam | 12 ++++++------ v2/build/feature.jam | 37 ++++++++++++++++++++++++------------- 4 files changed, 60 insertions(+), 38 deletions(-) diff --git a/new/build-request.jam b/new/build-request.jam index a6b62a3d8..b1be39e5e 100644 --- a/new/build-request.jam +++ b/new/build-request.jam @@ -260,7 +260,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug + gcc/3.0.1/stlport/debug msvc/stlport/debug msvc/debug @@ -268,7 +268,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug/on/dynamic + gcc/3.0.1/stlport/debug/on/dynamic msvc/stlport/debug/on/dynamic msvc/debug/on/native/dynamic @@ -276,7 +276,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug + gcc/3.0.1/stlport/debug msvc/debug debug/msvc/stlport @@ -284,14 +284,14 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug/off - gcc/3.0.1/stlport/release/off + gcc/3.0.1/stlport/debug/off + gcc/3.0.1/stlport/release/off : build-request.expand-no-defaults gcc-3.0.1/stlport debug release off : $(test-space) ; assert.result - a/b/c/gcc/3.0.1/stlport/debug/x/y/z + a/b/c/gcc/3.0.1/stlport/debug/x/y/z a/b/c/msvc/stlport/debug/x/y/z a/b/c/msvc/debug/x/y/z diff --git a/new/feature.jam b/new/feature.jam index f2864e7b5..7b9ec2aad 100644 --- a/new/feature.jam +++ b/new/feature.jam @@ -186,9 +186,7 @@ local rule find-implied-subfeature ( feature subvalue : value-string ? ) error invalid feature $(feature) ; } - value-string ?= "" ; - - return $($(feature)$(value-string)<>$(subvalue).subfeature) ; + return $($(feature)$(value-string:E="")<>$(subvalue).subfeature) ; } # Given a feature and a value of one of its subfeatures, find the name @@ -383,12 +381,13 @@ rule extend-subfeature ( validate-value-string $(feature) $(value-string) ; } + local subfeature-name = [ get-subfeature-name $(subfeature) $(value-string) ] ; + # provide a way to get from the given feature or property and # subfeature value to the subfeature name. - value-string ?= "" ; for local subvalue in $(subvalues) { - $(feature)$(value-string)<>$(subvalue).subfeature = $(subfeature) ; + $(feature)$(value-string:E="")<>$(subvalue).subfeature = $(subfeature-name) ; } } @@ -446,6 +445,12 @@ rule extend ( feature-or-property subfeature ? : values * ) } } +local rule get-subfeature-name ( subfeature value-string ? ) +{ + local prefix = $(value-string): ; + return $(prefix:E="")$(subfeature) ; +} + # Declares a subfeature rule subfeature ( feature # Root feature that is not a subfeature @@ -460,14 +465,20 @@ rule subfeature ( { feature = [ grist $(feature) ] ; validate-feature $(feature) ; - if $(subfeature) in $($(feature).subfeatures) + + # Add grist to the subfeature name if a value-string was supplied + local value-prefix = $(value-string): ; + local subfeature-name = [ get-subfeature-name $(subfeature) $(value-string) ] ; + + if $(subfeature-name) in $($(feature).subfeatures) { - error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\" ; + error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\" + "specific to "$(value-string) ; } - $(feature).subfeatures += $(subfeature) ; + $(feature).subfeatures += $(subfeature-name) ; extend-subfeature $(feature) $(value-string) : $(subfeature) : $(subvalues) ; local f = [ utility.ungrist $(feature) ] ; - feature $(f)-$(subfeature) : $(subvalues) : $(attributes) ; + feature $(f)-$(subfeature-name) : $(subvalues) : $(attributes) ; } # Set the components of the given composite property @@ -660,7 +671,7 @@ rule minimize ( properties * ) { # locate all subproperties of f in the property set local subproperties ; - local subfeatures = $($(f).subfeatures) ; + local subfeatures = $($(f).subfeatures:G=) ; if $(subfeatures) { local f_ = [ utility.ungrist $(f) ] ; @@ -840,13 +851,13 @@ local rule __test__ ( ) action 17 : handle-magic2 ; action 17 : handle-magic3 ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 : expand-subfeatures gcc-3.0.1 ; assert.result foo=x-y : expand-subfeatures foo=x-y ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 : expand-subfeatures gcc-3.0.1 ; feature dummy : dummy1 dummy2 ; @@ -855,7 +866,7 @@ local rule __test__ ( ) assert.result a c e : get-values x : a b c d e ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 debug _DEBUG on : expand gcc-3.0.1 debug on ; diff --git a/v2/build/build-request.jam b/v2/build/build-request.jam index a6b62a3d8..b1be39e5e 100644 --- a/v2/build/build-request.jam +++ b/v2/build/build-request.jam @@ -260,7 +260,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug + gcc/3.0.1/stlport/debug msvc/stlport/debug msvc/debug @@ -268,7 +268,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug/on/dynamic + gcc/3.0.1/stlport/debug/on/dynamic msvc/stlport/debug/on/dynamic msvc/debug/on/native/dynamic @@ -276,7 +276,7 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug + gcc/3.0.1/stlport/debug msvc/debug debug/msvc/stlport @@ -284,14 +284,14 @@ rule __test__ ( ) : $(test-space) ; assert.result - gcc/3.0.1/stlport/debug/off - gcc/3.0.1/stlport/release/off + gcc/3.0.1/stlport/debug/off + gcc/3.0.1/stlport/release/off : build-request.expand-no-defaults gcc-3.0.1/stlport debug release off : $(test-space) ; assert.result - a/b/c/gcc/3.0.1/stlport/debug/x/y/z + a/b/c/gcc/3.0.1/stlport/debug/x/y/z a/b/c/msvc/stlport/debug/x/y/z a/b/c/msvc/debug/x/y/z diff --git a/v2/build/feature.jam b/v2/build/feature.jam index f2864e7b5..7b9ec2aad 100644 --- a/v2/build/feature.jam +++ b/v2/build/feature.jam @@ -186,9 +186,7 @@ local rule find-implied-subfeature ( feature subvalue : value-string ? ) error invalid feature $(feature) ; } - value-string ?= "" ; - - return $($(feature)$(value-string)<>$(subvalue).subfeature) ; + return $($(feature)$(value-string:E="")<>$(subvalue).subfeature) ; } # Given a feature and a value of one of its subfeatures, find the name @@ -383,12 +381,13 @@ rule extend-subfeature ( validate-value-string $(feature) $(value-string) ; } + local subfeature-name = [ get-subfeature-name $(subfeature) $(value-string) ] ; + # provide a way to get from the given feature or property and # subfeature value to the subfeature name. - value-string ?= "" ; for local subvalue in $(subvalues) { - $(feature)$(value-string)<>$(subvalue).subfeature = $(subfeature) ; + $(feature)$(value-string:E="")<>$(subvalue).subfeature = $(subfeature-name) ; } } @@ -446,6 +445,12 @@ rule extend ( feature-or-property subfeature ? : values * ) } } +local rule get-subfeature-name ( subfeature value-string ? ) +{ + local prefix = $(value-string): ; + return $(prefix:E="")$(subfeature) ; +} + # Declares a subfeature rule subfeature ( feature # Root feature that is not a subfeature @@ -460,14 +465,20 @@ rule subfeature ( { feature = [ grist $(feature) ] ; validate-feature $(feature) ; - if $(subfeature) in $($(feature).subfeatures) + + # Add grist to the subfeature name if a value-string was supplied + local value-prefix = $(value-string): ; + local subfeature-name = [ get-subfeature-name $(subfeature) $(value-string) ] ; + + if $(subfeature-name) in $($(feature).subfeatures) { - error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\" ; + error \"$(subfeature)\" already declared as a subfeature of \"$(feature)\" + "specific to "$(value-string) ; } - $(feature).subfeatures += $(subfeature) ; + $(feature).subfeatures += $(subfeature-name) ; extend-subfeature $(feature) $(value-string) : $(subfeature) : $(subvalues) ; local f = [ utility.ungrist $(feature) ] ; - feature $(f)-$(subfeature) : $(subvalues) : $(attributes) ; + feature $(f)-$(subfeature-name) : $(subvalues) : $(attributes) ; } # Set the components of the given composite property @@ -660,7 +671,7 @@ rule minimize ( properties * ) { # locate all subproperties of f in the property set local subproperties ; - local subfeatures = $($(f).subfeatures) ; + local subfeatures = $($(f).subfeatures:G=) ; if $(subfeatures) { local f_ = [ utility.ungrist $(f) ] ; @@ -840,13 +851,13 @@ local rule __test__ ( ) action 17 : handle-magic2 ; action 17 : handle-magic3 ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 : expand-subfeatures gcc-3.0.1 ; assert.result foo=x-y : expand-subfeatures foo=x-y ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 : expand-subfeatures gcc-3.0.1 ; feature dummy : dummy1 dummy2 ; @@ -855,7 +866,7 @@ local rule __test__ ( ) assert.result a c e : get-values x : a b c d e ; - assert.result gcc 3.0.1 + assert.result gcc 3.0.1 debug _DEBUG on : expand gcc-3.0.1 debug on ;