Commits

Anonymous committed 284bdbf

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

........
r1891 | stevenknight | 2007-04-24 08:57:03 -0500 (Tue, 24 Apr 2007) | 1 line

0.96.D632 - Fix 0.96.96 reference count regression during parallel builds.
........
r1892 | stevenknight | 2007-04-24 12:51:05 -0500 (Tue, 24 Apr 2007) | 1 line

0.96.D633 - Fix documented default value(s) of $MSVS_USE_MFC_DIRS.
........
r1893 | stevenknight | 2007-04-24 16:12:14 -0500 (Tue, 24 Apr 2007) | 1 line

0.96.D634 - Make the DirEntryScanner tolerant of non-Dir nodes.
........
r1898 | stevenknight | 2007-05-09 15:07:15 -0500 (Wed, 09 May 2007) | 1 line

0.96.D635 - Portability fixes in test scripts.
........
r1899 | stevenknight | 2007-05-12 08:19:13 -0500 (Sat, 12 May 2007) | 1 line

0.96.D636 - Update documentation with rudimentary Tool module descriptions.
........
r1901 | stevenknight | 2007-05-17 14:32:14 -0500 (Thu, 17 May 2007) | 1 line

0.97.D001 - Initialize 0.97 for release.
........

Comments (0)

Files changed (110)

HOWTO/release.txt

         aecp QMTest/TestSCons.py
         vi QMTest/TestSCons.py
 
+        aecp src/setup.py
+        vi src/setup.py
+
         # Read through and update the README files if necessary
         [optional] aecp README
         [optional] vi README

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.96'
+SConsVersion = '0.97'
 
 __all__.extend([ 'TestSCons',
                  'python',
 to download and install the scons-{version}.tar.gz or scons-{version}.zip
 package rather than to work with the packaging logic in this tree.
 
-To the extent that this tree is about building SCons packages, the
-*full* development cycle (enforced by Aegis) is not to test the code
-directly, but to package SCons, unpack the package, "install" SCons in
-a test subdirectory, and then to run the tests against the unpacked and
-installed software.  This helps eliminate problems caused by, for example,
-failure to update the list of files to be packaged.
+To the extent that this tree is about building SCons packages, the *full*
+development cycle is not just to test the code directly, but to package
+SCons, unpack the package, "install" SCons in a test subdirectory,
+and then to run the tests against the unpacked and installed software.
+This helps eliminate problems caused by, for example, failure to update
+the list of files to be packaged.
 
 For just working on making an individual change to the SCons source,
 however, you don't actually need to build or install SCons; you
     --  (Optional.)  Install from a pre-packaged SCons package that
         does not require distutils:
 
-            Red Hat Linux       scons-0.96.96.noarch.rpm
+            Red Hat Linux       scons-0.97.noarch.rpm
 
             Debian GNU/Linux    use apt-get to get the official package
 
-            Windows             scons-0.96.96.win32.exe
+            Windows             scons-0.97.win32.exe
 
     --  (Recommended.)  Download the latest distutils package from the
         following URL:
 
 You can also execute the local SCons directly from the src/ subdirectory
 by first setting the SCONS_LIB_DIR environment variable to the local
-src/engine subdirectory, and then execute the local src/script/scons.py
+src/engine subdirectory, and then executing the local src/script/scons.py
 script to populate the build/scons/ subdirectory.  You would do this as
 follows on a Linux or UNIX system (using sh or a derivative like bash
 or ksh):
 
 By default, the above commands will do the following:
 
-    --  Install the version-numbered "scons-0.96.96" and "sconsign-0.96.96"
+    --  Install the version-numbered "scons-0.97" and "sconsign-0.97"
         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
         for example).  This can be disabled by specifying the
         "--no-scons-script" option on the command line, which is useful
         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.96" and "sconsign-0.96.96" scripts
-        by specifying the "--hardlink-scons" or "--symlink-scons"
-        options on the command line.
+        making it the default on your system.
 
-    --  Install "scons-0.96.96.bat" and "scons.bat" wrapper scripts in the
+        On UNIX or Linux systems, you can have the "scons" and "sconsign"
+        scripts be hard links or symbolic links to the "scons-0.97" and
+        "sconsign-0.97" scripts by specifying the "--hardlink-scons" or
+        "--symlink-scons" options on the command line.
+
+    --  Install "scons-0.97.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.96.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
-        from both UNIX/Linux and Windows systems.
+        on the command line.
+
+        On UNIX or Linux systems, the "--install-bat" option may be
+        specified to have "scons-0.97.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 from both UNIX/Linux and Windows systems.
 
     --  Install the SCons build engine (a Python module) in an
         appropriate version-numbered SCons library directory
-        (/usr/lib/scons-0.96.96 or C:\Python*\scons-0.96.96, for example).
+        (/usr/lib/scons-0.97 or C:\Python*\scons-0.97, for example).
         See below for more options related to installing the build
         engine library.
 
 modules that make up SCons.  The src/script/scons.py wrapper script exists
 mainly to find the appropriate build engine library and then execute it.
 
-In order to make your own change locally and test them by hand, simply
-edit modules in the local src/engine/SCons subdirectory tree and
-either use the local bootstrap.py script:
+In order to make your own changes locally and test them by hand, simply
+edit modules in the local src/engine/SCons subdirectory tree and either
+use the local bootstrap.py script:
 
     $ python bootstrap.py [arguments]
 
 set up environment variables to do this on a UNIX or Linux system:
 
     $ setenv MYSCONS=`pwd`/src
-    $ setenv SCONS_LIB_DIR=$MYSCONS
+    $ setenv SCONS_LIB_DIR=$MYSCONS/engine
     $ python $MYSCONS/script/scons.py [arguments]
 
 Or on Windows:
 
     C:\scons>set MYSCONS=%cd%\src
-    C:\scons>set SCONS_LIB_DIR=%MYSCONS%
+    C:\scons>set SCONS_LIB_DIR=%MYSCONS%\engine
     C:\scons>python %MYSCONS%\script\scons.py [arguments]
 
 You can use the -C option to have SCons change directory to another
 "con" on Windows).  By adding Trace() calls to the SCons source code:
 
     def sample_method(self, value):
-        fromn SCons.Debug import Trace
+        from SCons.Debug import Trace
         Trace('called sample_method(%s, %s)\n' % (self, value))
 
 You can then run automated tests that print any arbitrary information
 the screen:
 
     def sample_method(self, value):
-        fromn SCons.Debug import Trace
+        from SCons.Debug import Trace
         Trace('called sample_method(%s, %s)\n' % (self, value),
               file='trace.out')
 
             ^D
             $
 
-   --   Now debug the test failures and fix them, either by changing
+    --  Now debug the test failures and fix them, either by changing
         SCons, or by making necessary changes to the tests (if, for
         example, you have a strong reason to change functionality, or
         if you find that the bug really is in the test script itself).
         Repeat this until all of the tests that originally failed
         now pass.
 
