From 448177d857963a8d3ab1db8d1bc8332d552e6bed Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 4 Apr 2019 20:28:10 +0200 Subject: Let "qmake -install qinstall" set default permissions 0644 and 0755 ...like the install commands before Qt 5.9 did. This ensures consistent permissions. Also, we can throw away the code that took care of removing and re-adding the read-only flag on Windows. This reverts commit a0b5d6e60f96359d88352e0b1c000678cdc80988 with the addition of preserving permissions when copying directories to properly install app bundles (QTBUG-74912). Fixes: QTBUG-74733 Task-number: QTBUG-74912 Change-Id: Iee6d7c5e86787dd3ada5e5e9441209d418100b1f Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: Simon Hausmann --- qmake/main.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'qmake') diff --git a/qmake/main.cpp b/qmake/main.cpp index a4ef79227b..69dff1073e 100644 --- a/qmake/main.cpp +++ b/qmake/main.cpp @@ -242,7 +242,8 @@ static int doLink(int argc, char **argv) #endif -static int installFile(const QString &source, const QString &target, bool exe = false) +static int installFile(const QString &source, const QString &target, bool exe = false, + bool preservePermissions = false) { QFile sourceFile(source); QFile targetFile(target); @@ -260,35 +261,32 @@ static int installFile(const QString &source, const QString &target, bool exe = return 3; } + QFileDevice::Permissions targetPermissions = preservePermissions + ? sourceFile.permissions() + : (QFileDevice::ReadOwner | QFileDevice::WriteOwner + | QFileDevice::ReadUser | QFileDevice::WriteUser + | QFileDevice::ReadGroup | QFileDevice::ReadOther); if (exe) { - if (!targetFile.setPermissions(sourceFile.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeUser | - QFileDevice::ExeGroup | QFileDevice::ExeOther)) { - fprintf(stderr, "Error setting execute permissions on %s: %s\n", - qPrintable(target), qPrintable(targetFile.errorString())); - return 3; - } + targetPermissions |= QFileDevice::ExeOwner | QFileDevice::ExeUser | + QFileDevice::ExeGroup | QFileDevice::ExeOther; + } + if (!targetFile.setPermissions(targetPermissions)) { + fprintf(stderr, "Error setting permissions on %s: %s\n", + qPrintable(target), qPrintable(targetFile.errorString())); + return 3; } // Copy file times QString error; -#ifdef Q_OS_WIN - const QFile::Permissions permissions = targetFile.permissions(); - const bool readOnly = !(permissions & QFile::WriteUser); - if (readOnly) - targetFile.setPermissions(permissions | QFile::WriteUser); -#endif if (!IoUtils::touchFile(target, sourceFile.fileName(), &error)) { fprintf(stderr, "%s", qPrintable(error)); return 3; } -#ifdef Q_OS_WIN - if (readOnly) - targetFile.setPermissions(permissions); -#endif return 0; } -static int installFileOrDirectory(const QString &source, const QString &target) +static int installFileOrDirectory(const QString &source, const QString &target, + bool preservePermissions = false) { QFileInfo fi(source); if (false) { @@ -314,12 +312,12 @@ static int installFileOrDirectory(const QString &source, const QString &target) const QFileInfo &entry = it.fileInfo(); const QString &entryTarget = target + QDir::separator() + entry.fileName(); - const int recursionResult = installFileOrDirectory(entry.filePath(), entryTarget); + const int recursionResult = installFileOrDirectory(entry.filePath(), entryTarget, true); if (recursionResult != 0) return recursionResult; } } else { - const int fileCopyResult = installFile(source, target); + const int fileCopyResult = installFile(source, target, /*exe*/ false, preservePermissions); if (fileCopyResult != 0) return fileCopyResult; } -- cgit v1.2.3 From 9617791075e02f19675f60060cb5776eb0e09edd Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 3 Apr 2019 14:30:56 +0200 Subject: Let QINSTALL copy hidden files when installing directories When installing directories, QINSTALL must not ignore contained hidden files to be consistent with the old INSTALL_DIR. Fixes: QTBUG-66835 Change-Id: I3a7c952dcac9732d5b17c5a258f87ca277b388d2 Reviewed-by: Kai Koehne --- qmake/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'qmake') diff --git a/qmake/main.cpp b/qmake/main.cpp index 69dff1073e..a598296898 100644 --- a/qmake/main.cpp +++ b/qmake/main.cpp @@ -306,7 +306,7 @@ static int installFileOrDirectory(const QString &source, const QString &target, } else if (fi.isDir()) { QDir::current().mkpath(target); - QDirIterator it(source, QDir::AllEntries | QDir::NoDotAndDotDot); + QDirIterator it(source, QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); while (it.hasNext()) { it.next(); const QFileInfo &entry = it.fileInfo(); -- cgit v1.2.3