diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-11 13:17:03 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-11 16:03:04 +0200 |
| commit | f597be870eec6d04de6bed0effa7dd23bcb72bf8 (patch) | |
| tree | 569ceeeef1bbf143b0d3a32ccf9a2fc716ff13e1 /cmake | |
| download | turns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.tar.xz turns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.zip | |
initial commit
Diffstat (limited to 'cmake')
| -rw-r--r-- | cmake/Modules/GlibCompileResources.cmake | 67 | ||||
| -rw-r--r-- | cmake/Modules/GlibCompileResources.in | 6 |
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 |
