aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/corelib/tools/vsenvironmentdetector.cpp25
-rw-r--r--src/lib/corelib/tools/vsenvironmentdetector.h2
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);