summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Doroshenko (Xrayez) <xrayez@gmail.com>2020-03-20 22:49:38 +0200
committerAndrii Doroshenko (Xrayez) <xrayez@gmail.com>2020-06-10 15:05:43 +0300
commit42bee75e86e81fcd9b51b2e960d13b89b18ad4bf (patch)
tree8cc66e767c5251a81d814a55db46b90df0503d22
parent52814d111c3e522cb320bd7e17c61f914d7b9a3a (diff)
SCons: Dump construction environment to a file
A new `methods.dump(env)` is added to dump the construction environment used by SCons to build Godot to a `.scons_env.json`. The file can be used for debugging purposes and any external tool.
-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 fe94715bba..fa13eec502 100644
--- a/SConstruct
+++ b/SConstruct
@@ -688,6 +688,9 @@ elif selected_platform != "":
else:
sys.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 cb3b39ac68..e315030e4c 100644
--- a/methods.py
+++ b/methods.py
@@ -778,3 +778,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)