diff --git a/CMakeLists.txt b/CMakeLists.txt index 4173bd2..a618f57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,143 +1,98 @@ -PROJECT( liboncilla C CXX ) +project( liboncilla C CXX ) -CMAKE_MINIMUM_REQUIRED( VERSION 2.6 ) -SET( LIBNAME "oncilla" ) +cmake_minimum_required(VERSION 2.8 ) -SET( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE ) -SET( LIBONCILLA_CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) +#set( LIBNAME "oncilla" ) -SET( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE ) +#SET( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE ) +#SET( LIBONCILLA_CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) + +#SET( CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE ) # CMake module path and modules -FIND_PACKAGE( RSC REQUIRED ) -SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${RSC_CMAKE_MODULE_PATH}" ) -MESSAGE( STATUS "RSC version: ${RSC_VERSION}" ) +find_package(RSC REQUIRED ) +find_package(BiorobCMakeUtils 0.3.4 REQUIRED) +include_all_biorob_cmake_utils() +set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${RSC_CMAKE_MODULE_PATH}" ) + +#MESSAGE( STATUS "RSC version: ${RSC_VERSION}" ) -INCLUDE( CheckIncludeFileCXX ) -INCLUDE( InstallFilesRecursive ) -INCLUDE( EnableCoverageReport ) -INCLUDE( EnableSlocCount ) -INCLUDE( GenerateDoxygen ) -INCLUDE( GenerateCppcheck ) -INCLUDE( PedanticCompilerWarnings ) -INCLUDE( SuperPedanticCompilerWarnings ) +include( CheckIncludeFileCXX ) +include( EnableCoverageReport ) +include( EnableSlocCount ) +include( GenerateDoxygen ) +include( GenerateCppcheck ) +include( PedanticCompilerWarnings ) +include( SuperPedanticCompilerWarnings ) -SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +#SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # --- 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) +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) -# Dependencies -FIND_PACKAGE(Threads REQUIRED) -MESSAGE(STATUS "Threading library: ${CMAKE_THREAD_LIBS_INIT}") -FIND_PACKAGE(RCI REQUIRED) -MESSAGE(STATUS "RCI version: ${RCI_VERSION}") -ADD_DEFINITIONS(${RCI_DEFINITIONS}) +add_definitions(${RCI_DEFINITIONS}) # --- global definitions --- -SET(LIBONCILLA_NAME "${LIBNAME}") -SET(DRIVER_TEST_NAME "OncillaTest") -SET(NODE_TEST_NAME "${DRIVER_TEST_NAME}Nodes") -SET(LIBONCILLA_VERSION_MAJOR 0) -SET(LIBONCILLA_VERSION_MINOR 3) -SET(LIBONCILLA_VERSION_PATCH 0dev) -SET(LIBONCILLA_VERSION_STRING "${LIBONCILLA_VERSION_MAJOR}.${LIBONCILLA_VERSION_MINOR}.${LIBONCILLA_VERSION_PATCH}") -SET(LIBONCILLA_VERSION_ABI "${LIBONCILLA_VERSION_MAJOR}.${LIBONCILLA_VERSION_MINOR}") -SET(LIBONCILLA_CMAKE_MODULE_PATH "share/cmake/Modules") - -SET(OUTPUT_PATH ${PROJECT_BINARY_DIR}/build) -SET(ARCHIVE_OUTPUT_PATH ${OUTPUT_PATH}) -SET(LIBRARY_OUTPUT_PATH ${OUTPUT_PATH}) -SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_PATH}) + +make_std_versionning(MAJOR 0 MINOR 3 PATCH 0~dev1) +set(LIBONCILLA_CMAKE_MODULE_PATH "share/cmake/Modules") + # Includes -INCLUDE_DIRECTORIES(BEFORE src - ${PROJECT_BINARY_DIR}/src) -INCLUDE_DIRECTORIES(SYSTEM - ${RCI_INCLUDE_DIRS} - ${RSC_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS}) - -ADD_SUBDIRECTORY(src) - -IF(BUILD_TESTS) - ENABLE_TESTING() - INCLUDE(ProvideGoogleMock) - MESSAGE(STATUS "Building tests - deactivate by adapting BUILD_TESTS") - IF(GMOCK_AVAILABLE) - ADD_SUBDIRECTORY(test) - ELSE() - MESSAGE(WARNING "Could not build unit tests even though desired because Google Mock could not be installed.") - ENDIF() -ENDIF() - -IF(BUILD_EXAMPLES) - ADD_SUBDIRECTORY(examples) -ENDIF() +include_directories(BEFORE src + ${PROJECT_BINARY_DIR}/src) +include_directories(SYSTEM + ${RCI_INCLUDE_DIRS} + ${RSC_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS}) + +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) -# --- cmake config file --- -SET(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) -IF(CMAKE_LINK_LIBRARY_SUFFIX) - SET(LIB_SUFFIX ${CMAKE_LINK_LIBRARY_SUFFIX}) -ENDIF() # --- pkgconfig file --- -SET(PKG_CONFIG_FILE lib${LIBONCILLA_NAME}-${LIBONCILLA_VERSION_MAJOR}.pc ) -CONFIGURE_FILE(lib${LIBONCILLA_NAME}.pc.in ${PKG_CONFIG_FILE} @ONLY) -INSTALL(FILES ${CMAKE_BINARY_DIR}/${PKG_CONFIG_FILE} DESTINATION lib/pkgconfig) +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) # --- cmake config file --- -SET(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) -IF(CMAKE_LINK_LIBRARY_SUFFIX) - SET(LIB_SUFFIX ${CMAKE_LINK_LIBRARY_SUFFIX}) -ENDIF() -CONFIGURE_FILE(${CMAKE_PROJECT_NAME}Config.cmake.in ${CMAKE_PROJECT_NAME}Config.cmake @ONLY) -INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}Config.cmake DESTINATION share/lib${LIBNAME}) +configure_file(liboncillaConfig.cmake.in LibOncillaConfig.cmake @ONLY) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibOncillaConfig.cmake DESTINATION share/liboncilla) # --- documentation generation --- -IF(BUILD_DOCS) - ADD_SUBDIRECTORY(doc) -ENDIF(BUILD_DOCS) +if(BUILD_DOCS) + add_subdirectory(doc) +endif(BUILD_DOCS) # --- coverage --- -IF(BUILD_TESTS) - ENABLE_COVERAGE_REPORT(TARGETS ${LIBONCILLA_NAME} TESTS ${DTO_TEST_NAME} ${INTEGRATED_TEST_NAME} FILTER "*3rdparty*" "*test/*") -ENDIF(BUILD_TESTS) +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) +enable_sloccount(FOLDERS src test examples) # --- cppcheck --- -GENERATE_CPPCHECK(SOURCES src test examples +generate_cppcheck(SOURCES src test examples "${CMAKE_CURRENT_BINARY_DIR}/src" "${CMAKE_CURRENT_BINARY_DIR}/test" "${CMAKE_CURRENT_BINARY_DIR}/examples" ENABLE_IDS style) -# --- package --- -INCLUDE(CheckLSBTypes) - -SET(CPACK_PACKAGE_VERSION_MAJOR ${LIBONCILLA_VERSION_MAJOR}) -SET(CPACK_PACKAGE_VERSION_MINOR ${LIBONCILLA_VERSION_MINOR}) -SET(CPACK_PACKAGE_VERSION_PATCH ${LIBONCILLA_VERSION_PATCH}) -SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") -SET(CPACK_PACKAGE_FILE_NAME ${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}_${LSB_CODENAME}_${LSB_PROCESSOR_ARCH}) - -SET(CPACK_GENERATOR "TGZ") -SET(CPACK_PACKAGE_VENDOR "CoR-Lab Bielefeld University") - -# IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # SET(CPACK_GENERATOR "${CPACK_GENERATOR};DEB") - # SET(CPACK_DEBIAN_PACKAGE_NAME "amarsi-liboncilla") - # SET(CPACK_DEBIAN_PACKAGE_VERSION ${LIBONCILLA_VERSION_MAJOR}.${LIBONCILLA_VERSION_MINOR}.${LIBONCILLA_VERSION_PATCH}) - # SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Arne Nordmann (anordman@cor-lab.uni-bielefeld.de)") - # SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "AMARSi RCI representations of the AMARSi quadruped robot 'Oncilla'.") - # SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") - # SET(CPACK_DEBIAN_PACKAGE_SECTION "devel") - # SET(CPACK_DEBIAN_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR}) - # SET(CPACK_DEBIAN_PACKAGE_DEPENDS "amarsi-rci-all") - # SET(CPACK_DEBIAN_PACKAGE_SUGGESTS "cmake, cmake-data, doxygen, lcov, cppcheck, sloccount") -# ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux") - -INCLUDE(CPack) + diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index b8a310b..d096859 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,13 +1,10 @@ -SET(EXAMPLE1 "SimpleSineMovement") -ADD_EXECUTABLE(${EXAMPLE1} +set(EXAMPLE1 "SimpleSineMovement") +add_executable(${EXAMPLE1} ${EXAMPLE1}.cpp) -TARGET_LINK_LIBRARIES(${EXAMPLE1} - ${LIBNAME}) - -INSTALL(TARGETS ${EXAMPLE1} - RUNTIME DESTINATION bin/examples/oncilla - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) +target_link_libraries(${EXAMPLE1} + oncilla) +#you only install example source, never executable ! +install(FILES ${EXAMPLE1} DESTINATION share/liboncilla/examples) # List examples here to automatically generate Webots file -SET(LIBONCILLA_EXAMPLES_LIST "SimpleSineMovement" PARENT_SCOPE) +set(LIBONCILLA_EXAMPLES_LIST "SimpleSineMovement" PARENT_SCOPE) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 29a7f2b..213d71d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,35 +1 @@ -SET(ONCILLAHEADERS - liboncilla/OncillaTrunk.h - liboncilla/OncillaL0.h - liboncilla/OncillaL1L2.h - liboncilla/OncillaL3.h - liboncilla/OncillaL4.h - liboncilla/Oncilla.h - liboncilla/OncillaSynchronizer.h - liboncilla/BackendFactory.h - liboncilla/common.h) - -SET(ONCILLASOURCES - liboncilla/OncillaTrunk.cpp - liboncilla/OncillaL0.cpp - liboncilla/OncillaL1L2.cpp - liboncilla/OncillaL3.cpp - liboncilla/OncillaL4.cpp - liboncilla/Oncilla.cpp - liboncilla/OncillaSynchronizer.cpp - liboncilla/BackendFactory.cpp) - -ADD_LIBRARY(${LIBONCILLA_NAME} SHARED ${ONCILLASOURCES}) -TARGET_LINK_LIBRARIES(${LIBONCILLA_NAME} - ${RSC_LIBRARIES} - ${RCI_LIBRARIES} -ldl) -SET_TARGET_PROPERTIES(${LIBONCILLA_NAME} - PROPERTIES - VERSION ${LIBONCILLA_VERSION_STRING} - SOVERSION ${LIBONCILLA_VERSION_ABI}) - -INSTALL(TARGETS ${LIBONCILLA_NAME} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) -INSTALL_FILES_RECURSIVE(include ONCILLAHEADERS) +add_subdirectory(liboncilla) \ No newline at end of file diff --git a/src/liboncilla/CMakeLists.txt b/src/liboncilla/CMakeLists.txt new file mode 100644 index 0000000..0d2b172 --- /dev/null +++ b/src/liboncilla/CMakeLists.txt @@ -0,0 +1,35 @@ +set(ONCILLAHEADERS + OncillaTrunk.h + OncillaL0.h + OncillaL1L2.h + OncillaL3.h + OncillaL4.h + Oncilla.h + OncillaSynchronizer.h + BackendFactory.h + common.h) + +set(ONCILLASOURCES + OncillaTrunk.cpp + OncillaL0.cpp + OncillaL1L2.cpp + OncillaL3.cpp + OncillaL4.cpp + Oncilla.cpp + OncillaSynchronizer.cpp + BackendFactory.cpp) + +add_library(oncilla SHARED ${ONCILLASOURCES} ${ONCILLAHEADERS}) +target_link_libraries(oncilla + ${RSC_LIBRARIES} + ${RCI_LIBRARIES} -ldl) +set_target_properties(oncilla + PROPERTIES + VERSION ${VERSION_STRING} + SOVERSION ${VERSION_ABI}) + +install(TARGETS oncilla + DESTINATION lib) + +install(FILES ${ONCILLAHEADERS} + DESTINATION include/liboncilla-${VERSION_API}/liboncilla ) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 97c6cb5..fd295fd 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,20 +1,17 @@ -ENABLE_TESTING() +set(TEST_RESULT_DIR ${CMAKE_BINARY_DIR}/testresults) +set(TEST_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) -SET(TEST_RESULT_DIR ${CMAKE_BINARY_DIR}/testresults) -SET(TEST_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) +include_directories(BEFORE SYSTEM ${GMOCK_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(BEFORE SYSTEM ${GMOCK_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - -CONFIGURE_FILE(testconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/testconfig.h) +configure_file(testconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/testconfig.h) # --- DTO tests --- -SET(TEST_SOURCES nodes/NodeTestSuite.cpp +set(TEST_SOURCES nodes/NodeTestSuite.cpp nodes/OncillaL0Test.cpp nodes/OncillaL1L2Test.cpp ) -ADD_EXECUTABLE(${NODE_TEST_NAME} ${TEST_SOURCES}) -TARGET_LINK_LIBRARIES(${NODE_TEST_NAME} - ${LIBONCILLA_NAME} +add_executable(liboncilla-test ${TEST_SOURCES}) +target_link_libraries(liboncilla-test + oncilla ${GMOCK_LIBRARIES}) -ADD_TEST(${NODE_TEST_NAME} ${EXECUTABLE_OUTPUT_PATH}/${NODE_TEST_NAME} "--gtest_output=xml:${TEST_RESULT_DIR}/") +add_test(liboncilla-test liboncilla-test "--gtest_output=xml:${TEST_RESULT_DIR}/")