Skip to content

Commit d8c7728

Browse files
committed
Added installation target to cmake configuration
Based on xtensor config.
1 parent 028ac5d commit d8c7728

4 files changed

Lines changed: 102 additions & 3 deletions

File tree

CMakeLists.txt

Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,23 @@ cmake_minimum_required(VERSION 3.1.3) # 3.1.3 for set(CMAKE_CXX_STANDARD 14)
1414

1515
project(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+
1734
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
1835
set(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)
2643
OPTION(DOWNLOAD_GBENCH "Build Google Benchmark from downloaded sources" OFF)
2744
OPTION(BENCHMARK_ENABLE_TESTING "Build tests for Google Benchmark" OFF)
2845
OPTION(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)
3047
OPTION(COVERAGE "Enable coverage compile flags (gcc only!)" OFF)
3148

3249
if (COVERAGE)
@@ -43,10 +60,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED YES)
4360
set(CMAKE_CXX_EXTENSIONS NO)
4461
# includes
4562
# .. our own
46-
set(XTENSOR_FFTW_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
4763
include_directories(${XTENSOR_FFTW_INCLUDE_DIR})
4864
# .. xtensor
4965
find_package(xtensor REQUIRED)
66+
message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor")
5067
include_directories(${xtensor_INCLUDE_DIRS})
5168
# .. xtl
5269
find_package(xtl REQUIRED)
@@ -74,10 +91,11 @@ if (FIX_RPATH)
7491
endif("${isSystemDir}" STREQUAL "-1")
7592
endif(FIX_RPATH)
7693

77-
#--------------------------------------- install
94+
#--------------------------------------- library contents
7895

7996
set(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()
96114
if(BUILD_BENCHMARK)
97115
add_subdirectory(bench)
98116
endif()
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/")
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* xtensor-fftw
3+
* Copyright (c) 2017, Patrick Bos
4+
* Distributed under the terms of the BSD 3-Clause License.
5+
*
6+
* The full license is in the file LICENSE, distributed with this software.
7+
*/
8+
9+
#ifndef XTENSOR_FFTW_CONFIG_HPP
10+
#define XTENSOR_FFTW_CONFIG_HPP
11+
12+
#define XTENSOR_FFTW_VERSION_MAJOR 0
13+
#define XTENSOR_FFTW_VERSION_MINOR 1
14+
#define XTENSOR_FFTW_VERSION_PATCH 1
15+
16+
#endif //XTENSOR_FFTW_CONFIG_HPP

xtensor-fftw.pc.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
3+
includedir=${prefix}/include
4+
5+
Name: xtensor-fftw
6+
Description: FFTW bindings for xtensor.
7+
Version: @xtensor-fftw_VERSION@
8+
Cflags: -I${includedir}

xtensor-fftwConfig.cmake.in

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
############################################################################
2+
# Copyright (c) 2016, Johan Mabille and Sylvain Corlay #
3+
# xtensor-fftw: Copyright (c) 2017, Patrick Bos #
4+
# #
5+
# Distributed under the terms of the BSD 3-Clause License. #
6+
# #
7+
# The full license is in the file LICENSE, distributed with this software. #
8+
############################################################################
9+
10+
# xtensor-fftw cmake module
11+
# This module sets the following variables in your project::
12+
#
13+
# xtensor-fftw_FOUND - true if xtensor-fftw found on the system
14+
# xtensor-fftw_INCLUDE_DIRS - the directory containing xtensor-fftw headers
15+
# xtensor-fftw_LIBRARY - empty
16+
17+
@PACKAGE_INIT@
18+
19+
set(PN xtensor-fftw)
20+
set_and_check(${PN}_INCLUDE_DIRS "${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_INCLUDEDIR@")
21+
set(${PN}_LIBRARY "")
22+
check_required_components(${PN})

0 commit comments

Comments
 (0)