aboutsummaryrefslogtreecommitdiff
path: root/find-modules
diff options
context:
space:
mode:
authorMartin Gräßlin <mgraesslin@kde.org>2014-02-24 14:47:41 +0100
committerMartin Gräßlin <mgraesslin@kde.org>2014-02-25 14:43:35 +0100
commit6277f5d8acbca3704d3e9ebbdee908537cd7b6eb (patch)
tree6773e16190883b46e13fd22a4f1f384531b99d75 /find-modules
parenta2ada35b5c768e8efe9b51a41f84ec6e18ea805c (diff)
downloadextra-cmake-modules-6277f5d8acbca3704d3e9ebbdee908537cd7b6eb.tar.gz
extra-cmake-modules-6277f5d8acbca3704d3e9ebbdee908537cd7b6eb.tar.bz2
Add a FindWayland module
Inspired by the FindXCB module it's using components to simplify finding just the parts which are really required. REVIEW: 116018
Diffstat (limited to 'find-modules')
-rw-r--r--find-modules/FindWayland.cmake193
1 files changed, 193 insertions, 0 deletions
diff --git a/find-modules/FindWayland.cmake b/find-modules/FindWayland.cmake
new file mode 100644
index 00000000..21014fc4
--- /dev/null
+++ b/find-modules/FindWayland.cmake
@@ -0,0 +1,193 @@
+# Try to find Wayland on a Unix system
+#
+# This will define:
+#
+# Wayland_FOUND - True if Wayland is available
+# Wayland_LIBRARIES - Link these to use Wayland
+# Wayland_INCLUDE_DIRS - Include directory for Wayland
+# Wayland_DEFINITIONS - Compiler flags for using Wayland
+# Wayland_VERSION_STRING - Found Wayland version
+#
+# In addition the following more fine grained variables will be defined:
+#
+# Wayland_Client_FOUND Wayland_Client_INCLUDE_DIR Wayland_Client_LIBRARY Wayland_Client_VERSION_STRING
+# Wayland_Server_FOUND Wayland_Server_INCLUDE_DIR Wayland_Server_LIBRARY Wayland_Server_VERSION_STRING
+# Wayland_Cursor_FOUND Wayland_Cursor_INCLUDE_DIR Wayland_Cursor_LIBRARY Wayland_Cursor_VERSION_STRING
+# Wayland_Egl_FOUND Wayland_Egl_INCLUDE_DIR Wayland_Egl_LIBRARY Wayland_Egl_VERSION_STRING
+#
+# Additionally, the following imported targets will be defined:
+#
+# Wayland::Client
+# Wayland::Server
+# Wayland::Cursor
+# Wayland::Egl
+#
+# Copyright (c) 2014 Martin Gräßlin <mgraesslin@kde.org>
+#
+# Redistribution and use is allowed according to the terms of the BSD license.
+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+
+if(CMAKE_VERSION VERSION_LESS 2.8.12)
+ message(FATAL_ERROR "CMake 2.8.12 is required by FindWayland.cmake")
+endif()
+if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.12)
+ message(AUTHOR_WARNING "Your project should require at least CMake 2.8.12 to use FindWayland.cmake")
+endif()
+
+set(knownComponents Client
+ Server
+ Cursor
+ Egl
+ )
+
+unset(unknownComponents)
+
+set(pkgConfigModules)
+
+if (Wayland_FIND_COMPONENTS)
+ set(comps ${Wayland_FIND_COMPONENTS})
+else()
+ set(comps ${knownComponents})
+endif()
+
+# iterate through the list of requested components, and check that we know them all.
+# If not, fail.
+foreach(comp ${comps})
+ list(FIND knownComponents ${comp} index )
+ if("${index}" STREQUAL "-1")
+ list(APPEND unknownComponents "${comp}")
+ else()
+ if("${comp}" STREQUAL "Client")
+ list(APPEND pkgConfigModules "wayland-client")
+ elseif("${comp}" STREQUAL "Server")
+ list(APPEND pkgConfigModules "wayland-server")
+ elseif("${comp}" STREQUAL "Cursor")
+ list(APPEND pkgConfigModules "wayland-cursor")
+ elseif("${comp}" STREQUAL "Egl")
+ list(APPEND pkgConfigModules "wayland-egl")
+ endif()
+ endif()
+endforeach()
+
+
+if(DEFINED unknownComponents)
+ set(msgType STATUS)
+ if(Wayland_FIND_REQUIRED)
+ set(msgType FATAL_ERROR)
+ endif()
+ if(NOT Wayland_FIND_QUIETLY)
+ message(${msgType} "Wayland: requested unknown components ${unknownComponents}")
+ endif()
+ return()
+endif()
+
+macro(_wayland_handle_component _comp)
+ set(_header )
+ set(_lib )
+ set(_pkgconfig_module_var)
+ if("${_comp}" STREQUAL "Client")
+ set(_header "wayland-client.h")
+ set(_lib "wayland-client")
+ set(_pkgconfig_module_var "wayland-client")
+ elseif("${_comp}" STREQUAL "Server")
+ set(_header "wayland-server.h")
+ set(_lib "wayland-server")
+ set(_pkgconfig_module_var "wayland-server")
+ elseif("${_comp}" STREQUAL "Cursor")
+ set(_header "wayland-cursor.h")
+ set(_lib "wayland-cursor")
+ set(_pkgconfig_module_var "wayland-cursor")
+ elseif("${_comp}" STREQUAL "Egl")
+ set(_header "wayland-egl.h")
+ set(_lib "wayland-egl")
+ set(_pkgconfig_module_var "wayland-egl")
+ endif()
+
+ find_path(Wayland_${_comp}_INCLUDE_DIR
+ NAMES ${_header}
+ HINTS ${PKG_Wayland_INCLUDE_DIRS}
+ )
+ find_library(Wayland_${_comp}_LIBRARY
+ NAMES ${_lib}
+ HINTS ${PKG_Wayland_LIBRARY_DIRS}
+ )
+
+ if(Wayland_${_comp}_INCLUDE_DIR AND Wayland_${_comp}_LIBRARY)
+ list(APPEND Wayland_INCLUDE_DIRS ${Wayland_${_comp}_INCLUDE_DIR})
+ list(APPEND Wayland_LIBRARIES ${Wayland_${_comp}_LIBRARY})
+ endif()
+
+ if(PKG_Wayland_VERSION AND NOT PKG_Wayland_${_pkgconfig_module_var}_VERSION)
+ # this is what gets set if we only search for one module
+ set(Wayland_${_comp}_VERSION_STRING "${PKG_Wayland_VERSION}")
+ else()
+ set(Wayland_${_comp}_VERSION_STRING "${PKG_Wayland_${_pkgconfig_module_var}_VERSION}")
+ endif()
+
+ if(NOT Wayland_VERSION_STRING)
+ set(Wayland_VERSION_STRING ${Wayland_${_comp}_VERSION_STRING})
+ endif()
+
+ find_package_handle_standard_args(Wayland_${_comp}
+ FOUND_VAR
+ Wayland_${_comp}_FOUND
+ REQUIRED_VARS
+ Wayland_${_comp}_LIBRARY
+ Wayland_${_comp}_INCLUDE_DIR
+ VERSION_VAR
+ Wayland_${_comp}_VERSION_STRING
+ )
+
+ mark_as_advanced(
+ Wayland_${_comp}_LIBRARY
+ Wayland_${_comp}_INCLUDE_DIR
+ )
+
+ if(Wayland_${_comp}_FOUND AND NOT TARGET Wayland::${_comp})
+ add_library(Wayland::${_comp} UNKNOWN IMPORTED)
+ set_target_properties(Wayland::${_comp} PROPERTIES
+ IMPORTED_LOCATION "${Wayland_${_comp}_LIBRARY}"
+ INTERFACE_COMPILE_OPTIONS "${Wayland_DEFINITIONS}"
+ INTERFACE_INCLUDE_DIRECTORIES "${Wayland_${_comp}_INCLUDE_DIR}"
+ )
+ endif()
+endmacro()
+
+if(NOT WIN32)
+ include(FindPackageHandleStandardArgs)
+ # Use pkg-config to get the directories and then use these values
+ # in the FIND_PATH() and FIND_LIBRARY() calls
+ find_package(PkgConfig)
+ pkg_check_modules(PKG_Wayland QUIET ${pkgConfigModules})
+
+ set(Wayland_DEFINITIONS ${PKG_Wayland_CFLAGS_OTHER})
+
+ foreach(comp ${comps})
+ _wayland_handle_component(${comp})
+ endforeach()
+
+ if(Wayland_INCLUDE_DIRS)
+ list(REMOVE_DUPLICATES Wayland_INCLUDE_DIRS)
+ endif()
+
+ find_package_handle_standard_args(Wayland
+ FOUND_VAR
+ Wayland_FOUND
+ REQUIRED_VARS
+ Wayland_LIBRARIES
+ Wayland_INCLUDE_DIRS
+ VERSION_VAR
+ Wayland_VERSION_STRING
+ HANDLE_COMPONENTS
+ )
+
+else()
+ message(STATUS "Wayland is not available on Windows.")
+ set(Wayland_FOUND FALSE)
+endif()
+
+include(FeatureSummary)
+set_package_properties(Wayland PROPERTIES
+ URL "http://wayland.freedesktop.org"
+ DESCRIPTION "C library implementation of the Wayland protocol: a protocol for a compositor to talk to its clients"
+)