summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThaddeus Crews <repiteo@outlook.com>2024-03-11 13:05:37 -0500
committerThaddeus Crews <repiteo@outlook.com>2024-03-11 13:20:09 -0500
commit5a6e3cbcb03c3f756344a38259f3774ddaf1a63d (patch)
treea435d3f986a1ca0e179d311ac4a5a11e2a67ea02
parentf040a351c2f27c6b86c40c71a28babf99dd0b9bd (diff)
downloadredot-engine-5a6e3cbcb03c3f756344a38259f3774ddaf1a63d.tar.gz
SCons: Remove `run_in_subprocess` dependency
-rw-r--r--SConstruct10
-rw-r--r--core/core_builders.py29
-rw-r--r--core/extension/make_interface_dumper.py10
-rw-r--r--core/extension/make_wrappers.py8
-rw-r--r--core/input/input_builders.py14
-rw-r--r--core/object/make_virtuals.py8
-rw-r--r--editor/editor_builders.py18
-rw-r--r--editor/icons/editor_icons_builders.py14
-rw-r--r--editor/template_builders.py14
-rw-r--r--editor/themes/editor_theme_builders.py19
-rw-r--r--gles3_builders.py12
-rw-r--r--glsl_builders.py12
-rw-r--r--main/main_builders.py24
-rw-r--r--methods.py8
-rw-r--r--modules/SCsub12
-rw-r--r--modules/modules_builders.py11
-rw-r--r--platform/linuxbsd/platform_linuxbsd_builders.py18
-rw-r--r--platform/macos/platform_macos_builders.py18
-rw-r--r--platform/windows/platform_windows_builders.py26
-rw-r--r--platform_methods.py69
-rw-r--r--scene/theme/default_theme_builders.py19
-rw-r--r--scene/theme/icons/default_theme_icons_builders.py16
22 files changed, 84 insertions, 305 deletions
diff --git a/SConstruct b/SConstruct
index b6de04a910..c11fd50497 100644
--- a/SConstruct
+++ b/SConstruct
@@ -1038,3 +1038,13 @@ def print_elapsed_time():
atexit.register(print_elapsed_time)
+
+
+def purge_flaky_files():
+ for build_failure in GetBuildFailures():
+ path = build_failure.node.abspath
+ if os.path.isfile(path):
+ os.remove(path)
+
+
+atexit.register(purge_flaky_files)
diff --git a/core/core_builders.py b/core/core_builders.py
index 2f92d8474c..a401f03693 100644
--- a/core/core_builders.py
+++ b/core/core_builders.py
@@ -1,12 +1,7 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-"""
+"""Functions used to generate source files during build time"""
import zlib
-from platform_methods import subprocess_main
-
def escape_string(s):
def charcode_to_c_escapes(c):
@@ -29,8 +24,8 @@ def escape_string(s):
def make_certs_header(target, source, env):
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "rb") as f, open(dst, "w", encoding="utf-8", newline="\n") as g:
buf = f.read()
decomp_size = len(buf)
@@ -72,8 +67,8 @@ def make_authors_header(target, source, env):
"AUTHORS_DEVELOPERS",
]
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "r", encoding="utf-8") as f, open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("#ifndef AUTHORS_GEN_H\n")
@@ -129,8 +124,8 @@ def make_donors_header(target, source, env):
"DONORS_MEMBERS_GOLD",
]
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "r", encoding="utf-8") as f, open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("#ifndef DONORS_GEN_H\n")
@@ -165,9 +160,9 @@ def make_donors_header(target, source, env):
def make_license_header(target, source, env):
- src_copyright = source[0]
- src_license = source[1]
- dst = target[0]
+ src_copyright = str(source[0])
+ src_license = str(source[1])
+ dst = str(target[0])
class LicenseReader:
def __init__(self, license_file):
@@ -318,7 +313,3 @@ def make_license_header(target, source, env):
f.write("};\n\n")
f.write("#endif // LICENSE_GEN_H\n")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/core/extension/make_interface_dumper.py b/core/extension/make_interface_dumper.py
index 87f9a71522..af35688200 100644
--- a/core/extension/make_interface_dumper.py
+++ b/core/extension/make_interface_dumper.py
@@ -2,8 +2,8 @@ import zlib
def run(target, source, env):
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "rb") as f, open(dst, "w", encoding="utf-8", newline="\n") as g:
buf = f.read()
decomp_size = len(buf)
@@ -53,9 +53,3 @@ class GDExtensionInterfaceDump {
#endif // GDEXTENSION_INTERFACE_DUMP_H
"""
)
-
-
-if __name__ == "__main__":
- from platform_methods import subprocess_main
-
- subprocess_main(globals())
diff --git a/core/extension/make_wrappers.py b/core/extension/make_wrappers.py
index e67ac8cfe7..655b90d2b1 100644
--- a/core/extension/make_wrappers.py
+++ b/core/extension/make_wrappers.py
@@ -142,11 +142,5 @@ def run(target, source, env):
txt += "\n#endif\n"
- with open(target[0], "w", encoding="utf-8", newline="\n") as f:
+ with open(str(target[0]), "w", encoding="utf-8", newline="\n") as f:
f.write(txt)
-
-
-if __name__ == "__main__":
- from platform_methods import subprocess_main
-
- subprocess_main(globals())
diff --git a/core/input/input_builders.py b/core/input/input_builders.py
index cc5e85897d..eabdefe543 100644
--- a/core/input/input_builders.py
+++ b/core/input/input_builders.py
@@ -1,14 +1,10 @@
-"""Functions used to generate source files during build time
+"""Functions used to generate source files during build time"""
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-"""
-
-from platform_methods import subprocess_main
from collections import OrderedDict
def make_default_controller_mappings(target, source, env):
- dst = target[0]
+ dst = str(target[0])
with open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write('#include "core/typedefs.h"\n')
@@ -17,7 +13,7 @@ def make_default_controller_mappings(target, source, env):
# ensure mappings have a consistent order
platform_mappings: dict = OrderedDict()
for src_path in source:
- with open(src_path, "r") as f:
+ with open(str(src_path), "r") as f:
# read mapping file and skip header
mapping_file_lines = f.readlines()[2:]
@@ -61,7 +57,3 @@ def make_default_controller_mappings(target, source, env):
g.write("#endif\n")
g.write("\tnullptr\n};\n")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/core/object/make_virtuals.py b/core/object/make_virtuals.py
index e2a8e656b7..7a85753072 100644
--- a/core/object/make_virtuals.py
+++ b/core/object/make_virtuals.py
@@ -201,11 +201,5 @@ def run(target, source, env):
txt += "#endif // GDVIRTUAL_GEN_H\n"
- with open(target[0], "w", encoding="utf-8", newline="\n") as f:
+ with open(str(target[0]), "w", encoding="utf-8", newline="\n") as f:
f.write(txt)
-
-
-if __name__ == "__main__":
- from platform_methods import subprocess_main
-
- subprocess_main(globals())
diff --git a/editor/editor_builders.py b/editor/editor_builders.py
index 0189d7e9d4..68595047fe 100644
--- a/editor/editor_builders.py
+++ b/editor/editor_builders.py
@@ -1,8 +1,4 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
import os.path
@@ -11,16 +7,16 @@ import subprocess
import tempfile
import uuid
import zlib
-from platform_methods import subprocess_main
def make_doc_header(target, source, env):
- dst = target[0]
+ dst = str(target[0])
with open(dst, "w", encoding="utf-8", newline="\n") as g:
buf = ""
docbegin = ""
docend = ""
for src in source:
+ src = str(src)
if not src.endswith(".xml"):
continue
with open(src, "r", encoding="utf-8") as f:
@@ -49,14 +45,14 @@ def make_doc_header(target, source, env):
def make_translations_header(target, source, env, category):
- dst = target[0]
+ dst = str(target[0])
with open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
g.write("#ifndef _{}_TRANSLATIONS_H\n".format(category.upper()))
g.write("#define _{}_TRANSLATIONS_H\n".format(category.upper()))
- sorted_paths = sorted(source, key=lambda path: os.path.splitext(os.path.basename(path))[0])
+ sorted_paths = sorted([str(x) for x in source], key=lambda path: os.path.splitext(os.path.basename(path))[0])
msgfmt_available = shutil.which("msgfmt") is not None
@@ -139,7 +135,3 @@ def make_doc_translations_header(target, source, env):
def make_extractable_translations_header(target, source, env):
make_translations_header(target, source, env, "extractable")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/editor/icons/editor_icons_builders.py b/editor/icons/editor_icons_builders.py
index 3b2d8714d8..5cc67ca3ad 100644
--- a/editor/icons/editor_icons_builders.py
+++ b/editor/icons/editor_icons_builders.py
@@ -1,18 +1,12 @@
-"""
-Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
from io import StringIO
-from platform_methods import subprocess_main
# See also `scene/theme/icons/default_theme_icons_builders.py`.
def make_editor_icons_action(target, source, env):
- dst = target[0]
+ dst = str(target[0])
svg_icons = source
with StringIO() as icons_string, StringIO() as s:
@@ -85,7 +79,3 @@ def make_editor_icons_action(target, source, env):
with open(dst, "w", encoding="utf-8", newline="\n") as f:
f.write(s.getvalue())
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/editor/template_builders.py b/editor/template_builders.py
index c79c9bd8af..c02a2b0c65 100644
--- a/editor/template_builders.py
+++ b/editor/template_builders.py
@@ -1,10 +1,7 @@
-"""Functions used to generate source files during build time
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-"""
+"""Functions used to generate source files during build time"""
import os
from io import StringIO
-from platform_methods import subprocess_main
def parse_template(inherits, source, delimiter):
@@ -53,7 +50,7 @@ def parse_template(inherits, source, delimiter):
def make_templates(target, source, env):
- dst = target[0]
+ dst = str(target[0])
with StringIO() as s:
s.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n\n")
s.write("#ifndef _CODE_TEMPLATES_H\n")
@@ -63,7 +60,7 @@ def make_templates(target, source, env):
delimiter = "#" # GDScript single line comment delimiter by default.
if source:
- ext = os.path.splitext(source[0])[1]
+ ext = os.path.splitext(str(source[0]))[1]
if ext == ".cs":
delimiter = "//"
@@ -71,6 +68,7 @@ def make_templates(target, source, env):
number_of_templates = 0
for filepath in source:
+ filepath = str(filepath)
node_name = os.path.basename(os.path.dirname(filepath))
parsed_template = parse_template(node_name, filepath, delimiter)
parsed_template_string += "\t" + parsed_template
@@ -89,7 +87,3 @@ def make_templates(target, source, env):
with open(dst, "w", encoding="utf-8", newline="\n") as f:
f.write(s.getvalue())
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/editor/themes/editor_theme_builders.py b/editor/themes/editor_theme_builders.py
index 399ff16a1d..ec5653fb09 100644
--- a/editor/themes/editor_theme_builders.py
+++ b/editor/themes/editor_theme_builders.py
@@ -1,16 +1,10 @@
-"""
-Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
-from platform_methods import subprocess_main
def make_fonts_header(target, source, env):
- dst = target[0]
+ dst = str(target[0])
with open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
@@ -19,10 +13,11 @@ def make_fonts_header(target, source, env):
# Saving uncompressed, since FreeType will reference from memory pointer.
for i in range(len(source)):
- with open(source[i], "rb") as f:
+ file = str(source[i])
+ with open(file, "rb") as f:
buf = f.read()
- name = os.path.splitext(os.path.basename(source[i]))[0]
+ name = os.path.splitext(os.path.basename(file))[0]
g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n")
g.write("static const unsigned char _font_" + name + "[] = {\n")
@@ -32,7 +27,3 @@ def make_fonts_header(target, source, env):
g.write("};\n")
g.write("#endif")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/gles3_builders.py b/gles3_builders.py
index 9577ded544..985e9d547c 100644
--- a/gles3_builders.py
+++ b/gles3_builders.py
@@ -1,15 +1,9 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os.path
from typing import Optional
-from platform_methods import subprocess_main
-
class GLES3HeaderStruct:
def __init__(self):
@@ -600,7 +594,3 @@ def build_gles3_header(
def build_gles3_headers(target, source, env):
for x in source:
build_gles3_header(str(x), include="drivers/gles3/shader_gles3.h", class_suffix="GLES3")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/glsl_builders.py b/glsl_builders.py
index 7eb79b8b32..fd90e9a6c0 100644
--- a/glsl_builders.py
+++ b/glsl_builders.py
@@ -1,14 +1,8 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os.path
from typing import Optional, Iterable
-from platform_methods import subprocess_main
-
def generate_inline_code(input_lines: Iterable[str], insert_newline: bool = True):
"""Take header data and generate inline code
@@ -227,7 +221,3 @@ static const char {out_file_base}[] = {{
def build_raw_headers(target, source, env):
for x in source:
build_raw_header(filename=str(x))
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/main/main_builders.py b/main/main_builders.py
index 69277e49df..b693df73fc 100644
--- a/main/main_builders.py
+++ b/main/main_builders.py
@@ -1,15 +1,9 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
-
-from platform_methods import subprocess_main
+"""Functions used to generate source files during build time"""
def make_splash(target, source, env):
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "rb") as f:
buf = f.read()
@@ -28,8 +22,8 @@ def make_splash(target, source, env):
def make_splash_editor(target, source, env):
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "rb") as f:
buf = f.read()
@@ -49,8 +43,8 @@ def make_splash_editor(target, source, env):
def make_app_icon(target, source, env):
- src = source[0]
- dst = target[0]
+ src = str(source[0])
+ dst = str(target[0])
with open(src, "rb") as f:
buf = f.read()
@@ -64,7 +58,3 @@ def make_app_icon(target, source, env):
g.write(str(buf[i]) + ",\n")
g.write("};\n")
g.write("#endif")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/methods.py b/methods.py
index 948574e18a..5aa34888eb 100644
--- a/methods.py
+++ b/methods.py
@@ -826,14 +826,10 @@ def CommandNoCache(env, target, sources, command, **args):
return result
-def Run(env, function, subprocess=True):
+def Run(env, function):
from SCons.Script import Action
- from platform_methods import run_in_subprocess
- if not subprocess:
- return Action(function, "$GENCOMSTR")
- else:
- return Action(run_in_subprocess(function), "$GENCOMSTR")
+ return Action(function, "$GENCOMSTR")
def detect_darwin_sdk_path(platform, env):
diff --git a/modules/SCsub b/modules/SCsub
index 87c59c3bcc..6fb2aa67f4 100644
--- a/modules/SCsub
+++ b/modules/SCsub
@@ -17,11 +17,7 @@ env.Depends("modules_enabled.gen.h", Value(env.module_list))
env.CommandNoCache(
"modules_enabled.gen.h",
Value(env.module_list),
- env.Run(
- modules_builders.generate_modules_enabled,
- # NOTE: No need to run in subprocess since this is still executed serially.
- subprocess=False,
- ),
+ env.Run(modules_builders.generate_modules_enabled),
)
@@ -55,11 +51,7 @@ if env["tests"]:
env.CommandNoCache(
"modules_tests.gen.h",
test_headers,
- env.Run(
- modules_builders.generate_modules_tests,
- # NOTE: No need to run in subprocess since this is still executed serially.
- subprocess=False,
- ),
+ env.Run(modules_builders.generate_modules_tests),
)
# libmodules.a with only register_module_types.
diff --git a/modules/modules_builders.py b/modules/modules_builders.py
index 20eea9d993..5db7c88a90 100644
--- a/modules/modules_builders.py
+++ b/modules/modules_builders.py
@@ -1,9 +1,4 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-"""
-
-from platform_methods import subprocess_main
+"""Functions used to generate source files during build time"""
def generate_modules_enabled(target, source, env):
@@ -18,7 +13,3 @@ def generate_modules_tests(target, source, env):
with open(target[0].path, "w", encoding="utf-8", newline="\n") as f:
for header in source:
f.write('#include "%s"\n' % (os.path.normpath(header.path)))
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/platform/linuxbsd/platform_linuxbsd_builders.py b/platform/linuxbsd/platform_linuxbsd_builders.py
index 85d55f0ac6..46fa1947e8 100644
--- a/platform/linuxbsd/platform_linuxbsd_builders.py
+++ b/platform/linuxbsd/platform_linuxbsd_builders.py
@@ -1,18 +1,10 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
-from platform_methods import subprocess_main
def make_debug_linuxbsd(target, source, env):
- os.system("objcopy --only-keep-debug {0} {0}.debugsymbols".format(target[0]))
- os.system("strip --strip-debug --strip-unneeded {0}".format(target[0]))
- os.system("objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(target[0]))
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
+ dst = str(target[0])
+ os.system("objcopy --only-keep-debug {0} {0}.debugsymbols".format(dst))
+ os.system("strip --strip-debug --strip-unneeded {0}".format(dst))
+ os.system("objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(dst))
diff --git a/platform/macos/platform_macos_builders.py b/platform/macos/platform_macos_builders.py
index a1228b96eb..eabe5aae2f 100644
--- a/platform/macos/platform_macos_builders.py
+++ b/platform/macos/platform_macos_builders.py
@@ -1,22 +1,14 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
-from platform_methods import subprocess_main
def make_debug_macos(target, source, env):
+ dst = str(target[0])
if env["macports_clang"] != "no":
mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local")
mpclangver = env["macports_clang"]
- os.system(mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-dsymutil {0} -o {0}.dSYM".format(target[0]))
+ os.system(mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-dsymutil {0} -o {0}.dSYM".format(dst))
else:
- os.system("dsymutil {0} -o {0}.dSYM".format(target[0]))
- os.system("strip -u -r {0}".format(target[0]))
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
+ os.system("dsymutil {0} -o {0}.dSYM".format(dst))
+ os.system("strip -u -r {0}".format(dst))
diff --git a/platform/windows/platform_windows_builders.py b/platform/windows/platform_windows_builders.py
index 99e9633800..729d55cea6 100644
--- a/platform/windows/platform_windows_builders.py
+++ b/platform/windows/platform_windows_builders.py
@@ -1,32 +1,24 @@
-"""Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
from detect import get_mingw_bin_prefix
from detect import try_cmd
-from platform_methods import subprocess_main
def make_debug_mingw(target, source, env):
+ dst = str(target[0])
# Force separate debug symbols if executable size is larger than 1.9 GB.
- if env["separate_debug_symbols"] or os.stat(target[0]).st_size >= 2040109465:
+ if env["separate_debug_symbols"] or os.stat(dst).st_size >= 2040109465:
mingw_bin_prefix = get_mingw_bin_prefix(env["mingw_prefix"], env["arch"])
if try_cmd("objcopy --version", env["mingw_prefix"], env["arch"]):
- os.system(mingw_bin_prefix + "objcopy --only-keep-debug {0} {0}.debugsymbols".format(target[0]))
+ os.system(mingw_bin_prefix + "objcopy --only-keep-debug {0} {0}.debugsymbols".format(dst))
else:
- os.system("objcopy --only-keep-debug {0} {0}.debugsymbols".format(target[0]))
+ os.system("objcopy --only-keep-debug {0} {0}.debugsymbols".format(dst))
if try_cmd("strip --version", env["mingw_prefix"], env["arch"]):
- os.system(mingw_bin_prefix + "strip --strip-debug --strip-unneeded {0}".format(target[0]))
+ os.system(mingw_bin_prefix + "strip --strip-debug --strip-unneeded {0}".format(dst))
else:
- os.system("strip --strip-debug --strip-unneeded {0}".format(target[0]))
+ os.system("strip --strip-debug --strip-unneeded {0}".format(dst))
if try_cmd("objcopy --version", env["mingw_prefix"], env["arch"]):
- os.system(mingw_bin_prefix + "objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(target[0]))
+ os.system(mingw_bin_prefix + "objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(dst))
else:
- os.system("objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(target[0]))
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
+ os.system("objcopy --add-gnu-debuglink={0}.debugsymbols {0}".format(dst))
diff --git a/platform_methods.py b/platform_methods.py
index 43e6e4f799..37fc8a83ed 100644
--- a/platform_methods.py
+++ b/platform_methods.py
@@ -8,75 +8,6 @@ import subprocess
# NOTE: The multiprocessing module is not compatible with SCons due to conflict on cPickle
-JSON_SERIALIZABLE_TYPES = (bool, int, float, str)
-
-
-def run_in_subprocess(builder_function):
- @functools.wraps(builder_function)
- def wrapper(target, source, env):
- # Convert SCons Node instances to absolute paths
- target = [node.srcnode().abspath for node in target]
- source = [node.srcnode().abspath for node in source]
-
- # Short circuit on non-Windows platforms, no need to run in subprocess
- if sys.platform not in ("win32", "cygwin"):
- return builder_function(target, source, env)
-
- # Identify module
- module_name = builder_function.__module__
- function_name = builder_function.__name__
- module_path = sys.modules[module_name].__file__
- if module_path.endswith(".pyc") or module_path.endswith(".pyo"):
- module_path = module_path[:-1]
-
- # Subprocess environment
- subprocess_env = os.environ.copy()
- subprocess_env["PYTHONPATH"] = os.pathsep.join([os.getcwd()] + sys.path)
-
- # Keep only JSON serializable environment items
- filtered_env = dict((key, value) for key, value in env.items() if isinstance(value, JSON_SERIALIZABLE_TYPES))
-
- # Save parameters
- args = (target, source, filtered_env)
- data = dict(fn=function_name, args=args)
- json_path = os.path.join(os.environ["TMP"], uuid.uuid4().hex + ".json")
- with open(json_path, "wt", encoding="utf-8", newline="\n") as json_file:
- json.dump(data, json_file, indent=2)
- json_file_size = os.stat(json_path).st_size
-
- if env["verbose"]:
- print(
- "Executing builder function in subprocess: "
- "module_path=%r, parameter_file=%r, parameter_file_size=%r, target=%r, source=%r"
- % (module_path, json_path, json_file_size, target, source)
- )
- try:
- exit_code = subprocess.call([sys.executable, module_path, json_path], env=subprocess_env)
- finally:
- try:
- os.remove(json_path)
- except OSError as e:
- # Do not fail the entire build if it cannot delete a temporary file
- print(
- "WARNING: Could not delete temporary file: path=%r; [%s] %s" % (json_path, e.__class__.__name__, e)
- )
-
- # Must succeed
- if exit_code:
- raise RuntimeError(
- "Failed to run builder function in subprocess: module_path=%r; data=%r" % (module_path, data)
- )
-
- return wrapper
-
-
-def subprocess_main(namespace):
- with open(sys.argv[1]) as json_file:
- data = json.load(json_file)
-
- fn = namespace[data["fn"]]
- fn(*data["args"])
-
# CPU architecture options.
architectures = ["x86_32", "x86_64", "arm32", "arm64", "rv64", "ppc32", "ppc64", "wasm32"]
diff --git a/scene/theme/default_theme_builders.py b/scene/theme/default_theme_builders.py
index 3def1054b6..31272510ac 100644
--- a/scene/theme/default_theme_builders.py
+++ b/scene/theme/default_theme_builders.py
@@ -1,17 +1,11 @@
-"""
-Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
import os.path
-from platform_methods import subprocess_main
def make_fonts_header(target, source, env):
- dst = target[0]
+ dst = str(target[0])
with open(dst, "w", encoding="utf-8", newline="\n") as g:
g.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
@@ -20,10 +14,11 @@ def make_fonts_header(target, source, env):
# Saving uncompressed, since FreeType will reference from memory pointer.
for i in range(len(source)):
- with open(source[i], "rb") as f:
+ file = str(source[i])
+ with open(file, "rb") as f:
buf = f.read()
- name = os.path.splitext(os.path.basename(source[i]))[0]
+ name = os.path.splitext(os.path.basename(file))[0]
g.write("static const int _font_" + name + "_size = " + str(len(buf)) + ";\n")
g.write("static const unsigned char _font_" + name + "[] = {\n")
@@ -33,7 +28,3 @@ def make_fonts_header(target, source, env):
g.write("};\n")
g.write("#endif")
-
-
-if __name__ == "__main__":
- subprocess_main(globals())
diff --git a/scene/theme/icons/default_theme_icons_builders.py b/scene/theme/icons/default_theme_icons_builders.py
index ecce0eea61..49c0a93191 100644
--- a/scene/theme/icons/default_theme_icons_builders.py
+++ b/scene/theme/icons/default_theme_icons_builders.py
@@ -1,19 +1,13 @@
-"""
-Functions used to generate source files during build time
-
-All such functions are invoked in a subprocess on Windows to prevent build flakiness.
-
-"""
+"""Functions used to generate source files during build time"""
import os
from io import StringIO
-from platform_methods import subprocess_main
# See also `editor/icons/editor_icons_builders.py`.
def make_default_theme_icons_action(target, source, env):
- dst = target[0]
- svg_icons = source
+ dst = str(target[0])
+ svg_icons = [str(x) for x in source]
with StringIO() as icons_string, StringIO() as s:
for f in svg_icons:
@@ -65,7 +59,3 @@ def make_default_theme_icons_action(target, source, env):
with open(dst, "w", encoding="utf-8", newline="\n") as f:
f.write(s.getvalue())
-
-
-if __name__ == "__main__":
- subprocess_main(globals())