diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 769638a4cdc8a790a4856959ec9594b7309148e1..d549a53fb5b0a4c0b6b5f80c7acf75717eea5d14 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -255,7 +255,14 @@ CMakeConfig BuildDirManager::configuration() const if (!m_hasData) return CMakeConfig(); - return parseConfiguration(); + Utils::FileName cacheFile = workDirectory(); + cacheFile.appendPath(QLatin1String("CMakeCache.txt")); + QString errorMessage; + CMakeConfig result = parseConfiguration(cacheFile, sourceDirectory(), &errorMessage); + if (!errorMessage.isEmpty()) + emit errorOccured(errorMessage); + + return result; } void BuildDirManager::stopProcess() @@ -517,13 +524,17 @@ static CMakeConfigItem::Type fromByteArray(const QByteArray &type) { return CMakeConfigItem::INTERNAL; } -CMakeConfig BuildDirManager::parseConfiguration() const +CMakeConfig BuildDirManager::parseConfiguration(const Utils::FileName &cacheFile, + const Utils::FileName &sourceDir, + QString *errorMessage) { CMakeConfig result; - const QString cacheFile = QDir(workDirectory().toString()).absoluteFilePath(QLatin1String("CMakeCache.txt")); - QFile cache(cacheFile); - if (!cache.open(QIODevice::ReadOnly | QIODevice::Text)) + QFile cache(cacheFile.toString()); + if (!cache.open(QIODevice::ReadOnly | QIODevice::Text)) { + if (errorMessage) + *errorMessage = tr("Failed to open %1 for reading.").arg(cacheFile.toUserOutput()); return CMakeConfig(); + } QSet<QByteArray> advancedSet; QByteArray documentation; @@ -557,9 +568,12 @@ CMakeConfig BuildDirManager::parseConfiguration() const // Sanity checks: if (key == "CMAKE_HOME_DIRECTORY") { const Utils::FileName actualSourceDir = Utils::FileName::fromUserInput(QString::fromUtf8(value)); - if (actualSourceDir != sourceDirectory()) - emit errorOccured(tr("Build directory contains a build of the wrong project (%1).") - .arg(actualSourceDir.toUserOutput())); + if (actualSourceDir != sourceDir) { + if (errorMessage) + *errorMessage = tr("Build directory contains a build of the wrong project (%1).") + .arg(actualSourceDir.toUserOutput()); + return CMakeConfig(); + } } } } diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.h b/src/plugins/cmakeprojectmanager/builddirmanager.h index b6bbebf350bae60e98d5dab3ac1409aee67ac3a3..53abb3cf98b7169c7443c58b2bd9d271300ca7fd 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.h +++ b/src/plugins/cmakeprojectmanager/builddirmanager.h @@ -86,6 +86,10 @@ public: void clearFiles(); CMakeConfig configuration() const; + static CMakeConfig parseConfiguration(const Utils::FileName &cacheFile, + const Utils::FileName &sourceDir, + QString *errorMessage); + signals: void configurationStarted() const; void dataAvailable() const; @@ -102,7 +106,6 @@ private: void processCMakeOutput(); void processCMakeError(); - CMakeConfig parseConfiguration() const; bool m_hasData = false;