Scons

Latest version: v4.7.0

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

Scan your dependencies

Page 10 of 13

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.

0.95

From Chad Austin:

- Replace print statements with calls to sys.stdout.write() so output
lines stay together when -j is used.

- Add portability fixes for a number of tests.

- Accomodate the fact that Cygwin's os.path.normcase() lies about
the underlying system being case-sensitive.

- Fix an incorrect _concat() call in the $RCINCFLAGS definition for
the mingw Tool.

- Fix a problem with the msvc tool with Python versions prior to 2.3.

- Add support for a "toolpath" Tool() and Environment keyword that
allows Tool modules to be found in specified local directories.

- Work around Cygwin Python's silly fiction that it's using a
case-sensitive file system.

- More robust handling of data in VCComponents.dat.

- If the "env" command is available, spawn commands with the more
general "env -" instead of "env -i".

From Kerim Borchaev:

- Fix a typo in a msvc.py's registry lookup: "VCComponents.dat", not
"VSComponents.dat".

From Chris Burghart:

- Fix the ability to save/restore a PackageOption to a file.

From Steve Christensen:

- Update the MSVS .NET and MSVC 6.0/7.0 path detection.

From David M. Cooke:

- Make the Fortran scanner case-insensitive for the INCLUDE string.

From Charles Crain:

- If no version of MSVC is detected but the tool is specified,
use the MSVC 6.0 paths by default.

- Ignore any "6.1" version of MSVC found in the registry; this is a
phony version number (created by later service packs?) and would
throw off the logic if the user had any non-default paths configure.

- Correctly detect if the user has independently configured the MSVC
"include," "lib" or "path" in the registry and use the appropriate
values. Previously, SCons would only use the values if all three
were set in the registry.

- Make sure side-effect nodes are prepare()d before building their
corresponding target.

- Preserve the ability to call BuildDir() multiple times with the
same target and source directory arguments.

From Andy Friesen:

- Add support for the Digital Mars "D" programming language.

From Scott Lystig Fritchie:

- Fix the ability to use a custom _concat() function in the
construction environment when calling _stripixes().

- Make the message about ignoring a missing SConscript file into a
suppressable Warning, not a hard-coded sys.stderr.write().

