From a7d5e67556bd32496ce0a0f98a5ee225e00977e0 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@digia.com>
Date: Thu, 10 Jul 2014 10:55:15 +0200
Subject: [PATCH] windeployqt: Clear read-only attribute when copying files.

The deletion of the empty QML directories fails when not doing so.

Task-number: QTBUG-40152
Change-Id: I0ff78440646239897b4867c3b3cfe1af8b2769f9
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
---
 src/windeployqt/utils.h | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/windeployqt/utils.h b/src/windeployqt/utils.h
index f184b514e..9665beabc 100644
--- a/src/windeployqt/utils.h
+++ b/src/windeployqt/utils.h
@@ -337,13 +337,23 @@ bool updateFile(const QString &sourceFileName,
     QFile file(sourceFileName);
     if (optVerboseLevel)
         std::wcout << "Updating " << sourceFileInfo.fileName() << ".\n";
-    if (!(flags & SkipUpdateFile) && !file.copy(targetFileName)) {
-        *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
+    if (!(flags & SkipUpdateFile)) {
+        if (!file.copy(targetFileName)) {
+            *errorMessage = QString::fromLatin1("Cannot copy %1 to %2: %3")
                 .arg(QDir::toNativeSeparators(sourceFileName),
                      QDir::toNativeSeparators(targetFileName),
                      file.errorString());
-        return false;
-    }
+            return false;
+        }
+        if (!(file.permissions() & QFile::WriteUser)) { // QTBUG-40152, clear inherited read-only attribute
+            QFile targetFile(targetFileName);
+            if (!targetFile.setPermissions(targetFile.permissions() | QFile::WriteUser)) {
+                *errorMessage = QString::fromLatin1("Cannot set write permission on %1: %2")
+                    .arg(QDir::toNativeSeparators(targetFileName), file.errorString());
+                return false;
+            }
+        } // Check permissions
+    } // !SkipUpdateFile
     if (json)
         json->addFile(sourceFileName, targetDirectory);
     return true;
-- 
GitLab