From 3aa7b5c95014acf0c493e8d212732471b97d250d Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sun, 11 Feb 2024 17:01:19 +0100 Subject: [PATCH] chore(ricepp): add install support --- ricepp/CMakeLists.txt | 67 +++++++++++++++++++++++++++-- ricepp/cmake/ricepp-config.cmake.in | 17 ++++++++ 2 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 ricepp/cmake/ricepp-config.cmake.in diff --git a/ricepp/CMakeLists.txt b/ricepp/CMakeLists.txt index 305c41c4..7e9128c7 100644 --- a/ricepp/CMakeLists.txt +++ b/ricepp/CMakeLists.txt @@ -28,7 +28,12 @@ if(NOT TARGET range-v3) GIT_REPOSITORY https://github.com/ericniebler/range-v3 GIT_TAG 0.12.0 ) - FetchContent_MakeAvailable(range-v3) + # FetchContent_MakeAvailable(range-v3) + FetchContent_GetProperties(range-v3) + if(NOT range-v3_POPULATED) + FetchContent_Populate(range-v3) + add_subdirectory(${range-v3_SOURCE_DIR} ${range-v3_BINARY_DIR} EXCLUDE_FROM_ALL) + endif() endif() if(WIN32) @@ -75,10 +80,61 @@ endforeach() add_library(ricepp ricepp.cpp ${RICEPP_OBJECTS_CPUSPECIFIC}) target_link_libraries(ricepp PUBLIC range-v3) -target_include_directories(ricepp PUBLIC include) +target_include_directories(ricepp PUBLIC + $ + $ +) target_compile_features(ricepp PUBLIC cxx_std_20) target_compile_definitions(ricepp PRIVATE ${RICEPP_CPU_SUPPORT}) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +set(CMAKE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/ricepp CACHE STRING + "CMake package config files install location") + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ricepp-config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/ricepp-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_DIR} + PATH_VARS + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_DIR +) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/ricepp-config-version.cmake + VERSION 0.1.0 + COMPATIBILITY SameMajorVersion +) + +install( + TARGETS ricepp + EXPORT ricepp-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} +) + +install( + DIRECTORY include/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h" +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/ricepp-config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ricepp +) + +install( + EXPORT ricepp-targets + FILE ricepp-targets.cmake + NAMESPACE ricepp:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ricepp +) + # # TODO: remove/rework # add_executable(ricepp_demo ricepp_demo.cpp) # target_link_libraries(ricepp_demo PRIVATE ricepp fmt) @@ -98,7 +154,12 @@ if(WITH_TESTS) GIT_REPOSITORY https://github.com/google/googletest.git GIT_TAG v1.14.0 ) - FetchContent_MakeAvailable(googletest) + # FetchContent_MakeAvailable(googletest) + FetchContent_GetProperties(googletest) + if(NOT googletest_POPULATED) + FetchContent_Populate(googletest) + add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL) + endif() endif() enable_testing() diff --git a/ricepp/cmake/ricepp-config.cmake.in b/ricepp/cmake/ricepp-config.cmake.in new file mode 100644 index 00000000..0fbd2f5b --- /dev/null +++ b/ricepp/cmake/ricepp-config.cmake.in @@ -0,0 +1,17 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) + +set_and_check(RICEPP_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") +set_and_check(RICEPP_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") +set_and_check(RICEPP_CMAKE_DIR "@PACKAGE_CMAKE_INSTALL_DIR@") + +set(RICEPP_PREFIX_DIR "${PACKAGE_PREFIX_DIR}") + +if (NOT TARGET ricepp::ricepp) + include("${RICEPP_CMAKE_DIR}/ricepp-targets.cmake") +endif() + +set(RICEPP_LIBRARIES ricepp::ricepp) + +find_dependency(range-v3)