From eb7c8c6c7a6dc5b11cc06c1beac06170a714f77f Mon Sep 17 00:00:00 2001 From: Michael Legleux Date: Tue, 10 Mar 2026 16:38:43 -0700 Subject: [PATCH] chore: Use CMake components for install (#6485) * chore: Use components for install * rm CMake export targets * reformat --- CMakeLists.txt | 1 - cmake/XrplConfig.cmake | 60 --------------------- cmake/XrplInstall.cmake | 112 +++++++++------------------------------- 3 files changed, 25 insertions(+), 148 deletions(-) delete mode 100644 cmake/XrplConfig.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ca0798ae4..33f68451c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,7 +131,6 @@ if(coverage) include(XrplCov) endif() -set(PROJECT_EXPORT_SET XrplExports) include(XrplCore) include(XrplInstall) include(XrplValidatorKeys) diff --git a/cmake/XrplConfig.cmake b/cmake/XrplConfig.cmake deleted file mode 100644 index 76f9af14b1..0000000000 --- a/cmake/XrplConfig.cmake +++ /dev/null @@ -1,60 +0,0 @@ -include(CMakeFindDependencyMacro) -# need to represent system dependencies of the lib here -#[=========================================================[ - Boost -#]=========================================================] -if(static OR APPLE OR MSVC) - set(Boost_USE_STATIC_LIBS ON) -endif() -set(Boost_USE_MULTITHREADED ON) -if(static OR MSVC) - set(Boost_USE_STATIC_RUNTIME ON) -else() - set(Boost_USE_STATIC_RUNTIME OFF) -endif() -find_dependency( - Boost - COMPONENTS - chrono - container - context - coroutine - date_time - filesystem - program_options - regex - system - thread -) -#[=========================================================[ - OpenSSL -#]=========================================================] -if(NOT DEFINED OPENSSL_ROOT_DIR) - if(DEFINED ENV{OPENSSL_ROOT}) - set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT}) - elseif(APPLE) - find_program(homebrew brew) - if(homebrew) - execute_process( - COMMAND ${homebrew} --prefix openssl - OUTPUT_VARIABLE OPENSSL_ROOT_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif() - endif() - file(TO_CMAKE_PATH "${OPENSSL_ROOT_DIR}" OPENSSL_ROOT_DIR) -endif() - -if(static OR APPLE OR MSVC) - set(OPENSSL_USE_STATIC_LIBS ON) -endif() -set(OPENSSL_MSVC_STATIC_RT ON) -find_dependency(OpenSSL REQUIRED) -find_dependency(ZLIB) -find_dependency(date) -if(TARGET ZLIB::ZLIB) - set_target_properties( - OpenSSL::Crypto - PROPERTIES INTERFACE_LINK_LIBRARIES ZLIB::ZLIB - ) -endif() diff --git a/cmake/XrplInstall.cmake b/cmake/XrplInstall.cmake index 6ea41b5ffd..339cdb51ec 100644 --- a/cmake/XrplInstall.cmake +++ b/cmake/XrplInstall.cmake @@ -2,100 +2,38 @@ install stuff #]===================================================================] -include(create_symbolic_link) +include(GNUInstallDirs) -# If no suffix is defined for executables (e.g. Windows uses .exe but Linux -# and macOS use none), then explicitly set it to the empty string. -if(NOT DEFINED suffix) - set(suffix "") +if(is_root_project AND TARGET xrpld) + install( + TARGETS xrpld + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT runtime + ) + + install( + FILES "${CMAKE_CURRENT_SOURCE_DIR}/cfg/xrpld-example.cfg" + DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/xrpld" + RENAME xrpld.cfg + COMPONENT runtime + ) + + install( + FILES "${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt" + DESTINATION "${CMAKE_INSTALL_SYSCONFDIR}/xrpld" + RENAME validators.txt + COMPONENT runtime + ) endif() install( - TARGETS - common - opts - xrpl_boost - xrpl_libs - xrpl_syslibs - xrpl.imports.main - xrpl.libpb - xrpl.libxrpl - xrpl.libxrpl.basics - xrpl.libxrpl.beast - xrpl.libxrpl.conditions - xrpl.libxrpl.core - xrpl.libxrpl.crypto - xrpl.libxrpl.git - xrpl.libxrpl.json - xrpl.libxrpl.rdb - xrpl.libxrpl.ledger - xrpl.libxrpl.net - xrpl.libxrpl.nodestore - xrpl.libxrpl.protocol - xrpl.libxrpl.resource - xrpl.libxrpl.server - xrpl.libxrpl.shamap - xrpl.libxrpl.tx - antithesis-sdk-cpp - EXPORT XrplExports - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin - INCLUDES DESTINATION include + TARGETS xrpl.libpb xrpl.libxrpl + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT development + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT development + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT development ) install( DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/xrpl" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) - -install( - EXPORT XrplExports - FILE XrplTargets.cmake - NAMESPACE Xrpl:: - DESTINATION lib/cmake/xrpl -) -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - XrplConfigVersion.cmake - VERSION ${xrpld_version} - COMPATIBILITY SameMajorVersion -) - -if(is_root_project AND TARGET xrpld) - install(TARGETS xrpld RUNTIME DESTINATION bin) - set_target_properties(xrpld PROPERTIES INSTALL_RPATH_USE_LINK_PATH ON) - # sample configs should not overwrite existing files - # install if-not-exists workaround as suggested by - # https://cmake.org/Bug/view.php?id=12646 - install( - CODE - " - macro (copy_if_not_exists SRC DEST NEWNAME) - if (NOT EXISTS \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") - file (INSTALL FILE_PERMISSIONS OWNER_READ OWNER_WRITE DESTINATION \"\${CMAKE_INSTALL_PREFIX}/\${DEST}\" FILES \"\${SRC}\" RENAME \"\${NEWNAME}\") - else () - message (\"-- Skipping : \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DEST}/\${NEWNAME}\") - endif () - endmacro() - copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/xrpld-example.cfg\" etc xrpld.cfg) - copy_if_not_exists(\"${CMAKE_CURRENT_SOURCE_DIR}/cfg/validators-example.txt\" etc validators.txt) - " - ) - install( - CODE - " - set(CMAKE_MODULE_PATH \"${CMAKE_MODULE_PATH}\") - include(create_symbolic_link) - create_symbolic_link(xrpld${suffix} \ - \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/rippled${suffix}) - " - ) -endif() - -install( - FILES - ${CMAKE_CURRENT_SOURCE_DIR}/cmake/XrplConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/XrplConfigVersion.cmake - DESTINATION lib/cmake/xrpl + COMPONENT development )