summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-09-10 13:19:03 (GMT)
committerSteven Knight <knight@baldmt.com>2003-09-10 13:19:03 (GMT)
commite181e48bb62502b88107536c2e8dbd5886bf17fd (patch)
treee835fcf4a2cf7f45f7af2386a58e1104c6ecc710 /src
parente10b74a59f1830769ba4c7e65a846228812ae2fa (diff)
downloadSCons-e181e48bb62502b88107536c2e8dbd5886bf17fd.zip
SCons-e181e48bb62502b88107536c2e8dbd5886bf17fd.tar.gz
SCons-e181e48bb62502b88107536c2e8dbd5886bf17fd.tar.bz2
Make a Clean() environment method. Add global functions for AlwaysBuild(), Command(), Depends(), Ignore(), Install(), InstallAs(), Precious(), SideEffect() and SourceCode().
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt12
-rw-r--r--src/engine/SCons/Environment.py27
-rw-r--r--src/engine/SCons/EnvironmentTests.py26
-rw-r--r--src/engine/SCons/Script/SConscript.py31
-rw-r--r--src/engine/SCons/Script/__init__.py8
5 files changed, 77 insertions, 27 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index d8a6155..259e199 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -43,8 +43,16 @@ RELEASE X.XX - XXX
- Support arbitrary expansion of construction variables within
file and directory arguments to Builder calls and Environment methods.
- - Add Environment-method versions of AddPreAction(), AddPostAction(),
- Default(), FindFile(), and Local().
+ - Add Environment-method versions of the following global function:
+ AddPreAction(), AddPostAction(), Clean(), Default(), FindFile()
+ and Local().
+
+ - Add the following global functions that correspond to the same-named
+ Environment methods: AlwaysBuild(), Command(), Depends(), Ignore(),
+ Install(), InstallAs(), Precious(), SideEffect() and SourceCode().
+
+ - Rearrange the man page to show construction environment methods and
+ global functions in the same list, and to explain the difference.
From Bram Moolenaar:
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 074fd3c..f2cc03f 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -50,6 +50,9 @@ import SCons.Errors
import SCons.Node
import SCons.Node.FS
import SCons.Platform
+import SCons.Sig
+import SCons.Sig.MD5
+import SCons.Sig.TimeStamp
import SCons.Tool
import SCons.Util
import SCons.Warnings
@@ -60,6 +63,8 @@ class _Null:
_null = _Null
DefaultTargets = None
+CleanTargets = {}
+SigModule = None
def installFunc(target, source, env):
"""Install a source file into a target using the function specified
@@ -603,6 +608,28 @@ class Environment:
tlist = tlist[0]
return tlist
+ def Clean(self, target, files):
+ global CleanTargets
+
+ if not isinstance(target, SCons.Node.Node):
+ target = self.subst(target)
+ target = SCons.Node.FS.default_fs.Entry(target, create=1)
+
+ if not SCons.Util.is_List(files):
+ files = [files]
+
+ nodes = []
+ for f in files:
+ if isinstance(f, SCons.Node.Node):
+ nodes.append(f)
+ else:
+ nodes.extend(self.arg2nodes(f, self.fs.Entry))
+
+ try:
+ CleanTargets[target].extend(nodes)
+ except KeyError:
+ CleanTargets[target] = nodes
+
def Command(self, target, source, action):
"""Builds the supplied target files from the supplied
source files using the supplied action. Action may
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index db05351..1dc47e2 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -1051,6 +1051,32 @@ class EnvironmentTestCase(unittest.TestCase):
assert t[4].path == 'bbb'
assert t[4].always_build
+ def test_Clean(self):
+ """Test the Clean() method"""
+ env = Environment(FOO = 'fff', BAR = 'bbb')
+
+ CT = SCons.Environment.CleanTargets
+
+ foo = env.arg2nodes('foo')[0]
+ fff = env.arg2nodes('fff')[0]
+
+ t = env.Clean('foo', 'aaa')
+ l = map(str, CT[foo])
+ assert l == ['aaa'], l
+
+ t = env.Clean(foo, ['$BAR', 'ccc'])
+ l = map(str, CT[foo])
+ assert l == ['aaa', 'bbb', 'ccc'], l
+
+ eee = env.arg2nodes('eee')[0]
+
+ t = env.Clean('$FOO', 'ddd')
+ l = map(str, CT[fff])
+ assert l == ['ddd'], l
+ t = env.Clean(fff, [eee, 'fff'])
+ l = map(str, CT[fff])
+ assert l == ['ddd', 'eee', 'fff'], l
+
def test_Command(self):
"""Test the Command() method."""
env = Environment()
diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
index 276ff4e..b79c34a 100644
--- a/src/engine/SCons/Script/SConscript.py
+++ b/src/engine/SCons/Script/SConscript.py
@@ -56,7 +56,6 @@ import traceback
def do_nothing(text): pass
HelpFunction = do_nothing
-clean_targets = {}
arguments = {}
launch_dir = os.path.abspath(os.curdir)
@@ -467,25 +466,6 @@ def SetJobs(num):
"\tuse SetOption('num_jobs', num) instead.")
SetOption('num_jobs', num)
-def Clean(target, files):
- if not isinstance(target, SCons.Node.Node):
- target = SCons.Node.FS.default_fs.Entry(target, create=1)
-
- if not SCons.Util.is_List(files):
- files = [files]
-
- nodes = []
- for f in files:
- if isinstance(f, SCons.Node.Node):
- nodes.append(f)
- else:
- nodes.extend(SCons.Node.arg2nodes(f, SCons.Node.FS.default_fs.Entry))
-
- try:
- clean_targets[target].extend(nodes)
- except KeyError:
- clean_targets[target] = nodes
-
def Exit(value=0):
sys.exit(value)
@@ -522,7 +502,6 @@ def BuildDefaultGlobals():
globals['BuildDir'] = BuildDir
globals['Builder'] = SCons.Builder.Builder
globals['CacheDir'] = SCons.Node.FS.default_fs.CacheDir
- globals['Clean'] = Clean
globals['Configure'] = SCons.SConf.SConf
globals['CScan'] = SCons.Defaults.CScan
globals['DefaultEnvironment'] = SCons.Defaults.DefaultEnvironment
@@ -574,9 +553,19 @@ def BuildDefaultGlobals():
EnvironmentMethods = [
'AddPostAction',
'AddPreAction',
+ 'AlwaysBuild',
+ 'Clean',
+ 'Command',
'Default',
+ 'Depends',
'FindFile',
+ 'Ignore',
+ 'Install',
+ 'InstallAs',
'Local',
+ 'Precious',
+ 'SideEffect',
+ 'SourceCode',
]
for name in EnvironmentMethods:
diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py
index 3ab4ed0..34b112f 100644
--- a/src/engine/SCons/Script/__init__.py
+++ b/src/engine/SCons/Script/__init__.py
@@ -181,8 +181,8 @@ class CleanTask(SCons.Taskmaster.Task):
if (self.targets[0].has_builder() or self.targets[0].side_effect) \
and not os.path.isdir(str(self.targets[0])):
display("Removed " + str(self.targets[0]))
- if SCons.Script.SConscript.clean_targets.has_key(self.targets[0]):
- files = SCons.Script.SConscript.clean_targets[self.targets[0]]
+ if SCons.Environment.CleanTargets.has_key(self.targets[0]):
+ files = SCons.Environment.CleanTargets[self.targets[0]]
for f in files:
SCons.Util.fs_delete(str(f), 0)
@@ -196,8 +196,8 @@ class CleanTask(SCons.Taskmaster.Task):
else:
if removed:
display("Removed " + str(t))
- if SCons.Script.SConscript.clean_targets.has_key(self.targets[0]):
- files = SCons.Script.SConscript.clean_targets[self.targets[0]]
+ if SCons.Environment.CleanTargets.has_key(self.targets[0]):
+ files = SCons.Environment.CleanTargets[self.targets[0]]
for f in files:
SCons.Util.fs_delete(str(f))