Index: build/property.jam =================================================================== --- build/property.jam (revision 47466) +++ build/property.jam (working copy) @@ -511,7 +511,36 @@ return $(result) ; } +rule translate-dependencies ( specification * : project-id ) +{ + local result ; + for local p in $(specification) + { + local split = [ split-conditional $(p) ] ; + local condition = "" ; + if $(split) + { + condition = $(split[1]): ; + p = $(split[2]) ; + } + if dependency in [ feature.attributes $(p:G) ] + { + if [ regex.match (.*//.*) : $(p:G=) ] { + result += $(condition)$(p) ; + } else { + result += $(condition)$(p:G)$(project-id)//$(p:G=) ; + } + } + else + { + result += $(condition)$(p) ; + } + } + return $(result) ; +} + + # Class maintaining a property set -> string mapping. # class property-map Index: build/property-set.jam =================================================================== --- build/property-set.jam (revision 47466) +++ build/property-set.jam (working copy) @@ -378,10 +378,15 @@ # rule create-from-user-input ( raw-properties * : jamfile-module location ) { + import project ; + import path ; local specification = [ property.translate-paths $(raw-properties) : $(location) ] ; specification = [ property.translate-indirect $(specification) : $(jamfile-module) ] ; + local project-id = [ project.attribute $(jamfile-module) id ] ; + project-id ?= [ path.root [ project.attribute $(jamfile-module) location ] [ path.pwd ] ] ; + specification = [ property.translate-dependencies $(specification) : $(project-id) ] ; specification = [ property.expand-subfeatures-in-conditions $(specification) ] ; specification = [ property.make $(specification) ] ;