2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-17 01:32:12 +00:00
Files
build/test/project-test2/project-test2.jam
Vladimir Prus f0a1a314c3 Futher cleanups. Tests now pass.
* new/targets.jam: Rename 'abstract-target::local-name' to 'name'. Rename
        'abstract-target::name()' to 'abstract-target::full-name()'.
    * test/project-test2/project-test2.jam: Induces change.


[SVN r14247]
2002-06-27 11:00:05 +00:00

144 lines
2.9 KiB
Plaintext

import project ;
import targets ;
import assert ;
import class : class new ;
import feature : feature compose ;
import build-request ;
import property ;
feature toolset : : implicit ;
feature optimization : off space speed ;
feature runtime-link : dynamic static : link-incompatible ;
feature rtti : on off : link-incompatible ;
feature threading : single multi : link-incompatible ;
feature "include" : : free path ;
feature variant : debug release : implicit composite ;
compose <variant>debug : <optimization>off ;
compose <variant>release : <optimization>on ;
rule main-target-class ( name : project : requirements * )
{
basic-target.__init__ $(name) : $(project) : : $(requirements) ;
import class : new ;
rule construct ( source-targets * : properties * )
{
local t = [ new virtual-target $(self.name)
: $(self.project) : $(properties) ] ;
local a = [ new action $(t) : : project-test2.touch-file : $(properties) ] ;
$(t).action $(a) ;
return $(t) ;
}
}
class main-target-class : basic-target ;
rule touch-file ( targets + : sources * : properties * )
{
PROPERTIES on $(targets) = $(properties) ;
}
actions touch-file
{
echo " $(PROPERTIES) ">$(<)
}
rule main-target ( name : requirements * )
{
local project = [ CALLER_MODULE ] ;
local ptarget = [ $(project).target ] ;
local target = [ $(ptarget).main-target $(name) ] ;
$(target).add-variant
[ new main-target-class $(name) : $(project) : $(requirements) ] ;
}
IMPORT $(__name__) : main-target : : main-target ;
rule MakeLocate
{
if $(>)
{
LOCATE on $(<) = $(>) ;
Depends $(<) : $(>[1]) ;
MkDir $(>[1]) ;
}
}
rule MkDir
{
# If dir exists, don't update it
# Do this even for $(DOT).
NOUPDATE $(<) ;
if $(<) != $(DOT) && ! $($(<)-mkdir)
{
local s ;
# Cheesy gate to prevent multiple invocations on same dir
# MkDir1 has the actions
# Arrange for jam dirs
$(<)-mkdir = true ;
MkDir1 $(<) ;
Depends dirs : $(<) ;
# Recursively make parent directories.
# $(<:P) = $(<)'s parent, & we recurse until root
s = $(<:P) ;
if $(NT)
{
switch $(s)
{
case *: : s = ;
case *:\\ : s = ;
}
}
if $(s) && $(s) != $(<)
{
Depends $(<) : $(s) ;
MkDir $(s) ;
}
else if $(s)
{
NOTFILE $(s) ;
}
}
}
actions MkDir1
{
mkdir $(<)
}
IMPORT $(__name__) : MakeLocate MkDir : : MakeLocate MkDir ;
root = [ project.load "." ] ;
root-target = [ $(root).target ] ;
expanded = [ feature.split [ build-request.expand debug <rtti>on ] ] ;
local targets = [ $(root-target).generate $(expanded) ] ;
local actual ;
for t in $(targets)
{
actual += [ $(t).actualize ] ;
}
DEPENDS all : $(actual) ;