]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | #!/usr/bin/python |
2 | ||
3 | # Copyright 2003 Dave Abrahams | |
4 | # Copyright 2003 Vladimir Prus | |
5 | # Distributed under the Boost Software License, Version 1.0. | |
6 | # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) | |
7 | ||
8 | import BoostBuild | |
9 | ||
10 | ||
11 | ############################################################################### | |
12 | # | |
13 | # test_alias_rule() | |
14 | # ----------------- | |
15 | # | |
16 | ############################################################################### | |
17 | ||
18 | def test_alias_rule(t): | |
19 | """Basic alias rule test.""" | |
20 | ||
21 | t.write("jamroot.jam", """\ | |
22 | exe a : a.cpp ; | |
23 | exe b : b.cpp ; | |
24 | exe c : c.cpp ; | |
25 | ||
26 | alias bin1 : a ; | |
27 | alias bin2 : a b ; | |
28 | ||
29 | alias src : s.cpp ; | |
30 | exe hello : hello.cpp src ; | |
31 | """) | |
32 | ||
33 | t.write("a.cpp", "int main() {}\n") | |
34 | t.copy("a.cpp", "b.cpp") | |
35 | t.copy("a.cpp", "c.cpp") | |
36 | t.copy("a.cpp", "hello.cpp") | |
37 | t.write("s.cpp", "") | |
38 | ||
39 | # Check that targets to which "bin1" refers are updated, and only those. | |
40 | t.run_build_system(["bin1"]) | |
b32b8144 | 41 | t.expect_addition(BoostBuild.List("bin/$toolset/debug*/") * "a.exe a.obj") |
7c673cae FG |
42 | t.expect_nothing_more() |
43 | ||
44 | # Try again with "bin2" | |
45 | t.run_build_system(["bin2"]) | |
b32b8144 | 46 | t.expect_addition(BoostBuild.List("bin/$toolset/debug*/") * "b.exe b.obj") |
7c673cae FG |
47 | t.expect_nothing_more() |
48 | ||
49 | # Try building everything, making sure 'hello' target is created. | |
50 | t.run_build_system() | |
b32b8144 | 51 | t.expect_addition(BoostBuild.List("bin/$toolset/debug*/") * \ |
7c673cae | 52 | "hello.exe hello.obj") |
b32b8144 FG |
53 | t.expect_addition("bin/$toolset/debug*/s.obj") |
54 | t.expect_addition(BoostBuild.List("bin/$toolset/debug*/") * "c.exe c.obj") | |
7c673cae FG |
55 | t.expect_nothing_more() |
56 | ||
57 | ||
58 | ############################################################################### | |
59 | # | |
60 | # test_alias_source_usage_requirements() | |
61 | # -------------------------------------- | |
62 | # | |
63 | ############################################################################### | |
64 | ||
65 | def test_alias_source_usage_requirements(t): | |
66 | """ | |
67 | Check whether usage requirements are propagated via "alias". In case they | |
68 | are not, linking will fail as there will be no main() function defined | |
69 | anywhere in the source. | |
70 | ||
71 | """ | |
72 | t.write("jamroot.jam", """\ | |
73 | lib l : l.cpp : : : <define>WANT_MAIN ; | |
74 | alias la : l ; | |
75 | exe main : main.cpp la ; | |
76 | """) | |
77 | ||
78 | t.write("l.cpp", """\ | |
79 | void | |
80 | #if defined(_WIN32) | |
81 | __declspec(dllexport) | |
82 | #endif | |
83 | foo() {} | |
84 | """) | |
85 | ||
86 | t.write("main.cpp", """\ | |
87 | #ifdef WANT_MAIN | |
88 | int main() {} | |
89 | #endif | |
90 | """) | |
91 | ||
92 | t.run_build_system() | |
93 | ||
94 | ||
95 | ############################################################################### | |
96 | # | |
97 | # main() | |
98 | # ------ | |
99 | # | |
100 | ############################################################################### | |
101 | ||
102 | # We do not pass the '-d0' option to Boost Build here to get more detailed | |
103 | # information in case of failure. | |
104 | t = BoostBuild.Tester(pass_d0=False, use_test_config=False) | |
105 | ||
106 | test_alias_rule(t) | |
107 | test_alias_source_usage_requirements(t) | |
108 | ||
109 | t.cleanup() |