| #!/usr/bin/python |
| |
| # Copyright 2003 Dave Abrahams |
| # Copyright 2003 Vladimir Prus |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| |
| import BoostBuild |
| |
| |
| ################################################################################ |
| # |
| # test_alias_rule() |
| # ----------------- |
| # |
| ################################################################################ |
| |
| def test_alias_rule(t): |
| """Basic alias rule test. |
| """ |
| |
| t.write("jamroot.jam", """ |
| exe a : a.cpp ; |
| exe b : b.cpp ; |
| exe c : c.cpp ; |
| |
| alias bin1 : a ; |
| alias bin2 : a b ; |
| |
| alias src : s.cpp ; |
| exe hello : hello.cpp src ; |
| """) |
| |
| t.write("a.cpp", "int main() {}\n") |
| t.copy("a.cpp", "b.cpp") |
| t.copy("a.cpp", "c.cpp") |
| t.copy("a.cpp", "hello.cpp") |
| t.write("s.cpp", "") |
| |
| # Check that targets to which "bin1" refers are updated, and only those. |
| t.run_build_system("bin1") |
| t.expect_addition(BoostBuild.List("bin/$toolset/debug/") * "a.exe a.obj") |
| t.expect_nothing_more() |
| |
| # Try again with "bin2" |
| t.run_build_system("bin2") |
| t.expect_addition(BoostBuild.List("bin/$toolset/debug/") * "b.exe b.obj") |
| t.expect_nothing_more() |
| |
| # Try building everything, making sure 'hello' target is created. |
| t.run_build_system() |
| t.expect_addition(BoostBuild.List("bin/$toolset/debug/") * \ |
| "hello.exe hello.obj") |
| t.expect_addition("bin/$toolset/debug/s.obj") |
| t.expect_addition(BoostBuild.List("bin/$toolset/debug/") * "c.exe c.obj") |
| t.expect_nothing_more() |
| |
| |
| ################################################################################ |
| # |
| # test_alias_source_usage_requirements() |
| # -------------------------------------- |
| # |
| ################################################################################ |
| |
| def test_alias_source_usage_requirements(t): |
| """Check whether usage requirements are propagated via "alias". In case they |
| are not, linking will fail as there will be no main() function defined |
| anywhere in the source. |
| """ |
| |
| t.write("jamroot.jam", """ |
| lib l : l.cpp : : : <define>WANT_MAIN ; |
| alias la : l ; |
| exe main : main.cpp la ; |
| """) |
| |
| t.write("l.cpp", """ |
| void |
| #if defined(_WIN32) |
| __declspec(dllexport) |
| #endif |
| foo() {} |
| """) |
| |
| t.write("main.cpp", """ |
| #ifdef WANT_MAIN |
| int main() {} |
| #endif |
| """) |
| |
| t.run_build_system() |
| |
| |
| ################################################################################ |
| # |
| # main() |
| # ------ |
| # |
| ################################################################################ |
| |
| t = BoostBuild.Tester() |
| |
| test_alias_rule(t) |
| test_alias_source_usage_requirements(t) |
| |
| t.cleanup() |