Created
April 6, 2017 12:26
-
-
Save iriberri/5f098b15cf09fbe2913407790df356df to your computer and use it in GitHub Desktop.
Substituting Kindr's CMakeLists.txt file to find eigen
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright (c) 2013, Christian Gehring, Hannes Sommer, Paul Furgale, Remo Diethelm | |
# All rights reserved. | |
# | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions are met: | |
# * Redistributions of source code must retain the above copyright | |
# notice, this list of conditions and the following disclaimer. | |
# * Redistributions in binary form must reproduce the above copyright | |
# notice, this list of conditions and the following disclaimer in the | |
# documentation and/or other materials provided with the distribution. | |
# * Neither the name of the Autonomous Systems Lab, ETH Zurich nor the | |
# names of its contributors may be used to endorse or promote products | |
# derived from this software without specific prior written permission. | |
# | |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | |
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
# DISCLAIMED. IN NO EVENT SHALL Christian Gehring, Hannes Sommer, Paul Furgale, | |
# Remo Diethelm BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, | |
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | |
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
# 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. | |
# Project configuration | |
cmake_minimum_required (VERSION 2.8) | |
project(kindr) | |
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) | |
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH}) | |
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) | |
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}) | |
include_directories(${EIGEN3_INCLUDE_DIR}) | |
include_directories(include) | |
# 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") | |
endif() | |
add_definitions(-std=c++11) | |
# 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(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/" AND BUILD_TEST) | |
message(STATUS "Building GTests!") | |
option(BUILD_GTEST "build gtest" ON) | |
add_subdirectory(gtest gtest) | |
enable_testing() | |
endif() | |
# Add CMake module path | |
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) | |
install(DIRECTORY include/kindr DESTINATION include) | |
# Add unit tests | |
if(BUILD_GTEST) | |
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) | |
#============================================= | |
# Add uninstall target | |
#============================================= | |
configure_file( | |
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" | |
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" | |
IMMEDIATE @ONLY) | |
add_custom_target(uninstall | |
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) | |
# - 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, <[email protected]> | |
# Copyright (c) 2008, 2009 Gael Guennebaud, <[email protected]> | |
# Copyright (c) 2009 Benoit Jacob <[email protected]> | |
# Redistribution and use is allowed according to the terms of the 2-clause BSD license. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment