Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release/datafiles/blender_icons_geom_update.py')
-rwxr-xr-xrelease/datafiles/blender_icons_geom_update.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/release/datafiles/blender_icons_geom_update.py b/release/datafiles/blender_icons_geom_update.py
new file mode 100755
index 00000000000..0b1cbf40722
--- /dev/null
+++ b/release/datafiles/blender_icons_geom_update.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+
+# This script updates icons from the BLEND file
+import os
+import subprocess
+
+
+def run(cmd):
+ print(" ", " ".join(cmd))
+ # Don't use check_call because asan causes nonzero exitcode :S
+ subprocess.call(cmd)
+
+
+def edit_text_file(filename, marker_begin, marker_end, content):
+ with open(filename, 'r', encoding='utf-8') as f:
+ data = f.read()
+ marker_begin_index = data.find(marker_begin)
+ marker_end_index = data.find(marker_end, marker_begin_index)
+ # include indentation of marker
+ while data[marker_end_index - 1] in {'\t', ' '}:
+ marker_end_index -= 1
+ if marker_begin_index == -1:
+ print('Error: {!r} not found'.format(marker_begin))
+ return
+ if marker_end_index == -1:
+ print('Error: {!r} not found'.format(marker_end))
+ return
+ marker_begin_index += len(marker_begin) + 1
+ data_update = data[:marker_begin_index] + content + data[marker_end_index:]
+ if data != data_update:
+ with open(filename, 'w', encoding='utf-8') as f:
+ f.write(data_update)
+
+
+BASEDIR = os.path.abspath(os.path.dirname(__file__))
+ROOTDIR = os.path.normpath(os.path.join(BASEDIR, "..", ".."))
+
+blender_bin = os.environ.get("BLENDER_BIN", "blender")
+if not os.path.exists(blender_bin):
+ blender_bin = os.path.join(ROOTDIR, "blender.bin")
+
+icons_blend = (
+ os.path.join(ROOTDIR, "..", "lib", "resources", "icon_geom.blend"),
+)
+
+
+def names_and_time_from_path(path):
+ for entry in os.scandir(path):
+ name = entry.name
+ if name.endswith(".dat"):
+ yield (name, entry.stat().st_mtime)
+
+
+# Collect icons files and update CMake.
+icon_files = []
+
+# create .dat geometry (which are stored in git)
+for blend in icons_blend:
+ output_dir = os.path.join(BASEDIR, "icons")
+ files_old = set(names_and_time_from_path(output_dir))
+ cmd = (
+ blender_bin, "--background", "--factory-startup", "-noaudio",
+ blend,
+ "--python", os.path.join(BASEDIR, "blender_icons_geom.py"),
+ "--",
+ "--group", "Export",
+ "--output-dir", output_dir,
+ )
+ run(cmd)
+ files_new = set(names_and_time_from_path(output_dir))
+
+ icon_files.extend([
+ name[:-4] # no .dat
+ for (name, _) in sorted((files_new - files_old))
+ ])
+
+
+edit_text_file(
+ os.path.join(ROOTDIR, "source", "blender", "editors", "datafiles", "CMakeLists.txt"),
+ "# BEGIN ICON_GEOM_NAMES",
+ "# END ICON_GEOM_NAMES",
+ "\t" + "\n\t".join(icon_files) + "\n",
+)