diff options
Diffstat (limited to 'src/boost/tools/build/test/core_parallel_multifile_actions_1.py')
-rwxr-xr-x | src/boost/tools/build/test/core_parallel_multifile_actions_1.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/boost/tools/build/test/core_parallel_multifile_actions_1.py b/src/boost/tools/build/test/core_parallel_multifile_actions_1.py new file mode 100755 index 000000000..214d00504 --- /dev/null +++ b/src/boost/tools/build/test/core_parallel_multifile_actions_1.py @@ -0,0 +1,78 @@ +#!/usr/bin/python + +# Copyright 2007 Rene Rivera. +# Copyright 2011 Steven Watanabe +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.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(["-d1"], pass_toolset=0) + +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() |