ee613a6a28
* New feature <relevant> which is automatically deduced in most cases. * Features which are not relevant do not affect target paths and do not prevent merging of virtual targets. * generators.jam: generator.run always returns usage-requirements to allow usage-requirements in non-top-level generators. This is necessary because we're using usage-requirements to track relevance from flags. * New rule toolset.uses-features to specify features that the rule checks manually, instead of using toolset.flags. In the future, we should consider restricting the properties actually passed, to detect errors. * Adjust tests to handle the new paths (verified by inspection). * Add temporary option --ignore-relevance to consider all features relevant to aid migration. * New rule property.evaluate-conditional-relevance which helps tracking relevance in <conditional>. * Widely scattered changes to use the new interfaces.
123 lines
3.2 KiB
Python
123 lines
3.2 KiB
Python
#!/usr/bin/python
|
|
|
|
# Copyright (C) 2003. Pedro Ferreira
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
import BoostBuild
|
|
|
|
|
|
###############################################################################
|
|
#
|
|
# test_folder_with_dot_in_name()
|
|
# ------------------------------
|
|
#
|
|
###############################################################################
|
|
|
|
def test_folder_with_dot_in_name(t):
|
|
"""
|
|
Regression test: the 'tag' feature did not work in directories that had a
|
|
dot in their name.
|
|
|
|
"""
|
|
t.write("version-1.32.0/jamroot.jam", """\
|
|
project test : requirements <tag>@$(__name__).tag ;
|
|
|
|
rule tag ( name : type ? : property-set )
|
|
{
|
|
# Do nothing, just make sure the rule is invoked OK.
|
|
ECHO The tag rule has been invoked. ;
|
|
}
|
|
exe a : a.cpp ;
|
|
""")
|
|
t.write("version-1.32.0/a.cpp", "int main() {}\n")
|
|
|
|
t.run_build_system(subdir="version-1.32.0")
|
|
t.expect_addition("version-1.32.0/bin/$toolset/debug*/a.exe")
|
|
t.expect_output_lines("The tag rule has been invoked.")
|
|
|
|
|
|
###############################################################################
|
|
#
|
|
# test_tag_property()
|
|
# -------------------
|
|
#
|
|
###############################################################################
|
|
|
|
def test_tag_property(t):
|
|
"""Basic tag property test."""
|
|
|
|
t.write("jamroot.jam", """\
|
|
import virtual-target ;
|
|
|
|
rule tag ( name : type ? : property-set )
|
|
{
|
|
local tags ;
|
|
switch [ $(property-set).get <variant> ]
|
|
{
|
|
case debug : tags += d ;
|
|
case release : tags += r ;
|
|
}
|
|
switch [ $(property-set).get <link> ]
|
|
{
|
|
case shared : tags += s ;
|
|
case static : tags += t ;
|
|
}
|
|
if $(tags)
|
|
{
|
|
return [ virtual-target.add-prefix-and-suffix $(name)_$(tags:J="")
|
|
: $(type) : $(property-set) ] ;
|
|
}
|
|
}
|
|
|
|
# Test both fully-qualified and local name of the rule
|
|
exe a : a.cpp : <tag>@$(__name__).tag ;
|
|
lib b : a.cpp : <tag>@tag ;
|
|
stage c : a ;
|
|
""")
|
|
|
|
t.write("a.cpp", """\
|
|
int main() {}
|
|
#ifdef _MSC_VER
|
|
__declspec (dllexport) void x () {}
|
|
#endif
|
|
""")
|
|
|
|
file_list = (
|
|
BoostBuild.List("bin/$toolset/debug*/a_ds.exe") +
|
|
BoostBuild.List("bin/$toolset/debug*/b_ds.dll") +
|
|
BoostBuild.List("c/a_ds.exe") +
|
|
BoostBuild.List("bin/$toolset/release*/a_rs.exe") +
|
|
BoostBuild.List("bin/$toolset/release*/b_rs.dll") +
|
|
BoostBuild.List("c/a_rs.exe") +
|
|
BoostBuild.List("bin/$toolset/debug*/a_dt.exe") +
|
|
BoostBuild.List("bin/$toolset/debug*/b_dt.lib") +
|
|
BoostBuild.List("c/a_dt.exe") +
|
|
BoostBuild.List("bin/$toolset/release*/a_rt.exe") +
|
|
BoostBuild.List("bin/$toolset/release*/b_rt.lib") +
|
|
BoostBuild.List("c/a_rt.exe"))
|
|
|
|
variants = ["debug", "release", "link=static,shared"]
|
|
|
|
t.run_build_system(variants)
|
|
t.expect_addition(file_list)
|
|
|
|
t.run_build_system(variants + ["clean"])
|
|
t.expect_removal(file_list)
|
|
|
|
|
|
###############################################################################
|
|
#
|
|
# main()
|
|
# ------
|
|
#
|
|
###############################################################################
|
|
|
|
t = BoostBuild.Tester(use_test_config=False)
|
|
|
|
test_tag_property(t)
|
|
test_folder_with_dot_in_name(t)
|
|
|
|
t.cleanup()
|