-   --   Now you need to go back and validate that any changes you
-        made while getting the tests to pass didn't break the fix you
-        originally put in, or introduce any *additional* unintended side
-        effects that broke other tests:
+    --  Now you need to go back and validate that any changes you
+        made while getting the tests to pass didn't break the fix
+        you originally put in, and didn't introduce any *additional*
+        unintended side effects that broke other tests:
 
             $ python script/scons.py -C /home/me/broken_project .
             $ python runtest.py -a
         If you find any newly-broken tests, add them to your "failed.txt"
         file and go back to the previous step.
 
-Of course, the above is only one suggested workflow.  In practice, there's
-a lot of room for judgment and experience to make things go quicker.
+Of course, the above is only one suggested workflow.  In practice, there
+is a lot of room for judgment and experience to make things go quicker.
 For example, if you're making a change to just the Java support, you
 might start looking for regressions by just running the test/Java/*.py
 tests instead of running all of "runtest.py -a".
 Depending on the utilities installed on your system, any or all of the
 following packages will be built:
 
-        build/dist/scons-0.96.96-1.noarch.rpm
-        build/dist/scons-0.96.96-1.src.rpm
-        build/dist/scons-0.96.96.linux-i686.tar.gz
-        build/dist/scons-0.96.96.tar.gz
-        build/dist/scons-0.96.96.win32.exe
-        build/dist/scons-0.96.96.zip
-        build/dist/scons-doc-0.96.96.tar.gz
-        build/dist/scons-local-0.96.96.tar.gz
-        build/dist/scons-local-0.96.96.zip
-        build/dist/scons-src-0.96.96.tar.gz
-        build/dist/scons-src-0.96.96.zip
-        build/dist/scons_0.96.96-1_all.deb
+        build/dist/scons-0.97-1.noarch.rpm
+        build/dist/scons-0.97-1.src.rpm
+        build/dist/scons-0.97.linux-i686.tar.gz
+        build/dist/scons-0.97.tar.gz
+        build/dist/scons-0.97.win32.exe
+        build/dist/scons-0.97.zip
+        build/dist/scons-doc-0.97.tar.gz
+        build/dist/scons-local-0.97.tar.gz
+        build/dist/scons-local-0.97.zip
+        build/dist/scons-src-0.97.tar.gz
+        build/dist/scons-src-0.97.zip
+        build/dist/scons_0.97-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.
                 SCons itself
             --  a copy of xml_export, which can retrieve project data
                 from SourceForge
+            --  scripts and a Python module for translating the SCons
+                home-brew XML documentation tags into DocBook and
+                man page format
 
 bootstrap.py
         A build script for use with Aegis.  This collects a current copy
         SCons documentation.  A variety of things here, in various
         stages of (in)completeness.
 
-etc/
-        A subdirectory for miscellaneous things that we need.  Right
-        now, it has copies of Python modules that we use for testing,
-        and which we don't want to force people to have to install on
-        their own just to help out with SCons development.
-
 gentoo/
         Stuff to generate files for Gentoo Linux.
 
         the licensing terms are for SCons itself, not any other
         package that includes SCons.
 
+QMTest/
+        The Python modules we use for testing, some generic modules
+        originating elsewhere and some specific to SCons.
+
 README
         What you're looking at right now.
 
 REPORTING BUGS
 ==============
 
-Please report bugs by following the "Tracker - Bugs" link on the SCons
-project page and filling out the form:
+Please report bugs by following the detailed instructions on our Bug
+Submission page:
 
-        http://sourceforge.net/projects/scons/
+        http://scons.tigris.org/bug-submission.html
 
-You can also send mail to the SCons developers mailing list:
+You can also send mail to the SCons developers' mailing list:
 
-        scons-devel@lists.sourceforge.net
+        dev@scons.tigris.org
 
-But please make sure that you also submit a bug report to the project
-page bug tracker, because bug reports in email can sometimes get lost
-in the general flood of messages.
+But even if you send email to the mailing list please make sure that you
+ALSO submit a bug report to the project page bug tracker, because bug
+reports in email often get overlooked in the general flood of messages.
 
 
 MAILING LISTS
 import time
 
 project = 'scons'
-default_version = '0.96.96'
+default_version = '0.97'
 copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
 
 SConsignFile()
         if self.sort_name[0] == '_':
             self.sort_name = self.sort_name[1:]
         self.summary = []
+        self.sets = None
         self.uses = None
     def cmp_name(self, name):
         if name[0] == '_':
         self.begin_collecting([])
     def end_uses(self):
         self.current_object.uses = ''.join(self.collect).split()
+        self.current_object.uses.sort()
+        self.end_collecting()
+
+    def start_sets(self, attrs):
+        self.begin_collecting([])
+    def end_sets(self):
+        self.current_object.sets = ''.join(self.collect).split()
+        self.current_object.sets.sort()
         self.end_collecting()
 
     # Stuff for the ErrorHandler portion.

bin/scons-proc.py

 base_sys_path = [os.getcwd() + '/build/test-tar-gz/lib/scons'] + sys.path
 
 helpstr = """\
-Usage: scons-proc.py [--man|--sgml] \
-                        [-b file(s)] [-t file(s)] [-v file(s)] [infile ...]
+Usage: scons-proc.py [--man|--sgml]
+                     [-b file(s)] [-t file(s)] [-v file(s)] [infile ...]
 Options:
   -b file(s)        dump builder information to the specified file(s)
   -t file(s)        dump tool information to the specified file(s)
 """
 
 opts, args = getopt.getopt(sys.argv[1:],
-                           "b:t:v:",
-                           ['builders=', 'man', 'sgml', 'tools=', 'variables='])
+                           "b:ht:v:",
+                           ['builders=', 'help',
+                            'man', 'sgml', 'tools=', 'variables='])
 
 buildersfiles = None
 output_type = '--sgml'
 for o, a in opts:
     if o in ['-b', '--builders']:
         buildersfiles = a
+    elif o in ['-h', '--help']:
+        sys.stdout.write(helpstr)
+        sys.exit(0)
     elif o in ['--man', '--sgml']:
         output_type = o
     elif o in ['-t', '--tools']:
             f.write('<listitem>\n')
             for chunk in v.summary.body:
                 f.write(str(chunk))
-            #if v.uses:
-            #    u = map(lambda x, s: '&%slink-%s;' % (s.prefix, x), v.uses)
-            #    f.write('<para>\n')
-            #    f.write('Uses:  ' + ', '.join(u) + '.\n')
-            #    f.write('</para>\n')
+            if v.sets:
+                s = map(lambda x: '&cv-link-%s;' % x, v.sets)
+                f.write('<para>\n')
+                f.write('Sets:  ' + ', '.join(s) + '.\n')
+                f.write('</para>\n')
+            if v.uses:
+                u = map(lambda x: '&cv-link-%s;' % x, v.uses)
+                f.write('<para>\n')
+                f.write('Uses:  ' + ', '.join(u) + '.\n')
+                f.write('</para>\n')
             f.write('</listitem>\n')
             f.write('</varlistentry>\n')
     def write_mod(self, filename):
-scons (0.96-96) unstable; urgency=low
+scons (0.97) unstable; urgency=low
 
-  * Pre-release of eighth beta release.
+  * Eighth beta release.
 
- -- Steven Knight <knight@baldmt.com>  Thu, 12 Apr 2007 12:36:25 -0500
+ -- Steven Knight <knight@baldmt.com>  Thu, 17 May 2007 08:59:41 -0500
 
 
 scons (0.96-1) unstable; urgency=low
             ]
             if tidy:
                 cmds.append("tidy -m -q $TARGET || true")
-            env.Command(htmlindex, main, cmds)
+            env.Command(htmlindex, File(main), cmds)
             Local(htmlindex)
 
             cmds = [
             ]
             if tidy:
                 cmds.append("tidy -m -q $TARGET || true")
-            env.Command(html, main, cmds)
+            env.Command(html, File(main), cmds)
             Local(html)
 
             env.Ignore([html, htmlindex], version_sgml)
 
 -->
 
-<!ENTITY Aegis "<application>Aegis</application>">
-<!ENTITY Ant "<application>Ant</application>">
-<!ENTITY Autoconf "<application>Autoconf</application>">
-<!ENTITY Automake "<application>Automake</application>">
-<!ENTITY cc "<application>cc</application>">
-<!ENTITY Cons "<application>Cons</application>">
-<!ENTITY cp "<application>cp</application>">
-<!ENTITY csh "<application>csh</application>">
-<!ENTITY gcc "<application>gcc</application>">
-<!ENTITY Jam "<application>Jam</application>">
-<!ENTITY jar "<application>jar</application>">
-<!ENTITY javac "<application>javac</application>">
-<!ENTITY javah "<application>javah</application>">
-<!ENTITY Make "<application>Make</application>">
-<!ENTITY Makepp "<application>Make++</application>">
-<!ENTITY Python "<application>Python</application>">
-<!ENTITY ranlib "<application>ranlib</application>">
-<!ENTITY rmic "<application>rmic</application>">
-<!ENTITY SCons "<application>SCons</application>">
-<!ENTITY scons "<application>scons</application>">
-<!ENTITY ScCons "<application>ScCons</application>">
-<!ENTITY tar "<application>tar</application>">
-<!ENTITY touch "<application>touch</application>">
-<!ENTITY zip "<application>zip</application>">
+<!ENTITY Aegis          "<application>Aegis</application>">
+<!ENTITY Ant            "<application>Ant</application>">
+<!ENTITY ar             "<application>ar</application>">
+<!ENTITY as             "<application>as</application>">
+<!ENTITY Autoconf       "<application>Autoconf</application>">
+<!ENTITY Automake       "<application>Automake</application>">
+<!ENTITY cc             "<application>cc</application>">
+<!ENTITY Cons           "<application>Cons</application>">
+<!ENTITY cp             "<application>cp</application>">
+<!ENTITY csh            "<application>csh</application>">
+<!ENTITY gas            "<application>gas</application>">
+<!ENTITY gcc            "<application>gcc</application>">
+<!ENTITY g77            "<application>g77</application>">
+<!ENTITY gXX            "<application>gXX</application>">
+<!ENTITY Jam            "<application>Jam</application>">
+<!ENTITY jar            "<application>jar</application>">
+<!ENTITY javac          "<application>javac</application>">
+<!ENTITY javah          "<application>javah</application>">
+<!ENTITY latex          "<application>latex</application>">
+<!ENTITY lex            "<application>lex</application>">
+<!ENTITY m4             "<application>m4</application>">
+<!ENTITY Make           "<application>Make</application>">
+<!ENTITY Makepp         "<application>Make++</application>">
+<!ENTITY pdflatex       "<application>pdflatex</application>">
+<!ENTITY pdftex         "<application>pdftex</application>">
+<!ENTITY Python         "<application>Python</application>">
+<!ENTITY ranlib         "<application>ranlib</application>">
+<!ENTITY rmic           "<application>rmic</application>">
+<!ENTITY SCons          "<application>SCons</application>">
+<!ENTITY scons          "<application>scons</application>">
+<!ENTITY ScCons         "<application>ScCons</application>">
+<!ENTITY tar            "<application>tar</application>">
+<!ENTITY tex            "<application>tex</application>">
+<!ENTITY touch          "<application>touch</application>">
+<!ENTITY yacc           "<application>yacc</application>">
+<!ENTITY zip            "<application>zip</application>">
 
 
 <!--

rpm/scons.spec.in

 %define name scons
-%define version 0.96.96
+%define version 0.97
 %define release 1
 
 Summary: an Open Source software construction tool
 
 
 
+RELEASE 0.97 - Thu, 17 May 2007 08:59:41 -0500
+
+  From Steven Knight:
+
+  - Fix a bug that would make parallel builds stop in their tracks if
+    Nodes that depended on lists that contained some Nodes built together
+    caused the reference count to drop below 0 if the Nodes were visited
+    and commands finished in the wrong order.
+
+  - Make sure the DirEntryScanner doesn't choke if it's handed something
+    that's not a directory (Node.FS.Dir) Node.
+
+
+
 RELEASE 0.96.96 - Thu, 12 Apr 2007 12:36:25 -0500
 
   NOTE:  This is (Yet) a(nother) pre-release of 0.97 for testing purposes.
         for example).  This can be disabled by specifying the
         "--no-scons-script" option on the command line, which is useful
         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-__VERSION__" and "sconsign-__VERSION__" scripts
-        by specifying the "--hardlink-scons" or "--symlink-scons"
-        options on the command line.
+        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-__VERSION__" and
+        "sconsign-__VERSION__" scripts by specifying the "--hardlink-scons"
+        or "--symlink-scons" options on the command line.
 
     --  Install "scons-__VERSION__.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-__VERSION__.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
-        from both UNIX/Linux and Windows systems.
+        on the command line.
+
+        On UNIX or Linux systems, the "--install-bat" option may be
+        specified to have "scons-__VERSION__.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 from both UNIX/Linux and
+        Windows systems.
 
     --  Install the SCons build engine (a Python module) in an
         appropriate version-numbered SCons library directory
 REPORTING BUGS
 ==============
 
-Please report bugs by following the "Tracker - Bugs" link on the SCons
-project page and filling out the form:
+Please report bugs by following the detailed instructions on our Bug
+Submission page:
 
-        http://sourceforge.net/projects/scons/
+        http://scons.tigris.org/bug-submission.html
 
-You can also send mail to the SCons developers mailing list:
+You can also send mail to the SCons developers' mailing list:
 
-        scons-devel@lists.sourceforge.net
+        dev@scons.tigris.org
 
-But please make sure that you also submit a bug report to the project
-page bug tracker, because bug reports in email can sometimes get lost
-in the general flood of messages.
+But even if you send email to the mailing list please make sure that you
+ALSO submit a bug report to the project page bug tracker, because bug
+reports in email often get overlooked in the general flood of messages.
 
 
 MAILING LISTS
         Chad Austin
         Charles Crain
         Steve Leblanc
-        Baptiste Lepilleur
-        Elliot Murphy
+        Greg Noel
         Gary Oberbrunner
         Anthony Roach
-        Greg Noel
-        Kevin Quick
         Greg Spencer
         Christoph Wiedemann
 
 
 
 
-RELEASE 0.96.96 - Thu, 12 Apr 2007 12:36:25 -0500
+RELEASE 0.97 - Thu, 12 Apr 2007 12:36:25 -0500
 
-  This is a pre-release for testing the eighth beta release of SCons.
-  Please consult the CHANGES.txt file for a list of specific changes
-  since last release.
+  This is the eighth beta release of SCons.  Please consult the
+  CHANGES.txt file for a list of specific changes since last release.
 
   Please note the following important changes since release 0.96.93:
 
         On all POSIX systems, the default execution PATH variable has had
         the /opt/bin directory added after the /usr/local/bin directory
         and before /bin and /usr/bin directories.  This may cause SCons
-        to find and/or different compilers, linkers, etc. if you have
-        any same-named utilities installed in /opt/bin that it previously
-        found in /bin or /usr/bin.
+        to find and/or use different compilers, linkers, etc., if you
+        have any same-named utilities installed in /opt/bin that SCons
+        previously found in /bin or /usr/bin.
 
         On Mac OS X (Darwin) systems, the /sw/bin directory has been added
         to the end of the default execution PATH.  This may cause SCons
 
           --  NORMALIZED PATHS IN SConsignFile() DATABASES ON WINDOWS
 
-              When using an SConsignFile() database, instead of individual
-              .sconsign files in each directory, the path names are
-              stored in normalized form with / (forward slash) separating
-              the elements.  This may cause rebuilds on Windows systems
-              with hierarchical configurations.
+              When using an SConsignFile() database, instead of
+              individual .sconsign files in each directory, the path
+              names are stored in normalized form with / (forward slash)
+              separating the elements.  This may cause rebuilds when
+              upgrading to SCons 0.97 on Windows systems with hierarchical
+              build configurations.
 
           --  STORED DEPENDENCY PATHS ARE NOW RELATIVE TO THE TARGET
 
               causing unnecessary rebuilds due to an intermediate file in
               one build being treated as a source file in a nother build.
 
-              This a step towards making it possible to write a hierarchy
-              of SConstruct files that allow developers to build just
-              one portion of a tree wherever there's an SConstruct file.
-              (Note that this would still require some specific code at
-              the top of each SConstruct file, but we hope to make this
-              an easier/more naturally supported thing in the future.)
+              This is a step towards making it possible to write a
+              hierarchy of SConstruct files that allow developers
+              to build just one portion of a tree wherever there's an
+              SConstruct file.  (Note that this would still require some
+              specific code at the top of each SConstruct file, but we
+              hope to make this an easier/more naturally supported thing
+              in the future.)
 
           --  PYTHON FUNCTION ACTION SIGNATURES HAVE CHANGED TO AVOID
               FUTURE REBUILDS AND REBUILDS BETWEEN PYTHON VERSIONS
 
-              SCons Actions for Python functions use the functions byte
-              code to generate their signature.  The byte code in older
-              versions of Python includes indications of the line numbers
-              at which the function's code appeared in its original
-              source file, which means that changes in the location of
-              an otherwise unmodified Python function would trigger
-              rebuilds.  The line number byte codes are now removed
-              from the signature, which will cause any targets built by
-              Python function Actions (including various pre-supplied
-              SCons Actions) be rebuilt.
+              SCons Actions for Python functions use the function's
+              byte code to generate their signature.  The byte code
+              in older versions of Python includes indications of the
+              line numbers at which the function's code appeared in
+              its original source file, which means that changes in the
+              location of an otherwise unmodified Python function would
+              trigger rebuilds.  The line number byte codes are now
+              removed from the signature, which will cause any targets
+              built by Python function Actions (including various
+              pre-supplied SCons Actions) to be rebuilt.
 
           --  REMOVED CONVERSION FROM PRE-0.96 .sconsign FORMATS
 
 
           --  ORDER OF -o FLAGS ON CERTAIN LINK COMMAND LINES HAS CHANGED
 
-              The -o flag that specifies an output file has been moved on
-              certain linker command lines to place it consistently after
-              the link command itself.  This will cause recompilation
-              of target files created by these changed lines.
+              The -o flag that specifies an output file has been moved
+              on certain linker command lines to place it consistently
+              right after the link command itself.  This will cause
+              recompilation of target files created by these changed
+              lines.
 
     --  F95 AND F90 COMPILERS ARE NOW PREFERRED OVER F77
 
 
   KNOWN PROBLEMS IN THIS RELEASE:
 
-    For a complete list of known problems, consult the SCons bug tracker
-    page at SourceForge:
+    For a complete list of known problems, consult the SCons Issue Tracker
+    at tigris.org:
 
-        http://sourceforge.net/tracker/?atid=398971&group_id=30337&func=browse
+        http://scons.tigris.org/project_issues.html
 
     - Support for parallel builds (-j) does not work on WIN32 systems
       prior to *official* Python release 2.2 (not 2.2 pre-releases).
 
     - Unicode characters in path names do not work in all circumstances.
 
-    - A stray source file in a BuildDir can prevent targets from being
-      (re)built when they should.
-
-    - SCons does not automatically rebuild LaTeX files when the file
-      has an undefined reference on the first build.
-
-    - Use of --implicit-cache with TargetSignatures('content') can,
-      for some changes, not rebuild a file when necessary.
-
     - SCons does not currently automatically check out SConstruct or
       SConscript files from SCCS, RCS or BitKeeper.
 

src/engine/SCons/Node/NodeTests.py

         n1 = SCons.Node.Node()
         n2 = SCons.Node.Node()
         assert n1.waiting_parents == {}, n1.waiting_parents
-        n1.add_to_waiting_parents(n2)
+        r = n1.add_to_waiting_parents(n2)
+        assert r == 1, r
         assert n1.waiting_parents == {n2:1}, n1.waiting_parents
+        r = n1.add_to_waiting_parents(n2)
+        assert r == 0, r
 
     def test_call_for_all_waiting_parents(self):
         """Test the call_for_all_waiting_parents() method"""

src/engine/SCons/Node/__init__.py

         self.waiting_s_e[node] = 1
 
     def add_to_waiting_parents(self, node):
-        self.waiting_parents[node] = 1
+        """
+        Returns the number of nodes added to our waiting parents list:
+        1 if we add a unique waiting parent, 0 if not.  (Note that the
+        returned values are intended to be used to increment a reference
+        count, so don't think you can "clean up" this function by using
+        True and False instead...)
+        """
+        wp = self.waiting_parents
+        if wp.has_key(node):
+            result = 0
+        else:
+            result = 1
+        wp[node] = 1
+        return result
 
     def call_for_all_waiting_parents(self, func):
         func(self)

src/engine/SCons/Scanner/Dir.py

     """
     "Scans" a Node.FS.Dir for its in-memory entries.
     """
-    entry_list = filter(do_not_scan, node.entries.keys())
+    try:
+        entries = node.entries
+    except AttributeError:
+        # It's not a Node.FS.Dir (or doesn't look enough like one for
+        # our purposes), which can happen if a target list containing
+        # mixed Node types (Dirs and Files, for example) has a Dir as
+        # the first entry.
+        return []
+    entry_list = filter(do_not_scan, entries.keys())
     entry_list.sort()
-    return map(lambda n, e=node.entries: e[n], entry_list)
+    return map(lambda n, e=entries: e[n], entry_list)

src/engine/SCons/Scanner/DirTests.py

         return self.fs.Dir(name)
     def Entry(self, name):
         return self.fs.Entry(name)
+    def File(self, name):
+        return self.fs.File(name)
     def get_factory(self, factory):
         return factory or self.fs.Entry
 
         self.test.write(['dir', 'sub', '.sconsign.dir'], "dir/.sconsign.dir\n")
         self.test.write(['dir', 'sub', '.sconsign.pag'], "dir/.sconsign.pag\n")
 
-class DirScannerTestCase1(DirScannerTestBase):
+class DirScannerTestCase(DirScannerTestBase):
     def runTest(self):
         env = DummyEnvironment(self.test.workpath())
 
         sss = map(str, deps)
         assert sss == expect, sss
 
-class DirScannerTestCase2(DirScannerTestBase):
+class DirEntryScannerTestCase(DirScannerTestBase):
     def runTest(self):
         env = DummyEnvironment(self.test.workpath())
 
         sss = map(str, deps)
         assert sss == [], sss
 
+        # Make sure we don't blow up if handed a non-Dir node.
+        deps = s(env.File('dir/f1'), env, ())
+        sss = map(str, deps)
+        assert sss == [], sss
+
 def suite():
     suite = unittest.TestSuite()
-    suite.addTest(DirScannerTestCase1())
-    suite.addTest(DirScannerTestCase2())
+    suite.addTest(DirScannerTestCase())
+    suite.addTest(DirEntryScannerTestCase())
     return suite
 
 if __name__ == "__main__":

src/engine/SCons/Taskmaster.py

 
 import SCons.compat
 
+import operator
 import string
 import sys
 import traceback
                 # when they've finished building, our implicit dependency
                 # list will get cleared and we'll re-scan the newly-built
                 # file(s) for updated implicit dependencies.
-                map(lambda n, P=node: n.add_to_waiting_parents(P), not_started)
-                node.ref_count = len(set(not_started))
+                added = map(lambda n, P=node: n.add_to_waiting_parents(P), not_started)
+                node.ref_count = node.ref_count + reduce(operator.add, added, 0)
 
                 # Now we add these derived targets to the candidates
                 # list so they can be examined and built.  We have to
                 # so that when they've finished building, our implicit
                 # dependency list will get cleared and we'll re-scan the
                 # newly-built file(s) for updated implicit dependencies.
-                map(lambda n, P=node: n.add_to_waiting_parents(P), not_built)
-                node.ref_count = len(set(not_built))
+                added = map(lambda n, P=node: n.add_to_waiting_parents(P), not_built)
+                node.ref_count = node.ref_count + reduce(operator.add, added, 0)
 
                 if S: S.not_built = S.not_built + 1
                 if T:

src/engine/SCons/TaskmasterTests.py

         self.csig = None
         self.state = SCons.Node.no_state
         self.prepared = None
+        self.ref_count = 0
         self.waiting_parents = {}
         self.waiting_s_e = {}
         self.side_effect = 0
         return self.name
 
     def add_to_waiting_parents(self, node):
-        self.waiting_parents[node] = 1
+        wp = self.waiting_parents
+        if wp.has_key(node):
+            result = 0
+        else:
+            result = 1
+        wp[node] = 1
+        return result
 
     def call_for_all_waiting_parents(self, func):
         func(self)

src/engine/SCons/Tool/386asm.xml

 -->
 <tool name="386asm">
 <summary>
-XXX
+Sets construction variables for the 386ASM assembler
+for the Phar Lap ETS embedded operating system.
 </summary>
+<sets>
+AS
+ASFLAGS
+ASPPFLAGS
+ASCOM
+ASPPCOM
+</sets>
+<uses>
+CC
+CPPFLAGS
+_CPPDEFFLAGS
+_CPPINCFLAGS
+</uses>
 </tool>

src/engine/SCons/Tool/BitKeeper.xml

 -->
 <tool name="BitKeeper">
 <summary>
-XXX
+Sets construction variables for the BitKeeper
+source code control system.
 </summary>
+<sets>
+BITKEEPER
+BITKEEPERGET
+BITKEEPERGETFLAGS
+BITKEEPERCOM
+</sets>
+<uses>
+BITKEEPERCOMSTR
+</uses>
 </tool>
 
 <cvar name="BITKEEPER">

src/engine/SCons/Tool/CVS.xml

 -->
 <tool name="CVS">
 <summary>
-XXX
+Sets construction variables for the CVS source code
+management system.
 </summary>
+<sets>
+CVS
+CVSCOM
+CVSFLAGS
+CVSCOFLAGS
+</sets>
+<uses>
+CVSCOMSTR
+</uses>
 </tool>
 
 <cvar name="CVS">

src/engine/SCons/Tool/Perforce.xml

 -->
 <tool name="Perforce">
 <summary>
-XXX
+Sets construction variables for interacting with the
+Perforce source code management system.
 </summary>
+<sets>
+P4
+P4FLAGS
+P4COM
+</sets>
+<uses>
+P4COMSTR
+</uses>
 </tool>
 
 <cvar name="P4">

src/engine/SCons/Tool/RCS.xml

 -->
 <tool name="RCS">
 <summary>
-XXX
+Sets construction variables for the interaction
+with the Revision Control System.
 </summary>
+<sets>
+RCS
+RCS_CO
+RCS_COFLAGS
+RCS_COCOM
+</sets>
+<uses>
+RCS_COCOMSTR
+</uses>
 </tool>
 
 <cvar name="RCS">

src/engine/SCons/Tool/SCCS.xml

 -->
 <tool name="SCCS">
 <summary>
-XXX
+Sets construction variables for interacting with the
+Source Code Control System.
 </summary>
+<sets>
+SCCS
+SCCSFLAGS
+SCCSGETFLAGS
+SCCSCOM
+</sets>
+<uses>
+SCCSCOMSTR
+</uses>
 </tool>
 
 <cvar name="SCCS">

src/engine/SCons/Tool/Subversion.xml

 This file is processed by the bin/SConsDoc.py module.
 See its __doc__ string for a discussion of the format.
 -->
+<!--
 <tool name="Subversion">
 <summary>
-XXX
+Sets construction variables for interacting with Subversion.
 </summary>
+<sets>
+SVN
+SVNFLAGS
+SVNCOM
+</sets>
+<uses>
+SVNCOMSTR
+</uses>
 </tool>
+-->
 
 <!--
 <cvar name="SVN">

src/engine/SCons/Tool/aixc++.xml

 -->
 <tool name="aixc++">
 <summary>
-XXX
+Sets construction variables for the IMB xlc / Visual Age C++ compiler.
 </summary>
+<sets>
+CXX
+SHCXX
+CXXVERSION
+SHOBJSUFFIX
+</sets>
+<uses>
+</uses>
 </tool>

src/engine/SCons/Tool/aixcc.xml

 -->
 <tool name="aixcc">
 <summary>
-XXX
+Sets construction variables for the IBM xlc / Visual Age C compiler.
 </summary>
+<sets>
+CC
+SHCC
+CCVERSION
+</sets>
+<uses>
+</uses>
 </tool>

src/engine/SCons/Tool/aixf77.xml

 -->
 <tool name="aixf77">
 <summary>
-XXX
+Sets construction variables for the IBM Visual Age f77 Fortran compiler.
 </summary>
+<sets>
+F77
+SHF77
+</sets>
+<uses>
+</uses>
 </tool>

src/engine/SCons/Tool/aixlink.xml

 -->
 <tool name="aixlink">
 <summary>
-XXX
+Sets construction variables for the IBM Visual Age linker.
 </summary>
+<sets>
+<!--SMARTLINKFLAGS-->
+LINKFLAGS
+SHLINKFLAGS
+SHLIBSUFFIX
+</sets>
+<uses>
+</uses>
 </tool>

src/engine/SCons/Tool/applelink.xml

 This file is processed by the bin/SConsDoc.py module.
 See its __doc__ string for a discussion of the format.
 -->
+<tool name="applelink">
+<summary>
+Sets construction variables for the Apple linker
+(similar to the GNU linker).
+</summary>
+<sets>
+FRAMEWORKPATHPREFIX
+_FRAMEWORKPATH
+_FRAMEWORKS
+LINKCOM
+SHLINKFLAGS
+SHLINKCOM
+LDMODULEPREFIX
+LDMODULESUFFIX
+LDMODULEFLAGS
+LDMODULECOM
+</sets>
+<uses>
+FRAMEWORKSFLAGS
+</uses>
+</tool>
+
 <cvar name="FRAMEWORKSFLAGS">">
 <summary>
 On Mac OS X with gcc,

src/engine/SCons/Tool/ar.xml

 -->
 <tool name="ar">
 <summary>
-XXX
+Sets construction variables for the &ar; library archiver.
 </summary>
+<sets>
+AR
+ARFLAGS
+ARCOM
+LIBPREFIX
+LIBSUFFIX
+RANLIB
+RANLIBFLAGS
+RANLIBCOM
+</sets>
+<uses>
+</uses>
 </tool>
 
 <cvar name="AR">

src/engine/SCons/Tool/as.xml

 -->
 <tool name="as">
 <summary>
-XXX
+Sets construction variables for the &as; assembler.
 </summary>
+<sets>
+AS
+ASFLAGS
+ASCOM
+ASPPFLAGS
+ASPPCOM
+</sets>
+<uses>
+CC
+CPPFLAGS
+_CPPDEFFLAGS
+_CPPINCFLAGS
+</uses>
 </tool>
 
 <cvar name="AS">

src/engine/SCons/Tool/bcc32.xml

 -->
 <tool name="bcc32">
 <summary>
-XXX
+Sets construction variables for the bcc32 compiler.
 </summary>
+<sets>
+CC
+CCFLAGS
+CFLAGS
+CCCOM
+SHCC
+SHCCFLAGS
+SHCFLAGS
+SHCCCOM
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+SHOBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+CFILESUFFIX
+</sets>
+<uses>
+_CPPDEFFLAGS
+_CPPINCFLAGS
+</uses>
 </tool>

src/engine/SCons/Tool/c++.xml

 This file is processed by the bin/SConsDoc.py module.
 See its __doc__ string for a discussion of the format.
 -->
-<tool name="c++">
+<tool name="cXX">
 <summary>
-XXX
+Sets construction variables for generic POSIX C++ compilers.
 </summary>
+<sets>
+CXX
+CXXFLAGS
+CXXCOM
+SHCXX
+SHCXXFLAGS
+SHCXXCOM
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+SHOBJSUFFIX
+OBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+CXXFILESUFFIX
+</sets>
+<uses>
+CXXCOMSTR
+</uses>
 </tool>
 
 <cvar name="CXX">

src/engine/SCons/Tool/cc.xml

 -->
 <tool name="cc">
 <summary>
-&cv-link-CC;
-&cv-link-CFLAGS;
-&cv-link-CCCOM;
-&cv-link-SHCC;
-&cv-link-SHCFLAGS;
-&cv-link-SHCCCOM;
-
-&cv-link-CPPDEFPREFIX;
-&cv-link-CPPDEFSUFFIX;
-&cv-link-INCPREFIX;
-&cv-link-INCSUFFIX;
-&cv-link-SHOBJSUFFIX;
-<!-- &cv-link-STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME; -->
-
-&cv-link-CFILESUFFIX;
+Sets construction variables for generic POSIX C copmilers.
 </summary>
+<sets>
+<!--_CCCOMCOM-->
+FRAMEWORKS
+FRAMEWORKPATH
+CC
+CFLAGS
+CCFLAGS
+CCCOM
+SHCC
+SHCFLAGS
+SHCCFLAGS
+SHCCCOM
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+SHOBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+CFILESUFFIX
+</sets>
+<uses>
+PLATFORM
+</uses>
 </tool>
 
 <cvar name="CC">

src/engine/SCons/Tool/cvf.xml

 -->
 <tool name="cvf">
 <summary>
-XXX
+Sets construction variables for the Compaq Visual Fortran compiler.
 </summary>
+<sets>
+FORTRAN
+FORTRANCOM
+FORTRANPPCOM
+SHFORTRANCOM
+SHFORTRANPPCOM
+OBJSUFFIX
+FORTRANMODDIR
+FORTRANMODDIRPREFIX
+FORTRANMODDIRSUFFIX
+</sets>
+<uses>
+FORTRANFLAGS
+SHFORTRANFLAGS
+_FORTRANMODFLAG
+_FORTRANINCFLAGS
+CPPFLAGS
+_CPPDEFFLAGS
+</uses>
 </tool>

src/engine/SCons/Tool/default.xml

 -->
 <tool name="default">
 <summary>
-XXX
+Sets variables by calling a default list of Tool modules
+for the platform on which SCons is running.
 </summary>
 </tool>

src/engine/SCons/Tool/dmd.xml

 -->
 <tool name="dmd">
 <summary>
-XXX
+Sets construction variables for the Digital Mars D compiler.
 </summary>
+<sets>
+<!--
+DC
+DCOM
+_DINCFLAGS
+_DVERFLAGS
+_DDEBUGFLAGS
+_DFLAGS
+DPATH
+DFLAGS
+DVERSIONS
+DDEBUG
+DINCPREFIX
+DINCSUFFIX
+DVERPREFIX
+DVERSUFFIX
+DDEBUGPREFIX
+DDEBUGSUFFIX
+DFLAGPREFIX
+DFLAGSUFFIX
+DFLESUFFIX
+DLINK
+DLINKCOM
+DLIB
+DLIBCOM
+_DLINKLIBFLAGS
+_DLIBFLAGS
+DLINKFLAGS
+DLIBLINKPREFIX
+DLIBLINKSUFFIX
+DLIBFLAGPREFIX
+DLIBFLAGSUFFIX
+DLINKFLAGPREFIX
+DLINKFLAGSUFFIX
+LINKCOM
+ARCOM
+LIBS
+-->
+</sets>
+<uses>
+</uses>
 </tool>

src/engine/SCons/Tool/dvi.xml

 This file is processed by the bin/SConsDoc.py module.
 See its __doc__ string for a discussion of the format.
 -->
+<tool name="dvi">
+<summary>
+Attaches the &b-DVI; builder to the
+construction environment.
+</summary>
+<sets>
+</sets>
+<uses>
+</uses>
+</tool>
+
 <builder name="DVI">
 <summary>
 Builds a <filename>.dvi</filename> file

src/engine/SCons/Tool/dvipdf.xml

 -->
 <tool name="dvipdf">
 <summary>
-XXX
+Sets construction variables for the dvipdf utility.
 </summary>
+<sets>
+DVIPDF
+DVIPDFFLAGS
+DVIPDFCOM
+</sets>
+<uses>
+DVIPDFCOMSTR
+</uses>
 </tool>
 
 <cvar name="DVIPDF">

src/engine/SCons/Tool/dvips.xml

 -->
 <tool name="dvips">
 <summary>
-XXX
+Sets construction variables for the dvips utility.
 </summary>
+<sets>
+DVIPS
+DVIPSFLAGS
+PSCOM
+PSPREFIX
+PSSUFFIX
+</sets>
+<uses>
+PSCOMSTR
+</uses>
 </tool>
 
 <builder name="PostScript">

src/engine/SCons/Tool/f77.xml

 -->
 <tool name="f77">
 <summary>
-XXX
+Set construction variables for generic POSIX Fortran 77 compilers.
 </summary>
+<sets>
+F77
+F77FLAGS
+F77COM
+F77PPCOM
+FORTRAN
+FORTRANFLAGS
+FORTRANCOM
+SHF77
+SHF77FLAGS
+SHF77COM
+SHF77PPCOM
+SHFORTRAN
+SHFORTRANFLAGS
+SHFORTRANCOM
+SHFORTRANPPCOM
+_F77INCFLAGS
+</sets>
+<uses>
+F77COMSTR
+F77PPCOMSTR
+FORTRANCOMSTR
+FORTRANPPCOMSTR
+SHF77COMSTR
+SHF77PPCOMSTR
+SHFORTRANCOMSTR
+SHFORTRANPPCOMSTR
+</uses>
 </tool>
 
 <cvar name="F77">
 </summary>
 </cvar>
 
+<cvar name="F77PPCOMSTR">
+<summary>
+The string displayed when a Fortran 77 source file
+is compiled to an object file
+after first running the file through the C preprocessor.
+If this is not set, then &cv-link-F77PPCOM; or &cv-link-FORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>
+
 <cvar name="SHF77">
 <summary>
 The Fortran 77 compiler used for generating shared-library objects.
 for all Fortran versions.
 </summary>
 </cvar>
+
+<cvar name="SHF77PPCOMSTR">
+<summary>
+The string displayed when a Fortran 77 source file
+is compiled to a shared-library object file
+after first running the file through the C preprocessor.
+If this is not set, then &cv-link-SHF77PPCOM; or &cv-link-SHFORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>

src/engine/SCons/Tool/f90.xml

 -->
 <tool name="f90">
 <summary>
-XXX
+Set construction variables for generic POSIX Fortran 90 compilers.
 </summary>
+<sets>
+F90
+F90FLAGS
+F90COM
+F90PPCOM
+SHF90
+SHF90FLAGS
+SHF90COM
+SHF90PPCOM
+_F90INCFLAGS
+</sets>
+<uses>
+F90COMSTR
+F90PPCOMSTR
+SHF90COMSTR
+SHF90PPCOMSTR
+</uses>
 </tool>
 
 <cvar name="F90">
 </summary>
 </cvar>
 
+<cvar name="F90PPCOMSTR">
+<summary>
+The string displayed when a Fortran 90 source file
+is compiled after first running the file through the C preprocessor.
+If this is not set, then &cv-link-F90PPCOM; or &cv-link-FORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>
+
 <cvar name="SHF90">
 <summary>
 The Fortran 90 compiler used for generating shared-library objects.
 for all Fortran versions.
 </summary>
 </cvar>
+
+<cvar name="SHF90PPCOMSTR">
+<summary>
+The string displayed when a Fortran 90 source file
+is compiled to a shared-library object file
+after first running the file through the C preprocessor.
+If this is not set, then &cv-link-SHF90PPCOM; or &cv-link-SHFORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>

src/engine/SCons/Tool/f95.xml

 -->
 <tool name="f95">
 <summary>
-XXX
+Set construction variables for generic POSIX Fortran 95 compilers.
 </summary>
+<sets>
+F95
+F95FLAGS
+F95COM
+F95PPCOM
+SHF95
+SHF95FLAGS
+SHF95COM
+SHF95PPCOM
+_F95INCFLAGS
+</sets>
+<uses>
+F95COMSTR
+F95PPCOMSTR
+SHF95COMSTR
+SHF95PPCOMSTR
+</uses>
 </tool>
 
 <cvar name="F95">
 </summary>
 </cvar>
 
+<cvar name="F95PPCOMSTR">
+<summary>
+The string displayed when a Fortran 95 source file
+is compiled to an object file
+after first running the file through the C preprocessor.
+If this is not set, then &cv-link-F95PPCOM; or &cv-link-FORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>
+
 <cvar name="SHF95">
 <summary>
 The Fortran 95 compiler used for generating shared-library objects.
 for all Fortran versions.
 </summary>
 </cvar>
+
+<cvar name="SHF95PPCOMSTR">
+<summary>
+The string displayed when a Fortran 95 source file
+is compiled to a shared-library object file
+after first running the file through the C preprocessor.
+If this is not set, then &cv-link-SHF95PPCOM; or &cv-link-SHFORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>

src/engine/SCons/Tool/fortran.xml

 -->
 <tool name="fortran">
 <summary>
-XXX
+Set construction variables for generic POSIX Fortran compilers.
 </summary>
+<sets>
+FORTRAN
+FORTRANFLAGS
+FORTRANCOM
+SHFORTRAN
+SHFORTRANFLAGS
+SHFORTRANCOM
+SHFORTRANPPCOM
+</sets>
+<uses>
+FORTRANCOMSTR
+FORTRANPPCOMSTR
+SHFORTRANCOMSTR
+SHFORTRANPPCOMSTR
+</uses>
 </tool>
 
 <cvar name="FORTRAN">
 </summary>
 </cvar>
 
+<cvar name="FORTRANPPCOMSTR">
+<summary>
+The string displayed when a Fortran source file
+is compiled to an object file
+after first running the file throught the C preprocessor.
+If this is not set, then &cv-link-FORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>
+
 <cvar name="FORTRANSUFFIXES">
 <summary>
 The list of suffixes of files that will be scanned
 are included on this command line.
 </summary>
 </cvar>
+
+<cvar name="SHFORTRANPPCOMSTR">
+<summary>
+The string displayed when a Fortran source file
+is compiled to a shared-library object file
+after first running the file throught the C preprocessor.
+If this is not set, then &cv-link-SHFORTRANPPCOM;
+(the command line) is displayed.
+</summary>
+</cvar>

src/engine/SCons/Tool/g++.xml

 -->
 <tool name="g++">
 <summary>
-XXX
+Set construction variables for the &gXX; C++ compiler.
 </summary>
+<sets>
+CXX
+SHCXXFLAGS
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+SHOBJSUFFIX
+CXXVERSION
+</sets>
 </tool>

src/engine/SCons/Tool/g77.xml

 -->
 <tool name="g77">
 <summary>
-XXX
+Set construction variables for the &g77; Fortran compiler.
+Calls the &t-f77; Tool module
+to set variables.
 </summary>
 </tool>

src/engine/SCons/Tool/gas.xml

 -->
 <tool name="gas">
 <summary>
-XXX
+Sets construction variables for the &gas; assembler.
+Calls the &t-as; module.
 </summary>
+<sets>
+AS
+</sets>
 </tool>

src/engine/SCons/Tool/gcc.xml

 -->
 <tool name="gcc">
 <summary>
-XXX
+Set construction variables for the &gcc; C compiler.
 </summary>
+<sets>
+CC
+SHCCFLAGS
+CCVERSION
+</sets>
 </tool>

src/engine/SCons/Tool/gnulink.xml

 -->
 <tool name="gnulink">
 <summary>
-XXX
+Set construction variables for GNU linker/loader.
 </summary>
+<sets>
+SHLINKFLAGS
+RPATHPREFIX
+RPATHSUFFIX
+</sets>
 </tool>

src/engine/SCons/Tool/gs.xml

 -->
 <tool name="gs">
 <summary>
-XXX
+Set construction variables for Ghostscript.
 </summary>
+<sets>
+GS
+GSFLAGS
+GSCOM
+</sets>
+<uses>
+GSCOMSTR
+</uses>
 </tool>
 
 <cvar name="GS">

src/engine/SCons/Tool/hpc++.xml

 -->
 <tool name="hpc++">
 <summary>
-XXX
+Set construction variables for the compilers aCC on HP/UX systems.
 </summary>
 </tool>

src/engine/SCons/Tool/hpcc.xml

 -->
 <tool name="hpcc">
 <summary>
-XXX
+Set construction variables for the
+<application>aCC</application> on HP/UX systems.
+Calls the &t-cXX; tool for additional variables.
 </summary>
+<sets>
+CXX
+SHCXXFLAGS
+CXXVERSION
+</sets>
 </tool>

src/engine/SCons/Tool/hplink.xml

 -->
 <tool name="hplink">
 <summary>
-XXX
+Sets construction variables for the linker on HP/UX systems.
 </summary>
+<sets>
+LINKFLAGS
+SHLINKFLAGS
+SHLIBSUFFIX
+</sets>
 </tool>

src/engine/SCons/Tool/icc.xml

 -->
 <tool name="icc">
 <summary>
-XXX
+Sets construction variables for the
+<application>icc</application> compiler on OS/2 systems.
 </summary>
+<sets>
+CC
+CCCOM
+CXXCOM
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+CFILESUFFIX
+CXXFILESUFFIX
+</sets>
+<uses>
+CFLAGS
+CCFLAGS
+CPPFLAGS
+_CPPDEFFLAGS
+_CPPINCFLAGS
+</uses>
 </tool>

src/engine/SCons/Tool/icl.xml

 -->
 <tool name="icl">
 <summary>
-XXX
+Sets construction variables for the Intel C/C++ compiler.
+Calls the &t-intelc; Tool module to set its variables.
 </summary>
 </tool>

src/engine/SCons/Tool/ifl.xml

 -->
 <tool name="ifl">
 <summary>
-XXX
+Sets construction variables for the Intel Fortran compiler.
 </summary>
+<sets>
+FORTRAN
+FORTRANCOM
+FORTRANPPCOM
+SHFORTRANCOM
+SHFORTRANPPCOM
+</sets>
+<uses>
+FORTRANFLAGS
+_FORTRANINCFLAGS
+CPPFLAGS
+_CPPDEFFLAGS
+</uses>
 </tool>

src/engine/SCons/Tool/ifort.xml

 -->
 <tool name="ifort">
 <summary>
-XXX
+Sets construction variables for newer versions
+of the Intel Fortran compiler for Linux.
 </summary>
+<sets>
+SHLINK
+SHLINKFLAGS
+</sets>
 </tool>

src/engine/SCons/Tool/ilink.xml

 -->
 <tool name="ilink">
 <summary>
-XXX
+Sets construction variables for the