diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qtsupport/baseqtversion.cpp | 45 | ||||
-rw-r--r-- | src/plugins/qtsupport/baseqtversion.h | 5 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtoptionspage.cpp | 7 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtversionfactory.cpp | 7 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtversionfactory.h | 2 |
5 files changed, 34 insertions, 32 deletions
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index cf134182b5..95fbfaadca 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -865,8 +865,11 @@ void BaseQtVersion::updateVersionInfo() const m_hasQmlDebuggingLibrary = false; m_hasQmlObserver = false; - if (!queryQMakeVariables(qmakeCommand(), qmakeRunEnvironment(), &m_versionInfo, &m_qmakeIsExecutable)) + if (!queryQMakeVariables(qmakeCommand(), qmakeRunEnvironment(), &m_versionInfo)) { + m_qmakeIsExecutable = false; return; + } + m_qmakeIsExecutable = true; const QString qtInstallData = qmakeProperty("QT_INSTALL_DATA"); const QString qtInstallBins = qmakeProperty("QT_INSTALL_BINS"); @@ -1181,15 +1184,8 @@ QtConfigWidget *BaseQtVersion::createConfigurationWidget() const return 0; } -bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Utils::Environment &env, - QHash<QString, QString> *versionInfo) -{ - bool qmakeIsExecutable; - return BaseQtVersion::queryQMakeVariables(binary, env, versionInfo, &qmakeIsExecutable); -} - static QByteArray runQmakeQuery(const FileName &binary, const Environment &env, - bool *isExecutable) + QString *error) { const int timeOutMS = 30000; // Might be slow on some machines. @@ -1198,38 +1194,41 @@ static QByteArray runQmakeQuery(const FileName &binary, const Environment &env, process.start(binary.toString(), QStringList(QLatin1String("-query")), QIODevice::ReadOnly); if (!process.waitForStarted()) { - qWarning("Cannot start '%s': %s", qPrintable(binary.toUserOutput()), qPrintable(process.errorString())); - *isExecutable = false; + if (error) + *error = QCoreApplication::translate("QtVersion", "Cannot start '%1': %2").arg(binary.toUserOutput()).arg(process.errorString()); return QByteArray(); } if (!process.waitForFinished(timeOutMS)) { SynchronousProcess::stopProcess(process); - *isExecutable = true; - qWarning("Timeout running '%s' (%dms).", qPrintable(binary.toUserOutput()), timeOutMS); + if (error) + *error = QCoreApplication::translate("QtVersion", "Timeout running '%1' (%2ms).").arg(binary.toUserOutput()).arg(timeOutMS); return QByteArray(); } if (process.exitStatus() != QProcess::NormalExit) { - qWarning("'%s' crashed.", qPrintable(binary.toUserOutput())); - *isExecutable = false; + if (error) + *error = QCoreApplication::translate("QtVersion", "'%s' crashed.").arg(binary.toUserOutput()); return QByteArray(); } - *isExecutable = true; + if (error) + error->clear(); return process.readAllStandardOutput(); } bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environment &env, - QHash<QString, QString> *versionInfo, bool *qmakeIsExecutable) + QHash<QString, QString> *versionInfo, QString *error) { const QFileInfo qmake = binary.toFileInfo(); - *qmakeIsExecutable = qmake.exists() && qmake.isExecutable() && !qmake.isDir(); - if (!*qmakeIsExecutable) + if (!qmake.exists() || !qmake.isExecutable() || qmake.isDir()) { + if (error) + *error = QCoreApplication::translate("QtVersion", "qmake '%1' is not a executable").arg(binary.toUserOutput()); return false; + } QByteArray output; - output = runQmakeQuery(binary, env, qmakeIsExecutable); + output = runQmakeQuery(binary, env, error); - if (output.isNull() && !*qmakeIsExecutable) { + if (output.isNull() && !error->isEmpty()) { // Note: Don't rerun if we were able to execute the binary before. // Try running qmake with all kinds of tool chains set up in the environment. @@ -1242,8 +1241,8 @@ bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environmen continue; Environment realEnv = env; tc->addToEnvironment(realEnv); - output = runQmakeQuery(binary, realEnv, qmakeIsExecutable); - if (*qmakeIsExecutable) + output = runQmakeQuery(binary, realEnv, error); + if (error->isEmpty()) break; } } diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h index 261ff50e10..4ca6b6c094 100644 --- a/src/plugins/qtsupport/baseqtversion.h +++ b/src/plugins/qtsupport/baseqtversion.h @@ -187,10 +187,7 @@ public: QList<ProjectExplorer::Task> reportIssues(const QString &proFile, const QString &buildDir) const; static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env, - QHash<QString, QString> *versionInfo); - static bool queryQMakeVariables(const Utils::FileName &binary, const Utils::Environment &env, - QHash<QString, QString> *versionInfo, - bool *qmakeIsExecutable); + QHash<QString, QString> *versionInfo, QString *error = 0); static Utils::FileName mkspecDirectoryFromVersionInfo(const QHash<QString, QString> &versionInfo); static Utils::FileName mkspecFromVersionInfo(const QHash<QString, QString> &versionInfo); diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index a3d95b2064..9ea789611d 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -656,7 +656,8 @@ void QtOptionsPageWidget::addQtDir() return; } - version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion); + QString error; + version = QtVersionFactory::createQtVersionFromQMakePath(qtVersion, false, QString(), &error); if (version) { m_versions.append(version); @@ -669,6 +670,10 @@ void QtOptionsPageWidget::addQtDir() m_ui->qtdirList->setCurrentItem(item); // should update the rest of the ui m_versionUi->nameEdit->setFocus(); m_versionUi->nameEdit->selectAll(); + } else { + QMessageBox::warning(this, tr("Qmake not executable"), + tr("The qmake %1 could not be added: %2").arg(qtVersion.toUserOutput()).arg(error)); + return; } updateCleanUpButton(); } diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp index a0287bb5b8..f1fa85f382 100644 --- a/src/plugins/qtsupport/qtversionfactory.cpp +++ b/src/plugins/qtsupport/qtversionfactory.cpp @@ -56,12 +56,11 @@ bool sortByPriority(QtVersionFactory *a, QtVersionFactory *b) return a->priority() > b->priority(); } -BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource) +BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error) { QHash<QString, QString> versionInfo; Utils::Environment env = Utils::Environment::systemEnvironment(); - bool success = BaseQtVersion::queryQMakeVariables(qmakePath, env, &versionInfo); - if (!success) + if (!BaseQtVersion::queryQMakeVariables(qmakePath, env, &versionInfo, error)) return 0; Utils::FileName mkspec = BaseQtVersion::mkspecFromVersionInfo(versionInfo); @@ -84,5 +83,7 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN } } ProFileCacheManager::instance()->decRefCount(); + if (error) + *error = tr("No factory found for qmake: '%1'").arg(qmakePath.toUserOutput()); return 0; } diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h index 9e4afecf14..4c955dac92 100644 --- a/src/plugins/qtsupport/qtversionfactory.h +++ b/src/plugins/qtsupport/qtversionfactory.h @@ -62,7 +62,7 @@ public: virtual int priority() const = 0; virtual BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, bool isAutoDetected = false, const QString &autoDetectionSource = QString()) = 0; - static BaseQtVersion *createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString()); + static BaseQtVersion *createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString(), QString *error = 0); }; } // namespace QtSupport |