blob: 3af08ee888ed63f845bc6d901d1177c07d36c013 (
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
# SPDX-FileCopyrightText: 2010, Pino Toscano, <pino at kde.org>
# SPDX-License-Identifier: BSD-3-Clause
# Generate list from another list, but with each item prepended with a prefix
macro(_gir_list_prefix _outvar _listvar _prefix)
set(${_outvar})
foreach(_item IN LISTS ${_listvar})
list(APPEND ${_outvar} ${_prefix}${_item})
endforeach()
endmacro(_gir_list_prefix)
# cmake-lint: disable=R0915
macro(gir_add_introspections introspections_girs)
set(_gir_girs)
set(_gir_typelibs)
foreach(gir IN LISTS ${introspections_girs})
set(_gir_name "${gir}")
## Transform the gir filename to something which can reference through a variable
## without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir
string(REPLACE "-" "_" _gir_name "${_gir_name}")
string(REPLACE "." "_" _gir_name "${_gir_name}")
# Namespace and Version is either fetched from the gir filename
# or the _NAMESPACE/_VERSION variable combo
set(_gir_namespace "")
if(DEFINED ${_gir_name}_NAMESPACE)
set(_gir_namespace "${${_gir_name}_NAMESPACE}")
endif()
if (_gir_namespace STREQUAL "")
string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}")
endif ()
set(_gir_version "")
if(DEFINED ${_gir_name}_VERSION)
set(_gir_version "${${_gir_name}_VERSION}")
endif()
if (_gir_version STREQUAL "")
string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}")
endif ()
# _PROGRAM is an optional variable which needs its own --program argument
set(_gir_program "")
if(DEFINED ${_gir_name}_PROGRAM)
set(_gir_program "${${_gir_name}_PROGRAM}")
endif()
if (NOT _gir_program STREQUAL "")
set(_gir_program "--program=${_gir_program}")
endif()
# _SCANNERFLAGS is optional
set(_gir_scannerflags "")
if(DEFINED ${_gir_name}_SCANNERFLAGS)
set(_gir_scannerflags "${${_gir_name}_SCANNERFLAGS}")
endif()
# _FILES
set(_gir_files "")
if(DEFINED ${_gir_name}_FILES)
set(_gir_files "${${_gir_name}_FILES}")
else()
message(ERROR "Unspecified or empty ${_gir_name}_FILES variable")
endif()
# Variables which provides a list of things
_gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=")
_gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=")
_gir_list_prefix(_gir_includes ${_gir_name}_INCLUDES "--include=")
# Reuse the LIBTOOL variable from by automake if it's set
set(_gir_libtool "--no-libtool")
add_custom_command(
OUTPUT ${gir}
COMMAND ${GObjectIntrospection_SCANNER}
${GObjectIntrospection_SCANNER_ARGS}
--namespace=${_gir_namespace}
--nsversion=${_gir_version}
${_gir_libtool}
${_gir_program}
${_gir_libraries}
${_gir_packages}
${_gir_includes}
${_gir_scannerflags}
${${_gir_name}_CFLAGS}
${_gir_files}
--output ${CMAKE_CURRENT_BINARY_DIR}/${gir}
--accept-unprefixed
DEPENDS ${_gir_files} ${${_gir_name}_LIBS}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
VERBATIM
COMMENT "Run the gobject introspection scanner"
)
list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION ${SHARE_INSTALL_DIR}/gir-1.0)
string(REPLACE ".gir" ".typelib" _typelib "${gir}")
add_custom_command(
OUTPUT ${_typelib}
COMMAND ${GObjectIntrospection_COMPILER}
--includedir=.
${CMAKE_CURRENT_BINARY_DIR}/${gir}
-o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Run the gobject introspection compiler"
)
list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION ${LIB_INSTALL_DIR}/girepository-1.0)
endforeach()
add_custom_target(gir-girs-${_gir_name}
ALL
DEPENDS ${_gir_girs}
COMMENT "Target for the gobject introspection compiler"
)
add_custom_target(gir-typelibs-${_gir_name}
ALL
DEPENDS ${_gir_typelibs}
COMMENT "Target for the gobject introspection typelibs"
)
endmacro(gir_add_introspections)
|