Commit 43691a50 authored by David M. Rogers's avatar David M. Rogers
Browse files

Added install_bins and install_libs functions.

parent c52fb630
Loading
Loading
Loading
Loading
+9 −40
Original line number Diff line number Diff line
@@ -5,7 +5,10 @@
cmake_minimum_required(VERSION 3.17)

project(mpitest VERSION 1.0 LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
include(install.cmake)

#implicit option(BUILD_TESTING "Build tests accompanying this project" ON)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

find_package(MPI REQUIRED)
@@ -29,44 +32,10 @@ set_target_properties(mpiwrap PROPERTIES

target_link_libraries(mpitest mpiwrap)

### Installation Instructions ###
set(installable_bin mpitest)
install(TARGETS ${installable_bin} DESTINATION bin)

# Attach these libraries to the mpitestTargets list of exported libs.
set(installable_libs mpiwrap)
install(TARGETS ${installable_libs}
        DESTINATION lib
        EXPORT mpitestTargets)

set(MPIWRAP_HEADERS include/mpiwrap.hh)
install(FILES ${MPIWRAP_HEADERS} DESTINATION include)

# Note: we choose the following location for cmake dependency info:
# <prefix>/lib/cmake/mpitest/
# install the targets to export
install(EXPORT mpitestTargets
  FILE mpitestTargets.cmake
  NAMESPACE mpitest::
  DESTINATION lib/cmake/mpitest
)
### Testing Instructions ###
include(CTest)
add_subdirectory(tests)

# Create a config helper so others can call find_package(mpitest::mpiwrap)
include(CMakePackageConfigHelpers)
configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
  "${CMAKE_CURRENT_BINARY_DIR}/mpitestConfig.cmake"
  INSTALL_DESTINATION "lib/cmake/mpitest"
  NO_SET_AND_CHECK_MACRO
  )
# generate the version file for the config file
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/mpitestConfigVersion.cmake"
  VERSION "${mpitest_VERSION_MAJOR}.${mpitest_VERSION_MINOR}"
  COMPATIBILITY AnyNewerVersion
)
# install the configuration file
install(FILES
  ${CMAKE_CURRENT_BINARY_DIR}/mpitestConfig.cmake
  ${CMAKE_CURRENT_BINARY_DIR}/mpitestConfigVersion.cmake
  DESTINATION lib/cmake/mpitest
)
### Installation Instructions ###
install_bins(mpitest)
install_libs(mpiwrap PKG mpiwrap HEADERS include/mpiwrap.hh)
+2 −2
Original line number Diff line number Diff line
@PACKAGE_INIT@

include ( "${CMAKE_CURRENT_LIST_DIR}/mpitestTargets.cmake" )
include ( "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_LIB_PKG}Targets.cmake" )

find_dependency(MPI REQUIRED)

check_required_components(mpitest)
check_required_components(${INSTALL_LIB_PKG})

cmake/install.cmake

0 → 100644
+49 −0
Original line number Diff line number Diff line
function(install_bins)
    set(targets ${ARGN})
    install(TARGETS ${targets} DESTINATION bin)
endfunction()

# e.g. install_libs(mpiwrapper testhelpers PKG mpitest HEADERS include/a.h include/b.h)
function(install_libs targets)
    set(oneValueArgs PKG)
    set(multiValueArgs HEADERS)
    cmake_parse_arguments(INSTALL_LIBS ""
                          "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
    set(targets INSTALL_LIBS_UNPARSED_ARGUMENTS)

  # Attach these libraries to the list of exported libs.
  install(TARGETS ${targets}
          DESTINATION lib
          EXPORT "${INSTALL_LIBS_PKG}Targets")

  install(FILES ${INSTALL_LIB_HEADERS} DESTINATION include)
  
  # Note: we choose the following location for cmake dependency info:
  # <prefix>/lib/cmake/${PKG}/
  # install the targets to export
  install(EXPORT "${INSTALL_LIB_PKG}Targets"
    FILE "${INSTALL_LIB_PKG}Targets.cmake"
    NAMESPACE "${INSTALL_LIB_PKG}::"
    DESTINATION "lib/cmake/${INSTALL_LIB_PKG}"
  )

  # Create a config helper so others can call find_package(${PKG}::${LIBNAME})
  include(CMakePackageConfigHelpers)
  configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
    "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_LIB_PKG}Config.cmake"
    INSTALL_DESTINATION "lib/cmake/${INSTALL_LIB_PKG}"
    NO_SET_AND_CHECK_MACRO
    )
  # generate the version file for the config file
  write_basic_package_version_file(
    "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_LIB_PKG}ConfigVersion.cmake"
    VERSION "${${INSTALL_LIB_PKG}_VERSION_MAJOR}.${${INSTALL_LIB_PKG}_VERSION_MINOR}"
    COMPATIBILITY AnyNewerVersion
  )
  # install the configuration file
  install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_LIB_PKG}Config.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_LIB_PKG}ConfigVersion.cmake"
    DESTINATION "lib/cmake/${INSTALL_LIB_PKG}"
  )
endfunction()