Changeset View
Changeset View
Standalone View
Standalone View
cmake/FindGIO.cmake
- This file was added.
1 | # FindGIO.cmake | ||||
---|---|---|---|---|---|
2 | # <https://github.com/nemequ/gnome-cmake> | ||||
3 | # | ||||
4 | # CMake support for GIO. | ||||
5 | # | ||||
6 | # License: | ||||
7 | # | ||||
8 | # Copyright (c) 2016 Evan Nemerson <evan@nemerson.com> | ||||
9 | # | ||||
10 | # Permission is hereby granted, free of charge, to any person | ||||
11 | # obtaining a copy of this software and associated documentation | ||||
12 | # files (the "Software"), to deal in the Software without | ||||
13 | # restriction, including without limitation the rights to use, copy, | ||||
14 | # modify, merge, publish, distribute, sublicense, and/or sell copies | ||||
15 | # of the Software, and to permit persons to whom the Software is | ||||
16 | # furnished to do so, subject to the following conditions: | ||||
17 | # | ||||
18 | # The above copyright notice and this permission notice shall be | ||||
19 | # included in all copies or substantial portions of the Software. | ||||
20 | # | ||||
21 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
22 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
23 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
24 | # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | ||||
25 | # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||||
26 | # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
27 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||
28 | # DEALINGS IN THE SOFTWARE. | ||||
29 | | ||||
30 | find_package(PkgConfig) | ||||
31 | | ||||
32 | set(GIO_DEPS | ||||
33 | GObject) | ||||
34 | | ||||
35 | if(PKG_CONFIG_FOUND) | ||||
36 | pkg_search_module(GIO_PKG gio-2.0) | ||||
37 | endif() | ||||
38 | | ||||
39 | find_library(GIO_LIBRARY gio-2.0 HINTS ${GIO_PKG_LIBRARY_DIRS}) | ||||
40 | set(GIO "gio-2.0") | ||||
41 | | ||||
42 | if(GIO_LIBRARY AND NOT GIO_FOUND) | ||||
43 | add_library(${GIO} SHARED IMPORTED) | ||||
44 | set_property(TARGET ${GIO} PROPERTY IMPORTED_LOCATION "${GIO_LIBRARY}") | ||||
45 | set_property(TARGET ${GIO} PROPERTY INTERFACE_COMPILE_OPTIONS "${GIO_PKG_CFLAGS_OTHER}") | ||||
46 | | ||||
47 | find_path(GIO_INCLUDE_DIR "gio/gio.h" | ||||
48 | HINTS ${GIO_PKG_INCLUDE_DIRS}) | ||||
49 | | ||||
50 | find_package(GLib) | ||||
51 | find_package(GObject) | ||||
52 | set(GIO_VERSION "${GLib_VERSION}") | ||||
53 | | ||||
54 | list(APPEND GIO_DEPS_FOUND_VARS "GObject_FOUND") | ||||
55 | list(APPEND GIO_INCLUDE_DIRS ${GObject_INCLUDE_DIRS}) | ||||
56 | | ||||
57 | set_property (TARGET "${GIO}" APPEND PROPERTY INTERFACE_LINK_LIBRARIES "gobject-2.0") | ||||
58 | set_property(TARGET ${GIO} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GIO_INCLUDE_DIR}") | ||||
59 | endif() | ||||
60 | | ||||
61 | find_program(GLib_COMPILE_SCHEMAS glib-compile-schemas) | ||||
62 | if(GLib_COMPILE_SCHEMAS AND NOT GLib_FOUND) | ||||
63 | add_executable(glib-compile-schemas IMPORTED) | ||||
64 | set_property(TARGET glib-compile-schemas PROPERTY IMPORTED_LOCATION "${GLib_COMPILE_SCHEMAS}") | ||||
65 | endif() | ||||
66 | | ||||
67 | # glib_install_schemas( | ||||
68 | # [DESTINATION directory] | ||||
69 | # schemas…) | ||||
70 | # | ||||
71 | # Validate and install the listed schemas. | ||||
72 | function(glib_install_schemas) | ||||
73 | set (options) | ||||
74 | set (oneValueArgs DESTINATION) | ||||
75 | set (multiValueArgs) | ||||
76 | cmake_parse_arguments(GSCHEMA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | ||||
77 | unset (options) | ||||
78 | unset (oneValueArgs) | ||||
79 | unset (multiValueArgs) | ||||
80 | | ||||
81 | foreach(schema ${GSCHEMA_UNPARSED_ARGUMENTS}) | ||||
82 | get_filename_component(schema_name "${schema}" NAME) | ||||
83 | string(REGEX REPLACE "^(.+)\.gschema.xml$" "\\1" schema_name "${schema_name}") | ||||
84 | set(schema_output "${CMAKE_CURRENT_BINARY_DIR}/${schema_name}.gschema.xml.valid") | ||||
85 | | ||||
86 | add_custom_command( | ||||
87 | OUTPUT "${schema_output}" | ||||
88 | COMMAND glib-compile-schemas | ||||
89 | --strict | ||||
90 | --dry-run | ||||
91 | --schema-file="${schema}" | ||||
92 | COMMAND "${CMAKE_COMMAND}" ARGS -E touch "${schema_output}" | ||||
93 | DEPENDS "${schema}" | ||||
94 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | ||||
95 | COMMENT "Validating ${schema}") | ||||
96 | | ||||
97 | add_custom_target("gsettings-schema-${schema_name}" ALL | ||||
98 | DEPENDS "${schema_output}") | ||||
99 | | ||||
100 | if(CMAKE_INSTALL_FULL_DATADIR) | ||||
101 | set(SCHEMADIR "${CMAKE_INSTALL_FULL_DATADIR}/glib-2.0/schemas") | ||||
102 | else() | ||||
103 | set(SCHEMADIR "${CMAKE_INSTALL_PREFIX}/share/glib-2.0/schemas") | ||||
104 | endif() | ||||
105 | install(FILES "${schema}" | ||||
106 | DESTINATION "${SCHEMADIR}") | ||||
107 | install(CODE "execute_process(COMMAND \"${GLib_COMPILE_SCHEMAS}\" \"${SCHEMADIR}\")") | ||||
108 | endforeach() | ||||
109 | endfunction() | ||||
110 | | ||||
111 | find_program(GLib_COMPILE_RESOURCES glib-compile-resources) | ||||
112 | if(GLib_COMPILE_RESOURCES AND NOT GLib_FOUND) | ||||
113 | add_executable(glib-compile-resources IMPORTED) | ||||
114 | set_property(TARGET glib-compile-resources PROPERTY IMPORTED_LOCATION "${GLib_COMPILE_RESOURCES}") | ||||
115 | endif() | ||||
116 | | ||||
117 | function(glib_compile_resources SPEC_FILE) | ||||
118 | set (options INTERNAL) | ||||
119 | set (oneValueArgs TARGET SOURCE_DIR HEADER SOURCE C_NAME) | ||||
120 | set (multiValueArgs) | ||||
121 | cmake_parse_arguments(GLib_COMPILE_RESOURCES "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | ||||
122 | unset (options) | ||||
123 | unset (oneValueArgs) | ||||
124 | unset (multiValueArgs) | ||||
125 | | ||||
126 | if(NOT GLib_COMPILE_RESOURCES_SOURCE_DIR) | ||||
127 | set(GLib_COMPILE_RESOURCES_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
128 | endif() | ||||
129 | | ||||
130 | set(FLAGS) | ||||
131 | | ||||
132 | if(GLib_COMPILE_RESOURCES_INTERNAL) | ||||
133 | list(APPEND FLAGS "--internal") | ||||
134 | endif() | ||||
135 | | ||||
136 | if(GLib_COMPILE_RESOURCES_C_NAME) | ||||
137 | list(APPEND FLAGS "--c-name" "${GLib_COMPILE_RESOURCES_C_NAME}") | ||||
138 | endif() | ||||
139 | | ||||
140 | get_filename_component(SPEC_FILE "${SPEC_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
141 | | ||||
142 | execute_process( | ||||
143 | COMMAND glib-compile-resources | ||||
144 | --generate-dependencies | ||||
145 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" | ||||
146 | "${SPEC_FILE}" | ||||
147 | OUTPUT_VARIABLE deps | ||||
148 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | ||||
149 | OUTPUT_STRIP_TRAILING_WHITESPACE) | ||||
150 | string(REPLACE "\n" ";" deps ${deps}) | ||||
151 | | ||||
152 | if(GLib_COMPILE_RESOURCES_HEADER) | ||||
153 | get_filename_component(GLib_COMPILE_RESOURCES_HEADER "${GLib_COMPILE_RESOURCES_HEADER}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") | ||||
154 | | ||||
155 | add_custom_command( | ||||
156 | OUTPUT "${GLib_COMPILE_RESOURCES_HEADER}" | ||||
157 | COMMAND glib-compile-resources | ||||
158 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" | ||||
159 | --generate-header | ||||
160 | --target "${GLib_COMPILE_RESOURCES_HEADER}" | ||||
161 | ${FLAGS} | ||||
162 | "${SPEC_FILE}" | ||||
163 | DEPENDS "${SPEC_FILE}" ${deps} | ||||
164 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
165 | endif() | ||||
166 | | ||||
167 | if(GLib_COMPILE_RESOURCES_SOURCE) | ||||
168 | get_filename_component(GLib_COMPILE_RESOURCES_SOURCE "${GLib_COMPILE_RESOURCES_SOURCE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") | ||||
169 | | ||||
170 | add_custom_command( | ||||
171 | OUTPUT "${GLib_COMPILE_RESOURCES_SOURCE}" | ||||
172 | COMMAND glib-compile-resources | ||||
173 | --sourcedir "${GLib_COMPILE_RESOURCES_SOURCE_DIR}" | ||||
174 | --generate-source | ||||
175 | --target "${GLib_COMPILE_RESOURCES_SOURCE}" | ||||
176 | ${FLAGS} | ||||
177 | "${SPEC_FILE}" | ||||
178 | DEPENDS "${SPEC_FILE}" ${deps} | ||||
179 | WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") | ||||
180 | endif() | ||||
181 | endfunction() | ||||
182 | | ||||
183 | find_program(GDBUS_CODEGEN gdbus-codegen) | ||||
184 | if(GDBUS_CODEGEN AND NOT GLib_FOUND) | ||||
185 | add_executable(gdbus-codegen IMPORTED) | ||||
186 | set_property(TARGET gdbus-codegen PROPERTY IMPORTED_LOCATION "${GDBUS_CODEGEN}") | ||||
187 | endif() | ||||
188 | | ||||
189 | include(FindPackageHandleStandardArgs) | ||||
190 | find_package_handle_standard_args(GIO | ||||
191 | REQUIRED_VARS | ||||
192 | GIO_LIBRARY | ||||
193 | GIO_INCLUDE_DIRS | ||||
194 | ${GIO_DEPS_FOUND_VARS} | ||||
195 | VERSION_VAR | ||||
196 | GIO_VERSION) | ||||
197 | | ||||
198 | unset(GIO_DEPS_FOUND_VARS) |