From deea0022f7ea1bdc48ceafe57c2dfbfd848ac8a8 Mon Sep 17 00:00:00 2001
From: Eike Ziller <eike.ziller@digia.com>
Date: Tue, 26 Aug 2014 13:26:21 +0200
Subject: [PATCH] Fix library and plugin paths

OSX: Move libraries from PlugIns/ to Frameworks/
other: move QmlDesigner plugins to plugins directory

Change-Id: Ia266a3514ce6a496061daa044b3781daae0bc272
Reviewed-by: Christian Stenger <christian.stenger@digia.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
---
 qbs/imports/QtcLibrary.qbs                          |  2 +-
 qtcreator.pri                                       |  4 ++--
 qtcreator.pro                                       |  8 ++++----
 qtcreator.qbs                                       |  4 ++--
 src/plugins/qbsprojectmanager/qbsprojectmanager.pro |  2 +-
 src/plugins/qbsprojectmanager/qbsprojectparser.cpp  |  2 +-
 src/plugins/qmldesigner/plugindestdir.pri           |  6 +++---
 src/plugins/qmldesigner/qmldesignerplugin.cpp       |  2 +-
 src/qtcreatorlibrary.pri                            |  1 +
 src/qtcreatorplugin.pri                             | 13 ++-----------
 src/rpath.pri                                       |  1 -
 src/src.qbs                                         |  4 +---
 12 files changed, 19 insertions(+), 30 deletions(-)

diff --git a/qbs/imports/QtcLibrary.qbs b/qbs/imports/QtcLibrary.qbs
index 75b395a1c26..6792c834c3c 100644
--- a/qbs/imports/QtcLibrary.qbs
+++ b/qbs/imports/QtcLibrary.qbs
@@ -19,7 +19,7 @@ QtcProduct {
             flags.push("/INCREMENTAL:NO"); // Speed up startup time when debugging with cdb
         return flags;
     }
-    cpp.installNamePrefix: "@rpath/PlugIns/"
+    cpp.installNamePrefix: "@rpath/Frameworks/"
     cpp.rpaths: qbs.targetOS.contains("osx")
             ? ["@loader_path/..", "@executable_path/.."]
             : ["$ORIGIN", "$ORIGIN/.."]
