Scons

Latest version: v4.9.1

Safety actively analyzes 723158 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 10 of 14

0.96.93

NOTE: This is a pre-release of 0.97 for testing purposes.

From Anonymous:

- Allow Python Value Nodes to be Builder targets.

From Matthias:

- Only filter Visual Studio common filename prefixes on complete
directory names.

From Chad Austin:

- Fix the build of the SCons documentation on systems that don't
have "python" in the $PATH.

From Ken Boortz:

- Enhance ParseConfig() to recognize options that begin with '+'.

From John Calcote, Elliot Murphy:

- Document ways to override the CCPDBFLAGS variable to use the
Microsoft linker's /Zi option instead of the default /Z7.

From Christopher Drexler:

- Make SCons aware bibtex must be called if any \include files
cause creation of a bibliography.

- Make SCons aware that "\bilbiography" in TeX source files means
that related .bbl and .blg bibliography files will be created.
(NOTE: This still needs to search for the string in \include files.)

From David Gruener:

- Fix inconsistent handling of Action strfunction arguments.

- Preserve white space in display Action strfunction strings.

From James Y. Knight and Gerard Patel:

- Support creation of shared object files from assembly language.

From Steven Knight:

- Speed up the Taskmaster significantly by avoiding unnecessary
re-scans of Nodes to find out if there's work to be done, having it
track the currently-executed top-level target directly and not
through its presence on the target list, and eliminating some other
minor list(s), method(s) and manipulation.

- Fix the expansion of $TARGET and $SOURCE in the expansion of
$INSTALLSTR displayed for non-environment calls to InstallAs().

- Fix the ability to have an Alias() call refer to a directory
name that's not identified as a directory until later.

- Enhance runtest.py with an option to use QMTest as the harness.
This will become the default behavior as we add more functionality
to the QMTest side.

- Let linking on mingw use the default function that chooses $CC (gcc)
or $CXX (g++) depending on whether there are any C++ source files.

- Work around a bug in early versions of the Python 2.4 profile module
that caused the --profile= option to fail.

- Only call Options validators and converters once when initializing a
construction environment.

- Fix the ability of env.Append() and env.Prepend(), in all known Python
versions, to handle different input value types when the construction
variable being updated is a dictionary.

- Add a --cache-debug option for information about what files it's
looking for in a CacheDir().

- Document the difference in construction variable expansion between
{Action,Builder}() and env.{Action,Builder}().

- Change the name of env.Copy() to env.Clone(), keeping the old name
around for backwards compatibility (with the intention of eventually
phasing it out to avoid confusion with the Copy() Action factory).

From Arve Knudsen:

- Support cleaning and scanning SWIG-generated files.

From Carsten Koch:

- Allow selection of Visual Studio version by setting $MSVS_VERSION
after construction environment initialization.

From Jean-Baptiste Lab:

- Try using zipimport if we can't import Tool or Platform modules
using the normal "imp" module. This allows SCons to be packaged
using py2exe's all-in-one-zip-file approach.

From Ben Liblit:

- Do not re-scan files if the scanner returns no implicit dependencies.

From Sanjoy Mahajan:

- Change use of $SOURCES to $SOURCE in all TeX-related Tool modules.

From Joel B. Mohler:

- Make SCons aware that "\makeindex" in TeX source files means that
related .ilg, .ind and .idx index files will be created.
(NOTE: This still needs to search for the string in \include files.)

- Prevent scanning the TeX .aux file for additional files from
trying to remove it twice when the -c option is used.

From Leanid Nazdrynau:

- Give the MSVC RES (resource) Builder a src_builder list and a .rc
src_suffix so other builders can generate .rc files.

From Matthew A. Nicholson:

- Enhance Install() and InstallAs() to handle directory trees as sources.

From Jan Nijtmans:

- Don't use the -fPIC flag when using gcc on Windows (e.g. MinGW).

From Greg Noel:

- Add an env.ParseFlags() method that provides separate logic for
parsing GNU tool chain flags into a dictionary.

- Add an env.MergeFlags() method to apply an arbitrary dictionary
of flags to a construction environment's variables.

From Gary Oberbrunner:

- Fix parsing tripartite Intel C compiler version numbers on Linux.

- Extend the ParseConfig() function to recognize -arch and
-isysroot options.

- Have the error message list the known suffixes when a Builder call
can't build a source file with an unknown suffix.

From Karol Pietrzak:

- Avoid recursive calls to main() in the program snippet used by the
SConf subsystem to test linking against libraries. This changes the
default behavior of CheckLib() and CheckLibWithHeader() to print
"Checking for C library foo..." instead of "Checking for main()
in C library foo...".

From John Pye:

- Throw an exception if a command called by ParseConfig() or
ParseFlags() returns an error.

From Stefan Seefeld:

- Initial infrastructure for running SCons tests under QMTest.

From Sohail Somani:

- Fix tests that fail due to gcc warnings.

From Dobes Vandermeer:

- In stack traces, print the full paths of SConscript files.

From Atul Varma:

- Fix detection of Visual C++ Express Edition.

From Dobes Vandermeer:

- Let the src_dir option to the SConscript() function affect all the
the source file paths, instead of treating all source files paths
as relative to the SConscript directory itself.

From Nicolas Vigier:

- Fix finding Fortran modules in build directories.

- Fix use of BuildDir() when the source file in the source directory
is a symlink with a relative path.

From Edward Wang:

- Fix the Memoizer when the SCons Python modules are executed from
.pyo files at different locations from where they were compiled.

From Johan Zander:

- Fix missing os.path.join() when constructing the $FRAMEWORKSDKDIR/bin.

0.96.92

NOTE: This was a pre-release of 0.97 for testing purposes.

From Anonymous:

- Fix the intelc.py Tool module to not throw an exception if the
only installed version is something other than ia32.

- Set $CCVERSION when using gcc.

From Matthias:

