diff options
-rw-r--r-- | src/scons.py | 10 | ||||
-rw-r--r-- | src/scons/Builder.py | 15 | ||||
-rw-r--r-- | test/option-n.py | 71 | ||||
-rw-r--r-- | test/option-s.py | 46 |
4 files changed, 110 insertions, 32 deletions
diff --git a/src/scons.py b/src/scons.py index 66932f6..2649637 100644 --- a/src/scons.py +++ b/src/scons.py @@ -338,7 +338,10 @@ Option(func = opt_not_yet, future = 1, long = ['list-where'], help = "Don't build; list files and where defined.") -Option(func = opt_not_yet, +def opt_n(opt, arg): + scons.Builder.execute_actions = None + +Option(func = opt_n, short = 'n', long = ['no-exec', 'just-print', 'dry-run', 'recon'], help = "Don't build; just print commands.") @@ -366,7 +369,10 @@ Option(func = opt_not_yet, future = 1, long = ['random'], help = "Build dependencies in random order.") -Option(func = opt_not_yet, +def opt_s(opt, arg): + scons.Builder.print_actions = None + +Option(func = opt_s, short = 's', long = ['silent', 'quiet'], help = "Don't print commands.") diff --git a/src/scons/Builder.py b/src/scons/Builder.py index c11c9f3..8b19bd5 100644 --- a/src/scons/Builder.py +++ b/src/scons/Builder.py @@ -51,6 +51,11 @@ class Builder: +print_actions = 1; +execute_actions = 1; + + + def Action(act): """A factory for action objects.""" if type(act) == types.FunctionType: @@ -78,8 +83,10 @@ class CommandAction(ActionBase): def execute(self, **kw): cmd = self.command % kw - self.show(cmd) - os.system(cmd) + if print_actions: + self.show(cmd) + if execute_actions: + os.system(cmd) class FunctionAction(ActionBase): """Class for Python function actions.""" @@ -87,5 +94,7 @@ class FunctionAction(ActionBase): self.function = function def execute(self, **kw): + # if print_actions: # XXX: WHAT SHOULD WE PRINT HERE? - self.function(kw) + if execute_actions: + self.function(kw) diff --git a/test/option-n.py b/test/option-n.py index 12bacd8..245f512 100644 --- a/test/option-n.py +++ b/test/option-n.py @@ -3,6 +3,7 @@ __revision__ = "test/option-n.py __REVISION__ __DATE__ __DEVELOPER__" import TestCmd +import os.path import string import sys @@ -10,32 +11,68 @@ test = TestCmd.TestCmd(program = 'scons.py', workdir = '', interpreter = 'python') -test.write('SConstruct', "") +test.write('build.py', r""" +import sys +file = open(sys.argv[1], 'w') +file.write("build.py: %s\n" % sys.argv[1]) +file.close() +""") + +test.write('SConstruct', """ +MyBuild = Builder(name = "MyBuild", + action = "python build.py %(target)s") +env = Environment(BUILDERS = [MyBuild]) +env.MyBuild(target = 'f1.out', source = 'f1.in') +env.MyBuild(target = 'f2.out', source = 'f2.in') +""") + +args = 'f1.out f2.out' +expect = "python build.py f1.out\npython build.py f2.out\n" + +test.run(chdir = '.', arguments = args) -test.run(chdir = '.', arguments = '-n') +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(not os.path.exists(test.workpath('f1.out'))) +test.fail_test(not os.path.exists(test.workpath('f2.out'))) -test.fail_test(test.stderr() != - "Warning: the -n option is not yet implemented\n") +os.unlink(test.workpath('f1.out')) +os.unlink(test.workpath('f2.out')) -test.run(chdir = '.', arguments = '--no-exec') +test.run(chdir = '.', arguments = '-n ' + args) -test.fail_test(test.stderr() != - "Warning: the --no-exec option is not yet implemented\n") +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(os.path.exists(test.workpath('f1.out'))) +test.fail_test(os.path.exists(test.workpath('f2.out'))) -test.run(chdir = '.', arguments = '--just-print') +test.run(chdir = '.', arguments = '--no-exec ' + args) -test.fail_test(test.stderr() != - "Warning: the --just-print option is not yet implemented\n") +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(os.path.exists(test.workpath('f1.out'))) +test.fail_test(os.path.exists(test.workpath('f2.out'))) -test.run(chdir = '.', arguments = '--dry-run') +test.run(chdir = '.', arguments = '--just-print ' + args) -test.fail_test(test.stderr() != - "Warning: the --dry-run option is not yet implemented\n") +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(os.path.exists(test.workpath('f1.out'))) +test.fail_test(os.path.exists(test.workpath('f2.out'))) -test.run(chdir = '.', arguments = '--recon') +test.run(chdir = '.', arguments = '--dry-run ' + args) -test.fail_test(test.stderr() != - "Warning: the --recon option is not yet implemented\n") +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(os.path.exists(test.workpath('f1.out'))) +test.fail_test(os.path.exists(test.workpath('f2.out'))) + +test.run(chdir = '.', arguments = '--recon ' + args) + +test.fail_test(test.stdout() != expect) +test.fail_test(test.stderr() != "") +test.fail_test(os.path.exists(test.workpath('f1.out'))) +test.fail_test(os.path.exists(test.workpath('f2.out'))) test.pass_test() - + diff --git a/test/option-s.py b/test/option-s.py index 9f5e20b..66d92c7 100644 --- a/test/option-s.py +++ b/test/option-s.py @@ -3,6 +3,7 @@ __revision__ = "test/option-s.py __REVISION__ __DATE__ __DEVELOPER__" import TestCmd +import os.path import string import sys @@ -10,22 +11,47 @@ test = TestCmd.TestCmd(program = 'scons.py', workdir = '', interpreter = 'python') -test.write('SConstruct', "") +test.write('build.py', r""" +import sys +file = open(sys.argv[1], 'w') +file.write("build.py: %s\n" % sys.argv[1]) +file.close() +""") + +test.write('SConstruct', """ +MyBuild = Builder(name = "MyBuild", + action = "python build.py %(target)s") +env = Environment(BUILDERS = [MyBuild]) +env.MyBuild(target = 'f1.out', source = 'f1.in') +env.MyBuild(target = 'f2.out', source = 'f2.in') +""") + +test.run(chdir = '.', arguments = '-s f1.out f2.out') + +test.fail_test(test.stdout() != "") +test.fail_test(test.stderr() != "") +test.fail_test(not os.path.exists(test.workpath('f1.out'))) +test.fail_test(not os.path.exists(test.workpath('f2.out'))) -test.run(chdir = '.', arguments = '-s') +os.unlink(test.workpath('f1.out')) +os.unlink(test.workpath('f2.out')) -test.fail_test(test.stderr() != - "Warning: the -s option is not yet implemented\n") +test.run(chdir = '.', arguments = '--silent f1.out f2.out') -test.run(chdir = '.', arguments = '--silent') +test.fail_test(test.stdout() != "") +test.fail_test(test.stderr() != "") +test.fail_test(not os.path.exists(test.workpath('f1.out'))) +test.fail_test(not os.path.exists(test.workpath('f2.out'))) -test.fail_test(test.stderr() != - "Warning: the --silent option is not yet implemented\n") +os.unlink(test.workpath('f1.out')) +os.unlink(test.workpath('f2.out')) -test.run(chdir = '.', arguments = '--quiet') +test.run(chdir = '.', arguments = '--quiet f1.out f2.out') -test.fail_test(test.stderr() != - "Warning: the --quiet option is not yet implemented\n") +test.fail_test(test.stdout() != "") +test.fail_test(test.stderr() != "") +test.fail_test(not os.path.exists(test.workpath('f1.out'))) +test.fail_test(not os.path.exists(test.workpath('f2.out'))) test.pass_test() |