diff --git a/CMakeLists.txt b/CMakeLists.txt index dcac5b3..f324c0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,30 +1,77 @@ cmake_minimum_required(VERSION 3.23) -project(zeus_expected) +project( + zeus_expected + VERSION 1.3.3 + DESCRIPTION "Backporting std::expected to C++17." + HOMEPAGE_URL "https://github.com/zeus-cpp/expected" + LANGUAGES CXX +) add_library(${PROJECT_NAME} INTERFACE) add_library(zeus::expected ALIAS ${PROJECT_NAME}) -target_include_directories(${PROJECT_NAME} INTERFACE - $ - $ +target_sources(${PROJECT_NAME} INTERFACE + FILE_SET exports + TYPE HEADERS + BASE_DIRS include + FILES + include/zeus/expected.hpp ) -target_sources(${PROJECT_NAME} PUBLIC FILE_SET exports TYPE HEADERS BASE_DIRS include FILES - include/zeus/expected.hpp + +set_target_properties(zeus_expected PROPERTIES + EXPORT_NAME expected ) -include(GNUInstallDirs) +target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17) -install(TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}-targets - FILE_SET exports -) -install(EXPORT ${PROJECT_NAME}-targets DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" - FILE ${PROJECT_NAME}.cmake - COMPONENT Development EXCLUDE_FROM_ALL -) +option(ZEUS_EXPECTED_INSTALL "Generate install targets" ${PROJECT_IS_TOP_LEVEL}) +option(ZEUS_EXPECTED_BUILD_TESTS "Build tests" ${PROJECT_IS_TOP_LEVEL}) + +if(ZEUS_EXPECTED_INSTALL) + include(GNUInstallDirs) + + install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + FILE_SET exports + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT Development + ) + + install(EXPORT ${PROJECT_NAME}-targets + NAMESPACE zeus:: + DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" + FILE ${PROJECT_NAME}Targets.cmake + COMPONENT Development + ) + + include(CMakePackageConfigHelpers) + + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT + ) + + configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" + ) + + install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" + COMPONENT Development + ) +endif() -include(CTest) -if (BUILD_TESTING) - add_subdirectory(tests) +if(ZEUS_EXPECTED_BUILD_TESTS) + include(CTest) + if (BUILD_TESTING) + add_subdirectory(tests) + endif () endif () diff --git a/cmake/zeus_expectedConfig.cmake.in b/cmake/zeus_expectedConfig.cmake.in new file mode 100644 index 0000000..cbe8d09 --- /dev/null +++ b/cmake/zeus_expectedConfig.cmake.in @@ -0,0 +1,6 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/zeus_expectedTargets.cmake") + +include(FindPackageHandleStandardArgs) +check_required_components(zeus_expected) diff --git a/tests/test_expected/CMakeLists.txt b/tests/test_expected/CMakeLists.txt index 157597f..229ef3b 100644 --- a/tests/test_expected/CMakeLists.txt +++ b/tests/test_expected/CMakeLists.txt @@ -1,4 +1,4 @@ -project(test_expected) +project(test_expected LANGUAGES CXX) set(SOURCES base_tests.cpp @@ -6,30 +6,35 @@ set(SOURCES noexcept_tests.cpp equality_tests.cpp lwg_3886_tests.cpp - test_expected_main.cpp ) +find_package(Catch2 3 REQUIRED) + +include(Catch) + function(add_test_expected CPP_STANDARD) set(TARGET_NAME ${PROJECT_NAME}_cpp${CPP_STANDARD}) add_executable(${TARGET_NAME}) - set_target_properties(${TARGET_NAME} PROPERTIES CXX_STANDARD ${CPP_STANDARD}) - - target_link_libraries(${TARGET_NAME} zeus::expected) - - find_package(Catch2 REQUIRED) - target_link_libraries(${TARGET_NAME} Catch2::Catch2) - + set_target_properties(${TARGET_NAME} + PROPERTIES CXX_STANDARD ${CPP_STANDARD}) + # The two targets belong to different scopes, + # so linking them separately is better for clarity. + target_link_libraries(${TARGET_NAME} + PRIVATE Catch2::Catch2WithMain) + target_link_libraries(${TARGET_NAME} + PRIVATE zeus::expected) target_sources(${TARGET_NAME} PRIVATE ${SOURCES}) - include(Catch) catch_discover_tests(${TARGET_NAME}) endfunction() add_test_expected(17) + if (cxx_std_20 IN_LIST CMAKE_CXX_COMPILE_FEATURES) add_test_expected(20) endif () + if (cxx_std_23 IN_LIST CMAKE_CXX_COMPILE_FEATURES) add_test_expected(23) endif () diff --git a/tests/test_expected/test_expected_main.cpp b/tests/test_expected/test_expected_main.cpp deleted file mode 100644 index 0d7cd37..0000000 --- a/tests/test_expected/test_expected_main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include - -int main(int argc, char* argv[]) -{ - // your setup ... - - int result = Catch::Session().run(argc, argv); - - // your clean-up... - - return result; -} diff --git a/tests/test_no_exceptions/CMakeLists.txt b/tests/test_no_exceptions/CMakeLists.txt index dfe0003..454812f 100644 --- a/tests/test_no_exceptions/CMakeLists.txt +++ b/tests/test_no_exceptions/CMakeLists.txt @@ -1,7 +1,7 @@ -project(test_no_exceptions) +project(test_no_exceptions LANGUAGES CXX) add_executable(${PROJECT_NAME} test_no_exceptions.cpp) -target_link_libraries(${PROJECT_NAME} zeus::expected) +target_link_libraries(${PROJECT_NAME} PRIVATE zeus::expected) if (MSVC) target_compile_options(${PROJECT_NAME} PRIVATE /EHs-c-) diff --git a/tests/third_party/msvc/msvc_stl_p0323r12_test/CMakeLists.txt b/tests/third_party/msvc/msvc_stl_p0323r12_test/CMakeLists.txt index 87e4c0a..bf211e0 100644 --- a/tests/third_party/msvc/msvc_stl_p0323r12_test/CMakeLists.txt +++ b/tests/third_party/msvc/msvc_stl_p0323r12_test/CMakeLists.txt @@ -1,8 +1,8 @@ -project(msvc_stl_p0323r12_test) +project(msvc_stl_p0323r12_test LANGUAGES CXX) add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 20) -target_link_libraries(${PROJECT_NAME} zeus::expected) +target_link_libraries(${PROJECT_NAME} PRIVATE zeus::expected) target_sources(${PROJECT_NAME} PRIVATE diff --git a/tests/third_party/msvc/msvc_stl_p2505r5_test/CMakeLists.txt b/tests/third_party/msvc/msvc_stl_p2505r5_test/CMakeLists.txt index bf204e3..d2adfcc 100644 --- a/tests/third_party/msvc/msvc_stl_p2505r5_test/CMakeLists.txt +++ b/tests/third_party/msvc/msvc_stl_p2505r5_test/CMakeLists.txt @@ -1,8 +1,8 @@ -project(msvc_stl_p2505r5_test) +project(msvc_stl_p2505r5_test LANGUAGES CXX) add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 20) -target_link_libraries(${PROJECT_NAME} zeus::expected) +target_link_libraries(${PROJECT_NAME} PRIVATE zeus::expected) target_sources(${PROJECT_NAME} PRIVATE