Skip to content

Commit

Permalink
Merge pull request #4690 from SCons/rel_4.9.0
Browse files Browse the repository at this point in the history
Rel 4.9.0
  • Loading branch information
bdbaddog authored Mar 2, 2025
2 parents c0572bd + 0ac18d7 commit 4406471
Show file tree
Hide file tree
Showing 23 changed files with 81 additions and 101 deletions.
6 changes: 3 additions & 3 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
NOTE: The 4.0.0 release of SCons dropped Python 2.7 support. Use 3.1.2 if
Python 2.7 support is required (but note old SCons releases are unsupported).
NOTE: Since SCons 4.3.0, Python 3.6.0 or above is required.
NOTE: Python 3.6 support is deprecated and will be dropped in a future release.
python.org no longer supports 3.6 or 3.7, and will drop 3.8 in Oct. 2024.
NOTE: Since SCons 4.9.0, Python 3.7.0 or above is required.

RELEASE VERSION/DATE TO BE FILLED IN LATER

RELEASE 4.9.0 - Sun, 02 Mar 2025 17:22:20 -0700

From Ruben Di Battista:
- Expose `extra_libs` kwarg in Configure checks `CheckLibWithHeader`
Expand Down
54 changes: 17 additions & 37 deletions RELEASE.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
If you are reading this in the git repository, the contents
refer to *unreleased* changes since the last SCons release.
Past official release announcements appear at:

https://scons.org/tag/releases.html

==================================================================

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

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

Here is a summary of the changes since 4.8.1:

Here is a summary of the changes since 4.4.0:

NEW FUNCTIONALITY
-----------------

- List new features (presumably why a checkpoint is being released)

DEPRECATED FUNCTIONALITY
------------------------
NOTE: Since SCons 4.9.0, Python 3.7.0 or above is required.

- List anything that's been deprecated since the last release

CHANGED/ENHANCED EXISTING FUNCTIONALITY
---------------------------------------
- Expose the `extra_libs` keyword argument in `CheckLibWithHeader` and 'CheckLib'

- List modifications to existing features, where the previous behavior
wouldn't actually be considered a bug

- Removed Python 3.6 support.

- Override environments, created when giving construction environment
Expand Down Expand Up @@ -186,10 +167,6 @@ FIXES
IMPROVEMENTS
------------

- List improvements that wouldn't be visible to the user in the
documentation: performance improvements (describe the circumstances
under which they would be observed), or major code cleanups

