mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-29 10:19:26 +02:00
Merge bitcoin/bitcoin#20641: depends: Use Qt top-level build facilities
1155978d8f
build, qt: Do not install *.prl files (Hennadii Stepanov)763793b60e
build, qt: Fix wrong cross-compiling detection on macOS (Hennadii Stepanov)30982721ab
build, qt: Force bootstrap while building linguist tools (Hennadii Stepanov)689320e307
build, qt: Drop translations.pro hack (Hennadii Stepanov)6a1f98f253
build, qt: Drop lrelease dependency patch (Hennadii Stepanov)39e561e087
build, qt: Add linguist_tools list (Hennadii Stepanov)27d3def1c6
build: Use Qt top-level build facilities (Hennadii Stepanov) Pull request description: This PR: - uses Qt top-level build facilities without the need to download all-in-one archive - is based on **BlockMechanic**'s [idea](https://github.com/bitcoin/bitcoin/pull/20600), and is an alternative to #20600 - makes it easy to integrate [new modules](https://github.com/bitcoin/bitcoin/pull/16883) into static builds - has the minimal diff - makes the qt package build process streamlined by dropping some patches and hacks (an alternative to #21420 and #20642) Fixes #18536 (a non-intrusive alternative to #21589 and #19785). Fixes #14648. Fixes #21588 (a non-intrusive alternative to #21591). Required for adding [Wayland support](https://github.com/bitcoin/bitcoin/issues/19950) on Linux. --- **Note for reviewers**: With 9046de8a4cbc3899fed9eae084115f423e7ac5bd from #21995 it is easy to verify that there are no changes in the resulted `qt` package archive on the per commit basis. For example, for `HOST=i686-pc-linux-gnu` no commit in this PR introduces any changes. ACKs for top commit: fanquake: ACK1155978d8f
Tree-SHA512: 667b06b72cb7ff26d68b9b88e8dddb51084783ca9e3d80b3392710794c1dc7fd77bbcc3ccf4ccece9919d33b9bf8fce13c5059502bd228021dc7c93fdb87ca7a
This commit is contained in:
@ -6,9 +6,11 @@ $(package)_file_name=qtbase-$($(package)_suffix)
|
||||
$(package)_sha256_hash=1c1b4e33137ca77881074c140d54c3c9747e845a31338cfe8680f171f0bc3a39
|
||||
$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon
|
||||
$(package)_qt_libs=corelib network widgets gui plugins testlib
|
||||
$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch
|
||||
$(package)_linguist_tools = lrelease lupdate lconvert
|
||||
$(package)_patches = qt.pro qttools_src.pro
|
||||
$(package)_patches += fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch
|
||||
$(package)_patches+= fix_android_qmake_conf.patch fix_android_jni_static.patch dont_hardcode_pwd.patch
|
||||
$(package)_patches+= drop_lrelease_dependency.patch no_sdk_version_check.patch
|
||||
$(package)_patches+= no_sdk_version_check.patch
|
||||
$(package)_patches+= fix_lib_paths.patch fix_android_pch.patch
|
||||
$(package)_patches+= qtbase-moc-ignore-gcc-macro.patch fix_limits_header.patch
|
||||
|
||||
@ -64,6 +66,7 @@ $(package)_config_opts += -no-system-proxies
|
||||
$(package)_config_opts += -no-use-gold-linker
|
||||
$(package)_config_opts += -nomake examples
|
||||
$(package)_config_opts += -nomake tests
|
||||
$(package)_config_opts += -nomake tools
|
||||
$(package)_config_opts += -opensource
|
||||
$(package)_config_opts += -pkg-config
|
||||
$(package)_config_opts += -prefix $(host_prefix)
|
||||
@ -113,14 +116,13 @@ $(package)_config_opts_darwin = -no-dbus
|
||||
$(package)_config_opts_darwin += -no-opengl
|
||||
$(package)_config_opts_darwin += -pch
|
||||
$(package)_config_opts_darwin += -no-feature-corewlan
|
||||
$(package)_config_opts_darwin += -device-option QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION)
|
||||
$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION)
|
||||
|
||||
ifneq ($(build_os),darwin)
|
||||
$(package)_config_opts_darwin += -xplatform macx-clang-linux
|
||||
$(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK)
|
||||
$(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION)
|
||||
$(package)_config_opts_darwin += -device-option CROSS_COMPILE="$(host)-"
|
||||
$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION)
|
||||
$(package)_config_opts_darwin += -device-option MAC_TARGET=$(host)
|
||||
$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION)
|
||||
endif
|
||||
@ -201,26 +203,24 @@ endef
|
||||
#
|
||||
# 1. Apply our patches to the extracted source. See each patch for more info.
|
||||
#
|
||||
# 2. Point to lrelease in qttools/bin/lrelease; otherwise Qt will look for it in
|
||||
# $(host)/native/bin/lrelease and not find it.
|
||||
# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf.
|
||||
#
|
||||
# 3. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf.
|
||||
#
|
||||
# 4. After making a copy of the mkspec for the linux-arm-gnueabi host, named
|
||||
# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named
|
||||
# bitcoin-linux-g++, replace instances of linux-arm-gnueabi with $(host). This
|
||||
# way we can generically support hosts like riscv64-linux-gnu, which Qt doesn't
|
||||
# ship a mkspec for. See it's usage in config_opts_* above.
|
||||
#
|
||||
# 5. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds.
|
||||
# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds.
|
||||
#
|
||||
# 6. Do similar for the win32-g++ mkspec.
|
||||
# 5. Do similar for the win32-g++ mkspec.
|
||||
#
|
||||
# 7. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466.
|
||||
# 6. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466.
|
||||
#
|
||||
# 8. Adjust a regex in toolchain.prf, to accommodate Guix's usage of
|
||||
# 7. Adjust a regex in toolchain.prf, to accommodate Guix's usage of
|
||||
# CROSS_LIBRARY_PATH. See #15277.
|
||||
define $(package)_preprocess_cmds
|
||||
patch -p1 -i $($(package)_patch_dir)/drop_lrelease_dependency.patch && \
|
||||
cp $($(package)_patch_dir)/qt.pro qt.pro && \
|
||||
cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \
|
||||
patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \
|
||||
@ -232,7 +232,6 @@ define $(package)_preprocess_cmds
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_lib_paths.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \
|
||||
patch -p1 -i $($(package)_patch_dir)/fix_limits_header.patch && \
|
||||
sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \
|
||||
mkdir -p qtbase/mkspecs/macx-clang-linux &&\
|
||||
cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\
|
||||
cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \
|
||||
@ -249,35 +248,22 @@ endef
|
||||
define $(package)_config_cmds
|
||||
export PKG_CONFIG_SYSROOT_DIR=/ && \
|
||||
export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \
|
||||
export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \
|
||||
export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \
|
||||
cd qtbase && \
|
||||
./configure $($(package)_config_opts) && \
|
||||
cd .. && \
|
||||
$(MAKE) -C qtbase sub-src-clean && \
|
||||
qtbase/bin/qmake -o qttranslations/Makefile qttranslations/qttranslations.pro && \
|
||||
qtbase/bin/qmake -o qttranslations/translations/Makefile qttranslations/translations/translations.pro && \
|
||||
qtbase/bin/qmake -o qttools/src/linguist/lrelease/Makefile qttools/src/linguist/lrelease/lrelease.pro && \
|
||||
qtbase/bin/qmake -o qttools/src/linguist/lupdate/Makefile qttools/src/linguist/lupdate/lupdate.pro && \
|
||||
qtbase/bin/qmake -o qttools/src/linguist/lconvert/Makefile qttools/src/linguist/lconvert/lconvert.pro
|
||||
./configure -top-level $($(package)_config_opts)
|
||||
endef
|
||||
|
||||
define $(package)_build_cmds
|
||||
$(MAKE) -C qtbase/src $(addprefix sub-,$($(package)_qt_libs)) && \
|
||||
$(MAKE) -C qttools/src/linguist/lrelease && \
|
||||
$(MAKE) -C qttools/src/linguist/lupdate && \
|
||||
$(MAKE) -C qttools/src/linguist/lconvert && \
|
||||
$(MAKE) -C qttranslations
|
||||
$(MAKE)
|
||||
endef
|
||||
|
||||
define $(package)_stage_cmds
|
||||
$(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \
|
||||
$(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||
$(MAKE) -C qttools/src/linguist/lupdate INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||
$(MAKE) -C qttools/src/linguist/lconvert INSTALL_ROOT=$($(package)_staging_dir) install_target && \
|
||||
$(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \
|
||||
$(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets
|
||||
endef
|
||||
|
||||
define $(package)_postprocess_cmds
|
||||
rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \
|
||||
rm -f lib/lib*.la lib/*.prl plugins/*/*.prl
|
||||
rm -f lib/lib*.la
|
||||
endef
|
||||
|
@ -1,20 +0,0 @@
|
||||
commit 67b3ed7406e1d0762188dbad2c44a06824ba0778
|
||||
Author: fanquake <fanquake@gmail.com>
|
||||
Date: Tue Aug 18 15:24:01 2020 +0800
|
||||
|
||||
Drop dependency on lrelease
|
||||
|
||||
Qts buildsystem insists on using the installed lrelease, but gets
|
||||
confused about how to find it. Since we manually control the build
|
||||
order, just drop the dependency.
|
||||
|
||||
See #9469
|
||||
|
||||
diff --git a/qttranslations/translations/translations.pro b/qttranslations/translations/translations.pro
|
||||
index 694544c..eff339d 100644
|
||||
--- a/qttranslations/translations/translations.pro
|
||||
+++ b/qttranslations/translations/translations.pro
|
||||
@@ -107,3 +107,2 @@ updateqm.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
|
||||
silent:updateqm.commands = @echo lrelease ${QMAKE_FILE_IN} && $$updateqm.commands
|
||||
-updateqm.depends = $$LRELEASE_EXE
|
||||
updateqm.name = LRELEASE ${QMAKE_FILE_IN}
|
@ -8,7 +8,6 @@ include(../common/clang-mac.conf)
|
||||
QMAKE_MAC_SDK_PATH=$${MAC_SDK_PATH}
|
||||
QMAKE_XCODE_VERSION = $${XCODE_VERSION}
|
||||
QMAKE_XCODE_DEVELOPER_PATH=/Developer
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = $${MAC_MIN_VERSION}
|
||||
QMAKE_MAC_SDK=macosx
|
||||
QMAKE_MAC_SDK.macosx.Path = $${MAC_SDK_PATH}
|
||||
QMAKE_MAC_SDK.macosx.platform_name = macosx
|
||||
|
16
depends/patches/qt/qt.pro
Normal file
16
depends/patches/qt/qt.pro
Normal file
@ -0,0 +1,16 @@
|
||||
# Create the super cache so modules will add themselves to it.
|
||||
cache(, super)
|
||||
|
||||
!QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build))
|
||||
|
||||
prl = no_install_prl
|
||||
CONFIG += $$prl
|
||||
cache(CONFIG, add stash, prl)
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = qtbase qttools qttranslations
|
||||
|
||||
qttools.depends = qtbase
|
||||
qttranslations.depends = qttools
|
||||
|
||||
load(qt_configure)
|
6
depends/patches/qt/qttools_src.pro
Normal file
6
depends/patches/qt/qttools_src.pro
Normal file
@ -0,0 +1,6 @@
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = linguist
|
||||
|
||||
fb = force_bootstrap
|
||||
CONFIG += $$fb
|
||||
cache(CONFIG, add, fb)
|
Reference in New Issue
Block a user