- Support generating project and solution files for Microsoft
Visual Studio version 8.

- Support generating more than one project file for a Microsoft
Visual Studio solution file.

- Add support for a support "runfile" parameter to Microsoft
Visual Studio project file creation.

- Put the project GUID, not the solution GUID, in the right spot
in the solution file.

From Erling Andersen:

- Fix interpretation of Node.FS objects wrapped in Proxy instances,
allowing expansion of things like ${File(TARGET)} in command lines.

From Stanislav Baranov:

- Add a separate MSVSSolution() Builder, with support for the
following new construction variables: $MSVSBUILDCOM, $MSVSCLEANCOM,
$MSVSENCODING, $MSVSREBUILDCOM, $MSVSSCONS, $MSVSSCONSCOM,
$MSVSSCONSFLAGS, $MSVSSCONSCRIPT and $MSVSSOLUTIONCOM.

From Ralph W. Grosse-Kunstleve and Patrick Mezard:

- Remove unneceesary (and incorrect) SCons.Util strings on some function
calls in SCons.Util.

From Bob Halley:

- Fix C/C++ compiler selection on AIX to not always use the external $CC
environment variable.

From August Hörandl:

- Add a scanner for \include and \import files, with support for
searching a directory list in $TEXINPUTS (imported from the external
environment).

- Support $MAKEINDEX, $MAKEINDEXCOM, $MAKEINDEXCOMSTR and
$MAKEINDEXFLAGS for generating indices from .idx files.

From Steven Johnson:

- Add a NoClean() Environment method and function to override removal
of targets during a -c clean, including documentation and tests.

From Steven Knight:

- Check for whether files exist on disk by listing the directory
contents, not calling os.path.exists() file by file. This is
somewhat more efficient in general, and may be significantly
more efficient on Windows.

- Minor speedups in the internal is_Dict(), is_List() and is_String()
functions.

- Fix a signature refactoring bug that caused Qt header files to
get re-generated every time.

- Don't fail when writing signatures if the .sconsign.dblite file is
owned by a different user (e.g. root) from a previous run.

- When deleting variables from stacked OverrideEnvironments, don't
throw a KeyError if we were able to delte the variable from any
Environment in the stack.

- Get rid of the last indentation tabs in the SCons source files and
add -tt to the Python invocations in the packaging build and the
tests so they don't creep back in.

- In Visual Studio project files, put quotes around the -C directory
so everything works even if the path has spaces in it.

- The Intel Fortran compiler uses -object:$TARGET, not "-o $TARGET",
when building object files on Windows. Have the the ifort Tool
modify the default command lines appropriately.

- Document the --debug=explain option in the man page. (How did we
miss this?)

- Add a $LATEXRETRIES variable to allow configuration of the number of
times LaTex can be re-called to try to resolve undefined references.

- Change the order of the arguments to Configure.Checklib() to match
the documentation.

- Handle signature calculation properly when the Python function used
for a FunctionAction is an object method.

- On Windows, assume that absolute path names without a drive letter
refer to the drive on which the SConstruct file lives.

- Add /usr/ccs/bin to the end of the the default external execution
PATH on Solaris.

- Add $PKGCHK and $PKGINFO variables for use on Solaris when searching
for the SunPRO C++ compiler. Make the default value for $PKGCHK
be /usr/sbin/pgkchk (since /usr/sbin isn't usually on the external
execution $PATH).

- Fix a man page example of overriding variables when calling
SharedLibrary() to also set the $LIBSUFFIXES variable.

- Add a --taskmastertrace=FILE option to give some insight on how
the taskmaster decides what Node to build next.

- Changed the names of the old $WIN32DEFPREFIX, $WIN32DEFSUFFIX,
$WIN32DLLPREFIX and $WIN32IMPLIBPREFIX construction variables to
new $WINDOWSDEFPREFIX, $WINDOWSDEFSUFFIX, $WINDOWSDLLPREFIX and
$WINDOWSIMPLIBPREFIX construction variables. The old names are now
deprecated, but preserved for backwards compatibility.

- Fix (?) a runtest.py hang on Windows when the --xml option is used.

- Change the message when an error occurs trying to interact with the
file system to report the target(s) in square brackets (as before) and
the actual file or directory that encountered the error afterwards.

From Chen Lee:

- Add x64 support for Microsoft Visual Studio 8.

From Baptiste Lepilleur:

- Support the --debug=memory option on Windows when the Python version
has the win32process and win32api modules.

- Add support for Visual Studio 2005 Pro.

- Fix portability issues in various tests: test/Case.py,
Test/Java/{JAR,JARCHDIR,JARFLAGS,JAVAC,JAVACFLAGS,JAVAH,RMIC}.py,
test/MSVS/vs-{6.0,7.0,7.1,8.0}-exec.py,
test/Repository/{Java,JavaH,RMIC}.py,
test/QT/{generated-ui,installed,up-to-date,warnings}.py,
test/ZIP/ZIP.py.

- Ignore pkgchk errors on Solaris when searching for the C++ compiler.

- Speed up the SCons/EnvironmentTests.py unit tests.

- Add a --verbose= option to runtest.py to print executed commands
and their output at various levels.

From Christian Maaser:

- Add support for Visual Studio Express Editions.

- Add support for Visual Studio 8 *.manifest files, includng
new $WINDOWS_INSERT_MANIFEST, $WINDOWSPROGMANIFESTSUFFIX,
$WINDOWSPROGMANIFESTPREFIX, $WINDOWSPROGMANIFESTSUFFIX,
$WINDOWSSHLIBMANIFESTPREFIX and $WINDOWSSHLIBMANIFESTSUFFIX
construction variables.

From Adam MacBeth:

- Fix detection of additional Java inner classes following use of a
"new" keyword inside an inner class.

From Sanjoy Mahajan:

- Correct TeX-related command lines to just $SOURCE, not $SOURCES

From Patrick Mezard:

