diff options
-rw-r--r-- | src/lib/corelib/tools/vsenvironmentdetector.cpp | 25 | ||||
-rw-r--r-- | src/lib/corelib/tools/vsenvironmentdetector.h | 2 |
2 files changed, 21 insertions, 6 deletions
diff --git a/src/lib/corelib/tools/vsenvironmentdetector.cpp b/src/lib/corelib/tools/vsenvironmentdetector.cpp index c8a638130..16cdc3110 100644 --- a/src/lib/corelib/tools/vsenvironmentdetector.cpp +++ b/src/lib/corelib/tools/vsenvironmentdetector.cpp @@ -42,6 +42,7 @@ #include <logging/translator.h> #include <tools/qbsassert.h> #include <tools/qttools.h> +#include <tools/stringutils.h> #include <QtCore/qdebug.h> #include <QtCore/qdir.h> @@ -102,7 +103,8 @@ bool VsEnvironmentDetector::start(std::vector<MSVC *> msvcs) return someMSVCDetected; } -QString VsEnvironmentDetector::findVcVarsAllBat(const MSVC &msvc) const +QString VsEnvironmentDetector::findVcVarsAllBat(const MSVC &msvc, + std::vector<QString> &searchedPaths) const { // ### We can only rely on MSVC.vcInstallPath being set // when this is called from utilitiesextension.cpp :-( @@ -117,19 +119,32 @@ QString VsEnvironmentDetector::findVcVarsAllBat(const MSVC &msvc) const } const QString vcvarsallbat = QStringLiteral("vcvarsall.bat"); QString path = vcvarsallbat; + QString fullPath = dir.absoluteFilePath(path); if (dir.exists(path)) - return dir.absoluteFilePath(path); + return fullPath; + else + searchedPaths.push_back(fullPath); path = QLatin1String("Auxiliary/Build/") + vcvarsallbat; + fullPath = dir.absoluteFilePath(path); if (dir.exists(path)) - return dir.absoluteFilePath(path); + return fullPath; + else + searchedPaths.push_back(fullPath); return QString(); } bool VsEnvironmentDetector::startDetection(const std::vector<MSVC *> &compatibleMSVCs) { - const QString vcvarsallbat = findVcVarsAllBat(**compatibleMSVCs.begin()); + std::vector<QString> searchedPaths; + const QString vcvarsallbat = findVcVarsAllBat(**compatibleMSVCs.begin(), searchedPaths); if (vcvarsallbat.isEmpty()) { - m_errorString = Tr::tr("Cannot find 'vcvarsall.bat'."); + if (!searchedPaths.empty()) { + m_errorString = Tr::tr( + "Cannot find 'vcvarsall.bat' at any of the following locations:\n\t") + + join(searchedPaths, QStringLiteral("\n\t")); + } else { + m_errorString = Tr::tr("Cannot find 'vcvarsall.bat'."); + } return false; } diff --git a/src/lib/corelib/tools/vsenvironmentdetector.h b/src/lib/corelib/tools/vsenvironmentdetector.h index 4b973a34d..1970273ee 100644 --- a/src/lib/corelib/tools/vsenvironmentdetector.h +++ b/src/lib/corelib/tools/vsenvironmentdetector.h @@ -64,7 +64,7 @@ public: QString errorString() const { return m_errorString; } private: - QString findVcVarsAllBat(const MSVC &msvc) const; + QString findVcVarsAllBat(const MSVC &msvc, std::vector<QString> &searchedPaths) const; bool startDetection(const std::vector<MSVC *> &compatibleMSVCs); void writeBatchFile(QIODevice *device, const QString &vcvarsallbat, const std::vector<MSVC *> &msvcs) const; void parseBatOutput(const QByteArray &output, std::vector<MSVC *> msvcs); |