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:
parent
f28199f403
commit
a5093d64ac
@ -151,6 +151,7 @@ env.core_sources += thirdparty_obj
|
|||||||
# Godot source files
|
# Godot source files
|
||||||
|
|
||||||
env.add_source_files(env.core_sources, "*.cpp")
|
env.add_source_files(env.core_sources, "*.cpp")
|
||||||
|
env.add_source_files(env.core_sources, "script_encryption_key.gen.cpp")
|
||||||
|
|
||||||
# Certificates
|
# Certificates
|
||||||
env.Depends(
|
env.Depends(
|
||||||
|
@ -91,6 +91,7 @@ if env["tools"]:
|
|||||||
env.CommandNoCache("#editor/builtin_fonts.gen.h", flist, run_in_subprocess(editor_builders.make_fonts_header))
|
env.CommandNoCache("#editor/builtin_fonts.gen.h", flist, run_in_subprocess(editor_builders.make_fonts_header))
|
||||||
|
|
||||||
env.add_source_files(env.editor_sources, "*.cpp")
|
env.add_source_files(env.editor_sources, "*.cpp")
|
||||||
|
env.add_source_files(env.editor_sources, "register_exporters.gen.cpp")
|
||||||
|
|
||||||
SConscript("collada/SCsub")
|
SConscript("collada/SCsub")
|
||||||
SConscript("doc/SCsub")
|
SConscript("doc/SCsub")
|
||||||
|
11
main/SCsub
11
main/SCsub
@ -10,18 +10,15 @@ env.main_sources = []
|
|||||||
env.add_source_files(env.main_sources, "*.cpp")
|
env.add_source_files(env.main_sources, "*.cpp")
|
||||||
|
|
||||||
# Order matters here. Higher index controller database files write on top of lower index database files.
|
# Order matters here. Higher index controller database files write on top of lower index database files.
|
||||||
controller_databases = ["#main/gamecontrollerdb.txt", "#main/godotcontrollerdb.txt"]
|
controller_databases = ["gamecontrollerdb.txt", "godotcontrollerdb.txt"]
|
||||||
|
|
||||||
env.Depends("#main/default_controller_mappings.gen.cpp", controller_databases)
|
gensource = env.CommandNoCache(
|
||||||
env.CommandNoCache(
|
"default_controller_mappings.gen.cpp",
|
||||||
"#main/default_controller_mappings.gen.cpp",
|
|
||||||
controller_databases,
|
controller_databases,
|
||||||
run_in_subprocess(main_builders.make_default_controller_mappings),
|
run_in_subprocess(main_builders.make_default_controller_mappings),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Don't warn about duplicate entry here, we need it registered manually for first build,
|
env.add_source_files(env.main_sources, gensource)
|
||||||
# even if later builds will pick it up twice due to above *.cpp globbing.
|
|
||||||
env.add_source_files(env.main_sources, "#main/default_controller_mappings.gen.cpp", warn_duplicates=False)
|
|
||||||
|
|
||||||
env.Depends("#main/splash.gen.h", "#main/splash.png")
|
env.Depends("#main/splash.gen.h", "#main/splash.png")
|
||||||
env.CommandNoCache("#main/splash.gen.h", "#main/splash.png", run_in_subprocess(main_builders.make_splash))
|
env.CommandNoCache("#main/splash.gen.h", "#main/splash.png", run_in_subprocess(main_builders.make_splash))
|
||||||
|
13
methods.py
13
methods.py
@ -11,7 +11,7 @@ from SCons.Script import Glob
|
|||||||
from SCons.Variables.BoolVariable import _text2bool
|
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)
|
# Convert string to list of absolute paths (including expanding wildcard)
|
||||||
if isbasestring(files):
|
if isbasestring(files):
|
||||||
# Keep SCons project-absolute path as they are (no wildcard support)
|
# 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
|
return
|
||||||
files = [files]
|
files = [files]
|
||||||
else:
|
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
|
dir_path = self.Dir(".").abspath
|
||||||
files = sorted(glob.glob(dir_path + "/" + files))
|
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
|
# Add each path as compiled Object following environment (self) configuration
|
||||||
for path in files:
|
for path in files:
|
||||||
obj = self.Object(path)
|
obj = self.Object(path)
|
||||||
if obj in sources:
|
if obj in sources:
|
||||||
if warn_duplicates:
|
print('WARNING: Object "{}" already included in environment sources.'.format(obj))
|
||||||
print('WARNING: Object "{}" already included in environment sources.'.format(obj))
|
continue
|
||||||
else:
|
|
||||||
continue
|
|
||||||
sources.append(obj)
|
sources.append(obj)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user