- Execute build commands for a command-line target if any of the
files built along with the target is out of date or non-existent,
not just if the command-line target itself is out of date.

- Fix the -n option when used with -c to print all of the targets
that will be removed for a multi-target Builder call.

- If there's no file in the source directory, make sure there isn't
one in the build directory, too, to avoid dangling files left
over from previous runs when a source file is removed.

- Allow AppendUnique() and PrependUnique() to append strings (and
other atomic objects) to lists.

From Joel B. Mohler:

- Extend latex.py, pdflatex.py, pdftex.py and tex.py so that building
from both TeX and LaTeX files uses the same logic to call $BIBTEX
when it's necessary, to call $MAKEINDEX when it's necessary, and to
call $TEX or $LATEX multiple times to handle undefined references.

- Add an emitter to the various TeX builders so that the generated
.aux and .log files also get deleted by the -c option.

From Leanid Nazdrynau:

- Fix the Qt UIC scanner to work with generated .ui files (by using
the FindFile() function instead of checking by-hand for the file).

From Jan Nieuwenhuizen:

- Fix a problem with interpreting quoted argument lists on command lines.

From Greg Noel:

- Add /sw/bin to the default execution PATH on Mac OS X.

From Kian Win Ong:

- When building a .jar file and there is a $JARCHDIR, put the -C
in front of each .class file on the command line.

- Recognize the Java 1.5 enum keyword.

From Asfand Yar Qazi:

- Add /opt/bin to the default execution PATH on all POSIX platforms
(between /usr/local/bin and /bin).

From Jon Rafkind:

- Fix the use of Configure() contexts from nested subsidiary
SConscript files.

From Christoph Schulz:

- Add support for $CONFIGUREDIR and $CONFIGURELOG variables to control
the directory and logs for configuration tests.

- Add support for a $INSTALLSTR variable.

- Add support for $RANLIBCOM and $RANLIBCOMSTR variables (which fixes
a bug when setting $ARCOMSTR).

From Amir Szekely:

- Add use of $CPPDEFINES to $RCCOM (resource file compilation) on MinGW.

From Erick Tryzelaar:

- Fix the error message when trying to report that a given option is
not gettable/settable from an SConscript file.

From Dobes Vandermeer:

- Add support for SCC and other settings in Microsoft Visual
Studio project and solution files: $MSVS_PROJECT_BASE_PATH,
$MSVS_PROJECT_GUID, $MSVS_SCC_AUX_PATH, $MSVS_SCC_LOCAL_PATH,
$MSVS_SCC_PROJECT_NAME, $MSVS_SCC_PROVIDER,

- Add support for using a $SCONS_HOME variable (imported from the
external environment, or settable internally) to put a shortened
SCons execution line in the Visual Studio project file.

From David J. Van Maren:

- Only filter common prefixes from source files names in Visual Studio
project files if the prefix is a complete (sub)directory name.

From Thad Ward:

- If $MSVSVERSIONS is already set, don't overwrite it with
information from the registry.

0.96.91

NOTE: This was a pre-release of 0.97 for testing purposes.

From Chad Austin:

- Have the environment store the toolpath and re-use it to find Tools
modules during later Copy() or Tool() calls (unless overridden).

- Normalize the directory path names in SConsignFile() database
files so the same signature file can interoperate on Windows and
non-Windows systems.

- Make --debug=stacktrace print a stacktrace when a UserError is thrown.

- Remove an old, erroneous cut-and-paste comment in Scanner/Dir.py.

From Stanislav Baranov:

- Make it possible to support with custom Alias (sub-)classes.

- Allow Builders to take empty source lists when called.

- Allow access to both TARGET and SOURCE in $*PATH expansions.

- Allow SConscript files to modify BUILD_TARGETS.

From Timothee Besset:

- Add support for Objective C/C++ .m and .mm file suffixes (for
Mac OS X).

From Charles Crain

- Fix the PharLap linkloc.py module to use target+source arguments
when calling env.subst().

From Bjorn Eriksson:

- Fix an incorrect Command() keyword argument in the man page.

- Add a $TEMPFILEPREFIX variable to control the prefix or flag used
to pass a long-command-line-execution tempfile to a command.

From Steven Knight:

- Enhanced the SCons setup.py script to install man pages on
UNIX/Linux systems.

- Add support for an Options.FormatOptionHelpText() method that can
be overridden to customize the format of Options help text.

- Add a global name for the Entry class (which had already been
documented).

- Fix re-scanning of generated source files for implicit dependencies
when the -j option is used.

- Fix a dependency problem that caused $LIBS scans to not be added
to all of the targets in a multiple-target builder call, which
could cause out-of-order builds when the -j option is used.

- Store the paths of source files and dependencies in the .sconsign*
file(s) relative to the target's directory, not relative to the
top-level SConstruct directory. This starts to make it possible to
subdivide the dependency tree arbitrarily by putting an SConstruct
file in every directory and using content signatures.

- Add support for $YACCHFILESUFFIX and $YACCHXXFILESUFFIX variables
that accomodate parser generators that write header files to a
different suffix than the hard-coded .hpp when the -d option is used.

- The default behavior is now to store signature information in a
single .sconsign.dblite file in the top-level SConstruct directory.
The old behavior of a separate .sconsign file in each directory can
be specified by calling SConsignFile(None).

- Remove line number byte codes within the signature calculation
of Python function actions, so that changing the location of an
otherwise unmodified Python function doesn't cause rebuilds.

- Fix AddPreAction() and AddPostAction() when an action has more than
one target file: attach the actions to the Executor, not the Node.

- Allow the source directory of a BuildDir / build_dir to be outside
of the top-level SConstruct directory tree.

- Add a --debug=nomemoizer option that disables the Memoizer for clearer
looks at the counts and profiles of the underlying function calls,
not the Memoizer wrappers.

- Print various --debug= stats even if we exit early (e.g. using -h).

