summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/CHANGES.txt2
-rw-r--r--src/engine/SCons/Script/Main.py4
-rw-r--r--test/TARGETS.py31
3 files changed, 36 insertions, 1 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index e575de3..9d2e235 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -44,6 +44,8 @@ RELEASE 0.97 - XXX
- Allow access to both TARGET and SOURCE in $*PATH expansions.
+ - Allow SConscript files to modify BUILD_TARGETS.
+
From Timothee Besset:
- Add support for Objective C/C++ .m and .mm file suffixes (for
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py
index c41587c..8156208 100644
--- a/src/engine/SCons/Script/Main.py
+++ b/src/engine/SCons/Script/Main.py
@@ -1080,13 +1080,15 @@ def _main(args, parser):
fs.set_max_drift(ssoptions.get('max_drift'))
lookup_top = None
- if targets:
+ if SCons.Script.BUILD_TARGETS:
# They specified targets on the command line, so if they
# used -u, -U or -D, we have to look up targets relative
# to the top, but we build whatever they specified.
if target_top:
lookup_top = fs.Dir(target_top)
target_top = None
+
+ targets = SCons.Script.BUILD_TARGETS
else:
# There are no targets specified on the command line,
# so if they used -u, -U or -D, we may have to restrict
diff --git a/test/TARGETS.py b/test/TARGETS.py
index 5c73d81..d2520d5 100644
--- a/test/TARGETS.py
+++ b/test/TARGETS.py
@@ -32,6 +32,8 @@ import TestSCons
test = TestSCons.TestSCons()
+
+
test.write('SConstruct', """
print COMMAND_LINE_TARGETS
print map(str, BUILD_TARGETS)
@@ -62,6 +64,8 @@ scons: Nothing to be done for `aaa'.
""")
test.run(arguments = 'bbb ccc=xyz -n aaa', stdout = expect)
+
+
test.write('SConstruct', """
env = Environment()
print map(str, DEFAULT_TARGETS)
@@ -106,4 +110,31 @@ expect = test.wrap_stdout(build_str = "scons: `.' is up to date.\n",
""")
test.run(arguments = '.', stdout = expect)
+
+
+test.write('SConstruct', """\
+print map(str, BUILD_TARGETS)
+SConscript('SConscript')
+print map(str, BUILD_TARGETS)
+""")
+
+test.write('SConscript', """\
+BUILD_TARGETS.append('sconscript_target')
+""")
+
+test.write('command_line_target', "command_line_target\n")
+test.write('sconscript_target', "sconscript_target\n")
+
+expect = test.wrap_stdout(read_str = """\
+['command_line_target']
+['command_line_target', 'sconscript_target']
+""",
+ build_str = """\
+scons: Nothing to be done for `command_line_target'.
+scons: Nothing to be done for `sconscript_target'.
+""")
+test.run(arguments = 'command_line_target', stdout = expect)
+
+
+
test.pass_test()