105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
# Copyright (C) Vladimir Prus 2006.
|
||
|
# Distributed under the Boost Software License, Version 1.0. (See
|
||
|
# accompanying file LICENSE.txt or copy at
|
||
|
# https://www.bfgroup.xyz/b2/LICENSE.txt)
|
||
|
|
||
|
import BoostBuild
|
||
|
|
||
|
t = BoostBuild.Tester(use_test_config=False)
|
||
|
|
||
|
t.write("a.cpp", "int main() {}\n")
|
||
|
t.write("jamroot.jam", "exe a : a.cpp sub1//sub1 sub2//sub2 sub3//sub3 ;")
|
||
|
t.write("sub1/jamfile.jam", """\
|
||
|
lib sub1 : sub1.cpp sub1_2 ../sub2//sub2 ;
|
||
|
lib sub1_2 : sub1_2.cpp ;
|
||
|
""")
|
||
|
|
||
|
t.write("sub1/sub1.cpp", """\
|
||
|
#ifdef _WIN32
|
||
|
__declspec(dllexport)
|
||
|
#endif
|
||
|
void sub1() {}
|
||
|
""")
|
||
|
|
||
|
t.write("sub1/sub1_2.cpp", """\
|
||
|
#ifdef _WIN32
|
||
|
__declspec(dllexport)
|
||
|
#endif
|
||
|
void sub1() {}
|
||
|
""")
|
||
|
|
||
|
t.write("sub2/jamfile.jam", "lib sub2 : sub2.cpp ;")
|
||
|
t.write("sub2/sub2.cpp", """\
|
||
|
#ifdef _WIN32
|
||
|
__declspec(dllexport)
|
||
|
#endif
|
||
|
void sub2() {}
|
||
|
""")
|
||
|
|
||
|
t.write("sub3/jamroot.jam", "lib sub3 : sub3.cpp ;")
|
||
|
t.write("sub3/sub3.cpp", """\
|
||
|
#ifdef _WIN32
|
||
|
__declspec(dllexport)
|
||
|
#endif
|
||
|
void sub3() {}
|
||
|
""")
|
||
|
|
||
|
# 'clean' should not remove files under separate jamroot.jam.
|
||
|
t.run_build_system()
|
||
|
t.run_build_system(["--clean"])
|
||
|
t.expect_removal("bin/$toolset/debug*/a.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1_2.obj")
|
||
|
t.expect_removal("sub2/bin/$toolset/debug*/sub2.obj")
|
||
|
t.expect_nothing("sub3/bin/$toolset/debug*/sub3.obj")
|
||
|
|
||
|
# 'clean-all' removes everything it can reach.
|
||
|
t.run_build_system()
|
||
|
t.run_build_system(["--clean-all"])
|
||
|
t.expect_removal("bin/$toolset/debug*/a.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1_2.obj")
|
||
|
t.expect_removal("sub2/bin/$toolset/debug*/sub2.obj")
|
||
|
t.expect_nothing("sub3/bin/$toolset/debug*/sub3.obj")
|
||
|
|
||
|
# 'clean' together with project target removes only under that project.
|
||
|
t.run_build_system()
|
||
|
t.run_build_system(["sub1", "--clean"])
|
||
|
t.expect_nothing("bin/$toolset/debug*/a.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1_2.obj")
|
||
|
t.expect_nothing("sub2/bin/$toolset/debug*/sub2.obj")
|
||
|
t.expect_nothing("sub3/bin/$toolset/debug*/sub3.obj")
|
||
|
|
||
|
# 'clean-all' removes everything.
|
||
|
t.run_build_system()
|
||
|
t.run_build_system(["sub1", "--clean-all"])
|
||
|
t.expect_nothing("bin/$toolset/debug*/a.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1.obj")
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1_2.obj")
|
||
|
t.expect_removal("sub2/bin/$toolset/debug*/sub2.obj")
|
||
|
t.expect_nothing("sub3/bin/$toolset/debug*/sub3.obj")
|
||
|
|
||
|
# If main target is explicitly named, we should not remove files from other
|
||
|
# targets.
|
||
|
t.run_build_system()
|
||
|
t.run_build_system(["sub1//sub1", "--clean"])
|
||
|
t.expect_removal("sub1/bin/$toolset/debug*/sub1.obj")
|
||
|
t.expect_nothing("sub1/bin/$toolset/debug*/sub1_2.obj")
|
||
|
t.expect_nothing("sub2/bin/$toolset/debug*/sub2.obj")
|
||
|
t.expect_nothing("sub3/bin/$toolset/debug*/sub3.obj")
|
||
|
|
||
|
# Regression test: sources of the 'cast' rule were mistakenly deleted.
|
||
|
t.rm(".")
|
||
|
t.write("jamroot.jam", """\
|
||
|
import cast ;
|
||
|
cast a cpp : a.h ;
|
||
|
""")
|
||
|
t.write("a.h", "")
|
||
|
t.run_build_system(["--clean"])
|
||
|
t.expect_nothing("a.h")
|
||
|
|
||
|
t.cleanup()
|