mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	
		
			
	
	
		
			213 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#!/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()
							 |