Skip to content

Commit 62c1658

Browse files
authored
Merge pull request #4785 from SCons/rel_4.10.1
4.10.1 Release
2 parents 532d205 + ca4dbed commit 62c1658

File tree

10 files changed

+281
-172
lines changed

10 files changed

+281
-172
lines changed

CHANGES.txt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ NOTE: Since SCons 4.3.0, Python 3.6.0 or above is required.
1010
NOTE: Since SCons 4.9.0, Python 3.7.0 or above is required.
1111

1212

13-
RELEASE VERSION/DATE TO BE FILLED IN LATER
14-
15-
From John Doe:
16-
- Whatever John Doe did.
13+
RELEASE 4.10.1 - Sun, 16 Nov 2025 10:51:57 -0700
1714

1815
From Thaddeus Crews:
1916
- Add support for Visual Studio 2026.
@@ -29,7 +26,7 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
2926
- Enable membership tests on instances of Literal (non-substituting string).
3027
- In the SequenceTypes tuple used for dynamic type checks, include
3128
the dict contents views, exclude the dictionary view itself as it
32-
is not an interable sequence type.
29+
is not an iterable sequence type.
3330
- Internal: where the find method on a string was used to determine
3431
if a substring is present, use the more readable "in" and "not in".
3532

RELEASE.txt

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
If you are reading this in the git repository, the contents
2-
refer to *unreleased* changes since the last SCons release.
3-
Past official release announcements appear at:
4-
5-
https://scons.org/tag/releases.html
6-
7-
==================================================================
8-
9-
A new SCons release, NEXT_RELEASE, is now available on the SCons download page:
1+
A new SCons release, 4.10.1, is now available on the SCons download page:
102

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

@@ -16,68 +8,41 @@ Here is a summary of the changes since PREVIOUS_RELEASE:
168
NEW FUNCTIONALITY
179
-----------------
1810

19-
- List new features (presumably why a checkpoint is being released)
20-
2111
- Add support for Visual Studio 2026.
2212

23-
DEPRECATED FUNCTIONALITY
24-
------------------------
25-
26-
- List anything that's been deprecated since the last release
27-
2813
CHANGED/ENHANCED EXISTING FUNCTIONALITY
2914
---------------------------------------
3015

31-
- List modifications to existing features, where the previous behavior
32-
wouldn't actually be considered a bug
33-
3416
- Switch test framework from using profile to cProfile. profile
3517
generates deprecation warnings starting with Python 3.15.
3618

3719
FIXES
3820
-----
3921

40-
- List fixes of outright bugs
41-
4222
- Enable membership tests on instances of Literal (non-substituting string).
4323

4424
- In the SequenceTypes tuple used for dynamic type checks, include
4525
the dict contents views, exclude the dictionary view itself as it
46-
is not an interable sequence type.
26+
is not an iterable sequence type.
4727

4828
IMPROVEMENTS
4929
------------
5030

51-
- List improvements that wouldn't be visible to the user in the
52-
documentation: performance improvements (describe the circumstances
53-
under which they would be observed), or major code cleanups
54-
5531
- Internal: where the find method on a string was used to determine
5632
if a substring is present, use the more readable "in" and "not in".
5733

58-
PACKAGING
59-
---------
60-
61-
- List changes in the way SCons is packaged and/or released
62-
6334
DOCUMENTATION
6435
-------------
6536

66-
- List any significant changes to the documentation (not individual
67-
typo fixes, even if they're mentioned in src/CHANGES.txt to give
68-
the contributor credit)
69-
7037
- Improve documentation of builder methods and builder objects.
7138

7239
- Make links clickable in the SetOption and GetOption manpage entries.
7340

74-
DEVELOPMENT
75-
-----------
76-
77-
- List visible changes in the way SCons is developed
78-
7941
Thanks to the following contributors listed below for their contributions to this release.
8042
==========================================================================================
8143
.. code-block:: text
8244

83-
git shortlog --no-merges -ns PREVIOUS_RELEASE..HEAD
45+
git shortlog --no-merges -ns 4.10.0..HEAD
46+
12 Mats Wichmann
47+
4 William Deegan
48+
1 Thaddeus Crews

ReleaseConfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
# If the release type is not 'final', the patchlevel is set to the
3232
# release date. This value is mandatory and must be present in this file.
3333
#version_tuple = (2, 2, 0, 'final', 0)
34-
version_tuple = (4, 12, 0, 'a', 0)
34+
version_tuple = (4, 10, 1)
3535

3636
# Python versions prior to unsupported_python_version cause a fatal error
3737
# when that version is used. Python versions prior to deprecate_python_version

