net-p2p/bitcoin-core-29.0: import Qt 6 patch from upstream

Closes: https://bugs.gentoo.org/954108
Signed-off-by: Matt Whitlock <gentoo@mattwhitlock.name>
Closes: https://github.com/gentoo/gentoo/pull/41677
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Matt Whitlock
2025-04-20 16:50:58 -04:00
committed by Sam James
parent 7886d4f7f3
commit fda3c63f19
3 changed files with 395 additions and 3 deletions

View File

@@ -1,3 +1,2 @@
DIST bitcoin-core-28.1.tar.gz 12601466 BLAKE2B f6dd3c269b0e132798b3bea96a122a89b95e7544f01fd3401bfc2fd1ef11fc847a3570f8d5c0339778df0a3ecf17cf49af4148c2f68d7719d6f85ac2688e9d3c SHA512 859c5f0b2f927969766d3ebde64173469e5810694ba317629fac64c66311d847698ae093dbf585e327cf4e75983b722ff45a23ed3fe6f1f13752db4cf6846aa9
DIST bitcoin-core-29.0-qt6.patch 16090 BLAKE2B cfa30f07cb9aad43092598d9b7ab45062b41e5c68836e81199f9d5fc32531239b7dffa9680370808e02953d76c6001f79c2f2558def101c0195e97d8bd978e49 SHA512 f8e79a7a90e423a649baccbd89dc4bbaa6f40e4b327ace5a44b183ac363281c5e6e263406daff6f390af4e202c98bff115511ac3a334bcd81af42af6e97e5f24
DIST bitcoin-core-29.0.tar.gz 12931219 BLAKE2B ee4a9b67ceb3e7a1851f844a090a099267798f83fbeb4fb76e0dd30ec24ce3fb967ab032179492cb8c02f0e470b3c2546ad589f940487bb0a0cc4d469bf3e1f9 SHA512 1373348fff7ac978fd28a8e29eda9ba9af745f947153a2c6c099b1e997d0d55611627f4c5299e350be3a9b555406da6bf056d2c5f6c123077e2872f5db7b3459

View File

@@ -11,7 +11,6 @@ DESCRIPTION="Reference implementation of the Bitcoin cryptocurrency"
HOMEPAGE="https://bitcoincore.org/"
SRC_URI="
https://github.com/bitcoin/bitcoin/archive/v${PV/_rc/rc}.tar.gz -> ${P}.tar.gz
https://github.com/bitcoin/bitcoin/pull/30997/commits/f9472962d1cdf58bfc1ad64c4bb44ddf5d0b4db2.patch?full_index=1 -> ${PN}-29.0-qt6.patch
"
S="${WORKDIR}/${PN/-core}-${PV/_rc/rc}"
@@ -92,7 +91,7 @@ DOCS=(
)
PATCHES=(
"${DISTDIR}/${PN}-29.0-qt6.patch"
"${FILESDIR}/29.0-qt6.patch"
"${FILESDIR}/29.0-cmake-syslibs.patch"
"${FILESDIR}/26.0-init.patch"
)

View File

