summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CHANGES.txt2
-rw-r--r--src/engine/MANIFEST.in3
-rw-r--r--src/engine/SCons/Tool/__init__.py7
-rw-r--r--src/engine/SCons/Tool/tar.py2
-rw-r--r--src/engine/SCons/Tool/zip.py88
5 files changed, 97 insertions, 5 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index d83561b..97e60b6 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -35,6 +35,8 @@ RELEASE 0.12 - XXX
- Make TARGET, TARGETS, SOURCE and SOURCES reserved variable names and
warn if the user tries to set them in a construction environment.
+ - Add support for Tar and Zip files.
+
RELEASE 0.11 - Tue, 11 Feb 2003 05:24:33 -0600
diff --git a/src/engine/MANIFEST.in b/src/engine/MANIFEST.in
index 592e676..0759d8c 100644
--- a/src/engine/MANIFEST.in
+++ b/src/engine/MANIFEST.in
@@ -55,9 +55,9 @@ SCons/Tool/mslib.py
SCons/Tool/mslink.py
SCons/Tool/msvc.py
SCons/Tool/nasm.py
-SCons/Tool/Perforce.py
SCons/Tool/pdflatex.py
SCons/Tool/pdftex.py
+SCons/Tool/Perforce.py
SCons/Tool/PharLapCommon.py
SCons/Tool/RCS.py
SCons/Tool/SCCS.py
@@ -70,5 +70,6 @@ SCons/Tool/Subversion.py
SCons/Tool/tar.py
SCons/Tool/tex.py
SCons/Tool/yacc.py
+SCons/Tool/zip.py
SCons/Util.py
SCons/Warnings.py
diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py
index b6b7f9e..a5db5bf 100644
--- a/src/engine/SCons/Tool/__init__.py
+++ b/src/engine/SCons/Tool/__init__.py
@@ -202,10 +202,11 @@ def tool_list(platform, env):
other_tools = FindAllTools(['BitKeeper', 'CVS',
'dvipdf', 'dvips',
- 'latex', 'lex', 'Perforce',
- 'pdflatex', 'pdftex',
+ 'latex', 'lex',
+ 'pdflatex', 'pdftex', 'Perforce',
'RCS', 'SCCS', 'Subversion',
- 'tar', 'tex', 'yacc'], env)
+ 'tar', 'tex', 'yacc', 'zip'],
+ env)
tools = ([linker, c_compiler, cxx_compiler,
fortran_compiler, assembler, ar]
diff --git a/src/engine/SCons/Tool/tar.py b/src/engine/SCons/Tool/tar.py
index 460eec6..6692d57 100644
--- a/src/engine/SCons/Tool/tar.py
+++ b/src/engine/SCons/Tool/tar.py
@@ -37,7 +37,7 @@ import SCons.Builder
import SCons.Node.FS
import SCons.Util
-tars = ['gtar', 'tar']
+tars = ['tar', 'gtar']
TarBuilder = SCons.Builder.Builder(action = '$TARCOM',
source_factory = SCons.Node.FS.default_fs.Entry,
diff --git a/src/engine/SCons/Tool/zip.py b/src/engine/SCons/Tool/zip.py
new file mode 100644
index 0000000..f4a8a28
--- /dev/null
+++ b/src/engine/SCons/Tool/zip.py
@@ -0,0 +1,88 @@
+"""SCons.Tool.zip
+
+Tool-specific initialization for zip.
+
+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__
+#
+# 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 os.path
+
+import SCons.Builder
+import SCons.Node.FS
+import SCons.Util
+
+try:
+ import zipfile
+
+ def zip(target, source, env):
+ def visit(arg, dirname, names):
+ for name in names:
+ path = os.path.join(dirname, name)
+ if os.path.isfile(path):
+ arg.write(path)
+ zf = zipfile.ZipFile(str(target[0]), 'w')
+ for s in source:
+ if os.path.isdir(str(s)):
+ os.path.walk(str(s), visit, zf)
+ else:
+ zf.write(str(s))
+ zf.close()
+
+ internal_zip = 1
+
+except ImportError:
+ zip = "$ZIP $ZIPFLAGS $( ${TARGET.abspath} $) $SOURCES"
+
+ internal_zip = 0
+
+zipAction = SCons.Action.Action(zip)
+
+ZipBuilder = SCons.Builder.Builder(action = '$ZIPCOM',
+ source_factory = SCons.Node.FS.default_fs.Entry,
+ suffix = '$ZIPSUFFIX',
+ multi = 1)
+
+
+def generate(env, platform):
+ """Add Builders and construction variables for zip to an Environment."""
+ try:
+ bld = env['BUILDERS']['Zip']
+ except KeyError:
+ bld = ZipBuilder
+ env['BUILDERS']['Zip'] = bld
+
+ env['ZIP'] = 'zip'
+ env['ZIPFLAGS'] = ''
+ env['ZIPCOM'] = zipAction
+ env['ZIPSUFFIX'] = '.zip'
+
+def exists(env):
+ return internal_zip or env.Detect('zip')