CMakeLists.txt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # Copyright 2016-2018 by Martin Moene
  2. #
  3. # https://github.com/martinmoene/expected-lite
  4. #
  5. # Distributed under the Boost Software License, Version 1.0.
  6. # (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. cmake_minimum_required( VERSION 3.5 FATAL_ERROR )
  8. # expected-lite project and version, updated by script/update-version.py:
  9. project(
  10. expected_lite
  11. VERSION 0.6.2
  12. # DESCRIPTION "Expected objects in C++11 and later in a single-file header-only library"
  13. # HOMEPAGE_URL "https://github.com/martinmoene/expected-lite"
  14. LANGUAGES CXX )
  15. # Package information:
  16. set( unit_name "expected" )
  17. set( package_nspace "nonstd" )
  18. set( package_name "${unit_name}-lite" )
  19. set( package_version "${${PROJECT_NAME}_VERSION}" )
  20. message( STATUS "Project '${PROJECT_NAME}', package '${package_name}' version: '${package_version}'")
  21. # Toplevel or subproject:
  22. if ( CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
  23. set( expected_IS_TOPLEVEL_PROJECT TRUE )
  24. else()
  25. set( expected_IS_TOPLEVEL_PROJECT FALSE )
  26. endif()
  27. # If toplevel project, enable building and performing of tests, disable building of examples:
  28. option( EXPECTED_LITE_OPT_BUILD_TESTS "Build and perform expected-lite tests" ${expected_IS_TOPLEVEL_PROJECT} )
  29. option( EXPECTED_LITE_OPT_BUILD_EXAMPLES "Build expected-lite examples" OFF )
  30. set( EXPEXTED_P0323R "99" STRING "Specify proposal revision compatibility (99: latest)" )
  31. option( EXPECTED_LITE_OPT_SELECT_STD "Select std::expected" OFF )
  32. option( EXPECTED_LITE_OPT_SELECT_NONSTD "Select nonstd::expected" OFF )
  33. # If requested, build and perform tests, build examples:
  34. if ( EXPECTED_LITE_OPT_BUILD_TESTS )
  35. enable_testing()
  36. add_subdirectory( test )
  37. endif()
  38. if ( EXPECTED_LITE_OPT_BUILD_EXAMPLES )
  39. add_subdirectory( example )
  40. endif()
  41. #
  42. # Interface, installation and packaging
  43. #
  44. # CMake helpers:
  45. include( GNUInstallDirs )
  46. include( CMakePackageConfigHelpers )
  47. # Interface library:
  48. add_library(
  49. ${package_name} INTERFACE )
  50. add_library(
  51. ${package_nspace}::${package_name} ALIAS ${package_name} )
  52. target_include_directories(
  53. ${package_name}
  54. INTERFACE
  55. "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
  56. "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>" )
  57. # Package configuration:
  58. # Note: package_name and package_target are used in package_config_in
  59. set( package_folder "${package_name}" )
  60. set( package_target "${package_name}-targets" )
  61. set( package_config "${package_name}-config.cmake" )
  62. set( package_config_in "${package_name}-config.cmake.in" )
  63. set( package_config_version "${package_name}-config-version.cmake" )
  64. configure_package_config_file(
  65. "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${package_config_in}"
  66. "${CMAKE_CURRENT_BINARY_DIR}/${package_config}"
  67. INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${package_folder}"
  68. )
  69. configure_file(
  70. "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${package_config_version}.in"
  71. "${CMAKE_CURRENT_BINARY_DIR}/${package_config_version}" @ONLY
  72. )
  73. # Installation:
  74. install(
  75. TARGETS ${package_name}
  76. EXPORT ${package_target}
  77. # INCLUDES DESTINATION "${...}" # already set via target_include_directories()
  78. )
  79. install(
  80. EXPORT ${package_target}
  81. NAMESPACE ${package_nspace}::
  82. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${package_folder}"
  83. )
  84. install(
  85. FILES "${CMAKE_CURRENT_BINARY_DIR}/${package_config}"
  86. "${CMAKE_CURRENT_BINARY_DIR}/${package_config_version}"
  87. DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${package_folder}"
  88. )
  89. install(
  90. DIRECTORY "include/"
  91. DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
  92. )
  93. export(
  94. EXPORT ${package_target}
  95. NAMESPACE ${package_nspace}::
  96. FILE "${CMAKE_CURRENT_BINARY_DIR}/${package_name}-targets.cmake"
  97. )
  98. # end of file