| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- #!/usr/bin/python
- # Copyright 2005 David Abrahams
- # Copyright 2008, 2012 Jurko Gospodnetic
- # Distributed under the Boost Software License, Version 1.0.
- # (See accompanying file LICENSE.txt or copy at
- # https://www.bfgroup.xyz/b2/LICENSE.txt)
- # Tests the build step timing facilities.
- # TODO: Missing tests:
- # 1. 'time' target with a source target representing more than one virtual
- # target. This happens in practice, e.g. when using the time rule on a msvc
- # exe target whose generator actually constructs an EXE and a PDB target.
- # When this is done - only the main virtual target's constructing action
- # should be timed.
- # 2. 'time' target with a source target representing a virtual target that
- # actually gets built by multiple actions run in sequence. In that case a
- # separate timing result should be reported for each of those actions. This
- # happens in practice, e.g. when using the time rule on a msvc exe target
- # which first gets created as a result of some link action and then its
- # manifest gets embedded inside it as a resource using a separate action
- # (assuming an appropriate property has been set for this target - see the
- # msvc module for details).
- import BoostBuild
- import re
- ###############################################################################
- #
- # basic_jam_action_test()
- # -----------------------
- #
- ###############################################################################
- def basic_jam_action_test():
- """Tests basic Jam action timing support."""
- t = BoostBuild.Tester(pass_toolset=0)
- t.write("file.jam", """\
- rule time
- {
- DEPENDS $(<) : $(>) ;
- __TIMING_RULE__ on $(>) = record_time $(<) ;
- DEPENDS all : $(<) ;
- }
- actions time
- {
- echo $(>) user: $(__USER_TIME__) system: $(__SYSTEM_TIME__) clock: $(__CLOCK_TIME__)
- echo timed from $(>) >> $(<)
- }
- rule record_time ( target : source : start end user system clock )
- {
- __USER_TIME__ on $(target) = $(user) ;
- __SYSTEM_TIME__ on $(target) = $(system) ;
- __CLOCK_TIME__ on $(target) = $(clock) ;
- }
- rule make
- {
- DEPENDS $(<) : $(>) ;
- }
- actions make
- {
- echo made from $(>) >> $(<)
- }
- time foo : bar ;
- make bar : baz ;
- """)
- t.write("baz", "nothing")
- expected_output = """\
- \.\.\.found 4 targets\.\.\.
- \.\.\.updating 2 targets\.\.\.
- make bar
- time foo
- bar +user: [0-9\.]+ +system: +[0-9\.]+ +clock: +[0-9\.]+ *
- \.\.\.updated 2 targets\.\.\.$
- """
- t.run_build_system(["-ffile.jam", "-d+1"], stdout=expected_output,
- match=lambda actual, expected: re.search(expected, actual, re.DOTALL))
- t.expect_addition("foo")
- t.expect_addition("bar")
- t.expect_nothing_more()
- t.cleanup()
- ###############################################################################
- #
- # boost_build_testing_support_timing_rule():
- # ------------------------------------------
- #
- ###############################################################################
- def boost_build_testing_support_timing_rule():
- """
- Tests the target build timing rule provided by the Boost Build testing
- support system.
- """
- t = BoostBuild.Tester(use_test_config=False)
- t.write("aaa.cpp", "int main() {}\n")
- t.write("jamroot.jam", """\
- import testing ;
- exe my-exe : aaa.cpp ;
- time my-time : my-exe ;
- """)
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/aaa.obj")
- t.expect_addition("bin/$toolset/debug*/my-exe.exe")
- t.expect_addition("bin/$toolset/debug*/my-time.time")
- t.expect_content_lines("bin/$toolset/debug*/my-time.time",
- "user: *[0-9] seconds")
- t.expect_content_lines("bin/$toolset/debug*/my-time.time",
- "system: *[0-9] seconds")
- t.expect_content_lines("bin/$toolset/debug*/my-time.time",
- "clock: *[0-9] seconds")
- t.cleanup()
- ###############################################################################
- #
- # boost_build_testing_support_timing_rule_with_spaces_in_names()
- # --------------------------------------------------------------
- #
- ###############################################################################
- def boost_build_testing_support_timing_rule_with_spaces_in_names():
- """
- Tests the target build timing rule provided by the Boost Build testing
- support system when used with targets contining spaces in their names.
- """
- t = BoostBuild.Tester(use_test_config=False)
- t.write("aaa bbb.cpp", "int main() {}\n")
- t.write("jamroot.jam", """\
- import testing ;
- exe "my exe" : "aaa bbb.cpp" ;
- time "my time" : "my exe" ;
- """)
- t.run_build_system()
- t.expect_addition("bin/$toolset/debug*/aaa bbb.obj")
- t.expect_addition("bin/$toolset/debug*/my exe.exe")
- t.expect_addition("bin/$toolset/debug*/my time.time")
- t.expect_content_lines("bin/$toolset/debug*/my time.time", "user: *")
- t.expect_content_lines("bin/$toolset/debug*/my time.time", "system: *")
- t.cleanup()
- ###############################################################################
- #
- # main()
- # ------
- #
- ###############################################################################
- basic_jam_action_test()
- boost_build_testing_support_timing_rule()
- boost_build_testing_support_timing_rule_with_spaces_in_names()
|