summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2002-07-08 22:40:59 (GMT)
committerSteven Knight <knight@baldmt.com>2002-07-08 22:40:59 (GMT)
commita745dc65b8ccbc9b843a992b97218d5551ef644c (patch)
tree9631b59c6b5f819597e37e05bc3374f5d49998b4 /src
parent5a10db0b98e2f10cfe365e315a8d633aa31edefb (diff)
downloadSCons-a745dc65b8ccbc9b843a992b97218d5551ef644c.zip
SCons-a745dc65b8ccbc9b843a992b97218d5551ef644c.tar.gz
SCons-a745dc65b8ccbc9b843a992b97218d5551ef644c.tar.bz2
Add a TAR Builder.
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt2
-rw-r--r--src/engine/MANIFEST.in1
-rw-r--r--src/engine/SCons/Node/FS.py20
-rw-r--r--src/engine/SCons/Node/FSTests.py22
-rw-r--r--src/engine/SCons/Platform/cygwin.py2
-rw-r--r--src/engine/SCons/Platform/posix.py2
-rw-r--r--src/engine/SCons/Platform/win32.py2
-rw-r--r--src/engine/SCons/Tool/tar.py55
8 files changed, 102 insertions, 4 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 6779ddd..69e7063 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -75,6 +75,8 @@ RELEASE 0.08 -
which case the target(s) are deduced from the source file(s) and the
Builder's specified suffix.
+ - Add a tar archive builder.
+
From Jeff Petkau:
- Fix --implicit-cache if the scanner returns an empty list.
diff --git a/src/engine/MANIFEST.in b/src/engine/MANIFEST.in
index 9a05787..0f81470 100644
--- a/src/engine/MANIFEST.in
+++ b/src/engine/MANIFEST.in
@@ -41,6 +41,7 @@ SCons/Tool/msvc.py
SCons/Tool/nasm.py
SCons/Tool/pdflatex.py
SCons/Tool/pdftex.py
+SCons/Tool/tar.py
SCons/Tool/tex.py
SCons/Tool/yacc.py
SCons/Util.py
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py
index 7c30333..a047903 100644
--- a/src/engine/SCons/Node/FS.py
+++ b/src/engine/SCons/Node/FS.py
@@ -355,6 +355,22 @@ class Entry(SCons.Node.Node):
else:
return self.srcpath
+ def get_contents(self):
+ """Fetch the contents of the entry.
+
+ Since this should return the real contents from the file
+ system, we check to see into what sort of subclass we should
+ morph this Entry."""
+ if os.path.isfile(self.abspath):
+ self.__class__ = File
+ self._morph()
+ return File.get_contents(self)
+ if os.path.isdir(self.abspath):
+ self.__class__ = Dir
+ self._morph()
+ return Dir.get_contents(self)
+ raise AttributeError
+
def exists(self):
return os.path.exists(str(self))
@@ -477,6 +493,10 @@ class Dir(Entry):
"""A directory has no signature."""
pass
+ def get_contents(self):
+ """Return a fixed "contents" value of a directory."""
+ return ''
+
def current(self):
"""If all of our children were up-to-date, then this
directory was up-to-date, too."""
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py
index ee82563..6151f2d 100644
--- a/src/engine/SCons/Node/FSTests.py
+++ b/src/engine/SCons/Node/FSTests.py
@@ -479,7 +479,27 @@ class FSTestCase(unittest.TestCase):
#XXX test root()
- #XXX test get_contents()
+ # test Entry.get_contents()
+ e = fs.Entry('does_not_exist')
+ exc_caught = 0
+ try:
+ e.get_contents()
+ except AttributeError:
+ exc_caught = 1
+ assert exc_caught, "Should have caught an AttributError"
+
+ test.write("file", "file\n")
+ e = fs.Entry('file')
+ c = e.get_contents()
+ assert c == "file\n", c
+ assert e.__class__ == SCons.Node.FS.File
+ test.unlink("file")
+
+ test.subdir("dir")
+ e = fs.Entry('dir')
+ c = e.get_contents()
+ assert c == "", c
+ assert e.__class__ == SCons.Node.FS.Dir
#XXX test get_timestamp()
diff --git a/src/engine/SCons/Platform/cygwin.py b/src/engine/SCons/Platform/cygwin.py
index 8858dd1..b5a73f6 100644
--- a/src/engine/SCons/Platform/cygwin.py
+++ b/src/engine/SCons/Platform/cygwin.py
@@ -44,7 +44,7 @@ def tool_list():
return ['ar', 'dvipdf', 'dvips',
'g++', 'g77', 'gcc', 'gnulink',
'latex', 'lex',
- 'pdflatex', 'pdftex', 'tex', 'yacc',
+ 'pdflatex', 'pdftex', 'tar', 'tex', 'yacc',
assembler]
def generate(env):
diff --git a/src/engine/SCons/Platform/posix.py b/src/engine/SCons/Platform/posix.py
index 79adebd..a45dce1 100644
--- a/src/engine/SCons/Platform/posix.py
+++ b/src/engine/SCons/Platform/posix.py
@@ -44,7 +44,7 @@ def tool_list():
return ['ar', 'dvipdf', 'dvips',
'g++', 'g77', 'gcc', 'gnulink',
'latex', 'lex',
- 'pdflatex', 'pdftex', 'tex', 'yacc',
+ 'pdflatex', 'pdftex', 'tar', 'tex', 'yacc',
assembler]
def generate(env):
diff --git a/src/engine/SCons/Platform/win32.py b/src/engine/SCons/Platform/win32.py
index 957aead..121fed6 100644
--- a/src/engine/SCons/Platform/win32.py
+++ b/src/engine/SCons/Platform/win32.py
@@ -43,7 +43,7 @@ def tool_list():
assembler = 'masm'
return ['dvipdf', 'dvips', 'g77',
'latex', 'lex', 'lib', 'mslink', 'msvc',
- 'pdflatex', 'pdftex', 'tex', 'yacc',
+ 'pdflatex', 'pdftex', 'tar', 'tex', 'yacc',
assembler]
def generate(env):
diff --git a/src/engine/SCons/Tool/tar.py b/src/engine/SCons/Tool/tar.py
new file mode 100644
index 0000000..fff9dff
--- /dev/null
+++ b/src/engine/SCons/Tool/tar.py
@@ -0,0 +1,55 @@
+"""SCons.Tool.tar
+
+Tool-specific initialization for tar.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+#
+# Copyright (c) 2001, 2002 Steven Knight
+#
+# 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.Builder
+import SCons.Node.FS
+
+TarBuilder = SCons.Builder.Builder(action = '$TARCOM',
+ source_factory = SCons.Node.FS.default_fs.Entry,
+ suffix = '$TARSUFFIX',
+ multi = 1)
+
+def generate(env, platform):
+ """Add Builders and construction variables for tar to an Environment."""
+ try:
+ bld = env['BUILDERS']['Tar']
+ except KeyError:
+ bld = TarBuilder
+ env['BUILDERS']['Tar'] = bld
+
+ env['TAR'] = 'tar'
+ env['TARFLAGS'] = '-c'
+ env['TARCOM'] = '$TAR $TARFLAGS -f $TARGET $SOURCES'
+ env['TARSUFFIX'] = '.tar'