SCons/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
__version__="4.10.0"
1+
__version__="4.10.1"
22
__copyright__="Copyright (c) 2001 - 2025 The SCons Foundation"
33
__developer__="bdbaddog"
4-
__date__="Thu, 02 Oct 2025 10:16:02 -0700"
4+
__date__="Sun, 16 Nov 2025 14:18:20 -0700"
55
__buildsys__="M1Dog2021"
6-
__revision__="b3e979a3e42c43b91f7624895910afb869a19806"
7-
__build__="b3e979a3e42c43b91f7624895910afb869a19806"
6+
__revision__="055b01f429d58b686701a56df863a817c36bb103"
7+
__build__="055b01f429d58b686701a56df863a817c36bb103"
88
# make sure compatibility is always in place
99
import SCons.compat # noqa

SConstruct

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ copyright_years = strftime('2001 - %Y')
3636
# This gets inserted into the man pages to reflect the month of release.
3737
month_year = strftime('%B %Y')
3838
project = 'scons'
39-
default_version = '4.10.0'
39+
default_version = '4.10.1'
4040
copyright = f"Copyright (c) {copyright_years} The SCons Foundation"
4141

4242
# We let the presence or absence of various utilities determine whether
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<screen xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">% <userinput>scons -Q</userinput>
2-
cc -o f5.o -c f5.c
3-
cc -o f4.o -c f4.c
42
cc -o f1.o -c f1.c
3+
cc -o f4.o -c f4.c
54
cc -o f3.o -c f3.c
5+
cc -o f5.o -c f5.c
66
cc -o f2.o -c f2.c
77
cc -o prog f1.o f2.o f3.o f4.o f5.o
88
</screen>
Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<screen xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">% <userinput>scons -Q --taskmastertrace=- prog</userinput>
2-
Job.NewParallel._work(): [Thread:8383127872] Gained exclusive access
3-
Job.NewParallel._work(): [Thread:8383127872] Starting search
4-
Job.NewParallel._work(): [Thread:8383127872] Found 0 completed tasks to process
5-
Job.NewParallel._work(): [Thread:8383127872] Searching for new tasks
2+
Job.NewParallel._work(): [Thread:8314855936] Gained exclusive access
3+
Job.NewParallel._work(): [Thread:8314855936] Starting search
4+
Job.NewParallel._work(): [Thread:8314855936] Found 0 completed tasks to process
5+
Job.NewParallel._work(): [Thread:8314855936] Searching for new tasks
66

77
Taskmaster: Looking for a node to evaluate
88
Taskmaster: Considering node &lt;no_state 0 'prog'&gt; and its children:
@@ -18,25 +18,25 @@ Taskmaster: Evaluating &lt;pending 0 'prog.c'&gt;
1818

1919
Task.make_ready_current(): node &lt;pending 0 'prog.c'&gt;
2020
Task.prepare(): node &lt;up_to_date 0 'prog.c'&gt;
21-
Job.NewParallel._work(): [Thread:8383127872] Found internal task
21+
Job.NewParallel._work(): [Thread:8314855936] Found internal task
2222
Task.executed_with_callbacks(): node &lt;up_to_date 0 'prog.c'&gt;
2323
Task.postprocess(): node &lt;up_to_date 0 'prog.c'&gt;
2424
Task.postprocess(): removing &lt;up_to_date 0 'prog.c'&gt;
2525
Task.postprocess(): adjusted parent ref count &lt;pending 1 'prog.o'&gt;
26-
Job.NewParallel._work(): [Thread:8383127872] Searching for new tasks
26+
Job.NewParallel._work(): [Thread:8314855936] Searching for new tasks
2727

2828
Taskmaster: Looking for a node to evaluate
2929
Taskmaster: Considering node &lt;no_state 0 'inc.h'&gt; and its children:
3030
Taskmaster: Evaluating &lt;pending 0 'inc.h'&gt;
3131

3232
Task.make_ready_current(): node &lt;pending 0 'inc.h'&gt;
3333
Task.prepare(): node &lt;up_to_date 0 'inc.h'&gt;
34-
Job.NewParallel._work(): [Thread:8383127872] Found internal task
34+
Job.NewParallel._work(): [Thread:8314855936] Found internal task
3535
Task.executed_with_callbacks(): node &lt;up_to_date 0 'inc.h'&gt;
3636
Task.postprocess(): node &lt;up_to_date 0 'inc.h'&gt;
3737
Task.postprocess(): removing &lt;up_to_date 0 'inc.h'&gt;
3838
Task.postprocess(): adjusted parent ref count &lt;pending 0 'prog.o'&gt;
39-
Job.NewParallel._work(): [Thread:8383127872] Searching for new tasks
39+
Job.NewParallel._work(): [Thread:8314855936] Searching for new tasks
4040

