mirror of
https://github.com/boostorg/build.git
synced 2026-02-21 15:02:19 +00:00
Better direct request handling.
* new/build-request.jam (directly-requested-properties-adjuster): Redo. * new/targets.jam (main-target.generate-really): Adjust properties here. * new/virtual-target.jam (register-actual-name): New rule. (virtual-target.actualize-no-scanner): Call the above, to detected bugs, where two virtual target correspond to one Jam target name. [SVN r17955]
This commit is contained in:
@@ -227,29 +227,45 @@ local rule convert-command-line-element ( e : feature-space )
|
||||
# targets.
|
||||
rule directly-requested-properties-adjuster
|
||||
{
|
||||
self.empty-request-requirements = ;
|
||||
self.all-requests = [ new property-map ] ;
|
||||
rule add-requested-property-set ( property-set )
|
||||
{
|
||||
local base = [ $(property-set).base ] ;
|
||||
local ep = $(self.direct-request.$(base:J=-)) ;
|
||||
if $(ep) && $(ep) != $(properties)
|
||||
{
|
||||
error "Conflicting direct build requests" $(ep) "and" $(properties) ;
|
||||
if ! $(base)
|
||||
{
|
||||
self.empty-request-requirements = $(property-set) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.direct-request.$(base:J=-) = $(property-set) ;
|
||||
}
|
||||
$(self.all-requests).insert $(base) : $(property-set) ;
|
||||
}
|
||||
}
|
||||
|
||||
rule adjust ( property-set )
|
||||
{
|
||||
local base = [ $(property-set).base ] ;
|
||||
local ep = $(self.direct-request.$(base:J=-)) ;
|
||||
if $(ep)
|
||||
local extra ;
|
||||
local result ;
|
||||
|
||||
if $(self.empty-request-requirements)
|
||||
{
|
||||
property-set = $(ep) ;
|
||||
extra = $(self.empty-request-requirements) ;
|
||||
}
|
||||
return $(property-set) ;
|
||||
else
|
||||
{
|
||||
extra = [ $(self.all-requests).find $(base) ] ;
|
||||
}
|
||||
if $(extra)
|
||||
{
|
||||
result = [ $(property-set).add
|
||||
[ property-set.create [ $(extra).free ] ] ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = $(property-set) ;
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ rule main-target ( name : project )
|
||||
|
||||
rule set-property-adjuster ( property-adjuster )
|
||||
{
|
||||
self.direct-request-property-adjuster = $(property-adjuster) ;
|
||||
self.property-adjuster = $(property-adjuster) ;
|
||||
}
|
||||
|
||||
local rule select-alternatives ( property-set )
|
||||
@@ -344,12 +344,6 @@ rule main-target ( name : project )
|
||||
# Returns the result of calling 'generate' on that alternative.
|
||||
rule generate ( property-set )
|
||||
{
|
||||
if $(self.property-adjuster)
|
||||
{
|
||||
property-set = [ $(self.property-adjuster).adjust
|
||||
$(property-set) ] ;
|
||||
}
|
||||
|
||||
local all-property-sets = [ apply-default-build $(property-set) ] ;
|
||||
local result ;
|
||||
for local p in $(all-property-sets)
|
||||
@@ -361,6 +355,12 @@ rule main-target ( name : project )
|
||||
|
||||
local rule generate-really ( property-set )
|
||||
{
|
||||
if $(self.property-adjuster)
|
||||
{
|
||||
property-set = [ $(self.property-adjuster).adjust
|
||||
$(property-set) ] ;
|
||||
}
|
||||
|
||||
local best-alternatives = [ select-alternatives $(property-set) ] ;
|
||||
if ! $(best-alternatives)
|
||||
{
|
||||
|
||||
@@ -162,6 +162,8 @@ rule virtual-target ( name # Name of this target -- specifies the name of
|
||||
# Do anything only on the first invocation
|
||||
if ! $(self.made.$(name)) {
|
||||
self.made.$(name) = true ;
|
||||
|
||||
virtual-target.register-actual-name $(name) : $(__name__) ;
|
||||
|
||||
for local i in $(self.dependencies) {
|
||||
DEPENDS $(name) : [ $(i).actualize ] ;
|
||||
@@ -738,6 +740,21 @@ rule register ( target )
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
rule register-actual-name ( actual-name : virtual-target )
|
||||
{
|
||||
if $(.actual.$(actual-name))
|
||||
{
|
||||
errors.error "Duplicate name of actual target:" $(actual-name)
|
||||
: "previous virtual target" [ $(.actual.$(actual-name)).str ]
|
||||
: "another virtual target" [ $(virtual-target).str ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
.actual.$(actual-name) = $(virtual-target) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Traverses the dependency graph of 'target' and return all targets that will
|
||||
# be created before this one is created. If root of some dependency graph is
|
||||
# found during traversal, it's either included or not, dependencing of the
|
||||
|
||||
@@ -227,29 +227,45 @@ local rule convert-command-line-element ( e : feature-space )
|
||||
# targets.
|
||||
rule directly-requested-properties-adjuster
|
||||
{
|
||||
self.empty-request-requirements = ;
|
||||
self.all-requests = [ new property-map ] ;
|
||||
rule add-requested-property-set ( property-set )
|
||||
{
|
||||
local base = [ $(property-set).base ] ;
|
||||
local ep = $(self.direct-request.$(base:J=-)) ;
|
||||
if $(ep) && $(ep) != $(properties)
|
||||
{
|
||||
error "Conflicting direct build requests" $(ep) "and" $(properties) ;
|
||||
if ! $(base)
|
||||
{
|
||||
self.empty-request-requirements = $(property-set) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.direct-request.$(base:J=-) = $(property-set) ;
|
||||
}
|
||||
$(self.all-requests).insert $(base) : $(property-set) ;
|
||||
}
|
||||
}
|
||||
|
||||
rule adjust ( property-set )
|
||||
{
|
||||
local base = [ $(property-set).base ] ;
|
||||
local ep = $(self.direct-request.$(base:J=-)) ;
|
||||
if $(ep)
|
||||
local extra ;
|
||||
local result ;
|
||||
|
||||
if $(self.empty-request-requirements)
|
||||
{
|
||||
property-set = $(ep) ;
|
||||
extra = $(self.empty-request-requirements) ;
|
||||
}
|
||||
return $(property-set) ;
|
||||
else
|
||||
{
|
||||
extra = [ $(self.all-requests).find $(base) ] ;
|
||||
}
|
||||
if $(extra)
|
||||
{
|
||||
result = [ $(property-set).add
|
||||
[ property-set.create [ $(extra).free ] ] ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = $(property-set) ;
|
||||
}
|
||||
return $(result) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ rule main-target ( name : project )
|
||||
|
||||
rule set-property-adjuster ( property-adjuster )
|
||||
{
|
||||
self.direct-request-property-adjuster = $(property-adjuster) ;
|
||||
self.property-adjuster = $(property-adjuster) ;
|
||||
}
|
||||
|
||||
local rule select-alternatives ( property-set )
|
||||
@@ -344,12 +344,6 @@ rule main-target ( name : project )
|
||||
# Returns the result of calling 'generate' on that alternative.
|
||||
rule generate ( property-set )
|
||||
{
|
||||
if $(self.property-adjuster)
|
||||
{
|
||||
property-set = [ $(self.property-adjuster).adjust
|
||||
$(property-set) ] ;
|
||||
}
|
||||
|
||||
local all-property-sets = [ apply-default-build $(property-set) ] ;
|
||||
local result ;
|
||||
for local p in $(all-property-sets)
|
||||
@@ -361,6 +355,12 @@ rule main-target ( name : project )
|
||||
|
||||
local rule generate-really ( property-set )
|
||||
{
|
||||
if $(self.property-adjuster)
|
||||
{
|
||||
property-set = [ $(self.property-adjuster).adjust
|
||||
$(property-set) ] ;
|
||||
}
|
||||
|
||||
local best-alternatives = [ select-alternatives $(property-set) ] ;
|
||||
if ! $(best-alternatives)
|
||||
{
|
||||
|
||||
@@ -162,6 +162,8 @@ rule virtual-target ( name # Name of this target -- specifies the name of
|
||||
# Do anything only on the first invocation
|
||||
if ! $(self.made.$(name)) {
|
||||
self.made.$(name) = true ;
|
||||
|
||||
virtual-target.register-actual-name $(name) : $(__name__) ;
|
||||
|
||||
for local i in $(self.dependencies) {
|
||||
DEPENDS $(name) : [ $(i).actualize ] ;
|
||||
@@ -738,6 +740,21 @@ rule register ( target )
|
||||
return $(result) ;
|
||||
}
|
||||
|
||||
rule register-actual-name ( actual-name : virtual-target )
|
||||
{
|
||||
if $(.actual.$(actual-name))
|
||||
{
|
||||
errors.error "Duplicate name of actual target:" $(actual-name)
|
||||
: "previous virtual target" [ $(.actual.$(actual-name)).str ]
|
||||
: "another virtual target" [ $(virtual-target).str ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
.actual.$(actual-name) = $(virtual-target) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Traverses the dependency graph of 'target' and return all targets that will
|
||||
# be created before this one is created. If root of some dependency graph is
|
||||
# found during traversal, it's either included or not, dependencing of the
|
||||
|
||||
Reference in New Issue
Block a user