summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2020-06-10 15:20:59 +0200
committerGitHub <noreply@github.com>2020-06-10 15:20:59 +0200
commit1aeb88205d0e1672670bea8c210be6b3e1269fe1 (patch)
treec1a0284d1587c2b8dc4359311280eb139cbe0121
parent1760c13db98f822239fd3ec3f0437086016f905e (diff)
parent42bee75e86e81fcd9b51b2e960d13b89b18ad4bf (diff)
Merge pull request #37248 from Xrayez/env-dump
SCons: Dump construction environment to a file
-rw-r--r--.gitignore3
-rw-r--r--SConstruct5
-rw-r--r--methods.py11
3 files changed, 18 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index dfb1490aa9..ca27e42016 100644
--- a/.gitignore
+++ b/.gitignore
@@ -340,6 +340,9 @@ platform/windows/godot_res.res
# Visual Studio Code workspace file
*.code-workspace
+# Scons construction environment dump
+.scons_env.json
+
# Scons progress indicator
.scons_node_count
diff --git a/SConstruct b/SConstruct
index b424363dc8..9496595a26 100644
--- a/SConstruct
+++ b/SConstruct
@@ -693,6 +693,9 @@ elif selected_platform != "":
else:
Exit(255)
-# The following only makes sense when the env is defined, and assumes it is
+# The following only makes sense when the 'env' is defined, and assumes it is.
if "env" in locals():
methods.show_progress(env)
+ # TODO: replace this with `env.Dump(format="json")`
+ # once we start requiring SCons 4.0 as min version.
+ methods.dump(env)
diff --git a/methods.py b/methods.py
index 756db19e9a..ca6756f95f 100644
--- a/methods.py
+++ b/methods.py
@@ -803,3 +803,14 @@ def show_progress(env):
progress_finish_command = Command("progress_finish", [], progress_finish)
AlwaysBuild(progress_finish_command)
+
+
+def dump(env):
+ # Dumps latest build information for debugging purposes and external tools.
+ from json import dump
+
+ def non_serializable(obj):
+ return "<<non-serializable: %s>>" % (type(obj).__qualname__)
+
+ with open(".scons_env.json", "w") as f:
+ dump(env.Dictionary(), f, indent=4, default=non_serializable)