FindXCB.cmake 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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_XINPUT_FOUND XCB_XINPUT_INCLUDE_DIR XCB_XINPUT_LIBRARY
  25. # XCB_SYNC_FOUND XCB_SYNC_INCLUDE_DIR XCB_SYNC_LIBRARY
  26. # XCB_XTEST_FOUND XCB_XTEST_INCLUDE_DIR XCB_XTEST_LIBRARY
  27. # XCB_ICCCM_FOUND XCB_ICCCM_INCLUDE_DIR XCB_ICCCM_LIBRARY
  28. # XCB_EWMH_FOUND XCB_EWMH_INCLUDE_DIR XCB_EWMH_LIBRARY
  29. # XCB_IMAGE_FOUND XCB_IMAGE_INCLUDE_DIR XCB_IMAGE_LIBRARY
  30. # XCB_RENDERUTIL_FOUND XCB_RENDERUTIL_INCLUDE_DIR XCB_RENDERUTIL_LIBRARY
  31. # XCB_KEYSYMS_FOUND XCB_KEYSYMS_INCLUDE_DIR XCB_KEYSYMS_LIBRARY
  32. #
  33. # Copyright (c) 2011 Fredrik Höglund <[email protected]>
  34. # Copyright (c) 2013 Martin Gräßlin <[email protected]>
  35. #
  36. # Redistribution and use is allowed according to the terms of the BSD license.
  37. # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
  38. set(knownComponents XCB
  39. COMPOSITE
  40. DAMAGE
  41. DRI2
  42. EWMH
  43. GLX
  44. ICCCM
  45. IMAGE
  46. KEYSYMS
  47. RANDR
  48. RENDER
  49. RENDERUTIL
  50. SHAPE
  51. SHM
  52. SYNC
  53. UTIL
  54. XFIXES
  55. XTEST
  56. XV
  57. XINPUT
  58. XINERAMA)
  59. unset(unknownComponents)
  60. set(pkgConfigModules)
  61. set(requiredComponents)
  62. if (XCB_FIND_COMPONENTS)
  63. set(comps ${XCB_FIND_COMPONENTS})
  64. else()
  65. set(comps ${knownComponents})
  66. endif()
  67. # iterate through the list of requested components, and check that we know them all.
  68. # If not, fail.
  69. foreach(comp ${comps})
  70. list(FIND knownComponents ${comp} index )
  71. if("${index}" STREQUAL "-1")
  72. list(APPEND unknownComponents "${comp}")
  73. else()
  74. if("${comp}" STREQUAL "XCB")
  75. list(APPEND pkgConfigModules "xcb")
  76. elseif("${comp}" STREQUAL "COMPOSITE")
  77. list(APPEND pkgConfigModules "xcb-composite")
  78. elseif("${comp}" STREQUAL "DAMAGE")
  79. list(APPEND pkgConfigModules "xcb-damage")
  80. elseif("${comp}" STREQUAL "DRI2")
  81. list(APPEND pkgConfigModules "xcb-dri2")
  82. elseif("${comp}" STREQUAL "EWMH")
  83. list(APPEND pkgConfigModules "xcb-ewmh")
  84. elseif("${comp}" STREQUAL "GLX")
  85. list(APPEND pkgConfigModules "xcb-glx")
  86. elseif("${comp}" STREQUAL "ICCCM")
  87. list(APPEND pkgConfigModules "xcb-icccm")
  88. elseif("${comp}" STREQUAL "IMAGE")
  89. list(APPEND pkgConfigModules "xcb-image")
  90. elseif("${comp}" STREQUAL "KEYSYMS")
  91. list(APPEND pkgConfigModules "xcb-keysyms")
  92. elseif("${comp}" STREQUAL "RANDR")
  93. list(APPEND pkgConfigModules "xcb-randr")
  94. elseif("${comp}" STREQUAL "RENDER")
  95. list(APPEND pkgConfigModules "xcb-render")
  96. elseif("${comp}" STREQUAL "RENDERUTIL")
  97. list(APPEND pkgConfigModules "xcb-renderutil")
  98. elseif("${comp}" STREQUAL "SHAPE")
  99. list(APPEND pkgConfigModules "xcb-shape")
  100. elseif("${comp}" STREQUAL "SHM")
  101. list(APPEND pkgConfigModules "xcb-shm")
  102. elseif("${comp}" STREQUAL "SYNC")
  103. list(APPEND pkgConfigModules "xcb-sync")
  104. elseif("${comp}" STREQUAL "UTIL")
  105. list(APPEND pkgConfigModules "xcb-util")
  106. elseif("${comp}" STREQUAL "XFIXES")
  107. list(APPEND pkgConfigModules "xcb-xfixes")
  108. elseif("${comp}" STREQUAL "XTEST")
  109. list(APPEND pkgConfigModules "xcb-xtest")
  110. elseif("${comp}" STREQUAL "XV")
  111. list(APPEND pkgConfigModules "xcb-xv")
  112. elseif("${comp}" STREQUAL "XINPUT")
  113. list(APPEND pkgConfigModules "xcb-xinput")
  114. elseif("${comp}" STREQUAL "XINERAMA")
  115. list(APPEND pkgConfigModules "xcb-xinerama")
  116. endif()
  117. endif()
  118. endforeach()
  119. if(DEFINED unknownComponents)
  120. set(msgType STATUS)
  121. if(XCB_FIND_REQUIRED)
  122. set(msgType FATAL_ERROR)
  123. endif()
  124. if(NOT XCB_FIND_QUIETLY)
  125. message(${msgType} "XCB: requested unknown components ${unknownComponents}")
  126. endif()
  127. return()
  128. endif()
  129. macro(_XCB_HANDLE_COMPONENT _comp)
  130. set(_header )
  131. set(_lib )
  132. if("${_comp}" STREQUAL "XCB")
  133. set(_header "xcb/xcb.h")
  134. set(_lib "xcb")
  135. elseif("${_comp}" STREQUAL "COMPOSITE")
  136. set(_header "xcb/composite.h")
  137. set(_lib "xcb-composite")
  138. elseif("${_comp}" STREQUAL "DAMAGE")
  139. set(_header "xcb/damage.h")
  140. set(_lib "xcb-damage")
  141. elseif("${_comp}" STREQUAL "DRI2")
  142. set(_header "xcb/dri2.h")
  143. set(_lib "xcb-dri2")
  144. elseif("${_comp}" STREQUAL "EWMH")
  145. set(_header "xcb/xcb_ewmh.h")
  146. set(_lib "xcb-ewmh")
  147. elseif("${_comp}" STREQUAL "GLX")
  148. set(_header "xcb/glx.h")
  149. set(_lib "xcb-glx")
  150. elseif("${_comp}" STREQUAL "ICCCM")
  151. set(_header "xcb/xcb_icccm.h")
  152. set(_lib "xcb-icccm")
  153. elseif("${_comp}" STREQUAL "IMAGE")
  154. set(_header "xcb/xcb_image.h")
  155. set(_lib "xcb-image")
  156. elseif("${_comp}" STREQUAL "KEYSYMS")
  157. set(_header "xcb/xcb_keysyms.h")
  158. set(_lib "xcb-keysyms")
  159. elseif("${_comp}" STREQUAL "RANDR")
  160. set(_header "xcb/randr.h")
  161. set(_lib "xcb-randr")
  162. elseif("${_comp}" STREQUAL "RENDER")
  163. set(_header "xcb/render.h")
  164. set(_lib "xcb-render")
  165. elseif("${_comp}" STREQUAL "RENDERUTIL")
  166. set(_header "xcb/xcb_renderutil.h")
  167. set(_lib "xcb-render-util")
  168. elseif("${_comp}" STREQUAL "SHAPE")
  169. set(_header "xcb/shape.h")
  170. set(_lib "xcb-shape")
  171. elseif("${_comp}" STREQUAL "SHM")
  172. set(_header "xcb/shm.h")
  173. set(_lib "xcb-shm")
  174. elseif("${_comp}" STREQUAL "SYNC")
  175. set(_header "xcb/sync.h")
  176. set(_lib "xcb-sync")
  177. elseif("${_comp}" STREQUAL "UTIL")
  178. set(_header "xcb/xcb_util.h")
  179. set(_lib "xcb-util")
  180. elseif("${_comp}" STREQUAL "XFIXES")
  181. set(_header "xcb/xfixes.h")
  182. set(_lib "xcb-xfixes")
  183. elseif("${_comp}" STREQUAL "XTEST")
  184. set(_header "xcb/xtest.h")
  185. set(_lib "xcb-xtest")
  186. elseif("${_comp}" STREQUAL "XV")
  187. set(_header "xcb/xv.h")
  188. set(_lib "xcb-xv")
  189. elseif("${_comp}" STREQUAL "XINPUT")
  190. set(_header "xcb/xinput.h")
  191. set(_lib "xcb-xinput")
  192. elseif("${_comp}" STREQUAL "XINERAMA")
  193. set(_header "xcb/xinerama.h")
  194. set(_lib "xcb-xinerama")
  195. endif()
  196. find_path(XCB_${_comp}_INCLUDE_DIR NAMES ${_header} HINTS ${PKG_XCB_INCLUDE_DIRS})
  197. find_library(XCB_${_comp}_LIBRARY NAMES ${_lib} HINTS ${PKG_XCB_LIBRARY_DIRS})
  198. mark_as_advanced(XCB_${_comp}_LIBRARY XCB_${_comp}_INCLUDE_DIR)
  199. if(XCB_${_comp}_INCLUDE_DIR AND XCB_${_comp}_LIBRARY)
  200. set(XCB_${_comp}_FOUND TRUE)
  201. list(APPEND XCB_INCLUDE_DIRS ${XCB_${_comp}_INCLUDE_DIR})
  202. list(APPEND XCB_LIBRARIES ${XCB_${_comp}_LIBRARY})
  203. if (NOT XCB_FIND_QUIETLY)
  204. message(STATUS "XCB[${_comp}]: Found component ${_comp}")
  205. endif()
  206. endif()
  207. endmacro()
  208. IF (NOT WIN32)
  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. include(FindPackageHandleStandardArgs)
  221. find_package_handle_standard_args(XCB
  222. REQUIRED_VARS XCB_LIBRARIES XCB_INCLUDE_DIRS
  223. HANDLE_COMPONENTS)
  224. # compatibility for old variable naming
  225. set(XCB_INCLUDE_DIR ${XCB_INCLUDE_DIRS})
  226. ENDIF (NOT WIN32)