diff --git a/new/feature.jam b/new/feature.jam index f681cddc8..ee5005b05 100644 --- a/new/feature.jam +++ b/new/feature.jam @@ -127,9 +127,23 @@ rule feature ( $(attributes).features += $(name) ; .all-features += $(name) ; - extend $(name) : $(values) ; + extend $(name) : $(values) ; } +# set default value of the given feature, overriding any previous +# default. +rule set-default ( feature : value ) +{ + local f = [ grist $(feature) ] ; + if ! $(value) in $($(f).values) + { + errors.error "The specified default value, '$(value)' is invalid" + : "values values are " $($(f).values) ; + } + $(f).default = $(value) ; +} + + # return the default property values for the given features. rule defaults ( features * ) { @@ -142,7 +156,7 @@ rule defaults ( features * ) } else { - result += $(f)$($(f).values[1]) ; + result += $(f)$($(f).default) ; } } return $(result) ; @@ -369,6 +383,12 @@ local rule extend-feature ( feature : values * ) .all-implicit-values += $(values) ; } + if ! $($(feature).values) + { + # This is the first value specified for this feature, + # take it as default value + $(feature).default = $(values[1]) ; + } $(feature).values += $(values) ; } @@ -964,6 +984,12 @@ local rule __test__ ( ) gcc debug native dummy1 : add-defaults static foobar on gcc:FOO ; + + set-default : static ; + assert.result static + : defaults + ; + assert.result gcc foo stlport 3 /path/to/stlport MAGIC=3 : run-actions gcc foo stlport 3 diff --git a/v2/build/feature.jam b/v2/build/feature.jam index f681cddc8..ee5005b05 100644 --- a/v2/build/feature.jam +++ b/v2/build/feature.jam @@ -127,9 +127,23 @@ rule feature ( $(attributes).features += $(name) ; .all-features += $(name) ; - extend $(name) : $(values) ; + extend $(name) : $(values) ; } +# set default value of the given feature, overriding any previous +# default. +rule set-default ( feature : value ) +{ + local f = [ grist $(feature) ] ; + if ! $(value) in $($(f).values) + { + errors.error "The specified default value, '$(value)' is invalid" + : "values values are " $($(f).values) ; + } + $(f).default = $(value) ; +} + + # return the default property values for the given features. rule defaults ( features * ) { @@ -142,7 +156,7 @@ rule defaults ( features * ) } else { - result += $(f)$($(f).values[1]) ; + result += $(f)$($(f).default) ; } } return $(result) ; @@ -369,6 +383,12 @@ local rule extend-feature ( feature : values * ) .all-implicit-values += $(values) ; } + if ! $($(feature).values) + { + # This is the first value specified for this feature, + # take it as default value + $(feature).default = $(values[1]) ; + } $(feature).values += $(values) ; } @@ -964,6 +984,12 @@ local rule __test__ ( ) gcc debug native dummy1 : add-defaults static foobar on gcc:FOO ; + + set-default : static ; + assert.result static + : defaults + ; + assert.result gcc foo stlport 3 /path/to/stlport MAGIC=3 : run-actions gcc foo stlport 3