Skip to content

Commit

Permalink
Modernize root CMakeLists.txt
Browse files Browse the repository at this point in the history
  • Loading branch information
stotko committed May 13, 2018
1 parent 0150b10 commit f69a862
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 97 deletions.
143 changes: 68 additions & 75 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,65 +1,56 @@
# ----------------------------------------------------------------------------
# Root CMake file for nanoflann
# ----------------------------------------------------------------------------
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.1)

# Extract library version into "NANOFLANN_VERSION"
# -----------------------------------------------------
# Look for: "#define NANOFLANN_VERSION 0xABC"
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/include/nanoflann.hpp" STR_HPP)
string(REGEX MATCHALL "NANOFLANN_VERSION.*0x[0-9,A-F]+" CMAKE_VERSION_LINE "${STR_HPP}")
string(REGEX MATCHALL "0x[0-9,A-F]+" NANOFLANN_VERSION_HEX "${CMAKE_VERSION_LINE}")

string(REGEX REPLACE "0x(.).*" "\\1" NANOFLANN_VERSION_MAJOR "${NANOFLANN_VERSION_HEX}" )
string(REGEX REPLACE "0x.(.).*" "\\1" NANOFLANN_VERSION_MINOR "${NANOFLANN_VERSION_HEX}" )
string(REGEX REPLACE "0x..(.).*" "\\1" NANOFLANN_VERSION_PATCH "${NANOFLANN_VERSION_HEX}" )
mark_as_advanced(STR_HPP CMAKE_VERSION_LINE NANOFLANN_VERSION_HEX NANOFLANN_VERSION_MAJOR NANOFLANN_VERSION_MINOR NANOFLANN_VERSION_PATCH)

project(nanoflann VERSION "${NANOFLANN_VERSION_MAJOR}.${NANOFLANN_VERSION_MINOR}.${NANOFLANN_VERSION_PATCH}")

message(STATUS "nanoflann version: ${NANOFLANN_VERSION_MAJOR}.${NANOFLANN_VERSION_MINOR}.${NANOFLANN_VERSION_PATCH}")
file(WRITE "${nanoflann_BINARY_DIR}/version" "${NANOFLANN_VERSION_MAJOR}.${NANOFLANN_VERSION_MINOR}.${NANOFLANN_VERSION_PATCH}")

PROJECT(nanoflann)

cmake_policy(SET CMP0003 NEW) # dont mix relative and absolute paths in lib lists
if (POLICY CMP0037)
cmake_policy(SET CMP0037 OLD) # allow target "test"
endif()

# Compiler options:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Enable a high level of warnings.
if (CMAKE_COMPILER_IS_GNUCXX)
# The -Wno-long-long is required in 64bit systems when including sytem headers.
# The -Wno-variadic-macros was needed for Eigen3, StdVector.h
add_compile_options(-Wall -Wno-long-long -Wno-variadic-macros)
add_compile_options(-Wall -Wno-long-long -Wno-variadic-macros -O2 -mtune=native)
# Workaround: Eigen <3.4 produces *tons* of warnings in GCC >=6. See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
if (NOT ${CMAKE_CXX_COMPILER_VERSION} LESS "6.0")
add_compile_options(-Wno-ignored-attributes -Wno-int-in-bool-context)
endif()
endif()

if(MSVC)
add_definitions( "/W3 /D_CRT_SECURE_NO_WARNINGS /wd4267 /wd4244 /nologo" )
endif()

# Solution Folder options:
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")

if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
if (POLICY CMP0037)
cmake_policy(SET CMP0037 OLD) # allow target "test"
endif()
endif()
SET( EXECUTABLE_OUTPUT_PATH ${nanoflann_BINARY_DIR}/bin CACHE PATH "Output directory for programs" )
set( EXECUTABLE_OUTPUT_PATH ${nanoflann_BINARY_DIR}/bin CACHE PATH "Output directory for programs" )
add_definitions ( -DNANOFLANN_PATH="${CMAKE_SOURCE_DIR}" )

# Extract library version into "NANOFLANN_VERSION"
# -----------------------------------------------------
# Look for: "#define NANOFLANN_VERSION 0xABC"
file(READ "${nanoflann_SOURCE_DIR}/include/nanoflann.hpp" STR_HPP)
STRING(REGEX MATCHALL "NANOFLANN_VERSION.*0x[0-9,A-F]+" CMAKE_VERSION_LINE "${STR_HPP}")
STRING(REGEX MATCHALL "0x[0-9,A-F]+" NANOFLANN_VERSION_HEX "${CMAKE_VERSION_LINE}")

