diff options
Diffstat (limited to 'src/boost/tools/build/test/project_glob.py')
-rw-r--r-- | src/boost/tools/build/test/project_glob.py | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/src/boost/tools/build/test/project_glob.py b/src/boost/tools/build/test/project_glob.py new file mode 100644 index 000000000..362b450d9 --- /dev/null +++ b/src/boost/tools/build/test/project_glob.py @@ -0,0 +1,212 @@ +#!/usr/bin/python + +# Copyright (C) 2003. 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) + +# 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() |