summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-11 13:17:03 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-11 16:03:04 +0200
commitf597be870eec6d04de6bed0effa7dd23bcb72bf8 (patch)
tree569ceeeef1bbf143b0d3a32ccf9a2fc716ff13e1 /cmake
downloadturns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.tar.xz
turns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.zip
initial commit
Diffstat (limited to 'cmake')
-rw-r--r--cmake/Modules/GlibCompileResources.cmake67
-rw-r--r--cmake/Modules/GlibCompileResources.in6
2 files changed, 73 insertions, 0 deletions
diff --git a/cmake/Modules/GlibCompileResources.cmake b/cmake/Modules/GlibCompileResources.cmake
new file mode 100644
index 0000000..dcd9df5
--- /dev/null
+++ b/cmake/Modules/GlibCompileResources.cmake
@@ -0,0 +1,67 @@
+find_program(GLIB_COMPILE_RESOURCES
+ NAMES "glib-compile-resources"
+ REQUIRED
+)
+
+function(target_add_glib_resources TARGET)
+ set(SINGLE_VALUE_ARGS "PREFIX")
+ set(MULTI_VALUE_ARGS "UI_FILES")
+ cmake_parse_arguments(
+ PARSE_ARGV 1
+ ""
+ "${OPTIONS}"
+ "${SINGLE_VALUE_ARGS}"
+ "${MULTI_VALUE_ARGS}"
+ )
+
+ # Sanity Checks
+
+ if(NOT TARGET "${TARGET}")
+ message(FATAL_ERROR "Target '${TARGET}' does not exist")
+ endif()
+
+ if(NOT _PREFIX)
+ message(FATAL_ERROR "Glib resource prefix not defined")
+ endif()
+
+ # File Names
+
+ string(MAKE_C_IDENTIFIER "${_PREFIX}" FILE_PREFIX)
+ set(GLIB_RESOURCE_C_FILE "${CMAKE_CURRENT_BINARY_DIR}/${FILE_PREFIX}.${TARGET}.c")
+ set(GLIB_RESOURCE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/${FILE_PREFIX}.${TARGET}.xml")
+
+ # Manifest File
+
+ foreach(UI_FILE IN LISTS _UI_FILES)
+ string(APPEND GLIB_RESOURCE_FILES " <file compressed=\"true\" preprocess=\"xml-stripblanks\">${UI_FILE}</file>\n")
+ endforeach()
+ string(STRIP "${GLIB_RESOURCE_FILES}" GLIB_RESOURCE_FILES)
+ set(GLIB_RESOURCE_PREFIX "${_PREFIX}")
+ configure_file("${PROJECT_SOURCE_DIR}/cmake/Modules/GlibCompileResources.in"
+ "${GLIB_RESOURCE_MANIFEST}"
+ )
+
+ # Source Generation
+
+ add_custom_command(OUTPUT "${GLIB_RESOURCE_C_FILE}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMAND "${GLIB_COMPILE_RESOURCES}"
+ ARGS
+ "--target=${GLIB_RESOURCE_C_FILE}"
+ "--generate-source"
+ "--internal"
+ "${GLIB_RESOURCE_MANIFEST}"
+ VERBATIM
+ MAIN_DEPENDENCY "${GLIB_RESOURCE_MANIFEST}"
+ DEPENDS
+ ${_UI_FILES}
+ )
+
+ # Target Inclusion
+
+ target_sources("${TARGET}" PRIVATE
+ "${GLIB_RESOURCE_C_FILE}"
+ )
+endfunction()
+
+# <file preprocess="xml-stripblanks">bookie.ui</file>
diff --git a/cmake/Modules/GlibCompileResources.in b/cmake/Modules/GlibCompileResources.in
new file mode 100644
index 0000000..2166c25
--- /dev/null
+++ b/cmake/Modules/GlibCompileResources.in
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+ <gresource prefix="/@GLIB_RESOURCE_PREFIX@">
+ @GLIB_RESOURCE_FILES@
+ </gresource>
+</gresources> \ No newline at end of file