]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/tools/build/test/timedata.py
update sources to v12.2.3
[ceph.git] / ceph / src / boost / tools / build / test / timedata.py
CommitLineData
7c673cae
FG
1#!/usr/bin/python
2
3# Copyright 2005 David Abrahams
4# Copyright 2008, 2012 Jurko Gospodnetic
5# Distributed under the Boost Software License, Version 1.0.
6# (See accompanying file LICENSE_1_0.txt or copy at
7# http://www.boost.org/LICENSE_1_0.txt)
8
9# Tests the build step timing facilities.
10
11# TODO: Missing tests:
12# 1. 'time' target with a source target representing more than one virtual
13# target. This happens in practice, e.g. when using the time rule on a msvc
14# exe target whose generator actually constructs an EXE and a PDB target.
15# When this is done - only the main virtual target's constructing action
16# should be timed.
17# 2. 'time' target with a source target representing a virtual target that
18# actually gets built by multiple actions run in sequence. In that case a
19# separate timing result should be reported for each of those actions. This
20# happens in practice, e.g. when using the time rule on a msvc exe target
21# which first gets created as a result of some link action and then its
22# manifest gets embedded inside it as a resource using a separate action
23# (assuming an appropriate property has been set for this target - see the
24# msvc module for details).
25
26import BoostBuild
27import re
28
29
30###############################################################################
31#
32# basic_jam_action_test()
33# -----------------------
34#
35###############################################################################
36
37def basic_jam_action_test():
38 """Tests basic Jam action timing support."""
39
40 t = BoostBuild.Tester(pass_toolset=0)
41
42 t.write("file.jam", """\
43rule time
44{
45 DEPENDS $(<) : $(>) ;
46 __TIMING_RULE__ on $(>) = record_time $(<) ;
47 DEPENDS all : $(<) ;
48}
49
50actions time
51{
52 echo $(>) user: $(__USER_TIME__) system: $(__SYSTEM_TIME__) clock: $(__CLOCK_TIME__)
53 echo timed from $(>) >> $(<)
54}
55
56rule record_time ( target : source : start end user system clock )
57{
58 __USER_TIME__ on $(target) = $(user) ;
59 __SYSTEM_TIME__ on $(target) = $(system) ;
60 __CLOCK_TIME__ on $(target) = $(clock) ;
61}
62
63rule make
64{
65 DEPENDS $(<) : $(>) ;
66}
67
68actions make
69{
70 echo made from $(>) >> $(<)
71}
72
73time foo : bar ;
74make bar : baz ;
75""")
76
77 t.write("baz", "nothing")
78
79 expected_output = """\
80\.\.\.found 4 targets\.\.\.
81\.\.\.updating 2 targets\.\.\.
82make bar
83time foo
84bar +user: [0-9\.]+ +system: +[0-9\.]+ +clock: +[0-9\.]+ *
85\.\.\.updated 2 targets\.\.\.$
86"""
87
88 t.run_build_system(["-ffile.jam", "-d+1"], stdout=expected_output,
89 match=lambda actual, expected: re.search(expected, actual, re.DOTALL))
90 t.expect_addition("foo")
91 t.expect_addition("bar")
92 t.expect_nothing_more()
93
94 t.cleanup()
95
96
97###############################################################################
98#
99# boost_build_testing_support_timing_rule():
100# ------------------------------------------
101#
102###############################################################################
103
104def boost_build_testing_support_timing_rule():
105 """
106 Tests the target build timing rule provided by the Boost Build testing
107 support system.
108
109 """
110 t = BoostBuild.Tester(use_test_config=False)
111
112 t.write("aaa.cpp", "int main() {}\n")
113
114 t.write("jamroot.jam", """\
115import testing ;
116exe my-exe : aaa.cpp ;
117time my-time : my-exe ;
118""")
119
120 t.run_build_system()
b32b8144
FG
121 t.expect_addition("bin/$toolset/debug*/aaa.obj")
122 t.expect_addition("bin/$toolset/debug*/my-exe.exe")
123 t.expect_addition("bin/$toolset/debug*/my-time.time")
7c673cae 124
b32b8144 125 t.expect_content_lines("bin/$toolset/debug*/my-time.time",
7c673cae 126 "user: *[0-9] seconds")
b32b8144 127 t.expect_content_lines("bin/$toolset/debug*/my-time.time",
7c673cae 128 "system: *[0-9] seconds")
b32b8144 129 t.expect_content_lines("bin/$toolset/debug*/my-time.time",
7c673cae
FG
130 "clock: *[0-9] seconds")
131
132 t.cleanup()
133
134
135###############################################################################
136#
137# boost_build_testing_support_timing_rule_with_spaces_in_names()
138# --------------------------------------------------------------
139#
140###############################################################################
141
142def boost_build_testing_support_timing_rule_with_spaces_in_names():
143 """
144 Tests the target build timing rule provided by the Boost Build testing
145 support system when used with targets contining spaces in their names.
146
147 """
148 t = BoostBuild.Tester(use_test_config=False)
149
150 t.write("aaa bbb.cpp", "int main() {}\n")
151
152 t.write("jamroot.jam", """\
153import testing ;
154exe "my exe" : "aaa bbb.cpp" ;
155time "my time" : "my exe" ;
156""")
157
158 t.run_build_system()
b32b8144
FG
159 t.expect_addition("bin/$toolset/debug*/aaa bbb.obj")
160 t.expect_addition("bin/$toolset/debug*/my exe.exe")
161 t.expect_addition("bin/$toolset/debug*/my time.time")
7c673cae 162
b32b8144
FG
163 t.expect_content_lines("bin/$toolset/debug*/my time.time", "user: *")
164 t.expect_content_lines("bin/$toolset/debug*/my time.time", "system: *")
7c673cae
FG
165
166 t.cleanup()
167
168
169###############################################################################
170#
171# main()
172# ------
173#
174###############################################################################
175
176basic_jam_action_test()
177boost_build_testing_support_timing_rule()
178boost_build_testing_support_timing_rule_with_spaces_in_names()