| #!/usr/bin/python |
| |
| # Copyright 2007 Rene Rivera. |
| # Copyright 2011 Steven Watanabe |
| # Distributed under the Boost Software License, Version 1.0. |
| # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) |
| |
| # Added to guard against a bug causing targets to be used before they |
| # themselves have finished building. This used to happen for targets built by a |
| # multi-file action that got triggered by another target. |
| # |
| # Example: |
| # When target A and target B were declared as created by a single action and |
| # target A triggered running that action then, while the action was still |
| # running, target B was already reporting as being built causing other targets |
| # depending on target A to be built prematurely. |
| |
| import BoostBuild |
| |
| t = BoostBuild.Tester(pass_toolset=0, pass_d0=False) |
| |
| t.write("sleep.bat", """\ |
| ::@timeout /T %1 /NOBREAK >nul |
| @ping 127.0.0.1 -n 2 -w 1000 >nul |
| @ping 127.0.0.1 -n %1 -w 1000 >nul |
| @exit /B 0 |
| """) |
| |
| t.write("file.jam", """\ |
| if $(NT) |
| { |
| SLEEP = @call sleep.bat ; |
| } |
| else |
| { |
| SLEEP = sleep ; |
| } |
| |
| actions .gen. |
| { |
| echo 001 |
| $(SLEEP) 4 |
| echo 002 |
| } |
| rule .use.1 { DEPENDS $(<) : $(>) ; } |
| actions .use.1 |
| { |
| echo 003 |
| } |
| |
| rule .use.2 { DEPENDS $(<) : $(>) ; } |
| actions .use.2 |
| { |
| $(SLEEP) 1 |
| echo 004 |
| } |
| |
| .gen. g1.generated g2.generated ; |
| .use.1 u1.user : g1.generated ; |
| .use.2 u2.user : g2.generated ; |
| |
| DEPENDS all : u1.user u2.user ; |
| """) |
| |
| t.run_build_system(["-ffile.jam", "-j2"], stdout="""\ |
| ...found 5 targets... |
| ...updating 4 targets... |
| .gen. g1.generated |
| 001 |
| 002 |
| .use.1 u1.user |
| 003 |
| .use.2 u2.user |
| 004 |
| ...updated 4 targets... |
| """) |
| |
| t.cleanup() |