@@ -14,6 +14,23 @@ cmake_minimum_required(VERSION 3.1.3) # 3.1.3 for set(CMAKE_CXX_STANDARD 14)
1414
1515project (xtensor-fftw)
1616
17+ set (XTENSOR_FFTW_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /include)
18+
19+ #--------------------------------------- versioning
20+
21+ file (STRINGS "${XTENSOR_FFTW_INCLUDE_DIR} /xtensor-fftw/xtensor-fftw_config.hpp" xtensor-fftw_version_defines
22+ REGEX "#define XTENSOR_FFTW_VERSION_(MAJOR|MINOR|PATCH)" )
23+ foreach (ver ${xtensor-fftw_version_defines})
24+ if (ver MATCHES "#define XTENSOR_FFTW_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$" )
25+ set (XTENSOR_FFTW_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2} " CACHE INTERNAL "" )
26+ endif ()
27+ endforeach ()
28+ set (${PROJECT_NAME} _VERSION
29+ ${XTENSOR_FFTW_VERSION_MAJOR} .${XTENSOR_FFTW_VERSION_MINOR} .${XTENSOR_FFTW_VERSION_PATCH} )
30+ message (STATUS "Building xtensor-fftw v${${PROJECT_NAME} _VERSION}" )
31+
32+ #--------------------------------------- cmake modules
33+
1734set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/Modules/" )
1835set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR} /cmake/Modules/findFFTW/" )
1936
@@ -26,7 +43,7 @@ OPTION(BUILD_BENCHMARK "Build xtensor-fftw benchmarks" OFF)
2643OPTION (DOWNLOAD_GBENCH "Build Google Benchmark from downloaded sources" OFF )
2744OPTION (BENCHMARK_ENABLE_TESTING "Build tests for Google Benchmark" OFF )
2845OPTION (FIX_RPATH "Correctly set rpath for the linker" OFF )
29- OPTION (DEFAULT_COLUMN_MAJOR "Set xtensor default layout to column major" OFF )
46+ OPTION (DEFAULT_COLUMN_MAJOR "Set xtensor default layout to column major. This is currently not supported, since FFTW demands row major layout. " OFF )
3047OPTION (COVERAGE "Enable coverage compile flags (gcc only!)" OFF )
3148
3249if (COVERAGE)
@@ -43,10 +60,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
4360set (CMAKE_CXX_EXTENSIONS NO )
4461# includes
4562# .. our own
46- set (XTENSOR_FFTW_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} /include)
4763include_directories (${XTENSOR_FFTW_INCLUDE_DIR} )
4864# .. xtensor
4965find_package (xtensor REQUIRED )
66+ message (STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS} /xtensor" )
5067include_directories (${xtensor_INCLUDE_DIRS} )
5168# .. xtl
5269find_package (xtl REQUIRED )
@@ -74,10 +91,11 @@ if (FIX_RPATH)
7491 endif ("${isSystemDir} " STREQUAL "-1" )
7592endif (FIX_RPATH )
7693
77- #--------------------------------------- install
94+ #--------------------------------------- library contents
7895
7996set (XTENSOR_FFTW_HEADERS
8097 ${XTENSOR_FFTW_INCLUDE_DIR} /xtensor-fftw/basic.hpp
98+ ${XTENSOR_FFTW_INCLUDE_DIR} /xtensor-fftw/xtensor-fftw_config.hpp
8199)
82100
83101#--------------------------------------- tests
@@ -96,3 +114,38 @@ endif()
96114if (BUILD_BENCHMARK)
97115 add_subdirectory (bench )
98116endif ()
117+
118+
119+ #--------------------------------------- installation
120+
121+ include (GNUInstallDirs )
122+ include (CMakePackageConfigHelpers )
123+
124+ install (FILES ${XTENSOR_FFTW_HEADERS}
125+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} /xtensor-fftw)
126+
127+ set (XTENSOR_FFTW_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR} /cmake/${PROJECT_NAME} " CACHE
128+ STRING "install path for xtensor-fftwConfig.cmake" )
129+
130+ configure_package_config_file (${PROJECT_NAME} Config.cmake.in
131+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
132+ INSTALL_DESTINATION ${XTENSOR_FFTW_CMAKECONFIG_INSTALL_DIR} )
133+
134+ # xtensor-fftw is header-only and does not depend on the architecture.
135+ # Remove CMAKE_SIZEOF_VOID_P from xtensor-fftwConfigVersion.cmake so that an xtensor-fftwConfig.cmake
136+ # generated for a 64 bit target can be used for 32 bit targets and vice versa.
137+ set (_XTENSOR_FFTW_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P} )
138+ unset (CMAKE_SIZEOF_VOID_P )
139+ write_basic_package_version_file (${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME}ConfigVersion.cmake
140+ VERSION ${${PROJECT_NAME}_VERSION}
141+ COMPATIBILITY AnyNewerVersion )
142+ set (CMAKE_SIZEOF_VOID_P ${_XTENSOR_FFTW_CMAKE_SIZEOF_VOID_P} )
143+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} Config.cmake
144+ ${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake
145+ DESTINATION ${XTENSOR_FFTW_CMAKECONFIG_INSTALL_DIR} )
146+
147+ configure_file (${PROJECT_NAME} .pc.in
148+ "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
149+ @ONLY )
150+ install (FILES "${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} .pc"
151+ DESTINATION "${CMAKE_INSTALL_LIBDIR} /pkgconfig/" )
0 commit comments