gnu: qtbase: Update to 6.6.2.

* gnu/packages/qt.scm (qtbase): Update to 6.6.2.
[source]: Unbundle pcre2, md4c. Remove qtbase-use-TZDIR.patch. Add
qtbase-find-tools-in-PATH.patch,
qtbase-qmake-fix-includedir.patch,
[arguments]<#:phases>: Adjust 'patch-more-paths phase, skip tst_selftests test.
[inputs]: Add libb2

* gnu/packages/patches/qtbase-use-TZDIR.patch: Remove this.
* gnu/packages/patches/qtbase-find-tools-in-PATH.patch: New file.
* gnu/packages/patches/qtbase-qmake-fix-includedir.patch: New file.

* gnu/local.mk (dist_patch_DATA): Remove qtbase-use-TZDIR.patch.
Register qtbase-find-tools-in-PATH.patch,
qtbase-qmake-fix-includedir.patch.

Change-Id: I72af9c8f2e930bcae18f36ceca18a0a53f5c3e15
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
Zheng Junjie 2024-03-13 16:57:55 +08:00 committed by Maxim Cournoyer
parent 629614c7a3
commit 074ddc321c
No known key found for this signature in database
GPG key ID: 1260E46482E63562
5 changed files with 114 additions and 151 deletions

View file

@ -1965,10 +1965,11 @@ dist_patch_DATA = \
%D%/packages/patches/qemu-fix-agent-paths.patch \
%D%/packages/patches/qrcodegen-cpp-make-install.patch \
%D%/packages/patches/qtbase-absolute-runpath.patch \
%D%/packages/patches/qtbase-find-tools-in-PATH.patch \
%D%/packages/patches/qtbase-qmake-fix-includedir.patch \
%D%/packages/patches/qtbase-moc-ignore-gcc-macro.patch \
%D%/packages/patches/qtbase-qmake-use-libname.patch \
%D%/packages/patches/qtbase-5-use-TZDIR.patch \
%D%/packages/patches/qtbase-use-TZDIR.patch \
%D%/packages/patches/qtscript-disable-tests.patch \
%D%/packages/patches/quagga-reproducible-build.patch \
%D%/packages/patches/quickswitch-fix-dmenu-check.patch \

View file

@ -0,0 +1,49 @@
Patch retrieved from NixOS
https://github.com/NixOS/nixpkgs/blob/93ecdaa1f34354c9476062dc4fe323b442c087d5/pkgs/development/libraries/qt-6/patches/0006-qtbase-find-tools-in-PATH.patch
From a8b9fae710a2bd5e743f5e16364eaa8c38dbd784 Mon Sep 17 00:00:00 2001
From: rewine <luhongxu@deepin.org>
Date: Wed, 29 Mar 2023 11:51:33 +0800
Subject: [PATCH 06/11] qtbase-find-tools-in-PATH
1. find qt's tools in `QTTOOLSPATH` env
qt assumes that all components use the same install prefix
we can't get the real prefix for qttools when build qtbase
we will add /libexec to `QTTOOLSPATH` in qtToolsHook
find_path will also search in 'PATH' by default
see `CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH`
2. disable tool_dependencies_enabled
We can guarantee the build order of qt components in nixpkgs
tools in qttools always build before qtdoc
qdoc_bin is not a build target now, since we find it in `QTTOOLSPATH`
---
cmake/QtDocsHelpers.cmake | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/cmake/QtDocsHelpers.cmake b/cmake/QtDocsHelpers.cmake
index 48ed5a324bf..91d8d41fb1f 100644
--- a/cmake/QtDocsHelpers.cmake
+++ b/cmake/QtDocsHelpers.cmake
@@ -47,9 +47,14 @@ function(qt_internal_add_docs)
set(doc_tools_libexec "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}/${INSTALL_LIBEXECDIR}")
endif()
- set(qdoc_bin "${doc_tools_bin}/qdoc${CMAKE_EXECUTABLE_SUFFIX}")
- set(qtattributionsscanner_bin "${doc_tools_libexec}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}")
- set(qhelpgenerator_bin "${doc_tools_libexec}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}")
+ set(tool_dependencies_enabled FALSE)
+
+ find_path(qdoc_path name qdoc PATHS ENV QTTOOLSPATH)
+ find_path(qtattributionsscanner_path name qtattributionsscanner PATHS ENV QTTOOLSPATH)
+ find_path(qhelpgenerator_path name qhelpgenerator PATHS ENV QTTOOLSPATH)
+ set(qdoc_bin "${qdoc_path}/qdoc${CMAKE_EXECUTABLE_SUFFIX}")
+ set(qtattributionsscanner_bin "${qtattributionsscanner_path}/qtattributionsscanner${CMAKE_EXECUTABLE_SUFFIX}")
+ set(qhelpgenerator_bin "${qhelpgenerator_path}/qhelpgenerator${CMAKE_EXECUTABLE_SUFFIX}")
get_target_property(target_type ${target} TYPE)
if (NOT target_type STREQUAL "INTERFACE_LIBRARY")
--
2.42.0

