mirror of
https://github.com/godotengine/godot.git
synced 2026-01-03 18:11:19 +03: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.
This commit is contained in:
13
methods.py
13
methods.py
@@ -14,7 +14,7 @@ from SCons.Variables.BoolVariable import _text2bool
|
||||
from platform_methods import run_in_subprocess
|
||||
|
||||
|
||||
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 isinstance(files, (str, bytes)):
|
||||
# Keep SCons project-absolute path as they are (no wildcard support)
|
||||
@@ -24,17 +24,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)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user