diff --git a/CMakeLists.txt b/CMakeLists.txt index 02d03de..cb335d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,93 +1,93 @@ project( liboncilla C CXX ) cmake_minimum_required(VERSION 2.8 ) find_package(Boost) if("${CMAKE_CXX_COMPILER}" MATCHES ".*clang.*") if( "${Boost_VERSION}" VERSION_LESS "104801") message(FATAL_ERROR "There is some incompatibility with boost <= 1.48.0 (here ${Boost_MAJOR_VERSION}.${Boost_MINOR_VERSION}.${Boost_SUBMINOR_VERSION}) and C++11 features. Since your compiler (Clang) fully support C++11, you should use a more recent version of Boost to compile this library. C++11 is needed by NemoMath dependency.") endif( "${Boost_VERSION}" VERSION_LESS "104801") endif("${CMAKE_CXX_COMPILER}" MATCHES ".*clang.*") find_package(BiorobCMakeUtils 0.3.4 REQUIRED) include_all_biorob_cmake_utils() # --- user options --- option(BUILD_TESTS "Decide whether unit-tests are built" ON) option(BUILD_EXAMPLES "Decide whether the examples are built" ON) option(BUILD_DOCS "Decide whether the docygen documentation is built" OFF) -find_package(RCI REQUIRED) +find_package(RCI 0.4 REQUIRED) add_definitions(${RCI_DEFINITIONS}) find_package(PkgConfig REQUIRED) pkg_check_modules(BIOROB_CPP biorob-cpp-0.3>=0.3.0 REQUIRED) # --- global definitions --- make_std_versionning(MAJOR 0 MINOR 3 PATCH 0~rc10) # Includes include_directories(${PROJECT_BINARY_DIR}/src ${PROJECT_SOURCE_DIR}/src ${BIOROB_CPP_INCLUDE_DIRS} ${RCI_INCLUDE_DIRS}) # Link directories link_directories(${BIOROB_CPP_LIBRARY_DIRS}) set(INCLUDE_DIR include/liboncilla-${VERSION_API}) # --- cmake config file --- configure_file(liboncillaConfig.cmake.in LibOncillaConfig.cmake @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibOncillaConfig.cmake DESTINATION share/liboncilla) add_subdirectory(src) find_package(GMock) if(BUILD_TESTS AND GMOCK_FOUND) enable_testing() message(STATUS "Building tests - deactivate by adapting BUILD_TESTS") add_subdirectory(test) elseif(BUILD_TESTS AND NOT GMOCK_FOUND) message(WARNING "Could not build unit tests even though desired because Google Mock could not be installed.") endif(BUILD_TESTS AND GMOCK_FOUND) if(BUILD_EXAMPLES) add_subdirectory(examples) endif(BUILD_EXAMPLES) # --- pkgconfig file --- set(PKG_CONFIG_FILE liboncilla-${VERSION_MAJOR}.pc ) configure_file(liboncilla.pc.in ${PKG_CONFIG_FILE} @ONLY) install(FILES ${CMAKE_BINARY_DIR}/${PKG_CONFIG_FILE} DESTINATION lib/pkgconfig) # --- documentation generation --- if(BUILD_DOCS) add_subdirectory(doc) endif(BUILD_DOCS) # --- coverage --- #if(BUILD_TESTS) # enable_coverage_report(TARGETS liboncilla TESTS ${DTO_TEST_NAME} ${INTEGRATED_TEST_NAME} FILTER "*3rdparty*" "*test/*") #endif(BUILD_TESTS) # --- sloccount --- #enable_sloccount(FOLDERS src test examples) # --- cppcheck --- #generate_cppcheck(SOURCES src test examples # "${CMAKE_CURRENT_BINARY_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}/test" "${CMAKE_CURRENT_BINARY_DIR}/examples" # ENABLE_IDS style) diff --git a/liboncillaConfig.cmake.in b/liboncillaConfig.cmake.in index 28c7aea..bd41940 100644 --- a/liboncillaConfig.cmake.in +++ b/liboncillaConfig.cmake.in @@ -1,19 +1,34 @@ -GET_FILENAME_COMPONENT(CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +if(NOT LIBONCILLA_CONFIG_PROCESSED) + set(LIBONCILLA_CONFIG_PROCESSED TRUE) + + GET_FILENAME_COMPONENT(CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -SET(LIBONCILLA_FOUND TRUE) -SET(LIBONCILLA_LIBRARIES "${CONFIG_DIR}/../../lib/@CMAKE_SHARED_LIBRARY_PREFIX@@LIBONCILLA_NAME@@LIB_SUFFIX@") -SET(LIBONCILLA_INCLUDE_DIRS "${CONFIG_DIR}/../../include") -SET(LIBONCILLA_RUNTIME_LIBRARY_DIRS "${CONFIG_DIR}/../../bin") -SET(LIBONCILLA_VERSION "@LIBONCILLA_VERSION@") -SET(LIBONCILLA_DEFINITIONS "") + SET(LIBONCILLA_FOUND TRUE) + + # Expose oncilla library as an imported target (from the point of view + # of the downstream project) + include("${CONFIG_DIR}/LibOncillaDepends.cmake") + SET(LIBONCILLA_LIBRARIES "oncilla") + + SET(LIBONCILLA_INCLUDE_DIRS "${CONFIG_DIR}/../../@INCLUDE_DIR@") + SET(LIBONCILLA_LIBRARY_DIRS "") + SET(LIBONCILLA_RUNTIME_LIBRARY_DIRS "${CONFIG_DIR}/../../bin") + SET(LIBONCILLA_VERSION "@VERSION_API@") + SET(LIBONCILLA_DEFINITIONS "") + + ## Dependencies Handling + # RSC + FIND_PACKAGE(RSC 0.9 REQUIRED) + LIST(APPEND LIBONCILLA_INCLUDE_DIRS ${RSC_INCLUDE_DIRS}) + LIST(APPEND LIBONCILLA_LIBRARIES ${RSC_LIBRARIES}) + # RCI + FIND_PACKAGE(RCI 0.4 REQUIRED) + LIST(APPEND LIBONCILLA_INCLUDE_DIRS ${RCI_INCLUDE_DIRS}) + LIST(APPEND LIBONCILLA_LIBRARIES ${RCI_LIBRARIES}) + LIST(APPEND LIBONCILLA_DEFINITIONS ${RCI_DEFINITIONS}) + # Biorob Utils + LIST(APPEND LIBONCILLA_INCLUDE_DIRS @BIOROB_CPP_INCLUDE_DIRS@) + LIST(APPEND LIBONCILLA_LIBRARIES @BIOROB_CPP_LIBRARIES@) + LIST(APPEND LIBONCILLA_LIBRARY_DIRS @BIOROB_CPP_LIBRARY_DIRS@) -## Dependencies Handling -# RSC -FIND_PACKAGE(RSC REQUIRED) -LIST(APPEND LIBONCILLA_INCLUDE_DIRS ${RSC_INCLUDE_DIRS}) -LIST(APPEND LIBONCILLA_LIBRARIES ${RSC_LIBRARIES}) -# RCI -FIND_PACKAGE(RCI REQUIRED) -LIST(APPEND LIBONCILLA_INCLUDE_DIRS ${RCI_INCLUDE_DIRS}) -LIST(APPEND LIBONCILLA_LIBRARIES ${RCI_LIBRARIES}) -LIST(APPEND LIBONCILLA_DEFINITIONS ${RCI_DEFINITIONS}) +endif() \ No newline at end of file diff --git a/liboncillaConfigVersion.cmake.in b/liboncillaConfigVersion.cmake.in new file mode 100644 index 0000000..9d94256 --- /dev/null +++ b/liboncillaConfigVersion.cmake.in @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION "@VERSION_API@") + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/src/liboncilla/CMakeLists.txt b/src/liboncilla/CMakeLists.txt index b68c696..9253c3e 100644 --- a/src/liboncilla/CMakeLists.txt +++ b/src/liboncilla/CMakeLists.txt @@ -1,57 +1,58 @@ set(ONCILLAHEADERS nodes/Trunk.h nodes/L0.h nodes/L1L2.h nodes/L3.h nodes/Nodes.h nodes/SupervisorL4.h nodes/SupervisorTrunk.h nodes/SupervisorNodes.h Oncilla.h Synchronizer.h Supervisor.h utils/BackendLoader.h utils/OncillaBackend.h common.h exceptions/LoadingError.h exceptions/NotImplementedError.h exceptions/UnavailableInterfaceError.h) set(ONCILLASOURCES nodes/Trunk.cpp nodes/L0.cpp nodes/L1L2.cpp nodes/L3.cpp nodes/SupervisorTrunk.cpp nodes/SupervisorL4.cpp Oncilla.cpp Synchronizer.cpp Supervisor.cpp utils/OncillaBackend.cpp exceptions/LoadingError.cpp exceptions/NotImplementedError.cpp exceptions/UnavailableInterfaceError.cpp utils/BackendLoader.cpp) add_library(oncilla SHARED ${ONCILLASOURCES} ${ONCILLAHEADERS}) target_link_libraries(oncilla ${RCI_LIBRARIES} ${BIOROB_CPP_LIBRARIES}) set_target_properties(oncilla PROPERTIES VERSION ${VERSION_STRING} SOVERSION ${VERSION_ABI}) install(TARGETS oncilla + EXPORT LibOncillaDepends DESTINATION lib) install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/liboncilla ${PROJECT_BINARY_DIR}/src/liboncilla DESTINATION ${INCLUDE_DIR} FILES_MATCHING PATTERN "*.h" PATTERN "CMakeFiles" EXCLUDE )