blob: 5902baabb37e8162b8144700d8bff7d66fc0043d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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)
|