diff options
Diffstat (limited to 'third_party/function2/CMakeLists.txt')
-rw-r--r-- | third_party/function2/CMakeLists.txt | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/third_party/function2/CMakeLists.txt b/third_party/function2/CMakeLists.txt new file mode 100644 index 0000000000..e0eb44e87d --- /dev/null +++ b/third_party/function2/CMakeLists.txt @@ -0,0 +1,138 @@ +cmake_minimum_required(VERSION 3.11) +project(function2 VERSION 4.2.0 LANGUAGES CXX) + +if (NOT FU2_IS_FIND_INCLUDED) + string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} + FU2_IS_TOP_LEVEL_PROJECT) +endif() + +if (FU2_IS_TOP_LEVEL_PROJECT) + add_library(function2 INTERFACE) +else() + add_library(function2 INTERFACE IMPORTED GLOBAL) +endif() + +add_library(function2::function2 ALIAS function2) + +target_include_directories(function2 + INTERFACE + $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include> + $<INSTALL_INTERFACE:include>) + +target_compile_features(function2 + INTERFACE + cxx_alias_templates + cxx_auto_type + cxx_constexpr + cxx_decltype + cxx_decltype_auto + cxx_final + cxx_lambdas + cxx_lambda_init_captures + cxx_generic_lambdas + cxx_variadic_templates + cxx_defaulted_functions + cxx_nullptr + cxx_trailing_return_types + cxx_return_type_deduction) + +if (FU2_IS_TOP_LEVEL_PROJECT) + include(ExternalProject) + include(GNUInstallDirs) + include(CMakePackageConfigHelpers) + + # Create an install target: + # Headers and license files + install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/function2" + DESTINATION "include") + install(FILES "LICENSE.txt" DESTINATION .) + install(FILES "Readme.md" DESTINATION .) + + # Config.cmake + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + + # ConfigVersion.cmake + configure_package_config_file("cmake/config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + # PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR + ) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + + # Targets.cmake + export(TARGETS ${PROJECT_NAME} + NAMESPACE ${PROJECT_NAME}:: + FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") + install(TARGETS ${PROJECT_NAME} + EXPORT "${PROJECT_NAME}Targets" + INCLUDES DESTINATION "include") + install(EXPORT "${PROJECT_NAME}Targets" + NAMESPACE ${PROJECT_NAME}:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + + # Setup CPack for bundling + set(CPACK_GENERATOR "ZIP") + set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) + set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) + + # Since the header only library is platform independent + # we name the packages after the native line feed + if(WIN32) + set(CPACK_SYSTEM_NAME "crlf") + else() + set(CPACK_SYSTEM_NAME "lf") + endif() + + include(CPack) + + if (MSVC) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + string(REGEX REPLACE "/W[0-4]" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-") + endif() + + include(cmake/CMakeLists.txt) + + include(CTest) + + option(FU2_WITH_NO_EXCEPTIONS + "Test without exceptions" + OFF) + option(FU2_WITH_NO_DEATH_TESTS + "Test without death tests" + OFF) + option(FU2_WITH_CPP_LATEST + "Enable the highest C++ standard available for testing polyfills" + OFF) + option(FU2_WITH_LIMITED_EMPTY_PROPAGATION + "Test limiting empty propagation to only function pointers, member pointers, std::function, and specializations of fu2::function_base" + OFF) + + if (BUILD_TESTING) + if (FU2_WITH_NO_EXCEPTIONS) + message(STATUS "Testing with exceptions disabled") + add_definitions(-DTESTS_NO_EXCEPTIONS) + endif() + + if (FU2_WITH_NO_DEATH_TESTS) + message(STATUS "Testing without death tests") + add_definitions(-DTESTS_NO_DEATH_TESTS) + endif() + + if (FU2_WITH_LIMITED_EMPTY_PROPAGATION) + message(STATUS "Testing with limited empty propagation") + add_definitions(-DFU2_WITH_LIMITED_EMPTY_PROPAGATION) + endif() + + add_subdirectory(test) + endif() +endif () |