Skip to content

Commit 24e4fd4

Browse files
authored
Merge pull request #4788 from mwichmann/maint/less-overrides
Try to call Override less
2 parents b49eb90 + 2d907e6 commit 24e4fd4

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

CHANGES.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ RELEASE VERSION/DATE TO BE FILLED IN LATER
2020

2121
From Mats Wichmann:
2222
- Introduce some unit tests for the file locking utility routines
23+
- Reduce unneeded computation of overrides. The Mkdir builder used an
24+
unknown argument ('explain') on creation, causing it to be considered
25+
an override. Also, if override dict is empty, don't even call the
26+
Override factory function.
2327

2428

2529
RELEASE 4.10.1 - Sun, 16 Nov 2025 10:51:57 -0700

RELEASE.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ IMPROVEMENTS
4141
documentation: performance improvements (describe the circumstances
4242
under which they would be observed), or major code cleanups
4343

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

SCons/Builder.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -670,8 +670,8 @@ def prependDirIfRelative(f, srcdir=kw['srcdir']):
670670
else:
671671
env_kw = self.overrides
672672

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

677677
def adjust_suffix(self, suff):

SCons/Environment.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,9 +859,12 @@ def Override(self, overrides):
859859
A proxy environment of type :class:`OverrideEnvironment`.
860860
or the current environment if *overrides* is empty.
861861
"""
862-
if not overrides: return self
862+
# belt-and-suspenders - main callers should already have checked:
863+
if not overrides:
864+
return self
863865
o = copy_non_reserved_keywords(overrides)
864-
if not o: return self
866+
if not o:
867+
return self
865868
overrides = {}
866869
merges = None
867870
for key, value in o.items():

SCons/Executor.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,18 @@ class Executor(metaclass=NoSlotsPyPy):
168168
'_do_execute',
169169
'_execute_str')
170170

171-
def __init__(self, action, env=None, overridelist=[{}],
172-
targets=[], sources=[], builder_kw={}) -> None:
171+
def __init__(self, action, env=None, overridelist=None,
172+
targets=[], sources=[], builder_kw=None) -> None:
173173
if SCons.Debug.track_instances: logInstanceCreation(self, 'Executor.Executor')
174174
self.set_action_list(action)
175175
self.pre_actions = []
176176
self.post_actions = []
177177
self.env = env
178-
self.overridelist = overridelist
179-
if targets or sources:
180-
self.batches = [Batch(targets[:], sources[:])]
181-
else:
182-
self.batches = []
183-
self.builder_kw = builder_kw
184-
self._do_execute = 1
185-
self._execute_str = 1
178+
self.overridelist = [{}] if overridelist is None else overridelist
179+
self.batches = [Batch(targets[:], sources[:])] if targets or sources else []
180+
self.builder_kw = {} if builder_kw is None else builder_kw
181+
self._do_execute: int = 1 # map key
182+
self._execute_str: int = 1 # map key
186183
self._memo = {}
187184

188185
def get_lvars(self):
@@ -358,7 +355,7 @@ def get_build_env(self):
358355

359356
import SCons.Defaults
360357
env = self.env or SCons.Defaults.DefaultEnvironment()
361-
build_env = env.Override(overrides)
358+
build_env = env.Override(overrides) if overrides else env
362359

363360
self._memo['get_build_env'] = build_env
364361

SCons/Node/FS.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,6 @@ def get_MkdirBuilder():
381381
# calling SCons.Defaults.DefaultEnvironment() when necessary.
382382
MkdirBuilder = SCons.Builder.Builder(action = Mkdir,
383383
env = None,
384-
explain = None,
385384
is_explicit = None,
386385
target_scanner = SCons.Defaults.DirEntryScanner,
387386
name = "MkdirBuilder")

0 commit comments

Comments
 (0)