commit: 99ee62b2dd16d747c666d86a12c005c5c356dbe9 Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> AuthorDate: Wed Jan 19 16:49:25 2022 +0000 Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org> CommitDate: Wed Jan 19 16:49:39 2022 +0000 URL: https://gitweb.gentoo.org/proj/qt.git/commit/?id=99ee62b2
dev-qt/qtcore: Drop obsolete downstream reverts Upstream MR was merged: https://invent.kde.org/qt/qt/qtbase/-/merge_requests/111 QTBUG: https://bugreports.qt.io/browse/QTBUG-87326 Bug: https://bugs.gentoo.org/737914 Package-Manager: Portage-3.0.30, Repoman-3.0.3 Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org> dev-qt/qtcore/files/qtcore-5.15.1-timezone-1.patch | 271 --------------------- dev-qt/qtcore/files/qtcore-5.15.1-timezone-2.patch | 47 ---- dev-qt/qtcore/qtcore-5.15.2.9999.ebuild | 3 +- 3 files changed, 1 insertion(+), 320 deletions(-) diff --git a/dev-qt/qtcore/files/qtcore-5.15.1-timezone-1.patch b/dev-qt/qtcore/files/qtcore-5.15.1-timezone-1.patch deleted file mode 100644 index 1c8f1e89..00000000 --- a/dev-qt/qtcore/files/qtcore-5.15.1-timezone-1.patch +++ /dev/null @@ -1,271 +0,0 @@ -From c337f6fae51b987ce7dbed1fd9bea41e6073efbb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <dilfri...@gentoo.org> -Date: Sat, 10 Oct 2020 19:26:13 +0200 -Subject: [PATCH 1/2] Revert "Cache system zone ID when fetched from the - file-system" - -This reverts commit c70ce3d042025c858faffe661f85d2482a2a0d8c. ---- - src/corelib/time/qtimezoneprivate_tz.cpp | 205 +++++++---------------- - 1 file changed, 64 insertions(+), 141 deletions(-) - -diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp -index c5c70b7364..01f9a6cce0 100644 ---- a/src/corelib/time/qtimezoneprivate_tz.cpp -+++ b/src/corelib/time/qtimezoneprivate_tz.cpp -@@ -1,6 +1,5 @@ - /**************************************************************************** - ** --** Copyright (C) 2020 The Qt Company Ltd. - ** Copyright (C) 2019 Crimson AS <i...@crimson.no> - ** Copyright (C) 2013 John Layt <jl...@kde.org> - ** Contact: https://www.qt.io/licensing/ -@@ -43,19 +42,18 @@ - #include "qtimezoneprivate_p.h" - #include "private/qlocale_tools_p.h" - --#include <QtCore/QDataStream> --#include <QtCore/QDateTime> - #include <QtCore/QFile> --#include <QtCore/QHash> - #include <QtCore/QMutex> -+#include <QtCore/QHash> -+#include <QtCore/QDataStream> -+#include <QtCore/QDateTime> - - #include <qdebug.h> --#include <qplatformdefs.h> - - #include <algorithm> - #include <errno.h> - #include <limits.h> --#ifndef Q_OS_INTEGRITY -+#if !defined(Q_OS_INTEGRITY) - #include <sys/param.h> // to use MAXSYMLINKS constant - #endif - #include <unistd.h> // to use _SC_SYMLOOP_MAX constant -@@ -1102,146 +1100,28 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::previousTransition(qint64 beforeMSecs - return last > tranCache().cbegin() ? dataForTzTransition(*--last) : invalidData(); - } - --bool QTzTimeZonePrivate::isTimeZoneIdAvailable(const QByteArray &ianaId) const --{ -- return tzZones->contains(ianaId); --} -- --QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds() const --{ -- QList<QByteArray> result = tzZones->keys(); -- std::sort(result.begin(), result.end()); -- return result; --} -- --QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const -+static long getSymloopMax() - { -- // TODO AnyCountry -- QList<QByteArray> result; -- for (auto it = tzZones->cbegin(), end = tzZones->cend(); it != end; ++it) { -- if (it.value().country == country) -- result << it.key(); -- } -- std::sort(result.begin(), result.end()); -- return result; --} -- --// Getting the system zone's ID: -- --namespace { --class ZoneNameReader : public QObject --{ --public: -- QByteArray name() -- { -- /* Assumptions: -- a) Systems don't change which of localtime and TZ they use without a -- reboot. -- b) When they change, they use atomic renames, hence a new device and -- inode for the new file. -- c) If we change which *name* is used for a zone, while referencing -- the same final zoneinfo file, we don't care about the change of -- name (e.g. if Europe/Oslo and Europe/Berlin are both symlinks to -- the same CET file, continuing to use the old name, after -- /etc/localtime changes which of the two it points to, is -- harmless). -- -- The alternative would be to use a file-system watcher, but they are a -- scarce resource. -- */ -- const StatIdent local = identify("/etc/localtime"); -- const StatIdent tz = identify("/etc/TZ"); -- if (!m_name.isEmpty() && m_last.isValid() && (m_last == local || m_last == tz)) -- return m_name; -- -- m_name = etcLocalTime(); -- if (!m_name.isEmpty()) { -- m_last = local; -- return m_name; -- } -- -- m_name = etcTZ(); -- m_last = m_name.isEmpty() ? StatIdent() : tz; -- return m_name; -- } -- -- --private: -- QByteArray m_name; -- struct StatIdent -- { -- static constexpr unsigned long bad = ~0ul; -- unsigned long m_dev, m_ino; -- StatIdent() : m_dev(bad), m_ino(bad) {} -- StatIdent(const QT_STATBUF &data) : m_dev(data.st_dev), m_ino(data.st_ino) {} -- bool isValid() { return m_dev != bad || m_ino != bad; } -- bool operator==(const StatIdent &other) -- { return other.m_dev == m_dev && other.m_ino == m_ino; } -- }; -- StatIdent m_last; -- -- static StatIdent identify(const char *path) -- { -- QT_STATBUF data; -- return QT_STAT(path, &data) == -1 ? StatIdent() : StatIdent(data); -- } -- -- static QByteArray etcLocalTime() -- { -- // On most distros /etc/localtime is a symlink to a real file so extract -- // name from the path -- const QLatin1String zoneinfo("/zoneinfo/"); -- QString path = QStringLiteral("/etc/localtime"); -- long iteration = getSymloopMax(); -- // Symlink may point to another symlink etc. before being under zoneinfo/ -- // We stop on the first path under /zoneinfo/, even if it is itself a -- // 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 path.midRef(index + zoneinfo.size()).toUtf8(); -- } while (!path.isEmpty() && --iteration > 0); -- -- return QByteArray(); -- } -- -- static QByteArray etcTZ() -- { -- // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ: -- const QString path = QStringLiteral("/etc/TZ"); -- QFile zone(path); -- if (zone.open(QIODevice::ReadOnly)) -- return zone.readAll().trimmed(); -- -- return QByteArray(); -- } -- -- // Any chain of symlinks longer than this is assumed to be a loop: -- static long getSymloopMax() -- { --#ifdef SYMLOOP_MAX -- // If defined, at runtime it can only be greater than this, so this is a safe bet: -- return SYMLOOP_MAX; -+#if defined(SYMLOOP_MAX) -+ return SYMLOOP_MAX; // if defined, at runtime it can only be greater than this, so this is a safe bet - #else -- errno = 0; -- long result = sysconf(_SC_SYMLOOP_MAX); -- if (result >= 0) -- return result; -- // result is -1, meaning either error or no limit -- Q_ASSERT(!errno); // ... but it can't be an error, POSIX mandates _SC_SYMLOOP_MAX -- -- // therefore we can make up our own limit --# ifdef MAXSYMLINKS -- return MAXSYMLINKS; -+ errno = 0; -+ long result = sysconf(_SC_SYMLOOP_MAX); -+ if (result >= 0) -+ return result; -+ // result is -1, meaning either error or no limit -+ Q_ASSERT(!errno); // ... but it can't be an error, POSIX mandates _SC_SYMLOOP_MAX -+ -+ // therefore we can make up our own limit -+# if defined(MAXSYMLINKS) -+ return MAXSYMLINKS; - # else -- return 8; -+ return 8; - # endif - #endif -- } --}; - } - -+// TODO Could cache the value and monitor the required files for any changes - QByteArray QTzTimeZonePrivate::systemTimeZoneId() const - { - // Check TZ env var first, if not populated try find it -@@ -1256,9 +1136,28 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const - else if (ianaId.startsWith(':')) - ianaId = ianaId.mid(1); - -+ // On most distros /etc/localtime is a symlink to a real file so extract name from the path -+ if (ianaId.isEmpty()) { -+ const QLatin1String zoneinfo("/zoneinfo/"); -+ QString path = QFile::symLinkTarget(QStringLiteral("/etc/localtime")); -+ int index = -1; -+ long iteration = getSymloopMax(); -+ // Symlink may point to another symlink etc. before being under zoneinfo/ -+ // We stop on the first path under /zoneinfo/, even if it is itself a -+ // symlink, like America/Montreal pointing to America/Toronto -+ while (iteration-- > 0 && !path.isEmpty() && (index = path.indexOf(zoneinfo)) < 0) -+ path = QFile::symLinkTarget(path); -+ if (index >= 0) { -+ // /etc/localtime is a symlink to the current TZ file, so extract from path -+ ianaId = path.midRef(index + zoneinfo.size()).toUtf8(); -+ } -+ } -+ -+ // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ: - if (ianaId.isEmpty()) { -- thread_local static ZoneNameReader reader; -- ianaId = reader.name(); -+ QFile zone(QStringLiteral("/etc/TZ")); -+ if (zone.open(QIODevice::ReadOnly)) -+ ianaId = zone.readAll().trimmed(); - } - - // Give up for now and return UTC -@@ -1268,4 +1167,28 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const - return ianaId; - } - -+bool QTzTimeZonePrivate::isTimeZoneIdAvailable(const QByteArray &ianaId) const -+{ -+ return tzZones->contains(ianaId); -+} -+ -+QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds() const -+{ -+ QList<QByteArray> result = tzZones->keys(); -+ std::sort(result.begin(), result.end()); -+ return result; -+} -+ -+QList<QByteArray> QTzTimeZonePrivate::availableTimeZoneIds(QLocale::Country country) const -+{ -+ // TODO AnyCountry -+ QList<QByteArray> result; -+ for (auto it = tzZones->cbegin(), end = tzZones->cend(); it != end; ++it) { -+ if (it.value().country == country) -+ result << it.key(); -+ } -+ std::sort(result.begin(), result.end()); -+ return result; -+} -+ - QT_END_NAMESPACE --- -2.28.0 - diff --git a/dev-qt/qtcore/files/qtcore-5.15.1-timezone-2.patch b/dev-qt/qtcore/files/qtcore-5.15.1-timezone-2.patch deleted file mode 100644 index 611c979a..00000000 --- a/dev-qt/qtcore/files/qtcore-5.15.1-timezone-2.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ffc9093a199a542791920b30d1835c3248920aa0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <dilfri...@gentoo.org> -Date: Sat, 10 Oct 2020 19:26:35 +0200 -Subject: [PATCH 2/2] Revert "Purge two old time-zone lookup fallbacks" - -This reverts commit b0383cbd388336f698ceeac11a4f50cdff931dd9. ---- - src/corelib/time/qtimezoneprivate_tz.cpp | 23 +++++++++++++++++++++++ - 1 file changed, 23 insertions(+) - -diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp -index 01f9a6cce0..eea6f5e962 100644 ---- a/src/corelib/time/qtimezoneprivate_tz.cpp -+++ b/src/corelib/time/qtimezoneprivate_tz.cpp -@@ -1153,6 +1153,29 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const - } - } - -+ // On Debian Etch up to Jessie, /etc/localtime is a copy of the relevant -+ // zoneinfo file, whose name is recorded in /etc/timezone: -+ if (ianaId.isEmpty()) { -+ QFile tzif(QStringLiteral("/etc/timezone")); -+ if (tzif.open(QIODevice::ReadOnly)) -+ ianaId = tzif.readAll().trimmed(); -+ } -+ -+ // On some Red Hat distros /etc/localtime is real file with name held in /etc/sysconfig/clock -+ // in a line like ZONE="Europe/Oslo" or TIMEZONE="Europe/Oslo" -+ if (ianaId.isEmpty()) { -+ QFile tzif(QStringLiteral("/etc/sysconfig/clock")); -+ if (tzif.open(QIODevice::ReadOnly)) { -+ while (ianaId.isEmpty() && !tzif.atEnd()) { -+ const QByteArray line(tzif.readLine().trimmed()); -+ if (line.startsWith("ZONE=")) -+ ianaId = line.mid(6, line.length() - 7); -+ else if (line.startsWith("TIMEZONE=")) -+ ianaId = line.mid(10, line.length() - 11); -+ } -+ } -+ } -+ - // Some systems (e.g. uClibc) have a default value for $TZ in /etc/TZ: - if (ianaId.isEmpty()) { - QFile zone(QStringLiteral("/etc/TZ")); --- -2.28.0 - diff --git a/dev-qt/qtcore/qtcore-5.15.2.9999.ebuild b/dev-qt/qtcore/qtcore-5.15.2.9999.ebuild index 7cf61d1f..bf94a0df 100644 --- a/dev-qt/qtcore/qtcore-5.15.2.9999.ebuild +++ b/dev-qt/qtcore/qtcore-5.15.2.9999.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 @@ -44,7 +44,6 @@ QT5_GENTOO_PRIVATE_CONFIG=( PATCHES=( "${FILESDIR}"/${PN}-5.14.1-cmake-macro-backward-compat.patch # bug 703306 - "${FILESDIR}"/${PN}-5.15.1-timezone-{1,2}.patch # bug 737914 ) pkg_pretend() {