Skip to content
Browse files

Added FindXCB.cmake script

  • Loading branch information...
1 parent 59a68f0 commit 1e568d77d1ea827bd7f292ed271c1fa2e53cf4e8 @Lukas-W committed Nov 25, 2012
Showing with 97 additions and 0 deletions.
  1. +97 −0 cmake/Modules/FindXCB.cmake
View
97 cmake/Modules/FindXCB.cmake
@@ -0,0 +1,97 @@
+# Try to find libxcb
+#
+#
+# Once done this will define:
+# LIBXCB_FOUND - True if xcb was found
+# LIBXCB_INCLUDE_DIRS - Directories containing the headers
+# LIBXCB_LIBRARIES - List of libraries to link to
+#
+# Also for each requested component:
+# LIBXCB_${UPPER_COMPONENT_NAME}_FOUND
+# LIBXCB_${UPPER_COMPONENT_NAME}_INCLUDE_DIRS
+# LIBXCB_${UPPER_COMPONENT_NAME}_LIBRARIES
+
+include(FindPackageHandleStandardArgs)
+
+IF(NOT WIN32)
+ IF(LIBXCB_LIBRARIES AND LIBXCB_INCLUDE_DIR)
+ set(XCB_FIND_QUIETLY TRUE)
+ ENDIF()
+
+ # Find xcb
+ FIND_PATH(LIBXCB_INCLUDE_DIR xcb/xcb.h)
+ FIND_LIBRARY(LIBXCB_LIBRARY NAMES xcb libxcb)
+
+ # Add xcb info to LIBXCB_LIBRARIES and LIBXCB_INCLUDE_DIRS
+ SET(LIBXCB_LIBRARIES ${LIBXCB_LIBRARY})
+ SET(LIBXCB_INCLUDE_DIRS ${LIBXCB_INCLUDE_DIR})
+
+ find_package_handle_standard_args(LIBXCB DEFAULT_MSG
+ LIBXCB_LIBRARY LIBXCB_INCLUDE_DIR)
+
+ mark_as_advanced(LIBXCB_LIBRARY LIBXCB_INCLUDE_DIR)
+
+ # Check whether we should search for XLIB_XCB
+ set(FIND_XLIB_XCB FALSE)
+ FOREACH(XCB_COMPONENT ${XCB_FIND_COMPONENTS})
+ # Generate upper string of the component name
+ string(TOUPPER ${XCB_COMPONENT} XCB_COMPONENT_UPPER)
+
+ IF(${XCB_COMPONENT_UPPER} MATCHES "XLIB_XCB")
+ set(FIND_XLIB_XCB TRUE)
+ ELSE()
+ # XCB_COMPONENTS is generated to be a copy of XCB_FIND_COMPONENTS
+ # without XLIB_XCB (for later component search)
+ set(XCB_COMPONENTS ${XCB_COMPONENTS} ${XCB_COMPONENT})
+ ENDIF()
+ ENDFOREACH()
+
+ # Find XLIB_XCB if requested
+ IF(FIND_XLIB_XCB)
+ FIND_PATH(XLIB_XCB_INCLUDE_DIR X11/Xlib-xcb.h)
+ FIND_LIBRARY(XLIB_XCB_LIBRARY NAMES X11-xcb libX11-xcb)
+
+ SET(XLIB_XCB_LIBRARIES ${XLIB_XCB_LIBRARY})
+ SET(XLIB_XCB_INCLUDE_DIRS ${XLIB_XCB_INCLUDE_DIR})
+
+ find_package_handle_standard_args(XLIB_XCB DEFAULT_MSG
+ XLIB_XCB_LIBRARY LIBXCB_INCLUDE_DIR)
+
+ mark_as_advanced(XLIB_XCB_LIBRARY XLIB_XCB_INCLUDE_DIR)
+
+ # Add xlib_xcb info to LIBXCB_LIBRARIES and LIBXCB_INCLUDE_DIRS
+ set(LIBXCB_LIBRARIES ${LIBXCB_LIBRARIES} ${XLIB_XCB_LIBRARIES})
+ set(LIBXCB_INCLUDE_DIRS ${LIBXCB_INCLUDE_DIRS} ${XLIB_XCB_INCLUDE_DIR})
+
+ if(NOT XLIB_XCB_FOUND)
+ message(FATAL_ERROR "XlibXcb library not found")
+ endif()
+ ELSE()
+ # Add component name to the component list
+ set(${XCB_COMPONENTS} ${XCB_FIND_COMPONENTS})
+ ENDIF()
+
+ # Loop through requested xcb components (does not contain xlib_xcb)
+ FOREACH(XCB_COMPONENT ${XCB_COMPONENTS})
+ # Generate lower and upper string of the component name
+ string(TOLOWER ${XCB_COMPONENT} XCB_COMPONENT_LOWER)
+ string(TOUPPER ${XCB_COMPONENT} XCB_COMPONENT_UPPER)
+
+ # Find the specific component
+ FIND_LIBRARY(LIBXCB_${XCB_COMPONENT_UPPER}_LIBRARY
+ NAMES libxcb-${XCB_COMPONENT_LOWER} xcb-${XCB_COMPONENT_LOWER})
+
+ find_package_handle_standard_args(LIBXCB_${XCB_COMPONENT_UPPER} DEFAULT_MSG
+ LIBXCB_${XCB_COMPONENT_UPPER}_LIBRARY LIBXCB_INCLUDE_DIR)
+
+ mark_as_advanced(LIBXCB_${XCB_COMPONENT_UPPER}_LIBRARY)
+
+ # Append the component's library path to LIBXCB_LIBRARIES
+ set(LIBXCB_LIBRARIES ${LIBXCB_LIBRARIES} ${LIBXCB_${XCB_COMPONENT_UPPER}_LIBRARY})
+
+ if(NOT LIBXCB_${XCB_COMPONENT_UPPER}_FOUND)
+ message(FATAL_ERROR "xcb-${XCB_COMPONENT_LOWER} not found")
+ endif()
+ ENDFOREACH()
+
+endif()

0 comments on commit 1e568d7

Please sign in to comment.
Something went wrong with that request. Please try again.