@@ -0,0 +1,394 @@
https://github.com/bitcoin/bitcoin/pull/30997
From 6d4214925fadc36d26aa58903db5788c742e68c6 Mon Sep 17 00:00:00 2001
From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
Date: Wed, 2 Apr 2025 09:11:48 +0100
Subject: [PATCH] cmake: Require Qt 6 to build GUI
---
.github/ISSUE_TEMPLATE/good_first_issue.yml | 2 +-
CMakeLists.txt | 2 +-
cmake/module/FindQt.cmake | 21 --------
doc/build-freebsd.md | 4 +-
doc/build-netbsd.md | 4 +-
doc/build-openbsd.md | 6 +--
doc/build-osx.md | 4 +-
doc/build-unix.md | 12 +++--
src/qt/CMakeLists.txt | 58 +++++++++++++++------
src/qt/sendcoinsdialog.cpp | 13 +++++
src/qt/sendcoinsdialog.h | 4 ++
src/qt/test/CMakeLists.txt | 2 +-
12 files changed, 79 insertions(+), 53 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/good_first_issue.yml b/.github/ISSUE_TEMPLATE/good_first_issue.yml
index 133937c011af6..2a486b3f2b43b 100644
--- a/.github/ISSUE_TEMPLATE/good_first_issue.yml
+++ b/.github/ISSUE_TEMPLATE/good_first_issue.yml
@@ -28,7 +28,7 @@ body:
id: useful-skills
attributes:
label: Useful Skills
- description: For example, “`std::thread`”, “Qt5 GUI and async GUI design” or “basic understanding of Bitcoin mining and the Bitcoin Core RPC interface”.
+ description: For example, “`std::thread`”, “Qt6 GUI and async GUI design” or “basic understanding of Bitcoin mining and the Bitcoin Core RPC interface”.
value: |
* Compiling Bitcoin Core from source
* Running the C++ unit tests and the Python functional tests
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bbcedcec2d617..119f4bea897f9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -174,7 +174,7 @@ if(BUILD_GUI)
if(BUILD_GUI_TESTS)
list(APPEND qt_components Test)
endif()
- find_package(Qt 5.11.3 MODULE REQUIRED
+ find_package(Qt 6.2 MODULE REQUIRED
COMPONENTS ${qt_components}
)
unset(qt_components)
diff --git a/cmake/module/FindQt.cmake b/cmake/module/FindQt.cmake
index 2e43294a99699..d98af5bb56b1a 100644
--- a/cmake/module/FindQt.cmake
+++ b/cmake/module/FindQt.cmake
@@ -27,19 +27,6 @@ if(CMAKE_HOST_APPLE)
endif()
endif()
-# Save CMAKE_FIND_ROOT_PATH_MODE_LIBRARY state.
-unset(_qt_find_root_path_mode_library_saved)
-if(DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
- set(_qt_find_root_path_mode_library_saved ${CMAKE_FIND_ROOT_PATH_MODE_LIBRARY})
-endif()
-
-# The Qt config files internally use find_library() calls for all
-# dependencies to ensure their availability. In turn, the find_library()
-# inspects the well-known locations on the file system; therefore, it must
-# be able to find platform-specific system libraries, for example:
-# /usr/x86_64-w64-mingw32/lib/libm.a or /usr/arm-linux-gnueabihf/lib/libm.a.
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
-
find_package(Qt${Qt_FIND_VERSION_MAJOR} ${Qt_FIND_VERSION}
COMPONENTS ${Qt_FIND_COMPONENTS}
HINTS ${_qt_homebrew_prefix}
@@ -47,14 +34,6 @@ find_package(Qt${Qt_FIND_VERSION_MAJOR} ${Qt_FIND_VERSION}
)
unset(_qt_homebrew_prefix)
-# Restore CMAKE_FIND_ROOT_PATH_MODE_LIBRARY state.
-if(DEFINED _qt_find_root_path_mode_library_saved)
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ${_qt_find_root_path_mode_library_saved})
- unset(_qt_find_root_path_mode_library_saved)
-else()
- unset(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
-endif()
-
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Qt
REQUIRED_VARS Qt${Qt_FIND_VERSION_MAJOR}_DIR
diff --git a/doc/build-freebsd.md b/doc/build-freebsd.md
index 1c78b5c127a71..432a2ee2bec39 100644
--- a/doc/build-freebsd.md
+++ b/doc/build-freebsd.md
@@ -62,13 +62,13 @@ sh/bash: export BDB_PREFIX=[path displayed above]
```
#### GUI Dependencies
-###### Qt5
+###### Qt6
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install
the necessary parts of Qt, the libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
```bash
-pkg install qt5-buildtools qt5-core qt5-gui qt5-linguisttools qt5-testlib qt5-widgets
+pkg install qt6-buildtools qt6-core qt6-gui qt6-linguisttools qt6-testlib qt6-widgets
```
###### libqrencode
diff --git a/doc/build-netbsd.md b/doc/build-netbsd.md
index 988f3b93a7a92..31cac3f6b6875 100644
--- a/doc/build-netbsd.md
+++ b/doc/build-netbsd.md
@@ -64,13 +64,13 @@ pkgin install db4
```
#### GUI Dependencies
-###### Qt5
+###### Qt6
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install
the necessary parts of Qt, the libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
```bash
-pkgin install qt5-qtbase qt5-qttools
+pkgin install qt6-qtbase qt6-qttools
```
###### libqrencode
diff --git a/doc/build-openbsd.md b/doc/build-openbsd.md
index e55f2aec9e8b3..8beda3259fbf4 100644
--- a/doc/build-openbsd.md
+++ b/doc/build-openbsd.md
@@ -56,13 +56,13 @@ export BDB_PREFIX="[path displayed above]"
```
#### GUI Dependencies
-###### Qt5
+###### Qt6
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install
the necessary parts of Qt, the libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
```bash
-pkg_add qtbase qttools
+pkg_add qt6-qtbase qt6-qttools
```
###### libqrencode
@@ -100,7 +100,7 @@ pkg_add python py3-zmq # Select the newest version of the python package if nec
There are many ways to configure Bitcoin Core, here are a few common examples:
##### Descriptor Wallet and GUI:
-This enables descriptor wallet support and the GUI, assuming SQLite and Qt 5 are installed.
+This enables descriptor wallet support and the GUI, assuming SQLite and Qt 6 are installed.
```bash
cmake -B build -DBUILD_GUI=ON
diff --git a/doc/build-osx.md b/doc/build-osx.md
index 4d92abfc21584..6f921b7782772 100644
--- a/doc/build-osx.md
+++ b/doc/build-osx.md
@@ -92,11 +92,9 @@ Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compi
Qt, libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
``` bash
-brew install qt@5
+brew install qt@6
```
-Note: Building may fail if Qt 6 is installed (`qt` or `qt@6`)
-
Note: Building with Qt binaries downloaded from the Qt website is not officially supported.
See the notes in [#7714](https://github.com/bitcoin/bitcoin/issues/7714).
diff --git a/doc/build-unix.md b/doc/build-unix.md
index 7ebff97bbcb42..df7d6f3349bb1 100644
--- a/doc/build-unix.md
+++ b/doc/build-unix.md
@@ -73,11 +73,13 @@ GUI dependencies:
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install
the necessary parts of Qt, the libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
- sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools
+ sudo apt-get install qt6-base-dev qt6-tools-dev qt6-l10n-tools
+
+For Qt 6.5 and later, the `libxcb-cursor0` package must be installed at runtime.
Additionally, to support Wayland protocol for modern desktop environments:
- sudo apt install qtwayland5
+ sudo apt install qt6-wayland
The GUI will be able to encode addresses in QR codes unless this feature is explicitly disabled. To install libqrencode, run:
@@ -121,11 +123,13 @@ GUI dependencies:
Bitcoin Core includes a GUI built with the cross-platform Qt Framework. To compile the GUI, we need to install
the necessary parts of Qt, the libqrencode and pass `-DBUILD_GUI=ON`. Skip if you don't intend to use the GUI.
- sudo dnf install qt5-qttools-devel qt5-qtbase-devel
+ sudo dnf install qt6-qtbase-devel qt6-qttools-devel
+
+For Qt 6.5 and later, the `xcb-util-cursor` package must be installed at runtime.
Additionally, to support Wayland protocol for modern desktop environments:
- sudo dnf install qt5-qtwayland
+ sudo dnf install qt6-qtwayland
The GUI will be able to encode addresses in QR codes unless this feature is explicitly disabled. To install libqrencode, run:
diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt
index 797b49c624dd2..20c77e5bb3421 100644
--- a/src/qt/CMakeLists.txt
+++ b/src/qt/CMakeLists.txt
@@ -11,21 +11,35 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
string(APPEND CMAKE_OBJCXX_COMPILE_OBJECT " ${APPEND_CPPFLAGS} ${APPEND_CXXFLAGS}")
endif()
-get_target_property(qt_lib_type Qt5::Core TYPE)
+get_target_property(qt_lib_type Qt6::Core TYPE)
function(import_plugins target)
if(qt_lib_type STREQUAL "STATIC_LIBRARY")
- set(plugins Qt5::QMinimalIntegrationPlugin)
+ set(plugins Qt6::QMinimalIntegrationPlugin)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- list(APPEND plugins Qt5::QXcbIntegrationPlugin)
+ list(APPEND plugins Qt6::QXcbIntegrationPlugin)
elseif(WIN32)
- list(APPEND plugins Qt5::QWindowsIntegrationPlugin Qt5::QWindowsVistaStylePlugin)
+ list(APPEND plugins Qt6::QWindowsIntegrationPlugin Qt6::QWindowsVistaStylePlugin)
elseif(APPLE)
- list(APPEND plugins Qt5::QCocoaIntegrationPlugin Qt5::QMacStylePlugin)
+ list(APPEND plugins Qt6::QCocoaIntegrationPlugin Qt6::QMacStylePlugin)
endif()
- qt5_import_plugins(${target}
+ qt6_import_plugins(${target}
INCLUDE ${plugins}
- EXCLUDE_BY_TYPE imageformats iconengines
+ EXCLUDE_BY_TYPE
+ accessiblebridge
+ platforms
+ platforms_darwin
+ xcbglintegrations
+ platformthemes
+ platforminputcontexts
+ generic
+ iconengines
+ imageformats
+ egldeviceintegrations
+ styles
+ networkaccess
+ networkinformation
+ tls
)
endif()
endfunction()
@@ -45,7 +59,7 @@ set(CMAKE_AUTOUIC_SEARCH_PATHS forms)
# to https://github.com/bitcoin-core/bitcoin-maintainer-tools/blob/main/update-translations.py
file(GLOB ts_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} locale/*.ts)
set_source_files_properties(${ts_files} PROPERTIES OUTPUT_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/locale)
-qt5_add_translation(qm_files ${ts_files})
+qt6_add_translation(qm_files ${ts_files})
configure_file(bitcoin_locale.qrc bitcoin_locale.qrc USE_SOURCE_PERMISSIONS COPYONLY)
@@ -128,7 +142,7 @@ set_property(SOURCE macnotificationhandler.mm
)
target_link_libraries(bitcoinqt
PUBLIC
- Qt5::Widgets
+ Qt6::Widgets
PRIVATE
core_interface
bitcoin_cli
@@ -206,19 +220,33 @@ if(ENABLE_WALLET)
target_link_libraries(bitcoinqt
PRIVATE
bitcoin_wallet
- Qt5::Network
+ Qt6::Network
)
endif()
if(WITH_DBUS)
- target_link_libraries(bitcoinqt PRIVATE Qt5::DBus)
+ target_link_libraries(bitcoinqt PRIVATE Qt6::DBus)
endif()
if(qt_lib_type STREQUAL "STATIC_LIBRARY")
# We want to define static plugins to link ourselves, thus preventing
# automatic linking against a "sane" set of default static plugins.
- qt5_import_plugins(bitcoinqt
- EXCLUDE_BY_TYPE bearer iconengines imageformats platforms styles
+ qt6_import_plugins(bitcoinqt
+ EXCLUDE_BY_TYPE
+ accessiblebridge
+ platforms
+ platforms_darwin
+ xcbglintegrations
+ platformthemes
+ platforminputcontexts
+ generic
+ iconengines
+ imageformats
+ egldeviceintegrations
+ styles
+ networkaccess
+ networkinformation
+ tls
)
endif()
@@ -321,8 +349,8 @@ else()
file(GLOB ui_files ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui)
add_custom_target(translate
COMMAND ${CMAKE_COMMAND} -E env XGETTEXT=${XGETTEXT_EXECUTABLE} COPYRIGHT_HOLDERS=${COPYRIGHT_HOLDERS} ${Python3_EXECUTABLE} ${PROJECT_SOURCE_DIR}/share/qt/extract_strings_qt.py ${translatable_sources}
- COMMAND Qt5::lupdate -no-obsolete -I ${PROJECT_SOURCE_DIR}/src -locations relative ${CMAKE_CURRENT_SOURCE_DIR}/bitcoinstrings.cpp ${ui_files} ${qt_translatable_sources} -ts ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
- COMMAND Qt5::lconvert -drop-translations -o ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf -i ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
+ COMMAND Qt6::lupdate -no-obsolete -I ${PROJECT_SOURCE_DIR}/src -locations relative ${CMAKE_CURRENT_SOURCE_DIR}/bitcoinstrings.cpp ${ui_files} ${qt_translatable_sources} -ts ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
+ COMMAND Qt6::lconvert -drop-translations -o ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf -i ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts
COMMAND ${SED_EXECUTABLE} -i.old -e "s|source-language=\"en\" target-language=\"en\"|source-language=\"en\"|" -e "/<target xml:space=\"preserve\"><\\/target>/d" ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf
COMMAND ${CMAKE_COMMAND} -E rm ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf.old
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp
index 0ee1b359fa91d..48496c5135517 100644
--- a/src/qt/sendcoinsdialog.cpp
+++ b/src/qt/sendcoinsdialog.cpp
@@ -88,7 +88,11 @@ SendCoinsDialog::SendCoinsDialog(const PlatformStyle *_platformStyle, QWidget *p
// Coin Control
connect(ui->pushButtonCoinControl, &QPushButton::clicked, this, &SendCoinsDialog::coinControlButtonClicked);
+#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0))
+ connect(ui->checkBoxCoinControlChange, &QCheckBox::checkStateChanged, this, &SendCoinsDialog::coinControlChangeChecked);
+#else
connect(ui->checkBoxCoinControlChange, &QCheckBox::stateChanged, this, &SendCoinsDialog::coinControlChangeChecked);
+#endif
connect(ui->lineEditCoinControlChange, &QValidatedLineEdit::textEdited, this, &SendCoinsDialog::coinControlChangeEdited);
// Coin Control: clipboard actions
@@ -183,8 +187,13 @@ void SendCoinsDialog::setModel(WalletModel *_model)
#endif
connect(ui->customFee, &BitcoinAmountField::valueChanged, this, &SendCoinsDialog::coinControlUpdateLabels);
+#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0))
+ connect(ui->optInRBF, &QCheckBox::checkStateChanged, this, &SendCoinsDialog::updateSmartFeeLabel);
+ connect(ui->optInRBF, &QCheckBox::checkStateChanged, this, &SendCoinsDialog::coinControlUpdateLabels);
+#else
connect(ui->optInRBF, &QCheckBox::stateChanged, this, &SendCoinsDialog::updateSmartFeeLabel);
connect(ui->optInRBF, &QCheckBox::stateChanged, this, &SendCoinsDialog::coinControlUpdateLabels);
+#endif
CAmount requiredFee = model->wallet().getRequiredFee(1000);
ui->customFee->SetMinValue(requiredFee);
if (ui->customFee->value() < requiredFee) {
@@ -944,7 +953,11 @@ void SendCoinsDialog::coinControlButtonClicked()
}
// Coin Control: checkbox custom change address
+#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0))
+void SendCoinsDialog::coinControlChangeChecked(Qt::CheckState state)
+#else
void SendCoinsDialog::coinControlChangeChecked(int state)
+#endif
{
if (state == Qt::Unchecked)
{
diff --git a/src/qt/sendcoinsdialog.h b/src/qt/sendcoinsdialog.h
index 4e861e55bb3b7..6ab26df177857 100644
--- a/src/qt/sendcoinsdialog.h
+++ b/src/qt/sendcoinsdialog.h
@@ -103,7 +103,11 @@ private Q_SLOTS:
void refreshBalance();
void coinControlFeatureChanged(bool);
void coinControlButtonClicked();
+#if (QT_VERSION >= QT_VERSION_CHECK(6, 7, 0))
+ void coinControlChangeChecked(Qt::CheckState);
+#else
void coinControlChangeChecked(int);
+#endif
void coinControlChangeEdited(const QString &);
void coinControlUpdateLabels();
void coinControlClipboardQuantity();
diff --git a/src/qt/test/CMakeLists.txt b/src/qt/test/CMakeLists.txt
index 3acdfeade3421..cbfb144596bcc 100644
--- a/src/qt/test/CMakeLists.txt
+++ b/src/qt/test/CMakeLists.txt
@@ -20,7 +20,7 @@ target_link_libraries(test_bitcoin-qt
test_util
bitcoin_node
Boost::headers
- Qt5::Test
+ Qt6::Test
)
import_plugins(test_bitcoin-qt)