diff --git a/cmake/modules/InstallationHelper.cmake b/cmake/modules/InstallationHelper.cmake index 2c04d5861..391ec13fc 100644 --- a/cmake/modules/InstallationHelper.cmake +++ b/cmake/modules/InstallationHelper.cmake @@ -1,65 +1,71 @@ # This file contains facilities for installing the files. include(GNUInstallDirs) function(install_target _target) install( TARGETS ${_target} - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + RUNTIME + DESTINATION "${CMAKE_INSTALL_BINDIR}" + COMPONENT ${PROJECT_NAME} + LIBRARY + DESTINATION "${CMAKE_INSTALL_LIBDIR}" + COMPONENT ${PROJECT_NAME} + PUBLIC_HEADER + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + COMPONENT ${PROJECT_NAME} ) endfunction() function(install_shared_library NAME) cmake_parse_arguments(ARG "" "" "PUBLIC_HEADER" ${ARGN} ) set(_sources ${ARG_UNPARSED_ARGUMENTS}) get_target_property(_target_type ${NAME} TYPE) if(_target_type STREQUAL "SHARED_LIBRARY") set(_shared_name "${NAME}") target_sources(${NAME} PRIVATE ${_sources}) else() set(_shared_name "${NAME}-shared") add_library(${_shared_name} SHARED ${_sources}) target_link_libraries(${_shared_name} ${NAME}) endif() if(ARG_PUBLIC_HEADER) set_property(TARGET ${_shared_name} PROPERTY PUBLIC_HEADER ${ARG_PUBLIC_HEADER}) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") # FIXME For compatibility reason with autotools, the version is set # to 0.0.0 (major being actually 0). This is obviously wrong and the # version of the library should reflect the version of the release. # On platforms other than linux, only the major version (0) is used. # Replace the VERSION line with the statement below to set the # correct version: # set(_properties VERSION "${CMAKE_PROJECT_VERSION}") list(APPEND _properties VERSION "${CMAKE_PROJECT_VERSION_MAJOR}.0.0") else() list(APPEND _properties VERSION "${CMAKE_PROJECT_VERSION_MAJOR}") endif() # For autotools compatibility, rename the library to ${OUTPUT_NAME}-0.dll if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") list(APPEND _properties OUTPUT_NAME "${NAME}-${CMAKE_PROJECT_VERSION_MAJOR}") # DLL_EXPORT is defined by libtool, and is expected by some sources. target_compile_definitions(${_shared_name} PRIVATE DLL_EXPORT) else() list(APPEND _properties OUTPUT_NAME "${NAME}") endif() list(APPEND _properties SOVERSION "${CMAKE_PROJECT_VERSION_MAJOR}") set_target_properties(${_shared_name} PROPERTIES ${_properties}) install_target(${_shared_name}) endfunction() diff --git a/cmake/modules/PackageOptions.cmake b/cmake/modules/PackageOptions.cmake index 6abf47da1..1f9dcbc6d 100644 --- a/cmake/modules/PackageOptions.cmake +++ b/cmake/modules/PackageOptions.cmake @@ -1,61 +1,65 @@ # Package options set(CPACK_PACKAGE_VENDOR "${COPYRIGHT_HOLDERS_FINAL}") set(CPACK_PACKAGE_DESCRIPTION "Bitcoin ABC is a Bitcoin Cash full node implementation.") set(CPACK_PACKAGE_HOMEPAGE_URL "${PROJECT_HOMEPAGE_URL}") set(CPACK_PACKAGE_INSTALL_DIRECTORY "Bitcoin-abc") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/doc/README_windows.txt") if(CMAKE_CROSSCOMPILING) set(CPACK_SYSTEM_NAME "${TOOLCHAIN_PREFIX}") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/pixmaps/nsis-header.bmp") set(CPACK_GENERATOR "NSIS;ZIP") set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR}/doc" doc) else() set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/share/pixmaps/bitcoin-abc128.png") set(CPACK_GENERATOR "TGZ") endif() +# Prevent the components aware generators (such as ZIP) from generating a +# different package for each component. +set(CPACK_MONOLITHIC_INSTALL ON) + # CPack source package options set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") set(CPACK_SOURCE_GENERATOR "TGZ") # CPack NSIS installer options Include(InstallationHelper) set(CPACK_NSIS_EXECUTABLES_DIRECTORY "${CMAKE_INSTALL_BINDIR}") set(_nsis_bitcoin_qt "bitcoin-qt.exe") set(CPACK_NSIS_URL_INFO_ABOUT "${BITCOINABC_HOMEPAGE_URL}") set(CPACK_NSIS_CONTACT "info@bitcoinabc.org") set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/share/pixmaps/bitcoin-abc.ico") set(CPACK_NSIS_MUI_UNIICON "${CPACK_NSIS_MUI_ICON}") set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${CMAKE_SOURCE_DIR}/share/pixmaps/nsis-wizard.bmp") set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP "${CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP}") set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${_nsis_bitcoin_qt}") set(CPACK_NSIS_INSTALLED_ICON_NAME "${CMAKE_INSTALL_BINDIR}/${_nsis_bitcoin_qt}") set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) set(CPACK_NSIS_DISPLAY_NAME "${PACKAGE_NAME}") macro(add_start_menu_link LINK_NAME EXE PARAMETERS ICON_EXE ICON_INDEX) list(APPEND CPACK_NSIS_CREATE_ICONS_EXTRA "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${LINK_NAME}.lnk' '$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\${EXE}' '${PARAMETERS}' '$INSTDIR\\\\${CMAKE_INSTALL_BINDIR}\\\\${ICON_EXE}' '${ICON_INDEX}'" ) list(APPEND CPACK_NSIS_DELETE_ICONS_EXTRA "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${LINK_NAME}.lnk'" ) endmacro() set(CPACK_NSIS_MENU_LINKS "${CMAKE_INSTALL_BINDIR}/${_nsis_bitcoin_qt}" "Bitcoin ABC") add_start_menu_link("${PACKAGE_NAME} (testnet)" "${_nsis_bitcoin_qt}" "-testnet" "${_nsis_bitcoin_qt}" 1 ) diff --git a/doc/man/CMakeLists.txt b/doc/man/CMakeLists.txt index d45f04be9..690f67ebb 100644 --- a/doc/man/CMakeLists.txt +++ b/doc/man/CMakeLists.txt @@ -1,17 +1,33 @@ # Copyright (c) 2019 The Bitcoin developers include(GNUInstallDirs) set(MAN_DESTINATION "${CMAKE_INSTALL_MANDIR}/man1") -install(FILES bitcoind.1 DESTINATION "${MAN_DESTINATION}") +install( + FILES bitcoind.1 + DESTINATION "${MAN_DESTINATION}" + COMPONENT bitcoind +) if(BUILD_BITCOIN_CLI) - install(FILES bitcoin-cli.1 DESTINATION "${MAN_DESTINATION}") + install( + FILES bitcoin-cli.1 + DESTINATION "${MAN_DESTINATION}" + COMPONENT bitcoind + ) endif() if(BUILD_BITCOIN_TX) - install(FILES bitcoin-tx.1 DESTINATION "${MAN_DESTINATION}") + install( + FILES bitcoin-tx.1 + DESTINATION "${MAN_DESTINATION}" + COMPONENT bitcoind + ) endif() if(BUILD_BITCOIN_QT) - install(FILES bitcoin-qt.1 DESTINATION "${MAN_DESTINATION}") + install( + FILES bitcoin-qt.1 + DESTINATION "${MAN_DESTINATION}" + COMPONENT bitcoin-qt + ) endif()