Commits

Anonymous 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.
........

Comments (0)

Files changed (10)

HOWTO/release.txt

 
             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):

QMTest/TestSCons.py

 # 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',
     --  (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.
 import time
 
 project = 'scons'
-default_version = '0.96.93'
+default_version = '0.96.94'
 copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
 
 Default('.')
-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

rpm/scons.spec.in

 %define name scons
-%define version 0.96.93
+%define version 0.96.94
 %define release 1
 
 Summary: an Open Source software construction tool
 
 
 
-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:
 
 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',

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()

src/test_strings.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()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.