4141
Taskmaster: Looking for a node to evaluate
4242
Taskmaster: Considering node &lt;pending 0 'prog.o'&gt; and its children:
@@ -46,19 +46,19 @@ Taskmaster: Evaluating &lt;pending 0 'prog.o'&gt;
4646

4747
Task.make_ready_current(): node &lt;pending 0 'prog.o'&gt;
4848
Task.prepare(): node &lt;executing 0 'prog.o'&gt;
49-
Job.NewParallel._work(): [Thread:8383127872] Found task requiring execution
50-
Job.NewParallel._work(): [Thread:8383127872] Executing task
49+
Job.NewParallel._work(): [Thread:8314855936] Found task requiring execution
50+
Job.NewParallel._work(): [Thread:8314855936] Executing task
5151
Task.execute(): node &lt;executing 0 'prog.o'&gt;
5252
cc -o prog.o -c -I. prog.c
53-
Job.NewParallel._work(): [Thread:8383127872] Enqueueing executed task results
54-
Job.NewParallel._work(): [Thread:8383127872] Gained exclusive access
55-
Job.NewParallel._work(): [Thread:8383127872] Starting search
56-
Job.NewParallel._work(): [Thread:8383127872] Found 1 completed tasks to process
53+
Job.NewParallel._work(): [Thread:8314855936] Enqueueing executed task results
54+
Job.NewParallel._work(): [Thread:8314855936] Gained exclusive access
55+
Job.NewParallel._work(): [Thread:8314855936] Starting search
56+
Job.NewParallel._work(): [Thread:8314855936] Found 1 completed tasks to process
5757
Task.executed_with_callbacks(): node &lt;executing 0 'prog.o'&gt;
5858
Task.postprocess(): node &lt;executed 0 'prog.o'&gt;
5959
Task.postprocess(): removing &lt;executed 0 'prog.o'&gt;
6060
Task.postprocess(): adjusted parent ref count &lt;pending 0 'prog'&gt;
61-
Job.NewParallel._work(): [Thread:8383127872] Searching for new tasks
61+
Job.NewParallel._work(): [Thread:8314855936] Searching for new tasks
6262

6363
Taskmaster: Looking for a node to evaluate
6464
Taskmaster: Considering node &lt;pending 0 'prog'&gt; and its children:
@@ -67,21 +67,21 @@ Taskmaster: Evaluating &lt;pending 0 'prog'&gt;
6767

6868
Task.make_ready_current(): node &lt;pending 0 'prog'&gt;
6969
Task.prepare(): node &lt;executing 0 'prog'&gt;
70-
Job.NewParallel._work(): [Thread:8383127872] Found task requiring execution
71-
Job.NewParallel._work(): [Thread:8383127872] Executing task
70+
Job.NewParallel._work(): [Thread:8314855936] Found task requiring execution
71+
Job.NewParallel._work(): [Thread:8314855936] Executing task
7272
Task.execute(): node &lt;executing 0 'prog'&gt;
7373
cc -o prog prog.o
74-
Job.NewParallel._work(): [Thread:8383127872] Enqueueing executed task results
75-
Job.NewParallel._work(): [Thread:8383127872] Gained exclusive access
76-
Job.NewParallel._work(): [Thread:8383127872] Starting search
77-
Job.NewParallel._work(): [Thread:8383127872] Found 1 completed tasks to process
74+
Job.NewParallel._work(): [Thread:8314855936] Enqueueing executed task results
75+
Job.NewParallel._work(): [Thread:8314855936] Gained exclusive access
76+
Job.NewParallel._work(): [Thread:8314855936] Starting search
77+
Job.NewParallel._work(): [Thread:8314855936] Found 1 completed tasks to process
7878
Task.executed_with_callbacks(): node &lt;executing 0 'prog'&gt;
7979
Task.postprocess(): node &lt;executed 0 'prog'&gt;
80-
Job.NewParallel._work(): [Thread:8383127872] Searching for new tasks
80+
Job.NewParallel._work(): [Thread:8314855936] Searching for new tasks
8181

8282
Taskmaster: Looking for a node to evaluate
8383
Taskmaster: No candidate anymore.
84-
Job.NewParallel._work(): [Thread:8383127872] Found no task requiring execution, and have no jobs: marking complete
85-
Job.NewParallel._work(): [Thread:8383127872] Gained exclusive access
86-
Job.NewParallel._work(): [Thread:8383127872] Completion detected, breaking from main loop
84+
Job.NewParallel._work(): [Thread:8314855936] Found no task requiring execution, and have no jobs: marking complete
85+
Job.NewParallel._work(): [Thread:8314855936] Gained exclusive access
86+
Job.NewParallel._work(): [Thread:8314855936] Completion detected, breaking from main loop
8787
</screen>

0 commit comments

Comments
 (0)