File 0001-Use-unix-path-layout-on-Windows-too-to-match-Framework.patch of Package mingw64-libqt5-qtbase
From 2e767b8b2ab655314a8374bca2bf78cee01e20e8 Mon Sep 17 00:00:00 2001
From: Ralf Habacker <ralf.habacker@freenet.de>
Date: Tue, 28 May 2024 16:17:24 +0200
Subject: [PATCH] Use unix path layout also on Windows to match KDE Frameworks
build system path style
Change-Id: Ic58f55b94a3457713c637034abdd9d0e88eccf51
---
src/corelib/io/io.pri | 2 +-
src/corelib/io/qstandardpaths_unix.cpp | 28 ++++++++++++++++++++++++--
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index a33ffe75f..6290331ce 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -154,7 +154,7 @@ win32 {
io/qwindowspipewriter_p.h
SOURCES += \
- io/qstandardpaths_win.cpp \
+ io/qstandardpaths_unix.cpp \
io/qstorageinfo_win.cpp \
io/qwindowspipereader.cpp \
io/qwindowspipewriter.cpp
diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp
index 4ebeefced..cc7ea588f 100644
--- a/src/corelib/io/qstandardpaths_unix.cpp
+++ b/src/corelib/io/qstandardpaths_unix.cpp
@@ -49,6 +49,7 @@
#include <private/qfilesystemengine_p.h>
#include <errno.h>
#include <stdlib.h>
+#include <qlibraryinfo.h>
#ifndef QT_BOOTSTRAPPED
#include <qcoreapplication.h>
@@ -145,8 +146,18 @@ static bool checkXdgRuntimeDir(const QString &xdgRuntimeDir)
};
// http://standards.freedesktop.org/basedir-spec/latest/
+#ifdef Q_OS_WIN
+ const uint myUid = -2;
+#else
const uint myUid = uint(geteuid());
+#endif
+#if !defined(Q_OS_WIN) || defined(QT_BOOTSTRAPPED)
const QFile::Permissions wantedPerms = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner;
+#else
+ // since the current user is the owner, set both xxxUser and xxxOwner; added from Qt 5.11
+ const QFile::Permissions wantedPerms = QFile::ReadUser | QFile::WriteUser | QFile::ExeUser
+ | QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner;
+#endif
const QFileSystemMetaData::MetaDataFlags statFlags = QFileSystemMetaData::PosixStatFlags
| QFileSystemMetaData::LinkType;
QFileSystemMetaData metaData;
@@ -156,7 +167,11 @@ static bool checkXdgRuntimeDir(const QString &xdgRuntimeDir)
// A stat() before mkdir() that concluded it doesn't exist is a meaningless
// result: we'd race against someone else attempting to create it.
// ### QFileSystemEngine::createDirectory cannot take the extra mode argument.
+#if !defined(Q_OS_WIN) || defined(QT_BOOTSTRAPPED)
if (QT_MKDIR(entry.nativeFilePath(), 0700) == 0)
+#else
+ if (QT_MKDIR(entry.nativeFilePath().toLocal8Bit().constData()) == 0)
+#endif
return true;
if (errno != EEXIST) {
qErrnoWarning("QStandardPaths: error creating runtime directory '%ls'",
@@ -253,8 +268,12 @@ QString QStandardPaths::writableLocation(StandardLocation type)
bool fromEnv = !xdgRuntimeDir.isEmpty();
if (xdgRuntimeDir.isEmpty() || !checkXdgRuntimeDir(xdgRuntimeDir)) {
// environment variable not set or is set to something unsuitable
+#ifdef Q_OS_WIN
+ const QString userName = QLatin1String(qgetenv("USERNAME"));
+#else
const uint myUid = uint(geteuid());
const QString userName = QFileSystemEngine::resolveUserName(myUid);
+#endif
xdgRuntimeDir = QDir::tempPath() + QLatin1String("/runtime-") + userName;
if (!fromEnv) {
@@ -351,14 +370,19 @@ static QStringList xdgDataDirs()
// http://standards.freedesktop.org/basedir-spec/latest/
QString xdgDataDirsEnv = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
if (xdgDataDirsEnv.isEmpty()) {
+#ifdef Q_OS_WIN
+ QString prefix = QLibraryInfo::location(QLibraryInfo::PrefixPath);
+ dirs.append(prefix + QString::fromLatin1("/share"));
+#else
dirs.append(QString::fromLatin1("/usr/local/share"));
dirs.append(QString::fromLatin1("/usr/share"));
+#endif
} else {
- const auto parts = xdgDataDirsEnv.splitRef(QLatin1Char(':'), Qt::SkipEmptyParts);
+ const auto parts = xdgDataDirsEnv.splitRef(QDir::listSeparator(), Qt::SkipEmptyParts);
// Normalize paths, skip relative paths
for (const QStringRef &dir : parts) {
- if (dir.startsWith(QLatin1Char('/')))
+ if (!QDir::isAbsolutePath(dir.toString()))
dirs.push_back(QDir::cleanPath(dir.toString()));
}
--
2.44.0