id summary reporter owner description type status milestone component version severity resolution keywords cc 7344 Free properties not available in conditional rule anonymous Vladimir Prus "Free properties are not propagated to common-properties2 rule in targets.jam file. Rationale behind this is to optimise caching of already created property-set objects (exactly as stated in rule common-properties, which contains the call). However, this optimisation causes that free features are not passed e.g. to user-defined rules used for evaluation of properties (see example below in the second code listing). Therefore I would propose to drop this optimisation and propagate also free properties (see code listing below). The other possible solution would be to just pass free properties to the common-properties2 rule and thus make them available to the algorithm, but this will introduce another bug (property-set object from cache will be used even though it contains values created from different free properties). == SOLUTION PROPOSAL == {{{ rule common-properties ( build-request requirements ) { local props = [ property-set.create [ $(requirements).base ] [ $(requirements).incidental ] [ $(requirements).free ] ] ; local key = .rp.$(build-request)-$(props) ; if ! $($(key)) { $(key) = [ common-properties2 $(build-request) $(props) ] ; } return $($(key)) ; } }}} == BUG REPRODUCTION == {{{ import feature ; feature.feature define-prefix : : free ; rule define-target-os ( properties * ) { local define-prefix = [ feature.get-values define-prefix : $(properties) ] ; define-prefix ?= """" ; local target-os = [ feature.get-values target-os : $(properties) ] ; return $(define-prefix)TARGET_OS_$(target-os:U) ; } project /root : requirements FOOBAR_ @define-target-os ; exe hello : #sources hello.cpp : #requirements ; }}} " Bugs new To Be Determined build Boost 1.52.0 Problem