1. eyan
  2. scons_eyan

Commits

Steven Knight  committed bebf4d7

Merged revisions 1757-1765 via svnmerge from
http://scons.tigris.org/svn/scons/branches/core

........
r1759 | stevenknight | 2007-01-07 09:36:37 -0600 (Sun, 07 Jan 2007) | 1 line

0.96.D541 - Update the Copyright year string to include 2007. Automate updating the month+year string in man page title headers. Fix hard-coded __revision__ strings that crept into some older tests.
........
r1765 | stevenknight | 2007-01-08 11:28:02 -0600 (Mon, 08 Jan 2007) | 1 line

0.96.D543 - Update development line for 0.96.94.
........

  • Participants
  • Parent commits bd46a6d
  • Branches default
  • Tags 0.96.94

Comments (0)

Files changed (10)

File HOWTO/release.txt

View file
 
             download.php:   new version number
 
-            versions.php:   add new version number do $docversions[],
-                            shift index numbers :-(
+            includes/versions.php:
+                            update $stablerelease and/or $latestrelease
+                            add new version number do $docversions[],
+                            SHIFT $docversions[] INDEX NUMBERS :-(
 
             index.php:      announcement on the home page
                             remove out-of-date announcements
 
     Add news item to the SourceForge project page
 
+        Pull down "Project => News"
+
+        Click "Submit"
+
+        Fill in the "Subject:" box
+
+        Cut-and-paste the announcement text into the "Details:" box
+
+        Click "submit"
+
+
+
+    Add news item to the tigris.org project page
+
+        Click "Announcements"
+
+        Click "Add new announcement"
+
+        Double-check the date (probably already set)
+
+        Fill in the "Headline" box
+
+        Fill in the "Body" box (probably short)
+
+        Click "Add new announcement"
+
 
 
     Announce to the following mailing lists (template below):

File QMTest/TestSCons.py

View file
 # to what we expect.  (If we derived the version number from the same
 # data driving the build we might miss errors if the logic breaks.)
 
-SConsVersion = '0.96.93'
+SConsVersion = '0.96.94'
 
 __all__.extend([ 'TestSCons',
                  'python',

File README

View file
     --  (Optional.)  Install from a pre-packaged SCons package that
         does not require distutils:
 
-            Red Hat Linux       scons-0.96.93.noarch.rpm
+            Red Hat Linux       scons-0.96.94.noarch.rpm
 
-            Debian GNU/Linux    scons_0.96.93_all.deb
+            Debian GNU/Linux    scons_0.96.94_all.deb
                                 (or use apt-get)
 
-            Windows             scons-0.96.93.win32.exe
+            Windows             scons-0.96.94.win32.exe
 
     --  (Recommended.)  Download the latest distutils package from the
         following URL:
 
 By default, the above commands will do the following:
 
-    --  Install the version-numbered "scons-0.96.93" and "sconsign-0.96.93"
+    --  Install the version-numbered "scons-0.96.94" and "sconsign-0.96.94"
         scripts in the default system script directory (/usr/bin or
         C:\Python*\Scripts, for example).  This can be disabled by
         specifying the "--no-version-script" option on the command
         if you want to install and experiment with a new version before
         making it the default on your system.  On UNIX or Linux systems,
         you can have the "scons" and "sconsign" scripts be hard links or
-        symbolic links to the "scons-0.96.93" and "sconsign-0.96.93" scripts
+        symbolic links to the "scons-0.96.94" and "sconsign-0.96.94" scripts
         by specifying the "--hardlink-scons" or "--symlink-scons"
         options on the command line.
 
-    --  Install "scons-0.96.93.bat" and "scons.bat" wrapper scripts in the
+    --  Install "scons-0.96.94.bat" and "scons.bat" wrapper scripts in the
         Python prefix directory on Windows (C:\Python*, for example).
         This can be disabled by specifying the "--no-install-bat" option
         on the command line.  On UNIX or Linux systems, the
-        "--install-bat" option may be specified to have "scons-0.96.93.bat"
+        "--install-bat" option may be specified to have "scons-0.96.94.bat"
         and "scons.bat" files installed in the default system script
         directory, which is useful if you want to install SCons in a
         shared file system directory that can be used to execute SCons
 
     --  Install the SCons build engine (a Python module) in an
         appropriate version-numbered SCons library directory
-        (/usr/lib/scons-0.96.93 or C:\Python*\scons-0.96.93, for example).
+        (/usr/lib/scons-0.96.94 or C:\Python*\scons-0.96.94, for example).
         See below for more options related to installing the build
         engine library.
 
         $ scons
 
 If you don't have SCons version 0.96.93 later already installed on your
-system, you can build this version of SCons with itself with a little more
+system, you can use the supplied bootstrap.py script:
+
+        $ python bootstrap.py build/scons
+
+The bootstrap.py keeps the src/ subdirectory free of compiled Python
+(*.pyc or *.pyo) files by copying the necessary SCons files to a local
+bootstrap/ subdirectory and executing it from there.
+
+You can also build this version of SCons by hand with a little more
 typing.  On UNIX or Linux (using sh or a derivative like bash or ksh):
 
         $ export SCONS_LIB_DIR=`pwd`/src/engine
 Depending on the utilities installed on your system, any or all of the
 following packages will be built:
 
-        build/dist/scons-0.96.93-1.noarch.rpm
-        build/dist/scons-0.96.93-1.src.rpm
-        build/dist/scons-0.96.93.linux-i686.tar.gz
-        build/dist/scons-0.96.93.tar.gz
-        build/dist/scons-0.96.93.win32.exe
-        build/dist/scons-0.96.93.zip
-        build/dist/scons-doc-0.96.93.tar.gz
-        build/dist/scons-local-0.96.93.tar.gz
-        build/dist/scons-local-0.96.93.zip
-        build/dist/scons-src-0.96.93.tar.gz
-        build/dist/scons-src-0.96.93.zip
-        build/dist/scons_0.96.93-1_all.deb
+        build/dist/scons-0.96.94-1.noarch.rpm
+        build/dist/scons-0.96.94-1.src.rpm
+        build/dist/scons-0.96.94.linux-i686.tar.gz
+        build/dist/scons-0.96.94.tar.gz
+        build/dist/scons-0.96.94.win32.exe
+        build/dist/scons-0.96.94.zip
+        build/dist/scons-doc-0.96.94.tar.gz
+        build/dist/scons-local-0.96.94.tar.gz
+        build/dist/scons-local-0.96.94.zip
+        build/dist/scons-src-0.996.94tar.gz
+        build/dist/scons-src-0.96.94.zip
+        build/dist/scons_0.96.94-1_all.deb
 
 The SConstruct file is supposed to be smart enough to avoid trying to
 build packages for which you don't have the proper utilities installed.

File SConstruct

View file
 import time
 
 project = 'scons'
-default_version = '0.96.93'
+default_version = '0.96.94'
 copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
 
 Default('.')

File debian/changelog

View file
-scons (0.96-93) unstable; urgency=low
+scons (0.96-94) unstable; urgency=low
 
   * Pre-release of eighth beta release.
 
- -- Steven Knight <knight@baldmt.com>  Mon, 06 Nov 2006 00:44:11 -0600
+ -- Steven Knight <knight@baldmt.com>  Sun, 07 Jan 2007 18:36:20 -0600
 
 
 scons (0.96-1) unstable; urgency=low

File rpm/scons.spec.in

View file
 %define name scons
-%define version 0.96.93
+%define version 0.96.94
 %define release 1
 
 Summary: an Open Source software construction tool

File src/CHANGES.txt

View file
 
 
 
-RELEASE 0.97 - XXX
+RELEASE 0.96.94 - Sun, 07 Jan 2007 18:36:20 -0600
+
+  NOTE:  This is a pre-release of 0.97 for testing purposes.
+
+  From Anonymous:
+
+  - Allow arbitrary white space after a SWIG %module declaration.
+
+  From Paul:
+
+  - When compiling resources under MinGW, make sure there's a space 
+    between the --include-dir option and its argument.
+
+  From Jay Kint:
+
+  - Alleviate long command line issues on Windows by executing command
+    lines directly via os.spawnv() if the command line doesn't need
+    shell interpretation (has no pipes, redirection, etc.).
+
+  From Walter Franzini:
+
+  - Exclude additional Debian packaging files from the copyright check.
+
+  From Fawad Halim:
+
+  - Handle the conflict between the impending Python 2.6 'as' keyword
+    and our Tool/as.py module name.
+
+  From Steven Knight:
+
+  - Speed up the Node.FS.Dir.rel_path() method used to generate path names
+    that get put into the .sconsign* file(s).
+
+  - Optimize Node.FS.Base.get_suffix() by computing the suffix once, up
+    front, when we set the Node's name.  (Duh...)
+
+  - Reduce the Memoizer's responsibilities to simply counting hits and
+    misses when the --debug=memoizer option is used, not to actually
+    handling the key calculation and memoization itself.  This speeds
+    up some configurations significantly, and should cause no functional
+    differences.
+
+  - Add a new scons-time script with subcommands for generating
+    consistent timing output from SCons configurations, extracting
+    various information from those timings, and displaying them in
+    different formats.
+
+  - Reduce some unnecessary stat() calls from on-disk entry type checks.
+
+  - Fix SideEffect() when used with -j, which was badly broken in 0.96.93.
+
+  - Propagate TypeError exceptions when evaluating construction variable
+    expansions up the stack, so users can see what's going on.
+
+  - When disambiguating a Node.FS.Entry into a Dir or File, don't look
+    in the on-disk source directory until we've confirmed there's no
+    on-disk entry locally and there *is* one in the srcdir.  This avoids
+    creating a phantom Node that can interfere with dependencies on
+    directory contents.
+
+  - Add an AllowSubstExceptions() function that gives the SConscript
+    files control over what exceptions cause a string to expand to ''
+    vs. terminating processing with an error.
+
+  - Allow the f90.py and f95.py Tool modules to compile earlier source
+    source files of earlier Fortran version.
+
+  - Fix storing signatures of files retrieved from CacheDir() so they're
+    correctly identified as up-to-date next invocation.
+
+  - Make sure lists of computed source suffixes cached by Builder objects
+    don't persist across changes to the list of source Builders (so the
+    addition of suffixes like .ui by the qt.py Tool module take effect).
+
+  - Enhance the bootstrap.py script to allow it to be used to execute
+    SCons more easily from a checked-out source tree.
+
+  From Ben Leslie:
+
+  - Fix post-Memoizer value caching misspellings in Node.FS._doLookup().
+
+  From Rob Managan, Dmitry Mikhin and Joel B. Mohler:
+
+  - Handle TeX/LaTeX files in subdirectories by changing directory
+    before invoking TeX/LaTeX.
+
+  - Scan LaTeX files for \bibliography lines.
+
+  - Support multiple file names in a "\bibliography{file1,file2}" string.
+
+  - Handle TeX warnings about undefined citations.
+
+  - Support re-running LaTeX if necessary due to a Table of Contents.
+
+  From Dmitry Mikhin:
+
+  - Return LaTeX if "Rerun to get citations correct" shows up on the next
+    line after the "Warning:" string.
+
+  From Gary Oberbrunner:
+
+  - Add #include lines to fix portability issues in two tests.
+
+  - Eliminate some unnecessary os.path.normpath() calls.
+
+  - Add a $CFLAGS variable for C-specific options, leaving $CCFLAGS
+    for options common to C and C++.
+
+  From Tom Parker:
+
+  - Have the error message print the missing file that Qt can't find.
+
+  From John Pye:
+
+  - Fix env.MergeFlags() appending to construction variable value of None.
+
+  From Steve Robbins:
+
+  - Fix the "sconsign" script when the .sconsign.dblite file is explicitly
+    specified on the command line (and not intuited from the old way of
+    calling it with just ".sconsign").
+
+  From Jose Pablo Ezequiel "Pupeno" Fernandez Silva:
+
+  - Give the 'lex' tool knowledge of the additional target files produced
+    by the flex "--header-file=" and "--tables-file=" options.
+
+  - Give the 'yacc' tool knowledge of the additional target files produced
+    by the bison "-g", "--defines=" and "--graph=" options.
+
+  - Generate intermediate files with Objective C file suffixes (.m) when
+    the lex and yacc source files have appropriate suffixes (.lm and .ym).
+
+  From Sohail Somain:
+
+  - Have the mslink.py Tool only look for a 'link' executable on Windows
+    systems.
+
+  From Vaclav Smilauer:
+
+  - Add support for a "srcdir" keyword argument when calling a Builder,
+    which will add a srcdir prefix to all non-relative string sources.
+
+  From Jonathan Ultis:
+
+  - Allow Options converters to take the construction environment as
+    an optional argument.
+
+
+
+RELEASE 0.96.93 - Mon, 06 Nov 2006 00:44:11 -0600
+
+  NOTE:  This is a pre-release of 0.97 for testing purposes.
 
   From Anonymous:
 

File src/setup.py

View file
 import string
 import sys
 
-Version = "0.96.93"
+Version = "0.96.94"
+
+man_pages = [
+    'scons.1',
+    'sconsign.1',
+    'scons-time.1',
+]
 
 man_pages = [
     'scons.1',

File src/test_copyrights.py

-#!/usr/bin/env python
-#
-# __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__"
-
-"""
-Verify that we have proper strings like Copyright notices on all the
-right files in our distributions.
-
-Note that this is a source file and packaging test, not a functional test,
-so the name of this script doesn't end in *Tests.py.
-"""
-
-import fnmatch
-import os
-import os.path
-import re
-import string
-
-import TestCmd
-import TestSCons
-
-# Use TestCmd, not TestSCons, so we don't chdir to a temporary directory.
-test = TestCmd.TestCmd()
-
-scons_version = TestSCons.SConsVersion
-
-def build_path(*args):
-    return apply(os.path.join, ('build',)+args)
-
-build_scons     = build_path('scons')
-build_local     = build_path('scons-local', 'scons-local-'+scons_version)
-build_src       = build_path('scons-src')
-
-class Checker:
-    def __init__(self, directory, search_list = [], remove_list=[]):
-        self.directory = directory
-        self.search_list = search_list
-        self.remove_dict = {}
-        for r in remove_list:
-            self.remove_dict[os.path.join(directory, r)] = 1
-
-    def directory_exists(self):
-        return os.path.exists(self.directory)
-
-    def remove_path(self, path):
-        return self.remove_dict.get(path)
-
-    def search_this(self, path):
-        if self.search_list:
-            for pattern in self.search_list:
-                if fnmatch.fnmatch(path, pattern):
-                    return 1
-            return None
-        else:
-            return os.path.isfile(path)
-
-    def visit(self, result, dirname, names):
-        make_path_tuple = lambda n, d=dirname: (n, os.path.join(d, n))
-        for name, path in map(make_path_tuple, names):
-            if self.remove_path(path):
-                names.remove(name)
-            elif self.search_this(path):
-                body = open(path, 'r').read()
-                for expr in self.expressions:
-                    if not expr.search(body):
-                        msg = '%s: missing %s' % (path, repr(expr.pattern))
-                        result.append(msg)
-
-    def find_missing(self):
-        result = []
-        os.path.walk(self.directory, self.visit, result)
-        return result
-
-class CheckUnexpandedStrings(Checker):
-    expressions = [
-        re.compile('__COPYRIGHT__'),
-        re.compile('__FILE__ __REVISION__ __DATE__ __DEVELOPER__'),
-    ]
-    def must_be_built(self):
-        return None
-
-class CheckExpandedCopyright(Checker):
-    expressions = [
-        re.compile('Copyright.*The SCons Foundation'),
-    ]
-    def must_be_built(self):
-        return 1
-
-check_list = [
-
-    CheckUnexpandedStrings(
-        'src',
-        search_list = [ '*.py' ],
-        remove_list = [
-            'engine/SCons/Conftest.py',
-            'engine/SCons/dblite.py',
-            'engine/SCons/Optik',
-        ],
-    ),
-
-    CheckUnexpandedStrings(
-        'test',
-        search_list = [ '*.py' ],
-    ),
-
-    CheckExpandedCopyright(
-        build_scons,
-        remove_list = [
-            'build',
-            'build-stamp',
-            'configure-stamp',
-            'debian',
-            'dist',
-            'engine/SCons/Conftest.py',
-            'engine/SCons/dblite.py',
-            'engine/SCons/Optik',
-            'MANIFEST',
-            'os_spawnv_fix.diff',
-            'setup.cfg',
-        ],
-    ),
-
-    CheckExpandedCopyright(
-        build_local,
-        remove_list = [
-            'SCons/Conftest.py',
-            'SCons/dblite.py',
-            'SCons/Optik',
-        ],
-    ),
-
-    CheckExpandedCopyright(
-        build_src,
-        remove_list = [
-            'bin',
-            'config',
-            'debian',
-            'doc/design',
-            'doc/MANIFEST',
-            'doc/python10',
-            'doc/reference',
-            'doc/man/MANIFEST',
-            'doc/user/cons.pl',
-            'doc/user/MANIFEST',
-            'doc/user/SCons-win32-install-1.jpg',
-            'doc/user/SCons-win32-install-2.jpg',
-            'doc/user/SCons-win32-install-3.jpg',
-            'doc/user/SCons-win32-install-4.jpg',
-            'gentoo',
-            'QMTest/classes.qmc',
-            'QMTest/configuration',
-            'QMTest/TestCmd.py',
-            'QMTest/TestCommon.py',
-            'QMTest/unittest.py',
-            'src/os_spawnv_fix.diff',
-            'src/MANIFEST.in',
-            'src/setup.cfg',
-            'src/engine/MANIFEST.in',
-            'src/engine/MANIFEST-xml.in',
-            'src/engine/setup.cfg',
-            'src/engine/SCons/Conftest.py',
-            'src/engine/SCons/dblite.py',
-            'src/engine/SCons/Optik',
-            'src/script/MANIFEST.in',
-            'src/script/setup.cfg',
-        ],
-    ),
-
-]
-
-missing_strings = []
-not_built = []
-
-for collector in check_list:
-    if collector.directory_exists():
-        missing_strings.extend(collector.find_missing())
-    elif collector.must_be_built():
-        not_built.append(collector.directory)
-
-if missing_strings:
-    print "Found the following files with missing strings:"
-    print "\t" + string.join(missing_strings, "\n\t")
-    test.fail_test(1)
-
-if not_built:
-    print "Cannot check all strings, the following have apparently not been built:"
-    print "\t" + string.join(not_built, "\n\t")
-    test.no_result(1)
-
-test.pass_test()

File src/test_strings.py

View file
+#!/usr/bin/env python
+#
+# __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__"
+
+"""
+Verify that we have proper strings like Copyright notices on all the
+right files in our distributions.
+
+Note that this is a source file and packaging test, not a functional test,
+so the name of this script doesn't end in *Tests.py.
+"""
+
+import fnmatch
+import os
+import os.path
+import re
+import string
+
+import TestCmd
+import TestSCons
+
+# Use TestCmd, not TestSCons, so we don't chdir to a temporary directory.
+test = TestCmd.TestCmd()
+
+scons_version = TestSCons.SConsVersion
+
+def build_path(*args):
+    return apply(os.path.join, ('build',)+args)
+
+build_scons     = build_path('scons')
+build_local     = build_path('scons-local', 'scons-local-'+scons_version)
+build_src       = build_path('scons-src')
+
+class Checker:
+    def __init__(self, directory, search_list = [], remove_list=[]):
+        self.directory = directory
+        self.search_list = search_list
+        self.remove_dict = {}
+        for r in remove_list:
+            self.remove_dict[os.path.join(directory, r)] = 1
+
+    def directory_exists(self):
+        return os.path.exists(self.directory)
+
+    def remove_path(self, path):
+        return self.remove_dict.get(path)
+
+    def search_this(self, path):
+        if self.search_list:
+            for pattern in self.search_list:
+                if fnmatch.fnmatch(path, pattern):
+                    return 1
+            return None
+        else:
+            return os.path.isfile(path)
+
+    def visit(self, result, dirname, names):
+        make_path_tuple = lambda n, d=dirname: (n, os.path.join(d, n))
+        for name, path in map(make_path_tuple, names):
+            if self.remove_path(path):
+                names.remove(name)
+            elif self.search_this(path):
+                body = open(path, 'r').read()
+                for expr in self.expressions:
+                    if not expr.search(body):
+                        msg = '%s: missing %s' % (path, repr(expr.pattern))
+                        result.append(msg)
+
+    def find_missing(self):
+        result = []
+        os.path.walk(self.directory, self.visit, result)
+        return result
+
+class CheckUnexpandedStrings(Checker):
+    expressions = [
+        re.compile('__COPYRIGHT__'),
+        re.compile('__FILE__ __REVISION__ __DATE__ __DEVELOPER__'),
+    ]
+    def must_be_built(self):
+        return None
+
+class CheckExpandedCopyright(Checker):
+    expressions = [
+        re.compile('Copyright.*The SCons Foundation'),
+    ]
+    def must_be_built(self):
+        return 1
+
+check_list = [
+
+    CheckUnexpandedStrings(
+        'src',
+        search_list = [ '*.py' ],
+        remove_list = [
+            'engine/SCons/Conftest.py',
+            'engine/SCons/dblite.py',
+            'engine/SCons/Optik',
+        ],
+    ),
+
+    CheckUnexpandedStrings(
+        'test',
+        search_list = [ '*.py' ],
+    ),
+
+    CheckExpandedCopyright(
+        build_scons,
+        remove_list = [
+            'build',
+            'build-stamp',
+            'configure-stamp',
+            'debian',
+            'dist',
+            'engine/SCons/Conftest.py',
+            'engine/SCons/dblite.py',
+            'engine/SCons/Optik',
+            'MANIFEST',
+            'os_spawnv_fix.diff',
+            'setup.cfg',
+        ],
+    ),
+
+    CheckExpandedCopyright(
+        build_local,
+        remove_list = [
+            'SCons/Conftest.py',
+            'SCons/dblite.py',
+            'SCons/Optik',
+        ],
+    ),
+
+    CheckExpandedCopyright(
+        build_src,
+        remove_list = [
+            'bin',
+            'config',
+            'debian',
+            'doc/design',
+            'doc/MANIFEST',
+            'doc/python10',
+            'doc/reference',
+            'doc/man/MANIFEST',
+            'doc/user/cons.pl',
+            'doc/user/MANIFEST',
+            'doc/user/SCons-win32-install-1.jpg',
+            'doc/user/SCons-win32-install-2.jpg',
+            'doc/user/SCons-win32-install-3.jpg',
+            'doc/user/SCons-win32-install-4.jpg',
+            'gentoo',
+            'QMTest/classes.qmc',
+            'QMTest/configuration',
+            'QMTest/TestCmd.py',
+            'QMTest/TestCommon.py',
+            'QMTest/unittest.py',
+            'src/os_spawnv_fix.diff',
+            'src/MANIFEST.in',
+            'src/setup.cfg',
+            'src/engine/MANIFEST.in',
+            'src/engine/MANIFEST-xml.in',
+            'src/engine/setup.cfg',
+            'src/engine/SCons/Conftest.py',
+            'src/engine/SCons/dblite.py',
+            'src/engine/SCons/Optik',
+            'src/script/MANIFEST.in',
+            'src/script/setup.cfg',
+        ],
+    ),
+
+]
+
+missing_strings = []
+not_built = []
+
+for collector in check_list:
+    if collector.directory_exists():
+        missing_strings.extend(collector.find_missing())
+    elif collector.must_be_built():
+        not_built.append(collector.directory)
+
+if missing_strings:
+    print "Found the following files with missing strings:"
+    print "\t" + string.join(missing_strings, "\n\t")
+    test.fail_test(1)
+
+if not_built:
+    print "Cannot check all strings, the following have apparently not been built:"
+    print "\t" + string.join(not_built, "\n\t")
+    test.no_result(1)
+
+test.pass_test()