- Really only use the cached content signature value if the file
is older than --max-drift, not just if --max-drift is set.

- Remove support for conversion from old (pre 0.96) .sconsign formats.

- Add support for a --diskcheck option to enable or disable various
on-disk checks: that File and Dir nodes match on-disk entries;
whether an RCS file exists for a missing source file; whether an
SCCS file exists for a missing source file.

- Add a --raw argument to the sconsign script, so it can print a
raw representation of each entry's NodeInfo dictionary.

- Add the 'f90' and 'f95' tools to the list of Fortran compilers
searched for by default.

- Add the +Z option by default when compiling shared objects on
HP-UX.

From Chen Lee:

- Handle Visual Studio project and solution files in Unicode.

From Sanjoy Mahajan:

- Fix a bad use of Copy() in an example in the man page, and a
bad regular expression example in the man page and User's Guide.

From Shannon Mann:

- Have the Visual Studio project file(s) echo "Starting SCons" before
executing SCons, mainly to work around a quote-stripping bug in
(some versions of?) the Windows cmd command executor.

From Georg Mischler:

- Remove the space after the -o option when invoking the Borland
BCC compiler; some versions apparently require that the file name
argument be concatenated with the option.

From Leanid Nazdrynau:

- Fix the Java parser's handling of backslashes in strings.

From Greg Noel:

- Add construction variables to support frameworks on Mac OS X:
$FRAMEWORKS, $FRAMEWORKPREFIX, $FRAMEWORKPATH, $FRAMEWORKPATHPREFIX.

- Re-order link lines so the -o option always comes right after the
command name.

From Gary Oberbrunner:

- Add support for Intel C++ beta 9.0 (both 32 and 64 bit versions).

- Document the new $FRAMEWORK* variables for Mac OS X.

From Karol Pietrzak:

- Add $RPATH (-R) support to the Sun linker Tool (sunlink).

- Add a description of env.subst() to the man page.

From Chris Prince:

- Look in the right directory, not always the local directory, for a
same-named file or directory conflict on disk.

- On Windows, preserve the external environment's %SYSTEMDRIVE%
variable, too.

From Craig Scott:

- Have the Fortran module emitter look for Fortan modules to be created
relative to $FORTRANMODDIR, not the top-level directory.

- When saving Options to a file, run default values through the
converter before comparing them with the set values. This correctly
suppresses Boolean Option values from getting written to the saved
file when they're one of the many synonyms for a default True or
False value.

- Fix the Fortran Scanner's ability to handle a module being used
in the same file in which it is defined.

From Steve-o:

- Add the -KPIC option by default when compiling shared objects on
Solaris.

- Change the default suffix for Solaris objects to .o, to conform to
Sun WorkShop's expectations. Change the profix to so_ so they can
still be differentiated from static objects in the same directory.

From Amir Szekely:

- When calling the resource compiler on MinGW, add --include-dir and
the source directory so it finds the source file.

- Update EnsureSConsVersion() to support revision numbers.

From Greg Ward:

- Fix a misplaced line in the man page.

0.96.90

NOTE: This was a pre-release of 0.97 for testing purposes.

From Anonymous:

- Fix Java parsing to avoid erroneously identifying a new array
of class instances as an anonymous inner class.

- Fix a typo in the man page description of PathIsDirCreate.

From Chad Austin:

- Allow Help() to be called multiple times, appending to the help
text each call.

- Allow Tools found on a toolpath to import Python modules from
their local directory.

From Steve Christensen:

- Handle exceptions from Python functions as build actions.

- Add a set of canned PathOption validators: PathExists (the default),
PathIsFile, PathIsDir and PathIsDirCreate.

From Matthew Doar:

- Add support for .lex and .yacc file suffixes for Lex and Yacc files.

From Eric Frias:

- Huge performance improvement: wrap the tuples representing an
include path in an object, so that the time it takes to hash the
path doesn't grow porportionally to the length of the path.

From Gottfried Ganssauge:

- Fix SCons on SuSE/AMD-64 Linux by having the wrapper script also
check for the build engine in the parent directory of the Python
library directory (/usr/lib64 instead of /usr/lib).

From Stephen Kennedy:

- Speed up writing the .sconsign file at the end of a run by only
calling sync() once at the end, not after every entry.

From Steven Knight:

- When compiling with Microsoft Visual Studio, don't include the ATL and
MFC directories in the default INCLUDE and LIB environment variables.

- Remove the following deprecated features: the ParseConfig()
global function (deprecated in 0.93); the misspelled "validater"
keyword to the Options.Add() method (deprecated in 0.91); the
SetBuildSignatureType(), SetContentSignatureType(), SetJobs() and
GetJobs() global functions (deprecated in 0.14).

- Fix problems with corrupting the .sconsign.dblite file when
interrupting builds by writing to a temporary file and renaming,
not writing the file directly.

- Fix a 0.96 regression where when running with -k, targets built from
walking dependencies later on the command line would not realize
that a dependency had failed an earlier build attempt, and would
try to rebuild the dependent targets.

- Change the final messages when using -k and errors occur from
"{building,cleaning} terminated because of errors" to "done
{building,cleaning} targets (errors occurred during {build,clean})."

- Allow Configure.CheckFunc() to take an optional header argument
(already supported by Conftest.py) to specify text at the top of
the compiled test file.

- Fix the --debug=explain output when a Python function action changed
so it prints a meaningful string, not the binary representation of
the function contents.

- Allow a ListOption's default value(s) to be a Python list of specified
values, not just a string containing a comma-separated list of names.

- Add a ParseDepends() function that will parse up a list of explicit
dependencies from a "make depend" style file.

- Support the ability to change directory when executing an Action
through "chdir" keyword arguments to Action and Builder creation
and calls.

- Fix handling of Action ojects (and other callables that don't match
our calling arguments) in construction variable expansions.

- On Win32, install scons.bat in the Python directory when installing
from setup.py. (The bdist_wininst installer was already doing this.)

