diff --git a/CMakeLists.txt b/CMakeLists.txt index fe94859a..c1d56902 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,186 +23,95 @@ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -cmake_minimum_required(VERSION 3.16.3) -project(kindr) +# Project configuration +cmake_minimum_required(VERSION 3.5) +project(kindr + VERSION 0.0.0 + LANGUAGES CXX +) +# Include helper packages +include(CTest) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) -if("$ENV{ROS_VERSION}" STREQUAL "1" OR USE_CMAKE) - - - -# Check if catkin package should be built. -if(NOT USE_CMAKE) - find_package(catkin QUIET) - message(STATUS "Setting pure CMake build to false as not specified.") - set(USE_CMAKE false CACHE BOOL "Choose whether to build with CMake." FORCE) - set_property(CACHE USE_CMAKE PROPERTY STRINGS "True" "False") -endif() - -if(catkin_FOUND AND NOT USE_CMAKE) - message(STATUS "Building kindr as a catkin package.") - set(BUILD_CATKIN_PACKAGE true) - set(BUILD_TEST false) -else() - message(STATUS "Building kindr as a cmake package.") - set(BUILD_CATKIN_PACKAGE false) -endif() - -# Configure CMake. -if(NOT BUILD_CATKIN_PACKAGE) - set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) - set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +# Set C++ 11 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 11) endif() -# Noisily default to Release build -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - message(STATUS "Setting build type to 'Release' as none was specified.") - set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +# Output more warnings +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) endif() -add_definitions(-std=c++11) - +# Dependencies find_package(Eigen3 REQUIRED) -# Init catkin package. -if(BUILD_CATKIN_PACKAGE) - catkin_package( - INCLUDE_DIRS - include - ${EIGEN3_INCLUDE_DIR} - ) -endif() - -include_directories(include) -include_directories(${EIGEN3_INCLUDE_DIR}) - -# Don't build tests if not specified. -if(NOT BUILD_TEST) - message(STATUS "Setting build-tests to false as not specified.") - set(BUILD_TEST false CACHE BOOL "Choose whether to build tests." FORCE) - set_property(CACHE BUILD_TEST PROPERTY STRINGS - "True" "False") -endif() - -if(BUILD_TEST AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/") - message(STATUS "Building GTests!") - option(BUILD_GTEST "build gtest" ON) - add_subdirectory(gtest gtest) - enable_testing() -endif() +# Add header library target +add_library(${PROJECT_NAME} INTERFACE) +target_include_directories(${PROJECT_NAME} INTERFACE + $ + $) -install(DIRECTORY include/kindr DESTINATION include) +target_link_libraries(${PROJECT_NAME} INTERFACE Eigen3::Eigen) # Add unit tests -add_subdirectory(test) +if(BUILD_TESTING) + enable_testing() + add_subdirectory(test) +endif() # Add Doxygen documentation add_subdirectory(doc/doxygen) -# Install catkin package.xml -#install(FILES package.xml DESTINATION share/kindr) - - -#============================================= -# to allow find_package() on kindr -#============================================= -# -# the following case be used in an external project requiring kindr: -# ... -# find_package(kindr) -# include_directories(${kindr_INCLUDE_DIRS}) -# ... - -# NOTE: the following will support find_package for 1) local build (make) and 2) for installed files (make install) - -# 1- local build # - -# Register the local build in case one doesn't use "make install" -export(PACKAGE kindr) - -# Create variable for the local build tree -get_property(kindr_include_dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) - -# Configure config file for local build tree -configure_file(kindrConfig.cmake.in - "${PROJECT_BINARY_DIR}/kindrConfig.cmake" @ONLY) - -# 2- installation build # - -# Change the include location for the case of an install location -set(kindr_include_dirs ${CMAKE_INSTALL_PREFIX}/include ${EIGEN3_INCLUDE_DIR}) - - -# We put the generated file for installation in a different repository (i.e., ./CMakeFiles/) -configure_file(kindrConfig.cmake.in - "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/kindrConfig.cmake" @ONLY) - -install(FILES - "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/kindrConfig.cmake" - DESTINATION share/kindr/cmake COMPONENT dev) +# Install library +install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}_export + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +# Export library target +export(EXPORT ${PROJECT_NAME}_export + FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake + NAMESPACE ${PROJECT_NAME}::) +install(EXPORT ${PROJECT_NAME}_export + FILE ${PROJECT_NAME}Targets.cmake + NAMESPACE ${CMAKE_PROJECT_NAME}:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake) + +# Generate Version.cmake and Config.cmake file +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + +set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) +configure_package_config_file( + cmake/${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake + PATH_VARS INCLUDE_INSTALL_DIR) install(FILES - package.xml - DESTINATION share/kindr COMPONENT dev) +${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake +${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake) #============================================= # Add uninstall target #============================================= configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) -if (NOT TARGET uninstall) +if(NOT TARGET uninstall) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) -endif() - - - -else() # ROS version 2 - - -set(CMAKE_CXX_STANDARD 14) - -find_package(ament_cmake REQUIRED) -find_package(Eigen3 REQUIRED) - -add_library( - ${PROJECT_NAME} - INTERFACE -) -target_include_directories( - ${PROJECT_NAME} - INTERFACE - "$" "$" - ${EIGEN3_INCLUDE_DIR} -) -ament_target_dependencies(${PROJECT_NAME} Eigen3) - -# Add Doxygen documentation -add_subdirectory(doc/doxygen) - -install(DIRECTORY include/ DESTINATION include/${PROJECT_NAME}) -install( - TARGETS ${PROJECT_NAME} - EXPORT export_${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin -) - -if(BUILD_TESTING) - add_subdirectory(test) -endif() - -ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) -ament_export_dependencies(Eigen3) - -ament_package() - -endif() +endif() \ No newline at end of file diff --git a/cmake/FindEigen3.cmake b/cmake/FindEigen3.cmake deleted file mode 100755 index 5239875b..00000000 --- a/cmake/FindEigen3.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# - Try to find Eigen3 lib -# -# This module supports requiring a minimum version, e.g. you can do -# find_package(Eigen3 3.1.2) -# to require version 3.1.2 or newer of Eigen3. -# -# Once done this will define -# -# EIGEN3_FOUND - system has eigen lib with correct version -# EIGEN3_INCLUDE_DIR - the eigen include directory -# EIGEN3_VERSION - eigen version - -# Copyright (c) 2006, 2007 Montel Laurent, -# Copyright (c) 2008, 2009 Gael Guennebaud, -# Copyright (c) 2009 Benoit Jacob -# Redistribution and use is allowed according to the terms of the 2-clause BSD license. - -if(NOT Eigen3_FIND_VERSION) - if(NOT Eigen3_FIND_VERSION_MAJOR) - set(Eigen3_FIND_VERSION_MAJOR 2) - endif(NOT Eigen3_FIND_VERSION_MAJOR) - if(NOT Eigen3_FIND_VERSION_MINOR) - set(Eigen3_FIND_VERSION_MINOR 91) - endif(NOT Eigen3_FIND_VERSION_MINOR) - if(NOT Eigen3_FIND_VERSION_PATCH) - set(Eigen3_FIND_VERSION_PATCH 0) - endif(NOT Eigen3_FIND_VERSION_PATCH) - - set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}") -endif(NOT Eigen3_FIND_VERSION) - -macro(_eigen3_check_version) - file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) - - string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") - set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}") - set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}") - string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}") - set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}") - - set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION}) - if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK FALSE) - else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - set(EIGEN3_VERSION_OK TRUE) - endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION}) - - if(NOT EIGEN3_VERSION_OK) - - message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, " - "but at least version ${Eigen3_FIND_VERSION} is required") - endif(NOT EIGEN3_VERSION_OK) -endmacro(_eigen3_check_version) - -if (EIGEN3_INCLUDE_DIR) - - # in cache already - _eigen3_check_version() - set(EIGEN3_FOUND ${EIGEN3_VERSION_OK}) - -else (EIGEN3_INCLUDE_DIR) - - find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library - PATHS - ${CMAKE_INSTALL_PREFIX}/include - ${KDE4_INCLUDE_DIR} - PATH_SUFFIXES eigen3 eigen - ) - - if(EIGEN3_INCLUDE_DIR) - _eigen3_check_version() - endif(EIGEN3_INCLUDE_DIR) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK) - - mark_as_advanced(EIGEN3_INCLUDE_DIR) - -endif(EIGEN3_INCLUDE_DIR) diff --git a/cmake/FindGTest.cmake b/cmake/FindGTest.cmake deleted file mode 100644 index 6cffb5c5..00000000 --- a/cmake/FindGTest.cmake +++ /dev/null @@ -1,158 +0,0 @@ -# Locate the Google C++ Testing Framework. -# -# Defines the following variables: -# -# GTEST_FOUND - Found the Google Testing framework -# GTEST_INCLUDE_DIRS - Include directories -# -# Also defines the library variables below as normal -# variables. These contain debug/optimized keywords when -# a debugging library is found. -# -# GTEST_BOTH_LIBRARIES - Both libgtest & libgtest-main -# GTEST_LIBRARIES - libgtest -# GTEST_MAIN_LIBRARIES - libgtest-main -# -# Accepts the following variables as input: -# -# GTEST_ROOT - (as a CMake or environment variable) -# The root directory of the gtest install prefix -# -# GTEST_MSVC_SEARCH - If compiling with MSVC, this variable can be set to -# "MD" or "MT" to enable searching a GTest build tree -# (defaults: "MD") -# -#----------------------- -# Example Usage: -# -# enable_testing() -# find_package(GTest REQUIRED) -# include_directories(${GTEST_INCLUDE_DIRS}) -# -# add_executable(foo foo.cc) -# target_link_libraries(foo ${GTEST_BOTH_LIBRARIES}) -# -# add_test(AllTestsInFoo foo) -# -#----------------------- -# -# If you would like each Google test to show up in CTest as -# a test you may use the following macro. -# NOTE: It will slow down your tests by running an executable -# for each test and test fixture. You will also have to rerun -# CMake after adding or removing tests or test fixtures. -# -# GTEST_ADD_TESTS(executable extra_args ARGN) -# executable = The path to the test executable -# extra_args = Pass a list of extra arguments to be passed to -# executable enclosed in quotes (or "" for none) -# ARGN = A list of source files to search for tests & test -# fixtures. -# -# Example: -# set(FooTestArgs --foo 1 --bar 2) -# add_executable(FooTest FooUnitTest.cc) -# GTEST_ADD_TESTS(FooTest "${FooTestArgs}" FooUnitTest.cc) - -#============================================================================= -# Copyright 2009 Kitware, Inc. -# Copyright 2009 Philip Lowman -# Copyright 2009 Daniel Blezek -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) -# -# Thanks to Daniel Blezek for the GTEST_ADD_TESTS code - -function(GTEST_ADD_TESTS executable extra_args) - if(NOT ARGN) - message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS") - endif() - foreach(source ${ARGN}) - file(READ "${source}" contents) - string(REGEX MATCHALL "TEST_?F?\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents}) - foreach(hit ${found_tests}) - string(REGEX REPLACE ".*\\( *([A-Za-z_0-9]+), *([A-Za-z_0-9]+) *\\).*" "\\1.\\2" test_name ${hit}) - add_test(${test_name} ${executable} --gtest_filter=${test_name} ${extra_args}) - endforeach() - endforeach() -endfunction() - -function(_gtest_append_debugs _endvar _library) - if(${_library} AND ${_library}_DEBUG) - set(_output optimized ${${_library}} debug ${${_library}_DEBUG}) - else() - set(_output ${${_library}}) - endif() - set(${_endvar} ${_output} PARENT_SCOPE) -endfunction() - -function(_gtest_find_library _name) - find_library(${_name} - NAMES ${ARGN} - HINTS - $ENV{GTEST_ROOT} - ${GTEST_ROOT} - PATH_SUFFIXES ${_gtest_libpath_suffixes} - ) - mark_as_advanced(${_name}) -endfunction() - -# - -if(NOT DEFINED GTEST_MSVC_SEARCH) - set(GTEST_MSVC_SEARCH MD) -endif() - -set(_gtest_libpath_suffixes lib) -if(MSVC) - if(GTEST_MSVC_SEARCH STREQUAL "MD") - list(APPEND _gtest_libpath_suffixes - msvc/gtest-md/Debug - msvc/gtest-md/Release) - elseif(GTEST_MSVC_SEARCH STREQUAL "MT") - list(APPEND _gtest_libpath_suffixes - msvc/gtest/Debug - msvc/gtest/Release) - endif() -endif() - - -find_path(GTEST_INCLUDE_DIR gtest/gtest.h - HINTS - $ENV{GTEST_ROOT}/include - ${GTEST_ROOT}/include -) -mark_as_advanced(GTEST_INCLUDE_DIR) - -if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD") - # The provided /MD project files for Google Test add -md suffixes to the - # library names. - _gtest_find_library(GTEST_LIBRARY gtest-md gtest) - _gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd) - _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main) - _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind) -else() - _gtest_find_library(GTEST_LIBRARY gtest) - _gtest_find_library(GTEST_LIBRARY_DEBUG gtestd) - _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main) - _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind) -endif() - -include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY) - -if(GTEST_FOUND) - set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR}) - _gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY) - _gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY) - set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) -endif() - diff --git a/cmake/FindROS.cmake b/cmake/FindROS.cmake deleted file mode 100644 index 89b5ffab..00000000 --- a/cmake/FindROS.cmake +++ /dev/null @@ -1,62 +0,0 @@ -# - Find ROS -# This module finds an installed ROS package. -# -# It sets the following variables: -# ROS_FOUND - Set to false, or undefined, if ROS isn't found. - -IF(UNIX) - FIND_PROGRAM(ROS_EXEC NAME rosrun PATHS) - IF(ROS_EXEC) - SET(ROS_FOUND TRUE) - ENDIF(ROS_EXEC) -ENDIF(UNIX) - -IF (ROS_FOUND) - # show which ROS was found only if not quiet - IF (NOT ROS_FIND_QUIETLY) - MESSAGE(STATUS "Found ROS") - ENDIF (NOT ROS_FIND_QUIETLY) -ELSE (ROS_FOUND) - # warning if ROS is required but not found - IF (ROS_FIND_REQUIRED) - MESSAGE(WARNING "Could not find ROS") - ENDIF (ROS_FIND_REQUIRED) -ENDIF (ROS_FOUND) - -IF (ROS_FOUND) - - # Set node dependencies - set(rospack_dep roscpp) - set(rospack_cmd rospack) - - # Get ROS includes - set(rospack_arg cflags-only-I ${rospack_dep}) - execute_process( - COMMAND ${rospack_cmd} ${rospack_arg} - OUTPUT_VARIABLE rospack_inc_dir - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE " " ";" ROSPACK_INC_DIR ${rospack_inc_dir}) - - # Get library folders - set(rospack_arg libs-only-L ${rospack_dep}) - execute_process( - COMMAND ${rospack_cmd} ${rospack_arg} - OUTPUT_VARIABLE rospack_lib_dir - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE " " ";" ROSPACK_LIB_DIR ${rospack_lib_dir}) - - # Get libraries - set(rospack_arg libs-only-l ${rospack_dep}) - execute_process( - COMMAND ${rospack_cmd} ${rospack_arg} - OUTPUT_VARIABLE rospack_libs - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE " " ";" ROSPACK_LIBS ${rospack_libs}) - - # Include directories - include_directories(${ROSPACK_INC_DIR}) - - # Linking directories - link_directories(${ROSPACK_LIB_DIR}) - -ENDIF (ROS_FOUND) \ No newline at end of file diff --git a/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in similarity index 72% rename from cmake_uninstall.cmake.in rename to cmake/cmake_uninstall.cmake.in index ac47a0f9..8a5b11a3 100644 --- a/cmake_uninstall.cmake.in +++ b/cmake/cmake_uninstall.cmake.in @@ -1,6 +1,6 @@ if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") -endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +endif() file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) string(REGEX REPLACE "\n" ";" files "${files}") @@ -14,10 +14,10 @@ foreach(file ${files}) ) if(NOT "${rm_retval}" STREQUAL 0) message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") - endif(NOT "${rm_retval}" STREQUAL 0) - else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + endif() + else() message(STATUS "File $ENV{DESTDIR}${file} does not exist.") - endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") -endforeach(file) + endif() +endforeach() diff --git a/cmake/kindrConfig.cmake.in b/cmake/kindrConfig.cmake.in new file mode 100644 index 00000000..40925e81 --- /dev/null +++ b/cmake/kindrConfig.cmake.in @@ -0,0 +1,20 @@ +# required by CMakePackageConfigHelpers +# https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html + +@PACKAGE_INIT@ + +# forward the targets +include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake) + +# define INCLUDE_DIRS and LIBRARIES, required for catkin_package +set_and_check(@PROJECT_NAME@_INCLUDE_DIRS "@PACKAGE_INCLUDE_INSTALL_DIR@") +set(@PROJECT_NAME@_LIBRARIES @PROJECT_NAME@::@PROJECT_NAME@) + + +# forward dependencies AFTER expanding the @PACKAGE_<...>@ macros!!! +# otherwise the expanded paths might point to a found package +include(CMakeFindDependencyMacro) +find_dependency(Eigen3 REQUIRED) + +# labels the packages as found or not +check_required_components(@PROJECT_NAME@) diff --git a/doc/doxygen/CMakeLists.txt b/doc/doxygen/CMakeLists.txt index c99a0374..26e85333 100644 --- a/doc/doxygen/CMakeLists.txt +++ b/doc/doxygen/CMakeLists.txt @@ -33,7 +33,7 @@ cmake_minimum_required(VERSION 3.16.3) find_package(Doxygen) if(DOXYGEN) set(DOC_OUTPUT_DIR ${PROJECT_BINARY_DIR}/doc) - set(DOXYGEN_IMAGE_DIRS "\"${CMAKE_CURRENT_SOURCE_DIR}/figures/\"" ) + set(DOXYGEN_IMAGE_DIRS "\"${CMAKE_CURRENT_SOURCE_DIR}/figures/\"") set(DOXYGEN_SOURCE_DIRS "${DOXYGEN_SOURCE_DIRS} \"${CMAKE_CURRENT_SOURCE_DIR}\" ") set(DOXYGEN_SOURCE_DIRS "${DOXYGEN_SOURCE_DIRS} \"${CMAKE_CURRENT_SOURCE_DIR}/../../include/\" ") @@ -47,8 +47,8 @@ if(DOXYGEN) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doxygen.config.in ${DOC_OUTPUT_DIR}/doxygen.config IMMEDIATE) add_custom_target(kindr_doc ${DOXYGEN} ${DOC_OUTPUT_DIR}/doxygen.config) -else(DOXYGEN) +else() message(STATUS "Doxygen not found") -endif(DOXYGEN) +endif() #-------------------------# diff --git a/include/kindr/quaternions/Quaternion.hpp b/include/kindr/quaternions/Quaternion.hpp index 1da2fa3e..733d0e9e 100644 --- a/include/kindr/quaternions/Quaternion.hpp +++ b/include/kindr/quaternions/Quaternion.hpp @@ -165,6 +165,7 @@ class Quaternion : public QuaternionBase>, public Eigen::Q } using QuaternionBase>::operator==; + using QuaternionBase>::operator!=; using QuaternionBase>::operator*; inline Scalar w() const { diff --git a/kindrConfig.cmake.in b/kindrConfig.cmake.in deleted file mode 100644 index d6436253..00000000 --- a/kindrConfig.cmake.in +++ /dev/null @@ -1,10 +0,0 @@ -# - Config file for the kindr package -# It defines the following variables -# kindr_INCLUDE_DIRS - include directories for kindr - -# Compute paths -get_filename_component(kindr_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) -set(kindr_INCLUDE_DIRS "@kindr_include_dirs@") - -# This causes catkin_simple to link against these libraries -set(kindr_FOUND_CATKIN_PROJECT true) diff --git a/package.xml b/package.xml index a9eb75ea..272cbc4d 100644 --- a/package.xml +++ b/package.xml @@ -10,19 +10,20 @@ Paul Furgale Christian Gehring Hannes Sommer + + Remo Diethelm Philipp Leemann BSD https://github.com/anybotics/kindr - catkin - ament_cmake eigen - ament_cmake_gtest - gtest - + cmake doxygen texlive-latex-base + gtest + - ament_cmake + + cmake diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b0a35ed6..12774cb3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -26,46 +26,28 @@ # Project configuration cmake_minimum_required(VERSION 3.16.3) -if("$ENV{ROS_VERSION}" STREQUAL "1" OR USE_CMAKE) - -add_definitions(-std=c++11) - -find_package(Eigen3 REQUIRED) - -include_directories(${EIGEN3_INCLUDE_DIR}) -include_directories(../include) - - ################################ # Unit Tests ################################ ################################ # GTest ################################ - -include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) -include_directories(test) +find_package(GTest REQUIRED) # This macro globs all tests to a list so we can run them post-build. macro(_add_gtest target) - set(sources ${ARGV}) - LIST(REMOVE_ITEM sources ${target}) - if(BUILD_CATKIN_PACKAGE AND CATKIN_ENABLE_TESTING) - catkin_add_gtest(${target} ${sources}) - target_include_directories(${target} PRIVATE include) - target_link_libraries(${target} gtest_main) - find_package(cmake_code_coverage QUIET) - if(cmake_code_coverage_FOUND) - add_gtest_coverage(TEST_BUILD_TARGETS ${target}) - endif(cmake_code_coverage_FOUND) - elseif(BUILD_GTEST) - add_executable(${target} ${sources}) - message("Building test for " ${sources}) - set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target}) - target_link_libraries(${target} gtest gtest_main pthread) - add_test(${target} ${target}) - endif() -endmacro(_add_gtest) + set(sources ${ARGV}) + list(REMOVE_ITEM sources ${target}) + add_executable(${target} ${sources}) + message("Building test for " ${sources}) + set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target}) + target_link_libraries(${target} ${PROJECT_NAME} GTest::GTest GTest::Main Eigen3::Eigen) + add_test(${target} ${target}) + find_package(cmake_code_coverage QUIET) + if(cmake_code_coverage_FOUND) + add_gtest_coverage(TEST_BUILD_TARGETS ${target}) + endif() +endmacro() set(COMMON_SRCS test_main.cpp @@ -77,131 +59,75 @@ _add_gtest(runUnitTestsCommon ${COMMON_SRCS}) set(LINEARALGEBRA_SRCS test_main.cpp linear_algebra/SkewMatrixFromVectorTest.cpp - linear_algebra/PseudoInverseTest.cpp - ) + linear_algebra/PseudoInverseTest.cpp +) _add_gtest(runUnitTestsLinearAlgebra ${LINEARALGEBRA_SRCS}) set(QUATERNIONS_SRCS - test_main.cpp - quaternions/QuaternionTest.cpp + test_main.cpp + quaternions/QuaternionTest.cpp ) _add_gtest( runUnitTestsQuaternions ${QUATERNIONS_SRCS} ) set(ROTATION_SRCS - test_main.cpp - rotations/RotationMatrixTest.cpp - rotations/RotationQuaternionTest.cpp - rotations/RotationVectorTest.cpp - rotations/AngleAxisTest.cpp - rotations/RotationMatrixTest.cpp - rotations/EulerAnglesZyxTest.cpp - rotations/EulerAnglesXyzTest.cpp - rotations/RotationTest.cpp - rotations/ConventionTest.cpp + test_main.cpp + rotations/RotationMatrixTest.cpp + rotations/RotationQuaternionTest.cpp + rotations/RotationVectorTest.cpp + rotations/AngleAxisTest.cpp + rotations/RotationMatrixTest.cpp + rotations/EulerAnglesZyxTest.cpp + rotations/EulerAnglesXyzTest.cpp + rotations/RotationTest.cpp + rotations/ConventionTest.cpp ) _add_gtest( runUnitTestsRotation ${ROTATION_SRCS}) set(ROTATIONDIFF_SRCS - test_main.cpp - rotations/RotationDiffTest.cpp - rotations/LocalAngularVelocityTest.cpp - rotations/GlobalAngularVelocityTest.cpp - rotations/RotationQuaternionDiffTest.cpp - rotations/RotationMatrixDiffTest.cpp - rotations/EulerAnglesZyxDiffTest.cpp - rotations/EulerAnglesXyzDiffTest.cpp + test_main.cpp + rotations/RotationDiffTest.cpp + rotations/LocalAngularVelocityTest.cpp + rotations/GlobalAngularVelocityTest.cpp + rotations/RotationQuaternionDiffTest.cpp + rotations/RotationMatrixDiffTest.cpp + rotations/EulerAnglesZyxDiffTest.cpp + rotations/EulerAnglesXyzDiffTest.cpp ) _add_gtest( runUnitTestsRotationDiff ${ROTATIONDIFF_SRCS}) set(POSITIONS_SRCS - test_main.cpp + test_main.cpp ) _add_gtest( runUnitTestsPositions ${POSITIONS_SRCS}) set(POSES_SRCS - test_main.cpp - poses/PositionTest.cpp - poses/HomogeneousTransformationTest.cpp + test_main.cpp + poses/PositionTest.cpp + poses/HomogeneousTransformationTest.cpp ) _add_gtest( runUnitTestsPose ${POSES_SRCS}) set(POSESDIFF_SRCS - test_main.cpp - poses/PoseDiffTest.cpp - poses/PositionDiffTest.cpp - poses/TwistWithAngularVelocityTest.cpp + test_main.cpp + poses/PoseDiffTest.cpp + poses/PositionDiffTest.cpp + poses/TwistWithAngularVelocityTest.cpp ) _add_gtest( runUnitTestsPoseDiff ${POSESDIFF_SRCS}) set(VECTOR_SRCS - test_main.cpp - vectors/VectorsTest.cpp + test_main.cpp + vectors/VectorsTest.cpp ) _add_gtest( runUnitTestsVector ${VECTOR_SRCS}) set(PHYS_QUANT_SRCS - test_main.cpp - phys_quant/ForceTest.cpp - phys_quant/WrenchTest.cpp - phys_quant/ScalarTest.cpp + test_main.cpp + phys_quant/ForceTest.cpp + phys_quant/WrenchTest.cpp + phys_quant/ScalarTest.cpp ) _add_gtest( runUnitTestsPhysQuant ${PHYS_QUANT_SRCS}) - -# Run all unit tests post-build. -if(NOT TARGET run_tests) - add_custom_target(run_tests ALL - DEPENDS ${UNIT_TEST_TARGETS} - ) - add_custom_command(TARGET run_tests - COMMENT "Running tests" - POST_BUILD COMMAND ${PROJECT_SOURCE_DIR}/test/run_tests.py ${CMAKE_BINARY_DIR} ${UNIT_TEST_TARGETS} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - ) -endif() - - -else() # ROS version 2 - - -find_package(ament_cmake_gtest REQUIRED) -ament_add_gtest(test_${PROJECT_NAME} - test_main.cpp - common/CommonTest.cpp - linear_algebra/SkewMatrixFromVectorTest.cpp - linear_algebra/PseudoInverseTest.cpp - quaternions/QuaternionTest.cpp - rotations/RotationMatrixTest.cpp - rotations/RotationQuaternionTest.cpp - rotations/RotationVectorTest.cpp - rotations/AngleAxisTest.cpp - rotations/RotationMatrixTest.cpp - rotations/EulerAnglesZyxTest.cpp - rotations/EulerAnglesXyzTest.cpp - rotations/RotationTest.cpp - rotations/ConventionTest.cpp - rotations/RotationDiffTest.cpp - rotations/LocalAngularVelocityTest.cpp - rotations/GlobalAngularVelocityTest.cpp - rotations/RotationQuaternionDiffTest.cpp - rotations/RotationMatrixDiffTest.cpp - rotations/EulerAnglesZyxDiffTest.cpp - rotations/EulerAnglesXyzDiffTest.cpp - poses/PositionTest.cpp - poses/HomogeneousTransformationTest.cpp - poses/PoseDiffTest.cpp - poses/PositionDiffTest.cpp - poses/TwistWithAngularVelocityTest.cpp - vectors/VectorsTest.cpp - phys_quant/ForceTest.cpp - phys_quant/WrenchTest.cpp - phys_quant/ScalarTest.cpp -) -target_include_directories(test_${PROJECT_NAME} PRIVATE "$") -target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) -ament_target_dependencies(test_${PROJECT_NAME} Eigen3) - - -endif()