Browse Source

Merge branch 'cmake-gui-osx-symlink-qt5-plugin' into release

Brad King 9 years ago
parent
commit
cc7e9d1d90
1 changed files with 34 additions and 0 deletions
  1. 34 0
      Source/QtDialog/CMakeSetup.cxx

+ 34 - 0
Source/QtDialog/CMakeSetup.cxx

@@ -19,6 +19,7 @@
 #include <QApplication>
 #include <QDir>
 #include <QLocale>
+#include <QString>
 #include <QTextCodec>
 #include <QTranslator>
 #include <cmsys/CommandLineArguments.hxx>
@@ -40,6 +41,7 @@ static const char* cmDocumentationOptions[][2] = { { 0, 0 } };
 
 #if defined(Q_OS_MAC)
 static int cmOSXInstall(std::string dir);
+static void cmAddPluginPath();
 #endif
 
 int main(int argc, char** argv)
@@ -81,6 +83,15 @@ int main(int argc, char** argv)
   }
 #endif
 
+// When we are on OSX and we are launching cmake-gui from a symlink, the
+// application will fail to launch as it can't find the qt.conf file which
+// tells it what the name of the plugin folder is. We need to add this path
+// BEFORE the application is constructed as that is what triggers the
+// searching for the platform plugins
+#if defined(Q_OS_MAC)
+  cmAddPluginPath();
+#endif
+
   QApplication app(argc, argv);
 
   setlocale(LC_NUMERIC, "C");
@@ -215,4 +226,27 @@ static int cmOSXInstall(std::string dir)
     ? 0
     : 1;
 }
+
+// Locate the PlugIns directory and add it to the QApplication library paths.
+// We need to resolve all symlinks so we have a known relative path between
+// MacOS/CMake and the PlugIns directory.
+//
+// Note we are using cmSystemTools since Qt can't provide the path to the
+// executable before the QApplication is created, and that is when plugin
+// searching occurs.
+static void cmAddPluginPath()
+{
+  std::string const& path = cmSystemTools::GetCMakeGUICommand();
+  if (path.empty()) {
+    return;
+  }
+  std::string const& realPath = cmSystemTools::GetRealPath(path);
+  QFileInfo appPath(QString::fromLocal8Bit(realPath.c_str()));
+  QDir pluginDir = appPath.dir();
+  bool const foundPluginDir = pluginDir.cd("../PlugIns");
+  if (foundPluginDir) {
+    QApplication::addLibraryPath(pluginDir.path());
+  }
+}
+
 #endif