summaryrefslogtreecommitdiffstats
path: root/src/boost/tools/build/test/clean.py
blob: dc72b924c30eeb393fd345e07130bbe9b489f8f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/python

#  Copyright (C) Vladimir Prus 2006.
#  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

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()