<div dir="ltr">A new SCons release, 4.9.10, is now available on the SCons download page:<br><br>    <a href="https://scons.org/pages/download.html">https://scons.org/pages/download.html</a><br><br>Here is a summary of the changes since 4.9.1:<br><br><br>CHANGED/ENHANCED EXISTING FUNCTIONALITY<br>---------------------------------------<br><br>- Nodes are now treated as PathLike objects.<br><br>- Replace use of old conditional expression idioms with the official<br>  one from PEP 308 introduced in Python 2.5 (2006). The idiom being<br>  replaced (using and/or) is regarded as error prone.<br><br>- MSVC: The following shell environment variables are now included in<br>  the environment used by SCons to initialize MSVC when defined:<br>  VCPKG_DISABLE_METRICS, VCPKG_ROOT, POWERSHELL_TELEMETRY_OPTOUT,<br>  PSDisableModuleAnalysisCacheCleanup, and PSModuleAnalysisCachePath.<br>  A subset of the shell environment PSModulePath is included in the<br>  environment used by SCons to initialize MSVC when defined.  None of<br>  these variables and values are propagated to the user's SCons<br>  environment after running the MSVC batch files.<br><br>- TEMPFILE: A UserError exception is raised when encoding<br>  the contents of the tempfile fails due to a limited set of expected<br>  exceptions (e.g., UnicodeError).<br><br>FIXES<br>-----<br><br>- Fixed SCons.Variables.PackageVariable to correctly test the default<br>  setting against both enable & disable strings. (Fixes #4702)<br><br>- MSVC: Fixed a significant delay experienced in the Github Actions<br>  windows 2022 and 2025 runners due to the environment used by SCons<br>  to initialize MSVC when the Visual Studio vcpkg component is<br>  installed. The Github Actions windows 2019 runner was not affected.<br><br>- Fix the variant dir component being missing from generated source file<br>  paths with CompilationDatabase() builder (Fixes #4003).<br><br>- Ninja tool generate_command() fixed to call subst() with correct<br>  arguments in ListAction case. Unit tests added for generate_command.<br><br>- Fix the SCons.Scanner.LaTeX to mimic LaTeX's search method.<br><br>- Ninja tool now quotes targets (if necessary) when calling back to<br>  SCons - both in the POST request constructed to contact the<br>  daemon, and in the command eventually issued from the deamon.<br><br>- Ninja tool is adjusted to recognize and emit the right rule in<br>  the case of special actions that the tool recognizes, like Copy.<br>  This was working in the case of single commands, but not when part<br>  of a list of actions. Recognition only happens if the special<br>  action is first in the list.<br><br>- Fix a test problem on Windows where UNC tests failed due to incorrect path<br>  munging if a non-default %TEMP% was defined (as in moving to a Dev Drive).<br><br>- Fix Issue #4746. The TEMPFILE is written in utf-8 encoding by default.<br>  If the tempfile contents cannot be decoded by the command the<br>  tempfile is passed to, (new) TEMPPFILEENCODING can be used to speficy a<br>  different encoding to use. On Windows, the username may be a cause of this,<br>  as the default path for temporary files includes the username. Setting<br>  (existing) TEMPFILEDIR may also help in this case.<br><br>- Tweak runtest.py and test framework to more reliably get the requested<br>  Python binary (for odd Windows setups + Python launcher)<br><br>- Fix the tempfile encoding test regex strings to remove warnings in<br>  python 3.12 and 3.13.<br><br>- Incremental builds in Interactive mode could fail on platforms that<br>  support batch mode (currently: Windows).  Change the way the changed<br>  and unchanged target and source lists are accounted for to resolve.<br>  Fixes #3029.<br><br>IMPROVEMENTS<br>------------<br><br>- Virtualenv support module modernized: previously looked first for an<br>  unofficial approach from before venv support was made part of Python<br>  in 3.3; now looks for the official approach first. This in an internal<br>  detail, the API is unchanged.<br><br>- Add internal routines to manipulate publicly visible argument and<br>  target lists. These interfaces are not part of the public API.<br><br>- Improve the error message when an environment method is called which<br>  does not exist in that environment. Mostly this is intended to be a<br>  bit more helpful in the case of a builder which did not instantiate.<br><br>PACKAGING<br>---------<br><br>- The generated roff (.1) manpages are now included in the<br>  scons-doc tarball built at part of the release process,<br>  in addition to the html and txt versions. For distribution<br>  packaging, the manpages can be extracted from here (downloadable<br>  from <a href="https://scons.org/doc/">https://scons.org/doc/</a> using a a version-specific URL,<br>  e.g. <a href="https://scons.org/doc/4.9.1/scons-doc-4.9.1.tar.gz">https://scons.org/doc/4.9.1/scons-doc-4.9.1.tar.gz</a>).<br><br>DOCUMENTATION<br>-------------<br><br>- Clarify how pre/post actions on an alias work.<br><br>- Improve the description of PackageVariable.<br><br>- The "API Docs" build (Sphinx) configuration is improved, and<br>  SConsDoc and SConsExample are now included - their API is<br>  interesting to developers working on SCons (needed to write docs),<br>  even if not part of "The SCons API" itself.<br><br>- Missing documentation for the Virtualenv() function is added.<br>  Note that the User Guide previously described a negative outcome<br>  as returning None.  It is now explicit that the path is returned if<br>  running in a virtualenv, and an empty (falsy) string if not.<br><br>- Improve the wording of Configure methods.<br><br>- Improve the wording of AppendENVPath and PrependENVPath in manpage.<br><br>- Improve documentation of builder methods and builder objects.<br><br>- All the User Guide sections now have textual anchors, meaning there<br>  no longer be build-generated numeric tags like<br>  <a href="https://scons.org/doc/production/HTML/scons-user.html#id1514">https://scons.org/doc/production/HTML/scons-user.html#id1514</a><br><br>DEVELOPMENT<br>-----------<br><br>- runtest.py once again finds "external" tests, such as the tests for<br>  tools in scons-contrib. An earlier rework had broken this.  Fixes #4699.<br><br>- Clean up C and C++ FLAGS tests. Tests which use a real compiler<br>  are now more clearly distinguished (-live.py suffix and docstring).<br><br>- Fix a couple of unit tests to not fail with Python 3.14. These involve<br>  expectations for bytecode strings and error message contents; there was<br>  no problem with SCons itself using 3.14.<br><br>- Move the GitHub workflow test runner files from the SCons root to<br>  the ci subdirectory of the testing directory.<br><br>- GitHub: Enable the interactive tests on windows.<br><br>- GitHub: Enable the packaging tar xz test on windows.<br><br>- GitHub: Exclude two ninja tests that consistently fail on MacOS in<br>  the experimental tests workflow.<br><br>- GitHub: Add a workflow file to test MSVC with optional environment<br>  variables.<br><br>- GitHub: Populate the MSVC cache before running the test suite for<br>  select windows workflow files.<br><br>- GitHub: Upload the failed_tests.log artifact on failure in select<br>  workflow files.<br><br>- GitHub: Change the runtest workflow to allow the python version to<br>  be specified with the OS version.<br><br>- Testing: Increase the default timeout from 20 seconds to 60 seconds<br>  in the testing framework wait_for method. The timeout was increased<br>  during isolated experiments of the interactive tests on windows.<br><br>- Testing: Update the packaging tar bz2 and xz tests on on Windows.<br>  The packaging tar bz2 and xz tests should be skipped on Windows 10<br>  and GitHub windows-2022. The packaging tar bz2 and xz tests should<br>  be run on Windows 11 and GitHub windows-2025.<br><br>- Ninja: Increase the number of generated source files in the<br>  iterative speedup test from 200 to 250.  Increasing the workload<br>  should reduce the likelihood that the ninja tests are slower.<br><br>- Add more unit tests to internal AppendPath, PrependPath functions.<br><br>Thanks to the following contributors listed below for their contributions to this release.<br>==========================================================================================<br>.. code-block:: text<br><br><br>    git shortlog --no-merges -ns 4.9.1..HEAD<br>        61  Mats Wichmann<br>        46  Joseph Brill<br>        25  William Deegan<br>         6  Keith F. Prussing<br>         1  Bill Prendergast<br>         1  Edward Peek<br>         1  Thaddeus Crews<br><br></div>