From 392bda1160d3578861b74d87167e70f10287b323 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Fri, 28 May 2021 12:02:18 +0200 Subject: [PATCH] CMakePM: Save cmake parameters in qtcsettings.cmake also for initial run This way projects can have access to all CMake parameters that were issued from Qt Creator. Previously the initial run was skipped, only the subsequent changes were picked up. Change-Id: I7a2262cdb9754ff666f78fd2e39663466f494f5f Reviewed-by: Alessandro Portale --- .../cmakeprojectmanager/cmakebuildsystem.cpp | 23 ------------------- .../cmakeprojectmanager/cmakebuildsystem.h | 2 -- .../cmakeprojectmanager/cmakeconfigitem.cpp | 2 +- .../cmakeprojectmanager/fileapireader.cpp | 23 +++++++++++++++++++ .../cmakeprojectmanager/fileapireader.h | 2 ++ 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 0fe4bfe3b31..560b9251ae2 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -380,27 +380,6 @@ QString CMakeBuildSystem::reparseParametersString(int reparseFlags) return result.trimmed(); } -void CMakeBuildSystem::writeConfigurationIntoBuildDirectory() -{ - const Utils::MacroExpander *expander = cmakeBuildConfiguration()->macroExpander(); - const FilePath buildDir = workDirectory(m_parameters); - QTC_ASSERT(buildDir.exists(), return ); - - const FilePath settingsFile = buildDir.pathAppended("qtcsettings.cmake"); - - QByteArray contents; - contents.append("# This file is managed by Qt Creator, do not edit!\n\n"); - contents.append( - transform(cmakeBuildConfiguration()->configurationChanges(), - [expander](const CMakeConfigItem &item) { return item.toCMakeSetLine(expander); }) - .join('\n') - .toUtf8()); - - QFile file(settingsFile.toString()); - QTC_ASSERT(file.open(QFile::WriteOnly | QFile::Truncate), return ); - file.write(contents); -} - void CMakeBuildSystem::setParametersAndRequestParse(const BuildDirParameters ¶meters, const int reparseParameters) { @@ -434,8 +413,6 @@ void CMakeBuildSystem::setParametersAndRequestParse(const BuildDirParameters &pa m_reader.setParameters(m_parameters); - writeConfigurationIntoBuildDirectory(); - if (reparseParameters & REPARSE_URGENT) { qCDebug(cmakeBuildSystemLog) << "calling requestReparse"; requestParse(); diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h index 3b591c15815..07cffaa4f9f 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.h @@ -158,8 +158,6 @@ private: void runCTest(); - void writeConfigurationIntoBuildDirectory(); - ProjectExplorer::TreeScanner m_treeScanner; QHash m_mimeBinaryCache; QList m_allFiles; diff --git a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp index 4887bd130dd..7e30f661fb2 100644 --- a/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeconfigitem.cpp @@ -200,7 +200,7 @@ QString CMakeConfigItem::expandedValue(const ProjectExplorer::Kit *k) const QString CMakeConfigItem::expandedValue(const Utils::MacroExpander *expander) const { - return expander->expand(QString::fromUtf8(value)); + return expander ? expander->expand(QString::fromUtf8(value)) : QString::fromUtf8(value); } std::function CMakeConfigItem::sortOperator() diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index 2b3a086b1ec..303503eccc2 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -336,6 +336,28 @@ void FileApiReader::makeBackupConfiguration(bool store) } +void FileApiReader::writeConfigurationIntoBuildDirectory(const QStringList &configurationArguments) +{ + const FilePath buildDir = m_parameters.workDirectory; + QTC_ASSERT(buildDir.exists(), return ); + + const FilePath settingsFile = buildDir.pathAppended("qtcsettings.cmake"); + + QByteArray contents; + contents.append("# This file is managed by Qt Creator, do not edit!\n\n"); + contents.append( + transform(CMakeConfigItem::itemsFromArguments(configurationArguments), + [](const CMakeConfigItem &item) { + return item.toCMakeSetLine(nullptr); + }) + .join('\n') + .toUtf8()); + + QFile file(settingsFile.toString()); + QTC_ASSERT(file.open(QFile::WriteOnly | QFile::Truncate), return ); + file.write(contents); +} + void FileApiReader::startCMakeState(const QStringList &configurationArguments) { qCDebug(cmakeFileApiMode) << "FileApiReader: START CMAKE STATE."; @@ -347,6 +369,7 @@ void FileApiReader::startCMakeState(const QStringList &configurationArguments) qCDebug(cmakeFileApiMode) << ">>>>>> Running cmake with arguments:" << configurationArguments; makeBackupConfiguration(true); + writeConfigurationIntoBuildDirectory(configurationArguments); m_cmakeProcess->run(m_parameters, configurationArguments); } diff --git a/src/plugins/cmakeprojectmanager/fileapireader.h b/src/plugins/cmakeprojectmanager/fileapireader.h index 505f5fd5065..1a7d7dc3d38 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.h +++ b/src/plugins/cmakeprojectmanager/fileapireader.h @@ -93,6 +93,8 @@ private: void replyDirectoryHasChanged(const QString &directory) const; void makeBackupConfiguration(bool store); + void writeConfigurationIntoBuildDirectory(const QStringList &configuration); + std::unique_ptr m_cmakeProcess; // cmake data: