diff options
Diffstat (limited to 'tools/build/v2/test/tag.py')
-rw-r--r-- | tools/build/v2/test/tag.py | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/tools/build/v2/test/tag.py b/tools/build/v2/test/tag.py new file mode 100644 index 0000000000..aef31e8081 --- /dev/null +++ b/tools/build/v2/test/tag.py @@ -0,0 +1,122 @@ +#!/usr/bin/python + +# Copyright (C) Pedro Ferreira 2003. Permission to copy, use, modify, sell and +# distribute this software is granted provided this copyright notice appears in +# all copies. This software is provided "as is" without express or implied +# warranty, and with no claim as to its suitability for any purpose. + +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_line("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/link-static/a_dt.exe") + \ + BoostBuild.List("bin/$toolset/debug/link-static/b_dt.lib") + \ + BoostBuild.List("c/a_dt.exe") + \ + BoostBuild.List("bin/$toolset/release/link-static/a_rt.exe") + \ + BoostBuild.List("bin/$toolset/release/link-static/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() + +test_tag_property(t) +test_folder_with_dot_in_name(t) + +t.cleanup() |