- Fix env.SConscript() when called with a list of SConscipt files.
(The SConscript() global function already worked properly.)

- Add a missing newline to the end of the --debug=explain "unknown
reasons" message.

- Enhance ParseConfig() to work properly for spaces in between the -I,
-L and -l options and their arguments.

- Packaging build fix: Rebuild the files that are use to report the
--version of SCons whenever the development version number changes.

- Fix the ability to specify a target_factory of Dir() to a Builder,
which the default create-a-directory Builder was interfering with.

- Mark a directory as built if it's created as part of the preparation
for another target, to avoid trying to build it again when it comes
up in the target list.

- Allow a function with the right calling signature to be put directly
in an Environment's BUILDERS dictionary, making for easier creation
and use of wrappers (pseudo-Builders) that call other Builders.

- On Python 2.x, wrap lists of Nodes returned by Builders in a UserList
object that adds a method that makes str() object return a string
with all of the Nodes expanded to their path names. (Builders under
Python 1.5.2 still return lists to avoid TypeErrors when trying
to extend() list, so Python 1.5.2 doesn't get pretty-printing of Node
lists, but everything should still function.)

- Allow Aliases to have actions that will be executed whenever
any of the expanded Alias targets are out of date.

- Fix expansion of env.Command() overrides within target and
source file names.

- Support easier customization of what's displayed by various default
actions by adding lots of new construction variables: $ARCOMSTR,
$ASCOMSTR, $ASPPCOMSTR, $BIBTEXCOMSTR, $BITKEEPERCOMSTR, $CCCOMSTR,
$CVSCOMSTR, $CXXCOMSTR, $DCOMSTR, $DVIPDFCOMSTR, $F77COMSTR,
$F90COMSTR, $F95COMSTR, $FORTRANCOMSTR, $GSCOMSTR, $JARCOMSTR,
$JAVACCOMSTR, $JAVAHCOMSTR, $LATEXCOMSTR, $LEXCOMSTR, $LINKCOMSTR,
$M4COMSTR, $MIDLCOMSTR, $P4COMSTR, $PCHCOMSTR, $PDFLATEXCOMSTR,
$PDFTEXCOMSTR, $PSCOMSTR, $QT_MOCFROMCXXCOMSTR, $QT_MOCFROMHCOMSTR,
$QT_UICCOMSTR, $RCCOMSTR, $REGSVRCOMSTR, $RCS_COCOMSTR, $RMICCOMSTR,
$SCCSCOMSTR, $SHCCCOMSTR, $SHCXXCOMSTR, $SHF77COMSTR, $SHF90COMSTR,
$SHF95COMSTR, $SHFORTRANCOMSTR, $SHLINKCOMSTR, $SWIGCOMSTR,
$TARCOMSTR, $TEXCOMSTR, $YACCCOMSTR and $ZIPCOMSTR.

- Add an optional "map" keyword argument to ListOption() that takes a
dictionary to map user-specified values to legal values from the list
(like EnumOption() already doee).

- Add specific exceptions to try:-except: blocks without any listed,
so that they won't catch and mask keyboard interrupts.

- Make --debug={tree,dtree,stree} print something even when there's
a build failure.

- Fix how Scanners sort the found dependencies so that it doesn't
matter whether the dependency file is in a Repository or not.
This may cause recompilations upon upgrade to this version.

- Make AlwaysBuild() work with Alias and Python value Nodes (making
it much simpler to support aliases like "clean" that just invoke
an arbitrary action).

- Have env.ParseConfig() use AppendUnique() by default to suppress
duplicate entries from multiple calls. Add a "unique" keyword
argument to allow the old behavior to be specified.

- Allow the library modules imported by an SConscript file to get at
all of the normally-available global functions and variables by saying
"from SCons.Script import *".

- Add a --debug=memoizer option to print Memoizer hit/mass statistics.

- Allow more than one --debug= option to be set at a time.

- Change --debug=count to report object counts before and after
reading SConscript files and before and after building targets.

- Change --debug=memory output to line up the numbers and to better
match (more or less) the headers on the --debug=count columns.

- Speed things up when there are lists of targets and/or sources by
getting rid of some N^2 walks of the lists involved.

- Cache evaluation of LazyActions so we don't create a new object
for each invocation.

- When scanning, don't create Nodes for include files that don't
actually exist on disk.

- Make supported global variables CScanner, DScanner, ProgramScanner and
SourceFileScanner. Make SourceFileScanner.add_scanner() a supported
part of the public interface. Keep the old SCons.Defaults.*Scan names
around for a while longer since some people were already using them.

- By default, don't scan directories for on-disk files. Add a
DirScanner global scanner that can be used in Builders or Command()
calls that want source directory trees scanned for on-disk changes.
Have the Tar() and Zip() Builders use the new DirScanner to preserve
the behavior of rebuilding a .tar or .zip file if any file or
directory under a source tree changes. Add Command() support for
a source_scanner keyword argument to Command() that can be set to
DirScanner to get this behavior.

- Documentation changes: Explain that $CXXFLAGS contains $CCFLAGS
by default. Fix a bad target_factory example in the man page.
Add appendices to the User's Guide to cover the available Tools,
Builders and construction variables. Comment out the build of
the old Python 10 paper, which doesn't build on all systems and
is old enough at this point that it probably isn't worth the
effort to make it do so.

From Wayne Lee:

- Avoid "maximum recursion limit" errors when removing $(-$) pairs
from long command lines.

From Clive Levinson:

- Make ParseConfig() recognize and add -mno-cygwin to $LINKFLAGS and
$CCFLAGS, and -mwindows to $LINKFLAGS.

From Michael McCracken:

- Add a new "applelink" tool to handle the things like Frameworks and
bundles that Apple has added to gcc for linking.

- Use more appropriate default search lists of linkers, compilers and
and other tools for the 'darwin' platform.

