[qt-team PATCH 0/4] Avoid capturing python in qtbase, reinstate tests

  • Done
  • quality assurance status badge
Details
2 participants
  • Andreas Enge
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
normal
M
M
Maxim Cournoyer wrote on 13 Sep 2023 18:56
(address . guix-patches@gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cover.1694624089.git.maxim.cournoyer@gmail.com
Thes series removes Python from the closure of qtbase, both for versions 5.15
and 6.5. It also reinstate a few tests that was made possible thanks to
discussions with upstream following reported the issues.

Changes in v2:
- Also apply fix to qtbase-5 package.

Maxim Cournoyer (4):
gnu: qtbase: Do not capture Python (again).
gnu: qtbase: Add $TZDIR to native search paths.
gnu: qtbase: Reinstate date related tests.
gnu: qtdeclarative: Add a debug output.

gnu/packages/patches/qtbase-use-TZDIR.patch | 162 ++++++++++++++++----
gnu/packages/qt.scm | 54 ++++---
2 files changed, 167 insertions(+), 49 deletions(-)


base-commit: 4cb2e08b8eb1acc824b72ec17b483d7d85b5af68
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 18:58
[qt-team PATCH 1/4] gnu: qtbase: Do not capture Python (again).
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
b58e39ce10c910087a8cb90e36d58213705f2728.1694624089.git.maxim.cournoyer@gmail.com

* gnu/packages/qt.scm (qtbase-5) [arguments]: Add #:disallowed-references
argument to guard against the problem reoccurring in the future.
Add do-not-capture-python phase.
(qtbase) [arguments]: Update do-not-capture-python phase.

---

Changes in v2:
- Also apply fix to qtbase-5 package.

gnu/packages/qt.scm | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)

