summaryrefslogtreecommitdiffstats
path: root/src/engine
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2003-05-01 12:19:09 (GMT)
committerSteven Knight <knight@baldmt.com>2003-05-01 12:19:09 (GMT)
commit8adc0857c2ebd976314a29ca338d6ce82ece251f (patch)
tree8b3f5d2af4963ac489d69aa8f7c23ac431021762 /src/engine
parent3387eab42442c7fe7ed0064de5b939497cc6df1b (diff)
downloadSCons-8adc0857c2ebd976314a29ca338d6ce82ece251f.zip
SCons-8adc0857c2ebd976314a29ca338d6ce82ece251f.tar.gz
SCons-8adc0857c2ebd976314a29ca338d6ce82ece251f.tar.bz2
Add Python Value Nodes. (Chad Austin)
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/MANIFEST.in1
-rw-r--r--src/engine/SCons/Node/Python.py76
-rw-r--r--src/engine/SCons/Node/PythonTests.py52
-rw-r--r--src/engine/SCons/Script/SConscript.py2
4 files changed, 131 insertions, 0 deletions
diff --git a/src/engine/MANIFEST.in b/src/engine/MANIFEST.in
index ca713ff..c028989 100644
--- a/src/engine/MANIFEST.in
+++ b/src/engine/MANIFEST.in
@@ -9,6 +9,7 @@ SCons/exitfuncs.py
SCons/Node/__init__.py
SCons/Node/Alias.py
SCons/Node/FS.py
+SCons/Node/Python.py
SCons/Optik/__init__.py
SCons/Optik/errors.py
SCons/Optik/option.py
diff --git a/src/engine/SCons/Node/Python.py b/src/engine/SCons/Node/Python.py
new file mode 100644
index 0000000..9348b83
--- /dev/null
+++ b/src/engine/SCons/Node/Python.py
@@ -0,0 +1,76 @@
+"""scons.Node.Python
+
+Python nodes.
+
+"""
+
+#
+# __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__"
+
+import SCons.Node
+
+class Value(SCons.Node.Node):
+ """A class for Python variables, typically passed on the command line
+ or generated by a script, but not from a file or some other source.
+ """
+ def __init__(self, value):
+ SCons.Node.Node.__init__(self)
+ self.value = value
+
+ def __str__(self):
+ return repr(self.value)
+
+ def build(self):
+ """A "builder" for Values."""
+ pass
+
+ def current(self, calc):
+ """If all of our children were up-to-date, then this
+ Value was up-to-date, too."""
+ # Allow the children to calculate their signatures.
+ calc.bsig(self)
+ state = 0
+ for kid in self.children(None):
+ s = kid.get_state()
+ if s and (not state or s > state):
+ state = s
+ if state == 0 or state == SCons.Node.up_to_date:
+ return 1
+ else:
+ return 0
+
+ def is_under(self, dir):
+ # Make Value nodes get built regardless of
+ # what directory scons was run from. Value nodes
+ # are outside the filesystem:
+ return 1
+
+ def get_contents(self):
+ """The contents of a Value are the concatenation
+ of all the contents of its sources with the node's value itself."""
+ contents = str(self.value)
+ for kid in self.children(None):
+ contents = contents + kid.get_contents()
+ return contents
diff --git a/src/engine/SCons/Node/PythonTests.py b/src/engine/SCons/Node/PythonTests.py
new file mode 100644
index 0000000..0befa25
--- /dev/null
+++ b/src/engine/SCons/Node/PythonTests.py
@@ -0,0 +1,52 @@
+#
+# __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__"
+
+import sys
+import unittest
+
+import SCons.Errors
+import SCons.Node.Python
+
+class ValueTestCase(unittest.TestCase):
+
+ def test_Value(self):
+ """Test creating a Value() object
+ """
+ v1 = SCons.Node.Python.Value('a')
+ assert v1.value == 'a', v1.value
+
+ value2 = 'a'
+ v2 = SCons.Node.Python.Value(value2)
+ assert v2.value == value2, v2.value
+ assert v2.value is value2, v2.value
+
+ assert not v1 is v2
+ assert v1.value == v2.value
+
+
+if __name__ == "__main__":
+ suite = unittest.makeSuite(ValueTestCase, 'test_')
+ if not unittest.TextTestRunner().run(suite).wasSuccessful():
+ sys.exit(1)
diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
index 6b28b92..af8cc79 100644
--- a/src/engine/SCons/Script/SConscript.py
+++ b/src/engine/SCons/Script/SConscript.py
@@ -37,6 +37,7 @@ import SCons.Environment
import SCons.Errors
import SCons.Node
import SCons.Node.FS
+import SCons.Node.Python
import SCons.Platform
import SCons.SConf
import SCons.Script
@@ -561,5 +562,6 @@ def BuildDefaultGlobals():
globals['StaticObject'] = SCons.Defaults.StaticObject
globals['TargetSignatures'] = TargetSignatures
globals['Tool'] = SCons.Tool.Tool
+ globals['Value'] = SCons.Node.Python.Value
globals['WhereIs'] = SCons.Util.WhereIs
return globals