mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 04:50:34 -04:00 
			
		
		
		
	
		
			
	
	
		
			152 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/usr/bin/python | ||
|  | 
 | ||
|  | # Copyright 2003 Dave Abrahams | ||
|  | # Copyright 2002, 2003, 2004 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) | ||
|  | 
 | ||
|  | import BoostBuild | ||
|  | 
 | ||
|  | def test_basic(): | ||
|  |     t = BoostBuild.Tester(use_test_config=False) | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", "lib a : a.cpp : <include>. ;") | ||
|  |     t.write("a.cpp", """\
 | ||
|  | #include <a.h> | ||
|  | void | ||
|  | # ifdef _WIN32 | ||
|  | __declspec(dllexport) | ||
|  | # endif | ||
|  | foo() {} | ||
|  | """)
 | ||
|  |     t.write("a.h", "//empty file\n") | ||
|  |     t.write("d/jamfile.jam", "exe b : b.cpp ..//a ;") | ||
|  |     t.write("d/b.cpp", """\
 | ||
|  | void foo(); | ||
|  | int main() { foo(); } | ||
|  | """)
 | ||
|  |     t.run_build_system(subdir="d") | ||
|  | 
 | ||
|  |     # Path features with condition. | ||
|  |     t.write("jamroot.jam", "lib a : a.cpp : <variant>debug:<include>. ;") | ||
|  |     t.rm("bin") | ||
|  |     t.run_build_system(subdir="d") | ||
|  | 
 | ||
|  | 
 | ||
|  |     # Path features with condition in usage requirements. | ||
|  |     t.write("jamroot.jam", """\
 | ||
|  | lib a : a.cpp : <include>. : : <variant>debug:<include>. ; | ||
|  | """)
 | ||
|  |     t.write("d/b.cpp", """\
 | ||
|  | #include <a.h> | ||
|  | void foo(); | ||
|  | int main() { foo(); } | ||
|  | """)
 | ||
|  |     t.rm("d/bin") | ||
|  |     t.run_build_system(subdir="d") | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | def test_absolute_paths(): | ||
|  |     """
 | ||
|  |       Test that absolute paths inside requirements are ok. The problems | ||
|  |     appeared only when building targets in subprojects. | ||
|  | 
 | ||
|  |     """
 | ||
|  |     t = BoostBuild.Tester(use_test_config=False) | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", "build-project x ;") | ||
|  |     t.write("x/jamfile.jam", """\
 | ||
|  | local pwd = [ PWD ] ; | ||
|  | project : requirements <include>$(pwd)/x/include ; | ||
|  | exe m : m.cpp : <include>$(pwd)/x/include2 ; | ||
|  | """)
 | ||
|  |     t.write("x/m.cpp", """\
 | ||
|  | #include <h1.hpp> | ||
|  | #include <h2.hpp> | ||
|  | int main() {} | ||
|  | """)
 | ||
|  |     t.write("x/include/h1.hpp", "\n") | ||
|  |     t.write("x/include2/h2.hpp", "\n") | ||
|  | 
 | ||
|  |     t.run_build_system() | ||
|  |     t.expect_addition("x/bin/$toolset/debug/m.exe") | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | def test_ordered_paths(): | ||
|  |     """Test that "&&" in path features is handled correctly.""" | ||
|  | 
 | ||
|  |     t = BoostBuild.Tester(use_test_config=False) | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", "build-project sub ;") | ||
|  |     t.write("sub/jamfile.jam", "exe a : a.cpp : <include>../h1&&../h2 ;") | ||
|  |     t.write("sub/a.cpp", """\
 | ||
|  | #include <header.h> | ||
|  | int main() { return OK; } | ||
|  | """)
 | ||
|  |     t.write("h2/header.h", "int const OK = 0;\n") | ||
|  |     t.run_build_system() | ||
|  |     t.expect_addition("sub/bin/$toolset/debug/a.exe") | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | def test_paths_set_by_indirect_conditionals(): | ||
|  |     t = BoostBuild.Tester(pass_d0=False, use_test_config=False) | ||
|  | 
 | ||
|  |     header = "child_dir/folder_to_include/some_header.h" | ||
|  | 
 | ||
|  |     t.write("jamroot.jam", "build-project child_dir ;") | ||
|  |     t.write("child_dir/jamfile.jam", """\
 | ||
|  | import remote/remote ; | ||
|  | 
 | ||
|  | # If we set the <include>folder_to_include property directly, it will work | ||
|  | obj x1 : x.cpp : <conditional>@attach-include-local ; | ||
|  | obj x2 : x.cpp : <conditional>@remote.attach-include-remote ; | ||
|  | 
 | ||
|  | rule attach-include-local ( properties * ) | ||
|  | { | ||
|  |     return <include>folder_to_include ; | ||
|  | } | ||
|  | """)
 | ||
|  |     t.write("child_dir/remote/remote.jam", """\
 | ||
|  | rule attach-include-remote ( properties * ) | ||
|  | { | ||
|  |     return <include>folder_to_include ; | ||
|  | } | ||
|  | """)
 | ||
|  |     t.write("child_dir/x.cpp", """\
 | ||
|  | #include <some_header.h> | ||
|  | int main() {} | ||
|  | """)
 | ||
|  |     t.write(header, "int some_func();\n") | ||
|  |     t.write("child_dir/folder_to_include/jamfile.jam", "") | ||
|  | 
 | ||
|  |     expected_x1 = "child_dir/bin/$toolset/debug/x1.obj" | ||
|  |     expected_x2 = "child_dir/bin/$toolset/debug/x2.obj" | ||
|  | 
 | ||
|  |     t.run_build_system() | ||
|  |     t.expect_addition(expected_x1) | ||
|  |     t.expect_addition(expected_x2) | ||
|  | 
 | ||
|  |     t.touch(header) | ||
|  |     t.run_build_system(subdir="child_dir") | ||
|  |     t.expect_touch(expected_x1) | ||
|  |     t.expect_touch(expected_x2) | ||
|  | 
 | ||
|  |     t.touch(header) | ||
|  |     t.run_build_system(["..", "-d2"], subdir="child_dir/folder_to_include") | ||
|  |     t.expect_touch(expected_x1) | ||
|  |     t.expect_touch(expected_x2) | ||
|  | 
 | ||
|  |     t.cleanup() | ||
|  | 
 | ||
|  | 
 | ||
|  | test_basic() | ||
|  | test_absolute_paths() | ||
|  | test_ordered_paths() | ||
|  | test_paths_set_by_indirect_conditionals() |