From 6c6b5ff8fb8dfdc9f9057e4d9db5f467131a3a04 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Date: Thu, 25 Sep 2014 17:14:40 +0200
Subject: [PATCH] de-duplicate top-level bundle symlink creation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

multiple QMAKE_BUNDLE_DATA entries can install into the same directory,
but it obviously makes no sense to symlink that repeatedly.

Change-Id: If65f7acdf4e158e33511917a027a380e642e2f28
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
---
 qmake/generators/unix/unixmake2.cpp | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index 1f7d1ecf3e6..556036b692b 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -703,6 +703,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
     }
 
     if (!project->isEmpty("QMAKE_BUNDLE")) {
+        QHash<QString, QString> symlinks;
         ProStringList &alldeps = project->values("ALL_DEPS");
         QString bundle_dir = project->first("DESTDIR") + project->first("QMAKE_BUNDLE") + "/";
         if (!project->first("QMAKE_PKGINFO").isEmpty()) {
@@ -810,13 +811,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
                 if (!project->isEmpty(vkey)) {
                     QString version = project->first(vkey) + "/" +
                                       project->first("QMAKE_FRAMEWORK_VERSION") + "/";
-                    QString link = Option::fixPathToLocalOS(path + project->first(pkey));
-                    bundledFiles << link;
-                    alldeps << link;
-                    t << link << ": \n\t"
-                      << mkdir_p_asstring(path) << "\n\t"
-                      << "@$(SYMLINK) " << project->first(vkey) + "/Current/" << project->first(pkey)
-                                 << " " << path << endl;
+                    symlinks[Option::fixPathToLocalOS(path + project->first(pkey))] =
+                            project->first(vkey) + "/Current/" + project->first(pkey);
                     path += version;
                 }
                 path += project->first(pkey).toQString();
@@ -842,6 +838,15 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
                 }
             }
         }
+        QHash<QString, QString>::ConstIterator symIt = symlinks.constBegin(),
+                                               symEnd = symlinks.constEnd();
+        for (; symIt != symEnd; ++symIt) {
+            bundledFiles << symIt.key();
+            alldeps << symIt.key();
+            t << symIt.key() << ":\n\t"
+              << mkdir_p_asstring(bundle_dir) << "\n\t"
+              << "@$(SYMLINK) " << symIt.value() << " " << bundle_dir << endl;
+        }
     }
 
     t << endl << "all: " << escapeDependencyPath(deps)
-- 
GitLab