2
0
mirror of https://github.com/boostorg/build.git synced 2026-02-21 15:02:19 +00:00
Files
build/test/module_actions.py
Rene Rivera d717294709 Do direct build system bootstrap loading.
This removes the use of the boost-build rule to direct the loading of the
bootstrap.jam file. The file is now searched for directly based on the
b2 executable location and other criteria. This makes the installed
b2 the canonical way to use b2.
2022-04-24 16:38:59 -05:00

105 lines
2.2 KiB
Python

#!/usr/bin/python
# Copyright 2003 Dave Abrahams
# Copyright 2006 Rene Rivera
# Copyright 2003 Vladimir Prus
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.txt or copy at
# https://www.bfgroup.xyz/b2/LICENSE.txt)
# Demonstration that module variables have the correct effect in actions.
import BoostBuild
import os
import re
t = BoostBuild.Tester(["-d+1", "-f", "bare.jam"], pass_toolset=0)
t.write("bare.jam", """\
# Top-level rule causing a target to be built by invoking the specified action.
rule make ( target : sources * : act )
{
DEPENDS all : $(target) ;
DEPENDS $(target) : $(sources) ;
$(act) $(target) : $(sources) ;
}
X1 = X1-global ;
X2 = X2-global ;
X3 = X3-global ;
module A
{
X1 = X1-A ;
rule act ( target )
{
NOTFILE $(target) ;
ALWAYS $(target) ;
}
actions act { echo A.act $(<): $(X1) $(X2) $(X3) }
make t1 : : A.act ;
make t2 : : A.act ;
make t3 : : A.act ;
}
module B
{
X2 = X2-B ;
actions act { echo B.act $(<): $(X1) $(X2) $(X3) }
make t1 : : B.act ;
make t2 : : B.act ;
make t3 : : B.act ;
}
actions act { echo act $(<): $(X1) $(X2) $(X3) }
make t1 : : act ;
make t2 : : act ;
make t3 : : act ;
X1 on t1 = X1-t1 ;
X2 on t2 = X2-t2 ;
X3 on t3 = X3-t3 ;
DEPENDS all : t1 t2 t3 ;
""")
expected_lines = [
"...found 4 targets...",
"...updating 3 targets...",
"A.act t1",
"A.act t1: X1-t1 ",
"B.act t1",
"B.act t1: X1-t1 X2-B ",
"act t1",
"act t1: X1-t1 X2-global X3-global ",
"A.act t2",
"A.act t2: X1-A X2-t2 ",
"B.act t2",
"B.act t2: X2-t2 ",
"act t2",
"act t2: X1-global X2-t2 X3-global ",
"A.act t3",
"A.act t3: X1-A X3-t3 ",
"B.act t3",
"B.act t3: X2-B X3-t3 ",
"act t3",
"act t3: X1-global X2-global X3-t3 ",
"...updated 3 targets...",
""]
# Accommodate for the fact that on Unixes, a call to 'echo 1 2 3 '
# produces '1 2 3' (note the spacing).
if os.name != 'nt':
expected_lines = [re.sub(" +", " ", x.rstrip()) for x in expected_lines]
t.run_build_system()
t.expect_output_lines(expected_lines)
t.expect_nothing_more()
t.cleanup()