diff --git a/CMakeLists.txt b/CMakeLists.txt index 22e48a94b98fc2196871fd6bdf510f4c4216084d..267dab4330ef89ab138e2dfab49f474b42de9412 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # Pre-requisites about cmake itself -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 3.10) if(COMMAND cmake_policy) cmake_policy(SET CMP0005 NEW) @@ -10,13 +10,12 @@ SET(CMAKE_MACOSX_RPATH true) # The project name PROJECT(vision) -set(PLUGIN_NAME wolf${PROJECT_NAME}) +set(PLUGIN_NAME "wolf${PROJECT_NAME}") MESSAGE("Starting ${PROJECT_NAME} CMakeLists ...") -SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) -SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib) -SET(CMAKE_INSTALL_PREFIX /usr/local) +set(INCLUDE_INSTALL_DIR include/iri-algorithms/wolf) +set(LIB_INSTALL_DIR lib/) IF (NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE "DEBUG") @@ -81,8 +80,7 @@ option(_WOLF_TRACE "Enable wolf tracing macro" ON) # ============ DEPENDENCIES ================== FIND_PACKAGE(wolfcore REQUIRED) -FIND_PACKAGE(vision_utils REQUIRED) -SET(PRINT_INFO_VU false) +# SET(PRINT_INFO_VU false) FIND_PACKAGE(OpenCV REQUIRED) # ============ config.h ================== @@ -107,9 +105,6 @@ message("CONFIG DIRECTORY ${PROJECT_BINARY_DIR}") include_directories("${PROJECT_BINARY_DIR}/conf") # ============ INCLUDES ================== -INCLUDE_DIRECTORIES(${wolfcore_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${vision_utils_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(BEFORE "include") # ============ HEADERS ============ @@ -197,9 +192,9 @@ endif() #Link the created libraries #===============EXAMPLE========================= -TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${wolfcore_LIBRARIES}) -TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${OpenCV_LIBS}) -TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${vision_utils_LIBRARY}) +TARGET_LINK_LIBRARIES(${PLUGIN_NAME} wolfcore) +TARGET_LINK_LIBRARIES(${PLUGIN_NAME} OpenCV) +# TARGET_LINK_LIBRARIES(${PLUGIN_NAME} ${vision_utils_LIBRARY}) #Build demos #===============EXAMPLE========================= @@ -222,30 +217,48 @@ INSTALL(TARGETS ${PLUGIN_NAME} EXPORT ${PLUGIN_NAME}Targets LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) +#Â Configure the package installation +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}Config.cmake + INSTALL_DESTINATION ${LIB_INSTALL_DIR}/${PLUGIN_NAME}/cmake + PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR +) + +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_NAME}Config.cmake + DESTINATION + ${LIB_INSTALL_DIR}/${PLUGIN_NAME}/cmake +) + +# Specifies include directories to use when compiling the plugin target +# This way, include_directories does not need to be called in plugins depending on this one +target_include_directories(${PLUGIN_NAME} INTERFACE + $<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}> +) + + install(EXPORT ${PLUGIN_NAME}Targets DESTINATION lib/cmake/${PLUGIN_NAME}) #install headers INSTALL(FILES ${HDRS_CAPTURE} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/capture) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/capture) INSTALL(FILES ${HDRS_FACTOR} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/factor) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/factor) INSTALL(FILES ${HDRS_FEATURE} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/feature) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/feature) INSTALL(FILES ${HDRS_LANDMARK} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/landmark) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/landmark) INSTALL(FILES ${HDRS_MATH} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/math) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/math) INSTALL(FILES ${HDRS_PROCESSOR} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/processor) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/processor) INSTALL(FILES ${HDRS_SENSOR} - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/sensor) + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/sensor) -FILE(WRITE ${PROJECT_NAME}.found "") -INSTALL(FILES ${PROJECT_NAME}.found - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}) INSTALL(FILES "${WOLF_CONFIG_DIR}/config.h" - DESTINATION include/iri-algorithms/wolf/plugin_${PROJECT_NAME}/${PROJECT_NAME}/internal) - -INSTALL(FILES "${CMAKE_SOURCE_DIR}/cmake_modules/${PLUGIN_NAME}Config.cmake" DESTINATION "lib/cmake/${PLUGIN_NAME}") + DESTINATION ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME}/internal) INSTALL(DIRECTORY ${SPDLOG_INCLUDE_DIRS} DESTINATION "include/iri-algorithms/") diff --git a/cmake_modules/wolfvisionConfig.cmake b/cmake_modules/wolfvisionConfig.cmake deleted file mode 100644 index 935cc70e6cefd9e85a691e79b90843dfc3b6827f..0000000000000000000000000000000000000000 --- a/cmake_modules/wolfvisionConfig.cmake +++ /dev/null @@ -1,94 +0,0 @@ -#edit the following line to add the librarie's header files -FIND_PATH( - wolfvision_INCLUDE_DIRS - NAMES vision.found - PATHS /usr/local/include/iri-algorithms/wolf/plugin_vision) -IF(wolfvision_INCLUDE_DIRS) - MESSAGE("Found vision include dirs: ${wolfvision_INCLUDE_DIRS}") -ELSE(wolfvision_INCLUDE_DIRS) - MESSAGE("Couldn't find vision include dirs") -ENDIF(wolfvision_INCLUDE_DIRS) - -FIND_LIBRARY( - wolfvision_LIBRARIES - NAMES libwolfvision.so libwolfvision.dylib - PATHS /usr/local/lib) -IF(wolfvision_LIBRARIES) - MESSAGE("Found vision lib: ${wolfvision_LIBRARIES}") -ELSE(wolfvision_LIBRARIES) - MESSAGE("Couldn't find wolf vision lib") -ENDIF(wolfvision_LIBRARIES) - -IF (wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES) - SET(wolfvision_FOUND TRUE) - ELSE(wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES) - set(wolfvision_FOUND FALSE) -ENDIF (wolfvision_INCLUDE_DIRS AND wolfvision_LIBRARIES) - -IF (wolfvision_FOUND) - IF (NOT wolfvision_FIND_QUIETLY) - MESSAGE(STATUS "Found vision: ${wolfvision_LIBRARIES}") - ENDIF (NOT wolfvision_FIND_QUIETLY) -ELSE (wolfvision_FOUND) - IF (wolfvision_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find wolf vision") - ENDIF (wolfvision_FIND_REQUIRED) -ENDIF (wolfvision_FOUND) - - -macro(wolf_report_not_found REASON_MSG) - set(wolfvision_FOUND FALSE) - unset(wolfvision_INCLUDE_DIRS) - unset(wolfvision_LIBRARIES) - - # Reset the CMake module path to its state when this script was called. - set(CMAKE_MODULE_PATH ${CALLERS_CMAKE_MODULE_PATH}) - - # Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by - # FindPackage() use the camelcase library name, not uppercase. - if (wolfvision_FIND_QUIETLY) - message(STATUS "Failed to find wolfvision- " ${REASON_MSG} ${ARGN}) - elseif (wolfvision_FIND_REQUIRED) - message(FATAL_ERROR "Failed to find wolfvision - " ${REASON_MSG} ${ARGN}) - else() - # Neither QUIETLY nor REQUIRED, use SEND_ERROR which emits an error - # that prevents generation, but continues configuration. - message(SEND_ERROR "Failed to find wolfvision - " ${REASON_MSG} ${ARGN}) - endif () - return() -endmacro(wolf_report_not_found) - -if(NOT wolfvision_FOUND) - wolf_report_not_found("Something went wrong while setting up wolf vision.") -endif(NOT wolfvision_FOUND) -# Set the include directories for wolf (itself). -set(wolfvision_FOUND TRUE) - -# Now we gather all the required dependencies for Wolf Laser - -FIND_PACKAGE(vision_utils REQUIRED) -list(APPEND wolfvision_INCLUDE_DIRS ${vision_utils_INCLUDE_DIR}) -list(APPEND wolfvision_LIBRARIES ${vision_utils_LIBRARY}) - -FIND_PACKAGE(OpenCV REQUIRED) -list(APPEND wolfvision_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS}) -list(APPEND wolfvision_LIBRARIES ${OpenCV_LIBS}) - -#Making sure wolf is looked for -if(NOT wolf_FOUND) - FIND_PACKAGE(wolfcore REQUIRED) - - #We reverse in order to insert at the start - list(REVERSE wolfvision_INCLUDE_DIRS) - list(APPEND wolfvision_INCLUDE_DIRS ${wolfcore_INCLUDE_DIRS}) - list(REVERSE wolfvision_INCLUDE_DIRS) - - list(REVERSE wolfvision_LIBRARIES) - list(APPEND wolfvision_LIBRARIES ${wolfcore_LIBRARIES}) - list(REVERSE wolfvision_LIBRARIES) -endif() - -# provide both INCLUDE_DIR and INCLUDE_DIRS -SET(wolfvision_INCLUDE_DIR ${wolfvision_INCLUDE_DIRS}) -# provide both LIBRARY and LIBRARIES -SET(wolfvision_LIBRARY ${wolfvision_LIBRARIES}) \ No newline at end of file diff --git a/cmake_modules/wolfvisionConfig.cmake.in b/cmake_modules/wolfvisionConfig.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..6f428e250f0cea0882d26154d63faaa8150e099c --- /dev/null +++ b/cmake_modules/wolfvisionConfig.cmake.in @@ -0,0 +1,17 @@ +set(@PLUGIN_NAME@_VERSION 0.0.1) + + +@PACKAGE_INIT@ + +set_and_check(@PLUGIN_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") +set(@PLUGIN_NAME@_INCLUDE_DIRS @PLUGIN_NAME@_INCLUDE_DIR) +set_and_check(@PLUGIN_NAME@_LIB_INSTALL_DIR "@PACKAGE_LIB_INSTALL_DIR@") +set(@PLUGIN_NAME@_LIB_INSTALL_DIRS @PLUGIN_NAME@_LIB_INSTALL_DIR) + +# forwards the correct parameters given to FIND_DEPENDENCIES +include(CMakeFindDependencyMacro) +FIND_DEPENDENCY(OpenCV REQUIRED) + +include("${CMAKE_CURRENT_LIST_DIR}/@PLUGIN_NAME@Targets.cmake") + +check_required_components(@PLUGIN_NAME@) \ No newline at end of file