Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 65 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
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 ()
6 changes: 6 additions & 0 deletions cmake/zeus_expectedConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/zeus_expectedTargets.cmake")

include(FindPackageHandleStandardArgs)
check_required_components(zeus_expected)
25 changes: 15 additions & 10 deletions tests/test_expected/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,40 @@
project(test_expected)
project(test_expected LANGUAGES CXX)

set(SOURCES
base_tests.cpp
monadic_tests.cpp
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 ()
12 changes: 0 additions & 12 deletions tests/test_expected/test_expected_main.cpp

This file was deleted.

4 changes: 2 additions & 2 deletions tests/test_no_exceptions/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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-)
Expand Down
4 changes: 2 additions & 2 deletions tests/third_party/msvc/msvc_stl_p0323r12_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions tests/third_party/msvc/msvc_stl_p2505r5_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading