SCons 4.10.0 released

Bill Deegan <bill-cJFiu+DHMVC5azolltMz9laTQe2KTcn/@public.gmane.org> Thu, 2 Oct 2025 10:54:42 -0700
Newsgroups gmane.comp.programming.tools.scons.devel
Message-ID <CAEyG4CF9edT2Hydg2COWs3_x8Rj37JkwGNvVLMN2ARKTzTA0wQ@mail.gmail.com>
--===============0101670867821094118==
Content-Type: multipart/alternative; boundary="000000000000a84608064030aee5"

--000000000000a84608064030aee5
Content-Type: text/plain; charset="UTF-8"

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

    https://scons.org/pages/download.html

Here is a summary of the changes since 4.9.1:


CHANGED/ENHANCED EXISTING FUNCTIONALITY
---------------------------------------

- Nodes are now treated as PathLike objects.

- Replace use of old conditional expression idioms with the official
  one from PEP 308 introduced in Python 2.5 (2006). The idiom being
  replaced (using and/or) is regarded as error prone.

- MSVC: The following shell environment variables are now included in
  the environment used by SCons to initialize MSVC when defined:
  VCPKG_DISABLE_METRICS, VCPKG_ROOT, POWERSHELL_TELEMETRY_OPTOUT,
  PSDisableModuleAnalysisCacheCleanup, and PSModuleAnalysisCachePath.
  A subset of the shell environment PSModulePath is included in the
  environment used by SCons to initialize MSVC when defined.  None of
  these variables and values are propagated to the user's SCons
  environment after running the MSVC batch files.

- TEMPFILE: A UserError exception is raised when encoding
  the contents of the tempfile fails due to a limited set of expected
  exceptions (e.g., UnicodeError).

FIXES
-----

