From b56567de8753e24f7f5e032f24f0ba390d567742 Mon Sep 17 00:00:00 2001 From: Michael Burri Date: Thu, 1 Sep 2016 17:53:56 +0200 Subject: [PATCH] modified cmake to find all libraries on os x --- CMakeLists.txt | 30 +++++++++++++++++++++++++++++- cmake/FindLibUVC.cmake | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 cmake/FindLibUVC.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2755ea4..f2638b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,31 @@ project(uvc_ros_driver) set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -Wno-format-security ${NEON_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEON_FLAGS}") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") + +find_package(LibUVC REQUIRED) +if (LibUVC_FOUND) + message("-- Found LibUVC library: ${LibUVC_LIBRARIES}") + message("-- Found LibUVC include dirs: ${LibUVC_INCLUDE_DIRS}") + #include_directories(${LibUVC_INCLUDE_DIRS}) +else (LibUVC_FOUND) + message("-- LibUVC not found, trying to hard link libuvc") + set(LibUVC_LIBRARIES /usr/local/lib/libuvc.so) +endif (LibUVC_FOUND) + + +find_package(PkgConfig) + +find_package(yaml_cpp_catkin QUIET) +if(${yaml_cpp_catkin_FOUND}) + message(STATUS "Found yaml_cpp_catkin, using instead of system library.") + set(YamlCpp_LIBRARIES ${yaml_cpp_catkin_LIBRARIES}) + set(YamlCpp_INCLUDE_DIRS ${yaml_cpp_catkin_INCLUDE_DIRS}) +else() + message(STATUS "No yaml_cpp_catkin, using yaml-cpp system library instead.") + pkg_check_modules(YamlCpp REQUIRED yaml-cpp>=0.5) +endif() + ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages @@ -130,6 +155,7 @@ catkin_package( include_directories( ${catkin_INCLUDE_DIRS} ${Eigen3_INCLUDE_DIRS} + ${YamlCpp_INCLUDE_DIRS} include /usr/include/libusb-1.0 src/nodes/c_library @@ -147,7 +173,8 @@ add_library(uvc_ros_driver SHARED target_link_libraries(uvc_ros_driver yaml-cpp ${catkin_LIBRARIES} - /usr/local/lib/libuvc.so #TODO link by usign find_package + ${LibUVC_LIBRARIES} + ${YamlCpp_LIBRARIES} ) ## Add cmake target dependencies of the library @@ -168,6 +195,7 @@ add_executable(uvc_ros_driver_node target_link_libraries(uvc_ros_driver_node uvc_ros_driver ${catkin_LIBRARIES} + ${YamlCpp_LIBRARIES} ) ############# diff --git a/cmake/FindLibUVC.cmake b/cmake/FindLibUVC.cmake new file mode 100644 index 0000000..fc9239b --- /dev/null +++ b/cmake/FindLibUVC.cmake @@ -0,0 +1,38 @@ + +# - Finds libUVC and all dependencies +# Once done this will define +# LibUVC_FOUND - System has libUVC +# LibUVC_INCLUDE_DIRS - The libUVC include directories +# LibUVC_LIBRARIES - The libraries needed to use libUVC + +find_library(LibUVC_LIBRARY + NAMES libuvc.so libuvc.lib libuvc.dylib + PATHS ${LibUVC_ROOT}/lib + /usr/local/lib +) + +if(NOT LibUVC_IGNORE_HEADERS) + find_path(LibUVC_INCLUDE_DIR + NAMES libuvc_config.h libuvc.h + PATHS ${LibUVC_ROOT}/include + /usr/include + /usr/local/include + /usr/local/Cellar +) +endif() + +# brew installed libuvc include dirs on os x are hard to find and depends on the installed version. +if(LibUVC_INCLUDE_DIR STREQUAL "LibUVC_INCLUDE_DIR-NOTFOUND") + file(GLOB LibUVC_INCLUDE_DIR /usr/local/Cellar/libuvc/*/include/libuvc/libuvc_config.h + /usr/local/Cellar/libuvc/*/include/libuvc/libuvc.h) +endif() + +if((LibUVC_LIBRARY STREQUAL "LibUVC_LIBRARY-NOTFOUND") OR (LibUVC_INCLUDE_DIR STREQUAL "LibUVC_INCLUDE_DIR-NOTFOUND")) + set(LibUVC_ROOT "" CACHE PATH "Path to the root of a libuvc installation") + set(LibUVC_FOUND 1) + message(WARNING "LibUVC not found. Please try specifying LibUVC_ROOT") +else() + set(LibUVC_FOUND 1) + set(LibUVC_INCLUDE_DIRS ${LibUVC_INCLUDE_DIR}) + set(LibUVC_LIBRARIES ${LibUVC_LIBRARY}) +endif()