View file

@ -0,0 +1,29 @@
Patch retrieved from NixOS
https://github.com/NixOS/nixpkgs/blob/93ecdaa1f34354c9476062dc4fe323b442c087d5/pkgs/development/libraries/qt-6/patches/0003-qtbase-qmake-fix-includedir-in-generated-pkg-config.patch
From 6088085d3074316dd74639fc6c1233e5862aff11 Mon Sep 17 00:00:00 2001
From: Nick Cao <nickcao@nichi.co>
Date: Fri, 14 Apr 2023 09:34:46 +0800
Subject: [PATCH 03/11] qtbase: qmake: fix includedir in generated pkg-config
---
qmake/generators/makefile.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 11d2f0ff7df..c78ed0d3485 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -3412,8 +3412,7 @@ MakefileGenerator::writePkgConfigFile()
<< varGlue("QMAKE_PKGCONFIG_CFLAGS", "", " ", " ")
// << varGlue("DEFINES","-D"," -D"," ")
;
- if (!project->values("QMAKE_DEFAULT_INCDIRS").contains(includeDir))
- t << "-I${includedir}";
+ t << "-I${includedir}";
if (target_mode == TARG_MAC_MODE && project->isActiveConfig("lib_bundle")
&& libDir != QLatin1String("/Library/Frameworks")) {
t << " -F${libdir}";
--
2.42.0

View file

@ -1,141 +0,0 @@
From 1075606f8b2f9e153c82f8e50cbd69cea9c72e87 Mon Sep 17 00:00:00 2001
From: Edward Welbourne <edward.welbourne@qt.io>
Date: Mon, 11 Sep 2023 11:41:39 +0200
Subject: [PATCH] Support the TZDIR environment variable
On Linux / glibc, this overrides the default system location for the
zone info. So check for files there first. Break out a function to
manage the trying of (now three) zoneinfo directories when opening a
file by name relative to there.
Pick-to: 6.6 6.5
Task-number: QTBUG-116017
Change-Id: I1f97107aabd9015c0a5543639870f1d70654ca67
---
* Rebased on top of v6.5.2.
src/corelib/time/qtimezoneprivate_tz.cpp | 73 ++++++++++++++++--------
1 file changed, 49 insertions(+), 24 deletions(-)
diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp
index 067191d816..a8b2fc894e 100644
--- a/src/corelib/time/qtimezoneprivate_tz.cpp
+++ b/src/corelib/time/qtimezoneprivate_tz.cpp
@@ -51,17 +51,41 @@ typedef QHash<QByteArray, QTzTimeZone> QTzTimeZoneHash;
static bool isTzFile(const QString &name);
+// Open a named file under the zone info directory:
+static bool openZoneInfo(QString name, QFile *file)
+{
+ // At least on Linux / glibc (see man 3 tzset), $TZDIR overrides the system
+ // default location for zone info:
+ const QString tzdir = qEnvironmentVariable("TZDIR");
+ if (!tzdir.isEmpty()) {
+ file->setFileName(QDir(tzdir).filePath(name));
+ if (file->open(QIODevice::ReadOnly))
+ return true;
+ }
+ // Try modern system path first:
+ constexpr auto zoneShare = "/usr/share/zoneinfo/"_L1;
+ if (tzdir != zoneShare && tzdir != zoneShare.chopped(1)) {
+ file->setFileName(zoneShare + name);
+ if (file->open(QIODevice::ReadOnly))
+ return true;
+ }
+ // Fall back to legacy system path:
+ constexpr auto zoneLib = "/usr/lib/zoneinfo/"_L1;
+ if (tzdir != zoneLib && tzdir != zoneLib.chopped(1)) {
+ file->setFileName(zoneShare + name);
+ if (file->open(QIODevice::ReadOnly))
+ return true;
+ }
+ return false;
+}
+
// Parse zone.tab table for territory information, read directories to ensure we
// find all installed zones (many are omitted from zone.tab; even more from
// zone1970.tab).
static QTzTimeZoneHash loadTzTimeZones()
{
- QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
- if (!QFile::exists(path))
- path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
-
- QFile tzif(path);
- if (!tzif.open(QIODevice::ReadOnly))
+ QFile tzif;
+ if (!openZoneInfo("zone.tab"_L1, &tzif))
return QTzTimeZoneHash();
QTzTimeZoneHash zonesHash;
@@ -91,6 +115,7 @@ static QTzTimeZoneHash loadTzTimeZones()
}
}
+ const QString path = tzif.fileName();
const qsizetype cut = path.lastIndexOf(u'/');
Q_ASSERT(cut > 0);
const QDir zoneDir = QDir(path.first(cut));
@@ -761,20 +786,13 @@ QTzTimeZoneCacheEntry QTzTimeZoneCache::findEntry(const QByteArray &ianaId)
tzif.setFileName(QStringLiteral("/etc/localtime"));
if (!tzif.open(QIODevice::ReadOnly))
return ret;
- } else {
- // Open named tz, try modern path first, if fails try legacy path
- tzif.setFileName("/usr/share/zoneinfo/"_L1 + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
- tzif.setFileName("/usr/lib/zoneinfo/"_L1 + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
- // ianaId may be a POSIX rule, taken from $TZ or /etc/TZ
- auto check = validatePosixRule(ianaId);
- if (check.isValid) {
- ret.m_hasDst = check.hasDst;
- ret.m_posixRule = ianaId;
- }
- return ret;
- }
+ } else if (!openZoneInfo(QString::fromLocal8Bit(ianaId), &tzif)) {
+ // ianaId may be a POSIX rule, taken from $TZ or /etc/TZ
+ auto check = validatePosixRule(ianaId);
+ if (check.isValid) {
+ ret.m_hasDst = check.hasDst;
+ ret.m_posixRule = ianaId;
+ return ret;
}
}
@@ -1317,7 +1335,8 @@ private:
{
// On most distros /etc/localtime is a symlink to a real file so extract
// name from the path
- const auto zoneinfo = "/zoneinfo/"_L1;
+ const QString tzdir = qEnvironmentVariable("TZDIR");
+ constexpr auto zoneinfo = "/zoneinfo/"_L1;
QString path = QStringLiteral("/etc/localtime");
long iteration = getSymloopMax();
// Symlink may point to another symlink etc. before being under zoneinfo/
@@ -1325,9 +1344,15 @@ private:
// symlink, like America/Montreal pointing to America/Toronto
do {
path = QFile::symLinkTarget(path);
- int index = path.indexOf(zoneinfo);
- if (index >= 0) // Found zoneinfo file; extract zone name from path:
- return QStringView{ path }.mid(index + zoneinfo.size()).toUtf8();
+ // If it's a zoneinfo file, extract the zone name from its path:
+ int index = tzdir.isEmpty() ? -1 : path.indexOf(tzdir);
+ if (index >= 0) {
+ const auto tail = QStringView{ path }.sliced(index + tzdir.size()).toUtf8();
+ return tail.startsWith(u'/') ? tail.sliced(1) : tail;
+ }
+ index = path.indexOf(zoneinfo);
+ if (index >= 0)
+ return QStringView{ path }.sliced(index + zoneinfo.size()).toUtf8();
} while (!path.isEmpty() && --iteration > 0);
return QByteArray();
base-commit: af457a9f0f7eb1a2a7d11f495da508faab91a442
--
2.41.0

View file

@ -67,6 +67,7 @@ (define-module (gnu packages qt)
#:use-module (gnu packages bash)
#:use-module (gnu packages base)
#:use-module (gnu packages bison)
#:use-module (gnu packages crypto)
#:use-module (gnu packages check)
#:use-module (gnu packages cmake)
#:use-module (gnu packages compression)
@ -714,27 +715,26 @@ (define-public qtbase
(package
(inherit qtbase-5)
(name "qtbase")
(version "6.5.2")
(version "6.6.2")
(source (origin
(inherit (package-source qtbase-5))
(uri (qt-url name version))
(sha256
(base32
"0s8jwzdcv97dfy8n3jjm8zzvllv380l73mwdva7rs2nqnhlwgd1x"))
"0yv78bwqzy975854h53rbiilsms62f3v02i3jqz7v8ajk1ml56xq"))
(modules '((guix build utils)))
(snippet
;; corelib uses bundled harfbuzz, md4, md5, sha3
'(with-directory-excursion "src/3rdparty"
(for-each delete-file-recursively
;; The bundled pcre2 copy is kept, as its headers
;; are required by some internal bootstrap target
;; used for the tools.
(list "double-conversion" "freetype" "harfbuzz-ng"
"libpng" "libjpeg" "sqlite" "xcb" "zlib"))))
(patches (search-patches "qtbase-use-TZDIR.patch"
"qtbase-moc-ignore-gcc-macro.patch"
"pcre2" "md4c" "libpng" "libjpeg"
"sqlite" "xcb" "zlib"))))
(patches (search-patches "qtbase-moc-ignore-gcc-macro.patch"
"qtbase-absolute-runpath.patch"
"qtbase-qmake-use-libname.patch"))))
"qtbase-qmake-use-libname.patch"
"qtbase-find-tools-in-PATH.patch"
"qtbase-qmake-fix-includedir.patch"))))
(build-system cmake-build-system)
(arguments
(substitute-keyword-arguments (package-arguments qtbase-5)
@ -812,6 +812,12 @@ (define-public qtbase
"qmake/library/qmakebuiltins.cpp")
(("/bin/sh")
(search-input-file inputs "bin/bash")))
(substitute* "tests/auto/tools/qt_cmake_create/\
tst_qt_cmake_create.cpp"
(("/bin/sh")
(which "sh")))
(substitute* "src/corelib/CMakeLists.txt"
(("/bin/ls")
(search-input-file inputs "bin/ls")))))
@ -874,6 +880,24 @@ (define-public qtbase
(string-join
(append
(list
;; The 'tst_selftests' fails with the following error:
;; with expansion:
;; false
;; with messages:
;; test := "keyboard"
;; arguments := QList("-o", "-,tap")
;; Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
;; Qt depends on a UTF-8 locale, but has failed to switch to one.
;; If this causes problems, reconfigure your locale. See the locale(1) manual
;; for more information.
;; See https://bugreports.qt.io/browse/QTBUG-113371
;; Add glibc-utf8-locales to native-inpus is no help.
;; TODO: when core-updates merge, check again.
"tst_selftests"
;; Sometimes it fails.
"tst_qsystemsemaphore"
;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
"tst_moc"
@ -1044,6 +1068,7 @@ (define-public qtbase
bash-minimal
coreutils-minimal
md4c
libb2
libice
libsm
libxcb