- Add a LoadableModule Builder that builds a bundle on Mac OS X (Darwin)
and a shared library on other systems.

- Improve SWIG tests for use on Mac OS X (Darwin).

From Elliot Murphy:

- Enhance the tests to guarantee persistence of ListOption
values in saved options files.

- Supply the help text when -h is used with the -u, -U or -D options.

From Christian Neeb:

- Fix the Java parser's handling of string definitions to avoid ignoring
subsequent code.

From Han-Wen Nienhuys:

- Optimize variable expansion by: using the re.sub() method (when
possible); not using "eval" for variables for which we can fetch the
value directory; avoiding slowing substitution logic when there's no
'$' in the string.

From Gary Oberbrunner:

- Add an Environment.Dump() method to print the contents of a
construction environment.

- Allow $LIBS (and similar variables) to contain explicit File Nodes.

- Change ParseConfig to add the found library names directly to the
$LIBS variable, instead of returning them.

- Add ParseConfig() support for the -framework GNU linker option.

- Add a PRINT_CMD_LINE_FUNC construction variable to allow people
to filter (or log) command-line output.

- Print an internal Python stack trace in response to an otherwise
unexplained error when --debug=stacktrace is specified.

- Add a --debug=findlibs option to print what's happening when
the scanner is searching for libraries.

- Allow Tool specifications to be passed a dictionary of keyword
arguments.

- Support an Options default value of None, in which case the variable
will not be added to the construction environment unless it's set
explicitly by the user or from an Options file.

- Avoid copying __builtin__ values into a construction environment's
dictionary when evaluating construction variables.

- Add a new cross-platform intelc.py Tool that can detect and
configure the Intel C++ v8 compiler on both Windows, where it's
named icl, and Linux, where it's named icc. It also checks that
the directory specified in the Windows registry exists, and sets a
new $INTEL_C_COMPILER_VERSION construction variable to identify the
version being used. (Niall Douglas contributed an early prototype
of parts of this module.)

- Fix the private Conftest._Have() function so it doesn't change
non-alphanumeric characters to underscores.

- Supply a better error message when a construction variable expansion
has an unknown attribute.

- Documentation changes: Update the man page to describe use of
filenames or Nodes in $LIBS.

From Chris Pawling:

- Have the linkloc tool use $MSVS_VERSION to select the Microsoft
Visual Studio version to use.

From Kevin Quick:

- Fix the Builder name returned from ListBuilders and other instances
of subclasses of the BuilderBase class.

- Add Builders and construction variables to support rpcgen:
RPCGenClient(), RPCGenHeader(), RPCGenService(), RPCGenXDR(),
$RPCGEN, $RPCGENFLAGS, $RPCGENCLIENTFLAGS, $RPCGENHEADERFLAGS,
$RPCGENSERVICEFLAGS, $RPCGENXDRFLAGS.

- Update the man page to document that prefix and suffix Builder
keyword arguments can be strings, callables or dictionaries.

- Provide more info in the error message when a user tries to build
a target multiple ways.

- Fix Delete() when a file doesn't exist and must_exist=1. (We were
unintentionally dependent on a bug in versions of the Python shutil.py
module prior to Python 2.3, which would generate an exception for
a nonexistent file even when ignore_errors was set.)

- Only replace a Node's builder with a non-null source builder.

- Fix a stack trace when a suffix selection dictionary is passed
an empty source file list.

- Allow optional names to be attached to Builders, for default
Builders that don't get attached to construction environments.

- Fix problems with Parallel Task Exception handling.

- Build targets in an associated BuildDir even if there are targets
or subdirectories locally in the source directory.

- If a FunctionAction has a callable class as its underlying Python
function, use its strfunction() method (if any) to display the
action.

- Fix handling when BuildDir() exists but is unwriteable. Add
"Stop." to those error messages for consistency.

- Catch incidents of bad builder creation (without an action) and
supply meaningful error messages.

- Fix handling of src_suffix values that aren't extensions (don't
begin with a '.').

- Don't retrieve files from a CacheDir, but report what would happen,
when the -n option is used.

- Use the source_scanner from the target Node, not the source node
itself.

- Internal Scanners fixes: Make sure Scanners are only passed Nodes.
Fix how a Scanner.Selector called its base class initialization.
Make comparisons of Scanner objects more robust. Add a name to
an internal default ObjSourceScanner.

- Add a deprecated warning for use of the old "scanner" keyword argument
to Builder creation.

- Improve the --debug=explain message when the build action changes.

- Test enhancements in SourceCode.py, option-n.py, midl.py. Better
Command() and Scanner test coverage. Improved test infrastructure
for -c output.

- Refactor the interface between Action and Executor objects to treat
Actions atomically.

- The --debug=presub option will now report the pre-substitution
each action seprately, instead of reporting the entire list before
executing the actions one by one.

- The --debug=explain option explaining a changed action will now
(more correctly) show pre-substitution action strings, instead of
the commands with substituted file names.

- A Node (file) will now be rebuilt if its PreAction or PostAction
actions change.

- Python Function actions now have their calling signature (target,
source, env) reported correctly when displayed.

- Fix BuildDir()/build_dir handling when the build_dir is underneath
the source directory and trying to use entries from the build_dir
as sources for other targets in the build-dir.

- Fix hard-coding of JDK path names in various Java tests.

- Handle Python stack traces consistently (stop at the SConscript stack
frame, by default) even if the Python source code isn't available.

- Improve the performance of the --debug={tree,dtree} options.

- Add --debug=objects logging of creation of OverrideWarner,
EnvironmentCopy and EnvironmentOverride objects.

- Fix command-line expansion of Python Value Nodes.

