[Bf-blender-cvs] [2fe35914e17] blender2.8: CMake: generate icon list for installation

Campbell Barton noreply at git.blender.org
Wed Apr 25 09:26:59 CEST 2018


Commit: 2fe35914e17d6173925be06c61974479666b9ef7
Author: Campbell Barton
Date:   Wed Apr 25 09:24:54 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB2fe35914e17d6173925be06c61974479666b9ef7

CMake: generate icon list for installation

MSVC users weren't getting icons installed, since glob isn't reliable,
list all files in a section which the update script maintains.

===================================================================

M	release/datafiles/blender_icons_geom_update.py
M	source/blender/editors/datafiles/CMakeLists.txt
M	source/creator/CMakeLists.txt

===================================================================

diff --git a/release/datafiles/blender_icons_geom_update.py b/release/datafiles/blender_icons_geom_update.py
index 1671067664e..fac45c77b89 100755
--- a/release/datafiles/blender_icons_geom_update.py
+++ b/release/datafiles/blender_icons_geom_update.py
@@ -4,9 +4,32 @@
 import os
 import subprocess
 
+
 def run(cmd):
     print("   ", " ".join(cmd))
-    subprocess.check_call(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:]
+    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, "..", ".."))
@@ -19,14 +42,41 @@ 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", os.path.join(BASEDIR, "icons"),
+        "--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",
+)
diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt
index 65c55b6cd22..697fd5a0a4f 100644
--- a/source/blender/editors/datafiles/CMakeLists.txt
+++ b/source/blender/editors/datafiles/CMakeLists.txt
@@ -525,6 +525,52 @@ set(ICON_NAMES
 	imagefile
 )
 
+# This section is maintained by the updating script, keep BEGIN/END comments.
+set_property(GLOBAL PROPERTY ICON_GEOM_NAMES
+	# BEGIN ICON_GEOM_NAMES
+	ops.armature.extrude.cursor
+	ops.armature.extrude
+	ops.generic.cursor
+	ops.generic.select_border
+	ops.generic.select_circle
+	ops.generic.select_lasso
+	ops.gpencil.draw
+	ops.gpencil.draw.eraser
+	ops.gpencil.draw.line
+	ops.gpencil.draw.poly
+	ops.mesh.bisect
+	ops.mesh.inset
+	ops.mesh.knife_tool
+	ops.mesh.loopcut_slide
+	ops.mesh.offset_edge_loops_slide
+	ops.mesh.polybuild_hover
+	ops.mesh.rip
+	ops.mesh.rip_edge
+	ops.mesh.spin
+	ops.mesh.spin.duplicate
+	ops.mesh.vertices_smooth
+	ops.particle.brush_edit.add
+	ops.particle.brush_edit.comb
+	ops.particle.brush_edit.comb.weight
+	ops.particle.brush_edit.cut
+	ops.particle.brush_edit.length
+	ops.particle.brush_edit.puff
+	ops.particle.brush_edit.smooth
+	ops.transform.edge_slide
+	ops.transform.push_pull
+	ops.transform.resize.cage
+	ops.transform.resize
+	ops.transform.rotate
+	ops.transform.shrink_fatten
+	ops.transform.translate
+	ops.transform.vert_slide
+	ops.transform.vertex_random
+	ops.view3d.edit_mesh_extrude
+	ops.view3d.edit_mesh_extrude_individual
+	ops.view3d.ruler
+	# END ICON_GEOM_NAMES
+)
+
 data_to_c_simple(../../../../release/datafiles/bfont.pfb SRC)
 data_to_c_simple(../../../../release/datafiles/bfont.ttf SRC)
 data_to_c_simple(../../../../release/datafiles/bmonofont.ttf SRC)
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index 5ed9355105a..585a2f58204 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -958,13 +958,28 @@ delayed_do_install(${TARGETDIR_VER})
 unset(BLENDER_TEXT_FILES)
 unset(BLENDER_TEXT_FILES_DESTINATION)
 
+
+# -----------------------------------------------------------------------------
+# Geometry Icons
+
 # Geometry icons.
+get_property(_icon_names GLOBAL PROPERTY ICON_GEOM_NAMES)
+set(_icon_files)
+foreach(_f ${_icon_names})
+	list(APPEND _icon_files
+		"${CMAKE_SOURCE_DIR}/release/datafiles/icons/${_f}.dat"
+	)
+endforeach()
 install(
-	DIRECTORY
-		${CMAKE_SOURCE_DIR}/release/datafiles/icons
-	DESTINATION ${TARGETDIR_VER}/datafiles
+	FILES ${_icon_files}
+	DESTINATION ${TARGETDIR_VER}/datafiles/icons
 )
 
+unset(_icon_names)
+unset(_icon_files)
+unset(_f)
+
+
 # -----------------------------------------------------------------------------
 # Setup link libs



More information about the Bf-blender-cvs mailing list