CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. cmake_minimum_required(VERSION 3.14)
  2. project(tl-expected
  3. HOMEPAGE_URL https://tl.tartanllama.xyz
  4. DESCRIPTION "C++11/14/17 std::expected with functional-style extensions"
  5. VERSION 1.0.0
  6. LANGUAGES CXX)
  7. include(CMakePackageConfigHelpers)
  8. include(CMakeDependentOption)
  9. include(GNUInstallDirs)
  10. include(FetchContent)
  11. include(CTest)
  12. if (NOT DEFINED CMAKE_CXX_STANDARD)
  13. set(CMAKE_CXX_STANDARD 14)
  14. endif()
  15. option(EXPECTED_BUILD_PACKAGE "Build package files as well" ON)
  16. cmake_dependent_option(EXPECTED_BUILD_TESTS
  17. "Enable tl::expected tests" ON
  18. "BUILD_TESTING" OFF)
  19. cmake_dependent_option(EXPECTED_BUILD_PACKAGE_DEB
  20. "Create a DEB" ON
  21. "EXPECTED_BUILD_PACKAGE" OFF)
  22. add_library(expected INTERFACE)
  23. target_include_directories(expected
  24. INTERFACE
  25. $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
  26. $<INSTALL_INTERFACE:include>)
  27. if (NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
  28. add_library(tl::expected ALIAS expected)
  29. endif()
  30. # Installation help
  31. configure_package_config_file(
  32. "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}-config.cmake.in"
  33. "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
  34. INSTALL_DESTINATION "share/cmake/${PROJECT_NAME}")
  35. write_basic_package_version_file(
  36. "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
  37. COMPATIBILITY SameMajorVersion
  38. ARCH_INDEPENDENT)
  39. install(TARGETS expected
  40. EXPORT ${PROJECT_NAME}-targets
  41. INCLUDES DESTINATION "${CMAKE_INSTALL_DATADIR}")
  42. install(EXPORT ${PROJECT_NAME}-targets
  43. DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}"
  44. NAMESPACE tl::
  45. FILE "${PROJECT_NAME}-targets.cmake")
  46. install(FILES
  47. "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake"
  48. "${PROJECT_BINARY_DIR}/${PROJECT_NAME}-config.cmake"
  49. DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}")
  50. install(DIRECTORY "include/" TYPE INCLUDE)
  51. if(EXPECTED_BUILD_TESTS)
  52. set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
  53. set(CATCH_INSTALL_HELPERS OFF)
  54. set(CATCH_BUILD_TESTING OFF)
  55. set(CATCH_INSTALL_DOCS OFF)
  56. FetchContent_Declare(Catch2 URL
  57. https://github.com/catchorg/Catch2/archive/v2.13.10.zip)
  58. FetchContent_MakeAvailable(Catch2)
  59. file(GLOB test-sources CONFIGURE_DEPENDS tests/*.cpp)
  60. list(FILTER test-sources EXCLUDE REGEX "tests/test.cpp")
  61. add_executable(${PROJECT_NAME}-tests "${test-sources}")
  62. target_compile_options(${PROJECT_NAME}-tests PRIVATE
  63. $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra>)
  64. target_link_libraries(${PROJECT_NAME}-tests
  65. PRIVATE
  66. Catch2::Catch2
  67. expected)
  68. add_test(NAME tl::expected::tests COMMAND ${PROJECT_NAME}-tests)
  69. endif()
  70. if (NOT EXPECTED_BUILD_PACKAGE)
  71. return()
  72. endif()
  73. list(APPEND source-generators TBZ2 TGZ TXZ ZIP)
  74. if (CMAKE_HOST_WIN32)
  75. list(APPEND binary-generators "WIX")
  76. endif()
  77. if (EXPECTED_BUILD_PACKAGE_DEB)
  78. list(APPEND binary-generators "DEB")
  79. endif()
  80. if (EXPECTED_BUILD_RPM)
  81. list(APPEND binary-generators "RPM")
  82. endif()
  83. set(CPACK_SOURCE_GENERATOR ${source-generators})
  84. set(CPACK_GENERATOR ${binary-generators})
  85. set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")
  86. set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}")
  87. set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Sy Brand")
  88. list(APPEND CPACK_SOURCE_IGNORE_FILES /.git/ /build/ .gitignore .DS_Store)
  89. include(CPack)