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
# 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.
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>">
<!--
%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.
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"""
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)
"""
"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)
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__":
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:
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)
-->
<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>
-->
<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">
-->
<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">
-->
<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">
-->
<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">
-->
<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">
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">
-->
<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>
-->
<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>
-->
<tool name="aixf77">
<summary>
-XXX
+Sets construction variables for the IBM Visual Age f77 Fortran compiler.
</summary>
+<sets>
+F77
+SHF77
+</sets>
+<uses>
+</uses>
</tool>
-->
<tool name="aixlink">
<summary>
-XXX
+Sets construction variables for the IBM Visual Age linker.
</summary>
+<sets>
+<!--SMARTLINKFLAGS-->
+LINKFLAGS
+SHLINKFLAGS
+SHLIBSUFFIX
+</sets>
+<uses>
+</uses>
</tool>
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,
-->
<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">
-->
<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">
-->
<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>
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">
-->
<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">
-->
<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>
-->
<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>
-->
<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>
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
-->
<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">
-->
<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">
-->
<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>
-->
<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>
-->
<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>
-->
<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>
-->
<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>
-->
<tool name="g77">
<summary>
-XXX
+Set construction variables for the &g77; Fortran compiler.
+Calls the &t-f77; Tool module
+to set variables.
</summary>
</tool>
-->
<tool name="gas">
<summary>
-XXX
+Sets construction variables for the &gas; assembler.
+Calls the &t-as; module.
</summary>
+<sets>
+AS
+</sets>
</tool>
-->
<tool name="gcc">
<summary>
-XXX
+Set construction variables for the &gcc; C compiler.
</summary>
+<sets>
+CC
+SHCCFLAGS
+CCVERSION
+</sets>
</tool>
-->
<tool name="gnulink">
<summary>
-XXX
+Set construction variables for GNU linker/loader.
</summary>
+<sets>
+SHLINKFLAGS
+RPATHPREFIX
+RPATHSUFFIX
+</sets>
</tool>
-->
<tool name="gs">
<summary>
-XXX
+Set construction variables for Ghostscript.
</summary>
+<sets>
+GS
+GSFLAGS
+GSCOM
+</sets>
+<uses>
+GSCOMSTR
+</uses>
</tool>
<cvar name="GS">
-->
<tool name="hpc++">
<summary>
-XXX
+Set construction variables for the compilers aCC on HP/UX systems.
</summary>
</tool>
-->
<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>
-->
<tool name="hplink">
<summary>
-XXX
+Sets construction variables for the linker on HP/UX systems.
</summary>
+<sets>
+LINKFLAGS
+SHLINKFLAGS
+SHLIBSUFFIX
+</sets>
</tool>
-->
<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>
-->
<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>
-->
<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>
-->
<tool name="ifort">
<summary>
-XXX
+Sets construction variables for newer versions
+of the Intel Fortran compiler for Linux.
</summary>
+<sets>
+SHLINK
+SHLINKFLAGS
+</sets>
</tool>
-->
<tool name="ilink">
<summary>
-XXX
+Sets construction variables for the
+<application>ilink</application> linker on OS/2 systems.
</summary>
+<sets>
+LINK
+LINKFLAGS
+LINKCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+</sets>
+<uses>
+</uses>
</tool>
-->
<tool name="ilink32">
<summary>
-XXX
+Sets construction variables for the Borland
+<application>ilink32</application> linker.
</summary>
+<sets>
+LINK
+LINKFLAGS
+LINKCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+</sets>
+<uses>
+</uses>
</tool>
-->
<tool name="intelc">
<summary>
-XXX
+Sets construction variables for the Intel C/C++ compiler
+(Linux and Windows, version 7 and later).
+Calls the &t-gcc; or &t-msvc;
+(on Linux and Windows, respectively)
+to set underlying variables.
</summary>
+<sets>
+CC
+CXX
+LINK
+AR
+<!--LD-->
+INTEL_C_COMPILER_VERSION
+</sets>
+<uses>
+</uses>
</tool>
<cvar name="INTEL_C_COMPILER_VERSION">
-->
<tool name="jar">
<summary>
-XXX
+Sets construction variables for the &jar; utility.
</summary>
+<sets>
+JAR
+JARFLAGS
+JARCOM
+JARSUFFIX
+</sets>
+<uses>
+JARCOMSTR
+</uses>
</tool>
<builder name="Jar">
-->
<tool name="javac">
<summary>
-XXX
+Sets construction variables for the &javac; compiler.
</summary>
+<sets>
+JAVAC
+JAVACFLAGS
+JAVACCOM
+JAVACLASSSUFFIX
+JAVASUFFIX
+</sets>
+<uses>
+JAVACCOMSTR
+</uses>
</tool>
<builder name="Java">
-->
<tool name="javah">
<summary>
-XXX
+Sets construction variables for the &javah; tool.
</summary>
+<sets>
+JAVAH
+JAVAHFLAGS
+JAVAHCOM
+JAVACLASSSUFFIX
+</sets>
+<uses>
+JAVAHCOMSTR
+</uses>
</tool>
<builder name="JavaH">
-->
<tool name="latex">
<summary>
-XXX
+Sets construction variables for the &latex; utility.
</summary>
+<sets>
+LATEX
+LATEXFLAGS
+LATEXCOM
+</sets>
+<uses>
+LATEXCOMSTR
+</uses>
</tool>
<cvar name="LATEX">
-->
<tool name="lex">
<summary>
-XXX
+Sets construction variables for the &lex; lexical analyser.
</summary>
+<sets>
+LEX
+LEXFLAGS
+LEXCOM
+</sets>
+<uses>
+LEXCOMSTR
+</uses>
</tool>
<cvar name="LEX">
-->
<tool name="link">
<summary>
-XXX
+Sets construction variables for generic POSIX linkers.
</summary>
+<sets>
+SHLINK
+SHLINKFLAGS
+SHLINKCOM
+LINK
+LINKFLAGS
+LINKCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+SHLIBSUFFIX
+LDMODULE
+LDMODULEPREFIX
+LDMODULESUFFIX
+LDMODULEFLAGS
+LDMODULECOM
+</sets>
+<uses>
+SHLINKCOMSTR
+LINKCOMSTR
+LDMODULECOMSTR
+</uses>
</tool>
<cvar name="LDMODULE">
-->
<tool name="linkloc">
<summary>
-XXX
+Sets construction variables for the
+<application>LinkLoc</application>
+linker for the Phar Lap ETS embedded operating system.
</summary>
+<sets>
+<!--SUBST_CMD_FILE-->
+SHLINK
+SHLINKFLAGS
+SHLINKCOM
+<!--SHLINKEMITTER-->
+LINK
+LINKFLAGS
+LINKCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+</sets>
+<uses>
+SHLINKCOMSTR
+LINKCOMSTR
+</uses>
</tool>
-->
<tool name="m4">
<summary>
-XXX
+Sets construction variables for the &m4; macro processor.
</summary>
+<sets>
+M4
+M4FLAGS
+M4COM
+</sets>
+<uses>
+M4COMSTR
+</uses>
</tool>
<builder name="M4">
-->
<tool name="masm">
<summary>
-XXX
+Sets construction variables for the Microsoft assembler.
</summary>
+<sets>
+AS
+ASFLAGS
+ASPPFLAGS
+ASCOM
+ASPPCOM
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+</sets>
+<uses>
+ASCOMSTR
+ASPPCOMSTR
+CPPFLAGS
+_CPPDEFFLAGS
+_CPPINCFLAGS
+</uses>
</tool>
-->
<tool name="midl">
<summary>
-XXX
+Sets construction variables for the Microsoft IDL compiler.
</summary>
+<sets>
+MIDL
+MIDLFLAGS
+MIDLCOM
+</sets>
+<uses>
+MIDLCOMSTR
+</uses>
</tool>
<builder name="TypeLibrary">
files.
</summary>
</builder>
+
+<cvar name="MIDL">
+<summary>
+The Microsoft IDL compiler.
+</summary>
+</cvar>
+
+<cvar name="MIDLCOM">
+<summary>
+The command line used to pass files to the Microsoft IDL compiler.
+</summary>
+</cvar>
+
+<cvar name="MIDLCOMSTR">
+<summary>
+The string displayed when
+the Microsoft IDL copmiler is called.
+If this is not set, then &cv-link-MIDLCOM; (the command line) is displayed.
+</summary>
+</cvar>
+
+<cvar name="MIDLFLAGS">
+<summary>
+General options passed to the Microsoft IDL compiler.
+</summary>
+</cvar>
-->
<tool name="mingw">
<summary>
-XXX
+Sets construction variables for MinGW (Minimal Gnu on Windows).
</summary>
+<sets>
+CC
+SHCCFLAGS
+CXX
+SHCXXFLAGS
+SHLINKFLAGS
+SHLINKCOM
+AS
+WINDOWSDEFPREFIX
+WINDOWSDEFSUFFIX
+SHOBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+RC
+RCFLAGS
+RCINCFLAGS
+RCINCPREFIX
+RCINCSUFFIX
+RCCOM
+OBJSUFFIX
+LIBPREFIX
+LIBSUFFIX
+</sets>
+<uses>
+SHLINKCOMSTR
+RCCOMSTR
+</uses>
</tool>
-->
<tool name="mslib">
<summary>
-XXX
+Sets construction variables for the Microsoft
+<application>mslib</application>
+library archiver.
</summary>
+<sets>
+AR
+ARFLAGS
+ARCOM
+LIBPREFIX
+LIBSUFFIX
+</sets>
+<uses>
+ARCOMSTR
+</uses>
</tool>
-->
<tool name="mslink">
<summary>
-XXX
-</summary>
+Sets construction variables for the Microsoft linker.
+</summary>
+<sets>
+SHLINK
+SHLINKFLAGS
+SHLINKCOM
+LINK
+LINKFLAGS
+LINKCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+WIN32DEFPREFIX
+WIN32DEFSUFFIX
+WINDOWSDEFPREFIX
+WINDOWSDEFSUFFIX
+WINDOWS_INSERT_DEF
+WIN32EXPPREFIX
+WIN32EXPSUFFIX
+WINDOWSEXPPREFIX
+WINDOWSEXPSUFFIX
+WINDOWSSHLIBMANIFESTPREFIX
+WINDOWSSHLIBMANIFESTSUFFIX
+WINDOWSPROGMANIFESTPREFIX
+WINDOWSPROGMANIFESTSUFFIX
+<!--REGSVRACTION-->
+REGSVR
+REGSVRFLAGS
+REGSVRCOM
+LDMODULE
+LDMODULEPREFIX
+LDMODULESUFFIX
+LDMODULEFLAGS
+LDMODULECOM
+</sets>
+<uses>
+SHLINKCOMSTR
+LINKCOMSTR
+REGSVRCOMSTR
+MSVS_IGNORE_IDE_PATHS
+LDMODULECOMSTR
+</uses>
</tool>
<cvar name="no_import_lib">
-->
<tool name="msvc">
<summary>
-XXX
+Sets construction variables for the Microsoft Visual C/C++ compiler.
</summary>
+<sets>
+CCPDBFLAGS
+CCPCHFLAGS
+<!--CCCOMFLAGS-->
+CC
+CCFLAGS
+CFLAGS
+CCCOM
+SHCC
+SHCCFLAGS
+SHCFLAGS
+SHCCCOM
+CXX
+CXXFLAGS
+CXXCOM
+SHCXX
+SHCXXFLAGS
+SHCXXCOM
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+RC
+RCFLAGS
+RCCOM
+BUILDERS
+OBJPREFIX
+OBJSUFFIX
+SHOBJPREFIX
+SHOBJSUFFIX
+CFILESUFFIX
+CXXFILESUFFIX
+PCHPDBFLAGS
+PCHCOM
+</sets>
+<uses>
+CCCOMSTR
+SHCCCOMSTR
+CXXCOMSTR
+SHCXXCOMSTR
+</uses>
</tool>
<builder name="PCH">
</summary>
</cvar>
+<cvar name="PCHPDBFLAGS">
+<summary>
+A construction variable that, when expanded,
+adds the <literal>/yD</literal> flag to the command line
+only if the &cv-PDB; construction variable is set.
+</summary>
+</cvar>
+
<cvar name="PCHSTOP">
<summary>
This variable specifies how much of a source file is precompiled. This
The flags passed to the resource compiler by the RES builder.
</summary>
</cvar>
+
+<cvar name="RCINCFLAGS">
+<summary>
+An automatically-generated construction variable
+containing the command-line options
+for specifying directories to be searched
+by the resource compiler.
+The value of &cv-RCINCFLAGS; is created
+by appending &cv-RCINCPREFIX; and &cv-RCINCSUFFIX;
+to the beginning and end
+of each directory in &cv-CPPPATH;.
+</summary>
+</cvar>
+
+<cvar name="RCINCPREFIX">
+<summary>
+The prefix (flag) used to specify an include directory
+on the resource compiler command line.
+This will be appended to the beginning of each directory
+in the &cv-CPPPATH; construction variable
+when the &cv-RCINCFLAGS; variable is expanded.
+</summary>
+</cvar>
+
+<cvar name="RCINCSUFFIX">
+<summary>
+The suffix used to specify an include directory
+on the resource compiler command line.
+This will be appended to the end of each directory
+in the &cv-CPPPATH; construction variable
+when the &cv-RCINCFLAGS; variable is expanded.
+</summary>
+</cvar>
-->
<tool name="msvs">
<summary>
-XXX
+Sets construction variables for Microsoft Visual Studio.
</summary>
+<sets>
+MSVSPROJECTCOM
+MSVSSOLUTIONCOM
+MSVSSCONSCRIPT
+MSVSSCONS
+MSVSSCONSFLAGS
+MSVSSCONSCOM
+MSVSBUILDCOM
+MSVSREBUILDCOM
+MSVSCLEANCOM
+MSVSENCODING
+</sets>
+<uses>
+</uses>
</tool>
<builder name ="MSVSProject">
Tells the MS Visual Studio tool(s) to use
the MFC directories in its default paths
for compiling and linking.
-Under MSVS version 6,
+The &cv-MSVS_USE_MFC_DIRS; variable has no effect if the
+<envar>INCLUDE</envar>
+or
+<envar>LIB</envar>
+environment variables are set explictly.
+
+Under Visual Studio version 6,
setting
-<envar>MSVS_USE_MFC_DIRS</envar>
+&cv-MSVS_USE_MFC_DIRS;
to a non-zero value
adds the
<filename>ATL\include</filename>
<envar>INCLUDE</envar>
external environment variable,
and adds the
-<envar>MFC\lib</envar>
+<filename>MFC\lib</filename>
directory to
the default
<envar>LIB</envar>
external environment variable.
-Under MSVS version 7,
+
+Under Visual Studio version 7,
setting
-<envar>MSVS_USE_MFC_DIRS</envar>
+&cv-MSVS_USE_MFC_DIRS;
to a non-zero value
adds the
-<envar>atlmfc\include</envar>
+<filename>atlmfc\include</filename>
directory to the default
<envar>INCLUDE</envar>
external environment variable,
and adds the
-<envar>atlmfc\lib</envar>
+<filename>atlmfc\lib</filename>
directory to the default
<envar>LIB</envar>
external environment variable.
-The current default value is
-<literal>1</literal>,
-which means these directories
-are added to the paths by default.
-This default value is likely to change
-in a future release,
-so users who want the ATL and MFC
-values included in their paths
-are encouraged to enable the
-<envar>MSVS_USE_MFC_DIRS</envar>
-value explicitly
-to avoid future incompatibility.
-This variable has no effect if the
+
+Under Visual Studio version 8,
+setting
+&cv-MSVS_USE_MFC_DIRS;
+to a non-zero value will,
+by default,
+add the
+<filename>atlmfc\include</filename>
+directory to the default
<envar>INCLUDE</envar>
-or
+external environment variable,
+and the
+<filename>atlmfc\lib</filename>
+directory to the default
<envar>LIB</envar>
-environment variables are set explictly.
+external environment variable.
+If, however, the
+<envar>['MSVS']['PLATFORMSDKDIR']</envar>
+variable is set,
+then the
+<filename>mfc</filename>
+and the
+<filename>atl</filename>
+subdirectories of the
+<envar>PLATFORMSDKDIR</envar>
+are added to the default value of the
+<envar>INCLUDE</envar>
+external environment variable,
+and the default value of the
+<envar>LIB</envar>
+external environment variable is left untouched.
</summary>
</cvar>
-->
<tool name="mwcc">
<summary>
-XXX
+Sets construction variables for the Metrowerks CodeWarrior compiler.
</summary>
+<sets>
+MWCW_VERSIONS
+MWCW_VERSION
+<!--CCCOMFLAGS-->
+CC
+CCCOM
+CXX
+CXXCOM
+SHCC
+SHCCFLAGS
+SHCFLAGS
+SHCCCOM
+SHCXX
+SHCXXFLAGS
+SHCXXCOM
+CFILESUFFIX
+CXXFILESUFFIX
+CPPDEFPREFIX
+CPPDEFSUFFIX
+INCPREFIX
+INCSUFFIX
+</sets>
+<uses>
+CCCOMSTR
+CXXCOMSTR
+SHCCCOMSTR
+SHCXXCOMSTR
+</uses>
</tool>
<cvar name="MWCW_VERSION">
-->
<tool name="mwld">
<summary>
-XXX
+Sets construction variables for the Metrowerks CodeWarrior linker.
</summary>
+<sets>
+AR
+ARCOM
+LIBDIRPREFIX
+LIBDIRSUFFIX
+LIBLINKPREFIX
+LIBLINKSUFFIX
+LINK
+LINKCOM
+SHLINK
+SHLINKFLAGS
+SHLINKCOM
+<!--SHLIBEMITTER-->
+</sets>
+<uses>
+</uses>
</tool>
-->
<tool name="nasm">
<summary>
-XXX
+Sets construction variables for the
+<application>nasm</application> Netwide Assembler.
</summary>
+<sets>
+AS
+ASFLAGS
+ASPPFLAGS
+ASCOM
+ASPPCOM
+</sets>
+<uses>
+ASCOMSTR
+ASPPCOMSTR
+</uses>
</tool>
This file is processed by the bin/SConsDoc.py module.
See its __doc__ string for a discussion of the format.
-->
+<tool name="pdf">
+<summary>
+Sets construction variables for the Portable Document Format builder.
+</summary>
+<sets>
+PDFPREFIX
+PDFSUFFIX
+</sets>
+</tool>
+
<builder name="PDF">
<summary>
Builds a <filename>.pdf</filename> file
-->
<tool name="pdflatex">
<summary>
-XXX
+Sets construction variables for the &pdflatex; utility.
</summary>
+<sets>
+PDFLATEX
+PDFLATEXFLAGS
+PDFLATEXCOM
+LATEXRETRIES
+</sets>
+<uses>
+PDFLATEXCOMSTR
+</uses>
</tool>
+
+<cvar name="PDFLATEX">
+<summary>
+The &pdflatex; utility.
+</summary>
+</cvar>
+
+<cvar name="PDFLATEXCOM">
+<summary>
+The command line used to call the &pdflatex; utility.
+</summary>
+</cvar>
+
+<cvar name="PDFLATEXCOMSTR">
+<summary>
+The string displayed when calling the &pdflatex; utility.
+If this is not set, then &cv-link-PDFLATEXCOM; (the command line) is displayed.
+
+<example>
+env = Environment(PDFLATEX;COMSTR = "Building $TARGET from LaTeX input $SOURCES")
+</example>
+</summary>
+</cvar>
+
+<cvar name="PDFLATEXFLAGS">
+<summary>
+General options passed to the &pdflatex; utility.
+</summary>
+</cvar>
-->
<tool name="pdftex">
<summary>
-XXX
+Sets construction variables for the &pdftex; utility.
</summary>
+<sets>
+PDFTEX
+PDFTEXFLAGS
+PDFTEXCOM
+PDFLATEX
+PDFLATEXFLAGS
+PDFLATEXCOM
+LATEXRETRIES
+</sets>
+<uses>
+PDFTEXCOMSTR
+PDFLATEXCOMSTR
+</uses>
</tool>
+
+<cvar name="PDFTEX">
+<summary>
+The &pdftex; utility.
+</summary>
+</cvar>
+
+<cvar name="PDFTEXCOM">
+<summary>
+The command line used to call the &pdftex; utility.
+</summary>
+</cvar>
+
+<cvar name="PDFTEXCOMSTR">
+<summary>
+The string displayed when calling the &pdftex; utility.
+If this is not set, then &cv-link-PDFTEXCOM; (the command line) is displayed.
+
+<example>
+env = Environment(PDFTEXCOMSTR = "Building $TARGET from TeX input $SOURCES")
+</example>
+</summary>
+</cvar>
+
+<cvar name="PDFTEXFLAGS">
+<summary>
+General options passed to the &pdftex; utility.
+</summary>
+</cvar>
-->
<tool name="qt">
<summary>
-XXX
+Sets construction variables for building Qt applications.
</summary>
+<sets>
+QTDIR
+QT_BINPATH
+QT_CPPPATH
+QT_LIBPATH
+QT_MOC
+QT_UIC
+QT_LIB
+QT_AUTOSCAN
+QT_UICIMPLFLAGS
+QT_UICDECLFLAGS
+QT_MOCFROMHFLAGS
+QT_MOCFROMCXXFLAGS
+QT_UICDECLPREFIX
+QT_UICDECLSUFFIX
+QT_UICIMPLPREFIX
+QT_UICIMPLSUFFIX
+QT_MOCHPREFIX
+QT_MOCHSUFFIX
+QT_MOCCXXPREFIX
+QT_MOCCXXSUFFIX
+QT_UISUFFIX
+QT_UICCOM
+QT_MOCFROMHCOM
+QT_MOCFROMCXXCOM
+</sets>
+<uses>
+</uses>
</tool>
<builder name="Moc">
</summary>
</cvar>
-<cvar name="QT_MOCFROMCPPFLAGS">
+<cvar name="QT_MOCFROMCXXFLAGS">
<summary>
Default value is '-i'. These flags are passed to moc, when moccing a
-cpp file.
+C++ file.
</summary>
</cvar>
-->
<tool name="rmic">
<summary>
-XXX
+Sets construction variables for the &rmic; utility.
</summary>
+<sets>
+RMIC
+RMICFLAGS
+RMICCOM
+JAVACLASSSUFFIX
+</sets>
+<uses>
+RMICCOMSTR
+</uses>
</tool>
<builder name="RMIC">
-->
<tool name="rpcgen">
<summary>
-XXX
+Sets construction variables for building with RPCGEN.
</summary>
+<sets>
+RPCGEN
+RPCGENFLAGS
+RPCGENCLIENTFLAGS
+RPCGENHEADERFLAGS
+RPCGENSERVICEFLAGS
+RPCGENXDRFLAGS
+</sets>
+<uses>
+</uses>
</tool>
<builder name="RPCGenClient">
-->
<tool name="sgiar">
<summary>
-XXX
+Sets construction variables for the SGI library archiver.
</summary>
+<sets>
+AR
+ARFLAGS
+ARCOMSTR
+SHLINK
+SHLINKFLAGS
+LIBPREFIX
+LIBSUFFIX
+</sets>
+<uses>
+ARCOMSTR
+SHLINKCOMSTR
+</uses>
</tool>
-->
<tool name="sgic++">
<summary>
-XXX
+Sets construction variables for the SGI C++ compiler.
</summary>
+<sets>
+CXX
+CXXFLAGS
+SHCXX
+SHOBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+</sets>
</tool>
-->
<tool name="sgicc">
<summary>
-XXX
+Sets construction variables for the SGI C compiler.
</summary>
+<sets>
+CXX
+SHOBJSUFFIX
+<!--STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME-->
+</sets>
+<uses>
+</uses>
</tool>
-->
<tool name="sgilink">
<summary>
-XXX
+Sets construction variables for the SGI linker.
</summary>
+<sets>
+LINK
+SHLINKFLAGS
+RPATHPREFIX
+RPATHSUFFIX
+</sets>
</tool>
-->
<tool name="sunar">
<summary>
-XXX
+Sets construction variables for the Sun library archiver.
</summary>
+<sets>
+AR
+ARFLAGS
+ARCOM
+SHLINK
+SHLINKFLAGS
+SHLINKCOM
+LIBPREFIX
+LIBSUFFIX
+</sets>
+<uses>
+ARCOMSTR
+SHLINKCOMSTR
+</uses>
</tool>
-->
<tool name="sunc++">
<summary>
-XXX
+Sets construction variables for the Sun C++ compiler.
</summary>
+<sets>
+CXX
+SHCXX
+CXXVERSION
+SHCXXFLAGS
+SHOBJPREFIX
+SHOBJSUFFIX
+</sets>
</tool>
-->
<tool name="suncc">
<summary>
-XXX
+Sets construction variables for the Sun C compiler.
</summary>
+<sets>
+CXX
+SHCCFLAGS
+SHOBJPREFIX
+SHOBJSUFFIX
+</sets>
</tool>
-->
<tool name="sunlink">
<summary>
-XXX
+Sets construction variables for the Sun linker.
</summary>
+<sets>
+SHLINKFLAGS
+RPATHPREFIX
+RPATHSUFFIX
+</sets>
</tool>
-->
<tool name="swig">
<summary>
-XXX
+Sets construction variables for the SWIG interface generator.
</summary>
+<sets>
+SWIG
+SWIGFLAGS
+SWIGCFILESUFFIX
+SWIGCXXFILESUFFIX
+SWIGCOM
+</sets>
+<uses>
+SWIGCOMSTR
+</uses>
</tool>
<cvar name="SWIG">
-->
<tool name="tar">
<summary>
-XXX
+Sets construction variables for the &tar; archiver.
</summary>
+<sets>
+TAR
+TARFLAGS
+TARCOM
+TARSUFFIX
+</sets>
+<uses>
+TARCOMSTR
+</uses>
</tool>
<builder name="Tar">
-->
<tool name="tex">
<summary>
-XXX
+Sets construction variables for the TeX formatter and typesetter.
</summary>
+<sets>
+TEX
+TEXFLAGS
+TEXCOM
+LATEX
+LATEXFLAGS
+LATEXCOM
+BIBTEX
+BIBTEXFLAGS
+BIBTEXCOM
+MAKEINDEX
+MAKEINDEXFLAGS
+MAKEINDEXCOM
+</sets>
+<uses>
+TEXCOMSTR
+LATEXCOMSTR
+BIBTEXCOMSTR
+MAKEINDEXCOMSTR
+</uses>
</tool>
<cvar name="BIBTEX">
-->
<tool name="tlib">
<summary>
-XXX
+Sets construction variables for the Borlan
+<application>tib</application> library archiver.
</summary>
+<sets>
+AR
+ARFLAGS
+ARCOM
+LIBPREFIX
+LIBSUFFIX
+</sets>
+<uses>
+ARCOMSTR
+</uses>
</tool>
-->
<tool name="yacc">
<summary>
-XXX
+Sets construction variables for the &yacc; parse generator.
</summary>
+<sets>
+YACC
+YACCFLAGS
+YACCCOM
+YACCHFILESUFFIX
+YACCHXXFILESUFFIX
+YACCVCGFILESUFFIX
+</sets>
+<uses>
+YACCCOMSTR
+</uses>
</tool>
<cvar name="YACC">
-->
<tool name="zip">
<summary>
-XXX
+Sets construction variables for the &zip; archiver.
</summary>
+<sets>
+ZIP
+ZIPFLAGS
+ZIPCOM
+ZIPCOMPRESSION
+ZIPSUFFIX
+</sets>
+<uses>
+ZIPCOMSTR
+</uses>
</tool>
<builder name="Zip">
General options passed to the zip utility.
</summary>
</cvar>
+
+<cvar name="ZIPSUFFIX">
+<summary>
+The suffix used for zip file names.
+</summary>
+</cvar>
import string
import sys
-Version = "0.96.96"
+Version = "0.97"
man_pages = [
'scons.1',
--- /dev/null
+#!/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__"
+
+"""
+Make sure that target lists of intermixed Node.FS.Dir and Node.FS.File
+Nodes work with a DirEntryScanner.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+test.subdir('src', ['src', 'dir'])
+
+test.write('SConstruct', """\
+import os
+import shutil
+
+import SCons.Defaults
+
+def copier(target, source, env):
+ os.rmdir('build')
+ shutil.copytree(str(source[0]), 'build')
+ return 0
+
+Copier = Builder(action = copier,
+ target_scanner = SCons.Defaults.DirEntryScanner,
+ target_factory = Entry,
+ source_factory = Entry)
+
+env = Environment(BUILDERS = {'Copier': Copier})
+env.Copier(['build/dir', 'build/file1'], ['src'])
+""")
+
+test.write(['src', 'file1'], "src/file1\n")
+
+test.write(['src', 'dir', 'file2'], "src/dir/file2\n")
+test.write(['src', 'dir', 'file3'], "src/dir/file3\n")
+
+test.run(arguments = '.')
+
+test.must_match(['build', 'file1'], "src/file1\n")
+
+test.must_match(['build', 'dir', 'file2'], "src/dir/file2\n")
+test.must_match(['build', 'dir', 'file3'], "src/dir/file3\n")
+
+test.pass_test()
--- /dev/null
+#!/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__"
+
+"""
+Test for a specific race condition that used to stop a build cold when
+a Node's ref_count would get decremented past 0 and "disappear" from
+the Taskmaster's walk of the dependency graph.
+
+Note that this test does not fail every time, but would at least fail
+more than 60%-70% of the time on the system(s) I tested.
+
+The rather complicated set up here creates a condition where,
+after building four "object files" simultaneously while running with
+-j4, sets up a race condition amongst the three dependencies of the
+c6146/cpumanf.out file, where two of the dependencies are built at the
+same time (that is, by the same command) and one is built separately.
+
+We used to detect Nodes that had been started but not finished building
+and just set the waiting ref_count to the number of Nodes. In this case,
+if we got unlucky, we'd re-visit the Nodes for the two files first and
+set the ref_count to two *before* the command that built individual node
+completed and decremented the ref_count from two to one. Then when the
+two files completed, we'd update the ref_count to 1 - 2 = -1, which would
+cause the Taskmaster to *not* "wake up" the Node because it's ref_count
+hadn't actually reached 0.
+
+(The solution was to not set the ref_count, but to add to it only the
+Nodes that were, in fact, added to the waiting_parents lists of various
+child Nodes.)
+"""
+
+import TestSCons
+
+_python_ = TestSCons._python_
+
+test = TestSCons.TestSCons()
+
+test.write('build.py', """\
+import string
+import sys
+import time
+args = sys.argv[1:]
+outputs = []
+while args:
+ if args[0][0] != '-':
+ break
+ arg = args.pop(0)
+ if arg == '-o':
+ outputs.append(args.pop(0))
+ continue
+ if arg == '-s':
+ time.sleep(int(args.pop(0)))
+contents = ''
+for ifile in args:
+ contents = contents + open(ifile, 'rb').read()
+for ofile in outputs:
+ ofp = open(ofile, 'wb')
+ ofp.write('%s: building from %s\\n' % (ofile, string.join(args)))
+ ofp.write(contents)
+ ofp.close()
+""")
+
+#
+#
+#
+
+test.write('SConstruct', """\
+env = Environment()
+cmd = r'%(_python_)s build.py -o $TARGET $SOURCES'
+f1 = env.Command('c6416/cpumanf/file1.obj', 'file1.c', cmd)
+f2 = env.Command('c6416/cpumanf/file2.obj', 'file2.c', cmd)
+f3 = env.Command('c6416/cpumanf/file3.obj', 'file3.c', cmd)
+f4 = env.Command('c6416/cpumanf/file4.obj', 'file4.c', cmd)
+f5 = env.Command('c6416/cpumanf/file5.obj', 'file5.c', cmd)
+f6 = env.Command('c6416/cpumanf/file6.obj', 'file6.c', cmd)
+
+objs = f1 + f2 + f3 + f4 + f5 + f6
+
+btc = env.Command('build/target/cpumanf.out', 'c6416/cpumanf.out', cmd)
+
+addcheck_obj = env.Command('addcheck.obj', 'addcheck.c', cmd)
+
+addcheck_exe = env.Command('addcheck.exe', addcheck_obj, cmd)
+
+cmd2 = r'%(_python_)s build.py -s 2 -o ${TARGETS[0]} -o ${TARGETS[1]} $SOURCES'
+
+cksums = env.Command(['c6416/cpumanf_pre_cksum.out',
+ 'c6416/cpumanf_pre_cksum.map'],
+ objs,
+ cmd2)
+
+cpumanf_out = env.Command('c6416/cpumanf.out',
+ cksums + addcheck_exe,
+ cmd)
+
+cpumanf = env.Alias('cpumanf', objs + btc)
+
+env.Command('after.out', cpumanf, r'%(_python_)s build.py -o $TARGET after.in')
+""" % locals())
+
+test.write('file1.c', "file1.c\n")
+test.write('file2.c', "file2.c\n")
+test.write('file3.c', "file3.c\n")
+test.write('file4.c', "file4.c\n")
+test.write('file5.c', "file5.c\n")
+test.write('file6.c', "file6.c\n")
+
+test.write('addcheck.c', "addcheck.c\n")
+
+test.write('after.in', "after.in\n")
+
+test.run(arguments = '-j4 after.out')
+
+test.must_match('after.out', """\
+after.out: building from after.in
+after.in
+""")
+
+test.write('file5.c', "file5.c modified\n")
+
+test.write('after.in', "after.in modified\n")
+
+test.run(arguments = '-j4 after.out')
+
+test.must_match('after.out', """\
+after.out: building from after.in
+after.in modified
+""")
+
+test.pass_test()
spawnv(os.P_NOWAIT, self.p4d, args)
self.sleep(2)
else:
- self.p4portflags = ['-p', self.host + ':1666']
+ import socket
+ s = socket.socket()
+ host_port = (self.host, 1666)
+ try:
+ s.connect(host_port)
+ except socket.error:
+ self.skip_test("No Perforce server found; skipping test(s).\n")
+ else:
+ s.close()
+
+ self.p4portflags = ['-p', '%s:%s' % host_port]
try:
self.p4('obliterate -y //%s/...' % self.depot)
self.p4('depot -d %s' % self.depot)
test = TestSCons.TestSCons()
+pdflatex = test.where_is('pdflatex')
+
+if not pdflatex:
+ test.skip_test("Could not find pdflatex; skipping test(s).\n")
+
test.write(['SConstruct'], """\
-PDF( 'bibtest.tex' )
+env = Environment(tools=['pdflatex', 'tex'])
+env.PDF( 'bibtest.tex' )
""")
test.write(['bibtest.tex'], r"""
'zip',
]
-if sys.platform == 'win32':
- tools.extend([
- '386asm',
- 'linkloc',
- ])
+#if sys.platform == 'win32':
+# Just comment out (for now?) due to registry dependency.
+# tools.extend([
+# '386asm',
+# 'linkloc',
+# ])
# Intel no compiler warning..
intel_no_compiler_warning = """