diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CXX/CXXFLAGS.py | 165 | ||||
-rw-r--r-- | test/CXX/SHCXXFLAGS.py | 40 | ||||
-rw-r--r-- | test/Deprecated/Options/BoolOption.py | 7 | ||||
-rw-r--r-- | test/Deprecated/Options/EnumOption.py | 15 | ||||
-rw-r--r-- | test/Deprecated/Options/ListOption.py | 17 | ||||
-rw-r--r-- | test/Deprecated/Options/PackageOption.py | 6 | ||||
-rw-r--r-- | test/Deprecated/Options/PathOption.py | 7 | ||||
-rw-r--r-- | test/Fortran/FORTRANMODDIR.py | 12 | ||||
-rw-r--r-- | test/Interactive/taskmastertrace.py | 17 | ||||
-rw-r--r-- | test/Parallel/multiple-parents.py | 89 | ||||
-rw-r--r-- | test/Scanner/Entry-to-Dir.py | 59 | ||||
-rw-r--r-- | test/Scanner/source_scanner-dict.py | 218 | ||||
-rw-r--r-- | test/Variables/BoolVariable.py | 7 | ||||
-rw-r--r-- | test/Variables/EnumVariable.py | 15 | ||||
-rw-r--r-- | test/Variables/ListVariable.py | 17 | ||||
-rw-r--r-- | test/Variables/PackageVariable.py | 6 | ||||
-rw-r--r-- | test/Variables/PathVariable.py | 7 | ||||
-rw-r--r-- | test/option/taskmastertrace.py | 92 |
18 files changed, 683 insertions, 113 deletions
diff --git a/test/CXX/CXXFLAGS.py b/test/CXX/CXXFLAGS.py new file mode 100644 index 0000000..86f14f0 --- /dev/null +++ b/test/CXX/CXXFLAGS.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +""" +Verify that $CXXFLAGS settings are used to build both static +and shared object files. +""" + +import os +import string +import sys + +import TestSCons + +_obj = TestSCons._obj + +if os.name == 'posix': + os.environ['LD_LIBRARY_PATH'] = '.' +if string.find(sys.platform, 'irix') > -1: + os.environ['LD_LIBRARYN32_PATH'] = '.' + +test = TestSCons.TestSCons() + +e = test.Environment() + +test.write('SConstruct', """ +foo = Environment(WINDOWS_INSERT_DEF=1) +foo.Append(CXXFLAGS = '-DFOO') +bar = Environment(WINDOWS_INSERT_DEF=1) +bar.Append(CXXFLAGS = '-DBAR') +foo_obj = foo.SharedObject(target = 'fooshared%(_obj)s', source = 'doIt.cpp') +bar_obj = bar.SharedObject(target = 'barshared%(_obj)s', source = 'doIt.cpp') +foo.SharedLibrary(target = 'foo', source = foo_obj) +bar.SharedLibrary(target = 'bar', source = bar_obj) + +fooMain = foo.Clone(LIBS='foo', LIBPATH='.') +foo_obj = fooMain.Object(target='foomain', source='main.c') +fooMain.Program(target='fooprog', source=foo_obj) + +barMain = bar.Clone(LIBS='bar', LIBPATH='.') +bar_obj = barMain.Object(target='barmain', source='main.c') +barMain.Program(target='barprog', source=bar_obj) + +foo_obj = foo.Object(target = 'foostatic', source = 'prog.cpp') +bar_obj = bar.Object(target = 'barstatic', source = 'prog.cpp') +foo.Program(target = 'foo', source = foo_obj) +bar.Program(target = 'bar', source = bar_obj) +""" % locals()) + +test.write('foo.def', r""" +LIBRARY "foo" +DESCRIPTION "Foo Shared Library" + +EXPORTS + doIt +""") + +test.write('bar.def', r""" +LIBRARY "bar" +DESCRIPTION "Bar Shared Library" + +EXPORTS + doIt +""") + +test.write('doIt.cpp', r""" +#include <stdio.h> + +extern "C" void +doIt() +{ +#ifdef FOO + printf("doIt.cpp: FOO\n"); +#endif +#ifdef BAR + printf("doIt.cpp: BAR\n"); +#endif +} +""") + +test.write('main.c', r""" + +void doIt(); + +int +main(int argc, char* argv[]) +{ + doIt(); + return 0; +} +""") + +test.write('prog.cpp', r""" +#include <stdio.h> +#include <stdlib.h> + +int +main(int argc, char *argv[]) +{ + argv[argc++] = "--"; +#ifdef FOO + printf("prog.c: FOO\n"); +#endif +#ifdef BAR + printf("prog.c: BAR\n"); +#endif + exit (0); +} +""") + +test.run(arguments = '.') + +test.run(program = test.workpath('fooprog'), stdout = "doIt.cpp: FOO\n") +test.run(program = test.workpath('barprog'), stdout = "doIt.cpp: BAR\n") +test.run(program = test.workpath('foo'), stdout = "prog.c: FOO\n") +test.run(program = test.workpath('bar'), stdout = "prog.c: BAR\n") + + + +test.write('SConstruct', """ +bar = Environment(WINDOWS_INSERT_DEF=1) +bar.Append(CXXFLAGS = '-DBAR') +foo_obj = bar.SharedObject(target = 'foo%(_obj)s', source = 'doIt.cpp') +bar_obj = bar.SharedObject(target = 'bar%(_obj)s', source = 'doIt.cpp') +bar.SharedLibrary(target = 'foo', source = foo_obj) +bar.SharedLibrary(target = 'bar', source = bar_obj) + +barMain = bar.Clone(LIBS='bar', LIBPATH='.') +foo_obj = barMain.Object(target='foomain', source='main.c') +bar_obj = barMain.Object(target='barmain', source='main.c') +barMain.Program(target='barprog', source=foo_obj) +barMain.Program(target='fooprog', source=bar_obj) +""" % locals()) + +test.run(arguments = '.') + +test.run(program = test.workpath('fooprog'), stdout = "doIt.cpp: BAR\n") +test.run(program = test.workpath('barprog'), stdout = "doIt.cpp: BAR\n") + + + +test.pass_test() diff --git a/test/CXX/SHCXXFLAGS.py b/test/CXX/SHCXXFLAGS.py index bfe1a79..0ce2b15 100644 --- a/test/CXX/SHCXXFLAGS.py +++ b/test/CXX/SHCXXFLAGS.py @@ -24,10 +24,15 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" -import sys -import TestSCons +""" +Verify that $SHCXXFLAGS settings are used to build shared object files. +""" + import os import string +import sys + +import TestSCons _obj = TestSCons._obj @@ -39,16 +44,16 @@ if string.find(sys.platform, 'irix') > -1: test = TestSCons.TestSCons() e = test.Environment() -fooflags = e['SHCXXFLAGS'] + ' -DFOO' -barflags = e['SHCXXFLAGS'] + ' -DBAR' test.write('SConstruct', """ -foo = Environment(SHCXXFLAGS = '%s', WINDOWS_INSERT_DEF=1) -bar = Environment(SHCXXFLAGS = '%s', WINDOWS_INSERT_DEF=1) -foo.SharedObject(target = 'foo%s', source = 'prog.cpp') -bar.SharedObject(target = 'bar%s', source = 'prog.cpp') -foo.SharedLibrary(target = 'foo', source = 'foo%s') -bar.SharedLibrary(target = 'bar', source = 'bar%s') +foo = Environment(WINDOWS_INSERT_DEF=1) +foo.Append(SHCXXFLAGS = '-DFOO') +bar = Environment(WINDOWS_INSERT_DEF=1) +bar.Append(SHCXXFLAGS = '-DBAR') +foo_obj = foo.SharedObject(target = 'foo%(_obj)s', source = 'prog.cpp') +bar_obj = bar.SharedObject(target = 'bar%(_obj)s', source = 'prog.cpp') +foo.SharedLibrary(target = 'foo', source = foo_obj) +bar.SharedLibrary(target = 'bar', source = bar_obj) fooMain = foo.Clone(LIBS='foo', LIBPATH='.') foo_obj = fooMain.Object(target='foomain', source='main.c') @@ -57,7 +62,7 @@ fooMain.Program(target='fooprog', source=foo_obj) barMain = bar.Clone(LIBS='bar', LIBPATH='.') bar_obj = barMain.Object(target='barmain', source='main.c') barMain.Program(target='barprog', source=bar_obj) -""" % (fooflags, barflags, _obj, _obj, _obj, _obj)) +""" % locals()) test.write('foo.def', r""" LIBRARY "foo" @@ -108,18 +113,19 @@ test.run(program = test.workpath('fooprog'), stdout = "prog.cpp: FOO\n") test.run(program = test.workpath('barprog'), stdout = "prog.cpp: BAR\n") test.write('SConstruct', """ -bar = Environment(SHCXXFLAGS = '%s', WINDOWS_INSERT_DEF=1) -bar.SharedObject(target = 'foo%s', source = 'prog.cpp') -bar.SharedObject(target = 'bar%s', source = 'prog.cpp') -bar.SharedLibrary(target = 'foo', source = 'foo%s') -bar.SharedLibrary(target = 'bar', source = 'bar%s') +bar = Environment(WINDOWS_INSERT_DEF=1) +bar.Append(SHCXXFLAGS = '-DBAR') +foo_obj = bar.SharedObject(target = 'foo%(_obj)s', source = 'prog.cpp') +bar_obj = bar.SharedObject(target = 'bar%(_obj)s', source = 'prog.cpp') +bar.SharedLibrary(target = 'foo', source = foo_obj) +bar.SharedLibrary(target = 'bar', source = bar_obj) barMain = bar.Clone(LIBS='bar', LIBPATH='.') foo_obj = barMain.Object(target='foomain', source='main.c') bar_obj = barMain.Object(target='barmain', source='main.c') barMain.Program(target='barprog', source=foo_obj) barMain.Program(target='fooprog', source=bar_obj) -""" % (barflags, _obj, _obj, _obj, _obj)) +""" % locals()) test.run(arguments = '.') diff --git a/test/Deprecated/Options/BoolOption.py b/test/Deprecated/Options/BoolOption.py index 38b30d5..d45ad1b 100644 --- a/test/Deprecated/Options/BoolOption.py +++ b/test/Deprecated/Options/BoolOption.py @@ -50,12 +50,15 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Options.BoolOption import BoolOption +BO = BoolOption + from SCons.Options import BoolOption opts = Options(args=ARGUMENTS) opts.AddOptions( BoolOption('warnings', 'compilation with -Wall and similiar', 1), - BoolOption('profile', 'create profiling informations', 0), + BO('profile', 'create profiling informations', 0), ) env = Environment(options=opts) @@ -78,7 +81,7 @@ check([str(False), str(True)]) expect_stderr = """ scons: *** Error converting option: warnings Invalid value for boolean option: irgendwas -""" + test.python_file_line(SConstruct_path, 9) +""" + test.python_file_line(SConstruct_path, 12) test.run(arguments='warnings=irgendwas', stderr = expect_stderr, status=2) diff --git a/test/Deprecated/Options/EnumOption.py b/test/Deprecated/Options/EnumOption.py index 610a485..29724f3 100644 --- a/test/Deprecated/Options/EnumOption.py +++ b/test/Deprecated/Options/EnumOption.py @@ -44,6 +44,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Options.EnumOption import EnumOption +EO = EnumOption + from SCons.Options import EnumOption list_of_libs = Split('x11 gl qt ical') @@ -56,9 +59,9 @@ opts.AddOptions( EnumOption('guilib', 'gui lib to use', 'gtk', allowed_values=('motif', 'gtk', 'kde'), map={}, ignorecase=1), # case insensitive - EnumOption('some', 'some option', 'xaver', - allowed_values=('xaver', 'eins'), - map={}, ignorecase=2), # make lowercase + EO('some', 'some option', 'xaver', + allowed_values=('xaver', 'eins'), + map={}, ignorecase=2), # make lowercase ) env = Environment(options=opts) @@ -82,19 +85,19 @@ check(['full', 'KdE', 'eins']) expect_stderr = """ scons: *** Invalid value for option debug: FULL -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='debug=FULL', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Invalid value for option guilib: irgendwas -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='guilib=IrGeNdwas', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Invalid value for option some: irgendwas -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='some=IrGeNdwas', stderr=expect_stderr, status=2) diff --git a/test/Deprecated/Options/ListOption.py b/test/Deprecated/Options/ListOption.py index 1ce20a2..7e7b18f 100644 --- a/test/Deprecated/Options/ListOption.py +++ b/test/Deprecated/Options/ListOption.py @@ -47,6 +47,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Options.ListOption import ListOption +LO = ListOption + from SCons.Options import ListOption list_of_libs = Split('x11 gl qt ical') @@ -59,6 +62,7 @@ opts.AddOptions( 'all', names = list_of_libs, map = {'GL':'gl', 'QT':'qt'}), + LO('listvariable', 'listvariable help', 'all', names=['l1', 'l2', 'l3']) ) env = Environment(options=opts) @@ -81,7 +85,8 @@ test.run() check(['all', '1', 'gl ical qt x11', 'gl ical qt x11', "['gl ical qt x11']"]) -test.must_match(test.workpath('scons.options'), "shared = 'all'"+os.linesep) +expect = "shared = 'all'"+os.linesep+"listvariable = 'all'"+os.linesep +test.must_match(test.workpath('scons.options'), expect) check(['all', '1', 'gl ical qt x11', 'gl ical qt x11', "['gl ical qt x11']"]) @@ -110,7 +115,7 @@ check(['gl,qt', '0', 'gl qt', 'gl qt', "['gl qt']"]) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo', stderr=expect_stderr, status=2) @@ -119,28 +124,28 @@ test.run(arguments='shared=foo', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo,ical', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=ical,foo', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=ical,foo,x11', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo,bar -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo,x11,,,bar', stderr=expect_stderr, status=2) diff --git a/test/Deprecated/Options/PackageOption.py b/test/Deprecated/Options/PackageOption.py index 79d4dda..b7dbc71 100644 --- a/test/Deprecated/Options/PackageOption.py +++ b/test/Deprecated/Options/PackageOption.py @@ -50,6 +50,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Options.PackageOption import PackageOption +PO = PackageOption + from SCons.Options import PackageOption opts = Options(args=ARGUMENTS) @@ -57,6 +60,7 @@ opts.AddOptions( PackageOption('x11', 'use X11 installed here (yes = search some places', 'yes'), + PO('package', 'help for package', 'yes'), ) env = Environment(options=opts) @@ -80,7 +84,7 @@ check([test.workpath()]) expect_stderr = """ scons: *** Path does not exist for option x11: /non/existing/path/ -""" + test.python_file_line(SConstruct_path, 10) +""" + test.python_file_line(SConstruct_path, 14) test.run(arguments='x11=/non/existing/path/', stderr=expect_stderr, status=2) diff --git a/test/Deprecated/Options/PathOption.py b/test/Deprecated/Options/PathOption.py index 23fec6e..3fa7e81 100644 --- a/test/Deprecated/Options/PathOption.py +++ b/test/Deprecated/Options/PathOption.py @@ -49,6 +49,9 @@ workpath = test.workpath() libpath = os.path.join(workpath, 'lib') test.write(SConstruct_path, """\ +from SCons.Options.PathOption import PathOption +PO = PathOption + from SCons.Options import PathOption qtdir = r'%s' @@ -56,7 +59,7 @@ qtdir = r'%s' opts = Options(args=ARGUMENTS) opts.AddOptions( PathOption('qtdir', 'where the root of Qt is installed', qtdir), - PathOption('qt_libraries', 'where the Qt library is installed', r'%s'), + PO('qt_libraries', 'where the Qt library is installed', r'%s'), ) env = Environment(options=opts) @@ -90,7 +93,7 @@ test.run(arguments=['qtdir=%s' % qtpath, 'qt_libraries=%s' % libpath]) check([qtpath, libpath, libpath]) qtpath = os.path.join(workpath, 'non', 'existing', 'path') -SConstruct_file_line = test.python_file_line(test.workpath('SConstruct'), 11)[:-1] +SConstruct_file_line = test.python_file_line(test.workpath('SConstruct'), 14)[:-1] expect_stderr = """ scons: *** Path for option qtdir does not exist: %(qtpath)s diff --git a/test/Fortran/FORTRANMODDIR.py b/test/Fortran/FORTRANMODDIR.py index a81439a..c0e158d 100644 --- a/test/Fortran/FORTRANMODDIR.py +++ b/test/Fortran/FORTRANMODDIR.py @@ -54,7 +54,10 @@ test.write('SConstruct', """ env = Environment(FORTRANCOM = r'%(_python_)s myfortran.py $FORTRANMODDIR $SOURCE $TARGET', FORTRANMODDIR = 'modules') env.Object(target = 'test1.obj', source = 'test1.f') -env.Object(target = 'sub/test2.obj', source = 'test1.f', +env.Object(target = 'sub2/test2.obj', source = 'test1.f', + FORTRANMODDIR='${TARGET.dir}') +env.Object(target = 'sub3/test3.obj', source = 'test1.f', + FORTRANCOM = r'%(_python_)s myfortran.py $_FORTRANMODFLAG $SOURCE $TARGET', FORTRANMODDIR='${TARGET.dir}') """ % locals()) @@ -88,8 +91,11 @@ test.must_match('test1.obj', "myfortran.py wrote test1.obj\n") test.must_match(['modules', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n") test.must_not_exist(['modules', 'mod_bar.mod']) -test.must_match(['sub', 'test2.obj'], "myfortran.py wrote test2.obj\n") -test.must_match(['sub', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n") +test.must_match(['sub2', 'test2.obj'], "myfortran.py wrote test2.obj\n") +test.must_match(['sub2', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n") + +test.must_match(['sub3', 'test3.obj'], "myfortran.py wrote test3.obj\n") +test.must_match(['sub3', 'mod_foo.mod'], "myfortran.py wrote mod_foo.mod\n") test.up_to_date(arguments = '.') diff --git a/test/Interactive/taskmastertrace.py b/test/Interactive/taskmastertrace.py index f0ff81f..e78bdfa 100644 --- a/test/Interactive/taskmastertrace.py +++ b/test/Interactive/taskmastertrace.py @@ -56,6 +56,8 @@ test.write('foo.in', "foo.in 2\n") scons.send("build --taskmastertrace=- foo.out\n") +test.wait_for(test.workpath('foo.out')) + scons.send("build 2\n") test.wait_for(test.workpath('2')) @@ -71,15 +73,16 @@ scons>>> Copy("foo.out", "foo.in") Touch("1") scons>>> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'foo.out'> and its children: -Taskmaster: <no_state 'foo.in'> -Taskmaster: Considering node <no_state 'foo.in'> and its children: -Taskmaster: Evaluating <pending 'foo.in'> +Taskmaster: Considering node <no_state 0 'foo.out'> and its children: +Taskmaster: <no_state 0 'foo.in'> +Taskmaster: adjusting ref count: <pending 1 'foo.out'> +Taskmaster: Considering node <no_state 0 'foo.in'> and its children: +Taskmaster: Evaluating <pending 0 'foo.in'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <pending 'foo.out'> and its children: -Taskmaster: <up_to_date 'foo.in'> -Taskmaster: Evaluating <pending 'foo.out'> +Taskmaster: Considering node <pending 0 'foo.out'> and its children: +Taskmaster: <up_to_date 0 'foo.in'> +Taskmaster: Evaluating <pending 0 'foo.out'> Copy("foo.out", "foo.in") Taskmaster: Looking for a node to evaluate diff --git a/test/Parallel/multiple-parents.py b/test/Parallel/multiple-parents.py index f81adf5..d9c414f 100644 --- a/test/Parallel/multiple-parents.py +++ b/test/Parallel/multiple-parents.py @@ -50,34 +50,69 @@ test = TestSCons.TestSCons() # c) Some targets succeed building # d) Some children are ignored # e) Some children are pre-requesites -# f) Some sources are missing +# f) Some children have side-effects +# g) Some sources are missing +# h) Builds that are interrupted test.write('SConstruct', """ +opts = Options() +opts.Add( BoolOption('interrupt', 'Interrupt the build.', 0 ) ) +optEnv = Environment(options=opts) + def fail_action(target = None, source = None, env = None): return 2 +def simulate_keyboard_interrupt(target = None, source = None, env = None): + # Directly invoked the SIGINT handler to simulate a + # KeyboardInterrupt. This hack is necessary because there is no + # easy way to get access to the current Job/Taskmaster object. + import signal + handler = signal.getsignal(signal.SIGINT) + handler(signal.SIGINT, None) + return 0 + +interrupt = Command(target='interrupt', source='', action=simulate_keyboard_interrupt) + + failed0 = Command(target='failed00', source='', action=fail_action) -ok0 = Command(target='ok00', source='', action=Touch('${TARGET}')) +ok0 = Command(target=['ok00a', 'ok00b', 'ok00c'], + source='', + action=[Touch('${TARGETS[0]}'), Touch('${TARGETS[1]}'), Touch('${TARGETS[2]}')]) prereq0 = Command(target='prereq00', source='', action=Touch('${TARGET}')) ignore0 = Command(target='ignore00', source='', action=Touch('${TARGET}')) igreq0 = Command(target='igreq00', source='', action=Touch('${TARGET}')) missing0 = Command(target='missing00', source='MissingSrc', action=Touch('${TARGET}')) +withSE0 = Command(target=['withSE00a', 'withSE00b', 'withSE00c'], + source='', + action=[Touch('${TARGETS[0]}'), Touch('${TARGETS[1]}'), Touch('${TARGETS[2]}'), + Touch('side_effect')]) +SideEffect('side_effect', withSE0) -prev_level = failed0 + ok0 + ignore0 +prev_level = failed0 + ok0 + ignore0 + missing0 + withSE0 prev_prereq = prereq0 prev_ignore = ignore0 prev_igreq = igreq0 +if optEnv['interrupt']: + prev_level = prev_level + interrupt + for i in range(1,20): failed = Command(target='failed%02d' % i, source='', action=fail_action) - ok = Command(target='ok%02d' % i, source='', action=Touch('${TARGET}')) + ok = Command(target=['ok%02da' % i, 'ok%02db' % i, 'ok%02dc' % i], + source='', + action=[Touch('${TARGETS[0]}'), Touch('${TARGETS[1]}'), Touch('${TARGETS[2]}')]) prereq = Command(target='prereq%02d' % i, source='', action=Touch('${TARGET}')) ignore = Command(target='ignore%02d' % i, source='', action=Touch('${TARGET}')) igreq = Command(target='igreq%02d' % i, source='', action=Touch('${TARGET}')) missing = Command(target='missing%02d' %i, source='MissingSrc', action=Touch('${TARGET}')) + withSE = Command(target=['withSE%02da' % i, 'withSE%02db' % i, 'withSE%02dc' % i], + source='', + action=[Touch('${TARGETS[0]}'), Touch('${TARGETS[1]}'), Touch('${TARGETS[2]}'), + Touch('side_effect')]) + SideEffect('side_effect', withSE) - next_level = failed + ok + ignore + igreq + missing + next_level = failed + ok + ignore + igreq + missing + withSE for j in range(1,10): a = Alias('a%02d%02d' % (i,j), prev_level) @@ -108,7 +143,8 @@ Default(all) re_error = """\ (scons: \\*\\*\\* \\[failed\\d+] Error 2\\n)|\ -(scons: \\*\\*\\* Source `MissingSrc' not found, needed by target `missing\\d+'\\.( Stop\\.)?\\n)\ +(scons: \\*\\*\\* Source `MissingSrc' not found, needed by target `missing\\d+'\\.( Stop\\.)?\\n)|\ +(scons: \\*\\*\\* \\[\\w+] Build interrupted\.\\n)\ """ re_errors = "(" + re_error + ")+" @@ -116,7 +152,17 @@ re_errors = "(" + re_error + ")+" test.run(arguments = 'all', status = 2, stderr = "scons: *** [failed19] Error 2\n") -test.must_not_exist(test.workpath('ok')) +test.must_not_exist(test.workpath('side_effect')) +for i in range(20): + test.must_not_exist(test.workpath('ok%02da' % i)) + test.must_not_exist(test.workpath('ok%02db' % i)) + test.must_not_exist(test.workpath('ok%02dc' % i)) + test.must_not_exist(test.workpath('prereq%02d' % i)) + test.must_not_exist(test.workpath('ignore%02d' % i)) + test.must_not_exist(test.workpath('igreq%02d' % i)) + test.must_not_exist(test.workpath('withSE%02da' % i)) + test.must_not_exist(test.workpath('withSE%02db' % i)) + test.must_not_exist(test.workpath('withSE%02dc' % i)) for i in range(5): @@ -135,11 +181,17 @@ for i in range(5): status = 2, stderr = re_errors, match=TestSCons.match_re_dotall) + test.must_exist(test.workpath('side_effect')) for i in range(20): - test.must_exist(test.workpath('ok%02d' % i)) + test.must_exist(test.workpath('ok%02da' % i)) + test.must_exist(test.workpath('ok%02db' % i)) + test.must_exist(test.workpath('ok%02dc' % i)) test.must_exist(test.workpath('prereq%02d' % i)) test.must_not_exist(test.workpath('ignore%02d' % i)) test.must_exist(test.workpath('igreq%02d' % i)) + test.must_exist(test.workpath('withSE%02da' % i)) + test.must_exist(test.workpath('withSE%02db' % i)) + test.must_exist(test.workpath('withSE%02dc' % i)) for i in range(5): @@ -147,7 +199,7 @@ for i in range(5): status = 2, stderr = re_errors, match=TestSCons.match_re_dotall) - test.must_not_exist(test.workpath('ok')) + for i in range(5): test.run(arguments = '-c all') @@ -157,6 +209,7 @@ for i in range(5): stderr = re_errors, match=TestSCons.match_re_dotall) + for i in range(5): test.run(arguments = '-c all') @@ -164,10 +217,26 @@ for i in range(5): status = 2, stderr = re_errors, match=TestSCons.match_re_dotall) + test.must_exist(test.workpath('side_effect')) for i in range(20): - test.must_exist(test.workpath('ok%02d' % i)) + test.must_exist(test.workpath('ok%02da' % i)) + test.must_exist(test.workpath('ok%02db' % i)) + test.must_exist(test.workpath('ok%02dc' % i)) test.must_exist(test.workpath('prereq%02d' % i)) test.must_not_exist(test.workpath('ignore%02d' % i)) test.must_exist(test.workpath('igreq%02d' % i)) + test.must_exist(test.workpath('withSE%02da' % i)) + test.must_exist(test.workpath('withSE%02db' % i)) + test.must_exist(test.workpath('withSE%02dc' % i)) + + +for i in range(5): + test.run(arguments = '-c all') + + test.run(arguments = '-j 8 -k --random interrupt=yes all', + status = 2, + stderr = re_errors, + match=TestSCons.match_re_dotall) + test.pass_test() diff --git a/test/Scanner/Entry-to-Dir.py b/test/Scanner/Entry-to-Dir.py new file mode 100644 index 0000000..0b5dbd7 --- /dev/null +++ b/test/Scanner/Entry-to-Dir.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +""" +Verify that an implicit dependency search for a directory for which +we have an Entry Node works as expected, converting the Entry into a +Dir Node. +""" + +import TestSCons + +test = TestSCons.TestSCons() + +test.write('SConstruct', """ +env = Environment() +tc = env.Program('testcase', 'testcase.cpp') +foo = env.Entry('foo') +tc[0].all_children()[0].all_children() +""") + +test.write('testcase.cpp', """\ +#if 0 +#include "foo/bar/widget.h" +#endif +int main(int argc, char *argv[]) +{ + return 0; +} +""") + +test.run(arguments = '.') + +# In 0.98.2, re-running failed with a stack trace. +test.run(arguments = '.') + +test.pass_test() diff --git a/test/Scanner/source_scanner-dict.py b/test/Scanner/source_scanner-dict.py new file mode 100644 index 0000000..1ac15a8 --- /dev/null +++ b/test/Scanner/source_scanner-dict.py @@ -0,0 +1,218 @@ +#!/usr/bin/env python +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" + +""" +Verify that a source_scanner that uses a dictionary to select more +specific scanners for source file suffixes works correctly, even +when it's handed a file suffix that it doesn't know how to scan +(i.e., for which it doesn't have a specific scanner in its dictionary). +""" + +import TestSCons + +_python_ = TestSCons._python_ + +test = TestSCons.TestSCons() + +test.write('build.py', r""" +import sys +output = open(sys.argv[1], 'wb') +for infile in sys.argv[2:]: + input = open(infile, 'rb') + + include_prefix = 'include%s ' % infile[-1] + + def process(infp, outfp, include_prefix=include_prefix): + for line in infp.readlines(): + if line[:len(include_prefix)] == include_prefix: + file = line[len(include_prefix):-1] + process(open(file, 'rb'), outfp) + else: + outfp.write(line) + + process(input, output) + +sys.exit(0) +""") + +# Execute a subsidiary SConscript just to make sure we can +# get at the Scanner keyword from there. + +test.write('SConstruct', """ +SConscript('SConscript') +""") + +test.write('SConscript', """ +import re + +include1_re = re.compile(r'^include1\s+(\S+)$', re.M) +include2_re = re.compile(r'^include2\s+(\S+)$', re.M) +include3_re = re.compile(r'^include3\s+(\S+)$', re.M) + +def k1_scan(node, env, scanpaths, arg=None): + contents = node.get_contents() + includes = include1_re.findall(contents) + return includes + +def k2_scan(node, env, scanpaths, arg=None): + contents = node.get_contents() + includes = include2_re.findall(contents) + return includes + +def k3_scan(node, env, scanpaths, arg=None): + contents = node.get_contents() + includes = include3_re.findall(contents) + return includes + +kscanner = Scanner({'.k1' : Scanner(k1_scan), '.k2': Scanner(k2_scan)}) + +b = Builder(action=r'%(_python_)s build.py $TARGET $SOURCES', + source_scanner=kscanner) +env = Environment(BUILDERS={'Build':b}) + +kscanner.add_scanner('.k3', Scanner(k3_scan)) + +env.Build('aaa', 'aaa.k1') +env.Build('bbb', 'bbb.k2') +env.Build('ccc', 'ccc.k3') +env.Build('ddd', ['ddd.k4', 'aaa.k1', 'bbb.k2', 'ccc.k3']) +""" % locals()) + +test.write('aaa.k1', +"""aaa.k1 1 +line 2 +include1 xxx +include2 yyy +include3 zzz +line 6 +""") + +test.write('bbb.k2', +"""bbb.k2 1 +line 2 +include1 xxx +include2 yyy +include3 zzz +line 6 +""") + +test.write('ccc.k3', +"""ccc.k3 1 +line 2 +include1 xxx +include2 yyy +include3 zzz +line 6 +""") + +test.write('ddd.k4', +"""ddd.k4 1 +line 2 +line 3 +""") + +test.write('xxx', "xxx 1\n") +test.write('yyy', "yyy 1\n") +test.write('zzz', "zzz 1\n") + + + + +expect = test.wrap_stdout("""\ +%(_python_)s build.py aaa aaa.k1 +%(_python_)s build.py bbb bbb.k2 +%(_python_)s build.py ccc ccc.k3 +%(_python_)s build.py ddd ddd.k4 aaa.k1 bbb.k2 ccc.k3 +""" % locals()) + +test.run(stdout=expect) + +expect_aaa = 'aaa.k1 1\nline 2\nxxx 1\ninclude2 yyy\ninclude3 zzz\nline 6\n' +expect_bbb = 'bbb.k2 1\nline 2\ninclude1 xxx\nyyy 1\ninclude3 zzz\nline 6\n' +expect_ccc = 'ccc.k3 1\nline 2\ninclude1 xxx\ninclude2 yyy\nzzz 1\nline 6\n' +expect_ddd = 'ddd.k4 1\nline 2\nline 3\n' + expect_aaa + expect_bbb + expect_ccc + +test.must_match('aaa', expect_aaa) +test.must_match('bbb', expect_bbb) +test.must_match('ccc', expect_ccc) +test.must_match('ddd', expect_ddd) + +test.up_to_date(arguments = '.') + + + +test.write('zzz', "zzz 2\n") + +expect = test.wrap_stdout("""\ +%(_python_)s build.py ccc ccc.k3 +%(_python_)s build.py ddd ddd.k4 aaa.k1 bbb.k2 ccc.k3 +""" % locals()) + +test.run(stdout=expect) + +expect_ccc = 'ccc.k3 1\nline 2\ninclude1 xxx\ninclude2 yyy\nzzz 2\nline 6\n' +expect_ddd = 'ddd.k4 1\nline 2\nline 3\n' + expect_aaa + expect_bbb + expect_ccc + +test.must_match('bbb', expect_bbb) +test.must_match('ddd', expect_ddd) + + + +test.write('yyy', "yyy 2\n") + +expect = test.wrap_stdout("""\ +%(_python_)s build.py bbb bbb.k2 +%(_python_)s build.py ddd ddd.k4 aaa.k1 bbb.k2 ccc.k3 +""" % locals()) + +test.run(stdout=expect) + +expect_bbb = 'bbb.k2 1\nline 2\ninclude1 xxx\nyyy 2\ninclude3 zzz\nline 6\n' +expect_ddd = 'ddd.k4 1\nline 2\nline 3\n' + expect_aaa + expect_bbb + expect_ccc + +test.must_match('bbb', expect_bbb) +test.must_match('ddd', expect_ddd) + + + +test.write('xxx', "xxx 2\n") + +expect = test.wrap_stdout("""\ +%(_python_)s build.py aaa aaa.k1 +%(_python_)s build.py ddd ddd.k4 aaa.k1 bbb.k2 ccc.k3 +""" % locals()) + +test.run(stdout=expect) + +expect_aaa = 'aaa.k1 1\nline 2\nxxx 2\ninclude2 yyy\ninclude3 zzz\nline 6\n' +expect_ddd = 'ddd.k4 1\nline 2\nline 3\n' + expect_aaa + expect_bbb + expect_ccc + +test.must_match('aaa', expect_aaa) +test.must_match('ddd', expect_ddd) + + + +test.pass_test() diff --git a/test/Variables/BoolVariable.py b/test/Variables/BoolVariable.py index 1bda19b..2ebe707 100644 --- a/test/Variables/BoolVariable.py +++ b/test/Variables/BoolVariable.py @@ -50,12 +50,15 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Variables.BoolVariable import BoolVariable +BV = BoolVariable + from SCons.Variables import BoolVariable opts = Variables(args=ARGUMENTS) opts.AddVariables( BoolVariable('warnings', 'compilation with -Wall and similiar', 1), - BoolVariable('profile', 'create profiling informations', 0), + BV('profile', 'create profiling informations', 0), ) env = Environment(variables=opts) @@ -78,7 +81,7 @@ check([str(False), str(True)]) expect_stderr = """ scons: *** Error converting option: warnings Invalid value for boolean option: irgendwas -""" + test.python_file_line(SConstruct_path, 9) +""" + test.python_file_line(SConstruct_path, 12) test.run(arguments='warnings=irgendwas', stderr = expect_stderr, status=2) diff --git a/test/Variables/EnumVariable.py b/test/Variables/EnumVariable.py index 6966509..4d09587 100644 --- a/test/Variables/EnumVariable.py +++ b/test/Variables/EnumVariable.py @@ -44,6 +44,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Variables.EnumVariable import EnumVariable +EV = EnumVariable + from SCons.Variables import EnumVariable list_of_libs = Split('x11 gl qt ical') @@ -56,9 +59,9 @@ opts.AddVariables( EnumVariable('guilib', 'gui lib to use', 'gtk', allowed_values=('motif', 'gtk', 'kde'), map={}, ignorecase=1), # case insensitive - EnumVariable('some', 'some option', 'xaver', - allowed_values=('xaver', 'eins'), - map={}, ignorecase=2), # make lowercase + EV('some', 'some option', 'xaver', + allowed_values=('xaver', 'eins'), + map={}, ignorecase=2), # make lowercase ) env = Environment(variables=opts) @@ -82,19 +85,19 @@ check(['full', 'KdE', 'eins']) expect_stderr = """ scons: *** Invalid value for option debug: FULL -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='debug=FULL', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Invalid value for option guilib: irgendwas -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='guilib=IrGeNdwas', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Invalid value for option some: irgendwas -""" + test.python_file_line(SConstruct_path, 18) +""" + test.python_file_line(SConstruct_path, 21) test.run(arguments='some=IrGeNdwas', stderr=expect_stderr, status=2) diff --git a/test/Variables/ListVariable.py b/test/Variables/ListVariable.py index 90d80ed..740698b 100644 --- a/test/Variables/ListVariable.py +++ b/test/Variables/ListVariable.py @@ -46,6 +46,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Variables.ListVariable import ListVariable +LV = ListVariable + from SCons.Variables import ListVariable list_of_libs = Split('x11 gl qt ical') @@ -58,6 +61,7 @@ opts.AddVariables( 'all', names = list_of_libs, map = {'GL':'gl', 'QT':'qt'}), + LV('listvariable', 'listvariable help', 'all', names=['l1', 'l2', 'l3']) ) env = Environment(variables=opts) @@ -80,7 +84,8 @@ test.run() check(['all', '1', 'gl ical qt x11', 'gl ical qt x11', "['gl ical qt x11']"]) -test.must_match(test.workpath('scons.variables'), "shared = 'all'"+os.linesep) +expect = "shared = 'all'"+os.linesep+"listvariable = 'all'"+os.linesep +test.must_match(test.workpath('scons.variables'), expect) check(['all', '1', 'gl ical qt x11', 'gl ical qt x11', "['gl ical qt x11']"]) @@ -109,7 +114,7 @@ check(['gl,qt', '0', 'gl qt', 'gl qt', "['gl qt']"]) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo', stderr=expect_stderr, status=2) @@ -118,28 +123,28 @@ test.run(arguments='shared=foo', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo,ical', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=ical,foo', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=ical,foo,x11', stderr=expect_stderr, status=2) expect_stderr = """ scons: *** Error converting option: shared Invalid value(s) for option: foo,bar -""" + test.python_file_line(SConstruct_path, 15) +""" + test.python_file_line(SConstruct_path, 19) test.run(arguments='shared=foo,x11,,,bar', stderr=expect_stderr, status=2) diff --git a/test/Variables/PackageVariable.py b/test/Variables/PackageVariable.py index 4d36252..4338449 100644 --- a/test/Variables/PackageVariable.py +++ b/test/Variables/PackageVariable.py @@ -50,6 +50,9 @@ def check(expect): test.write(SConstruct_path, """\ +from SCons.Variables.PackageVariable import PackageVariable +PV = PackageVariable + from SCons.Variables import PackageVariable opts = Variables(args=ARGUMENTS) @@ -57,6 +60,7 @@ opts.AddVariables( PackageVariable('x11', 'use X11 installed here (yes = search some places', 'yes'), + PV('package', 'help for package', 'yes'), ) env = Environment(variables=opts) @@ -80,7 +84,7 @@ check([test.workpath()]) expect_stderr = """ scons: *** Path does not exist for option x11: /non/existing/path/ -""" + test.python_file_line(SConstruct_path, 10) +""" + test.python_file_line(SConstruct_path, 14) test.run(arguments='x11=/non/existing/path/', stderr=expect_stderr, status=2) diff --git a/test/Variables/PathVariable.py b/test/Variables/PathVariable.py index a2f96a7..96da82f 100644 --- a/test/Variables/PathVariable.py +++ b/test/Variables/PathVariable.py @@ -49,6 +49,9 @@ workpath = test.workpath() libpath = os.path.join(workpath, 'lib') test.write(SConstruct_path, """\ +from SCons.Variables.PathVariable import PathVariable +PV = PathVariable + from SCons.Variables import PathVariable qtdir = r'%s' @@ -56,7 +59,7 @@ qtdir = r'%s' opts = Variables(args=ARGUMENTS) opts.AddVariables( PathVariable('qtdir', 'where the root of Qt is installed', qtdir), - PathVariable('qt_libraries', 'where the Qt library is installed', r'%s'), + PV('qt_libraries', 'where the Qt library is installed', r'%s'), ) env = Environment(variables=opts) @@ -90,7 +93,7 @@ test.run(arguments=['qtdir=%s' % qtpath, 'qt_libraries=%s' % libpath]) check([qtpath, libpath, libpath]) qtpath = os.path.join(workpath, 'non', 'existing', 'path') -SConstruct_file_line = test.python_file_line(test.workpath('SConstruct'), 11)[:-1] +SConstruct_file_line = test.python_file_line(test.workpath('SConstruct'), 14)[:-1] expect_stderr = """ scons: *** Path for option qtdir does not exist: %(qtpath)s diff --git a/test/option/taskmastertrace.py b/test/option/taskmastertrace.py index 30e15aa..a7d583e 100644 --- a/test/option/taskmastertrace.py +++ b/test/option/taskmastertrace.py @@ -48,37 +48,41 @@ test.write('Tfile.in', "Tfile.in\n") expect_stdout = test.wrap_stdout("""\ Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state '.'> and its children: -Taskmaster: <no_state 'SConstruct'> -Taskmaster: <no_state 'Tfile.in'> -Taskmaster: <no_state 'Tfile.mid'> -Taskmaster: <no_state 'Tfile.out'> -Taskmaster: Considering node <no_state 'SConstruct'> and its children: -Taskmaster: Evaluating <pending 'SConstruct'> +Taskmaster: Considering node <no_state 0 '.'> and its children: +Taskmaster: <no_state 0 'SConstruct'> +Taskmaster: <no_state 0 'Tfile.in'> +Taskmaster: <no_state 0 'Tfile.mid'> +Taskmaster: <no_state 0 'Tfile.out'> +Taskmaster: adjusting ref count: <pending 1 '.'> +Taskmaster: adjusting ref count: <pending 2 '.'> +Taskmaster: adjusting ref count: <pending 3 '.'> +Taskmaster: adjusting ref count: <pending 4 '.'> +Taskmaster: Considering node <no_state 0 'SConstruct'> and its children: +Taskmaster: Evaluating <pending 0 'SConstruct'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.in'> and its children: -Taskmaster: Evaluating <pending 'Tfile.in'> +Taskmaster: Considering node <no_state 0 'Tfile.in'> and its children: +Taskmaster: Evaluating <pending 0 'Tfile.in'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.mid'> and its children: -Taskmaster: <up_to_date 'Tfile.in'> -Taskmaster: Evaluating <pending 'Tfile.mid'> +Taskmaster: Considering node <no_state 0 'Tfile.mid'> and its children: +Taskmaster: <up_to_date 0 'Tfile.in'> +Taskmaster: Evaluating <pending 0 'Tfile.mid'> Copy("Tfile.mid", "Tfile.in") Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.out'> and its children: -Taskmaster: <executed 'Tfile.mid'> -Taskmaster: Evaluating <pending 'Tfile.out'> +Taskmaster: Considering node <no_state 0 'Tfile.out'> and its children: +Taskmaster: <executed 0 'Tfile.mid'> +Taskmaster: Evaluating <pending 0 'Tfile.out'> Copy("Tfile.out", "Tfile.mid") Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <pending '.'> and its children: -Taskmaster: <up_to_date 'SConstruct'> -Taskmaster: <up_to_date 'Tfile.in'> -Taskmaster: <executed 'Tfile.mid'> -Taskmaster: <executed 'Tfile.out'> -Taskmaster: Evaluating <pending '.'> +Taskmaster: Considering node <pending 0 '.'> and its children: +Taskmaster: <up_to_date 0 'SConstruct'> +Taskmaster: <up_to_date 0 'Tfile.in'> +Taskmaster: <executed 0 'Tfile.mid'> +Taskmaster: <executed 0 'Tfile.out'> +Taskmaster: Evaluating <pending 0 '.'> Taskmaster: Looking for a node to evaluate Taskmaster: No candidate anymore. @@ -103,35 +107,39 @@ test.run(arguments='--taskmastertrace=trace.out .', stdout=expect_stdout) expect_trace = """\ Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state '.'> and its children: -Taskmaster: <no_state 'SConstruct'> -Taskmaster: <no_state 'Tfile.in'> -Taskmaster: <no_state 'Tfile.mid'> -Taskmaster: <no_state 'Tfile.out'> -Taskmaster: Considering node <no_state 'SConstruct'> and its children: -Taskmaster: Evaluating <pending 'SConstruct'> +Taskmaster: Considering node <no_state 0 '.'> and its children: +Taskmaster: <no_state 0 'SConstruct'> +Taskmaster: <no_state 0 'Tfile.in'> +Taskmaster: <no_state 0 'Tfile.mid'> +Taskmaster: <no_state 0 'Tfile.out'> +Taskmaster: adjusting ref count: <pending 1 '.'> +Taskmaster: adjusting ref count: <pending 2 '.'> +Taskmaster: adjusting ref count: <pending 3 '.'> +Taskmaster: adjusting ref count: <pending 4 '.'> +Taskmaster: Considering node <no_state 0 'SConstruct'> and its children: +Taskmaster: Evaluating <pending 0 'SConstruct'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.in'> and its children: -Taskmaster: Evaluating <pending 'Tfile.in'> +Taskmaster: Considering node <no_state 0 'Tfile.in'> and its children: +Taskmaster: Evaluating <pending 0 'Tfile.in'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.mid'> and its children: -Taskmaster: <up_to_date 'Tfile.in'> -Taskmaster: Evaluating <pending 'Tfile.mid'> +Taskmaster: Considering node <no_state 0 'Tfile.mid'> and its children: +Taskmaster: <up_to_date 0 'Tfile.in'> +Taskmaster: Evaluating <pending 0 'Tfile.mid'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <no_state 'Tfile.out'> and its children: -Taskmaster: <executed 'Tfile.mid'> -Taskmaster: Evaluating <pending 'Tfile.out'> +Taskmaster: Considering node <no_state 0 'Tfile.out'> and its children: +Taskmaster: <executed 0 'Tfile.mid'> +Taskmaster: Evaluating <pending 0 'Tfile.out'> Taskmaster: Looking for a node to evaluate -Taskmaster: Considering node <pending '.'> and its children: -Taskmaster: <up_to_date 'SConstruct'> -Taskmaster: <up_to_date 'Tfile.in'> -Taskmaster: <executed 'Tfile.mid'> -Taskmaster: <executed 'Tfile.out'> -Taskmaster: Evaluating <pending '.'> +Taskmaster: Considering node <pending 0 '.'> and its children: +Taskmaster: <up_to_date 0 'SConstruct'> +Taskmaster: <up_to_date 0 'Tfile.in'> +Taskmaster: <executed 0 'Tfile.mid'> +Taskmaster: <executed 0 'Tfile.out'> +Taskmaster: Evaluating <pending 0 '.'> Taskmaster: Looking for a node to evaluate Taskmaster: No candidate anymore. |