diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,9 @@ add_custom_target(check-upgrade-activated) add_custom_target(check-upgrade-activated-extended) +# Add the global install target +add_custom_target(install-all) + include(PackageHelper) exclude_git_ignored_files_from_source_package() diff --git a/cmake/modules/InstallationHelper.cmake b/cmake/modules/InstallationHelper.cmake --- a/cmake/modules/InstallationHelper.cmake +++ b/cmake/modules/InstallationHelper.cmake @@ -1,6 +1,32 @@ # This file contains facilities for installing the files. include(GNUInstallDirs) +include(SanitizeHelper) + +function(_add_install_target COMPONENT) + sanitize_target_name("install-" "${COMPONENT}" INSTALL_TARGET) + + if(NOT TARGET ${INSTALL_TARGET}) + add_custom_target(${INSTALL_TARGET} + COMMENT "Installing component ${COMPONENT}" + COMMAND + "${CMAKE_COMMAND}" + -DCOMPONENT="${COMPONENT}" + -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}" + -P cmake_install.cmake + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" + ) + + if(TARGET install-all) + add_dependencies(install-all ${INSTALL_TARGET}) + endif() + endif() + + # Other arguments are additional dependencies + if(ARGN) + add_dependencies(${INSTALL_TARGET} ${ARGN}) + endif() +endfunction() function(install_target _target) cmake_parse_arguments(ARG @@ -33,6 +59,8 @@ COMPONENT ${ARG_COMPONENT} ${ARG_UNPARSED_ARGUMENTS} ) + + _add_install_target("${ARG_COMPONENT}" ${_target}) endfunction() function(install_shared_library NAME) @@ -88,12 +116,14 @@ install_target(${_shared_name}) endfunction() -function(install_manpages COMPONENT) +function(install_manpages) set(MAN_DESTINATION "${CMAKE_INSTALL_MANDIR}/man1") install( FILES ${ARGN} DESTINATION "${MAN_DESTINATION}" - COMPONENT "${COMPONENT}" + COMPONENT manpages ) + + _add_install_target(manpages) endfunction() diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake --- a/cmake/modules/TestSuite.cmake +++ b/cmake/modules/TestSuite.cmake @@ -90,18 +90,12 @@ endif() if(NOT TARGET install-${SUITE}-${NAME}) - install_target(${NAME} COMPONENT ${SUITE}-${NAME} EXCLUDE_FROM_ALL) - # ... or a single test - add_custom_target(install-${SUITE}-${NAME} - COMMENT "Installing ${NAME} from test suite ${SUITE}" - COMMAND - "${CMAKE_COMMAND}" - -DCOMPONENT="${SUITE}-${NAME}" - -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}" - -P cmake_install.cmake - DEPENDS ${NAME} + install_target(${NAME} + COMPONENT ${SUITE}-${NAME} + EXCLUDE_FROM_ALL ) + add_dependencies(install-test-suite-${SUITE} install-${SUITE}-${NAME}) add_dependencies(install-tests install-${SUITE}-${NAME}) endif() diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt --- a/doc/man/CMakeLists.txt +++ b/doc/man/CMakeLists.txt @@ -1,20 +1,20 @@ # Copyright (c) 2019 The Bitcoin developers include(InstallationHelper) -install_manpages(bitcoind bitcoind.1) +install_manpages(bitcoind.1) if(BUILD_BITCOIN_CLI) - install_manpages(bitcoind bitcoin-cli.1) + install_manpages(bitcoin-cli.1) endif() if(BUILD_BITCOIN_TX) - install_manpages(bitcoind bitcoin-tx.1) + install_manpages(bitcoin-tx.1) endif() if(BUILD_BITCOIN_QT) - install_manpages(bitcoin-qt bitcoin-qt.1) + install_manpages(bitcoin-qt.1) endif() if(BUILD_BITCOIN_WALLET) - install_manpages(bitcoin-wallet bitcoin-wallet.1) + install_manpages(bitcoin-wallet.1) endif()