aboutsummaryrefslogtreecommitdiff
path: root/cmake/GSettings.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/GSettings.cmake')
-rw-r--r--cmake/GSettings.cmake108
1 files changed, 108 insertions, 0 deletions
diff --git a/cmake/GSettings.cmake b/cmake/GSettings.cmake
new file mode 100644
index 0000000..5902baa
--- /dev/null
+++ b/cmake/GSettings.cmake
@@ -0,0 +1,108 @@
+# GSettings.cmake
+# Originally based on CMake macros written for Marlin
+# Updated by Yorba for newer versions of GLib.
+#
+# NOTE: This module does an in-place compilation of GSettings; the
+# resulting gschemas.compiled file will end up in the same
+# source folder as the original schema(s).
+
+option(GSETTINGS_COMPILE "Compile GSettings schemas. Can be disabled for packaging reasons." ON)
+option(GSETTINGS_COMPILE_IN_PLACE "Compile GSettings schemas in the build folder. This is used for running an appliction without installing the GSettings systemwide. The application will need to set GSETTINGS_SCHEMA_DIR" ON)
+
+if (GSETTINGS_COMPILE)
+ message(STATUS "GSettings schemas will be compiled.")
+endif ()
+
+if (GSETTINGS_COMPILE_IN_PLACE)
+ message(STATUS "GSettings schemas will be compiled in-place.")
+endif ()
+
+macro(add_schemas GSETTINGS_TARGET SCHEMA_DIRECTORY)
+ set(PKG_CONFIG_EXECUTABLE pkg-config)
+
+ # Locate all schema files.
+ file(GLOB all_schema_files
+ "${SCHEMA_DIRECTORY}/*.gschema.xml"
+ )
+
+ # Find the GLib path for schema installation
+ execute_process(
+ COMMAND
+ ${PKG_CONFIG_EXECUTABLE}
+ glib-2.0
+ --variable prefix
+ OUTPUT_VARIABLE
+ _glib_prefix
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ set(GSETTINGS_DIR "${_glib_prefix}/share/glib-2.0/schemas/" CACHE INTERNAL "")
+
+ # Fetch path for schema compiler from pkg-config
+ execute_process(
+ COMMAND
+ ${PKG_CONFIG_EXECUTABLE}
+ gio-2.0
+ --variable
+ glib_compile_schemas
+ OUTPUT_VARIABLE
+ _glib_compile_schemas
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ set(glib_schema_compiler ${_glib_compile_schemas} CACHE INTERNAL "")
+
+ if (GSETTINGS_COMPILE_IN_PLACE)
+ set(COMPILE_IN_PLACE_DIR ${CMAKE_BINARY_DIR}/gsettings)
+ add_custom_command(
+ TARGET
+ ${GSETTINGS_TARGET}
+ COMMAND
+ ${CMAKE_COMMAND} -E make_directory "${COMPILE_IN_PLACE_DIR}"
+ )
+
+ # Copy all schemas to the build folder.
+ foreach(schema_file ${all_schema_files})
+ add_custom_command(
+ TARGET
+ ${GSETTINGS_TARGET}
+ COMMAND
+ ${CMAKE_COMMAND} -E copy "${schema_file}" "${COMPILE_IN_PLACE_DIR}"
+ COMMENT "Copying schema ${schema_file} to ${COMPILE_IN_PLACE_DIR}"
+ )
+ endforeach()
+
+ # Compile schema in-place.
+ add_custom_command(
+ TARGET
+ ${GSETTINGS_TARGET}
+ COMMAND
+ ${glib_schema_compiler} ${COMPILE_IN_PLACE_DIR}
+ COMMENT "Compiling schemas in folder: ${COMPILE_IN_PLACE_DIR}"
+ )
+ endif ()
+
+ # Install and recompile schemas
+ message(STATUS "GSettings schemas will be installed into ${GSETTINGS_DIR}")
+
+ install(
+ FILES
+ ${all_schema_files}
+ DESTINATION
+ ${GSETTINGS_DIR}
+ OPTIONAL
+ )
+
+ if (GSETTINGS_COMPILE)
+ install(
+ CODE
+ "message (STATUS \"Compiling GSettings schemas\")"
+ )
+
+ install(
+ CODE
+ "execute_process (COMMAND ${glib_schema_compiler} ${GSETTINGS_DIR})"
+ )
+ endif ()
+endmacro(add_schemas)
+