| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #!/usr/bin/python
- # Copyright 2003 Dave Abrahams
- # Copyright 2003, 2006 Vladimir Prus
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt)
- # Test main target alternatives.
- import BoostBuild
- import string
- t = BoostBuild.Tester(use_test_config=False)
- # Test that basic alternatives selection works.
- t.write("jamroot.jam", "")
- t.write("jamfile.jam", """
- exe a : a_empty.cpp ;
- exe a : a.cpp : <variant>release ;
- """)
- t.write("a_empty.cpp", "")
- t.write("a.cpp", "int main() {}\n")
- t.run_build_system(["release"])
- t.expect_addition("bin/$toolset/release*/a.exe")
- # Test that alternative selection works for ordinary properties, in particular
- # user-defined.
- t.write("jamroot.jam", "")
- t.write("jamfile.jam", """
- import feature ;
- feature.feature X : off on : propagated ;
- exe a : b.cpp ;
- exe a : a.cpp : <X>on ;
- """)
- t.write("b.cpp", "int main() {}\n")
- t.rm("bin")
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/b.obj")
- t.run_build_system(["X=on"])
- t.expect_addition("bin/$toolset/debug/X-on*/a.obj")
- t.rm("bin")
- # Test that everything works ok even with the default build.
- t.write("jamfile.jam", """\
- exe a : a_empty.cpp : <variant>release ;
- exe a : a.cpp : <variant>debug ;
- """)
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/a.exe")
- # Test that only properties which are in the build request matter for
- # alternative selection. IOW, alternative with <variant>release is better than
- # one with <variant>debug when building the release variant.
- t.write("jamfile.jam", """\
- exe a : a_empty.cpp : <variant>debug ;
- exe a : a.cpp : <variant>release ;
- """)
- t.run_build_system(["release"])
- t.expect_addition("bin/$toolset/release*/a.exe")
- # Test that free properties do not matter. We really do not want <cxxflags>
- # property in build request to affect alternative selection.
- t.write("jamfile.jam", """
- exe a : a_empty.cpp : <variant>debug <define>FOO <include>BAR ;
- exe a : a.cpp : <variant>release ;
- """)
- t.rm("bin/$toolset/release/a.exe")
- t.rm("bin/$toolset/release/*/a.exe")
- t.run_build_system(["release", "define=FOO"])
- t.expect_addition("bin/$toolset/release*/a.exe")
- # Test that ambiguity is reported correctly.
- t.write("jamfile.jam", """\
- exe a : a_empty.cpp ;
- exe a : a.cpp ;
- """)
- t.run_build_system(["--no-error-backtrace"], status=None)
- t.expect_output_lines("error: No best alternative for ./a")
- # Another ambiguity test: two matches properties in one alternative are neither
- # better nor worse than a single one in another alternative.
- t.write("jamfile.jam", """\
- exe a : a_empty.cpp : <optimization>off <profiling>off ;
- exe a : a.cpp : <debug-symbols>on ;
- """)
- t.run_build_system(["--no-error-backtrace"], status=None)
- t.expect_output_lines("error: No best alternative for ./a")
- t.rm("bin")
- # Test that we can have alternative without sources.
- t.write("jamfile.jam", """\
- alias specific-sources ;
- import feature ;
- feature.extend os : MAGIC ;
- alias specific-sources : b.cpp : <os>MAGIC ;
- exe a : a.cpp specific-sources ;
- """)
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/a.exe")
- t.rm("bin")
- # Test that subfeatures are expanded in alternatives
- # and that unknown subfeatures fail to match instead of
- # causing errors.
- t.write("jamfile.jam", """\
- import feature : feature subfeature ;
- feature X : off on : propagated ;
- subfeature X on : version : 1 : propagated ;
- exe a : a.cpp : <X>on-1 ;
- exe a : a_empty.cpp ;
- exe a : a_empty.cpp : <X>on-2 ;
- """)
- t.run_build_system(["X=on-1"])
- t.cleanup()
|