Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,16 @@ NOTE: Since SCons 4.9.0, Python 3.7.0 or above is required.
RELEASE VERSION/DATE TO BE FILLED IN LATER

From John Doe:

- Whatever John Doe did.
- Whatever John Doe did.

From William Deegan:
- Fix SCons Docbook schema to work with lxml > 5
- Fix SCons Docbook schema to work with lxml > 5

From Mats Wichmann:
- Reduce unneeded computation of overrides. The Mkdir builder used an
unknown argument ('explain') on creation, causing it to be considered
an override. Also, if override dict is empty, don't even call the
Override factory function.


RELEASE 4.10.1 - Sun, 16 Nov 2025 10:51:57 -0700
Expand Down
5 changes: 5 additions & 0 deletions RELEASE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ IMPROVEMENTS
documentation: performance improvements (describe the circumstances
under which they would be observed), or major code cleanups

- Reduce unneeded computation of overrides. The Mkdir builder used an
unknown argument ('explain') on creation, causing it to be considered
an override. Also, if override dict is empty, don't even call the
Override factory function.

PACKAGING
---------

Expand Down
4 changes: 2 additions & 2 deletions SCons/Builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -670,8 +670,8 @@ def prependDirIfRelative(f, srcdir=kw['srcdir']):
else:
env_kw = self.overrides

# TODO if env_kw: then the following line. there's no purpose in calling if no overrides.
env = env.Override(env_kw)
if env_kw: # there's no purpose in calling if no overrides.
env = env.Override(env_kw)
return self._execute(env, target, source, OverrideWarner(kw), ekw)

def adjust_suffix(self, suff):
Expand Down
7 changes: 5 additions & 2 deletions SCons/Environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -859,9 +859,12 @@ def Override(self, overrides):
A proxy environment of type :class:`OverrideEnvironment`.
or the current environment if *overrides* is empty.
"""
if not overrides: return self
# belt-and-suspenders - main callers should already have checked:
if not overrides:
return self
o = copy_non_reserved_keywords(overrides)
if not o: return self
if not o:
return self
overrides = {}
merges = None
for key, value in o.items():
Expand Down
19 changes: 8 additions & 11 deletions SCons/Executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,21 +168,18 @@ class Executor(metaclass=NoSlotsPyPy):
'_do_execute',
'_execute_str')

def __init__(self, action, env=None, overridelist=[{}],
targets=[], sources=[], builder_kw={}) -> None:
def __init__(self, action, env=None, overridelist=None,
targets=[], sources=[], builder_kw=None) -> None:
if SCons.Debug.track_instances: logInstanceCreation(self, 'Executor.Executor')
self.set_action_list(action)
self.pre_actions = []
self.post_actions = []
self.env = env
self.overridelist = overridelist
if targets or sources:
self.batches = [Batch(targets[:], sources[:])]
else:
self.batches = []
self.builder_kw = builder_kw
self._do_execute = 1
self._execute_str = 1
self.overridelist = [{}] if overridelist is None else overridelist
self.batches = [Batch(targets[:], sources[:])] if targets or sources else []
self.builder_kw = {} if builder_kw is None else builder_kw
self._do_execute: int = 1 # map key
self._execute_str: int = 1 # map key
self._memo = {}

def get_lvars(self):
Expand Down Expand Up @@ -358,7 +355,7 @@ def get_build_env(self):

import SCons.Defaults
env = self.env or SCons.Defaults.DefaultEnvironment()
build_env = env.Override(overrides)
build_env = env.Override(overrides) if overrides else env

self._memo['get_build_env'] = build_env

Expand Down
1 change: 0 additions & 1 deletion SCons/Node/FS.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,6 @@ def get_MkdirBuilder():
# calling SCons.Defaults.DefaultEnvironment() when necessary.
MkdirBuilder = SCons.Builder.Builder(action = Mkdir,
env = None,
explain = None,
is_explicit = None,
target_scanner = SCons.Defaults.DirEntryScanner,
name = "MkdirBuilder")
Expand Down
Loading