From 070aeb5688a7343d406ce3e6ce846fedd06b1364 Mon Sep 17 00:00:00 2001 From: Thaddeus Crews Date: Sun, 8 Dec 2024 15:58:14 -0600 Subject: [PATCH] SCons: Fix MSVC bypassing disabled warnings --- SConstruct | 53 +++++++++---------- drivers/d3d12/d3d12ma.cpp | 2 +- methods.py | 7 +-- modules/csg/SCsub | 21 +++++--- .../gdextension_build/methods.py | 16 +++--- .../gdextension_build/methods.py | 16 +++--- modules/theora/video_stream_theora.cpp | 9 ---- 7 files changed, 56 insertions(+), 68 deletions(-) diff --git a/SConstruct b/SConstruct index fa324b2aa0fa..79c341171a72 100644 --- a/SConstruct +++ b/SConstruct @@ -815,37 +815,36 @@ elif env.msvc: # Configure compiler warnings if env.msvc and not methods.using_clang(env): # MSVC - if env["warnings"] == "no": - env.Append(CCFLAGS=["/w"]) - else: - if env["warnings"] == "extra": - env.Append(CCFLAGS=["/W4"]) - elif env["warnings"] == "all": - # C4458 is like -Wshadow. Part of /W4 but let's apply it for the default /W3 too. - env.Append(CCFLAGS=["/W3", "/w34458"]) - elif env["warnings"] == "moderate": - env.Append(CCFLAGS=["/W2"]) - # Disable warnings which we don't plan to fix. - - env.Append( - CCFLAGS=[ - "/wd4100", # C4100 (unreferenced formal parameter): Doesn't play nice with polymorphism. - "/wd4127", # C4127 (conditional expression is constant) - "/wd4201", # C4201 (non-standard nameless struct/union): Only relevant for C89. - "/wd4244", # C4244 C4245 C4267 (narrowing conversions): Unavoidable at this scale. - "/wd4245", - "/wd4267", - "/wd4305", # C4305 (truncation): double to float or real_t, too hard to avoid. - "/wd4324", # C4820 (structure was padded due to alignment specifier) - "/wd4514", # C4514 (unreferenced inline function has been removed) - "/wd4714", # C4714 (function marked as __forceinline not inlined) - "/wd4820", # C4820 (padding added after construct) - ] - ) + # Disable warnings which we don't plan to fix. + disabled_warnings = [ + "/wd4100", # C4100 (unreferenced formal parameter): Doesn't play nice with polymorphism. + "/wd4127", # C4127 (conditional expression is constant) + "/wd4201", # C4201 (non-standard nameless struct/union): Only relevant for C89. + "/wd4244", # C4244 C4245 C4267 (narrowing conversions): Unavoidable at this scale. + "/wd4245", + "/wd4267", + "/wd4305", # C4305 (truncation): double to float or real_t, too hard to avoid. + "/wd4324", # C4820 (structure was padded due to alignment specifier) + "/wd4514", # C4514 (unreferenced inline function has been removed) + "/wd4714", # C4714 (function marked as __forceinline not inlined) + "/wd4820", # C4820 (padding added after construct) + ] + + if env["warnings"] == "extra": + env.Append(CCFLAGS=["/W4"] + disabled_warnings) + elif env["warnings"] == "all": + # C4458 is like -Wshadow. Part of /W4 but let's apply it for the default /W3 too. + env.Append(CCFLAGS=["/W3", "/w34458"] + disabled_warnings) + elif env["warnings"] == "moderate": + env.Append(CCFLAGS=["/W2"] + disabled_warnings) + else: # 'no' + # C4267 is particularly finicky & needs to be explicitly disabled. + env.Append(CCFLAGS=["/w", "/wd4267"]) if env["werror"]: env.Append(CCFLAGS=["/WX"]) env.Append(LINKFLAGS=["/WX"]) + else: # GCC, Clang common_warnings = [] diff --git a/drivers/d3d12/d3d12ma.cpp b/drivers/d3d12/d3d12ma.cpp index b7c9eb7ec09c..fdec19f92aa3 100644 --- a/drivers/d3d12/d3d12ma.cpp +++ b/drivers/d3d12/d3d12ma.cpp @@ -58,7 +58,7 @@ #endif #if defined(_MSC_VER) -#pragma warning(disable : 4189 4324 4505) +#pragma warning(disable : 4189 4505) #endif #include "thirdparty/d3d12ma/D3D12MemAlloc.cpp" diff --git a/methods.py b/methods.py index be290f812800..6db6b9580c5e 100644 --- a/methods.py +++ b/methods.py @@ -130,9 +130,10 @@ def disable_warnings(self): if self.msvc and not using_clang(self): # We have to remove existing warning level defines before appending /w, # otherwise we get: "warning D9025 : overriding '/W3' with '/w'" - self["CCFLAGS"] = [x for x in self["CCFLAGS"] if not (x.startswith("/W") or x.startswith("/w"))] - self["CFLAGS"] = [x for x in self["CFLAGS"] if not (x.startswith("/W") or x.startswith("/w"))] - self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if not (x.startswith("/W") or x.startswith("/w"))] + WARN_FLAGS = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/W0"] + self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in WARN_FLAGS] + self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in WARN_FLAGS] + self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in WARN_FLAGS] self.AppendUnique(CCFLAGS=["/w"]) else: self.AppendUnique(CCFLAGS=["-w"]) diff --git a/modules/csg/SCsub b/modules/csg/SCsub index a14e999fb898..5b880f155e7a 100644 --- a/modules/csg/SCsub +++ b/modules/csg/SCsub @@ -31,17 +31,22 @@ thirdparty_sources = [ ] thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] -env_csg.Prepend( - CPPPATH=[ - thirdparty_dir + "include", - ] -) +env_csg.Prepend(CPPPATH=[thirdparty_dir + "include"]) env_thirdparty = env_csg.Clone() env_thirdparty.disable_warnings() env_thirdparty.add_source_files(thirdparty_obj, thirdparty_sources) env.modules_sources += thirdparty_obj -# Godot's own source files -env_csg.add_source_files(env.modules_sources, "*.cpp") +# Godot source files + +module_obj = [] + +env_csg.add_source_files(module_obj, "*.cpp") + if env.editor_build: - env_csg.add_source_files(env.modules_sources, "editor/*.cpp") + env_csg.add_source_files(module_obj, "editor/*.cpp") + +env.modules_sources += module_obj + +# Needed to force rebuilding the module files when the thirdparty library is updated. +env.Depends(module_obj, thirdparty_obj) diff --git a/modules/text_server_adv/gdextension_build/methods.py b/modules/text_server_adv/gdextension_build/methods.py index 43bf56abfeee..d57acee0719c 100644 --- a/modules/text_server_adv/gdextension_build/methods.py +++ b/modules/text_server_adv/gdextension_build/methods.py @@ -77,17 +77,13 @@ def disable_warnings(self): if self["platform"] == "windows" and not self["use_mingw"]: # We have to remove existing warning level defines before appending /w, # otherwise we get: "warning D9025 : overriding '/W3' with '/w'" - warn_flags = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/WX"] - self.Append(CCFLAGS=["/w"]) - self.Append(CFLAGS=["/w"]) - self.Append(CXXFLAGS=["/w"]) - self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in warn_flags] - self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in warn_flags] - self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in warn_flags] + WARN_FLAGS = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/W0"] + self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in WARN_FLAGS] + self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in WARN_FLAGS] + self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in WARN_FLAGS] + self.AppendUnique(CCFLAGS=["/w"]) else: - self.Append(CCFLAGS=["-w"]) - self.Append(CFLAGS=["-w"]) - self.Append(CXXFLAGS=["-w"]) + self.AppendUnique(CCFLAGS=["-w"]) def make_icu_data(target, source, env): diff --git a/modules/text_server_fb/gdextension_build/methods.py b/modules/text_server_fb/gdextension_build/methods.py index 43bf56abfeee..d57acee0719c 100644 --- a/modules/text_server_fb/gdextension_build/methods.py +++ b/modules/text_server_fb/gdextension_build/methods.py @@ -77,17 +77,13 @@ def disable_warnings(self): if self["platform"] == "windows" and not self["use_mingw"]: # We have to remove existing warning level defines before appending /w, # otherwise we get: "warning D9025 : overriding '/W3' with '/w'" - warn_flags = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/WX"] - self.Append(CCFLAGS=["/w"]) - self.Append(CFLAGS=["/w"]) - self.Append(CXXFLAGS=["/w"]) - self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in warn_flags] - self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in warn_flags] - self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in warn_flags] + WARN_FLAGS = ["/Wall", "/W4", "/W3", "/W2", "/W1", "/W0"] + self["CCFLAGS"] = [x for x in self["CCFLAGS"] if x not in WARN_FLAGS] + self["CFLAGS"] = [x for x in self["CFLAGS"] if x not in WARN_FLAGS] + self["CXXFLAGS"] = [x for x in self["CXXFLAGS"] if x not in WARN_FLAGS] + self.AppendUnique(CCFLAGS=["/w"]) else: - self.Append(CCFLAGS=["-w"]) - self.Append(CFLAGS=["-w"]) - self.Append(CXXFLAGS=["-w"]) + self.AppendUnique(CCFLAGS=["-w"]) def make_icu_data(target, source, env): diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp index 372885b0b478..11492d189f6a 100644 --- a/modules/theora/video_stream_theora.cpp +++ b/modules/theora/video_stream_theora.cpp @@ -35,17 +35,8 @@ #include "core/os/os.h" #include "scene/resources/image_texture.h" -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable : 4127) -#endif - #include "thirdparty/misc/yuv2rgb.h" -#ifdef _MSC_VER -#pragma warning(pop) -#endif - int VideoStreamPlaybackTheora::buffer_data() { char *buffer = ogg_sync_buffer(&oy, 4096);