A new SCons release, 4.7.0, is now available on the SCons download page:


Here is a summary of the changes since 4.6.0:


  • 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.


  • 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).


  • 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.


  • 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.


  • 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.


  • 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.


  • 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.

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