summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2008-12-07 18:04:59 (GMT)
committerSteven Knight <knight@baldmt.com>2008-12-07 18:04:59 (GMT)
commit9c0324beafa6dd9f4554b25d6824ea2f5de7cb77 (patch)
treef666a8f466995e10af0195ac50db1358cdfb432a /src/engine/SCons
parent12141dbc1cbf67855a45d43a8c6cdc18d0ea5bc2 (diff)
downloadSCons-9c0324beafa6dd9f4554b25d6824ea2f5de7cb77.zip
SCons-9c0324beafa6dd9f4554b25d6824ea2f5de7cb77.tar.gz
SCons-9c0324beafa6dd9f4554b25d6824ea2f5de7cb77.tar.bz2
Make ${,UN}CHANGED_{SOURCES,TARGETS} into future reserved construction
variable names, with an appropriate warning.
Diffstat (limited to 'src/engine/SCons')
-rw-r--r--src/engine/SCons/Environment.py36
-rw-r--r--src/engine/SCons/EnvironmentTests.py44
-rw-r--r--src/engine/SCons/Script/Main.py5
-rw-r--r--src/engine/SCons/Warnings.py3
4 files changed, 73 insertions, 15 deletions
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 5b82086..f6123b9 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -105,24 +105,40 @@ def apply_tools(env, tools, toolpath):
else:
env.Tool(tool)
-# These names are controlled by SCons; users should never set or override
-# them. This warning can optionally be turned off, but scons will still
-# ignore the illegal variable names even if it's off.
-reserved_construction_var_names = \
- ['TARGET', 'TARGETS', 'SOURCE', 'SOURCES']
+# These names are (or will be) controlled by SCons; users should never
+# set or override them. This warning can optionally be turned off,
+# but scons will still ignore the illegal variable names even if it's off.
+reserved_construction_var_names = [
+ 'SOURCE',
+ 'SOURCES',
+ 'TARGET',
+ 'TARGETS',
+]
+
+future_reserved_construction_var_names = [
+ 'CHANGED_SOURCES',
+ 'CHANGED_TARGETS',
+ 'UNCHANGED_SOURCES',
+ 'UNCHANGED_TARGETS',
+]
def copy_non_reserved_keywords(dict):
result = semi_deepcopy(dict)
for k in result.keys():
if k in reserved_construction_var_names:
- SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning,
- "Ignoring attempt to set reserved variable `%s'" % k)
+ msg = "Ignoring attempt to set reserved variable `$%s'"
+ SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning, msg % k)
del result[k]
return result
def _set_reserved(env, key, value):
- msg = "Ignoring attempt to set reserved variable `%s'" % key
- SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning, msg)
+ msg = "Ignoring attempt to set reserved variable `$%s'"
+ SCons.Warnings.warn(SCons.Warnings.ReservedVariableWarning, msg % key)
+
+def _set_future_reserved(env, key, value):
+ env._dict[key] = value
+ msg = "`$%s' will be reserved in a future release and setting it will become ignored"
+ SCons.Warnings.warn(SCons.Warnings.FutureReservedVariableWarning, msg % key)
def _set_BUILDERS(env, key, value):
try:
@@ -364,6 +380,8 @@ class SubstitutionEnvironment:
self._special_set = {}
for key in reserved_construction_var_names:
self._special_set[key] = _set_reserved
+ for key in future_reserved_construction_var_names:
+ self._special_set[key] = _set_future_reserved
self._special_set['BUILDERS'] = _set_BUILDERS
self._special_set['SCANNERS'] = _set_SCANNERS
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index 2c09378..f3210b8 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -1120,25 +1120,59 @@ env4.builder1.env, env3)
assert env.Dictionary('ENV')['PATH'] == '/foo:/bar'
def test_ReservedVariables(self):
- """Test generation of warnings when reserved variable names
- are set in an environment."""
+ """Test warning generation when reserved variable names are set"""
- SCons.Warnings.enableWarningClass(SCons.Warnings.ReservedVariableWarning)
+ reserved_variables = [
+ 'SOURCE',
+ 'SOURCES',
+ 'TARGET',
+ 'TARGETS',
+ ]
+
+ warning = SCons.Warnings.ReservedVariableWarning
+ SCons.Warnings.enableWarningClass(warning)
old = SCons.Warnings.warningAsException(1)
try:
env4 = Environment()
- for kw in ['TARGET', 'TARGETS', 'SOURCE', 'SOURCES']:
+ for kw in reserved_variables:
exc_caught = None
try:
env4[kw] = 'xyzzy'
- except SCons.Warnings.ReservedVariableWarning:
+ except warning:
exc_caught = 1
assert exc_caught, "Did not catch ReservedVariableWarning for `%s'" % kw
assert not env4.has_key(kw), "`%s' variable was incorrectly set" % kw
finally:
SCons.Warnings.warningAsException(old)
+ def test_FutureReservedVariables(self):
+ """Test warning generation when future reserved variable names are set"""
+
+ future_reserved_variables = [
+ 'CHANGED_SOURCES',
+ 'CHANGED_TARGETS',
+ 'UNCHANGED_SOURCES',
+ 'UNCHANGED_TARGETS',
+ ]
+
+ warning = SCons.Warnings.FutureReservedVariableWarning
+ SCons.Warnings.enableWarningClass(warning)
+ old = SCons.Warnings.warningAsException(1)
+
+ try:
+ env4 = Environment()
+ for kw in future_reserved_variables:
+ exc_caught = None
+ try:
+ env4[kw] = 'xyzzy'
+ except warning:
+ exc_caught = 1
+ assert exc_caught, "Did not catch FutureReservedVariableWarning for `%s'" % kw
+ assert env4.has_key(kw), "`%s' variable was not set" % kw
+ finally:
+ SCons.Warnings.warningAsException(old)
+
def test_IllegalVariables(self):
"""Test that use of illegal variables raises an exception"""
env = Environment()
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py
index 2d4e6a0..25e73dc 100644
--- a/src/engine/SCons/Script/Main.py
+++ b/src/engine/SCons/Script/Main.py
@@ -737,6 +737,7 @@ def _main(parser):
default_warnings = [ SCons.Warnings.CorruptSConsignWarning,
SCons.Warnings.DeprecatedWarning,
SCons.Warnings.DuplicateEnvironmentWarning,
+ SCons.Warnings.FutureReservedVariableWarning,
SCons.Warnings.LinkWarning,
SCons.Warnings.MissingSConscriptWarning,
SCons.Warnings.NoMD5ModuleWarning,
@@ -744,7 +745,9 @@ def _main(parser):
SCons.Warnings.NoObjectCountWarning,
SCons.Warnings.NoParallelSupportWarning,
SCons.Warnings.MisleadingKeywordsWarning,
- SCons.Warnings.StackSizeWarning, ]
+ SCons.Warnings.ReservedVariableWarning,
+ SCons.Warnings.StackSizeWarning,
+ ]
for warning in default_warnings:
SCons.Warnings.enableWarningClass(warning)
diff --git a/src/engine/SCons/Warnings.py b/src/engine/SCons/Warnings.py
index 5af9263..03ab9ae 100644
--- a/src/engine/SCons/Warnings.py
+++ b/src/engine/SCons/Warnings.py
@@ -64,6 +64,9 @@ class DeprecatedTargetSignaturesWarning(DeprecatedWarning):
class DuplicateEnvironmentWarning(Warning):
pass
+class FutureReservedVariableWarning(Warning):
+ pass
+
class LinkWarning(Warning):
pass