find_program(GLIB_COMPILE_RESOURCES NAMES "glib-compile-resources" REQUIRED ) function(target_add_glib_resources TARGET) set(SINGLE_VALUE_ARGS "PREFIX" "WORKING_DIRECTORY") set(MULTI_VALUE_ARGS "CSS_FILES" "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() if(NOT _WORKING_DIRECTORY) set(_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") endif() # File Names set(GLIB_RESOURCE_C_FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.gresource.c") set(GLIB_RESOURCE_MANIFEST "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}.gresource.xml") # Manifest File foreach(UI_FILE IN LISTS _UI_FILES) string(APPEND GLIB_RESOURCE_FILES " ${UI_FILE}\n") endforeach() foreach(CSS_FILE IN LISTS _CSS_FILES) string(APPEND GLIB_RESOURCE_FILES " ${CSS_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 foreach(FILE IN LISTS _CSS_FILES _UI_FILES) list(APPEND _DEPS "${_WORKING_DIRECTORY}/${FILE}") endforeach() add_custom_command(OUTPUT "${GLIB_RESOURCE_C_FILE}" WORKING_DIRECTORY "${_WORKING_DIRECTORY}" COMMAND "${GLIB_COMPILE_RESOURCES}" ARGS "--target=${GLIB_RESOURCE_C_FILE}" "--generate-source" "--internal" "${GLIB_RESOURCE_MANIFEST}" VERBATIM MAIN_DEPENDENCY "${GLIB_RESOURCE_MANIFEST}" DEPENDS ${_DEPS} ) # Target Inclusion target_sources("${TARGET}" PRIVATE "${GLIB_RESOURCE_C_FILE}" ) endfunction() # bookie.ui