tomopy/tomopy

View on GitHub
CMakeLists.txt

Summary

Maintainability
Test Coverage
# need CUDA as a first-class language; use newer FindCUDAToolkit
# need CMAKE_CUDA_ARCHITECTURES
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
  set(MSG "")
  message(
    STATUS "Warning! Building from the source directory is not recommended")
  message(
    STATUS "If unintented, please remove 'CMakeCache.txt' and 'CMakeFiles'")
  message(STATUS "and build from a separate directory")
  message(WARNING "In-source build")
endif()

# ##############################################################################
#
# CMake settings
#
# ##############################################################################
cmake_policy(SET CMP0048 NEW)
cmake_policy(SET CMP0042 NEW)
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0104 NEW)

# get version from git if available; fall back to .gitarchival.txt
execute_process(
  COMMAND git describe --tags
  OUTPUT_VARIABLE GIT_TAG
  ERROR_QUIET)
if("${GIT_TAG}" STREQUAL "")
  file(READ ".git_archival.txt" GIT_TAG)
endif()
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" GIT_TAG ${GIT_TAG})
if("${GIT_TAG}" STREQUAL "")
  set(GIT_TAG "0.0.0")
endif()

project(
  tomopy
  VERSION ${GIT_TAG}
  LANGUAGES C CXX)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/Modules
                      ${CMAKE_MODULE_PATH})

# ##############################################################################

include(MacroUtilities)
include(Compilers)
include(Options)
include(GNUInstallDirs)
include(ProjectSettings)
include(BuildSettings)
include(Packages)
include(ClangFormat)

# ##############################################################################
# tomopy source
# ##############################################################################

add_subdirectory(source)

get_property(libtomo_TARGETS GLOBAL PROPERTY libtomo_TARGETS)

# ##############################################################################
# Information
# ##############################################################################

print_features()

install(
  EXPORT libtomoTargets
  FILE libtomoTargets.cmake
  NAMESPACE libtomo::
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libtomo)

include(CMakePackageConfigHelpers)

write_basic_package_version_file(
  ${CMAKE_CURRENT_BINARY_DIR}/libtomoConfigVersion.cmake
  VERSION ${PACKAGE_VERSION}
  COMPATIBILITY SameMajorVersion)

configure_package_config_file(
  ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
  "${CMAKE_CURRENT_BINARY_DIR}/libtomoConfig.cmake"
  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libtomo)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libtomoConfig.cmake"
              "${CMAKE_CURRENT_BINARY_DIR}/libtomoConfigVersion.cmake"
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libtomo)

export(
  EXPORT libtomoTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/cmake/libtomoTargets.cmake"
  NAMESPACE libtomo::)