- If a builder can be called multiple times for a target (because
the sources and overrides are identical, or it's a builder with the
"multi" flag set), allow the builder to be called through multiple
environments so long as the builders have the same signature for
the environments in questions (that is, they're the same action).

From Bob Halley:

- When multiple targets are built by a single action, retrieve all
of them from cache, not just the first target, and exec the build
command if any of the targets isn't present in the cache.

From Zephaniah Hull:

- Fix command-line ARGUMENTS with multiple = in them.

From Steven Knight:

- Fix EnsureSConsVersion() so it checks against the SCons version,
not the Python version, on Pythons with sys.version_info.

- Don't swallow the AttributeError when someone uses an expansion like
$TARGET.bak, so we can supply a more informative error message.

- Fix an odd double-quote escape sequence in the man page.

- Fix looking up a naked drive letter as a directory (Dir('C:')).

- Support using File nodes in the LIBS construction variable.

- Allow the LIBS construction variable to be a single string or File
node, not a list, when only one library is needed.

- Fix typos in the man page: JAVACHDIR => JARCHDIR; add "for_signature"
to the __call__() example in the "Variable Substitution" section.

- Correct error message spellings of "non-existant" to "non-existent."

- When scanning for libraries to link with, don't append $LIBPREFIXES
or $LIBSUFFIXES values to the $LIBS values if they're already present.

- Add a ZIPCOMPRESSION construction variable to control whether the
internal Python action for the Zip Builder compresses the file or
not. The default value is zipfile.ZIP_DEFLATED, which generates
a compressed file.

- Refactor construction variable expansion to support recursive
expansion of variables (e.g. CCFLAGS = "$CCFLAGS -g") without going
into an infinite loop. Support this in all construction variable
overrides, as well as when copying Environments.

- Fix calling Configure() from more than one subsidiary SConscript file.

- Fix the env.Action() method so it returns the correct type of
Action for its argument(s).

- Fix specifying .class files as input to JavaH with the .class suffix
when they weren't generated using the Java Builder.

- Make the check for whether all of the objects going into a
SharedLibrary() are shared work even if the object was built in a
previous run.

- Supply meaningful error messages, not stack traces, if we try to add
a non-Node as a source, dependency, or ignored dependency of a Node.

- Generate MSVS Project files that re-invoke SCons properly regardless
of whether the file was built via scons.bat or scons.py.
(Thanks to Niall Douglas for contributing code and testing.)

- Fix TestCmd.py, runtest.py and specific tests to accomodate being
run from directories whose paths include white space.

- Provide a more useful error message if a construction variable
expansion contains a syntax error during evaluation.

- Fix transparent checkout of implicit dependency files from SCCS
and RCS.

- Added new --debug=count, --debug=memory and --debug=objects options.
--debug=count and --debug=objects only print anything when run
under Python 2.1 or later.

- Deprecate the "overrides" keyword argument to Builder() creation
in favor of using keyword argument values directly (like we do
for builder execution and the like).

- Always use the Builder overrides in substitutions, not just if
there isn't a target-specific environment.

- Add new "rsrcpath" and "rsrcdir" and attributes to $TARGET/$SOURCE,
so Builder command lines can find things in Repository source
directories when using BuildDir.

- Fix the M4 Builder so that it chdirs to the Repository directory
when the input file is in the source directory of a BuildDir.

- Save memory at build time by allowing Nodes to delete their build
environments after they've been built.

- Add AppendUnique() and PrependUnique() Environment methods, which
add values to construction variables like Append() and Prepend()
do, but suppress any duplicate elements in the list.

- Allow the 'qt' tool to still be used successfully from a copied
Environment. The include and library directories previously ended up
having the same string re-appended to the end, yielding an incorrect
path name.

- Supply a more descriptive error message when the source for a target
can't be found.

- Initialize all *FLAGS variables with objects do the right thing with
appending flags as strings or lists.

- Make things like ${TARGET.dir} work in *PATH construction variables.

- Allow a $MSVS_USE_MFC_DIRS construction variable to control whether
ATL and MFC directories are included in the default INCLUDE and
LIB paths.

- Document the dbm_module argument to the SConsignFile() function.

From Vincent Risi:

- Add support for the bcc32, ilink32 and tlib Borland tools.

From Anthony Roach:

- Supply an error message if the user tries to configure a BuildDir
for a directory that already has one.

- Remove documentation of the still-unimplemented -e option.

- Add -H help text listing the legal --debug values.

- Don't choke if a construction variable is a non-string value.

- Build Type Libraries in the target directory, not the source
directory.

- Add an appendix to the User's Guide showing how to accomplish
various common tasks in Python.

From Greg Spencer:

- Add support for Microsoft Visual Studio 2003 (version 7.1).

- Evaluate $MSVSPROJECTSUFFIX and $MSVSSOLUTIONSUFFIX when the Builder
is invoked, not when the tool is initialized.

From Christoph Wiedemann:

- When compiling Qt, make sure the moc_*.cc files are compiled using
the flags from the environment used to specify the target, not
the environment that first has the Qt Builders attached.

0.94

From Hartmut Goebel:

- Add several new types of canned functions to help create options:
BoolOption(), EnumOption(), ListOption(), PackageOption(),
PathOption().

From Steven Knight:

- Fix use of CPPDEFINES with C++ source files.

- Fix env.Append() when the operand is an object with a __cmp__()
method (like a Scanner instance).

- Fix subclassing the Environment and Scanner classes.

- Add BUILD_TARGETS, COMMAND_LINE_TARGETS and DEFAULT_TARGETS variables.

From Steve Leblanc:

- SGI fixes: Fix C++ compilation, add a separate Tool/sgic++.py module.

From Gary Oberbrunner:

- Fix how the man page un-indents after examples in some browsers.

From Vincent Risi:

- Fix the C and C++ tool specifications for AIX.

0.93

From J.T. Conklin:

- On POSIX, execute commands with the more modern os.spawnvpe()
function, if it's available.

- Scan .S, .spp and .SPP files for C preprocessor dependencies.

- Refactor the Job.Parallel() class to use a thread pool without a
condition variable. This improves parallel build performance and
handles keyboard interrupts properly when -j is used.

From Charles Crain:

- Add support for a JARCHDIR variable to control changing to a
directory using the jar -C option.

- Add support for detecting Java manifest files when using jar,
and specifying them using the jar m flag.

- Fix some Python 2.2 specific things in various tool modules.

- Support directories as build sources, so that a rebuild of a target
can be triggered if anything underneath the directory changes.

- Have the scons.bat and scons.py files look for the SCons modules
in site-packages as well.

From Christian Engel:

- Support more flexible inclusion of separate C and C++ compilers.

- Use package management tools on AIX and Solaris to find where
the comilers are installed, and what version they are.

- Add support for CCVERSION and CXXVERSION variables for a number
of C and C++ compilers.

From Sergey Fogel:

- Add test cases for the new capabilities to run bibtex and to rerun
latex as needed.

From Ralf W. Grosse-Kunstleve:

- Accomodate anydbm modules that don't have a sync() method.

- Allow SConsignFile() to take an argument specifying the DBM
module to be used.

From Stephen Kennedy:

- Add support for a configurable global .sconsign.dbm file which
can be used to avoid cluttering each directory with an individual
.sconsign file.

From John Johnson:

- Fix (re-)scanning of dependencies in generated or installed
header files.

From Steven Knight:

- The -Q option suppressed too many messages; fix it so that it only
suppresses the Reading/Building messages.

- Support include when there's no space before the opening quote
or angle bracket.

- Accomodate alphanumeric version strings in EnsurePythonVersion().

- Support arbitrary expansion of construction variables within
file and directory arguments to Builder calls and Environment methods.

- Add Environment-method versions of the following global functions:
Action(), AddPostAction(), AddPreAction(), Alias(), Builder(),
BuildDir(), CacheDir(), Clean(), Configure(), Default(),
EnsurePythonVersion(), EnsureSConsVersion(), Environment(),
Exit(), Export(), FindFile(), GetBuildPath(), GetOption(), Help(),
Import(), Literal(), Local(), Platform(), Repository(), Scanner(),
SConscriptChdir(), SConsignFile(), SetOption(), SourceSignatures(),
Split(), TargetSignatures(), Tool(), Value().

- Add the following global functions that correspond to the same-named
Environment methods: AlwaysBuild(), Command(), Depends(), Ignore(),
Install(), InstallAs(), Precious(), SideEffect() and SourceCode().

- Add the following global functions that correspond to the default
Builder methods supported by SCons: CFile(), CXXFile(), DVI(), Jar(),
Java(), JavaH(), Library(), M4(), MSVSProject(), Object(), PCH(),
PDF(), PostScript(), Program(), RES(), RMIC(), SharedLibrary(),
SharedObject(), StaticLibrary(), StaticObject(), Tar(), TypeLibrary()
and Zip().

- Rearrange the man page to show construction environment methods and
global functions in the same list, and to explain the difference.

- Alphabetize the explanations of the builder methods in the man page.

- Rename the Environment.Environment class to Enviroment.Base.
Allow the wrapping interface to extend an Environment by using its own
subclass of Environment.Base and setting a new Environment.Environment
variable as the calling entry point.

- Deprecate the ParseConfig() global function in favor of a same-named
construction environment method.

- Allow the Environment.WhereIs() method to take explicit path and
pathext arguments (like the underlying SCons.Util.WhereIs() function).

- Remove the long-obsolete {Get,Set}CommandHandler() functions.

- Enhance env.Append() to suppress null values when appropriate.

- Fix ParseConfig() so it works regardless of initial construction
variable values.

Extend CheckHeader(), CheckCHeader(), CheckCXXHeader() and
CheckLibWithHeader() to accept a list of header files that will be
included in the test. The last one in the list is assumed to be
the one being checked for. (Prototype code contributed by Gerard
Patel and Niall Douglas).

- Supply a warning when -j is used and threading isn't built in to
the current version of Python.

- First release of the User's Guide (finally, and despite a lot
of things still missing from it...).

