2
0
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:
Vladimir Prus
2003-03-17 09:27:43 +00:00
parent 4129592a73
commit 2e1e547785
6 changed files with 100 additions and 34 deletions

View File

@@ -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) ;
}
}

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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) ;
}
}

View File

@@ -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)
{

View File

@@ -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