1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

SCons: List .gen.cpp sources explicitly to avoid globbing errors

Whenever we change the name (or remove) generated cpp files with the `.gen.cpp`
extension, users run into build issues when switching between branches (i.e.
switching before and after the name change/removal). This is because we glob
`*.cpp` so if a now-obsolete file from a previous build is present, we'll
include it too, potentially leading to bugs or compilation failure (due to
missing headers or invalid code).

So globbing patterns in `add_source_files` will now skip files ending with
`.gen.cpp`, which should instead be passed explicitly where they're used.

(cherry picked from commit c133480531)
This commit is contained in:
Rémi Verschelde
2021-10-15 21:59:11 +02:00
parent f28199f403
commit a5093d64ac
4 changed files with 14 additions and 12 deletions

View File

@@ -11,7 +11,7 @@ from SCons.Script import Glob
from SCons.Variables.BoolVariable import _text2bool
def add_source_files(self, sources, files, warn_duplicates=True):
def add_source_files(self, sources, files):
# Convert string to list of absolute paths (including expanding wildcard)
if isbasestring(files):
# Keep SCons project-absolute path as they are (no wildcard support)
@@ -21,17 +21,20 @@ def add_source_files(self, sources, files, warn_duplicates=True):
return
files = [files]
else:
# Exclude .gen.cpp files from globbing, to avoid including obsolete ones.
# They should instead be added manually.
skip_gen_cpp = "*" in files
dir_path = self.Dir(".").abspath
files = sorted(glob.glob(dir_path + "/" + files))
if skip_gen_cpp:
files = [f for f in files if not f.endswith(".gen.cpp")]
# Add each path as compiled Object following environment (self) configuration
for path in files:
obj = self.Object(path)
if obj in sources:
if warn_duplicates:
print('WARNING: Object "{}" already included in environment sources.'.format(obj))
else:
continue
print('WARNING: Object "{}" already included in environment sources.'.format(obj))
continue
sources.append(obj)