From Clark McGrew:

- Generalize the action for .tex files so that it will decide whether
a file is TeX or LaTeX, check the .aux output to decide if it should
run bibtex, and check the .log output to re-run LaTeX if needed.

From Bram Moolenaar:

- Split the non-SCons-specific functionality from SConf.py to a new,
re-usable Conftest.py module.

From Gary Oberbrunner:

- Allow a directory to be the target or source or dependency of a
Depends(), Ignore(), Precious() or SideEffect() call.

From Gerard Patel:

- Use the %{_mandir} macro when building our RPM package.

From Marko Rauhamaa:

- Have the closing message say "...terminated because of errors" if
there were any.

From Anthony Roach:

- On Win32 systems, only use "rm" to delete files if Cygwin is being
used. ("rm" doesn't understand Win32-format path names.)

From Christoph Wiedemann:

- Fix test/SWIG.py to find the Python include directory in all cases.

- Fix a bug in detection of Qt installed on the local system.

- Support returning Python 2.3 BooleanType values from Configure checks.

- Provide an error message if someone mistakenly tries to call a
Configure check from within a Builder function.

- Support calling a Builder when a Configure context is still open.

- Handle interrupts better by eliminating all try:-except: blocks
which caught any and all exceptions, including KeyboardInterrupt.

- Add a --duplicate= option to control how files are duplicated.

Page 10 of 13

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.