- Internal cleanups: Remove an unnecessary scan argument. Associate
Scanners only with Builders, not nodes. Apply overrides once when
a Builder is called, not in multiple places. Cache results from the
Node.FS.get_suffix() and Node.get_build_env() methods. Use the Python
md5 modules' hexdigest() method, if there is one. Have Taskmaster
call get_stat() once for each Node and re-use the value instead of
calling it each time it needs the value. Have Node.depends_on()
re-use the list from the children() method instead of calling it
multiple times.

- Use the correct scanner if the same source file is used for targets in
two different environments with the same path but different scanners.

- Collect logic for caching values in memory in a Memoizer class,
which cleans up a lot of special-case code in various methods and
caches additional values to speed up most configurations.

- Add a PathAccept validator to the list of new canned PathOption
validators.

From Jeff Squyres:

- Documentation changes: Use $CPPDEFINES instead of $CCFLAGS in man
page examples.

From Levi Stephen:

- Allow $JARCHDIR to be expanded to other construction variables.

From Christoph Wiedemann:

- Add an Environment.SetDefault() method that only sets values if
they aren't already set.

- Have the qt.py Tool not override variables already set by the user.

- Add separate $QT_BINPATH, $QT_CPPPATH and $QT_LIBPATH variables
so these can be set individually, instead of being hard-wired
relative to $QTDIR.

- The %TEMP% and %TMP% external environment variables are now propagated
automatically to the command execution environment on Windows systems.

- A new --config= command-line option allows explicit control of
of when the Configure() tests are run: --config=force forces all
checks to be run, --config=cache uses all previously cached values,
--config=auto (the default) runs tests only when dependency analysis
determines it's necessary.

- The Configure() subsystem can now write a config.h file with values
like HAVE_STDIO_H, HAVE_LIBM, etc.

- The Configure() subsystem now executes its checks silently when the
-Q option is specified.

- The Configure() subsystem now reports if a test result is being
taken from cache, and prints the standard output and error output
of tests even when cached.

- Configure() test results are now reported as "yes" or "no" instead of
"ok" or "failed."

- Fixed traceback printing when calling the env.Configure() method
instead of the Configure() global function.

- The Configure() subsystem now caches build failures in a .sconsign
file in the subdirectory, not a .cache file. This may cause
tests to be re-executed the first time after you install 0.97.

- Additional significant internal cleanups in the Configure() subsystem
and its tests.

- Have the Qt Builder make uic-generated files dependent on the .ui.h
file, if one exists.

- Add a test to make sure that SCons source code does not contain
try:-except: blocks that catch all errors, which potentially catch
and mask keyboard interrupts.

- Fix us of TargetSignatures('content') with the SConf subsystem.

From Russell Yanofsky:

- Add support for the Metrowerks Codewarrior compiler and linker
(mwcc and mwld).

0.96.1

From Craig Bachelor:

- Handle white space in the executable Python path name within in MSVS
project files by quoting the path.

- Correct the format of a GUID string in a solution (.dsw) file so
MSVS can correctly "build enable" a project.

From Steven Knight:

- Add a must_exist flag to Delete() to let the user control whether
it's an error if the specified entry doesn't exist. The default
behavior is now to silently do nothing if it doesn't exist.

- Package up the new Platform/darwin.py, mistakenly left out of 0.96.

- Make the scons.bat REM statements into REM so they aren't printed.

- Make the SCons packaging SConscript files platform independent.

From Anthony Roach:

- Fix scanning of pre-compiled header (.pch) files for includes,
broken in 0.96.

0.96

From Chad Austin:

- Make the CacheDir() directory if it doesn't already exist.

- Allow construction variable substitutions in $LIBS specifications.

- Allow the emitter argument to a Builder() to be or expand to a list
of emitter functions, which will be called in sequence.

- Suppress null values in construction variables like $LIBS that use
the internal _concat() function.

- Remove .dll files from the construction variables searched for
libraries that can be fed to Win32 compilers.

From Chad Austin and Christoph Wiedemann:

- Add support for a $RPATH variable to supply a list of directories
to search for shared libraries when linking a program. Used by
the GNU and IRIX linkers (gnulink and sgilink).

From Charles Crain:

- Restore the ability to do construction variable substitutions in all
kinds of *PATH variables, even when the substitution returns a Node
or other object.

From Tom Epperly:

- Allow the Java() Builder to take more than one source directory.

From Ralf W. Grosse-Kunstleve:

- Have SConsignFile() use, by default, a custom "dblite.py" that we can
control and guarantee to work on all Python versions (or nearly so).

From Jonathan Gurley:

- Add support for the newer "ifort" versions of the Intel Fortran
Compiler for Linux.

From Bob Halley:

- Make the new *FLAGS variable type work with copied Environments.

From Chris Hoeppler:

- Initialize the name of a Scanner.Classic scanner correctly.

From James Juhasz:

- Add support for the .dylib shared library suffix and the -dynamiclib
linker option on Mac OS X.

From Steven Knight:

- Add an Execute() method for executing actions directly.

- Support passing environment override keyword arguments to Command().

- Fix use of $MSVS_IGNORE_IDE_PATHS, which was broken when we added
support for $MSVS_USE_MFC_DIRS last release.

- Make env.Append() and env.Prepend() act like the underlying Python
behavior when the variable being appended to is a UserList object.

- Fix a regression that prevented the Command() global function in
0.95 from working with command-line strings as actions.

- Fix checking out a file from a source code management system when
the env.SourceCode() method was called with an individual file name
or node, not a directory name or node.

- Enhance the Task.make_ready() method to create a list of the
out-of-date Nodes for the task for use by the wrapping interface.

- Allow Scanners to pull the list of suffixes from the construction
environment when the "skeys" keyword argument is a string containing
a construction variable to be expanded.

- Support new $CPPSUFFIXES, $DSUFFIXES $FORTRANSUFFIXES, and
$IDLSUFFIXES. construction variables that contain the default list
of suffixes to be scanned by a given type of scanner, allowing these
suffix lists to be easily added to or overridden.

- Speed up Node creation when calling a Builder by comparing whether two
Environments are the same object, not if their underlying dictionaries
are equivalent.

