1 cmake_minimum_required(VERSION 2.8)
4 if (NOT CMAKE_BUILD_TYPE)
5 message(STATUS "No build type selected, default to Release")
6 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
9 if (NOT CMAKE_BUILD_TARGET)
10 message(STATUS "No target type selected, default to both shared and static library")
11 set(CMAKE_BUILD_TARGET "Both" CACHE STRING "" FORCE)
14 set(libuvc_VERSION_MAJOR 0)
15 set(libuvc_VERSION_MINOR 0)
16 set(libuvc_VERSION_PATCH 6)
17 set(libuvc_VERSION ${libuvc_VERSION_MAJOR}.${libuvc_VERSION_MINOR}.${libuvc_VERSION_PATCH})
19 set(libuvc_DESCRIPTION "A cross-platform library for USB video devices")
20 set(libuvc_URL "https://github.com/ktossell/libuvc")
22 find_package(PkgConfig)
23 pkg_check_modules(LIBUSB libusb-1.0)
25 # Try to find JPEG using a module or pkg-config. If that doesn't work, search for the header.
26 find_package(jpeg QUIET)
28 set(JPEG_LINK_FLAGS ${JPEG_LIBRARIES})
30 pkg_check_modules(JPEG QUIET libjpeg)
32 set(JPEG_INCLUDE_DIR ${JPEG_INCLUDE_DIRS})
33 set(JPEG_LINK_FLAGS ${JPEG_LDFLAGS})
35 find_path(JPEG_INCLUDE_DIR jpeglib.h)
38 set(JPEG_LINK_FLAGS -ljpeg)
43 include(GNUInstallDirs)
45 SET(CMAKE_C_FLAGS_DEBUG "-g -DUVC_DEBUGGING")
47 SET(INSTALL_CMAKE_DIR "${CMAKE_INSTALL_PREFIX}/lib/cmake/libuvc" CACHE PATH
48 "Installation directory for CMake files")
50 SET(SOURCES src/ctrl.c src/ctrl-gen.c src/device.c src/diag.c
51 src/frame.c src/init.c src/stream.c
55 ${libuvc_SOURCE_DIR}/include
56 ${libuvc_BINARY_DIR}/include
57 ${LIBUSB_INCLUDE_DIRS}
61 message(STATUS "Building libuvc with JPEG support.")
62 include_directories(${JPEG_INCLUDE_DIR})
63 SET(LIBUVC_HAS_JPEG TRUE)
64 SET(SOURCES ${SOURCES} src/frame-mjpeg.c)
66 message(WARNING "JPEG not found. libuvc will not support JPEG decoding.")
69 if(${CMAKE_BUILD_TARGET} MATCHES "Shared")
70 set(BUILD_UVC_SHARED TRUE)
71 elseif(${CMAKE_BUILD_TARGET} MATCHES "Static")
72 set(BUILD_UVC_STATIC TRUE)
73 elseif(${CMAKE_BUILD_TARGET} MATCHES "Both")
74 set(BUILD_UVC_SHARED TRUE)
75 set(BUILD_UVC_STATIC TRUE)
77 message( FATAL_ERROR "Invalid build type ${CMAKE_BUILD_TARGET}" )
81 add_library(uvc SHARED ${SOURCES})
82 list(APPEND UVC_TARGETS uvc)
86 add_library(uvc_static STATIC ${SOURCES})
87 set_target_properties(uvc_static PROPERTIES OUTPUT_NAME uvc)
88 list(APPEND UVC_TARGETS uvc_static)
91 configure_file(include/libuvc/libuvc_config.h.in
92 ${PROJECT_BINARY_DIR}/include/libuvc/libuvc_config.h @ONLY)
94 foreach(target_name ${UVC_TARGETS})
95 set_target_properties(${target_name} PROPERTIES
96 PUBLIC_HEADER "include/libuvc/libuvc.h;${libuvc_BINARY_DIR}/include/libuvc/libuvc_config.h" )
101 target_link_libraries (uvc ${JPEG_LINK_FLAGS})
104 target_link_libraries(uvc ${LIBUSB_LIBRARIES})
106 #add_executable(test src/test.c)
107 #target_link_libraries(test uvc ${LIBUSB_LIBRARIES} opencv_highgui
111 install(TARGETS ${UVC_TARGETS}
113 LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}"
114 ARCHIVE DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}"
115 PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/include/libuvc"
118 export(TARGETS ${UVC_TARGETS}
119 FILE "${PROJECT_BINARY_DIR}/libuvcTargets.cmake")
120 export(PACKAGE libuvc)
122 set(CONF_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
123 set(CONF_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}")
124 set(CONF_LIBRARY "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_LIBRARY_ARCHITECTURE}/${CMAKE_SHARED_LIBRARY_PREFIX}uvc${CMAKE_SHARED_LIBRARY_SUFFIX}")
126 configure_file(libuvcConfig.cmake.in ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libuvcConfig.cmake)
128 configure_file(libuvcConfigVersion.cmake.in ${PROJECT_BINARY_DIR}/libuvcConfigVersion.cmake @ONLY)
130 configure_file(libuvc.pc.in ${PROJECT_BINARY_DIR}/libuvc.pc @ONLY)
133 "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/libuvcConfig.cmake"
134 "${PROJECT_BINARY_DIR}/libuvcConfigVersion.cmake"
135 DESTINATION "${INSTALL_CMAKE_DIR}")
137 install(EXPORT libuvcTargets
138 DESTINATION "${INSTALL_CMAKE_DIR}")
141 "${PROJECT_BINARY_DIR}/libuvc.pc"
142 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"