From 88a36fe34c49ebcaddb701ae890014276ac4bb8f Mon Sep 17 00:00:00 2001 From: Kai Koehne <kai.koehne@nokia.com> Date: Wed, 29 Sep 2010 16:40:13 +0200 Subject: [PATCH] DebuggingHelpers: Check for Qt version instead checking private files The location private includes might still change with 4.7.1 . Better check the qt version string. Reviewed-by: Lasse Holmstedt --- src/libs/utils/buildablehelperlibrary.cpp | 27 +++++++++++++++++++ src/libs/utils/buildablehelperlibrary.h | 1 + src/plugins/qt4projectmanager/qmldumptool.cpp | 5 ++-- src/plugins/qt4projectmanager/qmldumptool.h | 3 ++- .../qt4projectmanager/qmlobservertool.cpp | 6 ++--- .../qt4projectmanager/qmlobservertool.h | 4 ++- .../qt4projectmanager/qtversionmanager.cpp | 4 +-- 7 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/libs/utils/buildablehelperlibrary.cpp b/src/libs/utils/buildablehelperlibrary.cpp index c23853d2272..e9fcdbce71d 100644 --- a/src/libs/utils/buildablehelperlibrary.cpp +++ b/src/libs/utils/buildablehelperlibrary.cpp @@ -101,6 +101,33 @@ QString BuildableHelperLibrary::qtVersionForQMake(const QString &qmakePath) return QString(); } +bool BuildableHelperLibrary::checkMinimumQtVersion(const QString &qtVersionString, int majorVersion, int minorVersion, int patchVersion) +{ + int major = -1; + int minor = -1; + int patch = -1; + + // check format + QRegExp qtVersionRegex(QLatin1String("^\\d+\\.\\d+\\.\\d+$")); + if (!qtVersionRegex.exactMatch(qtVersionString)) + return false; + + QStringList parts = qtVersionString.split(QLatin1Char('.')); + major = parts.at(0).toInt(); + minor = parts.at(1).toInt(); + patch = parts.at(2).toInt(); + + if (major == majorVersion) { + if (minor == minorVersion) { + if (patch >= patchVersion) + return true; + } else if (minor > minorVersion) + return true; + } + + return false; +} + QStringList BuildableHelperLibrary::possibleQMakeCommands() { // On windows no one has renamed qmake, right? diff --git a/src/libs/utils/buildablehelperlibrary.h b/src/libs/utils/buildablehelperlibrary.h index e4d9eadbc68..fa8a85648c6 100644 --- a/src/libs/utils/buildablehelperlibrary.h +++ b/src/libs/utils/buildablehelperlibrary.h @@ -19,6 +19,7 @@ public: static QString findSystemQt(const Utils::Environment &env); // return true if the qmake at qmakePath is qt4 (used by QtVersion) static QString qtVersionForQMake(const QString &qmakePath); + static bool checkMinimumQtVersion(const QString &qtversionString, int majorVersion, int minorVersion, int patchVersion); // returns something like qmake4, qmake, qmake-qt4 or whatever distributions have chosen (used by QtVersion) static QStringList possibleQMakeCommands(); diff --git a/src/plugins/qt4projectmanager/qmldumptool.cpp b/src/plugins/qt4projectmanager/qmldumptool.cpp index 210c0182fda..5d11f0dec9b 100644 --- a/src/plugins/qt4projectmanager/qmldumptool.cpp +++ b/src/plugins/qt4projectmanager/qmldumptool.cpp @@ -50,10 +50,9 @@ static inline QStringList validBinaryFilenames() << QLatin1String("qmldump.app/Contents/MacOS/qmldump"); } -bool QmlDumpTool::canBuild(const QString &installHeadersDir) +bool QmlDumpTool::canBuild(QtVersion *qtVersion) { - QString qDeclHeader = installHeadersDir + QLatin1String("/QtDeclarative/private/qdeclarativemetatype_p.h"); - return QFile::exists(qDeclHeader); + return checkMinimumQtVersion(qtVersion->qtVersionString(), 4, 7, 0); } QString QmlDumpTool::toolForProject(ProjectExplorer::Project *project) diff --git a/src/plugins/qt4projectmanager/qmldumptool.h b/src/plugins/qt4projectmanager/qmldumptool.h index 4c54838b6f1..dc991478077 100644 --- a/src/plugins/qt4projectmanager/qmldumptool.h +++ b/src/plugins/qt4projectmanager/qmldumptool.h @@ -42,11 +42,12 @@ namespace ProjectExplorer { } namespace Qt4ProjectManager { +class QtVersion; class QT4PROJECTMANAGER_EXPORT QmlDumpTool : public Utils::BuildableHelperLibrary { public: - static bool canBuild(const QString &installHeadersDir); + static bool canBuild(QtVersion *qtVersion); static QString toolForProject(ProjectExplorer::Project *project); static QString toolByInstallData(const QString &qtInstallData); static QStringList locationsByInstallData(const QString &qtInstallData); diff --git a/src/plugins/qt4projectmanager/qmlobservertool.cpp b/src/plugins/qt4projectmanager/qmlobservertool.cpp index 3a64da2ed7a..7b556f2a313 100644 --- a/src/plugins/qt4projectmanager/qmlobservertool.cpp +++ b/src/plugins/qt4projectmanager/qmlobservertool.cpp @@ -32,6 +32,7 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" #include <coreplugin/icore.h> +#include <utils/qtcassert.h> #include <projectexplorer/project.h> #include <QDesktopServices> @@ -50,10 +51,9 @@ static inline QStringList validBinaryFilenames() << QLatin1String("QMLObserver.app/Contents/MacOS/QMLObserver"); } -bool QmlObserverTool::canBuild(const QString &installHeadersDir) +bool QmlObserverTool::canBuild(QtVersion *qtVersion) { - QString qDeclHeader = installHeadersDir + QLatin1String("/QtDeclarative/private/qdeclarativemetatype_p.h"); - return QFile::exists(qDeclHeader); + return checkMinimumQtVersion(qtVersion->qtVersionString(), 4, 7, 1); } QString QmlObserverTool::toolForProject(ProjectExplorer::Project *project) diff --git a/src/plugins/qt4projectmanager/qmlobservertool.h b/src/plugins/qt4projectmanager/qmlobservertool.h index 625e625c760..89cbca67460 100644 --- a/src/plugins/qt4projectmanager/qmlobservertool.h +++ b/src/plugins/qt4projectmanager/qmlobservertool.h @@ -43,10 +43,12 @@ namespace ProjectExplorer { namespace Qt4ProjectManager { +class QtVersion; + class QT4PROJECTMANAGER_EXPORT QmlObserverTool : public Utils::BuildableHelperLibrary { public: - static bool canBuild(const QString &installHeadersDir); + static bool canBuild(QtVersion *qtVersion); static QString toolForProject(ProjectExplorer::Project *project); static QString toolByInstallData(const QString &qtInstallData); static QStringList locationsByInstallData(const QString &qtInstallData); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index b6edfbfb149..283f52ba44e 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -1770,7 +1770,7 @@ QString QtVersion::buildDebuggingHelperLibrary(QFutureInterface<void> &future) } future.setProgressValue(2); - if (QmlDumpTool::canBuild(qtInstallHeaders)) { + if (QmlDumpTool::canBuild(this)) { QString toolDirectory = QmlDumpTool::copy(qtInstallData, &output); if (!toolDirectory.isEmpty()) { output += QmlDumpTool::build(toolDirectory, tc->makeCommand(), @@ -1782,7 +1782,7 @@ QString QtVersion::buildDebuggingHelperLibrary(QFutureInterface<void> &future) } future.setProgressValue(3); - if (QmlObserverTool::canBuild(qtInstallHeaders)) { + if (QmlObserverTool::canBuild(this)) { QString toolDirectory = QmlObserverTool::copy(qtInstallData, &output); if (!toolDirectory.isEmpty()) { output += QmlObserverTool::build(toolDirectory, tc->makeCommand(), -- GitLab