CMakeLists.txt (4326B)
1 cmake_minimum_required(VERSION 3.11) 2 project(function2 VERSION 4.2.0 LANGUAGES CXX) 3 4 if (NOT FU2_IS_FIND_INCLUDED) 5 string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} 6 FU2_IS_TOP_LEVEL_PROJECT) 7 endif() 8 9 if (FU2_IS_TOP_LEVEL_PROJECT) 10 add_library(function2 INTERFACE) 11 else() 12 add_library(function2 INTERFACE IMPORTED GLOBAL) 13 endif() 14 15 add_library(function2::function2 ALIAS function2) 16 17 target_include_directories(function2 18 INTERFACE 19 $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> 20 $<INSTALL_INTERFACE:include>) 21 22 target_compile_features(function2 23 INTERFACE 24 cxx_alias_templates 25 cxx_auto_type 26 cxx_constexpr 27 cxx_decltype 28 cxx_decltype_auto 29 cxx_final 30 cxx_lambdas 31 cxx_lambda_init_captures 32 cxx_generic_lambdas 33 cxx_variadic_templates 34 cxx_defaulted_functions 35 cxx_nullptr 36 cxx_trailing_return_types 37 cxx_return_type_deduction) 38 39 if (FU2_IS_TOP_LEVEL_PROJECT) 40 include(ExternalProject) 41 include(GNUInstallDirs) 42 include(CMakePackageConfigHelpers) 43 44 # Create an install target: 45 # Headers and license files 46 install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/function2" 47 DESTINATION "include") 48 install(FILES "LICENSE.txt" DESTINATION .) 49 install(FILES "Readme.md" DESTINATION .) 50 51 # Config.cmake 52 write_basic_package_version_file( 53 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" 54 VERSION ${PROJECT_VERSION} 55 COMPATIBILITY SameMajorVersion) 56 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" 57 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") 58 59 # ConfigVersion.cmake 60 configure_package_config_file("cmake/config.cmake.in" 61 "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 62 INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" 63 # PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR 64 ) 65 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" 66 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") 67 68 # Targets.cmake 69 export(TARGETS ${PROJECT_NAME} 70 NAMESPACE ${PROJECT_NAME}:: 71 FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") 72 install(TARGETS ${PROJECT_NAME} 73 EXPORT "${PROJECT_NAME}Targets" 74 INCLUDES DESTINATION "include") 75 install(EXPORT "${PROJECT_NAME}Targets" 76 NAMESPACE ${PROJECT_NAME}:: 77 DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") 78 79 # Setup CPack for bundling 80 set(CPACK_GENERATOR "ZIP") 81 set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) 82 set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) 83 set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) 84 85 # Since the header only library is platform independent 86 # we name the packages after the native line feed 87 if(WIN32) 88 set(CPACK_SYSTEM_NAME "crlf") 89 else() 90 set(CPACK_SYSTEM_NAME "lf") 91 endif() 92 93 include(CPack) 94 95 if (MSVC) 96 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 97 string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 98 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 99 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") 100 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-") 101 endif() 102 103 include(cmake/CMakeLists.txt) 104 105 include(CTest) 106 107 option(FU2_WITH_NO_EXCEPTIONS 108 "Test without exceptions" 109 OFF) 110 option(FU2_WITH_NO_DEATH_TESTS 111 "Test without death tests" 112 OFF) 113 option(FU2_WITH_CPP_LATEST 114 "Enable the highest C++ standard available for testing polyfills" 115 OFF) 116 option(FU2_WITH_LIMITED_EMPTY_PROPAGATION 117 "Test limiting empty propagation to only function pointers, member pointers, std::function, and specializations of fu2::function_base" 118 OFF) 119 120 if (BUILD_TESTING) 121 if (FU2_WITH_NO_EXCEPTIONS) 122 message(STATUS "Testing with exceptions disabled") 123 add_definitions(-DTESTS_NO_EXCEPTIONS) 124 endif() 125 126 if (FU2_WITH_NO_DEATH_TESTS) 127 message(STATUS "Testing without death tests") 128 add_definitions(-DTESTS_NO_DEATH_TESTS) 129 endif() 130 131 if (FU2_WITH_LIMITED_EMPTY_PROPAGATION) 132 message(STATUS "Testing with limited empty propagation") 133 add_definitions(-DFU2_WITH_LIMITED_EMPTY_PROPAGATION) 134 endif() 135 136 add_subdirectory(test) 137 endif() 138 endif ()