Bug 1893155 - Part 6: Correct constant for minimum epoch day. r=spidermonkey-reviewer...
[gecko.git] / third_party / function2 / CMakeLists.txt
blobe0eb44e87d89f9c35f2289beda52aeb7c628dc95
1 cmake_minimum_required(VERSION 3.11)
2 project(function2 VERSION 4.2.0 LANGUAGES CXX)
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()
9 if (FU2_IS_TOP_LEVEL_PROJECT)
10   add_library(function2 INTERFACE)
11 else()
12   add_library(function2 INTERFACE IMPORTED GLOBAL)
13 endif()
15 add_library(function2::function2 ALIAS function2)
17 target_include_directories(function2
18   INTERFACE
19     $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
20     $<INSTALL_INTERFACE:include>)
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)
39 if (FU2_IS_TOP_LEVEL_PROJECT)
40   include(ExternalProject)
41   include(GNUInstallDirs)
42   include(CMakePackageConfigHelpers)
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 .)
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}")
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}")
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}")
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})
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()
93   include(CPack)
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()
103   include(cmake/CMakeLists.txt)
105   include(CTest)
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)
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()
126     if (FU2_WITH_NO_DEATH_TESTS)
127       message(STATUS "Testing without death tests")
128       add_definitions(-DTESTS_NO_DEATH_TESTS)
129     endif()
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()
136     add_subdirectory(test)
137   endif()
138 endif ()