From 38139d6ed97f1fd6adecf92aaa4a55d6c620f513 Mon Sep 17 00:00:00 2001 From: Alexander Drozdov Date: Sat, 5 Mar 2016 18:52:37 +1000 Subject: [PATCH] Fix compilation issues after upstream update --- builddirmanager.cpp | 17 +++++++++++++---- builddirmanager.h | 4 +++- cmakebuildconfiguration.cpp | 24 ++++++++++++++++++------ cmakebuildconfiguration.h | 2 +- cmakeproject.cpp | 28 +++++++++++++++++++++------- cmakeproject.h | 4 ++++ 6 files changed, 60 insertions(+), 19 deletions(-) diff --git a/builddirmanager.cpp b/builddirmanager.cpp index 7aaee086..186ac9e6 100644 --- a/builddirmanager.cpp +++ b/builddirmanager.cpp @@ -93,7 +93,6 @@ static QStringList toArguments(const CMakeConfig &config) { BuildDirManager::BuildDirManager(const CMakeBuildConfiguration *bc) : m_buildConfiguration(bc), - m_inputToolchainInfo(inputToolchainInfo), m_watcher(new QFileSystemWatcher(this)) { QTC_ASSERT(bc, return); @@ -145,6 +144,11 @@ const CMakeConfig BuildDirManager::cmakeConfiguration() const return m_buildConfiguration->cmakeConfiguration(); } +const CMakeToolchainInfo &BuildDirManager::cmakeToolchainInfo() const +{ + return m_buildConfiguration->cmakeToolchainInfo(); +} + bool BuildDirManager::isParsing() const { if (m_cmakeProcess) @@ -190,8 +194,8 @@ void BuildDirManager::forceReparse(bool clearCache) const QString generator = CMakeGeneratorKitInformation::generator(kit()); if (clearCache) { - QString cmakeCache(m_buildDir.toString() + QLatin1String("/CMakeCache.txt")); - QString cmakeFiles(m_buildDir.toString() + QLatin1String("/CMakeFiles")); + QString cmakeCache(buildDirectory().toString() + QLatin1String("/CMakeCache.txt")); + QString cmakeFiles(buildDirectory().toString() + QLatin1String("/CMakeFiles")); if (QFileInfo::exists(cmakeCache)) { removePath(cmakeCache); @@ -302,6 +306,11 @@ CMakeConfig BuildDirManager::configuration() const return parseConfiguration(); } +void BuildDirManager::forceReparseHandle() +{ + forceReparse(false); +} + void BuildDirManager::stopProcess() { if (!m_cmakeProcess) @@ -443,7 +452,7 @@ void BuildDirManager::startCMake(CMakeTool *tool, const QString &generator, if (!generator.isEmpty()) Utils::QtcProcess::addArg(&args, QString::fromLatin1("-G%1").arg(generator)); Utils::QtcProcess::addArgs(&args, toArguments(config)); - Utils::QtcProcess::addArgs(&args, toolchain.arguments(toArguments(config), buildDirStr)); + Utils::QtcProcess::addArgs(&args, toolchain.arguments(toArguments(config), workDirectory().toString())); ProjectExplorer::TaskHub::clearTasks(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM); diff --git a/builddirmanager.h b/builddirmanager.h index ecf01d49..d8935135 100644 --- a/builddirmanager.h +++ b/builddirmanager.h @@ -73,10 +73,13 @@ class BuildDirManager : public QObject const Utils::FileName workDirectory() const; const Utils::FileName sourceDirectory() const; const CMakeConfig cmakeConfiguration() const; + const CMakeToolchainInfo& cmakeToolchainInfo() const; + bool isParsing() const; void parse(); void forceReparse(bool clearCache = false); + void forceReparseHandle(); void resetData(); bool persistCMakeState(); @@ -106,7 +109,6 @@ class BuildDirManager : public QObject CMakeConfig parseConfiguration() const; bool m_hasData = false; - CMakeToolchainInfo m_inputToolchainInfo; const CMakeBuildConfiguration *m_buildConfiguration = nullptr; Utils::QtcProcess *m_cmakeProcess = nullptr; diff --git a/cmakebuildconfiguration.cpp b/cmakebuildconfiguration.cpp index 4890754b..90e5a396 100644 --- a/cmakebuildconfiguration.cpp +++ b/cmakebuildconfiguration.cpp @@ -94,10 +94,10 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(ProjectExplorer::Target *parent this, [this]() { m_completeConfigurationCache.clear(); emit parsingStarted(); }); connect(this, &CMakeBuildConfiguration::environmentChanged, - m_buildDirManager, &BuildDirManager::forceReparse); + m_buildDirManager, &BuildDirManager::forceReparseHandle); connect(this, &CMakeBuildConfiguration::buildDirectoryChanged, - m_buildDirManager, &BuildDirManager::forceReparse); - connect(target(), &Target::kitChanged, m_buildDirManager, &BuildDirManager::forceReparse); + m_buildDirManager, &BuildDirManager::forceReparseHandle); + connect(target(), &Target::kitChanged, m_buildDirManager, &BuildDirManager::forceReparseHandle); connect(this, &CMakeBuildConfiguration::parsingStarted, project, &CMakeProject::handleParsingStarted); connect(this, &CMakeBuildConfiguration::dataAvailable, project, &CMakeProject::parseCMakeOutput); @@ -239,7 +239,7 @@ QList CMakeBuildConfiguration::completeCMakeConfiguration }); } -void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList &items) +void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QList &items, const CMakeToolchainInfo &info, bool clearCache) { if (m_buildDirManager->isParsing()) return; @@ -272,10 +272,22 @@ void CMakeBuildConfiguration::setCurrentCMakeConfiguration(const QListkit()); + + if (info.toolchainOverride != CMakeToolchainOverrideType::Disabled) { + config = removeDuplicates(cmakeConfiguration() + newConfig); + config = removeSubList(config, kitConfig); + } else { + config = removeDuplicates(kitConfig + cmakeConfiguration() + newConfig); + } + + clearCache = (m_cmakeToolchainInfo != info) || clearCache; + setCMakeConfiguration(config); + setCMakeToolchainInfo(info); - m_buildDirManager->forceReparse(); + m_buildDirManager->forceReparse(clearCache); } const CMakeToolchainInfo &CMakeBuildConfiguration::cmakeToolchainInfo() const diff --git a/cmakebuildconfiguration.h b/cmakebuildconfiguration.h index 78018470..fb97deeb 100644 --- a/cmakebuildconfiguration.h +++ b/cmakebuildconfiguration.h @@ -94,7 +94,7 @@ class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration private: QList completeCMakeConfiguration() const; - void setCurrentCMakeConfiguration(const QList &items); + void setCurrentCMakeConfiguration(const QList &items, const CMakeToolchainInfo &info, bool clearCache = false); void setError(const QString &message); diff --git a/cmakeproject.cpp b/cmakeproject.cpp index f8e92bcb..d92be3bd 100644 --- a/cmakeproject.cpp +++ b/cmakeproject.cpp @@ -26,7 +26,6 @@ #include "cmakeproject.h" #include "builddirmanager.h" -#include "cmakebuildconfiguration.h" #include "cmakebuildstep.h" #include "cmakekitinformation.h" #include "cmakeprojectconstants.h" @@ -390,6 +389,24 @@ void CMakeProject::parseCMakeOutput() updateRunConfigurations(); } +BuildDirManager *CMakeProject::buildDirManager() +{ + BuildDirManager *bdm = nullptr; + if (activeTarget() && activeTarget()->activeBuildConfiguration()) + bdm = static_cast(activeTarget()->activeBuildConfiguration())->buildDirManager(); + return bdm; +} + +bool CMakeProject::cmakeForceReparse() +{ + auto bdm = buildDirManager(); + if (bdm) { + bdm->forceReparse(); + return true; + } + return false; +} + bool CMakeProject::needsConfiguration() const { return targets().isEmpty(); @@ -811,16 +828,14 @@ bool CMakeProject::addFiles(const QStringList &filePaths) { Q_UNUSED(filePaths); // If globbing is used, watched does not know about new files, so force rebuilding - m_buildDirManager->forceReparse(); - return true; + return cmakeForceReparse(); } bool CMakeProject::eraseFiles(const QStringList &filePaths) { Q_UNUSED(filePaths); // FIXME force only when really needed - m_buildDirManager->forceReparse(); - return true; + return cmakeForceReparse(); } bool CMakeProject::renameFile(const QString &filePath, const QString &newFilePath) @@ -828,8 +843,7 @@ bool CMakeProject::renameFile(const QString &filePath, const QString &newFilePat Q_UNUSED(filePath); Q_UNUSED(newFilePath); // FIXME force only when really needed - m_buildDirManager->forceReparse(); - return true; + return cmakeForceReparse(); } } // namespace CMakeProjectManager diff --git a/cmakeproject.h b/cmakeproject.h index 4bfc8b6e..1206a1d6 100644 --- a/cmakeproject.h +++ b/cmakeproject.h @@ -28,6 +28,7 @@ #include "cmake_global.h" #include "cmakeprojectnodes.h" #include "cmaketoolchaininfo.h" +#include "cmakebuildconfiguration.h" #include #include @@ -131,6 +132,9 @@ class CMAKE_EXPORT CMakeProject : public ProjectExplorer::Project void handleParsingStarted(); void parseCMakeOutput(); + Internal::BuildDirManager *buildDirManager(); + bool cmakeForceReparse(); + void updateRunConfigurations(); void buildTree(Internal::CMakeProjectNode *rootNode, QList list);