diff --git a/depends/README.md b/depends/README.md index 87d607e371c..ab1df59a884 100644 --- a/depends/README.md +++ b/depends/README.md @@ -47,7 +47,7 @@ The paths are automatically configured and no other options are needed. Skip the following packages if you don't intend to use the GUI and will build with [`NO_QT=1`](#dependency-options): - apt install bison g++ pkgconf python3 xz-utils + apt install bison g++ ninja-build pkgconf python3 xz-utils #### For macOS cross compilation diff --git a/depends/packages/libxcb_util_cursor.mk b/depends/packages/libxcb_util_cursor.mk new file mode 100644 index 00000000000..b308890638d --- /dev/null +++ b/depends/packages/libxcb_util_cursor.mk @@ -0,0 +1,31 @@ +package=libxcb_util_cursor +$(package)_version=0.1.5 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-cursor-$($(package)_version).tar.gz +$(package)_sha256_hash=0e9c5446dc6f3beb8af6ebfcc9e27bcc6da6fe2860f7fc07b99144dfa568e93b +$(package)_dependencies=libxcb libxcb_util_render libxcb_util_image + +define $(package)_set_vars +$(package)_config_opts = --disable-static +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 61cf66230c7..e24829481e3 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -8,7 +8,7 @@ qrencode_linux_packages = qrencode qrencode_darwin_packages = qrencode qrencode_mingw32_packages = qrencode -qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_cursor libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm qt_darwin_packages=qt qt_mingw32_packages=qt diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index d41ac4e784e..1c3db6d3c0a 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -1,119 +1,97 @@ package=qt -$(package)_version=5.15.16 -$(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules -$(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz +$(package)_version=6.7.3 +$(package)_download_path=https://download.qt.io/archive/qt/6.7/$($(package)_version)/submodules +$(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=b04815058c18058b6ba837206756a2c87d1391f07a0dcb0dd314f970fd041592 -$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm -$(package)_qt_libs=corelib network widgets gui plugins testlib -$(package)_linguist_tools = lrelease lupdate lconvert -$(package)_patches = qt.pro -$(package)_patches += qttools_src.pro -$(package)_patches += mac-qmake.conf -$(package)_patches += no-xlib.patch -$(package)_patches += dont_hardcode_pwd.patch +$(package)_sha256_hash=8ccbb9ab055205ac76632c9eeddd1ed6fc66936fc56afc2ed0fd5d9e23da3097 +$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_cursor libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +$(package)_patches := dont_hardcode_pwd.patch $(package)_patches += qtbase-moc-ignore-gcc-macro.patch -$(package)_patches += no_warnings_for_symbols.patch +$(package)_patches += qtbase_avoid_native_float16.patch +$(package)_patches += qtbase_avoid_qmain.patch +$(package)_patches += qtbase_platformsupport.patch +$(package)_patches += qtbase_plugins_cocoa.patch +$(package)_patches += qtbase_skip_tools.patch $(package)_patches += rcc_hardcode_timestamp.patch -$(package)_patches += duplicate_lcqpafonts.patch -$(package)_patches += guix_cross_lib_path.patch -$(package)_patches += memory_resource.patch -$(package)_patches += clang_18_libpng.patch -$(package)_patches += utc_from_string_no_optimize.patch -$(package)_patches += windows_lto.patch -$(package)_patches += darwin_no_libm.patch +$(package)_patches += qttools_skip_dependencies.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) -$(package)_qttranslations_sha256_hash=415dbbb82a75dfc9a7be969e743bee54c0e6867be37bce4cf8f03da39f20112a +$(package)_qttranslations_sha256_hash=dcc762acac043b9bb5e4d369b6d6f53e0ecfcf76a408fe0db5f7ef071c9d6dc8 $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=1cab11887faca54af59f4995ee435c9ad98d194e9e6889c846692c8b6815fc1c +$(package)_qttools_sha256_hash=f03bb7df619cd9ac9dba110e30b7bcab5dd88eb8bdc9cc752563b4367233203f -$(package)_extra_sources = $($(package)_qttranslations_file_name) +$(package)_extra_sources := $($(package)_qttranslations_file_name) $(package)_extra_sources += $($(package)_qttools_file_name) +$(package)_top_download_path=https://code.qt.io/cgit/qt/qt5.git/plain +$(package)_top_cmakelists_file_name=CMakeLists.txt +$(package)_top_cmakelists_download_file=$($(package)_top_cmakelists_file_name)?h=$($(package)_version) +$(package)_top_cmakelists_sha256_hash=9fb720a633c0c0a21c31fe62a34bf617726fed72480d4064f29ca5d6973d513f +$(package)_top_cmake_download_path=$($(package)_top_download_path)/cmake +$(package)_top_cmake_ecmoptionaladdsubdirectory_file_name=ECMOptionalAddSubdirectory.cmake +$(package)_top_cmake_ecmoptionaladdsubdirectory_download_file=$($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name)?h=$($(package)_version) +$(package)_top_cmake_ecmoptionaladdsubdirectory_sha256_hash=97ee8bbfcb0a4bdcc6c1af77e467a1da0c5b386c42be2aa97d840247af5f6f70 +$(package)_top_cmake_qttoplevelhelpers_file_name=QtTopLevelHelpers.cmake +$(package)_top_cmake_qttoplevelhelpers_download_file=$($(package)_top_cmake_qttoplevelhelpers_file_name)?h=$($(package)_version) +$(package)_top_cmake_qttoplevelhelpers_sha256_hash=5ac2a7159ee27b5b86d26ecff44922e7b8f319aa847b7b5766dc17932fd4a294 + +$(package)_extra_sources += $($(package)_top_cmakelists_file_name)-$($(package)_version) +$(package)_extra_sources += $($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name)-$($(package)_version) +$(package)_extra_sources += $($(package)_top_cmake_qttoplevelhelpers_file_name)-$($(package)_version) + define $(package)_set_vars -$(package)_config_env = QT_MAC_SDK_NO_VERSION_CHECK=1 -$(package)_config_opts_release = -release -$(package)_config_opts_release += -silent -$(package)_config_opts_debug = -debug -$(package)_config_opts_debug += -optimized-tools -$(package)_config_opts += -bindir $(build_prefix)/bin -$(package)_config_opts += -c++std c++2a -$(package)_config_opts += -confirm-license -$(package)_config_opts += -hostprefix $(build_prefix) -$(package)_config_opts += -no-compile-examples -$(package)_config_opts += -no-cups -$(package)_config_opts += -no-egl +$(package)_config_opts_release := -release +$(package)_config_opts_debug := -debug +$(package)_config_opts := -no-egl $(package)_config_opts += -no-eglfs $(package)_config_opts += -no-evdev $(package)_config_opts += -no-gif $(package)_config_opts += -no-glib $(package)_config_opts += -no-icu $(package)_config_opts += -no-ico -$(package)_config_opts += -no-iconv $(package)_config_opts += -no-kms $(package)_config_opts += -no-linuxfb $(package)_config_opts += -no-libjpeg $(package)_config_opts += -no-libproxy $(package)_config_opts += -no-libudev -$(package)_config_opts += -no-mimetype-database $(package)_config_opts += -no-mtdev +$(package)_config_opts += -no-opengl $(package)_config_opts += -no-openssl $(package)_config_opts += -no-openvg -$(package)_config_opts += -no-pkg-config $(package)_config_opts += -no-reduce-relocations $(package)_config_opts += -no-schannel $(package)_config_opts += -no-sctp $(package)_config_opts += -no-securetransport -$(package)_config_opts += -no-sql-db2 -$(package)_config_opts += -no-sql-ibase -$(package)_config_opts += -no-sql-oci -$(package)_config_opts += -no-sql-tds -$(package)_config_opts += -no-sql-mysql -$(package)_config_opts += -no-sql-odbc -$(package)_config_opts += -no-sql-psql -$(package)_config_opts += -no-sql-sqlite -$(package)_config_opts += -no-sql-sqlite2 $(package)_config_opts += -no-system-proxies $(package)_config_opts += -no-use-gold-linker $(package)_config_opts += -no-zstd $(package)_config_opts += -nomake examples $(package)_config_opts += -nomake tests -$(package)_config_opts += -nomake tools -$(package)_config_opts += -opensource $(package)_config_opts += -prefix $(host_prefix) +$(package)_config_opts += -qt-doubleconversion +$(package)_config_opts += -qt-harfbuzz $(package)_config_opts += -qt-libpng $(package)_config_opts += -qt-pcre -$(package)_config_opts += -qt-harfbuzz $(package)_config_opts += -qt-zlib $(package)_config_opts += -static -$(package)_config_opts += -v -$(package)_config_opts += -no-feature-bearermanagement +$(package)_config_opts += -no-feature-backtrace $(package)_config_opts += -no-feature-colordialog -$(package)_config_opts += -no-feature-commandlineparser $(package)_config_opts += -no-feature-concurrent $(package)_config_opts += -no-feature-dial -$(package)_config_opts += -no-feature-fontcombobox -$(package)_config_opts += -no-feature-ftp +$(package)_config_opts += -no-feature-gssapi $(package)_config_opts += -no-feature-http $(package)_config_opts += -no-feature-image_heuristic_mask $(package)_config_opts += -no-feature-keysequenceedit $(package)_config_opts += -no-feature-lcdnumber +$(package)_config_opts += -no-feature-libresolv $(package)_config_opts += -no-feature-networkdiskcache $(package)_config_opts += -no-feature-networkproxy -$(package)_config_opts += -no-feature-pdf -$(package)_config_opts += -no-feature-printdialog -$(package)_config_opts += -no-feature-printer -$(package)_config_opts += -no-feature-printpreviewdialog -$(package)_config_opts += -no-feature-printpreviewwidget +$(package)_config_opts += -no-feature-printsupport $(package)_config_opts += -no-feature-sessionmanager $(package)_config_opts += -no-feature-socks5 $(package)_config_opts += -no-feature-sql -$(package)_config_opts += -no-feature-sqlmodel -$(package)_config_opts += -no-feature-statemachine -$(package)_config_opts += -no-feature-syntaxhighlighter -$(package)_config_opts += -no-feature-textbrowser +$(package)_config_opts += -no-feature-textmarkdownreader $(package)_config_opts += -no-feature-textmarkdownwriter $(package)_config_opts += -no-feature-textodfwriter $(package)_config_opts += -no-feature-topleveldomain @@ -123,13 +101,28 @@ $(package)_config_opts += -no-feature-undogroup $(package)_config_opts += -no-feature-undostack $(package)_config_opts += -no-feature-undoview $(package)_config_opts += -no-feature-vnc -$(package)_config_opts += -no-feature-wizard -$(package)_config_opts += -no-feature-xml +$(package)_config_opts += -no-feature-vulkan -$(package)_config_opts_darwin = -no-dbus -$(package)_config_opts_darwin += -no-opengl -$(package)_config_opts_darwin += -pch -$(package)_config_opts_darwin += -no-feature-corewlan +# Core tools. +$(package)_config_opts += -no-feature-androiddeployqt +$(package)_config_opts += -no-feature-macdeployqt +$(package)_config_opts += -no-feature-qmake +$(package)_config_opts += -no-feature-windeployqt + +# Qt Tools module. +$(package)_config_opts += -feature-linguist +$(package)_config_opts += -no-feature-assistant +$(package)_config_opts += -no-feature-clang +$(package)_config_opts += -no-feature-clangcpp +$(package)_config_opts += -no-feature-designer +$(package)_config_opts += -no-feature-pixeltool +$(package)_config_opts += -no-feature-qdoc +$(package)_config_opts += -no-feature-qtattributionsscanner +$(package)_config_opts += -no-feature-qtdiag +$(package)_config_opts += -no-feature-qtplugininfo + +$(package)_config_opts_darwin = -no-pkg-config +$(package)_config_opts_darwin += -no-dbus $(package)_config_opts_darwin += -no-freetype $(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION) @@ -147,49 +140,55 @@ $(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS $(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 endif -$(package)_config_opts_linux = -xcb -$(package)_config_opts_linux += -no-xcb-xlib -$(package)_config_opts_linux += -no-feature-xlib -$(package)_config_opts_linux += -system-freetype +$(package)_config_opts_linux := -dbus-runtime $(package)_config_opts_linux += -fontconfig -$(package)_config_opts_linux += -no-opengl -$(package)_config_opts_linux += -no-feature-vulkan -$(package)_config_opts_linux += -dbus-runtime +$(package)_config_opts_linux += -no-feature-process +$(package)_config_opts_linux += -no-feature-xlib +$(package)_config_opts_linux += -no-xcb-xlib +$(package)_config_opts_linux += -pkg-config +$(package)_config_opts_linux += -system-freetype +$(package)_config_opts_linux += -xcb ifneq ($(LTO),) $(package)_config_opts_linux += -ltcg endif -ifneq (,$(findstring clang,$($(package)_cxx))) - ifneq (,$(findstring -stdlib=libc++,$($(package)_cxx))) - $(package)_config_opts_linux += -platform linux-clang-libc++ -xplatform linux-clang-libc++ - else - $(package)_config_opts_linux += -platform linux-clang -xplatform linux-clang - endif -else - $(package)_config_opts_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ -endif - -$(package)_config_opts_mingw32 = -no-opengl -$(package)_config_opts_mingw32 += -no-dbus +$(package)_config_opts_mingw32 := -no-dbus $(package)_config_opts_mingw32 += -no-freetype -$(package)_config_opts_mingw32 += -xplatform win32-g++ -$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'" -$(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'" -$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'" -$(package)_config_opts_mingw32 += "QMAKE_LINK = '$($(package)_cxx)'" -$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'" -$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'" -$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" -$(package)_config_opts_mingw32 += -pch +$(package)_config_opts_mingw32 += -no-pkg-config ifneq ($(LTO),) $(package)_config_opts_mingw32 += -ltcg endif + +# CMake build options. +$(package)_config_env := CC="$$($(package)_cc)" +$(package)_config_env += CXX="$$($(package)_cxx)" + +$(package)_cmake_opts := -DCMAKE_PREFIX_PATH=$(host_prefix) +$(package)_cmake_opts += -DQT_FEATURE_cxx20=ON +$(package)_cmake_opts += -DQT_ENABLE_CXX_EXTENSIONS=OFF +ifneq ($(V),) +$(package)_cmake_opts += --log-level=STATUS +endif + +$(package)_cmake_opts += -DQT_USE_DEFAULT_CMAKE_OPTIMIZATION_FLAGS=ON +$(package)_cmake_opts += -DCMAKE_C_FLAGS="$$($(package)_cppflags) $$($$($(package)_type)_CFLAGS) -ffile-prefix-map=$$($(package)_extract_dir)=/usr" +$(package)_cmake_opts += -DCMAKE_C_FLAGS_RELEASE="$$($$($(package)_type)_release_CFLAGS)" +$(package)_cmake_opts += -DCMAKE_C_FLAGS_DEBUG="$$($$($(package)_type)_debug_CFLAGS)" +$(package)_cmake_opts += -DCMAKE_CXX_FLAGS="$$($(package)_cppflags) $$($$($(package)_type)_CXXFLAGS) -ffile-prefix-map=$$($(package)_extract_dir)=/usr" +$(package)_cmake_opts += -DCMAKE_CXX_FLAGS_RELEASE="$$($$($(package)_type)_release_CXXFLAGS)" +$(package)_cmake_opts += -DCMAKE_CXX_FLAGS_DEBUG="$$($$($(package)_type)_debug_CXXFLAGS)" +$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS="$$($$($(package)_type)_LDFLAGS)" +$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS_RELEASE="$$($$($(package)_type)_release_LDFLAGS)" +$(package)_cmake_opts += -DCMAKE_EXE_LINKER_FLAGS_DEBUG="$$($$($(package)_type)_debug_LDFLAGS)" endef define $(package)_fetch_cmds $(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ $(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttranslations_file_name),$($(package)_qttranslations_file_name),$($(package)_qttranslations_sha256_hash)) && \ -$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash)) +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_qttools_file_name),$($(package)_qttools_file_name),$($(package)_qttools_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_top_download_path),$($(package)_top_cmakelists_download_file),$($(package)_top_cmakelists_file_name)-$($(package)_version),$($(package)_top_cmakelists_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_top_cmake_download_path),$($(package)_top_cmake_ecmoptionaladdsubdirectory_download_file),$($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name)-$($(package)_version),$($(package)_top_cmake_ecmoptionaladdsubdirectory_sha256_hash)) && \ +$(call fetch_file,$(package),$($(package)_top_cmake_download_path),$($(package)_top_cmake_qttoplevelhelpers_download_file),$($(package)_top_cmake_qttoplevelhelpers_file_name)-$($(package)_version),$($(package)_top_cmake_qttoplevelhelpers_sha256_hash)) endef define $(package)_extract_cmds @@ -197,76 +196,47 @@ define $(package)_extract_cmds echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qttranslations_sha256_hash) $($(package)_source_dir)/$($(package)_qttranslations_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_top_cmakelists_sha256_hash) $($(package)_source_dir)/$($(package)_top_cmakelists_file_name)-$($(package)_version)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_top_cmake_ecmoptionaladdsubdirectory_sha256_hash) $($(package)_source_dir)/$($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name)-$($(package)_version)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ + echo "$($(package)_top_cmake_qttoplevelhelpers_sha256_hash) $($(package)_source_dir)/$($(package)_top_cmake_qttoplevelhelpers_file_name)-$($(package)_version)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ mkdir qtbase && \ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \ mkdir qttranslations && \ $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \ mkdir qttools && \ - $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools && \ + cp $($(package)_source_dir)/$($(package)_top_cmakelists_file_name)-$($(package)_version) ./$($(package)_top_cmakelists_file_name) && \ + mkdir cmake && \ + cp $($(package)_source_dir)/$($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name)-$($(package)_version) cmake/$($(package)_top_cmake_ecmoptionaladdsubdirectory_file_name) && \ + cp $($(package)_source_dir)/$($(package)_top_cmake_qttoplevelhelpers_file_name)-$($(package)_version) cmake/$($(package)_top_cmake_qttoplevelhelpers_file_name) endef -# Preprocessing steps work as follows: -# -# 1. Apply our patches to the extracted source. See each patch for more info. -# -# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf. -# -# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named -# bitcoin-linux-g++, replace tool names with $($($(package)_type)_TOOL). -# -# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds. -# -# 5. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. define $(package)_preprocess_cmds - 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)/no-xlib.patch && \ patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ - patch -p1 -i $($(package)_patch_dir)/memory_resource.patch && \ - patch -p1 -i $($(package)_patch_dir)/no_warnings_for_symbols.patch && \ - patch -p1 -i $($(package)_patch_dir)/clang_18_libpng.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase_avoid_native_float16.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase_avoid_qmain.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase_platformsupport.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase_plugins_cocoa.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase_skip_tools.patch && \ patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ - patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \ - patch -p1 -i $($(package)_patch_dir)/utc_from_string_no_optimize.patch && \ - patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \ - patch -p1 -i $($(package)_patch_dir)/windows_lto.patch && \ - patch -p1 -i $($(package)_patch_dir)/darwin_no_libm.patch && \ - 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 && \ - cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \ - sed -i.old "s|arm-linux-gnueabi-gcc|$($($(package)_type)_CC)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - sed -i.old "s|arm-linux-gnueabi-g++|$($($(package)_type)_CXX)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - sed -i.old "s|arm-linux-gnueabi-ar|$($($(package)_type)_AR)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - sed -i.old "s|arm-linux-gnueabi-objcopy|$($($(package)_type)_OBJCOPY)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - sed -i.old "s|arm-linux-gnueabi-nm|$($($(package)_type)_NM)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - sed -i.old "s|arm-linux-gnueabi-strip|$($($(package)_type)_STRIP)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ - echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ - echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ - sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ - sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf + patch -p1 -i $($(package)_patch_dir)/qttools_skip_dependencies.patch endef define $(package)_config_cmds cd qtbase && \ - ./configure -top-level $($(package)_config_opts) + ./configure -top-level $($(package)_config_opts) -- $($(package)_cmake_opts) endef define $(package)_build_cmds - $(MAKE) + cmake --build . -- $$(filter -j%,$$(MAKEFLAGS)) endef -# TODO: Investigate whether specific targets can be used here to minimize the amount of files/components installed. define $(package)_stage_cmds - $(MAKE) -C qtbase INSTALL_ROOT=$($(package)_staging_dir) install && \ - $(MAKE) -C qttools INSTALL_ROOT=$($(package)_staging_dir) install && \ - $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets + cmake --install . --prefix $($(package)_staging_prefix_dir) endef define $(package)_postprocess_cmds - rm -rf doc/ native/lib/ lib/pkgconfig/ && \ - rm -f lib/lib*.la lib/Qt5*.la + rm -rf doc/ endef diff --git a/depends/patches/qt/clang_18_libpng.patch b/depends/patches/qt/clang_18_libpng.patch deleted file mode 100644 index e807905b321..00000000000 --- a/depends/patches/qt/clang_18_libpng.patch +++ /dev/null @@ -1,40 +0,0 @@ -fix Qt macOS build with Clang 18 - - See: - https://github.com/pnggroup/libpng/commit/893b8113f04d408cc6177c6de19c9889a48faa24. - - In a similar manner as zlib (madler/zlib#895), - libpng contains a header configuration that's no longer valid and - hasn't been exercised for the macOS target. - - - The target OS conditional macros are misused. Specifically - `TARGET_OS_MAC` covers all Apple targets, including iOS, and it - should not be checked with `#if defined` as they would always be - defined (to either 1 or 0) on Apple platforms. - - `#include ` no longer works for the macOS target and results - in a compilation failure. macOS ships all required functions in - `math.h`, and clients should use `math.h` instead. - ---- a/qtbase/src/3rdparty/libpng/pngpriv.h -+++ b/qtbase/src/3rdparty/libpng/pngpriv.h -@@ -514,18 +514,8 @@ - */ - # include - --# if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \ -- defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC) -- /* We need to check that hasn't already been included earlier -- * as it seems it doesn't agree with , yet we should really use -- * if possible. -- */ --# if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) --# include --# endif --# else --# include --# endif -+# include -+ - # if defined(_AMIGA) && defined(__SASC) && defined(_M68881) - /* Amiga SAS/C: We must include builtin FPU functions when compiling using - * MATH=68881 diff --git a/depends/patches/qt/darwin_no_libm.patch b/depends/patches/qt/darwin_no_libm.patch deleted file mode 100644 index 38a94beeb7a..00000000000 --- a/depends/patches/qt/darwin_no_libm.patch +++ /dev/null @@ -1,17 +0,0 @@ -build: remove explicit -lm link from qttools - -This causes issues with at least the macOS cross build, and shouldn't -actually be required anywhere else. GCC with libstdc++ will already get libm. - ---- a/qtbase/src/corelib/tools/tools.pri -+++ b/qtbase/src/corelib/tools/tools.pri -@@ -111,9 +111,6 @@ qtConfig(easingcurve) { - tools/qtimeline.cpp - } - --# Note: libm should be present by default becaue this is C++ --unix:!macx-icc:!vxworks:!haiku:!integrity:!wasm: LIBS_PRIVATE += -lm -- - TR_EXCLUDE += ../3rdparty/* - - # MIPS DSP diff --git a/depends/patches/qt/dont_hardcode_pwd.patch b/depends/patches/qt/dont_hardcode_pwd.patch index f6955b2f20c..217b6bec15b 100644 --- a/depends/patches/qt/dont_hardcode_pwd.patch +++ b/depends/patches/qt/dont_hardcode_pwd.patch @@ -13,15 +13,39 @@ diff --git a/qtbase/configure b/qtbase/configure index 08b49a8d..faea5b55 100755 --- a/qtbase/configure +++ b/qtbase/configure -@@ -36,9 +36,9 @@ - relconf=`basename $0` +@@ -9,9 +9,9 @@ + # the directory of this script is the "source tree" - relpath=`dirname $0` + relpath=`dirname "$0"` -relpath=`(cd "$relpath"; /bin/pwd)` +relpath=`(cd "$relpath"; pwd)` # the current directory is the "build tree" or "object tree" -outpath=`/bin/pwd` +outpath=`pwd` + outpathPrefix=$outpath + + # do this early so we don't store it in config.status - WHICH="which" +--- a/qtbase/bin/qt-cmake.in ++++ b/qtbase/bin/qt-cmake.in +@@ -2,7 +2,7 @@ + + # The directory of this script is the expanded absolute path of the "$qt_prefix/bin" directory. + script_dir_path=`dirname $0` +-script_dir_path=`(cd "$script_dir_path"; /bin/pwd)` ++script_dir_path=`(cd "$script_dir_path"; pwd)` + + # Try to use original cmake, otherwise to make it relocatable, use any cmake found in PATH. + original_cmake_path="@CMAKE_COMMAND@" +--- a/qtbase/bin/qt-configure-module.in ++++ b/qtbase/bin/qt-configure-module.in +@@ -2,7 +2,7 @@ + set -eu + + script_dir_path=`dirname $0` +-script_dir_path=`(cd "$script_dir_path"; /bin/pwd)` ++script_dir_path=`(cd "$script_dir_path"; pwd)` + + printUsage() + { diff --git a/depends/patches/qt/duplicate_lcqpafonts.patch b/depends/patches/qt/duplicate_lcqpafonts.patch deleted file mode 100644 index c460b51dcff..00000000000 --- a/depends/patches/qt/duplicate_lcqpafonts.patch +++ /dev/null @@ -1,104 +0,0 @@ -QtGui: Fix duplication of logging category lcQpaFonts - -Move it to qplatformfontdatabase.h. - -Upstream commit: - - Qt 6.0: ab01885e48873fb2ad71841a3f1627fe4d9cd835 - ---- a/qtbase/src/gui/text/qplatformfontdatabase.cpp -+++ b/qtbase/src/gui/text/qplatformfontdatabase.cpp -@@ -52,6 +52,8 @@ - - QT_BEGIN_NAMESPACE - -+Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") -+ - void qt_registerFont(const QString &familyname, const QString &stylename, - const QString &foundryname, int weight, - QFont::Style style, int stretch, bool antialiased, - ---- a/qtbase/src/gui/text/qplatformfontdatabase.h -+++ b/qtbase/src/gui/text/qplatformfontdatabase.h -@@ -50,6 +50,7 @@ - // - - #include -+#include - #include - #include - #include -@@ -62,6 +63,7 @@ - - QT_BEGIN_NAMESPACE - -+Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) - - class QWritingSystemsPrivate; - - ---- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm -+++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm -@@ -86,8 +86,6 @@ - - QT_BEGIN_NAMESPACE - --Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") -- - static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f); - - bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length) - ---- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h -+++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h -@@ -64,8 +64,6 @@ - - QT_BEGIN_NAMESPACE - --Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) -- - class QCoreTextFontEngine : public QFontEngine - { - Q_GADGET - ---- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp -+++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp -@@ -68,8 +68,6 @@ - - QT_BEGIN_NAMESPACE - --Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") -- - #ifndef QT_NO_DIRECTWRITE - // ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711) - - ---- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h -+++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h -@@ -63,8 +63,6 @@ - - QT_BEGIN_NAMESPACE - --Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) -- - class QWindowsFontEngineData - { - Q_DISABLE_COPY_MOVE(QWindowsFontEngineData) - ---- a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp -+++ b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp -@@ -40,6 +40,7 @@ - #include "qgenericunixthemes_p.h" - - #include "qpa/qplatformtheme_p.h" -+#include "qpa/qplatformfontdatabase.h" - - #include - #include -@@ -76,7 +77,6 @@ - QT_BEGIN_NAMESPACE - - Q_DECLARE_LOGGING_CATEGORY(qLcTray) --Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") - - ResourceHelper::ResourceHelper() - { diff --git a/depends/patches/qt/guix_cross_lib_path.patch b/depends/patches/qt/guix_cross_lib_path.patch deleted file mode 100644 index 7911dc21d7d..00000000000 --- a/depends/patches/qt/guix_cross_lib_path.patch +++ /dev/null @@ -1,17 +0,0 @@ -Facilitate guix building with CROSS_LIBRARY_PATH - -See discussion in https://github.com/bitcoin/bitcoin/pull/15277. - ---- a/qtbase/mkspecs/features/toolchain.prf -+++ b/qtbase/mkspecs/features/toolchain.prf -@@ -236,8 +236,8 @@ isEmpty($${target_prefix}.INCDIRS) { - add_libraries = false - for (line, output) { - line ~= s/^[ \\t]*// # remove leading spaces -- contains(line, "LIBRARY_PATH=.*") { -- line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= -+ contains(line, "(CROSS_)?LIBRARY_PATH=.*") { -+ line ~= s/^(CROSS_)?LIBRARY_PATH=// # remove leading (CROSS_)?LIBRARY_PATH= - equals(QMAKE_HOST.os, Windows): \ - paths = $$split(line, ;) - else: \ diff --git a/depends/patches/qt/mac-qmake.conf b/depends/patches/qt/mac-qmake.conf deleted file mode 100644 index a29db20004b..00000000000 --- a/depends/patches/qt/mac-qmake.conf +++ /dev/null @@ -1,23 +0,0 @@ -MAKEFILE_GENERATOR = UNIX -CONFIG += app_bundle incremental lib_version_first absolute_library_soname -QMAKE_INCREMENTAL_STYLE = sublib -include(../common/macx.conf) -include(../common/gcc-base-mac.conf) -include(../common/clang.conf) -include(../common/clang-mac.conf) -QMAKE_MAC_SDK_PATH=$${MAC_SDK_PATH} -QMAKE_XCODE_VERSION = $${XCODE_VERSION} -QMAKE_XCODE_DEVELOPER_PATH=/Developer -QMAKE_MAC_SDK=macosx -QMAKE_MAC_SDK.macosx.Path = $${MAC_SDK_PATH} -QMAKE_MAC_SDK.macosx.platform_name = macosx -QMAKE_MAC_SDK.macosx.SDKVersion = $${MAC_SDK_VERSION} -QMAKE_MAC_SDK.macosx.PlatformPath = /phony -QMAKE_CXXFLAGS += -fuse-ld=lld -!host_build: QMAKE_CFLAGS += -target $${MAC_TARGET} -!host_build: QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS -!host_build: QMAKE_CXXFLAGS += -target $${MAC_TARGET} -!host_build: QMAKE_LFLAGS += -target $${MAC_TARGET} -QMAKE_AR = $${CROSS_COMPILE}ar cq -QMAKE_RANLIB=$${CROSS_COMPILE}ranlib -load(qt_config) diff --git a/depends/patches/qt/no-xlib.patch b/depends/patches/qt/no-xlib.patch deleted file mode 100644 index 0f7965d2ea8..00000000000 --- a/depends/patches/qt/no-xlib.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 9563cef873ae82e06f60708d706d054717e801ce Mon Sep 17 00:00:00 2001 -From: Carl Dong -Date: Thu, 18 Jul 2019 17:22:05 -0400 -Subject: [PATCH] Wrap xlib related code blocks in #if's - -They are not necessary to compile QT. - ---- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp -+++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp -@@ -49,7 +49,9 @@ - #include - #include - #include -+#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) - #include -+#endif - #include - #include - -@@ -391,6 +393,7 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *window) - xcb_flush(xcb_connection()); - } - -+#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) - static int cursorIdForShape(int cshape) - { - int cursorId = 0; -@@ -444,6 +447,7 @@ static int cursorIdForShape(int cshape) - } - return cursorId; - } -+#endif - - xcb_cursor_t QXcbCursor::createNonStandardCursor(int cshape) - { -@@ -558,7 +562,9 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) - xcb_cursor_t QXcbCursor::createFontCursor(int cshape) - { - xcb_connection_t *conn = xcb_connection(); -+#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) - int cursorId = cursorIdForShape(cshape); -+#endif - xcb_cursor_t cursor = XCB_NONE; - - #if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) -@@ -590,6 +596,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) - // Non-standard X11 cursors are created from bitmaps - cursor = createNonStandardCursor(cshape); - -+#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) - // Create a glpyh cursor if everything else failed - if (!cursor && cursorId) { - cursor = xcb_generate_id(conn); -@@ -597,6 +604,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) - cursorId, cursorId + 1, - 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0); - } -+#endif - - if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) { - const char *name = cursorNames[cshape].front(); diff --git a/depends/patches/qt/no_warnings_for_symbols.patch b/depends/patches/qt/no_warnings_for_symbols.patch deleted file mode 100644 index 11cdc599ed3..00000000000 --- a/depends/patches/qt/no_warnings_for_symbols.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/qtbase/mkspecs/features/mac/no_warn_empty_obj_files.prf -+++ b/qtbase/mkspecs/features/mac/no_warn_empty_obj_files.prf -@@ -1,7 +1,7 @@ - # Prevent warnings about object files without any symbols. This is a common - # thing in Qt as we tend to build files unconditionally, and then use ifdefs - # to compile out parts that are not relevant. --QMAKE_RANLIB += -no_warning_for_no_symbols -+# QMAKE_RANLIB += -no_warning_for_no_symbols - - # We have to tell 'ar' to not run ranlib by itself - QMAKE_AR += -S diff --git a/depends/patches/qt/qt.pro b/depends/patches/qt/qt.pro deleted file mode 100644 index 6d8b7fdb6a2..00000000000 --- a/depends/patches/qt/qt.pro +++ /dev/null @@ -1,12 +0,0 @@ -# Create the super cache so modules will add themselves to it. -cache(, super) - -!QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build)) - -TEMPLATE = subdirs -SUBDIRS = qtbase qttools qttranslations - -qttools.depends = qtbase -qttranslations.depends = qttools - -load(qt_configure) diff --git a/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch index f0c14a9400e..e5e7b126f62 100644 --- a/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch +++ b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch @@ -7,7 +7,7 @@ Upstream report: https://bugreports.qt.io/browse/QTBUG-83160 diff --git a/qtbase/src/tools/moc/main.cpp b/qtbase/src/tools/moc/main.cpp --- a/qtbase/src/tools/moc/main.cpp +++ b/qtbase/src/tools/moc/main.cpp -@@ -238,6 +238,7 @@ int runMoc(int argc, char **argv) +@@ -186,6 +186,7 @@ int runMoc(int argc, char **argv) dummyVariadicFunctionMacro.arguments += Symbol(0, PP_IDENTIFIER, "__VA_ARGS__"); pp.macros["__attribute__"] = dummyVariadicFunctionMacro; pp.macros["__declspec"] = dummyVariadicFunctionMacro; diff --git a/depends/patches/qt/qtbase_avoid_native_float16.patch b/depends/patches/qt/qtbase_avoid_native_float16.patch new file mode 100644 index 00000000000..ec03d140e3f --- /dev/null +++ b/depends/patches/qt/qtbase_avoid_native_float16.patch @@ -0,0 +1,37 @@ +Avoid using native float16 types in Qt's qfloat16 + +Using native float16 types may introduce compatibility issues +in release binaries for Linux platforms. + +See: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=e42d2d2a20f2bb59928bc895ec9f46503a1b5c73 + +This patch can be dropped once the minimum required libgcc version +is updated to 12.x or newer. + + +--- a/qtbase/src/corelib/global/qtypes.h ++++ b/qtbase/src/corelib/global/qtypes.h +@@ -258,23 +258,8 @@ using qsizetype = QIntegerForSizeof::Signed; + + // Define a native float16 type + namespace QtPrivate { +-#if defined(__STDCPP_FLOAT16_T__) +-# define QFLOAT16_IS_NATIVE 1 +-using NativeFloat16Type = std::float16_t; +-#elif defined(Q_CC_CLANG) && defined(__FLT16_MAX__) && 0 +-// disabled due to https://github.com/llvm/llvm-project/issues/56963 +-# define QFLOAT16_IS_NATIVE 1 +-using NativeFloat16Type = decltype(__FLT16_MAX__); +-#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__) && defined(__ARM_FP16_FORMAT_IEEE) +-# define QFLOAT16_IS_NATIVE 1 +-using NativeFloat16Type = __fp16; +-#elif defined(Q_CC_GNU_ONLY) && defined(__FLT16_MAX__) && defined(__SSE2__) +-# define QFLOAT16_IS_NATIVE 1 +-using NativeFloat16Type = _Float16; +-#else + # define QFLOAT16_IS_NATIVE 0 + using NativeFloat16Type = void; +-#endif + } // QtPrivate + + #endif // __cplusplus diff --git a/depends/patches/qt/qtbase_avoid_qmain.patch b/depends/patches/qt/qtbase_avoid_qmain.patch new file mode 100644 index 00000000000..45a54fe881e --- /dev/null +++ b/depends/patches/qt/qtbase_avoid_qmain.patch @@ -0,0 +1,21 @@ +Avoid defining QT_NEEDS_QMAIN macro + +Qt's QT_NEEDS_QMAIN macro renames our main() function to qMain(), +which breaks our assumptions regarding exported symbols. In particular, +the CONTROL_FLOW security check fails for Windows builds in Guix. + +The QT_NEEDS_QMAIN macro is required for linking to the Qt DLLs only, +so we can safely disable it. + + +--- a/qtbase/src/entrypoint/CMakeLists.txt ++++ b/qtbase/src/entrypoint/CMakeLists.txt +@@ -104,8 +104,6 @@ if(WIN32) + APPEND PROPERTY INTERFACE_QT_MODULE_LDFLAGS "-lmingw32" + ) + +- target_compile_definitions(EntryPointPrivate INTERFACE QT_NEEDS_QMAIN) +- qt_internal_extend_target(EntryPointImplementation DEFINES QT_NEEDS_QMAIN) + endif() + + qt_internal_add_sync_header_dependencies(EntryPointImplementation Core) diff --git a/depends/patches/qt/qtbase_platformsupport.patch b/depends/patches/qt/qtbase_platformsupport.patch new file mode 100644 index 00000000000..45ccaea53a7 --- /dev/null +++ b/depends/patches/qt/qtbase_platformsupport.patch @@ -0,0 +1,34 @@ +CMake: Prevent creation of empty InputSupportPrivate module + +The combination of + -no-feature-evdev + -no-feature-tslib + -no-feature-libinput +led to the creation of the InputSupportPrivate module without source +files. + +This triggered CMake upstream issue 23464 when using CMake < 3.25. + +Fix this by adjusting the inexact condition that decides whether to +build InputSupportPrivate. + + +See: https://codereview.qt-project.org/c/qt/qtbase/+/633612 + + +--- a/qtbase/src/platformsupport/CMakeLists.txt ++++ b/qtbase/src/platformsupport/CMakeLists.txt +@@ -3,7 +3,12 @@ + + add_subdirectory(devicediscovery) + add_subdirectory(fbconvenience) +-if(QT_FEATURE_evdev OR QT_FEATURE_integrityhid OR QT_FEATURE_libinput OR QT_FEATURE_tslib OR QT_FEATURE_xkbcommon) ++if(QT_FEATURE_evdev ++ OR QT_FEATURE_vxworksevdev ++ OR QT_FEATURE_integrityhid ++ OR QT_FEATURE_libinput ++ OR QT_FEATURE_tslib ++ OR (QT_FEATURE_libinput AND QT_FEATURE_xkbcommon)) + add_subdirectory(input) + endif() + if(QT_FEATURE_kms) diff --git a/depends/patches/qt/qtbase_plugins_cocoa.patch b/depends/patches/qt/qtbase_plugins_cocoa.patch new file mode 100644 index 00000000000..118a72d66e7 --- /dev/null +++ b/depends/patches/qt/qtbase_plugins_cocoa.patch @@ -0,0 +1,21 @@ +CMake: Fix macOS -no-feature-sessionmanager build with CMake < 3.25 + +Work around CMake issue 23464. + + +See: https://codereview.qt-project.org/c/qt/qtbase/+/634002 + + +--- a/qtbase/src/plugins/platforms/cocoa/CMakeLists.txt ++++ b/qtbase/src/plugins/platforms/cocoa/CMakeLists.txt +@@ -102,3 +102,10 @@ qt_internal_extend_target(QCocoaIntegrationPlugin CONDITION QT_FEATURE_sessionma + SOURCES + qcocoasessionmanager.cpp qcocoasessionmanager.h + ) ++ ++# Work around CMake issue 23464 ++if(CMAKE_VERSION VERSION_LESS "3.25" AND NOT QT_FEATURE_sessionmanager) ++ set_target_properties(QCocoaIntegrationPlugin PROPERTIES ++ DISABLE_PRECOMPILE_HEADERS ON ++ ) ++endif() diff --git a/depends/patches/qt/qtbase_skip_tools.patch b/depends/patches/qt/qtbase_skip_tools.patch new file mode 100644 index 00000000000..bbd87e8689f --- /dev/null +++ b/depends/patches/qt/qtbase_skip_tools.patch @@ -0,0 +1,61 @@ +Skip building/installing unneeded tools: + +1. Wrapper CMake scripts. +2. CI support files. +3. tracepointgen and tracegen tools. +4. Qt Look Ahead LR Parser Generator (qlalr). +5. Qt Vulkan Header Generator (qvkgen). + + +--- a/qtbase/cmake/QtBaseGlobalTargets.cmake ++++ b/qtbase/cmake/QtBaseGlobalTargets.cmake +@@ -118,9 +118,6 @@ qt_generate_global_module_pri_file() + qt_generate_global_device_pri_file() + qt_generate_qmake_and_qtpaths_wrapper_for_target() + +-# Depends on the global features being evaluated. +-qt_internal_create_wrapper_scripts() +- + add_library(Qt::GlobalConfig ALIAS GlobalConfig) + + add_library(GlobalConfigPrivate INTERFACE) + +--- a/qtbase/cmake/QtBaseGlobalTargets.cmake ++++ b/qtbase/cmake/QtBaseGlobalTargets.cmake +@@ -349,12 +349,3 @@ elseif(WASM) + qt_install(PROGRAMS "${QT_BUILD_DIR}/${INSTALL_LIBEXECDIR}/qt-wasmtestrunner.py" + DESTINATION "${INSTALL_LIBEXECDIR}") + endif() +- +-# Install CI support files to libexec. +-qt_path_join(__qt_libexec_install_dir "${QT_INSTALL_DIR}" "${INSTALL_LIBEXECDIR}") +-qt_copy_or_install(FILES coin/instructions/qmake/ensure_pro_file.cmake +- DESTINATION "${__qt_libexec_install_dir}") +-qt_copy_or_install(PROGRAMS "util/testrunner/qt-testrunner.py" +- DESTINATION "${__qt_libexec_install_dir}") +-qt_copy_or_install(PROGRAMS "util/testrunner/sanitizer-testrunner.py" +- DESTINATION "${__qt_libexec_install_dir}") + + +--- a/qtbase/src/CMakeLists.txt ++++ b/qtbase/src/CMakeLists.txt +@@ -21,8 +21,6 @@ function(find_or_build_bootstrap_names) + endif() + add_subdirectory(tools/moc) + add_subdirectory(tools/rcc) +- add_subdirectory(tools/tracepointgen) +- add_subdirectory(tools/tracegen) + add_subdirectory(tools/cmake_automoc_parser) + endfunction() + +--- a/qtbase/src/tools/CMakeLists.txt ++++ b/qtbase/src/tools/CMakeLists.txt +@@ -11,8 +11,6 @@ if (QT_FEATURE_dbus) + add_subdirectory(qdbuscpp2xml) + add_subdirectory(qdbusxml2cpp) + endif() +-add_subdirectory(qlalr) +-add_subdirectory(qvkgen) + if (QT_FEATURE_commandlineparser) + add_subdirectory(qtpaths) + endif() diff --git a/depends/patches/qt/qttools_skip_dependencies.patch b/depends/patches/qt/qttools_skip_dependencies.patch new file mode 100644 index 00000000000..09f66f4497f --- /dev/null +++ b/depends/patches/qt/qttools_skip_dependencies.patch @@ -0,0 +1,36 @@ +QtTools: Skip unnecessary dependencies: + +1. The LLVM installatiion. +2. Build only required tools. + + +--- a/qttools/configure.cmake ++++ b/qttools/configure.cmake +@@ -17,7 +17,7 @@ + # Presumably because 6.0 ClangConfig.cmake files are not good enough? + # In any case explicitly request a minimum version of 8.x for now, otherwise + # building with CMake will fail at compilation time. +-qt_find_package(WrapLibClang 8 PROVIDED_TARGETS WrapLibClang::WrapLibClang) ++#qt_find_package(WrapLibClang 8 PROVIDED_TARGETS WrapLibClang::WrapLibClang) + # special case end + + if(TARGET WrapLibClang::WrapLibClang) + +--- a/qttools/src/linguist/CMakeLists.txt ++++ b/qttools/src/linguist/CMakeLists.txt +@@ -9,15 +9,8 @@ if(NOT QT_FEATURE_linguist) + return() + endif() + add_subdirectory(lconvert) +-add_subdirectory(lprodump) + add_subdirectory(lrelease) +-add_subdirectory(lrelease-pro) + add_subdirectory(lupdate) +-add_subdirectory(lupdate-pro) +-if(QT_FEATURE_process AND QT_FEATURE_pushbutton AND QT_FEATURE_toolbutton +- AND QT_FEATURE_png AND QT_FEATURE_printsupport AND TARGET Qt::Widgets) +- add_subdirectory(linguist) +-endif() + + # Create a fake module that would emulate the Qt5::LinguistTools CMake Config package + qt_internal_add_module(Linguist diff --git a/depends/patches/qt/qttools_src.pro b/depends/patches/qt/qttools_src.pro deleted file mode 100644 index 6ef71a09427..00000000000 --- a/depends/patches/qt/qttools_src.pro +++ /dev/null @@ -1,6 +0,0 @@ -TEMPLATE = subdirs -SUBDIRS = linguist - -fb = force_bootstrap -CONFIG += $$fb -cache(CONFIG, add, fb) diff --git a/depends/patches/qt/rcc_hardcode_timestamp.patch b/depends/patches/qt/rcc_hardcode_timestamp.patch index 03f38979756..e72f4bd037f 100644 --- a/depends/patches/qt/rcc_hardcode_timestamp.patch +++ b/depends/patches/qt/rcc_hardcode_timestamp.patch @@ -6,11 +6,11 @@ the SOURCE_DATE_EPOCH variable set, e.g., for Guix builds. --- old/qtbase/src/tools/rcc/rcc.cpp +++ new/qtbase/src/tools/rcc/rcc.cpp -@@ -227,14 +227,7 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) +@@ -201,14 +201,7 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) if (lib.formatVersion() >= 2) { // last modified time stamp -- const QDateTime lastModified = m_fileInfo.lastModified(); +- const QDateTime lastModified = m_fileInfo.lastModified(QTimeZone::UTC); - quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0); - static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong(); - if (sourceDate != 0) diff --git a/depends/patches/qt/utc_from_string_no_optimize.patch b/depends/patches/qt/utc_from_string_no_optimize.patch deleted file mode 100644 index 533ef59b379..00000000000 --- a/depends/patches/qt/utc_from_string_no_optimize.patch +++ /dev/null @@ -1,84 +0,0 @@ -Modify optimisation flags for various functions. -This fixes non-determinism issues in the asm produced for -these function when cross-compiling on x86_64 and aarch64 for -the arm64-apple-darwin HOST. - ---- a/qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp -+++ b/qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp -@@ -1078,9 +1078,9 @@ void QItemSelectionModelPrivate::_q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); -- void _q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); -+ __attribute__ ((optnone)) void _q_layoutChanged(const QList &parents = QList(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint); - - inline void remove(QList &r) - { - ---- a/qtbase/src/corelib/time/qdatetimeparser_p.h -+++ b/qtbase/src/corelib/time/qdatetimeparser_p.h -@@ -215,7 +215,7 @@ private: - : value(ok == Invalid ? -1 : val), used(read), zeroes(zs), state(ok) - {} - }; -- ParsedSection parseSection(const QDateTime ¤tValue, int sectionIndex, -+ __attribute__ ((optnone)) ParsedSection parseSection(const QDateTime ¤tValue, int sectionIndex, - int offset, QString *text) const; - int findMonth(const QString &str1, int monthstart, int sectionIndex, - int year, QString *monthName = nullptr, int *used = nullptr) const; - ---- a/qtbase/src/corelib/time/qtimezoneprivate_p.h -+++ b/qtbase/src/corelib/time/qtimezoneprivate_p.h -@@ -191,7 +191,7 @@ public: - virtual ~QUtcTimeZonePrivate(); - - // Fall-back for UTC[+-]\d+(:\d+){,2} IDs. -- static qint64 offsetFromUtcString(const QByteArray &id); -+ static __attribute__ ((optnone)) qint64 offsetFromUtcString(const QByteArray &id); - - QUtcTimeZonePrivate *clone() const override; - ---- a/qtbase/src/widgets/widgets/qcalendarwidget.cpp -+++ b/qtbase/src/widgets/widgets/qcalendarwidget.cpp -@@ -329,13 +329,13 @@ class QCalendarYearValidator : public QCalendarDateSectionValidator - - public: - QCalendarYearValidator(); -- virtual Section handleKey(int key) override; -+ __attribute__ ((optnone)) virtual Section handleKey(int key) override; - virtual QDate applyToDate(QDate date, QCalendar cal) const override; - virtual void setDate(QDate date, QCalendar cal) override; - virtual QString text() const override; - virtual QString text(QDate date, QCalendar cal, int repeat) const override; - private: -- int pow10(int n); -+ __attribute__ ((optnone)) int pow10(int n); - int m_pos; - int m_year; - int m_oldYear; diff --git a/depends/patches/qt/windows_lto.patch b/depends/patches/qt/windows_lto.patch deleted file mode 100644 index ea379a60f14..00000000000 --- a/depends/patches/qt/windows_lto.patch +++ /dev/null @@ -1,31 +0,0 @@ -Qt (for Windows) fails to build under LTO, due to multiple definition issues, i.e - -multiple definition of `QAccessibleLineEdit::~QAccessibleLineEdit()'; - -Possibly related to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94156. - -diff --git a/qtbase/src/widgets/accessible/simplewidgets.cpp b/qtbase/src/widgets/accessible/simplewidgets.cpp -index 107fd729fe..0e61878f39 100644 ---- a/qtbase/src/widgets/accessible/simplewidgets.cpp -+++ b/qtbase/src/widgets/accessible/simplewidgets.cpp -@@ -109,6 +109,8 @@ QString qt_accHotKey(const QString &text); - \ingroup accessibility - */ - -+QAccessibleLineEdit::~QAccessibleLineEdit(){}; -+ - /*! - Creates a QAccessibleButton object for \a w. - */ -diff --git a/qtbase/src/widgets/accessible/simplewidgets_p.h b/qtbase/src/widgets/accessible/simplewidgets_p.h -index 73572e3059..658da86143 100644 ---- a/qtbase/src/widgets/accessible/simplewidgets_p.h -+++ b/qtbase/src/widgets/accessible/simplewidgets_p.h -@@ -155,6 +155,7 @@ class QAccessibleLineEdit : public QAccessibleWidget, public QAccessibleTextInte - public: - explicit QAccessibleLineEdit(QWidget *o, const QString &name = QString()); - -+ ~QAccessibleLineEdit(); - QString text(QAccessible::Text t) const override; - void setText(QAccessible::Text t, const QString &text) override; - QAccessible::State state() const override; diff --git a/depends/toolchain.cmake.in b/depends/toolchain.cmake.in index 28188f6347c..837abe1cd8a 100644 --- a/depends/toolchain.cmake.in +++ b/depends/toolchain.cmake.in @@ -100,12 +100,27 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE) set(CMAKE_FRAMEWORK_PATH "@OSX_SDK@/System/Library/Frameworks") endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Linux") + # Customize pkg-config behavior for finding dependencies + # of the xcb QPA platform plugin: + # 1. Restrict search paths to the depends. + # 2. Make output suitable for static linking. + cmake_path(APPEND CMAKE_CURRENT_LIST_DIR "lib" "pkgconfig" OUTPUT_VARIABLE pkg_config_path) + set(ENV{PKG_CONFIG_PATH} ${pkg_config_path}) + set(ENV{PKG_CONFIG_LIBDIR} ${pkg_config_path}) + unset(pkg_config_path) + set(PKG_CONFIG_ARGN --static) +endif() + + # Set configuration options for the main build system. set(qt_packages @qt_packages@) if("${qt_packages}" STREQUAL "") set(BUILD_GUI OFF CACHE BOOL "") else() set(BUILD_GUI ON CACHE BOOL "") + set(Qt6_ROOT "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "") endif() set(qrencode_packages @qrencode_packages@) diff --git a/src/qt/README.md b/src/qt/README.md index 4a662b2a12d..0eb16a63989 100644 --- a/src/qt/README.md +++ b/src/qt/README.md @@ -1,6 +1,6 @@ This directory contains the source code for the Bitcoin Core graphical user interface (GUI). It uses the [Qt](https://www1.qt.io/developers/) cross-platform framework. -The current precise version for Qt 5 is specified in [qt.mk](/depends/packages/qt.mk). +The current precise version for Qt is specified in [qt.mk](/depends/packages/qt.mk). ## Compile and run