2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-16 01:12:13 +00:00

Refactorings. The logic to generate dependencies was duplicated in two

methods.

* build/targets.jam
  (generate-dependency): Remove
  (basic-target.generate-sources): Remove.
  (basic-target.generate-dependencies): New method, contains
  common logic of the two removed methods.
  (basic-target.generate): Generate dependencies/sources using
  'generate-dependencies'
  (basic-target.compute-usage-requirements): Likewise.


[SVN r22147]
This commit is contained in:
Vladimir Prus
2004-02-03 09:24:56 +00:00
parent c49ec1820c
commit 34fef82158

View File

@@ -703,33 +703,6 @@ rule generate-from-reference
return [ $(target).generate $(rproperties) ] ;
}
# Returns two property sets.
# The second one inclues all properties from
# 'property-set', except that all dependency properties are
# generated with 'generation-ps', and the obtained virtual targets
# are added as the values of original features.
# For example, <library>a/b might become <library>object(virtual-target)@1
#
# The first one include all usage requirements propagated from generated
# targets
rule generate-dependencies ( property-set : project : generation-ps )
{
local usage-requirements = [ property-set.empty ] ;
local xproperties ;
for local p in [ $(property-set).dependency ]
{
local g = [ targets.generate-from-reference $(p:TG=) : $(project) : $(generation-ps) ] ;
usage-requirements = [ $(usage-requirements).add $(g[1]) ] ;
xproperties += $(p:G)$(g[2-]) ;
}
local r = [ property-set.create
$(xproperties)
[ $(property-set).non-dependency ] ] ;
return $(usage-requirements) $(r) ;
}
# Implements the most standard way of constructing main target
# alternative from sources. Allows sources to be either file or
# other main target and handles generation of those dependency
@@ -822,34 +795,10 @@ class basic-target : abstract-target
erequirements = [ $(erequirements).expand-composites ] ;
local rproperties = [ $(build-request).refine $(erequirements) ] ;
# TODO: issue a warning when requirements change properties, but
# link-compatibility is still not broken.
return $(rproperties) ;
}
# Generate all sources for this target. Returns property-set with
# usage requirements, followed by the list of virtual targets.
local rule generate-sources ( property-set )
{
local usage-requirements = [ property-set.empty ] ;
local source-targets ;
for local s in $(self.sources)
{
# Try treating this source as reference to main target
local more-targets =
[ targets.generate-from-reference $(s) : $(self.project)
: $(property-set) ] ;
check-for-link-compatibility $(more-targets[2-]) : $(property-set) ;
usage-requirements = [ $(usage-requirements).add $(more-targets[1]) ] ;
source-targets += $(more-targets[2-]) ;
}
return $(usage-requirements) $(source-targets) ;
}
#
# Allows the user to tag the name of the target, according to properties.
#
@@ -871,6 +820,31 @@ class basic-target : abstract-target
return $(tagged-name) ;
}
# Takes a target reference, which might be either target id
# or a dependency property, and generates that target using
# 'property-set' as build request.
#
# The results are added to to variable called 'result-var'.
# Usage requirements are added variable called 'usage-requirements-var'.
rule generate-dependencies ( dependencies * : property-set
: result-var usage-requirements-var )
{
for local dependency in $(dependencies)
{
local grist = $(dependency:G) ;
local id = $(dependency:G=) ;
local result =
[ targets.generate-from-reference $(id) : $(self.project)
: $(property-set) ] ;
check-for-link-compatibility $(result[2-]) : $(property-set) ;
$(result-var) += $(result[2-]:G=$(grist)) ;
$(usage-requirements-var) += [ $(result[1]).raw ] ;
}
}
# Determines final build properties, generates sources,
# and calls 'construct'. This method should not be
# overridden.
@@ -881,23 +855,20 @@ class basic-target : abstract-target
local rproperties = [ refined-properties $(property-set) ] ;
if $(rproperties[1]) != "@error"
{
local usage-requirements = [ property-set.empty ] ;
local source-targets ;
local properties = [ $(rproperties).non-dependency ] ;
local usage-requirements ;
rproperties =
[ targets.generate-dependencies $(rproperties) : $(self.project)
: $(rproperties) ] ;
usage-requirements = [ $(usage-requirements).add $(rproperties[1]) ] ;
rproperties = $(rproperties[2-]) ;
local deps = [ $(rproperties).dependency ] ;
check-for-link-compatibility $(deps:G=) : $(property-set) ;
local source-targets = [ generate-sources $(rproperties) ] ;
generate-dependencies [ $(rproperties).dependency ]
: $(rproperties)
: properties usage-requirements ;
usage-requirements =
[ $(usage-requirements).add $(source-targets[1]) ] ;
source-targets = $(source-targets[2-]) ;
rproperties = [ $(rproperties).add $(usage-requirements) ] ;
generate-dependencies $(self.sources) : $(rproperties)
: source-targets usage-requirements ;
rproperties = [ property-set.create $(properties)
$(usage-requirements) ] ;
usage-requirements = [ property-set.create $(usage-requirements) ] ;
local tagged-name = [ tag-name $(self.name) : $(rproperties) ] ;
@@ -935,12 +906,14 @@ class basic-target : abstract-target
xusage-requirements = [ $(self.usage-requirements).evaluate-conditionals
$(rproperties) ] ;
local xusage-requirements =
[ targets.generate-dependencies
$(xusage-requirements)
: $(self.project) : $(rproperties) ] ;
local recursive-usage-requirements = $(xusage-requirements[1]) ;
local result = [ $(recursive-usage-requirements).add $(xusage-requirements[2-]) ] ;
# We generate all dependency properties and add them,
# as well as their usage requirements, to result.
local extra ;
generate-dependencies [ $(xusage-requirements).dependency ] :
$(rproperties) : extra extra ;
local result = [ property-set.create
[ $(xusage-requirements).non-dependency ] $(extra) ] ;
return $(result) ;
}