| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #!/usr/bin/python
- # Copyright (C) 2003. Vladimir Prus
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE.txt or copy at
- # https://www.bfgroup.xyz/b2/LICENSE.txt)
- # Test the 'glob' rule in Jamfile context.
- import BoostBuild
- def test_basic():
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/a.cpp", "int main() {}\n")
- t.write("d1/jamfile.jam", "exe a : [ glob *.cpp ] ../d2/d//l ;")
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.write("d3/d/jamfile.jam", "exe a : [ glob ../*.cpp ] ;")
- t.write("d3/a.cpp", "int main() {}\n")
- t.run_build_system(subdir="d1")
- t.expect_addition("d1/bin/$toolset/debug*/a.exe")
- t.run_build_system(subdir="d3/d")
- t.expect_addition("d3/d/bin/$toolset/debug*/a.exe")
- t.rm("d2/d/bin")
- t.run_build_system(subdir="d2/d")
- t.expect_addition("d2/d/bin/$toolset/debug*/l.dll")
- t.cleanup()
- def test_source_location():
- """
- Test that when 'source-location' is explicitly-specified glob works
- relative to the source location.
- """
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/a.cpp", "very bad non-compilable file\n")
- t.write("d1/src/a.cpp", "int main() {}\n")
- t.write("d1/jamfile.jam", """\
- project : source-location src ;
- exe a : [ glob *.cpp ] ../d2/d//l ;
- """)
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.run_build_system(subdir="d1")
- t.expect_addition("d1/bin/$toolset/debug*/a.exe")
- t.cleanup()
- def test_wildcards_and_exclusion_patterns():
- """
- Test that wildcards can include directories. Also test exclusion
- patterns.
- """
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/src/foo/a.cpp", "void bar(); int main() { bar(); }\n")
- t.write("d1/src/bar/b.cpp", "void bar() {}\n")
- t.write("d1/src/bar/bad.cpp", "very bad non-compilable file\n")
- t.write("d1/jamfile.jam", """\
- project : source-location src ;
- exe a : [ glob foo/*.cpp bar/*.cpp : bar/bad* ] ../d2/d//l ;
- """)
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.run_build_system(subdir="d1")
- t.expect_addition("d1/bin/$toolset/debug*/a.exe")
- t.cleanup()
- def test_glob_tree():
- """Test that 'glob-tree' works."""
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/src/foo/a.cpp", "void bar(); int main() { bar(); }\n")
- t.write("d1/src/bar/b.cpp", "void bar() {}\n")
- t.write("d1/src/bar/bad.cpp", "very bad non-compilable file\n")
- t.write("d1/jamfile.jam", """\
- project : source-location src ;
- exe a : [ glob-tree *.cpp : bad* ] ../d2/d//l ;
- """)
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.run_build_system(subdir="d1")
- t.expect_addition("d1/bin/$toolset/debug*/a.exe")
- t.cleanup()
- def test_directory_names_in_glob_tree():
- """Test that directory names in patterns for 'glob-tree' are rejected."""
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/src/a.cpp", "very bad non-compilable file\n")
- t.write("d1/src/foo/a.cpp", "void bar(); int main() { bar(); }\n")
- t.write("d1/src/bar/b.cpp", "void bar() {}\n")
- t.write("d1/src/bar/bad.cpp", "very bad non-compilable file\n")
- t.write("d1/jamfile.jam", """\
- project : source-location src ;
- exe a : [ glob-tree foo/*.cpp bar/*.cpp : bad* ] ../d2/d//l ;
- """)
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.run_build_system(subdir="d1", status=1)
- t.expect_output_lines("error: The patterns * may not include directory")
- t.cleanup()
- def test_glob_with_absolute_names():
- """Test that 'glob' works with absolute names."""
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "")
- t.write("d1/src/a.cpp", "very bad non-compilable file\n")
- t.write("d1/src/foo/a.cpp", "void bar(); int main() { bar(); }\n")
- t.write("d1/src/bar/b.cpp", "void bar() {}\n")
- # Note that to get the current dir, we use bjam's PWD, not Python's
- # os.getcwd(), because the former will always return a long path while the
- # latter might return a short path, which would confuse path.glob.
- t.write("d1/jamfile.jam", """\
- project : source-location src ;
- local pwd = [ PWD ] ; # Always absolute.
- exe a : [ glob $(pwd)/src/foo/*.cpp $(pwd)/src/bar/*.cpp ] ../d2/d//l ;
- """)
- t.write("d2/d/l.cpp", """\
- #if defined(_WIN32)
- __declspec(dllexport)
- void force_import_lib_creation() {}
- #endif
- """)
- t.write("d2/d/jamfile.jam", "lib l : [ glob *.cpp ] ;")
- t.run_build_system(subdir="d1")
- t.expect_addition("d1/bin/$toolset/debug*/a.exe")
- t.cleanup()
- def test_glob_excludes_in_subdirectory():
- """
- Regression test: glob excludes used to be broken when building from a
- subdirectory.
- """
- t = BoostBuild.Tester(use_test_config=False)
- t.write("jamroot.jam", "build-project p ;")
- t.write("p/p.c", "int main() {}\n")
- t.write("p/p_x.c", "very bad non-compilable file\n")
- t.write("p/jamfile.jam", "exe p : [ glob *.c : p_x.c ] ;")
- t.run_build_system(subdir="p")
- t.expect_addition("p/bin/$toolset/debug*/p.exe")
- t.cleanup()
- test_basic()
- test_source_location()
- test_wildcards_and_exclusion_patterns()
- test_glob_tree()
- test_directory_names_in_glob_tree()
- test_glob_with_absolute_names()
- test_glob_excludes_in_subdirectory()
|