summaryrefslogtreecommitdiffstats
path: root/qmake
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2019-04-10 17:33:14 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2019-04-10 17:33:14 +0000
commit63e88f60a769f2535945db0e1cabb9815ff45a77 (patch)
treecea2359bc9b5b4e3acce7aeca59a2f9b5d251bcb /qmake
parent0bdded64accc3f654b2d12d9bfaf64f842cedf26 (diff)
parentff88e20b8328b6aad5b787aacc5c39da563a67b1 (diff)
Merge "Merge remote-tracking branch 'origin/5.12' into 5.13" into refs/staging/5.13
Diffstat (limited to 'qmake')
-rw-r--r--qmake/main.cpp40
1 files changed, 19 insertions, 21 deletions
diff --git a/qmake/main.cpp b/qmake/main.cpp
index a4ef79227b..a598296898 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) {
@@ -308,18 +306,18 @@ 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();
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;
}