diff options
author | dt <[email protected]> | 2009-03-25 17:30:48 +0100 |
---|---|---|
committer | dt <[email protected]> | 2009-03-25 17:30:48 +0100 |
commit | 74974a5a5811a128b6a17a0b3150ede345e68e26 (patch) | |
tree | 3b21b7b470ea814b222f10ff38aa5ef1f00ed5e7 /src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp | |
parent | 4574082f91a49e972318e3d3257d28f6f962cd29 (diff) |
Also use the dumper library code from the cmake plugin.
Adds a little bit of code duplication, don't currently know how to best
avoid it, so I'll leave that for now as is. To be tested once Andre
pushes his stuff.
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp index def15f0bba6..0f92c8a53ff 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.cpp @@ -40,6 +40,8 @@ #include <QtCore/QtConcurrentRun> #include <QtCore/QSettings> #include <QtGui/QFormLayout> +#include <QtGui/QDesktopServices> +#include <QtGui/QApplication> using namespace CMakeProjectManager::Internal; @@ -134,7 +136,83 @@ QString CMakeManager::findCbpFile(const QDir &directory) return QString::null; } +// This code is duplicated from qtversionmanager +QString CMakeManager::qtVersionForQMake(const QString &qmakePath) +{ + QProcess qmake; + qmake.start(qmakePath, QStringList()<<"--version"); + if (!qmake.waitForFinished()) + return false; + QString output = qmake.readAllStandardOutput(); + QRegExp regexp("(QMake version|Qmake version:)[\\s]*([\\d.]*)"); + regexp.indexIn(output); + if (regexp.cap(2).startsWith("2.")) { + QRegExp regexp2("Using Qt version[\\s]*([\\d\\.]*)"); + regexp2.indexIn(output); + return regexp2.cap(1); + } + return QString(); +} +QString CMakeManager::findQtDir(const ProjectExplorer::Environment &env) +{ + QStringList possibleCommands; + // On windows noone has renamed qmake, right? +#ifdef Q_OS_WIN + possibleCommands << "qmake.exe"; +#endif + // On unix some distributions renamed qmake to avoid clashes + possibleCommands << "qmake-qt4" << "qmake4" << "qmake"; + + QStringList paths = env.path(); + foreach (const QString &path, paths) { + foreach (const QString &possibleCommand, possibleCommands) { + QFileInfo qmake(path + "/" + possibleCommand); + if (qmake.exists()) { + if (!qtVersionForQMake(qmake.absoluteFilePath()).isNull()) { + QDir dir(qmake.absoluteDir()); + dir.cdUp(); + return dir.absolutePath(); + } + } + } + } + return QString(); +} + +// This code is more or less duplicated in qtversionmanager +QString CMakeManager::findDumperLibrary(const ProjectExplorer::Environment &env) +{ + static ProjectExplorer::Environment lastenv; + static QString lastpath; + if (lastenv == env) + return lastpath; + QString qtdir = findQtDir(env); + if (qtdir.isEmpty()) + return QString(); + + uint hash = qHash(qtdir); + QStringList directories; + directories + << (qtdir + "/qtc-debugging-helper/") + << (QApplication::applicationDirPath() + "/../qtc-debugging-helper/" + QString::number(hash)) + "/" + << (QDesktopServices::storageLocation(QDesktopServices::DataLocation) + "/qtc-debugging-helper/" + QString::number(hash)) + "/"; + foreach(const QString &directory, directories) { +#if defined(Q_OS_WIN) + QFileInfo fi(directory + "debug/gdbmacros.dll"); +#elif defined(Q_OS_MAC) + QFileInfo fi(directory + "libgdbmacros.dylib"); +#else // generic UNIX + QFileInfo fi(directory + "libgdbmacros.so"); +#endif + if (fi.exists()) { + lastpath = fi.filePath(); + return lastpath; + } + } + lastpath = QString(); + return lastpath; +} ///// // CMakeRunner |