mirror of
https://github.com/boostorg/build.git
synced 2026-02-12 12:02:24 +00:00
Make virtual-target hierarchy use new style classes.
[SVN r19425]
This commit is contained in:
@@ -40,7 +40,7 @@
|
||||
# 'construct' rule has a parameter, telling if multiple targets can be returned. If
|
||||
# the parameter is false, conversion of extra targets is not performed.
|
||||
|
||||
import class : class new is-a ;
|
||||
import class : class new is-a xnew ;
|
||||
import container : vector ;
|
||||
import numbers : range ;
|
||||
import utility : str equal ;
|
||||
@@ -434,7 +434,7 @@ rule generator (
|
||||
generated-name = $(name) ;
|
||||
}
|
||||
|
||||
targets += [ new file-target $(generated-name) : $(t) : $(project) ] ;
|
||||
targets += [ xnew file-target $(generated-name) : $(t) : $(project) ] ;
|
||||
}
|
||||
# Assign an action for each target
|
||||
local action = [ action-class ] ;
|
||||
@@ -907,7 +907,7 @@ local rule construct-with-caching (
|
||||
}
|
||||
else
|
||||
{
|
||||
local ut = [ new file-target % : [ $(t).type ] : "no project" ] ;
|
||||
local ut = [ xnew file-target % : [ $(t).type ] : "no project" ] ;
|
||||
cresult = [ construct $(project) : $(target-type) $(multiple)
|
||||
: $(property-set) : $(ut) ] ;
|
||||
.transformation.cache.$(signature) = $(cresult) ;
|
||||
|
||||
@@ -13,7 +13,7 @@ import modules ;
|
||||
import feature ;
|
||||
import errors ;
|
||||
import type ;
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import generators : generator ;
|
||||
import property ;
|
||||
import virtual-target ;
|
||||
@@ -118,7 +118,7 @@ rule modifier (
|
||||
new-name ?= [ $(target).name ] ;
|
||||
new-type ?= [ $(target).type ] ;
|
||||
new-project ?= [ $(target).project ] ;
|
||||
local result = [ new file-target $(new-name) : $(new-type) : $(new-project) ] ;
|
||||
local result = [ xnew file-target $(new-name) : $(new-type) : $(new-project) ] ;
|
||||
|
||||
if [ $(target).dependencies ] { $(result).depends [ $(target).dependencies ] ; }
|
||||
$(result).suffix [ $(target).suffix ] ;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# when searching for possible transormation sequences, when it's not known
|
||||
# if particular target should be created at all.
|
||||
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import path property-set utility sequence errors ;
|
||||
|
||||
# +--------------------------+
|
||||
@@ -63,16 +63,19 @@ import path property-set utility sequence errors ;
|
||||
# building, if needed. However, it can be also dropped, which allows
|
||||
# to search for different transformation and select only one.
|
||||
#
|
||||
rule virtual-target ( name # Name of this target -- specifies the name of
|
||||
: project # Project to which this target belongs
|
||||
)
|
||||
xclass virtual-target
|
||||
{
|
||||
import virtual-target utility scanner ;
|
||||
import virtual-target utility scanner ;
|
||||
|
||||
rule __init__ ( name # Name of this target -- specifies the name of
|
||||
: project # Project to which this target belongs
|
||||
)
|
||||
{
|
||||
self.name = $(name) ;
|
||||
self.project = $(project) ;
|
||||
self.dependencies = ;
|
||||
}
|
||||
|
||||
self.name = $(name) ;
|
||||
self.project = $(project) ;
|
||||
self.dependencies = ;
|
||||
|
||||
# Name of this target.
|
||||
rule name ( ) { return $(self.name) ; }
|
||||
|
||||
@@ -186,8 +189,6 @@ rule virtual-target ( name # Name of this target -- specifies the name of
|
||||
|
||||
}
|
||||
|
||||
class virtual-target ;
|
||||
|
||||
|
||||
# Target which correspond to a file. The exact mapping for file
|
||||
# is not yet specified in this class. (TODO: Actually, the class name
|
||||
@@ -199,17 +200,21 @@ class virtual-target ;
|
||||
# The target's grist is concatenation of project's location,
|
||||
# properties of action (for derived files), and, optionally,
|
||||
# value identifying the main target.
|
||||
rule abstract-file-target ( name
|
||||
: type ? # Optional type for this target
|
||||
xclass abstract-file-target : virtual-target
|
||||
{
|
||||
import project regex sequence path type ;
|
||||
|
||||
rule __init__ ( name
|
||||
: type ? # Optional type for this target
|
||||
: project
|
||||
)
|
||||
{
|
||||
virtual-target.__init__ $(name) : $(project) ;
|
||||
import project regex sequence path type ;
|
||||
|
||||
self.type = $(type) ;
|
||||
self.action = ;
|
||||
|
||||
{
|
||||
virtual-target.__init__ $(name) : $(project) ;
|
||||
|
||||
self.type = $(type) ;
|
||||
self.action = ;
|
||||
}
|
||||
|
||||
rule type ( ) { return $(self.type) ; }
|
||||
rule set-type ( type )
|
||||
{
|
||||
@@ -397,7 +402,6 @@ rule abstract-file-target ( name
|
||||
}
|
||||
|
||||
}
|
||||
class abstract-file-target : virtual-target ;
|
||||
|
||||
# File target with explicitly known location.
|
||||
#
|
||||
@@ -413,15 +417,19 @@ class abstract-file-target : virtual-target ;
|
||||
# - the value passed to the 'suffix' method, if any, or
|
||||
# - the suffix which correspond to the target's type.
|
||||
#
|
||||
rule file-target (
|
||||
name
|
||||
: type ? # Optional type for this target
|
||||
: project
|
||||
)
|
||||
xclass file-target : abstract-file-target
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : $(type) : $(project) ;
|
||||
import common ;
|
||||
import common ;
|
||||
|
||||
rule __init__ (
|
||||
name
|
||||
: type ? # Optional type for this target
|
||||
: project
|
||||
)
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : $(type) : $(project) ;
|
||||
}
|
||||
|
||||
rule actualize-location ( target )
|
||||
{
|
||||
if $(self.path)
|
||||
@@ -503,12 +511,13 @@ rule file-target (
|
||||
|
||||
}
|
||||
|
||||
class file-target : abstract-file-target ;
|
||||
|
||||
|
||||
rule notfile-target ( name : project )
|
||||
xclass notfile-target : abstract-file-target
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : : $(project) ;
|
||||
rule __init__ ( name : project )
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : : $(project) ;
|
||||
}
|
||||
|
||||
|
||||
rule actualize-location ( target )
|
||||
{
|
||||
@@ -516,7 +525,6 @@ rule notfile-target ( name : project )
|
||||
ALWAYS $(target) ;
|
||||
}
|
||||
}
|
||||
class notfile-target : abstract-file-target ;
|
||||
|
||||
|
||||
# Returns the binding for the given actual target.
|
||||
@@ -711,11 +719,11 @@ rule from-file ( file : project )
|
||||
if ! $(type)
|
||||
{
|
||||
# warning "cannot determine type for file $(file)" ;
|
||||
result = [ new file-target $(file) : : $(project) ] ;
|
||||
result = [ xnew file-target $(file) : : $(project) ] ;
|
||||
}
|
||||
else
|
||||
{
|
||||
local v = [ new file-target $(name) : $(type) : $(project) ] ;
|
||||
local v = [ xnew file-target $(name) : $(type) : $(project) ] ;
|
||||
$(v).suffix [ MATCH ^.(.*)$ : $(file:S) ] ;
|
||||
result = $(v) ;
|
||||
}
|
||||
@@ -854,7 +862,7 @@ rule clone-template ( target dont-recurse ? : new-source )
|
||||
}
|
||||
else
|
||||
{
|
||||
local cloned = [ new file-target $(new-name) : [ $(target).type ] :
|
||||
local cloned = [ xnew file-target $(new-name) : [ $(target).type ] :
|
||||
[ $(new-source).project ] ] ;
|
||||
|
||||
if ! $(dont-recurse) && [ $(target).action ]
|
||||
|
||||
@@ -168,20 +168,23 @@ rule handle-ndebug ( property : properties * )
|
||||
|
||||
feature.action <optimization>speed : handle-ndebug ;
|
||||
|
||||
|
||||
rule searched-lib-target ( name
|
||||
: project
|
||||
: shared ?
|
||||
: real-name ?
|
||||
: search *
|
||||
)
|
||||
xclass searched-lib-target : abstract-file-target
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : SEARCHED_LIB : $(project) ;
|
||||
rule __init__ ( name
|
||||
: project
|
||||
: shared ?
|
||||
: real-name ?
|
||||
: search *
|
||||
)
|
||||
{
|
||||
abstract-file-target.__init__ $(name) : SEARCHED_LIB : $(project) ;
|
||||
|
||||
self.shared = $(shared) ;
|
||||
self.real-name = $(real-name) ;
|
||||
self.real-name ?= $(name) ;
|
||||
self.search = $(search) ;
|
||||
}
|
||||
|
||||
self.shared = $(shared) ;
|
||||
self.real-name = $(real-name) ;
|
||||
self.real-name ?= $(name) ;
|
||||
self.search = $(search) ;
|
||||
|
||||
rule shared ( )
|
||||
{
|
||||
@@ -208,10 +211,6 @@ rule searched-lib-target ( name
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class searched-lib-target : abstract-file-target ;
|
||||
|
||||
|
||||
type.register LIB : : : main ;
|
||||
|
||||
# register the given type on the specified OSes, or on remaining OSes
|
||||
@@ -466,7 +465,7 @@ rule searched-lib-generator ( )
|
||||
shared = true ;
|
||||
}
|
||||
|
||||
local t = [ new searched-lib-target $(name) : $(project) : $(shared)
|
||||
local t = [ xnew searched-lib-target $(name) : $(project) : $(shared)
|
||||
: [ feature.get-values <name> : $(properties) ]
|
||||
: [ feature.get-values <search> : $(properties) ]
|
||||
] ;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# This module defines the 'make' main target rule.
|
||||
|
||||
import targets ;
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import property ;
|
||||
import errors : error ;
|
||||
import type : type ;
|
||||
@@ -25,7 +25,7 @@ rule make-target-class ( name : project : sources * : requirements *
|
||||
|
||||
rule construct ( source-targets * : property-set )
|
||||
{
|
||||
local t = [ new file-target $(self.name:S=) : [ type.type $(self.name:S) ]
|
||||
local t = [ xnew file-target $(self.name:S=) : [ type.type $(self.name:S) ]
|
||||
: $(self.project) ] ;
|
||||
$(t).suffix [ regex.match .(.*) : $(self.name:S) ] ;
|
||||
local a = [ new action $(t) : $(source-targets) : $(self.make-rule)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# This module defines a special generator, which handles targets with
|
||||
# <file> property. It allows to use prebuilt targets.
|
||||
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import generators ;
|
||||
import feature : feature ;
|
||||
|
||||
@@ -29,7 +29,7 @@ rule prebuilt-file-generator
|
||||
errors.error "Unknown type for prebuilt target " $(name) in $(project) ;
|
||||
}
|
||||
|
||||
local t = [ new file-target $(filename:S=:D=) : $(type) : $(project) ] ;
|
||||
local t = [ xnew file-target $(filename:S=:D=) : $(type) : $(project) ] ;
|
||||
$(t).set-path [ path.parent $(filename) ] ;
|
||||
# By default, Boost.Build determines the suffix of file from its type.
|
||||
# Since we already have file, specify suffix explicitly.
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
# one target can be specified in sources.
|
||||
|
||||
import targets ;
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import property ;
|
||||
import errors : error ;
|
||||
import type : type ;
|
||||
@@ -85,7 +85,7 @@ rule stage-target-class ( name-and-dir : project : sources * : requirements * :
|
||||
n = $(name) ;
|
||||
}
|
||||
|
||||
i2 = [ new file-target $(n:D=) : [ $(i).type ]
|
||||
i2 = [ xnew file-target $(n:D=) : [ $(i).type ]
|
||||
: $(self.project) ] ;
|
||||
local a = [ new action $(i2) : $(i) : common.copy ] ;
|
||||
$(i2).suffix [ $(i).suffix ] ;
|
||||
@@ -123,7 +123,7 @@ rule stage-exe-generator
|
||||
# FIXME: this must become some rule in virtual-target module
|
||||
# we're cloning the target and action.
|
||||
local n = [ $(source).name ] ;
|
||||
local cloned-target = [ new file-target $(n:D=) : [ $(source).type ]
|
||||
local cloned-target = [ xnew file-target $(n:D=) : [ $(source).type ]
|
||||
: $(project) ] ;
|
||||
local d = [ $(source).dependencies ] ;
|
||||
if $(d)
|
||||
|
||||
@@ -54,7 +54,7 @@ rule symlink-targets (
|
||||
for local t in $(source-targets)
|
||||
{
|
||||
local s = $(self.targets[$(i)]) ;
|
||||
local vt = [ class.new file-target $(s:D=) : [ $(t).type ] : $(self.project) ] ;
|
||||
local vt = [ class.xnew file-target $(s:D=) : [ $(t).type ] : $(self.project) ] ;
|
||||
$(vt).action [ class.new action $(vt) : $(t) : symlink.ln : $(property-set) ] ;
|
||||
|
||||
# Place the symlink in the directory relative to the project
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
# Testing support.
|
||||
|
||||
import targets ;
|
||||
import class : class new ;
|
||||
import class : class new xnew ;
|
||||
import property ;
|
||||
import feature ;
|
||||
import toolset ;
|
||||
@@ -27,7 +27,7 @@ rule unit-test-target-class ( name : project : sources * : requirements *
|
||||
[ typed-target.construct $(source-targets) : $(properties) ] ;
|
||||
local exe = $(result[1]) ;
|
||||
local exe-action = [ $(exe).action ] ;
|
||||
local timestamp = [ new file-target $(self.name) : : $(self.project) ] ;
|
||||
local timestamp = [ xnew file-target $(self.name) : : $(self.project) ] ;
|
||||
$(timestamp).suffix "passed" ;
|
||||
|
||||
local a = [ new action $(timestamp) : $(exe) : testing.run :
|
||||
|
||||
Reference in New Issue
Block a user