blob: c6b0752705753ffbc87f232e1ea22b4c8c00cc3b (
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
|
include_guard()
find_program(G_IR_SCANNER_BIN
NAMES "g-ir-scanner"
REQUIRED
)
function(target_glib_generate_gir TARGET)
if(NOT BUILD_SHARED_LIBS)
message(STATUS "GlibIntrospection: skipping GIR generation for static library target '${TARGET}'")
return()
endif()
set(SINGLE_VALUE_ARGS
"NAMESPACE"
"OUTPUT"
"VERSION"
)
set(MULTI_VALUE_ARGS
"DEPENDENCIES"
"SOURCES"
)
cmake_parse_arguments(
PARSE_ARGV 1
""
"${OPTIONS}"
"${SINGLE_VALUE_ARGS}"
"${MULTI_VALUE_ARGS}"
)
if(NOT TARGET "${TARGET}")
message(FATAL_ERROR "GlibIntrospection: Target '${TARGET}' does not exist")
endif()
if(NOT _NAMESPACE)
set(_NAMESPACE "${PROJECT_NAME}")
message(WARNING "GlibIntrospection: defaulting to namespace ${_NAMESPACE}")
endif()
if(NOT _OUTPUT_DIR)
get_target_property(_OUTPUT_DIR "${TARGET}" BINARY_DIR)
endif()
if(NOT _VERSION)
set(_VERSION "${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}")
message(WARNING "GlibIntrospection: defaulting to version ${_VERSION}")
endif()
if(NOT _DEPENDENCIES)
message(FATAL_ERROR "GlibIntrospection: no dependencies specified")
endif()
if(NOT _SOURCES)
get_target_property(SOURCES "${TARGET}" SOURCES)
get_target_property(HEADERS "${TARGET}" HEADER_SET)
set(_SOURCES ${HEADERS} ${SOURCES})
endif()
get_target_property(TARGET_OUTPUT_NAME "${TARGET}" OUTPUT_NAME)
set(_OUTPUT_FILE "${_OUTPUT_DIR}/$<CONFIG>/${TARGET_OUTPUT_NAME}.gir")
add_custom_command(TARGET "${TARGET}"
POST_BUILD
BYPRODUCTS "${_OUTPUT_FILE}"
COMMENT "Generating GIR file for ${TARGET}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
COMMAND "${G_IR_SCANNER_BIN}"
ARGS
"--warn-all"
"--namespace=${_NAMESPACE}"
"--nsversion=${_VERSION}"
"--library=$<TARGET_FILE_BASE_NAME:${TARGET}>"
"--library-path=$<TARGET_FILE_DIR:${TARGET}>"
"$<LIST:TRANSFORM,$<TARGET_PROPERTY:${TARGET},INTERFACE_INCLUDE_DIRECTORIES>,PREPEND,-I>"
"$<LIST:TRANSFORM,$<LIST:TRANSFORM,${_DEPENDENCIES},TOLOWER>,PREPEND,--pkg=>"
"$<LIST:TRANSFORM,${_DEPENDENCIES},PREPEND,--include=>"
"--output=${_OUTPUT_FILE}"
${_SOURCES}
COMMAND_EXPAND_LISTS
)
endfunction()
|