blob: 4e25916d469b07580322fb407f72ad7f93384951 (
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
|
function(qt6_generate_wayland_protocol_server_sources target)
qt_parse_all_arguments(arg "qt6_generate_wayland_protocol_server_sources" "" "" "FILES" ${ARGN})
get_target_property(target_binary_dir ${target} BINARY_DIR)
if(NOT TARGET Wayland::Scanner)
message(FATAL_ERROR "Wayland::Scanner target not found. You might be missing the WaylandScanner CMake package.")
endif()
if(NOT TARGET Qt6::qtwaylandscanner)
message(FATAL_ERROR "qtwaylandscanner executable not found. Most likely there is an issue with your Qt installation.")
endif()
foreach(protocol_file IN LISTS arg_FILES)
get_filename_component(protocol_name "${protocol_file}" NAME_WLE)
set(waylandscanner_header_output "${target_binary_dir}/wayland-${protocol_name}-server-protocol.h")
set(waylandscanner_code_output "${target_binary_dir}/wayland-${protocol_name}-protocol.c")
set(qtwaylandscanner_header_output "${target_binary_dir}/qwayland-server-${protocol_name}.h")
set(qtwaylandscanner_code_output "${target_binary_dir}/qwayland-server-${protocol_name}.cpp")
add_custom_command(
OUTPUT "${waylandscanner_header_output}"
#TODO: Maybe put the files in ${CMAKE_CURRENT_BINARY_DIR/wayland_generated instead?
COMMAND Wayland::Scanner --strict --include-core-only server-header < "${protocol_file}" > "${waylandscanner_header_output}"
)
add_custom_command(
OUTPUT "${waylandscanner_code_output}"
COMMAND Wayland::Scanner --strict --include-core-only public-code < "${protocol_file}" > "${waylandscanner_code_output}"
)
# TODO: make this less hacky
set(wayland_include_dir "")
#get_target_property(qt_module "${target}" QT_MODULE)
get_target_property(is_for_module "${target}" INTERFACE_MODULE_HAS_HEADERS)
if (is_for_module)
set(wayland_include_dir "QtWaylandCompositor/private")
endif()
add_custom_command(
OUTPUT "${qtwaylandscanner_header_output}"
COMMAND Qt6::qtwaylandscanner server-header "${protocol_file}" "${wayland_include_dir}" > "${qtwaylandscanner_header_output}"
)
add_custom_command(
OUTPUT "${qtwaylandscanner_code_output}"
COMMAND Qt6::qtwaylandscanner server-code "${protocol_file}" "${wayland_include_dir}" > "${qtwaylandscanner_code_output}"
)
target_sources(${target} PRIVATE
"${waylandscanner_header_output}"
"${waylandscanner_code_output}"
"${qtwaylandscanner_header_output}"
"${qtwaylandscanner_code_output}"
)
endforeach()
target_include_directories(${target} PRIVATE ${target_binary_dir})
endfunction()
if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
function(qt_generate_wayland_protocol_server_sources)
qt6_generate_wayland_protocol_server_sources(${ARGV})
endfunction()
endif()
|