Toggle diff (57 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index b7e394d663c..a158f8114fe 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -392,7 +392,7 @@ (define-public qtbase-5
fontconfig
freetype
glib
- gtk+ ;for GTK theme support
+ gtk+ ;for GTK theme support
harfbuzz
icu4c
libinput-minimal
@@ -437,7 +437,8 @@ (define-public qtbase-5
vulkan-headers
ruby-2.7))
(arguments
- `(#:configure-flags
+ `(#:disallowed-references ,(list python)
+ #:configure-flags
(let ((out (assoc-ref %outputs "out")))
(list "-verbose"
"-prefix" out
@@ -583,7 +584,16 @@ (define-public qtbase-5
(("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b)
(string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))
(("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b)
- (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))))))))
+ (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)))))
+ (add-after 'install 'do-not-capture-python
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; For some reason, patching the file after the
+ ;; patch-source-shebangs phase doesn't work for Qt 5.
+ (substitute*
+ (search-input-file
+ outputs "lib/qt5/mkspecs/features/uikit/devices.py")
+ (((which "python3"))
+ "/usr/bin/env python3")))))))
(native-search-paths
(list (search-path-specification
(variable "QMAKEPATH")
@@ -724,10 +734,12 @@ (define-public qtbase
(substitute* "src/corelib/CMakeLists.txt"
(("/bin/ls")
(search-input-file inputs "bin/ls")))))
+ (delete 'do-not-capture-python) ;move after patch-source-shebangs
(add-after 'patch-source-shebangs 'do-not-capture-python
(lambda _
(substitute* '("mkspecs/features/uikit/devices.py"
- "util/testrunner/qt-testrunner.py")
+ "util/testrunner/qt-testrunner.py"
+ "util/testrunner/sanitizer-testrunner.py")
(((which "python3"))
"/usr/bin/env python3"))))
(replace 'configure
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 18:58
[qt-team PATCH 2/4] gnu: qtbase: Add $TZDIR to native search paths.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
4cb2ed7b09b84662ba38669766052e38e0b00abb.1694624089.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-search-paths]: Add $TZDIR.
---

(no changes since v1)

gnu/packages/qt.scm | 2 ++
1 file changed, 2 insertions(+)

Toggle diff (22 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index a158f8114fe..8324beef6fc 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -60,6 +60,7 @@ (define-module (gnu packages qt)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix deprecation)
+ #:use-module (guix search-paths)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages bash)
@@ -933,6 +934,7 @@ (define-public qtbase
(search-path-specification
(variable "QT_PLUGIN_PATH")
(files '("lib/qt6/plugins")))
+ $TZDIR
(search-path-specification
(variable "XDG_DATA_DIRS")
(files '("share")))
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 18:58
[qt-team PATCH 4/4] gnu: qtdeclarative: Add a debug output.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
0e039b26a95b285feb598d3effe67cc4e5c38a51.1694624089.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtdeclarative) [outputs]: New field.

---

(no changes since v1)

gnu/packages/qt.scm | 1 +
1 file changed, 1 insertion(+)

Toggle diff (14 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index d6255248c2a..ed9d813756a 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -1350,6 +1350,7 @@ (define-public qtdeclarative
(base32
"06c7xfqn2a5s2m8j1bcvx3pyjqg1rgqkjvp49737gb4z9vjiz8gk"))
(patches (search-patches "qtdeclarative-disable-qmlcache.patch"))))
+ (outputs '("out" "debug"))
(build-system cmake-build-system)
(arguments
(list
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 18:58
[qt-team PATCH 3/4] gnu: qtbase: Reinstate date related tests.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cda01aa37eee1043d3c9246a64c58661a381d34f.1694624089.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-inputs]: Add tzdata-for-tests.
[arguments]: Set the TZDIR and TZ environment variables, and reinstate the
tst_qdate, tst_qtimezone and tst_qdatetime tests in the check phase.
* gnu/packages/patches/qtbase-use-TZDIR.patch: Refresh patch with upstream
version.
---

(no changes since v1)

gnu/packages/patches/qtbase-use-TZDIR.patch | 162 ++++++++++++++++----
gnu/packages/qt.scm | 31 ++--
2 files changed, 148 insertions(+), 45 deletions(-)

Toggle diff (248 lines)
diff --git a/gnu/packages/patches/qtbase-use-TZDIR.patch b/gnu/packages/patches/qtbase-use-TZDIR.patch
index b6c377b133c..98bf7493e9f 100644
--- a/gnu/packages/patches/qtbase-use-TZDIR.patch
+++ b/gnu/packages/patches/qtbase-use-TZDIR.patch
@@ -1,39 +1,141 @@
-Use $TZDIR to search for time-zone data. Thus avoid depending on package
-"tzdata", which often introduces changes with near-immediate effects, so it's
-important to be able to update it fast.
+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
-Based on a patch fron NixOS.
-===================================================================
---- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
-+++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
-@@ -70,7 +70,11 @@
- // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+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");
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
-+ // Fallback to traditional paths in case we are not on GuixSD.
-+ if (!QFile::exists(path))
-+ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
- if (!QFile::exists(path))
- path = QStringLiteral("/usr/lib/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();
-@@ -645,6 +649,9 @@
+ 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;
- } else {
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
-+ if (!tzif.open(QIODevice::ReadOnly)) {
- // Open named tz, try modern path first, if fails try legacy path
- tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
-@@ -652,6 +659,7 @@
- if (!tzif.open(QIODevice::ReadOnly))
- return;
+ 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;
}
-+ }
}
- QDataStream ds(&tzif);
+@@ -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
+
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 8324beef6fc..d6255248c2a 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -747,7 +747,8 @@ (define-public qtbase
(assoc-ref %standard-phases 'configure))
(delete 'check) ;move after patch-prl-files
(add-after 'patch-prl-files 'check
- (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+ (lambda* (#:key tests? parallel-tests?
+ native-inputs inputs #:allow-other-keys)
(when tests?
;; The tests expect to find the modules provided by this
;; package; extend the environment variables needed to do so.
@@ -770,6 +771,18 @@ (define-public qtbase
;; /tree/src/testlib/qtestblacklist.cpp).
(setenv "QTEST_ENVIRONMENT" "linux ci 32bit")
(setenv "HOME" "/tmp") ;some tests require a writable HOME
+
+ ;; Note: the search path specified for TZDIR is only
+ ;; effective for users of the package, not while it's being
+ ;; built.
+ (setenv "TZDIR" (search-input-directory
+ (or native-inputs inputs) "share/zoneinfo"))
+
+ ;; This is to avoid QTimeZone::systemTimeZone() returning
+ ;; invalid QDate objects due to missing /etc/timezone or
+ ;; /etc/localtime.
+ (setenv "TZ" "Etc/UTC")
+
(invoke
"xvfb-run" "ctest" "--output-on-failure"
"-j" (if parallel-tests?
@@ -783,11 +796,6 @@ (define-public qtbase
;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
"tst_moc"
- ;; The 'tst_qdate' test fails because the current time
- ;; is reported as an invalid date (see:
- ;; https://bugreports.qt.io/browse/QTBUG-116017).
- "tst_qdate"
-
;; The qgraphicsview and qopenglwidget tests fail with a
;; segfault for unknown reasons (see:
;; https://bugreports.qt.io/browse/QTBUG-116018).
@@ -826,14 +834,6 @@ (define-public qtbase
;; The 'test_import_plugins' fails with "Could NOT find
;; Qt6MockPlugins1".
"test_import_plugins"
- ;; The 'tst_QTimeZone::systemZone' validates the
- ;; currently set timezone and fails.
- "tst_qtimezone"
- ;; The 'tst_qdatetime' fails with:
- ;; FAIL! : tst_QDateTime::offsetFromUtc() Compared values are not the same
- ;; Actual (dt5.offsetFromUtc()): 0
- ;; Expected (46800) : 46800
- "tst_qdatetime"
;; The tst_QObjectRace::destroyRace is flaky (see:
;; https://bugreports.qt.io/browse/QTBUG-103489).
"tst_qobjectrace"
@@ -910,7 +910,8 @@ (define-public qtbase
(("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)))))))))
(native-inputs
(modify-inputs (package-native-inputs qtbase-5)
- (prepend wayland-protocols
+ (prepend tzdata-for-tests
+ wayland-protocols
xvfb-run)))
(inputs
(modify-inputs (package-inputs qtbase-5)
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 19:33
[qt-team PATCH v2 0/4] Avoid capturing python in qtbase, reinstate tests
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cover.1694626350.git.maxim.cournoyer@gmail.com
Thes series removes Python from the closure of qtbase, both for versions 5.15
and 6.5. It also reinstate a few tests that was made possible thanks to
discussions with upstream following reported the issues.

Changes in v2:
- Use old TZDIR patch for qtbase@5 (the new one doesn't apply)

Maxim Cournoyer (4):
gnu: qtbase: Do not capture Python (again).
gnu: qtbase: Add $TZDIR to native search paths.
gnu: qtbase: Reinstate date related tests.
gnu: qtdeclarative: Add a debug output.

gnu/local.mk | 1 +
gnu/packages/patches/qtbase-5-use-TZDIR.patch | 39 +++++
gnu/packages/patches/qtbase-use-TZDIR.patch | 162 ++++++++++++++----
gnu/packages/qt.scm | 56 +++---
4 files changed, 208 insertions(+), 50 deletions(-)
create mode 100644 gnu/packages/patches/qtbase-5-use-TZDIR.patch


base-commit: 4cb2e08b8eb1acc824b72ec17b483d7d85b5af68
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 19:33
[qt-team PATCH v2 1/4] gnu: qtbase: Do not capture Python (again).
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
ff4d270dd33e8ef2baf9cf3a89029548c61a208d.1694626350.git.maxim.cournoyer@gmail.com

* gnu/packages/qt.scm (qtbase-5) [arguments]: Add #:disallowed-references
argument to guard against the problem reoccurring in the future.
Add do-not-capture-python phase.
(qtbase) [arguments]: Update do-not-capture-python phase.
---

(no changes since v1)

gnu/packages/qt.scm | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)

Toggle diff (57 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index b7e394d663c..a158f8114fe 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -392,7 +392,7 @@ (define-public qtbase-5
fontconfig
freetype
glib
- gtk+ ;for GTK theme support
+ gtk+ ;for GTK theme support
harfbuzz
icu4c
libinput-minimal
@@ -437,7 +437,8 @@ (define-public qtbase-5
vulkan-headers
ruby-2.7))
(arguments
- `(#:configure-flags
+ `(#:disallowed-references ,(list python)
+ #:configure-flags
(let ((out (assoc-ref %outputs "out")))
(list "-verbose"
"-prefix" out
@@ -583,7 +584,16 @@ (define-public qtbase-5
(("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b)
(string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))
(("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b)
- (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))))))))
+ (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)))))
+ (add-after 'install 'do-not-capture-python
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; For some reason, patching the file after the
+ ;; patch-source-shebangs phase doesn't work for Qt 5.
+ (substitute*
+ (search-input-file
+ outputs "lib/qt5/mkspecs/features/uikit/devices.py")
+ (((which "python3"))
+ "/usr/bin/env python3")))))))
(native-search-paths
(list (search-path-specification
(variable "QMAKEPATH")
@@ -724,10 +734,12 @@ (define-public qtbase
(substitute* "src/corelib/CMakeLists.txt"
(("/bin/ls")
(search-input-file inputs "bin/ls")))))
+ (delete 'do-not-capture-python) ;move after patch-source-shebangs
(add-after 'patch-source-shebangs 'do-not-capture-python
(lambda _
(substitute* '("mkspecs/features/uikit/devices.py"
- "util/testrunner/qt-testrunner.py")
+ "util/testrunner/qt-testrunner.py"
+ "util/testrunner/sanitizer-testrunner.py")
(((which "python3"))
"/usr/bin/env python3"))))
(replace 'configure
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 19:33
[qt-team PATCH v2 2/4] gnu: qtbase: Add $TZDIR to native search paths.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
0e56555b7b6826b81d721836d5312b01f6e3525c.1694626350.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-search-paths]: Add $TZDIR.
---

(no changes since v1)

gnu/packages/qt.scm | 2 ++
1 file changed, 2 insertions(+)

Toggle diff (22 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index a158f8114fe..8324beef6fc 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -60,6 +60,7 @@ (define-module (gnu packages qt)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix deprecation)
+ #:use-module (guix search-paths)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages bash)
@@ -933,6 +934,7 @@ (define-public qtbase
(search-path-specification
(variable "QT_PLUGIN_PATH")
(files '("lib/qt6/plugins")))
+ $TZDIR
(search-path-specification
(variable "XDG_DATA_DIRS")
(files '("share")))
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 19:33
[qt-team PATCH v2 3/4] gnu: qtbase: Reinstate date related tests.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
931555dfc97a20c94e7ca50d61373a4d10548a17.1694626350.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-inputs]: Add tzdata-for-tests.
[arguments]: Set the TZDIR and TZ environment variables, and reinstate the
tst_qdate, tst_qtimezone and tst_qdatetime tests in the check phase.
(qtbase-5) [source]: Replace qtbase-use-TZDIR.patch with
qtbase-5-use-TZDIR.patch.
* gnu/packages/patches/qtbase-use-TZDIR.patch: Refresh patch with upstream
version, and preserve the old one for qtbase@5 as...
* gnu/packages/patches/qtbase-5-use-TZDIR.patch: ... this.
* gnu/local.mk (dist_patch_DATA): Register new patch.

---

Changes in v2:
- Use old TZDIR patch for qtbase@5 (the new one doesn't apply)

gnu/local.mk | 1 +
gnu/packages/patches/qtbase-5-use-TZDIR.patch | 39 +++++
gnu/packages/patches/qtbase-use-TZDIR.patch | 162 ++++++++++++++----
gnu/packages/qt.scm | 33 ++--
4 files changed, 189 insertions(+), 46 deletions(-)
create mode 100644 gnu/packages/patches/qtbase-5-use-TZDIR.patch

Toggle diff (314 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 4f8637418ad..2d8ddf5716c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1878,6 +1878,7 @@ dist_patch_DATA = \
%D%/packages/patches/qtbase-absolute-runpath.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 \
diff --git a/gnu/packages/patches/qtbase-5-use-TZDIR.patch b/gnu/packages/patches/qtbase-5-use-TZDIR.patch
new file mode 100644
index 00000000000..b6c377b133c
--- /dev/null
+++ b/gnu/packages/patches/qtbase-5-use-TZDIR.patch
@@ -0,0 +1,39 @@
+Use $TZDIR to search for time-zone data. Thus avoid depending on package
+"tzdata", which often introduces changes with near-immediate effects, so it's
+important to be able to update it fast.
+
+Based on a patch fron NixOS.
+===================================================================
+--- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
++++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
+@@ -70,7 +70,11 @@
+ // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+ static QTzTimeZoneHash loadTzTimeZones()
+ {
+- QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
++ // Try TZDIR first, in case we're running on GuixSD.
++ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
++ // Fallback to traditional paths in case we are not on GuixSD.
++ if (!QFile::exists(path))
++ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
+ if (!QFile::exists(path))
+ path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
+
+@@ -645,6 +649,9 @@
+ if (!tzif.open(QIODevice::ReadOnly))
+ return;
+ } else {
++ // Try TZDIR first, in case we're running on GuixSD.
++ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
++ if (!tzif.open(QIODevice::ReadOnly)) {
+ // Open named tz, try modern path first, if fails try legacy path
+ tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
+ if (!tzif.open(QIODevice::ReadOnly)) {
+@@ -652,6 +659,7 @@
+ if (!tzif.open(QIODevice::ReadOnly))
+ return;
+ }
++ }
+ }
+
+ QDataStream ds(&tzif);
diff --git a/gnu/packages/patches/qtbase-use-TZDIR.patch b/gnu/packages/patches/qtbase-use-TZDIR.patch
index b6c377b133c..98bf7493e9f 100644
--- a/gnu/packages/patches/qtbase-use-TZDIR.patch
+++ b/gnu/packages/patches/qtbase-use-TZDIR.patch
@@ -1,39 +1,141 @@
-Use $TZDIR to search for time-zone data. Thus avoid depending on package
-"tzdata", which often introduces changes with near-immediate effects, so it's
-important to be able to update it fast.
+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
-Based on a patch fron NixOS.
-===================================================================
---- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
-+++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
-@@ -70,7 +70,11 @@
- // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+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");
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
-+ // Fallback to traditional paths in case we are not on GuixSD.
-+ if (!QFile::exists(path))
-+ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
- if (!QFile::exists(path))
- path = QStringLiteral("/usr/lib/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();
-@@ -645,6 +649,9 @@
+ 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;
- } else {
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
-+ if (!tzif.open(QIODevice::ReadOnly)) {
- // Open named tz, try modern path first, if fails try legacy path
- tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
-@@ -652,6 +659,7 @@
- if (!tzif.open(QIODevice::ReadOnly))
- return;
+ 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;
}
-+ }
}
- QDataStream ds(&tzif);
+@@ -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
+
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 8324beef6fc..c06f27c03e2 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -365,7 +365,7 @@ (define-public qtbase-5
(base32
"1fcg3kx5akvj0kqxd99h5lv3kv4pw2cj0makmpvhpw90inqnrl60"))
;; Use TZDIR to avoid depending on package "tzdata".
- (patches (search-patches "qtbase-use-TZDIR.patch"
+ (patches (search-patches "qtbase-5-use-TZDIR.patch"
"qtbase-moc-ignore-gcc-macro.patch"
"qtbase-absolute-runpath.patch"))
(modules '((guix build utils)))
@@ -747,7 +747,8 @@ (define-public qtbase
(assoc-ref %standard-phases 'configure))
(delete 'check) ;move after patch-prl-files
(add-after 'patch-prl-files 'check
- (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+ (lambda* (#:key tests? parallel-tests?
+ native-inputs inputs #:allow-other-keys)
(when tests?
;; The tests expect to find the modules provided by this
;; package; extend the environment variables needed to do so.
@@ -770,6 +771,18 @@ (define-public qtbase
;; /tree/src/testlib/qtestblacklist.cpp).
(setenv "QTEST_ENVIRONMENT" "linux ci 32bit")
(setenv "HOME" "/tmp") ;some tests require a writable HOME
+
+ ;; Note: the search path specified for TZDIR is only
+ ;; effective for users of the package, not while it's being
+ ;; built.
+ (setenv "TZDIR" (search-input-directory
+ (or native-inputs inputs) "share/zoneinfo"))
+
+ ;; This is to avoid QTimeZone::systemTimeZone() returning
+ ;; invalid QDate objects due to missing /etc/timezone or
+ ;; /etc/localtime.
+ (setenv "TZ" "Etc/UTC")
+
(invoke
"xvfb-run" "ctest" "--output-on-failure"
"-j" (if parallel-tests?
@@ -783,11 +796,6 @@ (define-public qtbase
;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
"tst_moc"
- ;; The 'tst_qdate' test fails because the current time
- ;; is reported as an invalid date (see:
- ;; https://bugreports.qt.io/browse/QTBUG-116017).
- "tst_qdate"
-
;; The qgraphicsview and qopenglwidget tests fail with a
;; segfault for unknown reasons (see:
;; https://bugreports.qt.io/browse/QTBUG-116018).
@@ -826,14 +834,6 @@ (define-public qtbase
;; The 'test_import_plugins' fails with "Could NOT find
;; Qt6MockPlugins1".
"test_import_plugins"
- ;; The 'tst_QTimeZone::systemZone' validates the
- ;; currently set timezone and fails.
- "tst_qtimezone"
- ;; The 'tst_qdatetime' fails with:
- ;; FAIL! : tst_QDateTime::offsetFromUtc() Compared values are not the same
- ;; Actual (dt5.offsetFromUtc()): 0
- ;; Expected (46800) : 46800
- "tst_qdatetime"
;; The tst_QObjectRace::destroyRace is flaky (see:
;; https://bugreports.qt.io/browse/QTBUG-103489).
"tst_qobjectrace"
@@ -910,7 +910,8 @@ (define-public qtbase
(("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)))))))))
(native-inputs
(modify-inputs (package-native-inputs qtbase-5)
- (prepend wayland-protocols
+ (prepend tzdata-for-tests
+ wayland-protocols
xvfb-run)))
(inputs
(modify-inputs (package-inputs qtbase-5)
--
2.41.0
M
M
Maxim Cournoyer wrote on 13 Sep 2023 19:33
[qt-team PATCH v2 4/4] gnu: qtdeclarative: Add a debug output.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
5cf937f9872ae58ffdc4249dc0cacf26857b7527.1694626350.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtdeclarative) [outputs]: New field.

---

(no changes since v1)

gnu/packages/qt.scm | 1 +
1 file changed, 1 insertion(+)

Toggle diff (14 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index c06f27c03e2..ab99f590b25 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -1350,6 +1350,7 @@ (define-public qtdeclarative
(base32
"06c7xfqn2a5s2m8j1bcvx3pyjqg1rgqkjvp49737gb4z9vjiz8gk"))
(patches (search-patches "qtdeclarative-disable-qmlcache.patch"))))
+ (outputs '("out" "debug"))
(build-system cmake-build-system)
(arguments
(list
--
2.41.0
A
A
Andreas Enge wrote on 14 Sep 2023 11:07
Re: [bug#65922] [qt-team PATCH v2 1/4] gnu: qtbase: Do not capture Python (again).
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
ZQLNTFFbYVFoeyvs@jurong
Hello,

I just happened to have the time for one patch :)

Am Wed, Sep 13, 2023 at 01:33:13PM -0400 schrieb Maxim Cournoyer:
Toggle quote (5 lines)
> * gnu/packages/qt.scm (qtbase-5) [arguments]: Add #:disallowed-references
> argument to guard against the problem reoccurring in the future.
> Add do-not-capture-python phase.
> (qtbase) [arguments]: Update do-not-capture-python phase.

This one looks good, except for indentation there, I think:
Toggle quote (6 lines)
> + (substitute*
> + (search-input-file
> + outputs "lib/qt5/mkspecs/features/uikit/devices.py")
> + (((which "python3"))
> + "/usr/bin/env python3")))))))

Andreas
M
M
Maxim Cournoyer wrote on 17 Sep 2023 04:51
(name . Andreas Enge)(address . andreas@enge.fr)
87o7i18qc5.fsf@gmail.com
Hi Andreas,

Andreas Enge <andreas@enge.fr> writes:

Toggle quote (17 lines)
> Hello,
>
> I just happened to have the time for one patch :)
>
> Am Wed, Sep 13, 2023 at 01:33:13PM -0400 schrieb Maxim Cournoyer:
>> * gnu/packages/qt.scm (qtbase-5) [arguments]: Add #:disallowed-references
>> argument to guard against the problem reoccurring in the future.
>> Add do-not-capture-python phase.
>> (qtbase) [arguments]: Update do-not-capture-python phase.
>
> This one looks good, except for indentation there, I think:
>> + (substitute*
>> + (search-input-file
>> + outputs "lib/qt5/mkspecs/features/uikit/devices.py")
>> + (((which "python3"))
>> + "/usr/bin/env python3")))))))

It's actually valid -- I just doubled check :-)

Thanks for taking a peek.

--
Thanks,
Maxim
A
A
Andreas Enge wrote on 17 Sep 2023 12:12
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
ZQbQ9LJbVXkAziIK@jurong
Am Sat, Sep 16, 2023 at 10:51:22PM -0400 schrieb Maxim Cournoyer:
Toggle quote (8 lines)
> > This one looks good, except for indentation there, I think:
> >> + (substitute*
> >> + (search-input-file
> >> + outputs "lib/qt5/mkspecs/features/uikit/devices.py")
> >> + (((which "python3"))
> >> + "/usr/bin/env python3")))))))
> It's actually valid -- I just doubled check :-)

Hm, I thought that arguments to functions should be aligned, so that
"(search-..." and "(((which" should start in the same column?
And that we would indent by either 1 or 2 (according to arcane rules I
never memorised)?

Andreas
M
M
Maxim Cournoyer wrote on 17 Sep 2023 14:55
(name . Andreas Enge)(address . andreas@enge.fr)
87h6nt7ycl.fsf@gmail.com
Hi Andreas,

Andreas Enge <andreas@enge.fr> writes:

Toggle quote (14 lines)
> Am Sat, Sep 16, 2023 at 10:51:22PM -0400 schrieb Maxim Cournoyer:
>> > This one looks good, except for indentation there, I think:
>> >> + (substitute*
>> >> + (search-input-file
>> >> + outputs "lib/qt5/mkspecs/features/uikit/devices.py")
>> >> + (((which "python3"))
>> >> + "/usr/bin/env python3")))))))
>> It's actually valid -- I just doubled check :-)
>
> Hm, I thought that arguments to functions should be aligned, so that
> "(search-..." and "(((which" should start in the same column?
> And that we would indent by either 1 or 2 (according to arcane rules I
> never memorised)?

According to our indentation rules in .dir-locals.el:

Toggle snippet (3 lines)
(put 'substitute* 'scheme-indent-function 1)

Which, following the Emacs documentation for scheme-indent-function then
lisp-indent-function (C-h f scheme-indent-function RET), says (where N
is the 1 argument):

Toggle snippet (5 lines)
* an integer N, meaning indent the first N arguments specially
(like ordinary function arguments), and then indent any further
arguments like a body;

The indentation produced is because of that special rule.

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 0/5] Avoid capturing python in qtbase, reinstate tests
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
cover.1694971566.git.maxim.cournoyer@gmail.com
Thes series removes Python from the closure of qtbase, both for versions 5.15
and 6.5. It also reinstate a few tests that was made possible thanks to
discussions with upstream following reported the issues.

Changes in v3:
- New commit

Changes in v2:
- Use old TZDIR patch for qtbase@5 (the new one doesn't apply)

Maxim Cournoyer (5):
gnu: qtbase: Do not capture Python (again).
gnu: qtbase: Add $TZDIR to native search paths.
gnu: qtbase: Reinstate date related tests.
gnu: qtbase: Disable problematic tests on powerpc64le.
gnu: qtdeclarative: Add a debug output.

gnu/local.mk | 1 +
gnu/packages/patches/qtbase-5-use-TZDIR.patch | 39 +++
gnu/packages/patches/qtbase-use-TZDIR.patch | 162 +++++++++---
gnu/packages/qt.scm | 236 ++++++++++--------
4 files changed, 309 insertions(+), 129 deletions(-)
create mode 100644 gnu/packages/patches/qtbase-5-use-TZDIR.patch


base-commit: 4cb2e08b8eb1acc824b72ec17b483d7d85b5af68
--
2.41.0
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 1/5] gnu: qtbase: Do not capture Python (again).
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
ff4d270dd33e8ef2baf9cf3a89029548c61a208d.1694971566.git.maxim.cournoyer@gmail.com

* gnu/packages/qt.scm (qtbase-5) [arguments]: Add #:disallowed-references
argument to guard against the problem reoccurring in the future.
Add do-not-capture-python phase.
(qtbase) [arguments]: Update do-not-capture-python phase.
---

(no changes since v1)

gnu/packages/qt.scm | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)

Toggle diff (57 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index b7e394d663c..a158f8114fe 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -392,7 +392,7 @@ (define-public qtbase-5
fontconfig
freetype
glib
- gtk+ ;for GTK theme support
+ gtk+ ;for GTK theme support
harfbuzz
icu4c
libinput-minimal
@@ -437,7 +437,8 @@ (define-public qtbase-5
vulkan-headers
ruby-2.7))
(arguments
- `(#:configure-flags
+ `(#:disallowed-references ,(list python)
+ #:configure-flags
(let ((out (assoc-ref %outputs "out")))
(list "-verbose"
"-prefix" out
@@ -583,7 +584,16 @@ (define-public qtbase-5
(("^\\s*(QLibrary xcursorLib\\(QLatin1String\\(\")(Xcursor\"\\), 1\\);)" _ a b)
(string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))
(("^\\s*(xcursorLib.setFileName\\(QLatin1String\\(\")(Xcursor\"\\)\\);)" _ a b)
- (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b))))))))
+ (string-append a (assoc-ref inputs "libxcursor") "/lib/lib" b)))))
+ (add-after 'install 'do-not-capture-python
+ (lambda* (#:key outputs #:allow-other-keys)
+ ;; For some reason, patching the file after the
+ ;; patch-source-shebangs phase doesn't work for Qt 5.
+ (substitute*
+ (search-input-file
+ outputs "lib/qt5/mkspecs/features/uikit/devices.py")
+ (((which "python3"))
+ "/usr/bin/env python3")))))))
(native-search-paths
(list (search-path-specification
(variable "QMAKEPATH")
@@ -724,10 +734,12 @@ (define-public qtbase
(substitute* "src/corelib/CMakeLists.txt"
(("/bin/ls")
(search-input-file inputs "bin/ls")))))
+ (delete 'do-not-capture-python) ;move after patch-source-shebangs
(add-after 'patch-source-shebangs 'do-not-capture-python
(lambda _
(substitute* '("mkspecs/features/uikit/devices.py"
- "util/testrunner/qt-testrunner.py")
+ "util/testrunner/qt-testrunner.py"
+ "util/testrunner/sanitizer-testrunner.py")
(((which "python3"))
"/usr/bin/env python3"))))
(replace 'configure
--
2.41.0
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 2/5] gnu: qtbase: Add $TZDIR to native search paths.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
0e56555b7b6826b81d721836d5312b01f6e3525c.1694971566.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-search-paths]: Add $TZDIR.
---

(no changes since v1)

gnu/packages/qt.scm | 2 ++
1 file changed, 2 insertions(+)

Toggle diff (22 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index a158f8114fe..8324beef6fc 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -60,6 +60,7 @@ (define-module (gnu packages qt)
#:use-module (guix gexp)
#:use-module (guix packages)
#:use-module (guix deprecation)
+ #:use-module (guix search-paths)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages bash)
@@ -933,6 +934,7 @@ (define-public qtbase
(search-path-specification
(variable "QT_PLUGIN_PATH")
(files '("lib/qt6/plugins")))
+ $TZDIR
(search-path-specification
(variable "XDG_DATA_DIRS")
(files '("share")))
--
2.41.0
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 3/5] gnu: qtbase: Reinstate date related tests.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
931555dfc97a20c94e7ca50d61373a4d10548a17.1694971566.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [native-inputs]: Add tzdata-for-tests.
[arguments]: Set the TZDIR and TZ environment variables, and reinstate the
tst_qdate, tst_qtimezone and tst_qdatetime tests in the check phase.
(qtbase-5) [source]: Replace qtbase-use-TZDIR.patch with
qtbase-5-use-TZDIR.patch.
* gnu/packages/patches/qtbase-use-TZDIR.patch: Refresh patch with upstream
version, and preserve the old one for qtbase@5 as...
* gnu/packages/patches/qtbase-5-use-TZDIR.patch: ... this.
* gnu/local.mk (dist_patch_DATA): Register new patch.

---

(no changes since v2)

Changes in v2:
- Use old TZDIR patch for qtbase@5 (the new one doesn't apply)

gnu/local.mk | 1 +
gnu/packages/patches/qtbase-5-use-TZDIR.patch | 39 +++++
gnu/packages/patches/qtbase-use-TZDIR.patch | 162 ++++++++++++++----
gnu/packages/qt.scm | 33 ++--
4 files changed, 189 insertions(+), 46 deletions(-)
create mode 100644 gnu/packages/patches/qtbase-5-use-TZDIR.patch

Toggle diff (314 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index 4f8637418ad..2d8ddf5716c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1878,6 +1878,7 @@ dist_patch_DATA = \
%D%/packages/patches/qtbase-absolute-runpath.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 \
diff --git a/gnu/packages/patches/qtbase-5-use-TZDIR.patch b/gnu/packages/patches/qtbase-5-use-TZDIR.patch
new file mode 100644
index 00000000000..b6c377b133c
--- /dev/null
+++ b/gnu/packages/patches/qtbase-5-use-TZDIR.patch
@@ -0,0 +1,39 @@
+Use $TZDIR to search for time-zone data. Thus avoid depending on package
+"tzdata", which often introduces changes with near-immediate effects, so it's
+important to be able to update it fast.
+
+Based on a patch fron NixOS.
+===================================================================
+--- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
++++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
+@@ -70,7 +70,11 @@
+ // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+ static QTzTimeZoneHash loadTzTimeZones()
+ {
+- QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
++ // Try TZDIR first, in case we're running on GuixSD.
++ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
++ // Fallback to traditional paths in case we are not on GuixSD.
++ if (!QFile::exists(path))
++ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
+ if (!QFile::exists(path))
+ path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
+
+@@ -645,6 +649,9 @@
+ if (!tzif.open(QIODevice::ReadOnly))
+ return;
+ } else {
++ // Try TZDIR first, in case we're running on GuixSD.
++ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
++ if (!tzif.open(QIODevice::ReadOnly)) {
+ // Open named tz, try modern path first, if fails try legacy path
+ tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
+ if (!tzif.open(QIODevice::ReadOnly)) {
+@@ -652,6 +659,7 @@
+ if (!tzif.open(QIODevice::ReadOnly))
+ return;
+ }
++ }
+ }
+
+ QDataStream ds(&tzif);
diff --git a/gnu/packages/patches/qtbase-use-TZDIR.patch b/gnu/packages/patches/qtbase-use-TZDIR.patch
index b6c377b133c..98bf7493e9f 100644
--- a/gnu/packages/patches/qtbase-use-TZDIR.patch
+++ b/gnu/packages/patches/qtbase-use-TZDIR.patch
@@ -1,39 +1,141 @@
-Use $TZDIR to search for time-zone data. Thus avoid depending on package
-"tzdata", which often introduces changes with near-immediate effects, so it's
-important to be able to update it fast.
+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
-Based on a patch fron NixOS.
-===================================================================
---- qtbase-opensource-src-5.14.2.orig/src/corelib/time/qtimezoneprivate_tz.cpp
-+++ qtbase-opensource-src-5.15.2/src/corelib/time/qtimezoneprivate_tz.cpp
-@@ -70,7 +70,11 @@
- // Parse zone.tab table, assume lists all installed zones, if not will need to read directories
+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");
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
-+ // Fallback to traditional paths in case we are not on GuixSD.
-+ if (!QFile::exists(path))
-+ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
- if (!QFile::exists(path))
- path = QStringLiteral("/usr/lib/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();
-@@ -645,6 +649,9 @@
+ 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;
- } else {
-+ // Try TZDIR first, in case we're running on GuixSD.
-+ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
-+ if (!tzif.open(QIODevice::ReadOnly)) {
- // Open named tz, try modern path first, if fails try legacy path
- tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
- if (!tzif.open(QIODevice::ReadOnly)) {
-@@ -652,6 +659,7 @@
- if (!tzif.open(QIODevice::ReadOnly))
- return;
+ 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;
}
-+ }
}
- QDataStream ds(&tzif);
+@@ -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
+
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 8324beef6fc..c06f27c03e2 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -365,7 +365,7 @@ (define-public qtbase-5
(base32
"1fcg3kx5akvj0kqxd99h5lv3kv4pw2cj0makmpvhpw90inqnrl60"))
;; Use TZDIR to avoid depending on package "tzdata".
- (patches (search-patches "qtbase-use-TZDIR.patch"
+ (patches (search-patches "qtbase-5-use-TZDIR.patch"
"qtbase-moc-ignore-gcc-macro.patch"
"qtbase-absolute-runpath.patch"))
(modules '((guix build utils)))
@@ -747,7 +747,8 @@ (define-public qtbase
(assoc-ref %standard-phases 'configure))
(delete 'check) ;move after patch-prl-files
(add-after 'patch-prl-files 'check
- (lambda* (#:key tests? parallel-tests? #:allow-other-keys)
+ (lambda* (#:key tests? parallel-tests?
+ native-inputs inputs #:allow-other-keys)
(when tests?
;; The tests expect to find the modules provided by this
;; package; extend the environment variables needed to do so.
@@ -770,6 +771,18 @@ (define-public qtbase
;; /tree/src/testlib/qtestblacklist.cpp).
(setenv "QTEST_ENVIRONMENT" "linux ci 32bit")
(setenv "HOME" "/tmp") ;some tests require a writable HOME
+
+ ;; Note: the search path specified for TZDIR is only
+ ;; effective for users of the package, not while it's being
+ ;; built.
+ (setenv "TZDIR" (search-input-directory
+ (or native-inputs inputs) "share/zoneinfo"))
+
+ ;; This is to avoid QTimeZone::systemTimeZone() returning
+ ;; invalid QDate objects due to missing /etc/timezone or
+ ;; /etc/localtime.
+ (setenv "TZ" "Etc/UTC")
+
(invoke
"xvfb-run" "ctest" "--output-on-failure"
"-j" (if parallel-tests?
@@ -783,11 +796,6 @@ (define-public qtbase
;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
"tst_moc"
- ;; The 'tst_qdate' test fails because the current time
- ;; is reported as an invalid date (see:
- ;; https://bugreports.qt.io/browse/QTBUG-116017).
- "tst_qdate"
-
;; The qgraphicsview and qopenglwidget tests fail with a
;; segfault for unknown reasons (see:
;; https://bugreports.qt.io/browse/QTBUG-116018).
@@ -826,14 +834,6 @@ (define-public qtbase
;; The 'test_import_plugins' fails with "Could NOT find
;; Qt6MockPlugins1".
"test_import_plugins"
- ;; The 'tst_QTimeZone::systemZone' validates the
- ;; currently set timezone and fails.
- "tst_qtimezone"
- ;; The 'tst_qdatetime' fails with:
- ;; FAIL! : tst_QDateTime::offsetFromUtc() Compared values are not the same
- ;; Actual (dt5.offsetFromUtc()): 0
- ;; Expected (46800) : 46800
- "tst_qdatetime"
;; The tst_QObjectRace::destroyRace is flaky (see:
;; https://bugreports.qt.io/browse/QTBUG-103489).
"tst_qobjectrace"
@@ -910,7 +910,8 @@ (define-public qtbase
(("\\$\\$\\[QT_HOST_DATA/src\\]") archdata)))))))))
(native-inputs
(modify-inputs (package-native-inputs qtbase-5)
- (prepend wayland-protocols
+ (prepend tzdata-for-tests
+ wayland-protocols
xvfb-run)))
(inputs
(modify-inputs (package-inputs qtbase-5)
--
2.41.0
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 4/5] gnu: qtbase: Disable problematic tests on powerpc64le.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
fd1800e96c5a75fd07e508468b33d6e368c86949.1694971566.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtbase) [arguments] [powerpc64le]: Disable the
tst_qpainter, tst_qprocess and tst_qsqlthread tests in the check phase.

---

Changes in v3:
- New commit

gnu/packages/qt.scm | 180 +++++++++++++++++++++++++-------------------
1 file changed, 101 insertions(+), 79 deletions(-)

Toggle diff (193 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index c06f27c03e2..8cc1fa7398d 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -792,85 +792,107 @@ (define-public qtbase
(string-append
"("
(string-join
- (list
- ;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
- "tst_moc"
-
- ;; The qgraphicsview and qopenglwidget tests fail with a
- ;; segfault for unknown reasons (see:
- ;; https://bugreports.qt.io/browse/QTBUG-116018).
- "tst_qgraphicsview"
- "tst_qopenglwidget"
-
- ;; The 'test_rcc' test fails on a comparison:
- ;; <<<<<< actual
- ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xe8,
- ;; ======
- ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
- ;; >>>>>> expected
- "tst_rcc"
- ;; The 'tst_qtemporarydir' and 'tst_qtemporaryfile'
- ;; tests depend on '/home' not being writable.
- "tst_qtemporarydir"
- "tst_qtemporaryfile"
- ;; The 'tst_qdir' compares two directories which are
- ;; unexpectedly different when inside the build
- ;; container.
- "tst_qdir"
- ;; This checks the last modified time of '/', and fails
- ;; because Epoch 0 is considered to be invalid.
- "tst_qresourceengine"
- ;; The 'tst_qfilesystemwatcher' installs a watcher on
- ;; '/home', which doesn't exist in the build container.
- "tst_qfilesystemwatcher"
- ;; Not all of the tested formats are supported by our
- ;; build of openssl; 871 passed, 122 failed.
- "tst_qsslkey"
- ;; The 'mockplugins' test fail following error: "Unknown
- ;; platform linux-g++", and the other plugin tests
- ;; depend on it.
- "mockplugins"
- "test_plugin_flavor.*"
- ;; The 'test_import_plugins' fails with "Could NOT find
- ;; Qt6MockPlugins1".
- "test_import_plugins"
- ;; The tst_QObjectRace::destroyRace is flaky (see:
- ;; https://bugreports.qt.io/browse/QTBUG-103489).
- "tst_qobjectrace"
- ;; The 'tst_QSettings::fromFile' assumes the data
- ;; location to be relative to the root directory and
- ;; fails.
- "tst_qsettings"
- ;; The 'tst_qaddpreroutine',
- ;; 'test_generating_cpp_exports' and
- ;; 'test_static_resources' tests fail with: "Unknown
- ;; platform linux-g++.
- "tst_qaddpreroutine"
- "test_generating_cpp_exports"
- "test_static_resources"
- ;; The 'tst_qfile' fails since there is no /home in the
- ;; build container.
- "tst_qfile"
- ;; The 'tst_QGlyphRun::mixedScripts' test fails with:
- ;; Actual (glyphRuns.size()): 1
- ;; Expected (2) : 2
- "tst_qglyphrun"
- ;; The 'tst_qx11info' test fails with "Internal error:
- ;; QPA plugin doesn't implement generatePeekerId",
- ;; likely requires a real display.
- "tst_qx11info"
- ;; The 'tst_qgraphicswidget' test fails because "This
- ;; plugin does not support propagateSizeHints".
- "tst_qgraphicswidget"
- ;; The 'tst_qdnslookup' test requires networking.
- "tst_qdnslookup"
- ;; The 'tst_qcompleter' and 'tst_QFiledialog::completer'
- ;; attempt to complete paths they assume exist, such as
- ;; "/home", "/etc" or "/root" and fail.
- "tst_qcompleter"
- "tst_qfiledialog"
- ;; This test is susceptible to the 600 ms timeout used:
- "tst_qpauseanimation") "|") ")")))))
+ (append
+ (list
+ ;; The 'tst_moc' test fails with "'fi.exists()' returned FALSE".
+ "tst_moc"
+
+ ;; The qgraphicsview and qopenglwidget tests fail with a
+ ;; segfault for unknown reasons (see:
+ ;; https://bugreports.qt.io/browse/QTBUG-116018).
+ "tst_qgraphicsview"
+ "tst_qopenglwidget"
+
+ ;; The 'test_rcc' test fails on a comparison:
+ ;; <<<<<< actual
+ ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xe8,
+ ;; ======
+ ;; 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ ;; >>>>>> expected
+ "tst_rcc"
+ ;; The 'tst_qtemporarydir' and 'tst_qtemporaryfile'
+ ;; tests depend on '/home' not being writable.
+ "tst_qtemporarydir"
+ "tst_qtemporaryfile"
+ ;; The 'tst_qdir' compares two directories which are
+ ;; unexpectedly different when inside the build
+ ;; container.
+ "tst_qdir"
+ ;; This checks the last modified time of '/', and fails
+ ;; because Epoch 0 is considered to be invalid.
+ "tst_qresourceengine"
+ ;; The 'tst_qfilesystemwatcher' installs a watcher on
+ ;; '/home', which doesn't exist in the build container.
+ "tst_qfilesystemwatcher"
+ ;; Not all of the tested formats are supported by our
+ ;; build of openssl; 871 passed, 122 failed.
+ "tst_qsslkey"
+ ;; The 'mockplugins' test fail following error: "Unknown
+ ;; platform linux-g++", and the other plugin tests
+ ;; depend on it.
+ "mockplugins"
+ "test_plugin_flavor.*"
+ ;; The 'test_import_plugins' fails with "Could NOT find
+ ;; Qt6MockPlugins1".
+ "test_import_plugins"
+ ;; The tst_QObjectRace::destroyRace is flaky (see:
+ ;; https://bugreports.qt.io/browse/QTBUG-103489).
+ "tst_qobjectrace"
+ ;; The 'tst_QSettings::fromFile' assumes the data
+ ;; location to be relative to the root directory and
+ ;; fails.
+ "tst_qsettings"
+ ;; The 'tst_qaddpreroutine',
+ ;; 'test_generating_cpp_exports' and
+ ;; 'test_static_resources' tests fail with: "Unknown
+ ;; platform linux-g++.
+ "tst_qaddpreroutine"
+ "test_generating_cpp_exports"
+ "test_static_resources"
+ ;; The 'tst_qfile' fails since there is no /home in the
+ ;; build container.
+ "tst_qfile"
+ ;; The 'tst_QGlyphRun::mixedScripts' test fails with:
+ ;; Actual (glyphRuns.size()): 1
+ ;; Expected (2) : 2
+ "tst_qglyphrun"
+ ;; The 'tst_qx11info' test fails with "Internal error:
+ ;; QPA plugin doesn't implement generatePeekerId",
+ ;; likely requires a real display.
+ "tst_qx11info"
+
+ ;; The 'tst_qgraphicswidget' test fails because "This
+ ;; plugin does not support propagateSizeHints".
+ "tst_qgraphicswidget"
+ ;; The 'tst_qdnslookup' test requires networking.
+ "tst_qdnslookup"
+ ;; The 'tst_qcompleter' and 'tst_QFiledialog::completer'
+ ;; attempt to complete paths they assume exist, such as
+ ;; "/home", "/etc" or "/root" and fail.
+ "tst_qcompleter"
+ "tst_qfiledialog"
+ ;; This test is susceptible to the 600 ms timeout used:
+ "tst_qpauseanimation")
+ #$@(if (target-ppc64le?)
+ #~((list
+ ;; The 'tst_QPainter::fpe_radialGradients'
+ ;; test fails with a 'Floating point
+ ;; exception' error on powerpc64le (see:
+ ;; https://bugreports.qt.io/browse/QTBUG-117113).
+ "tst_qpainter"
+
+ ;; The 'startStopStartStopBuffers' test fails
+ ;; on the powerpc64le architecture (see:
+ ;; https://bugreports.qt.io/browse/QTBUG-80953).
+ "tst_qprocess"
+
+ ;; The 'tst_QSqlThread::readWriteThreading'
+ ;; test may fail with an sqlite related error,
+ ;; "'Unable to fetch row' || 'database is
+ ;; locked'" (see:
+ ;; https://bugreports.qt.io/browse/QTBUG-117114).
+ "tst_qsqlthread"))
+ #~())) "|") ")")))))
(replace 'patch-mkspecs
(lambda* (#:key outputs #:allow-other-keys)
(let* ((archdata (search-input-directory outputs "lib/qt6"))
--
2.41.0
M
M
Maxim Cournoyer wrote on 17 Sep 2023 19:26
[qt-team PATCH v3 5/5] gnu: qtdeclarative: Add a debug output.
(address . 65922@debbugs.gnu.org)(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
5bfc9e9fe16144a7231d2643da4abce5ae364930.1694971566.git.maxim.cournoyer@gmail.com
* gnu/packages/qt.scm (qtdeclarative) [outputs]: New field.

---

(no changes since v1)

gnu/packages/qt.scm | 1 +
1 file changed, 1 insertion(+)

Toggle diff (14 lines)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 8cc1fa7398d..87de296013f 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -1372,6 +1372,7 @@ (define-public qtdeclarative
(base32
"06c7xfqn2a5s2m8j1bcvx3pyjqg1rgqkjvp49737gb4z9vjiz8gk"))
(patches (search-patches "qtdeclarative-disable-qmlcache.patch"))))
+ (outputs '("out" "debug"))
(build-system cmake-build-system)
(arguments
(list
--
2.41.0
M
M
Maxim Cournoyer wrote on 16 Oct 2023 23:45
Re: bug#65922: [qt-team PATCH 0/4] Avoid capturing python in qtbase, reinstate tests
(address . 65922-done@debbugs.gnu.org)
87ttqqutq4.fsf@gmail.com
Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:

Toggle quote (13 lines)
> Thes series removes Python from the closure of qtbase, both for versions 5.15
> and 6.5. It also reinstate a few tests that was made possible thanks to
> discussions with upstream following reported the issues.
>
> Changes in v2:
> - Also apply fix to qtbase-5 package.
>
> Maxim Cournoyer (4):
> gnu: qtbase: Do not capture Python (again).
> gnu: qtbase: Add $TZDIR to native search paths.
> gnu: qtbase: Reinstate date related tests.
> gnu: qtdeclarative: Add a debug output.

Now merged.

--
Thanks,
Maxim
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 65922@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 65922
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch