From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/boost/tools/build/test/indirect_conditional.py | 148 +++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/boost/tools/build/test/indirect_conditional.py (limited to 'src/boost/tools/build/test/indirect_conditional.py') diff --git a/src/boost/tools/build/test/indirect_conditional.py b/src/boost/tools/build/test/indirect_conditional.py new file mode 100644 index 000000000..b59c7800d --- /dev/null +++ b/src/boost/tools/build/test/indirect_conditional.py @@ -0,0 +1,148 @@ +#!/usr/bin/python + +# Copyright (C) 2006. Vladimir Prus +# 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 + +def test_basic(): + t = BoostBuild.Tester(use_test_config=False) + + t.write("jamroot.jam", """\ +exe a1 : a1.cpp : @a1-rule ; +rule a1-rule ( properties * ) +{ + if debug in $(properties) + { + return OK ; + } +} + +exe a2 : a2.cpp : @$(__name__).a2-rule + debug:speed ; +rule a2-rule ( properties * ) +{ + if speed in $(properties) + { + return OK ; + } +} + +exe a3 : a3.cpp : + @$(__name__).a3-rule-1 + @$(__name__).a3-rule-2 ; +rule a3-rule-1 ( properties * ) +{ + if speed in $(properties) + { + return OK ; + } +} +rule a3-rule-2 ( properties * ) +{ + if debug in $(properties) + { + return speed ; + } +} +""") + + t.write("a1.cpp", "#ifdef OK\nint main() {}\n#endif\n") + t.write("a2.cpp", "#ifdef OK\nint main() {}\n#endif\n") + t.write("a3.cpp", "#ifdef OK\nint main() {}\n#endif\n") + + t.run_build_system() + + t.expect_addition("bin/$toolset/debug*/a1.exe") + t.expect_addition("bin/$toolset/debug/optimization-speed*/a2.exe") + t.expect_addition("bin/$toolset/debug/optimization-speed*/a3.exe") + + t.cleanup() + +def test_inherit(): + """Tests that paths etc. are handled correctly when an indirect + conditional is inherited by a subproject.""" + t = BoostBuild.Tester(use_test_config=False) + t.write("Jamroot.jam", """ +import feature ; +import indirect ; +exe d1 : d1.cpp ; +explicit d1 ; +project : requirements @c1 ; +build-project subdir ; +feature.feature myrule : : free ; +rule c1 ( properties * ) +{ + return d1 include @parent-generate ; +} +rule parent-generate ( project name : property-set : sources * ) +{ + return $(sources) ; +} +rule my-generate ( project name : property-set : sources * ) +{ + local r = [ $(property-set).get ] ; + r = [ MATCH @(.*) : $(r) ] ; + return [ indirect.call + $(r) $(project) $(name) : $(property-set) : $(sources) ] ; +} +""") + t.write("d1.cpp", "int main(){}\n") + t.write("subdir/Jamfile", """ +generate srcs : main.cpp : @my-generate ; +exe main : srcs ; +""") + t.write("include/a.h", "") + t.write("subdir/main.cpp", "#include \nint main() {}\n") + t.run_build_system() + t.expect_addition("bin/$toolset/debug*/d1.obj") + t.expect_addition("bin/$toolset/debug*/d1.exe") + t.expect_addition("subdir/bin/$toolset/debug*/main.obj") + t.expect_addition("subdir/bin/$toolset/debug*/main.exe") + t.expect_nothing_more() + t.cleanup() + +def test_glob_in_indirect_conditional(): + """ + Regression test: project-rules.glob rule run from inside an indirect + conditional should report an error as it depends on the 'currently loaded + project' concept and indirect conditional rules get called only after all + the project modules have already finished loading. + + """ + t = BoostBuild.Tester(use_test_config=False) + + t.write("jamroot.jam", """\ +use-project /library-example/foo : util/foo ; +build-project app ; +""") + t.write("app/app.cpp", "int main() {}\n"); + t.write("app/jamfile.jam", "exe app : app.cpp /library-example/foo//bar ;") + t.write("util/foo/bar.cpp", """\ +#ifdef _WIN32 +__declspec(dllexport) +#endif +void foo() {} +""") + t.write("util/foo/jamfile.jam", """\ +rule print-my-sources ( properties * ) +{ + ECHO My sources: ; + ECHO [ glob *.cpp ] ; +} +lib bar : bar.cpp : @print-my-sources ; +""") + + t.run_build_system(status=1) + t.expect_output_lines(["My sources:", "bar.cpp"], False) + t.expect_output_lines("error: Reference to the project currently being " + "loaded requested when there was no project module being loaded.") + + t.cleanup() + + +test_basic() +test_inherit() +test_glob_in_indirect_conditional() -- cgit v1.2.3