Warning, /frameworks/extra-cmake-modules/find-modules/FindWayland.cmake is written in an unsupported language. File is not indexed.
0001 # SPDX-FileCopyrightText: 2014 Alex Merry <alex.merry@kde.org>
0002 # SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
0003 #
0004 # SPDX-License-Identifier: BSD-3-Clause
0005
0006 #[=======================================================================[.rst:
0007 FindWayland
0008 -----------
0009
0010 Try to find Wayland.
0011
0012 This is a component-based find module, which makes use of the COMPONENTS
0013 and OPTIONAL_COMPONENTS arguments to find_module. The following components
0014 are available::
0015
0016 Client Server Cursor Egl
0017
0018 If no components are specified, this module will act as though all components
0019 were passed to OPTIONAL_COMPONENTS.
0020
0021 This module will define the following variables, independently of the
0022 components searched for or found:
0023
0024 ``Wayland_FOUND``
0025 TRUE if (the requested version of) Wayland is available
0026 ``Wayland_VERSION``
0027 Found Wayland version
0028 ``Wayland_TARGETS``
0029 A list of all targets imported by this module (note that there may be more
0030 than the components that were requested)
0031 ``Wayland_LIBRARIES``
0032 This can be passed to target_link_libraries() instead of the imported
0033 targets
0034 ``Wayland_INCLUDE_DIRS``
0035 This should be passed to target_include_directories() if the targets are
0036 not used for linking
0037 ``Wayland_DEFINITIONS``
0038 This should be passed to target_compile_options() if the targets are not
0039 used for linking
0040 ``Wayland_DATADIR``
0041 The core wayland protocols data directory
0042 Since 5.73.0
0043
0044 For each searched-for components, ``Wayland_<component>_FOUND`` will be set to
0045 TRUE if the corresponding Wayland library was found, and FALSE otherwise. If
0046 ``Wayland_<component>_FOUND`` is TRUE, the imported target
0047 ``Wayland::<component>`` will be defined. This module will also attempt to
0048 determine ``Wayland_*_VERSION`` variables for each imported target, although
0049 ``Wayland_VERSION`` should normally be sufficient.
0050
0051 In general we recommend using the imported targets, as they are easier to use
0052 and provide more control. Bear in mind, however, that if any target is in the
0053 link interface of an exported library, it must be made available by the
0054 package config file.
0055
0056 Since pre-1.0.0.
0057 #]=======================================================================]
0058
0059 include(${CMAKE_CURRENT_LIST_DIR}/ECMFindModuleHelpersStub.cmake)
0060
0061 ecm_find_package_version_check(Wayland)
0062
0063 set(Wayland_known_components
0064 Client
0065 Server
0066 Cursor
0067 Egl
0068 )
0069 foreach(_comp ${Wayland_known_components})
0070 string(TOLOWER "${_comp}" _lc_comp)
0071 set(Wayland_${_comp}_component_deps)
0072 set(Wayland_${_comp}_pkg_config "wayland-${_lc_comp}")
0073 set(Wayland_${_comp}_lib "wayland-${_lc_comp}")
0074 set(Wayland_${_comp}_header "wayland-${_lc_comp}.h")
0075 endforeach()
0076 set(Wayland_Egl_component_deps Client)
0077
0078 ecm_find_package_parse_components(Wayland
0079 RESULT_VAR Wayland_components
0080 KNOWN_COMPONENTS ${Wayland_known_components}
0081 )
0082 ecm_find_package_handle_library_components(Wayland
0083 COMPONENTS ${Wayland_components}
0084 )
0085
0086 # If pkg-config didn't provide us with version information,
0087 # try to extract it from wayland-version.h
0088 # (Note that the version from wayland-egl.pc will probably be
0089 # the Mesa version, rather than the Wayland version, but that
0090 # version will be ignored as we always find wayland-client.pc
0091 # first).
0092 if(NOT Wayland_VERSION)
0093 find_file(Wayland_VERSION_HEADER
0094 NAMES wayland-version.h
0095 HINTS ${Wayland_INCLUDE_DIRS}
0096 )
0097 mark_as_advanced(Wayland_VERSION_HEADER)
0098 if(Wayland_VERSION_HEADER)
0099 file(READ ${Wayland_VERSION_HEADER} _wayland_version_header_contents)
0100 string(REGEX REPLACE
0101 "^.*[ \t]+WAYLAND_VERSION[ \t]+\"([0-9.]*)\".*$"
0102 "\\1"
0103 Wayland_VERSION
0104 "${_wayland_version_header_contents}"
0105 )
0106 unset(_wayland_version_header_contents)
0107 endif()
0108 endif()
0109
0110 find_package_handle_standard_args(Wayland
0111 FOUND_VAR
0112 Wayland_FOUND
0113 REQUIRED_VARS
0114 Wayland_LIBRARIES
0115 VERSION_VAR
0116 Wayland_VERSION
0117 HANDLE_COMPONENTS
0118 )
0119
0120 pkg_get_variable(Wayland_DATADIR wayland-scanner pkgdatadir)
0121 if (CMAKE_CROSSCOMPILING AND (NOT EXISTS "${Wayland_DATADIR}/wayland.xml"))
0122 # PKG_CONFIG_SYSROOT_DIR only applies to -I and -L flags, so pkg-config
0123 # does not prepend CMAKE_SYSROOT when cross-compiling unless you pass
0124 # --define-prefix explicitly. Therefore we have to manually do prepend
0125 # it here when cross-compiling.
0126 # See https://gitlab.kitware.com/cmake/cmake/-/issues/16647#note_844761
0127 set(Wayland_DATADIR ${CMAKE_SYSROOT}${Wayland_DATADIR})
0128 endif()
0129 if (NOT EXISTS "${Wayland_DATADIR}/wayland.xml")
0130 message(WARNING "Could not find wayland.xml in ${Wayland_DATADIR}")
0131 endif()
0132
0133 include(FeatureSummary)
0134 set_package_properties(Wayland PROPERTIES
0135 URL "https://wayland.freedesktop.org/"
0136 DESCRIPTION "C library implementation of the Wayland protocol: a protocol for a compositor to talk to its clients"
0137 )