diff --git a/qtcreator.pri b/qtcreator.pri
index cc09e235ec9..cf273e412bc 100644
--- a/qtcreator.pri
+++ b/qtcreator.pri
@@ -84,8 +84,8 @@ isEmpty(IDE_BUILD_TREE) {
 IDE_APP_PATH = $$IDE_BUILD_TREE/bin
 macx {
     IDE_APP_TARGET   = "Qt Creator"
-    IDE_LIBRARY_PATH = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/PlugIns
-    IDE_PLUGIN_PATH  = $$IDE_LIBRARY_PATH
+    IDE_LIBRARY_PATH = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/Frameworks
+    IDE_PLUGIN_PATH  = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/PlugIns
     IDE_LIBEXEC_PATH = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/Resources
     IDE_DATA_PATH    = $$IDE_APP_PATH/$${IDE_APP_TARGET}.app/Contents/Resources
     IDE_DOC_PATH     = $$IDE_DATA_PATH/doc
diff --git a/qtcreator.pro b/qtcreator.pro
index 36a5f3f9a66..b5b8ae34057 100644
--- a/qtcreator.pro
+++ b/qtcreator.pro
@@ -45,15 +45,15 @@ exists(src/shared/qbs/qbs.pro) {
     QBS_RESOURCES_INSTALL_DIR = $${QTC_PREFIX}/share/qtcreator/qbs
     cache(QBS_RESOURCES_INSTALL_DIR)
     macx {
-        QBS_PLUGINS_BUILD_DIR = $${IDE_LIBRARY_PATH}
-        QBS_APPS_RPATH_DIR = @loader_path/../PlugIns
+        QBS_PLUGINS_BUILD_DIR = $${IDE_PLUGIN_PATH}
+        QBS_APPS_RPATH_DIR = @loader_path/../Frameworks
     } else {
-        QBS_PLUGINS_BUILD_DIR = $${IDE_BUILD_TREE}/$${IDE_LIBRARY_BASENAME}/qtcreator
+        QBS_PLUGINS_BUILD_DIR = $${IDE_BUILD_TREE}/$${IDE_LIBRARY_BASENAME}/qtcreator/plugins
         QBS_APPS_RPATH_DIR = \$\$ORIGIN/../$$IDE_LIBRARY_BASENAME/qtcreator
     }
     cache(QBS_PLUGINS_BUILD_DIR)
     cache(QBS_APPS_RPATH_DIR)
-    QBS_PLUGINS_INSTALL_DIR = $${QTC_PREFIX}/$${IDE_LIBRARY_BASENAME}/qtcreator
+    QBS_PLUGINS_INSTALL_DIR = $${QTC_PREFIX}/$${IDE_LIBRARY_BASENAME}/qtcreator/plugins
     cache(QBS_PLUGINS_INSTALL_DIR)
     QBS_LIBRARY_DIRNAME = $${IDE_LIBRARY_BASENAME}
     cache(QBS_LIBRARY_DIRNAME)
diff --git a/qtcreator.qbs b/qtcreator.qbs
index c0c6bfcea1f..c04219488c3 100644
--- a/qtcreator.qbs
+++ b/qtcreator.qbs
@@ -20,7 +20,7 @@ Project {
     property string libDirName: "lib"
     property string ide_library_path: {
         if (qbs.targetOS.contains("osx"))
-            return ide_app_target + ".app/Contents/PlugIns"
+            return ide_app_target + ".app/Contents/Frameworks"
         else if (qbs.targetOS.contains("windows"))
             return ide_app_path
         else
@@ -28,7 +28,7 @@ Project {
     }
     property string ide_plugin_path: {
         if (qbs.targetOS.contains("osx"))
-            return ide_library_path
+            return ide_app_target + ".app/Contents/PlugIns"
         else if (qbs.targetOS.contains("windows"))
             return libDirName + "/qtcreator/plugins"
         else
diff --git a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
index 406c85e15b0..65f21669db7 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
+++ b/src/plugins/qbsprojectmanager/qbsprojectmanager.pro
@@ -6,7 +6,7 @@ isEmpty(QBS_INSTALL_DIR) {
     QBS_SOURCE_DIR = $$PWD/../../shared/qbs
     include($$QBS_SOURCE_DIR/src/lib/corelib/use_corelib.pri)
     include($$QBS_SOURCE_DIR/src/lib/qtprofilesetup/use_qtprofilesetup.pri)
-    macx:QMAKE_LFLAGS += -Wl,-rpath,@loader_path/ # Mac: fix rpath for qbscore soname
+    osx:QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../Frameworks # OS X: fix rpath for qbscore soname
 } else {
     include($${QBS_INSTALL_DIR}/include/qbs/use_installed_corelib.pri)
     include($${QBS_INSTALL_DIR}/include/qbs/use_installed_qtprofilesetup.pri)
diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
index 45e00d92cb9..60f50fce7e6 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
@@ -172,7 +172,7 @@ QString QbsProjectParser::pluginsBaseDirectory() const
                                + QLatin1String("/../PlugIns"));
     else
         return QDir::cleanPath(QCoreApplication::applicationDirPath()
-                               + QLatin1String("/../" IDE_LIBRARY_BASENAME "/qtcreator"));
+                               + QLatin1String("/../" IDE_LIBRARY_BASENAME "/qtcreator/plugins"));
 }
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/plugindestdir.pri b/src/plugins/qmldesigner/plugindestdir.pri
index 2de740f852f..c67bb10b51d 100644
--- a/src/plugins/qmldesigner/plugindestdir.pri
+++ b/src/plugins/qmldesigner/plugindestdir.pri
@@ -1,7 +1,7 @@
 macx {
-  DESTDIR = $$IDE_LIBRARY_PATH/QmlDesigner
+  DESTDIR = $$IDE_PLUGIN_PATH/QmlDesigner
 } else {
-  DESTDIR = $$IDE_LIBRARY_PATH/qmldesigner
-  target.path  = $$QTC_PREFIX/$$IDE_LIBRARY_BASENAME/qtcreator/qmldesigner
+  DESTDIR = $$IDE_PLUGIN_PATH/qmldesigner
+  target.path  = $$QTC_PREFIX/$$IDE_LIBRARY_BASENAME/qtcreator/plugins/qmldesigner
   INSTALLS    += target
 }
diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp
index 6049f997055..e07c6d4ae7e 100644
--- a/src/plugins/qmldesigner/qmldesignerplugin.cpp
+++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp
@@ -139,7 +139,7 @@ bool QmlDesignerPlugin::initialize(const QStringList & /*arguments*/, QString *e
     const QString pluginPath = Utils::HostOsInfo::isMacHost()
             ? QString(QCoreApplication::applicationDirPath() + "/../PlugIns/QmlDesigner")
             : QString(QCoreApplication::applicationDirPath() + "/../"
-                      + QLatin1String(IDE_LIBRARY_BASENAME) + "/qtcreator/qmldesigner");
+                      + QLatin1String(IDE_LIBRARY_BASENAME) + "/qtcreator/plugins/qmldesigner");
     data->pluginManager.setPluginPaths(QStringList() << pluginPath);
 
     createDesignModeWidget();
diff --git a/src/qtcreatorlibrary.pri b/src/qtcreatorlibrary.pri
index e74d50a0e27..700f5b495a6 100644
--- a/src/qtcreatorlibrary.pri
+++ b/src/qtcreatorlibrary.pri
@@ -12,6 +12,7 @@ win32 {
 
 DESTDIR = $$IDE_LIBRARY_PATH
 
+osx: QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/Frameworks/
 include(rpath.pri)
 
 TARGET = $$qtLibraryName($$TARGET)
diff --git a/src/qtcreatorplugin.pri b/src/qtcreatorplugin.pri
index 6b9b0237cf1..a1fd8253d93 100644
--- a/src/qtcreatorplugin.pri
+++ b/src/qtcreatorplugin.pri
@@ -110,17 +110,8 @@ pluginspec2json.CONFIG += no_link
 moc_header.depends += $$pluginspec2json.output
 QMAKE_EXTRA_COMPILERS += pluginspec2json
 
-macx {
-    QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/PlugIns/
-    QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../,-rpath,@executable_path/../
-} else:linux-* {
-    #do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
-    QMAKE_RPATHDIR += \$\$ORIGIN
-    QMAKE_RPATHDIR += \$\$ORIGIN/..
-    IDE_PLUGIN_RPATH = $$join(QMAKE_RPATHDIR, ":")
-    QMAKE_LFLAGS += -Wl,-z,origin \'-Wl,-rpath,$${IDE_PLUGIN_RPATH}\'
-    QMAKE_RPATHDIR =
-}
+osx: QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/PlugIns/
+include(rpath.pri)
 
 contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
 
diff --git a/src/rpath.pri b/src/rpath.pri
index de56f11ae5b..0d8911a4d96 100644
--- a/src/rpath.pri
+++ b/src/rpath.pri
@@ -1,5 +1,4 @@
 macx {
-    QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/PlugIns/
     QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../,-rpath,@executable_path/../
 } else:linux-* {
     #do the rpath by hand since it's not possible to use ORIGIN in QMAKE_RPATHDIR
diff --git a/src/src.qbs b/src/src.qbs
index 08562c12fb7..0ef11cb4a01 100644
--- a/src/src.qbs
+++ b/src/src.qbs
@@ -30,9 +30,7 @@ Project {
             ? ["@loader_path/" + FileInfo.relativePath(appInstallDir, libInstallDir)]
             : ["$ORIGIN/..", "$ORIGIN/../" + project.ide_library_path]
         property string resourcesInstallDir: project.ide_data_path + "/qbs"
-        property string pluginsInstallDir: qbs.targetOS.contains("windows")
-            ? project.libDirName + "/qtcreator"
-            : project.ide_library_path
+        property string pluginsInstallDir: project.ide_plugin_path
         property string appInstallDir: project.ide_bin_path
         property string relativePluginsPath: FileInfo.relativePath(appInstallDir, pluginsInstallDir)
         property string relativeSearchPath: FileInfo.relativePath(appInstallDir,
-- 
GitLab