diff options
Diffstat (limited to 'pkgs/development/libraries/qt-6/patches/qtbase-tzdir.patch')
-rw-r--r-- | pkgs/development/libraries/qt-6/patches/qtbase-tzdir.patch | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/pkgs/development/libraries/qt-6/patches/qtbase-tzdir.patch b/pkgs/development/libraries/qt-6/patches/qtbase-tzdir.patch new file mode 100644 index 0000000000000..fc36130c7aad5 --- /dev/null +++ b/pkgs/development/libraries/qt-6/patches/qtbase-tzdir.patch @@ -0,0 +1,48 @@ +diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp +index 627a4a81..a5f50acc 100644 +--- a/src/corelib/time/qtimezoneprivate_tz.cpp ++++ b/src/corelib/time/qtimezoneprivate_tz.cpp +@@ -51,7 +51,11 @@ typedef QHash<QByteArray, QTzTimeZone> QTzTimeZoneHash; + // 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 NixOS. ++ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab"); ++ // Fallback to traditional paths in case we are not on NixOS. ++ if (!QFile::exists(path)) ++ path = QStringLiteral("/usr/share/zoneinfo/zone.tab"); + if (!QFile::exists(path)) + path = QStringLiteral("/usr/lib/zoneinfo/zone.tab"); + +@@ -727,18 +731,21 @@ QTzTimeZoneCacheEntry QTzTimeZoneCache::findEntry(const QByteArray &ianaId) + 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)); ++ // Try TZDIR first, in case we're running on NixOS ++ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId)); + if (!tzif.open(QIODevice::ReadOnly)) { +- tzif.setFileName("/usr/lib/zoneinfo/"_L1 + QString::fromLocal8Bit(ianaId)); ++ tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + 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; ++ 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; + } +- return ret; + } + } + } |