mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-07-23 06:39:58 +02:00
cmake: Add GenerateWindowsInstaller script
The new script is parameterized by paths to executables. It can be used to generate the installer from the install tree rather than the build tree. This capability will be used by the Guix scripts in subsequent commits.
This commit is contained in:
committed by
fanquake
parent
18c05d9301
commit
a3b5dc0572
@@ -1,19 +0,0 @@
|
||||
# Copyright (c) 2023-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
function(generate_setup_nsi)
|
||||
set(abs_top_srcdir ${PROJECT_SOURCE_DIR})
|
||||
set(abs_top_builddir ${PROJECT_BINARY_DIR})
|
||||
set(CLIENT_URL ${PROJECT_HOMEPAGE_URL})
|
||||
set(CLIENT_TARNAME "bitcoin")
|
||||
set(BITCOIN_WRAPPER_NAME "bitcoin")
|
||||
set(BITCOIN_GUI_NAME "bitcoin-qt")
|
||||
set(BITCOIN_DAEMON_NAME "bitcoind")
|
||||
set(BITCOIN_CLI_NAME "bitcoin-cli")
|
||||
set(BITCOIN_TX_NAME "bitcoin-tx")
|
||||
set(BITCOIN_WALLET_TOOL_NAME "bitcoin-wallet")
|
||||
set(BITCOIN_TEST_NAME "test_bitcoin")
|
||||
set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX})
|
||||
configure_file(${PROJECT_SOURCE_DIR}/share/setup.nsi.in ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.nsi USE_SOURCE_PERMISSIONS @ONLY)
|
||||
endfunction()
|
||||
@@ -19,32 +19,21 @@ function(setup_split_debug_script)
|
||||
endfunction()
|
||||
|
||||
function(add_windows_deploy_target)
|
||||
configure_file(${PROJECT_SOURCE_DIR}/cmake/script/GenerateWindowsInstaller.cmake.in ${PROJECT_BINARY_DIR}/GenerateWindowsInstaller.cmake USE_SOURCE_PERMISSIONS @ONLY)
|
||||
if(MINGW AND TARGET bitcoin AND TARGET bitcoin-qt AND TARGET bitcoind AND TARGET bitcoin-cli AND TARGET bitcoin-tx AND TARGET bitcoin-wallet AND TARGET bitcoin-util AND TARGET test_bitcoin)
|
||||
find_program(MAKENSIS_EXECUTABLE makensis)
|
||||
if(NOT MAKENSIS_EXECUTABLE)
|
||||
add_custom_target(deploy
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Error: NSIS not found"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# TODO: Consider replacing this code with the CPack NSIS Generator.
|
||||
# See https://cmake.org/cmake/help/latest/cpack_gen/nsis.html
|
||||
include(GenerateSetupNsi)
|
||||
generate_setup_nsi()
|
||||
add_custom_command(
|
||||
OUTPUT ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.exe
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/release
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-qt> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-qt>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoind> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoind>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-cli> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-cli>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-tx> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-tx>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-wallet> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-wallet>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-util> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:bitcoin-util>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:test_bitcoin> -o ${PROJECT_BINARY_DIR}/release/$<TARGET_FILE_NAME:test_bitcoin>
|
||||
COMMAND ${MAKENSIS_EXECUTABLE} -V2 ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.nsi
|
||||
VERBATIM
|
||||
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory release
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin> -o release/$<TARGET_FILE_NAME:bitcoin>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-qt> -o release/$<TARGET_FILE_NAME:bitcoin-qt>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoind> -o release/$<TARGET_FILE_NAME:bitcoind>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-cli> -o release/$<TARGET_FILE_NAME:bitcoin-cli>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-tx> -o release/$<TARGET_FILE_NAME:bitcoin-tx>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-wallet> -o release/$<TARGET_FILE_NAME:bitcoin-wallet>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:bitcoin-util> -o release/$<TARGET_FILE_NAME:bitcoin-util>
|
||||
COMMAND ${CMAKE_STRIP} $<TARGET_FILE:test_bitcoin> -o release/$<TARGET_FILE_NAME:test_bitcoin>
|
||||
COMMAND ${CMAKE_COMMAND} -D BIN_DIR=release -D LIBEXEC_DIR=release -P GenerateWindowsInstaller.cmake
|
||||
)
|
||||
add_custom_target(deploy DEPENDS ${PROJECT_BINARY_DIR}/bitcoin-win64-setup.exe)
|
||||
endif()
|
||||
|
||||
40
cmake/script/GenerateWindowsInstaller.cmake.in
Normal file
40
cmake/script/GenerateWindowsInstaller.cmake.in
Normal file
@@ -0,0 +1,40 @@
|
||||
# Copyright (c) 2026-present The Bitcoin Core developers
|
||||
# Distributed under the MIT software license, see the accompanying
|
||||
# file COPYING or https://opensource.org/license/mit/.
|
||||
|
||||
find_program(MAKENSIS_EXECUTABLE makensis REQUIRED)
|
||||
|
||||
# Project variables.
|
||||
set(CLIENT_NAME "@CLIENT_NAME@")
|
||||
set(CLIENT_VERSION_MAJOR @CLIENT_VERSION_MAJOR@)
|
||||
set(CLIENT_VERSION_MINOR @CLIENT_VERSION_MINOR@)
|
||||
set(CLIENT_VERSION_BUILD @CLIENT_VERSION_BUILD@)
|
||||
set(CLIENT_VERSION_STRING "@CLIENT_VERSION_STRING@")
|
||||
set(CLIENT_URL "@PROJECT_HOMEPAGE_URL@")
|
||||
set(COPYRIGHT_YEAR "@COPYRIGHT_YEAR@")
|
||||
set(COPYRIGHT_HOLDERS_FINAL "@COPYRIGHT_HOLDERS_FINAL@")
|
||||
set(abs_top_srcdir @PROJECT_SOURCE_DIR@)
|
||||
set(EXEEXT @CMAKE_EXECUTABLE_SUFFIX@)
|
||||
|
||||
# Script variables.
|
||||
cmake_path(ABSOLUTE_PATH BIN_DIR NORMALIZE)
|
||||
cmake_path(ABSOLUTE_PATH LIBEXEC_DIR NORMALIZE)
|
||||
|
||||
# Other variables required by the `setup.nsi.in` template.
|
||||
set(CLIENT_TARNAME "bitcoin")
|
||||
set(BITCOIN_WRAPPER_NAME "bitcoin")
|
||||
set(BITCOIN_GUI_NAME "bitcoin-qt")
|
||||
set(BITCOIN_DAEMON_NAME "bitcoind")
|
||||
set(BITCOIN_CLI_NAME "bitcoin-cli")
|
||||
set(BITCOIN_TX_NAME "bitcoin-tx")
|
||||
set(BITCOIN_WALLET_TOOL_NAME "bitcoin-wallet")
|
||||
set(BITCOIN_TEST_NAME "test_bitcoin")
|
||||
configure_file(@PROJECT_SOURCE_DIR@/share/setup.nsi.in ${CMAKE_CURRENT_LIST_DIR}/bitcoin-win64-setup.nsi
|
||||
USE_SOURCE_PERMISSIONS @ONLY
|
||||
)
|
||||
|
||||
execute_process(
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||
COMMAND ${MAKENSIS_EXECUTABLE} -V2 bitcoin-win64-setup.nsi
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
)
|
||||
@@ -72,19 +72,19 @@ ShowUninstDetails show
|
||||
Section -Main SEC0000
|
||||
SetOutPath $INSTDIR
|
||||
SetOverwrite on
|
||||
File @abs_top_builddir@/release/@BITCOIN_GUI_NAME@@EXEEXT@
|
||||
File @abs_top_builddir@/release/@BITCOIN_WRAPPER_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_GUI_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_WRAPPER_NAME@@EXEEXT@
|
||||
File /oname=COPYING.txt @abs_top_srcdir@/COPYING
|
||||
File /oname=readme.txt @abs_top_srcdir@/doc/README_windows.txt
|
||||
File @abs_top_srcdir@/share/examples/bitcoin.conf
|
||||
SetOutPath $INSTDIR\share\rpcauth
|
||||
File @abs_top_srcdir@/share/rpcauth/*.*
|
||||
SetOutPath $INSTDIR\daemon
|
||||
File @abs_top_builddir@/release/@BITCOIN_DAEMON_NAME@@EXEEXT@
|
||||
File @abs_top_builddir@/release/@BITCOIN_CLI_NAME@@EXEEXT@
|
||||
File @abs_top_builddir@/release/@BITCOIN_TX_NAME@@EXEEXT@
|
||||
File @abs_top_builddir@/release/@BITCOIN_WALLET_TOOL_NAME@@EXEEXT@
|
||||
File @abs_top_builddir@/release/@BITCOIN_TEST_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_DAEMON_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_CLI_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_TX_NAME@@EXEEXT@
|
||||
File @BIN_DIR@/@BITCOIN_WALLET_TOOL_NAME@@EXEEXT@
|
||||
File @LIBEXEC_DIR@/@BITCOIN_TEST_NAME@@EXEEXT@
|
||||
SetOutPath $INSTDIR
|
||||
WriteRegStr HKCU "${REGKEY}\Components" Main 1
|
||||
SectionEnd
|
||||
|
||||
Reference in New Issue
Block a user