Warning, /frameworks/extra-cmake-modules/find-modules/FindQtWaylandScanner.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2012-2014 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
0002 #
0003 # SPDX-License-Identifier: BSD-3-Clause
0004
0005 #[=======================================================================[.rst:
0006 FindQtWaylandScanner
0007 --------------------
0008
0009 Try to find qtwaylandscanner.
0010
0011 If the qtwaylandscanner executable is not in your PATH, you can provide
0012 an alternative name or full path location with the ``QtWaylandScanner_EXECUTABLE``
0013 variable.
0014
0015 This will define the following variables:
0016
0017 ``QtWaylandScanner_FOUND``
0018 True if qtwaylandscanner is available
0019
0020 ``QtWaylandScanner_EXECUTABLE``
0021 The qtwaylandscanner executable.
0022
0023 If ``QtWaylandScanner_FOUND`` is TRUE, it will also define the following imported
0024 target:
0025
0026 ``Wayland::QtScanner``
0027 The qtwaylandscanner executable.
0028
0029 This module provides the following functions to generate C++ protocol
0030 implementations:
0031
0032 - ``ecm_add_qtwayland_client_protocol``
0033 - ``ecm_add_qtwayland_server_protocol``
0034
0035 ::
0036
0037 ecm_add_qtwayland_client_protocol(<target>
0038 PROTOCOL <xmlfile>
0039 BASENAME <basename>
0040 [PREFIX <prefix>])
0041
0042 ecm_add_qtwayland_client_protocol(<source_files_var>
0043 PROTOCOL <xmlfile>
0044 BASENAME <basename>
0045 [PREFIX <prefix>])
0046
0047 Generate C++ wrapper to Wayland client protocol files from ``<xmlfile>``
0048 XML definition for the ``<basename>`` interface and append those files
0049 to ``<source_files_var>`` or ``<target>``. Pass the ``<prefix>`` argument if the interface
0050 names don't start with ``qt_`` or ``wl_``.
0051
0052 WaylandScanner is required and will be searched for.
0053
0054 ::
0055
0056 ecm_add_qtwayland_server_protocol(<target>
0057 PROTOCOL <xmlfile>
0058 BASENAME <basename>
0059 [PREFIX <prefix>])
0060
0061 ecm_add_qtwayland_server_protocol(<source_files_var>
0062 PROTOCOL <xmlfile>
0063 BASENAME <basename>
0064 [PREFIX <prefix>])
0065
0066 Generate C++ wrapper to Wayland server protocol files from ``<xmlfile>``
0067 XML definition for the ``<basename>`` interface and append those files
0068 to ``<source_files_var>`` or ``<target>``. Pass the ``<prefix>`` argument if the interface
0069 names don't start with ``qt_`` or ``wl_``.
0070
0071 WaylandScanner is required and will be searched for.
0072
0073 Since 1.4.0.
0074 #]=======================================================================]
0075
0076 include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
0077 include("${ECM_MODULE_DIR}/ECMQueryQt.cmake")
0078
0079 ecm_find_package_version_check(QtWaylandScanner)
0080
0081 if (QT_MAJOR_VERSION STREQUAL "5")
0082 ecm_query_qt(qtwaylandscanner_dir QT_HOST_BINS)
0083 else()
0084 ecm_query_qt(qtwaylandscanner_dir QT_HOST_LIBEXECS)
0085 endif()
0086
0087 # Find qtwaylandscanner
0088 find_program(QtWaylandScanner_EXECUTABLE NAMES qtwaylandscanner HINTS ${qtwaylandscanner_dir})
0089
0090 include(FindPackageHandleStandardArgs)
0091 find_package_handle_standard_args(QtWaylandScanner
0092 FOUND_VAR
0093 QtWaylandScanner_FOUND
0094 REQUIRED_VARS
0095 QtWaylandScanner_EXECUTABLE
0096 )
0097
0098 mark_as_advanced(QtWaylandScanner_EXECUTABLE)
0099
0100 if(NOT TARGET Wayland::QtScanner AND QtWaylandScanner_FOUND)
0101 add_executable(Wayland::QtScanner IMPORTED)
0102 set_target_properties(Wayland::QtScanner PROPERTIES
0103 IMPORTED_LOCATION "${QtWaylandScanner_EXECUTABLE}"
0104 )
0105 endif()
0106
0107 include(FeatureSummary)
0108 set_package_properties(QtWaylandScanner PROPERTIES
0109 URL "https://qt.io/"
0110 DESCRIPTION "Executable that converts XML protocol files to C++ code"
0111 )
0112
0113 function(ecm_add_qtwayland_client_protocol target_or_sources_var)
0114 # Parse arguments
0115 set(oneValueArgs PROTOCOL BASENAME PREFIX)
0116 cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN})
0117
0118 if(ARGS_UNPARSED_ARGUMENTS)
0119 message(FATAL_ERROR "Unknown keywords given to ecm_add_qtwayland_client_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"")
0120 endif()
0121
0122 set(_prefix "${ARGS_PREFIX}")
0123
0124 find_package(WaylandScanner REQUIRED QUIET)
0125 ecm_add_wayland_client_protocol(${target_or_sources_var}
0126 PROTOCOL ${ARGS_PROTOCOL}
0127 BASENAME ${ARGS_BASENAME})
0128
0129 get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE)
0130 set(_header "${CMAKE_CURRENT_BINARY_DIR}/qwayland-${ARGS_BASENAME}.h")
0131 set(_code "${CMAKE_CURRENT_BINARY_DIR}/qwayland-${ARGS_BASENAME}.cpp")
0132
0133 set_source_files_properties(${_header} ${_code} GENERATED)
0134
0135 add_custom_command(OUTPUT "${_header}"
0136 COMMAND ${QtWaylandScanner_EXECUTABLE} client-header ${_infile} "" ${_prefix} > ${_header}
0137 DEPENDS ${_infile} ${_cheader} VERBATIM)
0138
0139 add_custom_command(OUTPUT "${_code}"
0140 COMMAND ${QtWaylandScanner_EXECUTABLE} client-code ${_infile} "" ${_prefix} > ${_code}
0141 DEPENDS ${_infile} ${_header} VERBATIM)
0142
0143 set_property(SOURCE ${_header} ${_code} PROPERTY SKIP_AUTOMOC ON)
0144
0145 if (TARGET ${target_or_sources_var})
0146 target_sources(${target_or_sources_var} PRIVATE "${_code}")
0147 else()
0148 list(APPEND ${target_or_sources_var} "${_code}")
0149 set(${target_or_sources_var} ${${target_or_sources_var}} PARENT_SCOPE)
0150 endif()
0151 endfunction()
0152
0153
0154 function(ecm_add_qtwayland_server_protocol target_or_sources_var)
0155 # Parse arguments
0156 set(oneValueArgs PROTOCOL BASENAME PREFIX)
0157 cmake_parse_arguments(ARGS "" "${oneValueArgs}" "" ${ARGN})
0158
0159 if(ARGS_UNPARSED_ARGUMENTS)
0160 message(FATAL_ERROR "Unknown keywords given to ecm_add_qtwayland_server_protocol(): \"${ARGS_UNPARSED_ARGUMENTS}\"")
0161 endif()
0162
0163 set(_prefix "${ARGS_PREFIX}")
0164
0165 find_package(WaylandScanner REQUIRED QUIET)
0166 ecm_add_wayland_server_protocol(${target_or_sources_var}
0167 PROTOCOL ${ARGS_PROTOCOL}
0168 BASENAME ${ARGS_BASENAME})
0169
0170 get_filename_component(_infile ${ARGS_PROTOCOL} ABSOLUTE)
0171 set(_header "${CMAKE_CURRENT_BINARY_DIR}/qwayland-server-${ARGS_BASENAME}.h")
0172 set(_code "${CMAKE_CURRENT_BINARY_DIR}/qwayland-server-${ARGS_BASENAME}.cpp")
0173
0174 set_source_files_properties(${_header} ${_code} GENERATED)
0175
0176 add_custom_command(OUTPUT "${_header}"
0177 COMMAND ${QtWaylandScanner_EXECUTABLE} server-header ${_infile} "" ${_prefix} > ${_header}
0178 DEPENDS ${_infile} VERBATIM)
0179
0180 add_custom_command(OUTPUT "${_code}"
0181 COMMAND ${QtWaylandScanner_EXECUTABLE} server-code ${_infile} "" ${_prefix} > ${_code}
0182 DEPENDS ${_infile} ${_header} VERBATIM)
0183
0184 set_property(SOURCE ${_header} ${_code} PROPERTY SKIP_AUTOMOC ON)
0185
0186 if (TARGET ${target_or_sources_var})
0187 target_sources(${target_or_sources_var} PRIVATE "${_code}")
0188 else()
0189 list(APPEND ${target_or_sources_var} "${_code}")
0190 set(${target_or_sources_var} ${${target_or_sources_var}} PARENT_SCOPE)
0191 endif()
0192 endfunction()