STRING(REGEX REPLACE "0x(.).*" "\\1" NANOFLANN_VERSION_MAJOR "${NANOFLANN_VERSION_HEX}" )
STRING(REGEX REPLACE "0x.(.).*" "\\1" NANOFLANN_VERSION_MINOR "${NANOFLANN_VERSION_HEX}" )
STRING(REGEX REPLACE "0x..(.).*" "\\1" NANOFLANN_VERSION_PATCH "${NANOFLANN_VERSION_HEX}" )

MESSAGE(STATUS "nanoflann version: ${NANOFLANN_VERSION_MAJOR}.${NANOFLANN_VERSION_MINOR}.${NANOFLANN_VERSION_PATCH}")
file(WRITE "${nanoflann_BINARY_DIR}/version" "${NANOFLANN_VERSION_MAJOR}.${NANOFLANN_VERSION_MINOR}.${NANOFLANN_VERSION_PATCH}")

# Compiler options:
IF(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ENDIF()
IF(CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -mtune=native -Wall")
ENDIF()

IF(MSVC)
add_definitions( "/W3 /D_CRT_SECURE_NO_WARNINGS /wd4267 /wd4244 /nologo" )
ENDIF()


# Set relative install directories
set(INSTALL_INCLUDE_DIR "include")
Expand All @@ -82,26 +73,26 @@ install(TARGETS nanoflann
add_library(nanoflann::nanoflann ALIAS nanoflann)

# Examples
OPTION(BUILD_EXAMPLES "Build examples" ON)
IF(BUILD_EXAMPLES)
option(BUILD_EXAMPLES "Build examples" ON)
if(BUILD_EXAMPLES)
add_subdirectory(examples)
ENDIF()
endif()

# Benchmarks
OPTION(BUILD_BENCHMARKS "Build benchmarks" OFF)
IF(BUILD_BENCHMARKS)
option(BUILD_BENCHMARKS "Build benchmarks" OFF)
if(BUILD_BENCHMARKS)
# 3rdparty Libraries
include(3rdparty/CMakeLists-flann.txt)
include(3rdparty/CMakeLists-fastann.txt)
include(3rdparty/CMakeLists-libkdtree.txt)
add_subdirectory(benchmarkTool)
ENDIF()
endif()

# Tests
OPTION(BUILD_TESTS "Build unit tests" ON)
IF(BUILD_TESTS)
option(BUILD_TESTS "Build unit tests" ON)
if(BUILD_TESTS)
add_subdirectory(tests)
ENDIF()
endif()

# --------------------------------------------------------------------
# Install/uninstall targets
Expand All @@ -111,72 +102,74 @@ ENDIF()
# If we are building the final step of the Debian package,
# save each library files in the corresponding directories:
#--------------------------------------------------------------
IF(CMAKE_USE_DEB_POSTFIXS)
if(CMAKE_USE_DEB_POSTFIXS)
# Values when building a Debian package ---------------
MESSAGE(STATUS "** Using Debian post-fix for install directories **")
SET(libnanoflann_dev_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libnanoflann-dev/usr/")
SET(nanoflann_pkgconfig_INSTALL_PREFIX "/usr") # Values when building a Debian package
ELSE(CMAKE_USE_DEB_POSTFIXS)
message(STATUS "** Using Debian post-fix for install directories **")
set(libnanoflann_dev_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/libnanoflann-dev/usr/")
set(nanoflann_pkgconfig_INSTALL_PREFIX "/usr") # Values when building a Debian package
ELSE()
# Values under normal conditions -----------------------
SET(libnanoflann_dev_INSTALL_PREFIX "")
SET(nanoflann_pkgconfig_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") # Values under normal conditions
ENDIF(CMAKE_USE_DEB_POSTFIXS)
set(libnanoflann_dev_INSTALL_PREFIX "")
set(nanoflann_pkgconfig_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") # Values under normal conditions
endif()

# Generate the pkg-config file:
CONFIGURE_FILE(
configure_file(
"${nanoflann_SOURCE_DIR}/scripts/nanoflann.pc.in"
"${nanoflann_BINARY_DIR}/nanoflann.pc" @ONLY IMMEDIATE )



# Generate the cmake config and cmake config-version file:
SET(RELATIVE_INCLUDE_DIR "../../../include")
SET(CONFIG_INCLUDE_DIRS "\${nanoflann_CMAKE_DIR}/${RELATIVE_INCLUDE_DIR}")
include(CMakePackageConfigHelpers)

CONFIGURE_FILE(
configure_package_config_file(
"${nanoflann_SOURCE_DIR}/scripts/nanoflannConfig.cmake.in"
"${nanoflann_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/nanoflannConfig.cmake" @ONLY IMMEDIATE )
"${nanoflann_BINARY_DIR}/nanoflannConfig.cmake"
INSTALL_DESTINATION ${INSTALL_CMAKE_DIR}
PATH_VARS INSTALL_INCLUDE_DIR)

CONFIGURE_FILE(
"${nanoflann_SOURCE_DIR}/scripts/nanoflannConfigVersion.cmake.in"
"${nanoflann_BINARY_DIR}/nanoflannConfigVersion.cmake" @ONLY IMMEDIATE )
write_basic_package_version_file(
"${nanoflann_BINARY_DIR}/nanoflannConfigVersion.cmake"
VERSION ${nanoflann_VERSION}
COMPATIBILITY AnyNewerVersion)


# Uninstall target, for "make uninstall"
CONFIGURE_FILE(
"${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
configure_file(
"${nanoflann_SOURCE_DIR}/scripts/cmake_uninstall.cmake.in"
"${nanoflann_BINARY_DIR}/cmake_uninstall.cmake"
@ONLY IMMEDIATE)

ADD_CUSTOM_TARGET(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
add_custom_target(uninstall
"${CMAKE_COMMAND}" -P "${nanoflann_BINARY_DIR}/cmake_uninstall.cmake")


export(EXPORT nanoflannTargets
NAMESPACE nanoflann::
FILE "${CMAKE_CURRENT_BINARY_DIR}/nanoflannTargets.cmake")
FILE "${nanoflann_BINARY_DIR}/nanoflannTargets.cmake")

export(PACKAGE nanoflann)

install(EXPORT nanoflannTargets
NAMESPACE nanoflann::
DESTINATION "${libnanoflann_dev_INSTALL_PREFIX}${INSTALL_CMAKE_DIR}")

INSTALL(
install(
FILES "${nanoflann_BINARY_DIR}/nanoflann.pc"
DESTINATION "${libnanoflann_dev_INSTALL_PREFIX}${INSTALL_PKGCONFIG_DIR}" )

INSTALL(
FILES "${nanoflann_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/nanoflannConfig.cmake"
install(
FILES "${nanoflann_BINARY_DIR}/nanoflannConfig.cmake"
"${nanoflann_BINARY_DIR}/nanoflannConfigVersion.cmake"
DESTINATION "${libnanoflann_dev_INSTALL_PREFIX}${INSTALL_CMAKE_DIR}" )

INSTALL(
install(
FILES "${nanoflann_SOURCE_DIR}/include/nanoflann.hpp"
DESTINATION "${libnanoflann_dev_INSTALL_PREFIX}${INSTALL_INCLUDE_DIR}" )

IF(CMAKE_USE_DEB_POSTFIXS)
INSTALL(
if(CMAKE_USE_DEB_POSTFIXS)
install(
FILES "${nanoflann_SOURCE_DIR}/copyright"
DESTINATION "${libnanoflann_dev_INSTALL_PREFIX}${INSTALL_COPYRIGHT_DIR}" )
ENDIF(CMAKE_USE_DEB_POSTFIXS)
endif()
6 changes: 3 additions & 3 deletions scripts/nanoflann.pc.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ libdir=${exec_prefix}/lib@LIB_SUFFIX@
includedir=${prefix}/include

Name: The ANN nanoflann library
Description: nanoflann - A C++ header-only library for kd-trees
URL: http://code.google.com/p/nanoflann/
Description: nanoflann - A C++11 header-only library for kd-trees
URL: https://github.com/jlblancoc/nanoflann
Requires:
Version: @NANOFLANN_VERSION_MAJOR@.@NANOFLANN_VERSION_MINOR@.@NANOFLANN_VERSION_PATCH@
Version: @nanoflann_VERSION@
Libs:
Libs.private:
Cflags: -I${includedir}
Expand Down
11 changes: 3 additions & 8 deletions scripts/nanoflannConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
# - Config file for the nanoflann package
# It defines the following variables
# nanoflann_INCLUDE_DIRS - include directories for nanoflann
@PACKAGE_INIT@

# Compute paths
get_filename_component(nanoflann_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(nanoflann_INCLUDE_DIRS "@CONFIG_INCLUDE_DIRS@")
include("${CMAKE_CURRENT_LIST_DIR}/nanoflannTargets.cmake")

# Our library dependencies (contains definitions for IMPORTED targets)
include("${nanoflann_CMAKE_DIR}/nanoflannTargets.cmake")
set_and_check(nanoflann_INCLUDE_DIR "@PACKAGE_INSTALL_INCLUDE_DIR@")
11 changes: 0 additions & 11 deletions scripts/nanoflannConfigVersion.cmake.in

This file was deleted.

0 comments on commit f69a862

Please sign in to comment.