Releases: SCons/scons
SCons 4.7.0 Released
A new SCons release, 4.7.0, is now available on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.6.0:
NEW FUNCTIONALITY
- Method unlink_files was added to the TestCmd class that unlinks a list of files
from a specified directory. An attempt to unlink a file is made only when the
file exists; otherwise, the file is ignored.
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- Add an optional argument list string to configure's CheckFunc method so
that the generated function argument list matches the function's
prototype when including a header file. Fixes GH Issue #4320 - Now supports pre-release Python 3.13
- Support for Python versions without support for the
threading
package has been removed - Dropped three unused warning classes: DeprecatedSourceCodeWarning,
TaskmasterNeedsExecuteWarning, DeprecatedMissingSConscriptWarning. - Two warning classes that are actually used were added to manpage section on
enabling warnings (cache-cleanup-error, future-reserved-variable).
FIXES
- Fix of the --debug=sconscript option to return exist statements when using return
statement with stop flag enabled - MSVS: prevent overwriting the SCons environment variable SCONS_HOME with the OS
environment value of SCONS_HOME in the msvs tool. - MSVC: Fix the detection of Visual Studio 2015 Express ('14.0Exp') by adding a
registry key definition and updating the installation root-relative registry value
at runtime for the location of the VC folder. - MSVS: Fix the msvs project generation test for MSVS 6.0 to use the correct name of
the generated project file. - MSVS: Fix the msvs project generation test scripts so that "false positive" tests
results are not possible when the initial build is successful and the command-line
build of the project file fails. - On Windows platform, when collecting command output (Configure checks),
make sure decoding of bytes doesn't fail. - Documentation indicated that both Pseudo() and env.Pseudo() were usable,
but Pseudo() did not work; is now enabled. - Improve handling of file data that SCons itself processes - as in
scanners - try harder to decode non-UTF-8 text. - PyPackageDir no longer fails if passed a module name which cannot be found,
now returns None. - Add locking around creation of CacheDir config file. Fixes issue #4489.
IMPROVEMENTS
- Use of NotImplemented instead of NotImplementedError for special methods
of _ListVariable class - The NewParallel scheduler is now the default, the
tm_v2
flag is removed,
and the old scheduler is opt-in under--experimental=legacy_sched
. Additionally,
the new scheduler is now used for -j1 builds as well.
NOTE: This should significantly improve SCons performance for larger parallel builds
(Larger -j values) - CacheDir writes no longer happen within the taskmaster critical section, and therefore
can run in parallel with both other CacheDir writes and the taskmaster DAG walk. - The NewParallel scheduler now only adds threads as new work requiring execution
is discovered, up to the limit set by -j. This should reduce resource utilization
when the achievable parallelism in the DAG is less than the -j limit. - Dumping an environment with
json
formatting will now explicitly specify if a given
value cannot be serialized.
PACKAGING
- Remove unnecessary dependencies on pypi packages from setup.cfg
- SCons documentation build can now be controlled through SKIP_DOC
variable - rather than just true/false can now specify
skip none, skip all, skip pdf docs, skip api docs.
DOCUMENTATION
- Fixed the Scanner examples in the User Guide to be runnable and added
some more explanation. Clarified discussion of the scanner function in
the Scanner Objects section of the manpage. - The manpage entry for Pseudo was clarified.
- The manpage entry for SharedLibrary was clarified.
- Update API docs for Warnings framework; add two warns to manpage
enable/disable control. - More consistent use of &Python; in the manpage. A few links added.
A warning about overwriting env['ENV'] and one about Configure
checks possibly not running in in no-exec mode also added. - Clarify how SCons finds the project top directory, and what that is used for.
- Clarify MergeFlags usage of a dict argument.
DEVELOPMENT
- Fix sphinx config to handle SCons versions with post such as: 4.6.0.post1
- Created SCons.Util.sctyping to contain complex type information, allowing
for repo-wide type hinting without causing cyclical dependencies.
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.6.0..HEAD
26 Andrew Morrow
24 Mats Wichmann
14 William Deegan
7 Joseph Brill
6 StenGruener
3 Prabhu S. Khalsa
3 Thaddeus Crews
2 fazledyn-or
1 Michał Górny
1 Piotr Siupa
SCons 4.6.0
A new SCons release, 4.6.0, is now available on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.5.2:
NEW FUNCTIONALITY
- D compilers : added support for generation of .di interface files.
New variables DI_FILE_DIR, DI_FILE_DIR_PREFIX, DI_FILE_DIR_SUFFIX,
DI_FILE_SUFFIX. - MSVC: If available, native arm64 tools will be used on arm64 hosts for VS2022.
- MSVC: If necessary, automatically define VSCMD_SKIP_SENDTELEMETRY for VS2019 and later
on arm64 hosts when using an arm (32-bit) build of python to prevent a powershell
error pop-up window (powershell dll not found). - Add a LIBLITERALPREFIX variable which can be set to the linker's
prefix for considering a library argument unmodified (e.g. for the
GNU linker, the ':' in '-l:libfoo.a'). Fixes Github issue #3951.
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- When debugging (--debug=pdb), the filenames SConstruct and SConscript
are now recognized when manipulating breakpoints. Previously,
only a full pathname to an sconscript file worked, as pdb requires
a .py extension to open a file that is not an absolute path. - Three unused non-public methods of the Environment Base class
were dropped: get_src_sig_type, get_tgt_sig_type, _changed_source.
These were unused remnants of the previously removed SourceSignatures
and TargetSignatures features (dropped in 3.1.2). - The --debug flag now has a 'json' option which will write information
generated by --debug={count, memory, time, action-timestamps} and about
the build. - Obsoleted YACCVCGFILESUFFIX, it's being replaced by YACC_GRAPH_FILE_SUFFIX.
If YACC_GRAPH_FILE_SUFFIX is not set, it will respect YACCVCGFILESUFFIX. - The yacc tool now understands the bison behavior of --header, --defines
and --graph being called without an option-argument as being synonyms
for -d (first two) and -g. -H also recognized as a synonym for -d.
Default value for $YACC_GRAPH_FILE_SUFFIX changed to '.gv' to match
current bison default (since bison 3.8). Set this variable to '.dot'
if using byacc. Fixes #4326 and #4327. - MSVC: When trying to find a valid msvc batch file, the existence of the msvc compiler
executable is verified for VS6 to VS2015 to avoid executing the msvc batch file when
the host/target tool is known not to be present. Always check that the msvc compiler
executable is found on the msvc script environment path after running the msvc batch
file. This is predominately needed for recent versions of Visual Studio where the msvc
batch file exists but an individual msvc toolset may not support the host/target
architecture combination. For example, when using VS2022 on arm64, the arm64 native
tools are only installed for the 14.3x toolsets. - MSVC: When the msvc compiler executable is not found during setup of the msvc
environment, the warning message issued takes into account whether or not a
possibly erroneous compiler executable was already present in the scons environment
path. See CHANGES.txt for details. - Extend range of recognized Java versions to 20.
- Builder calls (like Program()) now accept pathlib objects in source lists.
- The Help() function now takes an additional keyword argument keep_local:
when starting to build a help message, you can now retain help from AddOption
calls (options added for the project_, but omit help for SCons' own cmdline
options with "Help(newtext, append=True, local_only=True)". - Calling SConscript() with a nonexistent file is now an error.
Previously this succeeded - prior to SCons 3.0, silently; since 3.0, with
a warning. Developers can still instruct such an SConscript() call not
to fail by being explicit: pass keyword argument "must_exist=False".
The "--warn=missing-sconscript" commandline option is no longer available
as the warning was part of the transitional phase. - Add missing directories to searched paths for mingw installs
- SCons.Util.types renamed to to SCons.Util.sctypes to avoid any possible
confusion with the Python stdlib "types" module. Note that it was briefly
(for 4.5.x only) possible to import directly from SCons.Util.types,
although the preferred usage remains to import from SCons.Util only.
Any code that did the direct import will have to change to import from
SCons.Util.sctypes. - Add JDK 21 LTS support
- The newly added --debug=sconscript option (new) will output notices when
entering an exiting each SConscript as they are processed.
FIXES
- Fixed: when using the mingw tool, if an msys2 Python is used (os.sep
is '/' rather than the Windows default ''), certain Configure checks
could fail due to the construction of the path to run the compiled check. - C scanner's dictifyCPPDEFINES routine did not understand the possible
combinations of CPPDEFINES - not aware of a "name=value" string either
embedded in a sequence, or by itself. The conditional C scanner thus
did not always properly apply the defines. The regular C scanner does
not use these, so was not affected. [fixes #4193] - MSVC: The installed msvc list is calculated once and cached. There was an indirect
dependency on the target architecture when determining if each version of msvc
was installed based on the initial invocation. It was possible that an msvc instance
would not be considered installed due to the tools for the requested target
architecture not being installed. The initial call to construct the installed msvc
list now uses an undefined target architecture to evaluate all potential host/target
combinations when evaluating if the msvc tools are installed for a given Visual Studio
installation. - MSVC: Erroneous construction of the installed msvc list (as described above) caused an
index error in the msvc support code. An explicit check was added to prevent indexing
into an empty list. Fixes #4312. - MSVC: The search for the msvc compiler executable (cl.exe) no longer inspects the
OS system path in certain situations when setting up the msvc environment. - MSCommon: Test SConfTests.py would fail when mscommon debugging was enabled via the
MSVC_MSCOMMON_DEBUG environment variable. The mscommon logging filter class registered
with the python logging module was refactored to prevent test failure. - MSVS: Add arm64 to the MSVS supported architectures list for VS2017 and later to be
consistent with the current documentation of MSVS_ARCH. - FORTRAN: Fix gfortran tool initialization. Defaults to using binary named gfortran
as would be expected, and properly set's SHFORTRAN flags to include -fPIC
where previously it was only doing so for the other fortran versions (F77,..) - MSCommon: Added more error handling while reading msvc config cache.
(Enabled/specified by SCONS_CACHE_MSVC_CONFIG).
The existing cache will be discarded if there's a decode error reading it.
It's possible there's a race condition creating this issue it in certain CI builds. - Fixed: race condition in
Mkdir
which can happen when twoSConscript
are processed simultaneously by two separate build commands.
IMPROVEMENTS
- Now tries to find mingw if it comes from Chocolatey install of msys2.
- MSVC: Module imports were changed from a relative import to a top-level
absolute import in the following Microsoft tools: midl, mslib, mslink, mssdk, msvc,
msvs. Moving any of these tools that used relative imports to the scons site tools
folder would fail on import (i.e., the relative import paths become invalid when
moved).
PACKAGING
- The build of scons now matches the help text displayed - the targets
listed there can all now be given as a target to build (except for
the two full source balls; the source tar.gz is currently generated directly
by the GitHub release process).
DOCUMENTATION
- Aligned manpage signature for Alias function to match implementation -
if the previous targets parameter had been used as a keyword argument,
the results would be incorrect (does not apply to positional argument
usage, which had no problem). - Changed the message about scons -H to clarify it shows built-in options only.
- Cachedir description updated.
- Updated the first two chapters on building with SCons in the User Guide.
- Clarify that exported variables are shared - if mutable, changes made in
an SConscript are visible everywhere that takes a refereence to that object. - Update PCH builder docs with some usage notes.
DEVELOPMENT
- SCons test runner now uses pathlib to normalize and compare paths
to test files, which allows test lists, exclude lists, and tests on
the command line to "not care" about the OS convention for pathname
separators. - Class ActionBase is now an abstract base class to more accurately
reflect its usage. Derived _ActionAction inherits the ABC, so it
now declares (actually raises NotImplementedError) two methods it
doesn't use so it can be instantiated by unittests and others. - Added more type annotations to internal routines.
- Cleaned up dblite module (checker warnings, etc.).
- TeX tests: skip tests that use makeindex or epstopdf not installed, or
ifkpsewhich glossaries.sty
fails.
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.5.2..HEAD
97 Mats Wichmann
39 William Deegan
20 Joseph Brill
12 Alex Burton
4 StenGruener
2 Jonathon Reinhart
2 LiuYinCarl
2 Max Bachmann
1 Kenshin
1 Shohei YOSHIDA
1 ...
4.5.2 Release
A new SCons release, 4.5.2, is now available on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.5.1:
FIXES
- Fix a problem (#4321) in 4.5.0/4.5.1 where ParseConfig could cause an
exception in MergeFlags when the result would be to add preprocessor
defines to existing CPPDEFINES. The following code illustrates the
circumstances that could trigger this:
env=Environment(CPPDEFINES=['a'])
env.Append(CPPDEFINES=['b'])
env.MergeFlags({'CPPDEFINES': 'c'})
PACKAGING
- Remove the redundant
wheel
dependency frompyproject.toml
,
as it is added automatically by the setuptools PEP517 backend.
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.5.1..HEAD
3 Mats Wichmann
2 William Deegan
1 Michał Górny
4.5.1 Release
A new SCons release, 4.5.1, is now available on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.5.0:
FIXES
- Fix a problem in 4.5.0 where using something like the following code
will cause a Clone()'d environment to share the CPPDEFINES with the
original Environment() which was cloned. Causing leakage of changes
to CPPDEFINES when they should be completely independent after the Clone.
env=Environment(CPPDEFINES=['a'])
env.Append(CPPDEFINES=['b']) (or AppendUnique,Prepend,PrependUnique)
env1=env.Clone()
env1.Append(CPPDEFINES=['c']) (or any other modification, but not overwriting CPPDEFINES)
Now env['CPPDEFINES'] will contain 'c' when it should not.
Thanks to the following contributors listed below for their contributions to this release.
git shortlog --no-merges -ns 4.5.0..HEAD
3 William Deegan
1 Mats Wichmann
4.5.0 Release
A new SCons release, 4.5.0, is now available on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.4.0:
NOTE: If you build with Python 3.10.0 and then rebuild with 3.10.1 (or higher), you may
see unexpected rebuilds. This is due to Python internals changing which changed
the signature of a Python Action Function.
NOTE: If you use a dictionary to specify your CPPDEFINES, you may see an unexpected rebuild.
The insertion order of dictionary keys is now preserved when generating the command line.
Previously these were sorted alphabecially. This change to the command line,
while generating identical set of CPPDEFINES can change order and cause a rebuild.
NEW FUNCTIONALITY
- Added ValidateOptions() which will check that all command line options are in either
those specified by SCons itself, or by AddOption() in SConstruct/SConscript. It should
not be called until all AddOption() calls are completed. Resolves Issue #4187 - Added --experimental=tm_v2, which enables Andrew Morrow's NewParallel Job implementation.
This should scale much better for highly parallel builds. You can also enable this via SetOption(). - Added FILE_ENCODING, to allow explicitly setting the text encoding for files
written by the Textfile() and Substfile() builders. If not specified, Textfile() and Substfile() builders
will write files as UTF-8.
DEPRECATED FUNCTIONALITY
- The qt tool has been renamed qt3.
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- Added -fsanitize support to ParseFlags(). This will propagate to CCFLAGS and LINKFLAGS.
- Calling EnsureSConsVersion() and EnsurePythonVersion() won't initialize
DefaultEnvironment anymore. - The console message from the Chmod() action function now displays
octal modes using the modern Python syntax (0o755 rather than 0755). - Migrated logging logic for --taskmastertrace to use Python's logging module. Added logging
to NewParallel Job class (Andrew Morrow's new parallel job implementation) - Preliminary support for Python 3.12.
- Run LaTeX after biber/bibtex only if necessary
- Configure context methods CheckLib and CheckLibWithHeader now expose
two additional keyword arguments: 'append', which controls whether to append
(the default) or prepend discovered libraries to $LIBS, and 'unique',
which controls whether to add the library if it is already in the $LIBS
list. This brings the library-adding functionality in Configure in line
with the regular Append, AppendUnique, Prepend and PrependUnique methods. - CPPDEFINES values added via a dictionary type are longer sorted by
key. This used to be required to maintain a consistent order of
commandline arguments between SCons runs, but meant macros were not
always emitted in the order entered. Sorting is no longer required
after Python interpreter improvements. There might be a one-time
rebuild of targets that involved such sorted keys in their actions. - Renamed the 'qt' tools to 'qt3' since the logic in that tool is only for QT version 3.
Renamed all env vars which affect qt3 from QT_ to QT3_. If you are still using SCons
to build QT 3 code, you'll need to update your SConscripts. Note that using 'qt' tool
has been deprecated for some time.
FIXES
- Added missing newline to generated compilation database (compile_commands.json)
- A list argument as the source to the Copy() action function is now handled.
Both the implementation and the strfunction which prints the progress
message were adjusted. - The Java Scanner processing of JAVACLASSPATH for dependencies (behavior
that was introduced in SCons 4.4.0) is adjusted to split on the system's
search path separator instead of on a space. The previous behavior meant
that a path containing spaces (e.g. r"C:\somepath\My Classes") would
lead to unexpected errors. If the split-on-space behavior is desired,
pre-split the value: instead of: env["JAVACLASSPATH"] = "foo bar baz"
use: env["JAVACLASSPATH"] = env.Split("foo bar baz")
There is no change in how JAVACLASSPATH gets turned into the -classpath
argument passed to the JDK tools. - Ninja: Fix execution environment sanitation for launching ninja. Previously if you set an
execution environment variable set to a python list it would crash. Now it
will create a string joining the list with os.pathsep - Fixed command line argument --diskcheck: previously a value of 'none' was ignored.
SetOption('diskcheck','none') is unaffected, as it did not have the problem. - Fixed Issue #4275 - when outputting compilation db and TEMPFILE was in use, the compilation db would have
command lines using the generated tempfile for long command lines, instead of the full command line for
the compilation step for the source/target pair. - A refactor in the caching logic for version 4.4.0 left Java inner classes
failing with an exception when a CacheDir was enabled. This is now corrected. - When using the gfortran tool (the default on most platforms as long as a GNU
toolchain is installed), the user setting of the "dialect" compilers
(F77, F90, F03 and F09, as well as the shared-library equivalents SHF77,
SHF90, SHF03, SHF09) is now honored; previously the tool overwrote the
settings to 'gfortran', which made it difficult reference a cross-compile
version for dialects. - Fix issue #2757, where Configure checks that perform a check which reads a modified source
(including program, source or header file(s)) would incorrectly mark that file "up to date" so the
actual build would not see the file as modified. Leading to incorrect incremental builds.
Now configure checks now clear node info for non conftest nodes, so they will be re-evaluated for
the real taskmaster run when the build commences. - Inconsistent behavior of adding values to the CPPDEFINES construction
variable has been cleaned up (described in issue #4254). Now a tuple,
whether provided by itself or as a member of a list, is consistently
interpreted as a macro with replacement value. When adding a list,
individual members are added in sequence without interpretation.
A string value containing spaces is split if it is the initial value or
added, but not if it is given as a member of an added list. Detection
of duplicate macros now works for both valued and unvalued forms. - Handling of CPPDEFINES macros via Prepend and PrependUnique now works
(previously this was special-cased only for Append and AppendUnique).
IMPROVEMENTS
- Changed the Taskmaster trace logic to use python's logging module.
- Add cache-debug messages for push failures.
- Added error message to handle the case when SCons attempts to retrieve all the targets
for a specified builder from the CacheDir, fails to do so, and then runs into an error
when deleting the files which were retrieved. Previously if this happened there were no
errors or warnings.
PACKAGING
- SCons now has three requirements files: requirements.txt describes
requirements to run scons; requirements-dev.txt requirements to
develop it - mainly things needed to run the testsuite;
requirements_pkg.txt are the requirements to do a full build
(including docs build) with an intent to create the packages. - Moved rpm and debian directories under packaging
- Added logic to help packagers enable reproducible builds into packaging/etc/.
Please read packaging/etc/README.txt if you are interested. - A zipapp of scons-local is now also built.
DOCUMENTATION
- Updated the --hash-format manpage entry.
- EnsureSConsVersion, EnsurePythonVersion, Exit, GetLaunchDir and
SConscriptChdir are now listed as Global functions only. - Updated the docs for Glob.
- Updated SHELL_ENV_GENERATORS description and added versionadded indicator.
- JAVABOOTCLASSPATH, JAVACLASSPATH and JAVASOURCEPATH better document the
acceptable syntax for values, and how they will be interpreted,
including that JAVACLASSPATH will be scanned for dependencies.
Added note on the possibly surprising feature that SCons always passes
-sourcepath when calling javac, which affects how the class path is
used when finding sources. - Updated the User Guide chapter on installation: modernized the notes
on Python installs, SCons installs, and having multiple SCons versions
present on a single system. - Updated the User Guide chapter on variant directories with more
explanation, and the introduction of terms like "out of tree" that
may help in forming a mental model. - Additional explanations for MSVSProject and MSVSSolution builders.
- Updated MSVC documentation - adds "version added" annotations on recently
added construction variables and provides a version-mapping table. - Added further details in the documentation of Append and related methods
on the special handling of CPPDEFINES.
DEVELOPMENT
- Refactored SCons/Taskmaster into a package. Moved SCons/Jobs.py into that package.
NOTE: If you hook into SCons.Jobs, you'll have to change that to use SCons.Taskmaster.Jobs - Refactored SCons.Util, which had grown quite large, to be a package,
not a single-file module. Change should be transparent: the same import
of SCons.Util and public symbols from it will continue to work, however
code which reaches directly in to grab private symbols (starting with
underscore) which moved to a submodule, that code will have to be adjusted,
as those are not imported to the package level (new SCons.Util.hashes has
some of these, which are used by existing unit tests). - Added overrides argument to SCons.Subst.scons_subst(), subst_list(), subst(), and Action's process(),
strfunction(). This...
SCons 4.4.0
A new SCons release, 4.4.0, is now available
on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.3.0:
NOTE: If you build with Python 3.10.0 and then rebuild with 3.10.1 (or higher), you may
see unexpected rebuilds. This is due to Python internals changing which changed
the signature of a Python Action Function.
NEW FUNCTIONALITY
- Added MSVC_USE_SCRIPT_ARGS Environment variable which specifies command line arguments
to pass to the script specified by MSVC_USE_SCRIPT. - Added Configure.CheckMember() checker to check if struct/class has the specified member.
- Added SHELL_ENV_GENERATORS construction variable. This variable should be set to a list
(or an iterable) which contains functions to be called in order
when constructing the execution environment (Generally this is the shell environment
variables). This allows the user to customize how (for example) PATH is constructed.
Note that these are called for every build command run by SCons. It could have considerable
performance impact if not used carefully. - Added MSVC_USE_SETTINGS construction variable to pass a dictionary to configure the msvc compiler
system environment as an alternative to bypassing Visual Studio autodetection entirely. - Added MSVC_SDK_VERSION construction variable which allows building with a specific Microsoft
SDK version. This variable is used with the msvc batch file determined via autodetection. Refer
to the documentation for additional requirements and validation details. - Added MSVC_TOOLSET_VERSION construction variable which allows building with a specific toolset
version. This variable is used with the msvc batch file determined via autodetection. This
variable does not affect the autodetection and selection of msvc instances. The toolset version
is applied after an msvc instance is selected. This could be the default version of msvc. Refer
to the documentation for additional requirements and validation details. Addresses issue #3265,
issue #3664, and pull request #4149. - Added MSVC_SPECTRE_LIBS construction variable which allows building with spectre-mitigated
Visual C++ libraries. This variable is used with the msvc batch file determined via autodetection.
Refer to the documentation for additional requirements and validation details. - Added MSVC_SCRIPT_ARGS construction variable which specifies command line arguments that are
passed to the msvc batch file determined via autodetection. Refer to the documentation for
additional requirements and validation details. Addresses enhancement issue #4106. - Ninja: Added new alias "shutdown-ninja-scons-daemon" to allow ninja to shutdown the daemon.
Also added cleanup to test framework to kill ninja scons daemons and clean ip daemon logs.
NOTE: Test for this requires python psutil module. It will be skipped if not present. - Ninja: Added command line variable NINJA_CMD_ARGS that allows to pass through ninja command line args.
This can also be set in your Environment(). - Added a global policy setting and an environment construction variable for specifying the
action to be taken when an msvc request cannot be satisfied. The available options are "error",
"exception", "warning", "warn", "ignore", and "suppress". The global policy variable may be
set and retrieved via the functions msvc_set_notfound_policy and msvc_get_notfound_policy,
respectively. These two methods may be imported from SCons.Tool.MSCommon. The environment
construction variable is MSVC_NOTFOUND_POLICY. When defined, the environment construction
variable overrides the global policy setting for a given environment. When the active policy
is "error" or "exception", an MSVCVersionNotFound exception is raised. When the active policy
is "warning" or "warn", a VisualCMissingWarning warning is issued and the constructed
environment is likely incomplete. When the active policy is "ignore" or "suppress", no action
is taken and the constructed environment is likely incomplete. As implemented, the default
global policy is "warning". The ability to set the global policy via an SCons command-line
option may be added in a future enhancement. - Added a global policy setting and an environment construction variable for specifying the
action to be taken when msvc script errors are detected. The available options are "error",
"exception", "warning", "warn", "ignore", and "suppress". The global policy variable may be
set and retrieved via the functions msvc_set_scripterror_policy and msvc_get_scripterror_policy,
respectively. These two methods may be imported from SCons.Tool.MSCommon. The environment
construction variable is MSVC_SCRIPTERROR_POLICY. When defined, the environment construction
variable overrides the global policy setting for a given environment. When the active policy
is "error" or "exception", an MSVCScriptExecutionError exception is raised when msvc batch file
errors are detected. When the active policy is "warning" or "warn", an MSVCScriptExecutionWarning
warning is issued when msvc batch file errors are detected. When the active policy is "ignore" or
"suppress", msvc batch error messages are suppressed. As implemented, the default global policy
is "ignore". The ability to set the global policy via an SCons command-line option may be added
in a future enhancement. - Added experimental function msvc_query_version_toolset to SCons.Tool.MSCommon. Given a version
specification, this function will return an msvc version and an msvc toolset version. The msvc
toolset version may be None. The msvc version and msvc toolset version can be used in the
environment construction variables MSVC_VERSION and MSVC_TOOLSET_VERSION, respectively. The
version specification may be an msvc version or an msvc toolset version. This is a proxy for
using an msvc toolset version to select an msvc instance. This function may be removed when an
msvc toolset version is used during msvc instance selection. - Fortran: a new construction variable FORTRANCOMMONFLAGS is added which is
applied to all Fortran dialects, to enable global (all-dialect) settings. - lex: two new construction variables are introduced (LEX_HEADER_ILE
and LEX_TABLES_FILE) as the preferred way of specifying extra files that
the tool can generate. - yacc: two new construction variables are introduced (YACC_HEADER_FILE
and YACC_GRAPH_FILE) as the preferred way of specifying extra files that
the tool can generate (applies only when using GNU flex and GNU bison).
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- On Windows,
%AllUsersProfile%\scons\site_scons
is now the default "system"
location for a site_scons directory.
%AllUsersProfile%\Application Data\scons\site_scons
will continue to work.
There does not seem to be any existing convention to use an
"Application Data" subdirectory here. - Action._subproc() can now be used as a python context manager to ensure that the
POpen object is properly closed. - SCons help (-H) no longer prints the "ignored for compatibility" options,
which are still listed in the manpage. - Help is now sensitive to the size of the terminal window: the width of the
help text will scale to wider (or narrower) terminals than 80 characters. - Ninja: Changed generated build.ninja file to run SCons only build Actions via
a SCons Deamon. Added logic for starting and connecting to SCons daemon (currently
only used for ninja) - The change to "content" and "content-timestamp" Decider names is reflected
in the User Guide as well, since the hash function may be other than md5
(tidying up from earlier change) - If the (experimental) SCONS_CACHE_MSVC_CONFIG feature is used, it will now
attempt a sanity check for the cached compiler information, and regenerate
it if needed. Previously, this cache would fail if a compiler upgrade caused
a change to internal paths (e.g. upgrading from 17.1 to 17.2 causes
a necessary path component in some of the cached vars to need to 14.32.31326
instead of 14.31.31103), and the cache file needed to be manually removed.
The default cachefile name is now "scons_msvc_cache.json" rather than
".scons_msvc_cache" so there should be no transition problem if using the
default; if using a custom cache file name, the cache should still be
manually removed if there are problems to transition to the new style. - Ninja: Update ninja file generation to only create response files for build commands
which exceed MAXLINELENGTH - Update the debug output written to stdout for MSVC initialization which is enabled
by setting SCONS_MSCOMMON_DEBUG=- to use the logging module. Also changed the debug
output format written to stdout to include more information about the source for each
message of MSVC initialization debugging output. A single space was added before the
message for all debugging output records written to stdout and to files. - Ninja: Made ninja tool force the ninja file as the only target. Also improved the default
targets setup and made sure there is always a default target for
the ninja file, which excludes targets that start and stop the daemon. - Ninja: Update ninja tool so targets passed to SCons are propgated to ninja when scons
automatically executes ninja. - Add JavaScanner to include JAVACLASSPATH as a dependency when using the Java tool.
- The build argument (i.e., x86) is no longer passed to the MSVC 6.0 to 7.1 batch
files. This may improve the effectiveness of the internal msvc cache when using
MSVC detection and when bypassing MSVC detection as the MSVC 6.0 to 7.1 batch files
do not expect any arguments. - Propagate the OS and windir environment variables from the system en...
4.3.0 Release is available
A new SCons release, 4.3.0, is now available
on the SCons download page:
https://scons.org/pages/download.html
NOTE: 4.3.0 now requires Python 3.6.0 and above. Python 3.5.x is no longer supported
Here is a summary of the changes since 4.2.0:
NEW FUNCTIONALITY
- Ninja - Added ninja API 'NINJA_FORCE_SCONS_BUILD' to force a node to callback to scons.
- Add support for Visual Studio 2022.
DEPRECATED FUNCTIONALITY
- The qt tool, which targets Qt version 3, is deprecated. Qt3 has been unsupported by
upstream for many years. Qt4 and Qt5 tools are available from scons-contrib.
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- Ninja - Expanded ninja Mkdir to also support Mkdir actions.
- Further PCH updates. It's now recommended that env['PCH'] should always be a File node.
Either via return value from env.PCH() or by explicitly using File('StdAfx.pch'). - Change SCons.Platform.win32.get_architecture() to return platform.platform() when run in an
environment where neither: PROCESSOR_ARCHITEW6432 nor PROCESSOR_ARCHITECTURE is set.
This should fix platform tests which started failing when HOST_OS/HOST_ARCH changes
introduced by Aaron Franke (listed below) were merged. - The Java tool now accepts more versions (up to 17.0), and is better
able to detect the many builds of OpenJDK available since it became
designated the reference Java implementation.
FIXES
- Fix reproducible builds. Restore logic respecting SOURCE_DATE_EPOCH when set.
- Small fix to ensure CLVar default value is an empty list.
See MongoDB bug report: https://jira.mongodb.org/browse/SERVER-59656
Code contributed by MongoDB. - Ninja - Fix ninja tool to never use for_sig substitution because ninja does not use signatures. This
issue affected CommandGeneratorAction function actions specifically. - Fix PCH not being evaluated by subst() where necessary.
- Fix issue #4021. Change the way subst() is used in Textfile() to not evaluate '$$(' -> '$',
but instead it should yield '$('. - Ninja - Fix command line escaping for ninja dollar sign escape. Without escaping ninja properly,
- Fix MSVS tests (vs-N.N-exec.py) for MSVS 6.0, 7.0, and 7.1 (import missing module).
- Fix command line escaping for ninja dollar sign escape. Without escaping ninja properly,
the ninja file scons regenerate and callback invocations will lose the $ characters used in
the scons command line which ninja uses itself for escaping. For Example:
scons BUILD=xyz OTHERVAR=$BUILD
Prior to this fix, it would cause ninja to fail to escape the dollar sign, leading to the
single dollar sign being used as a ninja escape character in the ninja file. - Ninja - Fixed an issue where if you control-c and/or killed ninja while it was running scons to regenerate
build.ninja you would end up with no build.ninja file and have to rerun scons from scratch.
Code contributed by MongoDB.
DEVELOPMENT
- Added --no-ignore-skips to runtest.py. Changed default to ignore skips when setting
runtest.py's exit status. Previously would exit 2 if any tests were skipped.
Now will only exit 2 if user specifies --no-ignore-skips and some tests were skipped.
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.2.0..HEAD
47 Mats Wichmann
46 William Deegan
14 Jacob Cassagnol
11 Daniel Moody
8 Ryan Egesdahl
5 Joseph Brill
4 Omar Polo
2 Brian Quistorff
1 Aaron Franke
4.2.0 Release is available.
A new SCons release, 4.2.0, is now available
on the SCons download page:
https://scons.org/pages/download.html
Here is a summary of the changes since 4.1.0:
NOTE: The 4.2.0 Release of SCons will deprecate Python 3.5 Support. Python 3.5 support will be dropped in the next major release.
NEW FUNCTIONALITY
- Add support for the (TARGET,SOURCE,TARGETS,SOURCES,CHANGED_TARGETS,CHANGED_SOURCES}.relpath property.
This will provide a path relative to the top of the build tree (where the SConstruct is located)
Fixes #396
- Added --experimental flag, to enable various experimental features/tools. You can specify
'all', 'none', or any combination of available experimental features.
- Added affect_signature flag to _concat function. If set to False, it will prepend and append $( and $).
That way the various Environment variables can use that rather than "$( _concat(...) $)".
DEPRECATED FUNCTIONALITY
- Deprecate Python 3.5 as a supported version.
CHANGED/ENHANCED EXISTING FUNCTIONALITY
- SCons now supports the command-line parameter `--hash-format` to override the default
hash format that SCons uses. It can also be set via `SetOption('hash_format')`. Supported
values are: `md5`, `sha1`, and `sha256`. For all hash formats other than
the default of `md5`, the SConsign database will include the name of the hash format.
For example, `--hash-format=sha256` will create a SConsign with name
`.sconsign_sha256.dblite.`.
- Improve Subst()'s logic to check for proper callable function or class's argument list.
It will now allow callables with expected args, and any extra args as long as they
have default arguments. Additionally functions with no defaults for extra arguments
as long as they are set using functools.partial to create a new callable which set them.
- Internal has_key methods removed from SCons' dictionary-like objects
SubstitutionEnvironment and OverrideEnvironment - in other words,
an env - to match Python 3 which no longer has dict.has_key.
- Removed long-deprecated construction variables PDFCOM, WIN32_INSERT_DEF,
WIN32DEFPREFIX, WIN32DEFSUFFIX, WIN32EXPPREFIX, WIN32EXPSUFFIX.
All have been replaced by other names since at least 1.0.
- Added CACHEDIR_CLASS construction variable and expanded CacheDir method args
to support SCons invoking CacheDir derived classes for CacheDir customization.
Moved copy_from_cache attribute from the Environment class to CacheDir class.
Code contributed by MongoDB.
- Update BuildTask to pass all targets to the progress object fixing an issue
where multi-target build nodes only got the first target passed to the progress
object.
- Change SConscript() missing SConscript behavior - if must_exist=False,
the warning is suppressed.
FIXES
- The command-line parameter `--md5-chunksize` is now deprecated. Use `--hash-chunksize`
instead.
- Fix Issue #3906 - `IMPLICIT_COMMAND_DEPENDENCIES` was not properly disabled when
set to any string value (For example ['none','false','no','off'])
Also previously 'All' wouldn't have the desired affect.
- DocbookXslt tool: The XSLT stylesheet file is now initialized to an env.File() Node,
such that dependencies work correctly in hierarchical builds (eg when using
DocbookXslt in SConscript('subdir/SConscript') context.
- The Install builder will now set the writable mode on the file(s) it
copies. This restores the (previously undocumented) SCons behavior
that regressed as of 4.0.0.
- Fix issue #3790: Generators in CPPDEFINES now have access to populated source
and target lists
- Fix a potential race condition in shared cache environments where the permissions are
not writeable for a moment after the file has been renamed and other builds (users) will copy
it out of the cacheSmall reorganization of logic to copy files from cachedir. Moved CacheDir
writeable permission code for copy to cache behind the atomic rename operation.
- Fixed intermediate and and multi target nodes generated from SConf tests not being marked
as is_conftest().
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.1.0..HEAD
177 William Deegan
101 Daniel Moody
95 Mats Wichmann
25 Adam Gross
4 greenbender
4 Daniel
4 Henrik Maier
4 Mathew Robinson
3 Andrew Morrow
3 Ivan Kravets
3 Dillan Mills
1 WholesomeIsland
1 dependabot[bot]
1 djh
1 Joseph Brill
4.1.0 Release
SCons 4.1.0 is available
Here is a summary of the changes since 4.0.1:
NEW FUNCTIONALITY
- Add
COMPILATIONDB_PATH_FILTER
env option for CompilationDatabase() builder which allows
filtering of entries based on the output file paths using glob style file matching (issue #3742). - Add
ZIP_OVERRIDE_TIMESTAMP
env option to Zip builder which allows for overriding of the file
modification times in the archive. - Raise an error if an option (not otherwise consumed) is used which
looks like an abbreviation of one one added by AddOption. (#3653)
CHANGED/ENHANCED EXISTING FUNCTIONALITY
-
Completely rewrote versioned shared libraries logic.
Added support forSOVERSION
via dmoody's initial PR #3733 -
No longer automatically disable setting SONAME on shared libraries on OpenBSD.
-
Environment.SideEffect()
no longer adds duplicate side effects.
NOTE: The list of returned side effect Nodes will not include any
duplicate side effect Nodes. -
/snap/bin is added to the default search path for the 'posix' platform.
-
Completely rewrote versioned shared libraries logic.
-
Added support for
SOVERSION
-
No longer automatically disable setting
SONAME
on shared libraries on OpenBSD. -
Switch to use ctypes instead of pywin32 (requiring an extra pip install) - Fixes Github Issue #2291
- pywin32 no longer necessary for SCons install. (pip install SCons will no longer also require pywin32 on win32)
- Remove pywin32 usage from SCons.Util where it was used for accessing the registry. Python native winreg
library already includes this functionality. - Remove using pywin32 to retrieve peak memory usage on Win32 for
--debug=memory
-
Tool module not found will now raise a UserError to more clearly indicate this is
probably an SConscript problem, and to make the traceback more relevant. -
Fix three issues with MergeFlags:
-
Only try to initialize the wix tool by default (or when tool
default
is explicitly installed)
on Windows based systems. -
Add
/snap/bin
toenv['PATH']
on POSIX, although this is only
really useful for a subset of POSIX systems that use snaps.
Was needed for CI builds, which run on Ubuntu LTS images.
FIXES
- Fix yacc tool, not respecting
YACC
set at time of tool initialization. - Fix race condition bug when initializing a scons cache directory at the
same time from multiple threads or processes. Problem described in PR #3114.
This is a simpler fix which should avoid some problems identified with the initial PR.
(Credit to Fredrik Medley for reporting the issue, the initial PR, and discussing and testing
this solution) - Fix incorrect cache hits and/or misses when running in interactive mode by having
SCons.Node.Node.clear() clear out all caching-related state. - Fix Zip builder not rebuilding when
ZIPROOT
env option was changed. - Fix python3 crash when Value node get_text_content when child content does not have decode()
NOTE: If you depend on Value node's get_text_content returning concatenated contents of it's
children. This may break your code. It now concatenates the csig() of all children. - Fix Zip tool to respect ZIPCOMSTR. Previously all zip builder calls would yield something
like zip(["test.zip"], ["zip_scons.py"]) and ignoreZIPCOMSTR
ifZIPCOM
andZIPCOMSTR
weren't set after the Environment/Tool is initialized. (Explained in PR #3659) - Fix issue where java parsed a class incorrectly from lambdas used after a new.
- Fix using
TEMPFILE
in multiple actions in an action list. Previously a builder, or command
with an action list like the following could yield a single tempfile with the first TEMPFILE's contents, used by both steps
in the action list.
.. code-block:: text
['${TEMPFILE("xxx.py -otempfile $SOURCE")}', '${TEMPFILE("yyy.py -o$TARGET tempfile")}']
- Cleanup in SCons.Util.AddMethod. If called with an environment instance
as the object to modify, the method would not be correctly set up in
any Clone of that instance. Now tries to detect this and calls
MethodWrapper to set up the method the same way env.AddMethod does.
MethodWrapper moved to Util to avoid a circular import. Fixes #3028. - Fix Issue #3014 - Empty file and missing file have same csig
PACKAGING
- Fix Issue #3759 - include scons.1, sconsign.1, scons-time.1 manpages in sdist and wheel packages.
- Pick a better "Topic" Trove classifier for SCons: SW Dev / Build Tools
DOCUMENTATION
- Include previously-excluded SideEffect section in User Guide.
DEVELOPMENT
- Rework runtest.py to use argparse for arg handling (was a mix
of hand-coded and optparse, with a stated intent to "gradually port"). - Add options to runtest to generate/not generate a log of failed tests,
and to rerun such tests. Useful when an error cascades through several
tests, can quickly try if a change improves all the fails. Dropped
runtest test for fallback from qmtest, not needed; added new tests.
Thanks to the following contributors listed below for their contributions to this release.
.. code-block:: text
git shortlog --no-merges -ns 4.0.1..HEAD
115 Mats Wichmann
83 William Deegan
14 Adam Gross
4 Joseph Brill
3 Joachim Kuebart
2 GIT
2 Daniel Moody
2 James Benton
1 Unknown
1 Daniel
1 anatoly techtonik
1 Dirk Baechle
1 dependabot[bot]
1 David H
1 Michał Górny
1 Simon Tegelid
.. _page: http://sourceforge.net/projects/scons/files/scons/4.1.0/
.. _ChangeLog: https://raw.githubusercontent.com/SCons/scons/rel_4.1.0/CHANGES.txt
3.0.5a2
This is an alpha release for the Mesa project to try to ensure their windows build issue with MD5-timestamp decider has been resolved.
This should resolve: https://bugs.freedesktop.org/show_bug.cgi?id=109443