- Add a --debug=explain option that reports the reason(s) why SCons
thinks it must rebuild something.

- Add support for functions that return platform-independent Actions
to Chmod(), Copy(), Delete(), Mkdir(), Move() and Touch() files
and/or directories. Like any other Actions, the returned Action
object may be executed directly using the Execute() global function
or env.Execute() environment method, or may be used as a Builder
action or in an env.Command() action list.

- Add support for the strfunction argument to all types of Actions:
CommandAction, ListAction, and CommandGeneratorAction.

- Speed up turning file system Nodes into strings by caching the
values after we're finished reading the SConscript files.

- Have ParseConfig() recognize and supporting adding the -Wa, -Wl,
and -Wp, flags to ASFLAGS, LINKFLAGS and CPPFLAGS, respectively.

- Change the .sconsign format and the checks for whether a Node is
up-to-date to make dependency checks more efficient and correct.

- Add wrapper Actions to SCons.Defaults for $ASCOM, $ASPPCOM, $LINKCOM,
$SHLINKCOM, $ARCOM, $LEXCOM and $YACCCOM. This makes it possible
to replace the default print behavior with a custom strfunction()
for each of these.

- When a Node has been built, don't walk the whole tree back to delete
the parents's implicit dependencies, let returning up the normal
Taskmaster descent take care of it for us.

- Add documented support for separate target_scanner and source_scanner
arguments to Builder creation, which allows different scanners to
be applied to source files

- Don't re-install or (re-generate) .h files when a subsidiary included
.h file changes. This eliminates incorrect circular dependencies
with .h files generated from other source files.

- Slim down the internal Sig.Calculator class by eliminating methods
whose functionality is now covered by Node methods.

- Document use of the target_factory and source_factory keyword
arguments when creating Builder objects. Enhance Dir Nodes so that
they can be created with user-specified Builder objects.

- Don't blow up with stack trace when the external $PATH environment
variable isn't set.

- Make Builder calls return lists all the time, even if there's only
one target. This keeps things consistent and easier to program to
across platforms.

- Add a Flatten() function to make it easier to deal with the Builders
all returning lists of targets, not individual targets.

- Performance optimizations in Node.FS.__doLookup().

- Man page fixes: formatting typos, misspellings, bad example.

- User's Guide fixes: Fix the signatures of the various example
*Options() calls. Triple-quote properly a multi-line Split example.

- User's Guide additions: Chapter describing File and Directory
Nodes. Section describing declarative nature of SCons functions in
SConscript files. Better organization and clarification of points
raised by Robert P. J. Day. Chapter describing SConf (Autoconf-like)
functionality. Chapter describing how to install Python and
SCons. Chapter describing Java builds.

From Chris Murray:

- Add a .win32 attribute to force file names to expand with
Windows backslash path separators.

- Fix escaping file names on command lines when the expansion is
concatenated with another string.

- Add support for Fortran 90 and Fortran 95. This adds $FORTRAN*
variables that specify a default compiler, command-line, flags,
etc. for all Fortran versions, plus separate $F90* and $F95*
variables for when different compilers/flags/etc. must be specified
for different Fortran versions.

- Have individual tools that create libraries override the default
$LIBPREFIX and $LIBSUFFIX values set by the platform. This makes
it easier to use Microsoft Visual Studio tools on a CygWin platform.

From Gary Oberbrunner:

- Add a --debug=presub option to print actions prior to substitution.

- Add a warning upon use of the override keywords "targets" and
"sources" when calling Builders. These are usually mistakes which
are otherwise silently (and confusingly) turned into construction
variable overrides.

- Try to find the ICL license file path name in the external environment
and the registry before resorting to the hard-coded path name.

- Add support for fetching command-line keyword=value arguments in
order from an ARGLIST list.

- Avoid stack traces when trying to read dangling symlinks.

- Treat file "extensions" that only contain digits as part of the
file basename. This supports version numbers as part of shared
library names, for example.

- Avoid problems when there are null entries (None or '') in tool
lists or CPPPATH.

- Add an example and explanation of how to use "tools = ['default', ..."
when creating a construction environment.

- Add a section describing File and Directory Nodes and some of their
attributes and methods.

- Have ParseConfig() add a returned -pthread flag to both $CCFLAGS
and $LINKFLAGS.

- Fix some test portability issues on Mac OS X (darwin).

From Simon Perkins:

- Fix a bug introduced in building shared libraries under MinGW.

From Kevin Quick:

- Handling SCons exceptions according to Pythonic standards.

- Fix test/chained-build.py on systems that execute within one second.

- Fix tests on systems where 'ar' warns about archive creation.

From Anthony Roach:

- Fix use of the --implicit-cache option with timestamp signatures.

- If Visual Studio is installed, assume the C/C++ compiler, the linker
and the MIDL compiler that comes with it are available, too.

- Better error messages when evaluating a construction variable
expansion yields a Python syntax error.

- Change the generation of PDB files when using Visual Studio from
compile time to link time.

From sam th:

- Allow SConf.CheckLib() to search a list of libraries, like the
Autoconf AC_SEARCH_LIBS macro.

- Allow the env.WhereIs() method to take a "reject" argument to
let it weed out specific path names.

From Christoph Wiedemann:

- Add new Moc() and Uic() Builders for more explicit control over
Qt builds, plus new construction variables to control them:
$QT_AUTOSCAN, $QT_DEBUG, $QT_MOCCXXPREFIX, $QT_MOCCXXSUFFIX,
$QT_MOCHPREFIX, $QT_MOCHSUFFIX, $QT_UICDECLPREFIX, $QT_UICDECLSUFFIX,
$QT_UICIMPLPREFIX, $QT_UICIMPLSUFFIX and $QT_UISUFFIX.

- Add a new single_source keyword argument for Builders that enforces
a single source file on calls to the Builder.

Page 10 of 14

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.