- For consistency with the optparse "add_option" method, AddOption accepts
an SConsOption object as a single argument (this failed previously).
Calling AddOption with the full set of arguments (option names and
Expand All @@ -202,18 +179,10 @@ IMPROVEMENTS
for clang-cl, the version of the frontend that uses cl.exe-compatible
command line switches.

PACKAGING
---------

- List changes in the way SCons is packaged and/or released

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

- List any significant changes to the documentation (not individual
typo fixes, even if they're mentioned in src/CHANGES.txt to give
the contributor credit)

- Some manpage cleanup for the gettext and pdf/ps builders.

- Some clarifications in the User Guide "Environments" chapter.
Expand All @@ -233,8 +202,6 @@ DOCUMENTATION
DEVELOPMENT
-----------

- List visible changes in the way SCons is developed

- Ruff/Mypy: Excluded items now synced.

- Ruff: Linter includes new rules - `FA`, `UP006`, `UP007`, and `UP037` - to
Expand All @@ -254,4 +221,17 @@ Thanks to the following contributors listed below for their contributions to thi
==========================================================================================
.. code-block:: text

git shortlog --no-merges -ns 4.0.1..HEAD
git shortlog --no-merges -ns 4.8.1..HEAD
50 Mats Wichmann
46 William Deegan
19 Joseph Brill
10 Alex Thiessen
4 Thaddeus Crews
3 Ruben Di Battista
2 Adam Scott
2 Keith F. Prussing
2 Prabhu Singh Khalsa
1 Adam Simpkins
1 Alex James
1 Yevhen Babiichuk (DustDFG)

4 changes: 2 additions & 2 deletions ReleaseConfig
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
# If the release type is not 'final', the patchlevel is set to the
# release date. This value is mandatory and must be present in this file.
#version_tuple = (2, 2, 0, 'final', 0)
version_tuple = (4, 8, 2, 'a', 0)
version_tuple = (4, 9,0)

# Python versions prior to unsupported_python_version cause a fatal error
# when that version is used. Python versions prior to deprecate_python_version
Expand All @@ -50,7 +50,7 @@ deprecated_python_version = (3, 7, 0)
#month_year = 'December 2012'

# If copyright years is not given, the release year is used as the end.
copyright_years = '2001 - 2024'
copyright_years = '2001 - 2025'

# Local Variables:
# tab-width:4
Expand Down
6 changes: 3 additions & 3 deletions SCons/Environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -1731,7 +1731,7 @@ def Dictionary(self, *args: str, as_dict: bool = False):
Raises:
KeyError: if any of *args* is not in the construction environment.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
Added the *as_dict* keyword arg to specify always returning a dict.
"""
if not args:
Expand Down Expand Up @@ -1763,7 +1763,7 @@ def Dump(self, *key: str, format: str = 'pretty') -> str:
Raises:
ValueError: *format* is not a recognized serialization format.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
*key* is no longer limited to a single construction variable name.
If *key* is supplied, a formatted dictionary is generated like the
no-arg case - previously a single *key* displayed just the value.
Expand Down Expand Up @@ -2746,7 +2746,7 @@ def Dictionary(self, *args, as_dict: bool = False):
Raises:
KeyError: if any of *args* is not in the construction environment.
.. versionchanged: NEXT_RELEASE
.. versionchanged: 4.9.0
Added the *as_dict* keyword arg to always return a dict.
"""
d = {}
Expand Down
4 changes: 2 additions & 2 deletions SCons/Environment.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1656,7 +1656,7 @@ can be verified.
</para></note>

<para>
<emphasis>Changed in NEXT_RELEASE</emphasis>:
<emphasis>Changed in 4.9.0</emphasis>:
<parameter>as_dict</parameter> added.
</para>

Expand Down Expand Up @@ -1745,7 +1745,7 @@ the JSON equivalent of a &Python; <type>dict</type>..
</variablelist>

<para>
<emphasis>Changed in NEXT_RELEASE</emphasis>:
<emphasis>Changed in 4.9.0</emphasis>:
More than one <parameter>key</parameter> can be specified.
The returned string always looks like a <type>dict</type>
(or equivalent in other formats);
Expand Down
8 changes: 4 additions & 4 deletions SCons/EnvironmentTests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2137,7 +2137,7 @@ def test_Dictionary(self) -> None:
xxx, zzz = env.Dictionary('XXX', 'ZZZ')
assert xxx == 'x'
assert zzz == 'z'
# added in NEXT_RELEASE: as_dict flag
# added in 4.9.0: as_dict flag
with self.subTest():
expect = {'XXX': 'x'}
self.assertEqual(env.Dictionary('XXX', as_dict=True), expect)
Expand Down Expand Up @@ -3211,7 +3211,7 @@ def test_Dump(self) -> None:
"""Test the Dump() method"""
env = self.TestEnvironment(FOO='foo', FOOFLAGS=CLVar('--bar --baz'))

# changed in NEXT_RELEASE: single arg now displays as a dict,
# changed in 4.9.0: single arg now displays as a dict,
# not a bare value; more than one arg is allowed.
with self.subTest(): # one-arg version
self.assertEqual(env.Dump('FOO'), "{'FOO': 'foo'}")
Expand Down Expand Up @@ -3851,7 +3851,7 @@ def test___delitem__(self) -> None:
"""Test deleting variables from an OverrideEnvironment"""
env, env2, env3 = self.envs

# changed in NEXT_RELEASE: delete does not cascade to underlying envs
# changed in 4.9.0: delete does not cascade to underlying envs
# XXX is in all three, del from env3 should affect only it
del env3['XXX']
with self.subTest():
Expand Down Expand Up @@ -3947,7 +3947,7 @@ def test_Dictionary(self) -> None:
# test deletion in top override
del env3['XXX']
self.assertRaises(KeyError, env3.Dictionary, 'XXX')
# changed in NEXT_RELEASE: *not* deleted from underlying envs
# changed in 4.9.0: *not* deleted from underlying envs
assert 'XXX' in env2.Dictionary()
assert 'XXX' in env.Dictionary()

Expand Down
4 changes: 2 additions & 2 deletions SCons/SConf.py
Original file line number Diff line number Diff line change
Expand Up @@ -1108,7 +1108,7 @@ def CheckLib(context, library = None, symbol: str = "main",
Note that library may also be None to test whether the given symbol
compiles without flags.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
Added the *extra_libs* keyword parameter. The actual implementation
is in :func:`SCons.Conftest.CheckLib` which already accepted this
parameter, so this is only exposing existing functionality.
Expand Down Expand Up @@ -1140,7 +1140,7 @@ def CheckLibWithHeader(context, libs, header, language,
As in :func:`CheckLib`, we support library=None, to test if the call compiles
without extra link flags.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
Added the *extra_libs* keyword parameter. The actual implementation
is in :func:`SCons.Conftest.CheckLib` which already accepted this
parameter, so this is only exposing existing functionality.
Expand Down
2 changes: 1 addition & 1 deletion SCons/Scanner/C.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def dictify_CPPDEFINES(env, replace: bool = False) -> dict:
Args:
replace: if true, simulate macro replacement
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
Simple macro replacement added, and *replace* arg to enable it.
"""
def _replace(mapping: Dict) -> Dict:
Expand Down
2 changes: 1 addition & 1 deletion SCons/Script/SConsOptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ class SConsOption(optparse.Option):
syntax from :mod:`argparse`, and is added to the ``CHECK_METHODS`` list.
Overridden :meth:`convert_value` supports this usage.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
The *settable* attribute is added to ``ATTRS``, allowing it to be
set in the option. A parameter to mark the option settable was added
in 4.8.0, but was not initially made part of the option object itself.
Expand Down
2 changes: 1 addition & 1 deletion SCons/Script/SConscript.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@ def Help(self, text, append: bool = False, local_only: bool = False) -> None:
.. versionchanged:: 4.6.0
The *keep_local* parameter was added.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
The *keep_local* parameter was renamed *local_only* to match manpage
"""
text = self.subst(text, raw=1)
Expand Down
2 changes: 1 addition & 1 deletion SCons/Script/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ def HelpFunction(text, append: bool = False, local_only: bool = False) -> None:
.. versionchanged:: 4.6.0
The *keep_local* parameter was added.
.. versionchanged:: NEXT_RELEASE
.. versionchanged:: 4.9.0
The *keep_local* parameter was renamed *local_only* to match manpage
"""
global help_text
Expand Down
2 changes: 1 addition & 1 deletion SCons/Variables/PackageVariable.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def _converter(val: str | bool, default: str) -> str | bool:
*default* unless *default* is an enabling or disabling string,
in which case ignore *default* and return ``True``.
.. versionchanged: NEXT_RELEASE
.. versionchanged: 4.9.0
Now returns the default in case of a truthy value, matching what the
public documentation always claimed, except if the default looks
like one of the true/false strings.
Expand Down
2 changes: 1 addition & 1 deletion SCons/Variables/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class Variables:
.. deprecated:: 4.8.0
*is_global* is deprecated.
.. versionadded:: NEXT_RELEASE
.. versionadded:: 4.9.0
The :attr:`defaulted` attribute now lists those variables which
were filled in from default values.
"""
Expand Down
10 changes: 5 additions & 5 deletions SCons/__init__.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
__version__="4.8.1"
__copyright__="Copyright (c) 2001 - 2024 The SCons Foundation"
__version__="4.9.0"
__copyright__="Copyright (c) 2001 - 2025 The SCons Foundation"
__developer__="bdbaddog"
__date__="Tue, 03 Sep 2024 17:46:32 -0700"
__date__="Sun, 02 Mar 2025 13:25:06 -0700"
__buildsys__="M1Dog2021"
__revision__="08661ed4c552323ef3a7f0ff1af38868cbabb05e"
__build__="08661ed4c552323ef3a7f0ff1af38868cbabb05e"
__revision__="66f8972b546e12e0b8bf31648a2a076d706daec0"
__build__="66f8972b546e12e0b8bf31648a2a076d706daec0"
# make sure compatibility is always in place
import SCons.compat # noqa
2 changes: 1 addition & 1 deletion SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ copyright_years = strftime('2001 - %Y')
# This gets inserted into the man pages to reflect the month of release.
month_year = strftime('%B %Y')
project = 'scons'
default_version = '4.8.2'
default_version = '4.9.0'
copyright = f"Copyright (c) {copyright_years} The SCons Foundation"

# We let the presence or absence of various utilities determine whether
Expand Down
2 changes: 1 addition & 1 deletion doc/generated/builders.gen
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ a "live" location in the system.
</para>

<para>
See also &FindInstalledFiles;.
See also &f-link-FindInstalledFiles;.
For more thoughts on installation, see the User Guide
(particularly the section on Command-Line Targets
and the chapters on Installing Files and on Alias Targets).
Expand Down
2 changes: 1 addition & 1 deletion doc/generated/examples/caching_ex-random_1.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<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>
cc -o f2.o -c f2.c
cc -o f4.o -c f4.c
cc -o f3.o -c f3.c
cc -o f4.o -c f4.c
cc -o f1.o -c f1.c
cc -o f5.o -c f5.c
cc -o prog f1.o f2.o f3.o f4.o f5.o
Expand Down
2 changes: 1 addition & 1 deletion doc/generated/examples/troubleshoot_explain1_3.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
cp file.in file.oout

scons: warning: Cannot find target file.out after building
File "/Users/bdbaddog/devel/scons/git/users/prs/scripts/scons.py", line 97, in &lt;module&gt;
File "/Users/bdbaddog/devel/scons/git/as_scons/scripts/scons.py", line 97, in &lt;module&gt;
</screen>
2 changes: 1 addition & 1 deletion doc/generated/examples/troubleshoot_stacktrace_2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ scons: *** [prog.o] Source `prog.c' not found, needed by target `prog.o'.
scons: internal stack trace:
File "SCons/Taskmaster/Job.py", line 670, in _work
task.prepare()
File "SCons/Script/Main.py", line 208, in prepare
File "SCons/Script/Main.py", line 209, in prepare
return SCons.Taskmaster.OutOfDateTask.prepare(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "SCons/Taskmaster/__init__.py", line 195, in prepare
Expand Down
Loading

0 comments on commit 4406471

Please sign in to comment.