FindXCB.cmake 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. # Try to find XCB on a Unix system
  2. #
  3. # This will define:
  4. #
  5. # XCB_FOUND - True if xcb is available
  6. # XCB_LIBRARIES - Link these to use xcb
  7. # XCB_INCLUDE_DIRS - Include directory for xcb
  8. # XCB_DEFINITIONS - Compiler flags for using xcb
  9. #
  10. # In addition the following more fine grained variables will be defined:
  11. #
  12. # XCB_XCB_FOUND XCB_XCB_INCLUDE_DIR XCB_XCB_LIBRARY
  13. # XCB_UTIL_FOUND XCB_UTIL_INCLUDE_DIR XCB_UTIL_LIBRARY
  14. # XCB_COMPOSITE_FOUND XCB_COMPOSITE_INCLUDE_DIR XCB_COMPOSITE_LIBRARY
  15. # XCB_DAMAGE_FOUND XCB_DAMAGE_INCLUDE_DIR XCB_DAMAGE_LIBRARY
  16. # XCB_XFIXES_FOUND XCB_XFIXES_INCLUDE_DIR XCB_XFIXES_LIBRARY
  17. # XCB_RENDER_FOUND XCB_RENDER_INCLUDE_DIR XCB_RENDER_LIBRARY
  18. # XCB_RANDR_FOUND XCB_RANDR_INCLUDE_DIR XCB_RANDR_LIBRARY
  19. # XCB_SHAPE_FOUND XCB_SHAPE_INCLUDE_DIR XCB_SHAPE_LIBRARY
  20. # XCB_DRI2_FOUND XCB_DRI2_INCLUDE_DIR XCB_DRI2_LIBRARY
  21. # XCB_GLX_FOUND XCB_GLX_INCLUDE_DIR XCB_GLX_LIBRARY
  22. # XCB_SHM_FOUND XCB_SHM_INCLUDE_DIR XCB_SHM_LIBRARY
  23. # XCB_XV_FOUND XCB_XV_INCLUDE_DIR XCB_XV_LIBRARY
  24. # XCB_SYNC_FOUND XCB_SYNC_INCLUDE_DIR XCB_SYNC_LIBRARY
  25. # XCB_XTEST_FOUND XCB_XTEST_INCLUDE_DIR XCB_XTEST_LIBRARY
  26. # XCB_ICCCM_FOUND XCB_ICCCM_INCLUDE_DIR XCB_ICCCM_LIBRARY
  27. # XCB_EWMH_FOUND XCB_EWMH_INCLUDE_DIR XCB_EWMH_LIBRARY
  28. # XCB_IMAGE_FOUND XCB_IMAGE_INCLUDE_DIR XCB_IMAGE_LIBRARY
  29. # XCB_RENDERUTIL_FOUND XCB_RENDERUTIL_INCLUDE_DIR XCB_RENDERUTIL_LIBRARY
  30. # XCB_KEYSYMS_FOUND XCB_KEYSYMS_INCLUDE_DIR XCB_KEYSYMS_LIBRARY
  31. #
  32. # Copyright (c) 2011 Fredrik Höglund <[email protected]>
  33. # Copyright (c) 2013 Martin Gräßlin <[email protected]>
  34. #
  35. # Redistribution and use is allowed according to the terms of the BSD license.
  36. # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
  37. set(knownComponents XCB
  38. COMPOSITE
  39. DAMAGE
  40. DRI2
  41. EWMH
  42. GLX
  43. ICCCM
  44. IMAGE
  45. KEYSYMS
  46. RANDR
  47. RENDER
  48. RENDERUTIL
  49. SHAPE
  50. SHM
  51. SYNC
  52. UTIL
  53. XFIXES
  54. XTEST
  55. XV
  56. XINERAMA)
  57. unset(unknownComponents)
  58. set(pkgConfigModules)
  59. set(requiredComponents)
  60. if (XCB_FIND_COMPONENTS)
  61. set(comps ${XCB_FIND_COMPONENTS})
  62. else()
  63. set(comps ${knownComponents})
  64. endif()
  65. # iterate through the list of requested components, and check that we know them all.
  66. # If not, fail.
  67. foreach(comp ${comps})
  68. list(FIND knownComponents ${comp} index )
  69. if("${index}" STREQUAL "-1")
  70. list(APPEND unknownComponents "${comp}")
  71. else()
  72. if("${comp}" STREQUAL "XCB")
  73. list(APPEND pkgConfigModules "xcb")
  74. elseif("${comp}" STREQUAL "COMPOSITE")
  75. list(APPEND pkgConfigModules "xcb-composite")
  76. elseif("${comp}" STREQUAL "DAMAGE")
  77. list(APPEND pkgConfigModules "xcb-damage")
  78. elseif("${comp}" STREQUAL "DRI2")
  79. list(APPEND pkgConfigModules "xcb-dri2")
  80. elseif("${comp}" STREQUAL "EWMH")
  81. list(APPEND pkgConfigModules "xcb-ewmh")
  82. elseif("${comp}" STREQUAL "GLX")
  83. list(APPEND pkgConfigModules "xcb-glx")
  84. elseif("${comp}" STREQUAL "ICCCM")
  85. list(APPEND pkgConfigModules "xcb-icccm")
  86. elseif("${comp}" STREQUAL "IMAGE")
  87. list(APPEND pkgConfigModules "xcb-image")
  88. elseif("${comp}" STREQUAL "KEYSYMS")
  89. list(APPEND pkgConfigModules "xcb-keysyms")
  90. elseif("${comp}" STREQUAL "RANDR")
  91. list(APPEND pkgConfigModules "xcb-randr")
  92. elseif("${comp}" STREQUAL "RENDER")
  93. list(APPEND pkgConfigModules "xcb-render")
  94. elseif("${comp}" STREQUAL "RENDERUTIL")
  95. list(APPEND pkgConfigModules "xcb-renderutil")
  96. elseif("${comp}" STREQUAL "SHAPE")
  97. list(APPEND pkgConfigModules "xcb-shape")
  98. elseif("${comp}" STREQUAL "SHM")
  99. list(APPEND pkgConfigModules "xcb-shm")
  100. elseif("${comp}" STREQUAL "SYNC")
  101. list(APPEND pkgConfigModules "xcb-sync")
  102. elseif("${comp}" STREQUAL "UTIL")
  103. list(APPEND pkgConfigModules "xcb-util")
  104. elseif("${comp}" STREQUAL "XFIXES")
  105. list(APPEND pkgConfigModules "xcb-xfixes")
  106. elseif("${comp}" STREQUAL "XTEST")
  107. list(APPEND pkgConfigModules "xcb-xtest")
  108. elseif("${comp}" STREQUAL "XV")
  109. list(APPEND pkgConfigModules "xcb-xv")
  110. elseif("${comp}" STREQUAL "XINERAMA")
  111. list(APPEND pkgConfigModules "xcb-xinerama")
  112. endif()
  113. endif()
  114. endforeach()
  115. if(DEFINED unknownComponents)
  116. set(msgType STATUS)
  117. if(XCB_FIND_REQUIRED)
  118. set(msgType FATAL_ERROR)
  119. endif()
  120. if(NOT XCB_FIND_QUIETLY)
  121. message(${msgType} "XCB: requested unknown components ${unknownComponents}")
  122. endif()
  123. return()
  124. endif()
  125. macro(_XCB_HANDLE_COMPONENT _comp)
  126. set(_header )
  127. set(_lib )
  128. if("${_comp}" STREQUAL "XCB")
  129. set(_header "xcb/xcb.h")
  130. set(_lib "xcb")
  131. elseif("${_comp}" STREQUAL "COMPOSITE")
  132. set(_header "xcb/composite.h")
  133. set(_lib "xcb-composite")
  134. elseif("${_comp}" STREQUAL "DAMAGE")
  135. set(_header "xcb/damage.h")
  136. set(_lib "xcb-damage")
  137. elseif("${_comp}" STREQUAL "DRI2")
  138. set(_header "xcb/dri2.h")
  139. set(_lib "xcb-dri2")
  140. elseif("${_comp}" STREQUAL "EWMH")
  141. set(_header "xcb/xcb_ewmh.h")
  142. set(_lib "xcb-ewmh")
  143. elseif("${_comp}" STREQUAL "GLX")
  144. set(_header "xcb/glx.h")
  145. set(_lib "xcb-glx")
  146. elseif("${_comp}" STREQUAL "ICCCM")
  147. set(_header "xcb/xcb_icccm.h")
  148. set(_lib "xcb-icccm")
  149. elseif("${_comp}" STREQUAL "IMAGE")
  150. set(_header "xcb/xcb_image.h")
  151. set(_lib "xcb-image")
  152. elseif("${_comp}" STREQUAL "KEYSYMS")
  153. set(_header "xcb/xcb_keysyms.h")
  154. set(_lib "xcb-keysyms")
  155. elseif("${_comp}" STREQUAL "RANDR")
  156. set(_header "xcb/randr.h")
  157. set(_lib "xcb-randr")
  158. elseif("${_comp}" STREQUAL "RENDER")
  159. set(_header "xcb/render.h")
  160. set(_lib "xcb-render")
  161. elseif("${_comp}" STREQUAL "RENDERUTIL")
  162. set(_header "xcb/xcb_renderutil.h")
  163. set(_lib "xcb-render-util")
  164. elseif("${_comp}" STREQUAL "SHAPE")
  165. set(_header "xcb/shape.h")
  166. set(_lib "xcb-shape")
  167. elseif("${_comp}" STREQUAL "SHM")
  168. set(_header "xcb/shm.h")
  169. set(_lib "xcb-shm")
  170. elseif("${_comp}" STREQUAL "SYNC")
  171. set(_header "xcb/sync.h")
  172. set(_lib "xcb-sync")
  173. elseif("${_comp}" STREQUAL "UTIL")
  174. set(_header "xcb/xcb_util.h")
  175. set(_lib "xcb-util")
  176. elseif("${_comp}" STREQUAL "XFIXES")
  177. set(_header "xcb/xfixes.h")
  178. set(_lib "xcb-xfixes")
  179. elseif("${_comp}" STREQUAL "XTEST")
  180. set(_header "xcb/xtest.h")
  181. set(_lib "xcb-xtest")
  182. elseif("${_comp}" STREQUAL "XV")
  183. set(_header "xcb/xv.h")
  184. set(_lib "xcb-xv")
  185. elseif("${_comp}" STREQUAL "XINERAMA")
  186. set(_header "xcb/xinerama.h")
  187. set(_lib "xcb-xinerama")
  188. endif()
  189. find_path(XCB_${_comp}_INCLUDE_DIR NAMES ${_header} HINTS ${PKG_XCB_INCLUDE_DIRS})
  190. find_library(XCB_${_comp}_LIBRARY NAMES ${_lib} HINTS ${PKG_XCB_LIBRARY_DIRS})
  191. if(XCB_${_comp}_INCLUDE_DIR AND XCB_${_comp}_LIBRARY)
  192. list(APPEND XCB_INCLUDE_DIRS ${XCB_${_comp}_INCLUDE_DIR})
  193. list(APPEND XCB_LIBRARIES ${XCB_${_comp}_LIBRARY})
  194. if (NOT XCB_FIND_QUIETLY)
  195. message(STATUS "XCB[${_comp}]: Found component ${_comp}")
  196. endif()
  197. endif()
  198. if(XCB_FIND_REQUIRED_${_comp})
  199. list(APPEND requiredComponents XCB_${_comp}_FOUND)
  200. endif()
  201. find_package_handle_standard_args(XCB_${_comp} DEFAULT_MSG XCB_${_comp}_LIBRARY XCB_${_comp}_INCLUDE_DIR)
  202. mark_as_advanced(XCB_${_comp}_LIBRARY XCB_${_comp}_INCLUDE_DIR)
  203. # compatibility for old variable naming
  204. set(XCB_${_comp}_INCLUDE_DIRS ${XCB_${_comp}_INCLUDE_DIR})
  205. set(XCB_${_comp}_LIBRARIES ${XCB_${_comp}_LIBRARY})
  206. endmacro()
  207. IF (NOT WIN32)
  208. include(FindPackageHandleStandardArgs)
  209. # Use pkg-config to get the directories and then use these values
  210. # in the FIND_PATH() and FIND_LIBRARY() calls
  211. find_package(PkgConfig)
  212. pkg_check_modules(PKG_XCB QUIET ${pkgConfigModules})
  213. set(XCB_DEFINITIONS ${PKG_XCB_CFLAGS})
  214. foreach(comp ${comps})
  215. _xcb_handle_component(${comp})
  216. endforeach()
  217. if(XCB_INCLUDE_DIRS)
  218. list(REMOVE_DUPLICATES XCB_INCLUDE_DIRS)
  219. endif()
  220. find_package_handle_standard_args(XCB DEFAULT_MSG XCB_LIBRARIES XCB_INCLUDE_DIRS ${requiredComponents})
  221. # compatibility for old variable naming
  222. set(XCB_INCLUDE_DIR ${XCB_INCLUDE_DIRS})
  223. ENDIF (NOT WIN32)