- Fixed SCons.Variables.PackageVariable to correctly test the default
  setting against both enable & disable strings. (Fixes #4702)

- MSVC: Fixed a significant delay experienced in the Github Actions
  windows 2022 and 2025 runners due to the environment used by SCons
  to initialize MSVC when the Visual Studio vcpkg component is
  installed. The Github Actions windows 2019 runner was not affected.

- Fix the variant dir component being missing from generated source file
  paths with CompilationDatabase() builder (Fixes #4003).

- Ninja tool generate_command() fixed to call subst() with correct
  arguments in ListAction case. Unit tests added for generate_command.

- Fix the SCons.Scanner.LaTeX to mimic LaTeX's search method.

- Ninja tool now quotes targets (if necessary) when calling back to
  SCons - both in the POST request constructed to contact the
  daemon, and in the command eventually issued from the deamon.

- Ninja tool is adjusted to recognize and emit the right rule in
  the case of special actions that the tool recognizes, like Copy.
  This was working in the case of single commands, but not when part
  of a list of actions. Recognition only happens if the special
  action is first in the list.

- Fix a test problem on Windows where UNC tests failed due to incorrect path
  munging if a non-default %TEMP% was defined (as in moving to a Dev Drive).

- Fix Issue #4746. The TEMPFILE is written in utf-8 encoding by default.
  If the tempfile contents cannot be decoded by the command the
  tempfile is passed to, (new) TEMPPFILEENCODING can be used to speficy a
  different encoding to use. On Windows, the username may be a cause of
this,
  as the default path for temporary files includes the username. Setting
  (existing) TEMPFILEDIR may also help in this case.

- Tweak runtest.py and test framework to more reliably get the requested
  Python binary (for odd Windows setups + Python launcher)

- Fix the tempfile encoding test regex strings to remove warnings in
  python 3.12 and 3.13.

- Incremental builds in Interactive mode could fail on platforms that
  support batch mode (currently: Windows).  Change the way the changed
  and unchanged target and source lists are accounted for to resolve.
  Fixes #3029.

IMPROVEMENTS
------------

- Virtualenv support module modernized: previously looked first for an
  unofficial approach from before venv support was made part of Python
  in 3.3; now looks for the official approach first. This in an internal
  detail, the API is unchanged.

- Add internal routines to manipulate publicly visible argument and
  target lists. These interfaces are not part of the public API.

- Improve the error message when an environment method is called which
  does not exist in that environment. Mostly this is intended to be a
  bit more helpful in the case of a builder which did not instantiate.

PACKAGING
---------

- The generated roff (.1) manpages are now included in the
  scons-doc tarball built at part of the release process,
  in addition to the html and txt versions. For distribution
  packaging, the manpages can be extracted from here (downloadable
  from https://scons.org/doc/ using a a version-specific URL,
  e.g. https://scons.org/doc/4.9.1/scons-doc-4.9.1.tar.gz).

DOCUMENTATION
-------------

- Clarify how pre/post actions on an alias work.

- Improve the description of PackageVariable.

- The "API Docs" build (Sphinx) configuration is improved, and
  SConsDoc and SConsExample are now included - their API is
  interesting to developers working on SCons (needed to write docs),
  even if not part of "The SCons API" itself.

- Missing documentation for the Virtualenv() function is added.
  Note that the User Guide previously described a negative outcome
  as returning None.  It is now explicit that the path is returned if
  running in a virtualenv, and an empty (falsy) string if not.

- Improve the wording of Configure methods.

- Improve the wording of AppendENVPath and PrependENVPath in manpage.

- Improve documentation of builder methods and builder objects.

- All the User Guide sections now have textual anchors, meaning there
  no longer be build-generated numeric tags like
  https://scons.org/doc/production/HTML/scons-user.html#id1514

DEVELOPMENT
-----------

- runtest.py once again finds "external" tests, such as the tests for
  tools in scons-contrib. An earlier rework had broken this.  Fixes #4699.

- Clean up C and C++ FLAGS tests. Tests which use a real compiler
  are now more clearly distinguished (-live.py suffix and docstring).

- Fix a couple of unit tests to not fail with Python 3.14. These involve
  expectations for bytecode strings and error message contents; there was
  no problem with SCons itself using 3.14.

- Move the GitHub workflow test runner files from the SCons root to
  the ci subdirectory of the testing directory.

- GitHub: Enable the interactive tests on windows.

- GitHub: Enable the packaging tar xz test on windows.

- GitHub: Exclude two ninja tests that consistently fail on MacOS in
  the experimental tests workflow.

- GitHub: Add a workflow file to test MSVC with optional environment
  variables.

- GitHub: Populate the MSVC cache before running the test suite for
  select windows workflow files.

- GitHub: Upload the failed_tests.log artifact on failure in select
  workflow files.

- GitHub: Change the runtest workflow to allow the python version to
  be specified with the OS version.

- Testing: Increase the default timeout from 20 seconds to 60 seconds
  in the testing framework wait_for method. The timeout was increased
  during isolated experiments of the interactive tests on windows.

- Testing: Update the packaging tar bz2 and xz tests on on Windows.
  The packaging tar bz2 and xz tests should be skipped on Windows 10
  and GitHub windows-2022. The packaging tar bz2 and xz tests should
  be run on Windows 11 and GitHub windows-2025.

- Ninja: Increase the number of generated source files in the
  iterative speedup test from 200 to 250.  Increasing the workload
  should reduce the likelihood that the ninja tests are slower.

- Add more unit tests to internal AppendPath, PrependPath functions.

Thanks to the following contributors listed below for their contributions
to this release.
==========================================================================================
.. code-block:: text


    git shortlog --no-merges -ns 4.9.1..HEAD
        61  Mats Wichmann
        46  Joseph Brill
        25  William Deegan
         6  Keith F. Prussing
         1  Bill Prendergast
         1  Edward Peek
         1  Thaddeus Crews

--000000000000a84608064030aee5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">A new SCons release, 4.9.10, is now available on the SCons=
 download page:<br><br>=C2=A0 =C2=A0 <a href=3D"https://scons.org/pages/dow=
nload.html">https://scons.org/pages/download.html</a><br><br>Here is a summ=
ary of the changes since 4.9.1:<br><br><br>CHANGED/ENHANCED EXISTING FUNCTI=
ONALITY<br>---------------------------------------<br><br>- Nodes are now t=
reated as PathLike objects.<br><br>- Replace use of old conditional express=
ion idioms with the official<br>=C2=A0 one from PEP 308 introduced in Pytho=
n 2.5 (2006). The idiom being<br>=C2=A0 replaced (using and/or) is regarded=
 as error prone.<br><br>- MSVC: The following shell environment variables a=
re now included in<br>=C2=A0 the environment used by SCons to initialize MS=
VC when defined:<br>=C2=A0 VCPKG_DISABLE_METRICS, VCPKG_ROOT, POWERSHELL_TE=
LEMETRY_OPTOUT,<br>=C2=A0 PSDisableModuleAnalysisCacheCleanup, and PSModule=
AnalysisCachePath.<br>=C2=A0 A subset of the shell environment PSModulePath=
 is included in the<br>=C2=A0 environment used by SCons to initialize MSVC =
when defined.=C2=A0 None of<br>=C2=A0 these variables and values are propag=
ated to the user&#39;s SCons<br>=C2=A0 environment after running the MSVC b=
atch files.<br><br>- TEMPFILE: A UserError exception is raised when encodin=
g<br>=C2=A0 the contents of the tempfile fails due to a limited set of expe=
cted<br>=C2=A0 exceptions (e.g., UnicodeError).<br><br>FIXES<br>-----<br><b=
r>- Fixed SCons.Variables.PackageVariable to correctly test the default<br>=
=C2=A0 setting against both enable &amp; disable strings. (Fixes #4702)<br>=
<br>- MSVC: Fixed a significant delay experienced in the Github Actions<br>=
=C2=A0 windows 2022 and 2025 runners due to the environment used by SCons<b=
r>=C2=A0 to initialize MSVC when the Visual Studio vcpkg component is<br>=
=C2=A0 installed. The Github Actions windows 2019 runner was not affected.<=
br><br>- Fix the variant dir component being missing from generated source =
file<br>=C2=A0 paths with CompilationDatabase() builder (Fixes #4003).<br><=
br>- Ninja tool generate_command() fixed to call subst() with correct<br>=
=C2=A0 arguments in ListAction case. Unit tests added for generate_command.=
<br><br>- Fix the SCons.Scanner.LaTeX to mimic LaTeX&#39;s search method.<b=
r><br>- Ninja tool now quotes targets (if necessary) when calling back to<b=
r>=C2=A0 SCons - both in the POST request constructed to contact the<br>=C2=
=A0 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>=C2=A0 th=
e case of special actions that the tool recognizes, like Copy.<br>=C2=A0 Th=
is was working in the case of single commands, but not when part<br>=C2=A0 =
of a list of actions. Recognition only happens if the special<br>=C2=A0 act=
ion is first in the list.<br><br>- Fix a test problem on Windows where UNC =
tests failed due to incorrect path<br>=C2=A0 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>=C2=A0 If the tempfile=
 contents cannot be decoded by the command the<br>=C2=A0 tempfile is passed=
 to, (new) TEMPPFILEENCODING can be used to speficy a<br>=C2=A0 different e=
ncoding to use. On Windows, the username may be a cause of this,<br>=C2=A0 =
as the default path for temporary files includes the username. Setting<br>=
=C2=A0 (existing) TEMPFILEDIR may also help in this case.<br><br>- Tweak ru=
ntest.py and test framework to more reliably get the requested<br>=C2=A0 Py=
thon binary (for odd Windows setups + Python launcher)<br><br>- Fix the tem=
pfile encoding test regex strings to remove warnings in<br>=C2=A0 python 3.=
12 and 3.13.<br><br>- Incremental builds in Interactive mode could fail on =
platforms that<br>=C2=A0 support batch mode (currently: Windows).=C2=A0 Cha=
nge the way the changed<br>=C2=A0 and unchanged target and source lists are=
 accounted for to resolve.<br>=C2=A0 Fixes #3029.<br><br>IMPROVEMENTS<br>--=
----------<br><br>- Virtualenv support module modernized: previously looked=
 first for an<br>=C2=A0 unofficial approach from before venv support was ma=
de part of Python<br>=C2=A0 in 3.3; now looks for the official approach fir=
st. This in an internal<br>=C2=A0 detail, the API is unchanged.<br><br>- Ad=
d internal routines to manipulate publicly visible argument and<br>=C2=A0 t=
arget lists. These interfaces are not part of the public API.<br><br>- Impr=
ove the error message when an environment method is called which<br>=C2=A0 =
does not exist in that environment. Mostly this is intended to be a<br>=C2=
=A0 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 n=
ow included in the<br>=C2=A0 scons-doc tarball built at part of the release=
 process,<br>=C2=A0 in addition to the html and txt versions. For distribut=
ion<br>=C2=A0 packaging, the manpages can be extracted from here (downloada=
ble<br>=C2=A0 from <a href=3D"https://scons.org/doc/">https://scons.org/doc=
/</a> using a a version-specific URL,<br>=C2=A0 e.g. <a href=3D"https://sco=
ns.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>- Clari=
fy how pre/post actions on an alias work.<br><br>- Improve the description =
of PackageVariable.<br><br>- The &quot;API Docs&quot; build (Sphinx) config=
uration is improved, and<br>=C2=A0 SConsDoc and SConsExample are now includ=
ed - their API is<br>=C2=A0 interesting to developers working on SCons (nee=
ded to write docs),<br>=C2=A0 even if not part of &quot;The SCons API&quot;=
 itself.<br><br>- Missing documentation for the Virtualenv() function is ad=
ded.<br>=C2=A0 Note that the User Guide previously described a negative out=
come<br>=C2=A0 as returning None.=C2=A0 It is now explicit that the path is=
 returned if<br>=C2=A0 running in a virtualenv, and an empty (falsy) string=
 if not.<br><br>- Improve the wording of Configure methods.<br><br>- Improv=
e the wording of AppendENVPath and PrependENVPath in manpage.<br><br>- Impr=
ove documentation of builder methods and builder objects.<br><br>- All the =
User Guide sections now have textual anchors, meaning there<br>=C2=A0 no lo=
nger be build-generated numeric tags like<br>=C2=A0 <a href=3D"https://scon=
s.org/doc/production/HTML/scons-user.html#id1514">https://scons.org/doc/pro=
duction/HTML/scons-user.html#id1514</a><br><br>DEVELOPMENT<br>-----------<b=
r><br>- runtest.py once again finds &quot;external&quot; tests, such as the=
 tests for<br>=C2=A0 tools in scons-contrib. An earlier rework had broken t=
his.=C2=A0 Fixes #4699.<br><br>- Clean up C and C++ FLAGS tests. Tests whic=
h use a real compiler<br>=C2=A0 are now more clearly distinguished (-live.p=
y suffix and docstring).<br><br>- Fix a couple of unit tests to not fail wi=
th Python 3.14. These involve<br>=C2=A0 expectations for bytecode strings a=
nd error message contents; there was<br>=C2=A0 no problem with SCons itself=
 using 3.14.<br><br>- Move the GitHub workflow test runner files from the S=
Cons root to<br>=C2=A0 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 t=
ests that consistently fail on MacOS in<br>=C2=A0 the experimental tests wo=
rkflow.<br><br>- GitHub: Add a workflow file to test MSVC with optional env=
ironment<br>=C2=A0 variables.<br><br>- GitHub: Populate the MSVC cache befo=
re running the test suite for<br>=C2=A0 select windows workflow files.<br><=
br>- GitHub: Upload the failed_tests.log artifact on failure in select<br>=
=C2=A0 workflow files.<br><br>- GitHub: Change the runtest workflow to allo=
w the python version to<br>=C2=A0 be specified with the OS version.<br><br>=
- Testing: Increase the default timeout from 20 seconds to 60 seconds<br>=
=C2=A0 in the testing framework wait_for method. The timeout was increased<=
br>=C2=A0 during isolated experiments of the interactive tests on windows.<=
br><br>- Testing: Update the packaging tar bz2 and xz tests on on Windows.<=
br>=C2=A0 The packaging tar bz2 and xz tests should be skipped on Windows 1=
0<br>=C2=A0 and GitHub windows-2022. The packaging tar bz2 and xz tests sho=
uld<br>=C2=A0 be run on Windows 11 and GitHub windows-2025.<br><br>- Ninja:=
 Increase the number of generated source files in the<br>=C2=A0 iterative s=
peedup test from 200 to 250.=C2=A0 Increasing the workload<br>=C2=A0 should=
 reduce the likelihood that the ninja tests are slower.<br><br>- Add more u=
nit tests to internal AppendPath, PrependPath functions.<br><br>Thanks to t=
he following contributors listed below for their contributions to this rele=
ase.<br>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>.. code-block:: t=
ext<br><br><br>=C2=A0 =C2=A0 git shortlog --no-merges -ns 4.9.1..HEAD<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 61 =C2=A0Mats Wichmann<br>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 46 =C2=A0Joseph Brill<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0Willia=
m Deegan<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A06 =C2=A0Keith F. Prussing<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A01 =C2=A0Bill Prendergast<br>=C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A01 =C2=A0Edward Peek<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A01 =C2=A0Thaddeus Crews<br><br></div>

--000000000000a84608064030aee5--

--===============0101670867821094118==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Scons-dev mailing list
[email protected]
https://pairlist2.pair.net/mailman/listinfo/scons-dev

--===============0101670867821094118==--