diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CHANGES.txt | 2 | ||||
-rw-r--r-- | src/engine/MANIFEST.in | 3 | ||||
-rw-r--r-- | src/engine/SCons/Tool/__init__.py | 7 | ||||
-rw-r--r-- | src/engine/SCons/Tool/tar.py | 2 | ||||
-rw-r--r-- | src/engine/SCons/Tool/zip.py | 88 |
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') |