diff options
author | Brad King <brad.king@kitware.com> | 2016-06-10 13:09:47 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2016-06-10 13:09:47 (GMT) |
commit | 1bde72a390fd734795a3f5f4d09a3e279b5d61b8 (patch) | |
tree | caad4147888e15ba354edb27df545566f3e05065 | |
parent | 1f9b35da101ba12f5c6d8cdbe8e073fa8709709a (diff) | |
parent | f28401554af8fe48994b0c08668f0c1408708fe1 (diff) | |
download | CMake-1bde72a390fd734795a3f5f4d09a3e279b5d61b8.zip CMake-1bde72a390fd734795a3f5f4d09a3e279b5d61b8.tar.gz CMake-1bde72a390fd734795a3f5f4d09a3e279b5d61b8.tar.bz2 |
Merge topic 'cmake-gui-osx-symlink-qt5-plugin'
f2840155 cmake-gui: Teach Qt5 where plugins are when launched through a symlink
-rw-r--r-- | Source/QtDialog/CMakeSetup.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Source/QtDialog/CMakeSetup.cxx b/Source/QtDialog/CMakeSetup.cxx index c3c1468..c849d52 100644 --- a/Source/QtDialog/CMakeSetup.cxx +++ b/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 |