forked from qt-creator/qt-creator
CMake: Make sure to run cmake when that is requested
Pass on the request to run cmake on to the builddirreaders. Task-number: QTCREATORBUG-19704 Change-Id: Iafeba61f46d6bb6783fc62d0504bb07dde2c4612 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -269,7 +269,10 @@ bool BuildDirManager::persistCMakeState()
|
|||||||
|
|
||||||
BuildDirParameters newParameters = m_parameters;
|
BuildDirParameters newParameters = m_parameters;
|
||||||
newParameters.workDirectory.clear();
|
newParameters.workDirectory.clear();
|
||||||
setParametersAndRequestParse(newParameters, REPARSE_URGENT | REPARSE_FORCE_CONFIGURATION | REPARSE_CHECK_CONFIGURATION,
|
setParametersAndRequestParse(newParameters,
|
||||||
|
REPARSE_URGENT
|
||||||
|
| REPARSE_FORCE_CMAKE_RUN | REPARSE_FORCE_CONFIGURATION
|
||||||
|
| REPARSE_CHECK_CONFIGURATION,
|
||||||
REPARSE_FAIL);
|
REPARSE_FAIL);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -289,10 +292,11 @@ void BuildDirManager::parse(int reparseParameters)
|
|||||||
reparseParameters |= REPARSE_FORCE_CONFIGURATION | REPARSE_FORCE_CMAKE_RUN;
|
reparseParameters |= REPARSE_FORCE_CONFIGURATION | REPARSE_FORCE_CMAKE_RUN;
|
||||||
} else if (reparseParameters & REPARSE_CHECK_CONFIGURATION) {
|
} else if (reparseParameters & REPARSE_CHECK_CONFIGURATION) {
|
||||||
if (checkConfiguration())
|
if (checkConfiguration())
|
||||||
reparseParameters |= REPARSE_FORCE_CONFIGURATION;
|
reparseParameters |= REPARSE_FORCE_CONFIGURATION | REPARSE_FORCE_CMAKE_RUN;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_reader->parse(reparseParameters & REPARSE_FORCE_CONFIGURATION);
|
m_reader->parse(reparseParameters & REPARSE_FORCE_CMAKE_RUN,
|
||||||
|
reparseParameters & REPARSE_FORCE_CONFIGURATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BuildDirManager::generateProjectTree(CMakeProjectNode *root, const QList<const FileNode *> &allFiles) const
|
void BuildDirManager::generateProjectTree(CMakeProjectNode *root, const QList<const FileNode *> &allFiles) const
|
||||||
|
@@ -57,7 +57,7 @@ public:
|
|||||||
|
|
||||||
virtual bool isCompatible(const BuildDirParameters &p) = 0;
|
virtual bool isCompatible(const BuildDirParameters &p) = 0;
|
||||||
virtual void resetData() = 0;
|
virtual void resetData() = 0;
|
||||||
virtual void parse(bool forceConfiguration) = 0;
|
virtual void parse(bool forceCMakeRun, bool forceConfiguration) = 0;
|
||||||
virtual void stop() = 0;
|
virtual void stop() = 0;
|
||||||
|
|
||||||
virtual bool isParsing() const = 0;
|
virtual bool isParsing() const = 0;
|
||||||
|
@@ -102,40 +102,8 @@ void ServerModeReader::setParameters(const BuildDirParameters &p)
|
|||||||
QTC_ASSERT(cmake, return);
|
QTC_ASSERT(cmake, return);
|
||||||
|
|
||||||
m_parameters = p;
|
m_parameters = p;
|
||||||
if (!m_cmakeServer) {
|
|
||||||
m_cmakeServer.reset(new ServerMode(p.environment,
|
createNewServer();
|
||||||
p.sourceDirectory, p.workDirectory,
|
|
||||||
cmake->cmakeExecutable(),
|
|
||||||
p.generator, p.extraGenerator, p.platform, p.toolset,
|
|
||||||
true, 1));
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::errorOccured,
|
|
||||||
this, &ServerModeReader::errorOccured);
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::cmakeReply,
|
|
||||||
this, &ServerModeReader::handleReply);
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::cmakeError,
|
|
||||||
this, &ServerModeReader::handleError);
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::cmakeProgress,
|
|
||||||
this, &ServerModeReader::handleProgress);
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::cmakeSignal,
|
|
||||||
this, &ServerModeReader::handleSignal);
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::cmakeMessage, [this](const QString &m) {
|
|
||||||
const QStringList lines = m.split('\n');
|
|
||||||
for (const QString &l : lines) {
|
|
||||||
m_parser.stdError(l);
|
|
||||||
Core::MessageManager::write(l);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::message,
|
|
||||||
this, [](const QString &m) { Core::MessageManager::write(m); });
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::connected,
|
|
||||||
this, &ServerModeReader::isReadyNow, Qt::QueuedConnection); // Delay
|
|
||||||
connect(m_cmakeServer.get(), &ServerMode::disconnected,
|
|
||||||
this, [this]() {
|
|
||||||
stop();
|
|
||||||
Core::MessageManager::write(tr("Parsing of CMake project failed: Connection to CMake server lost."));
|
|
||||||
m_cmakeServer.reset();
|
|
||||||
}, Qt::QueuedConnection); // Delay
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ServerModeReader::isCompatible(const BuildDirParameters &p)
|
bool ServerModeReader::isCompatible(const BuildDirParameters &p)
|
||||||
@@ -171,13 +139,16 @@ void ServerModeReader::resetData()
|
|||||||
m_fileGroups.clear();
|
m_fileGroups.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerModeReader::parse(bool forceConfiguration)
|
void ServerModeReader::parse(bool forceCMakeRun, bool forceConfiguration)
|
||||||
{
|
{
|
||||||
emit configurationStarted();
|
emit configurationStarted();
|
||||||
|
|
||||||
QTC_ASSERT(m_cmakeServer, return);
|
QTC_ASSERT(m_cmakeServer, return);
|
||||||
QVariantMap extra;
|
QVariantMap extra;
|
||||||
if (forceConfiguration || !QDir(m_parameters.buildDirectory.toString()).exists("CMakeCache.txt")) {
|
if (forceCMakeRun)
|
||||||
|
createNewServer();
|
||||||
|
|
||||||
|
if (forceConfiguration) {
|
||||||
QStringList cacheArguments = transform(m_parameters.configuration,
|
QStringList cacheArguments = transform(m_parameters.configuration,
|
||||||
[this](const CMakeConfigItem &i) {
|
[this](const CMakeConfigItem &i) {
|
||||||
return i.toArgument(m_parameters.expander);
|
return i.toArgument(m_parameters.expander);
|
||||||
@@ -401,6 +372,49 @@ CppTools::RawProjectParts ServerModeReader::createRawProjectParts() const
|
|||||||
return rpps;
|
return rpps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerModeReader::createNewServer()
|
||||||
|
{
|
||||||
|
QTC_ASSERT(m_parameters.cmakeTool(), return);
|
||||||
|
m_cmakeServer
|
||||||
|
= std::make_unique<ServerMode>(
|
||||||
|
m_parameters.environment,
|
||||||
|
m_parameters.sourceDirectory, m_parameters.workDirectory,
|
||||||
|
m_parameters.cmakeTool()->cmakeExecutable(),
|
||||||
|
m_parameters.generator,
|
||||||
|
m_parameters.extraGenerator,
|
||||||
|
m_parameters.platform, m_parameters.toolset,
|
||||||
|
true, 1);
|
||||||
|
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::errorOccured,
|
||||||
|
this, &ServerModeReader::errorOccured);
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::cmakeReply,
|
||||||
|
this, &ServerModeReader::handleReply);
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::cmakeError,
|
||||||
|
this, &ServerModeReader::handleError);
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::cmakeProgress,
|
||||||
|
this, &ServerModeReader::handleProgress);
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::cmakeSignal,
|
||||||
|
this, &ServerModeReader::handleSignal);
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::cmakeMessage, [this](const QString &m) {
|
||||||
|
const QStringList lines = m.split('\n');
|
||||||
|
for (const QString &l : lines) {
|
||||||
|
m_parser.stdError(l);
|
||||||
|
Core::MessageManager::write(l);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::message,
|
||||||
|
this, [](const QString &m) { Core::MessageManager::write(m); });
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::connected,
|
||||||
|
this, &ServerModeReader::isReadyNow, Qt::QueuedConnection); // Delay
|
||||||
|
connect(m_cmakeServer.get(), &ServerMode::disconnected,
|
||||||
|
this, [this]() {
|
||||||
|
stop();
|
||||||
|
Core::MessageManager::write(tr("Parsing of CMake project failed: Connection to CMake server lost."));
|
||||||
|
m_cmakeServer.reset();
|
||||||
|
}, Qt::QueuedConnection); // Delay
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void ServerModeReader::handleReply(const QVariantMap &data, const QString &inReplyTo)
|
void ServerModeReader::handleReply(const QVariantMap &data, const QString &inReplyTo)
|
||||||
{
|
{
|
||||||
if (!m_delayedErrorMessage.isEmpty()) {
|
if (!m_delayedErrorMessage.isEmpty()) {
|
||||||
|
@@ -50,7 +50,7 @@ public:
|
|||||||
|
|
||||||
bool isCompatible(const BuildDirParameters &p) final;
|
bool isCompatible(const BuildDirParameters &p) final;
|
||||||
void resetData() final;
|
void resetData() final;
|
||||||
void parse(bool forceConfiguration) final;
|
void parse(bool forceCMakeRun, bool forceConfiguration) final;
|
||||||
void stop() final;
|
void stop() final;
|
||||||
|
|
||||||
bool isParsing() const final;
|
bool isParsing() const final;
|
||||||
@@ -62,6 +62,7 @@ public:
|
|||||||
CppTools::RawProjectParts createRawProjectParts() const final;
|
CppTools::RawProjectParts createRawProjectParts() const final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void createNewServer();
|
||||||
void handleReply(const QVariantMap &data, const QString &inReplyTo);
|
void handleReply(const QVariantMap &data, const QString &inReplyTo);
|
||||||
void handleError(const QString &message);
|
void handleError(const QString &message);
|
||||||
void handleProgress(int min, int cur, int max, const QString &inReplyTo);
|
void handleProgress(int min, int cur, int max, const QString &inReplyTo);
|
||||||
|
@@ -170,7 +170,7 @@ static QString findCbpFile(const QDir &directory)
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeaLeafReader::parse(bool forceConfiguration)
|
void TeaLeafReader::parse(bool forceCMakeRun, bool forceConfiguration)
|
||||||
{
|
{
|
||||||
emit configurationStarted();
|
emit configurationStarted();
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ void TeaLeafReader::parse(bool forceConfiguration)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool mustUpdate = m_cmakeFiles.isEmpty()
|
const bool mustUpdate = forceCMakeRun || m_cmakeFiles.isEmpty()
|
||||||
|| anyOf(m_cmakeFiles, [&cbpFileFi](const FilePath &f) {
|
|| anyOf(m_cmakeFiles, [&cbpFileFi](const FilePath &f) {
|
||||||
return f.toFileInfo().lastModified() > cbpFileFi.lastModified();
|
return f.toFileInfo().lastModified() > cbpFileFi.lastModified();
|
||||||
});
|
});
|
||||||
|
@@ -51,7 +51,7 @@ public:
|
|||||||
|
|
||||||
bool isCompatible(const BuildDirParameters &p) final;
|
bool isCompatible(const BuildDirParameters &p) final;
|
||||||
void resetData() final;
|
void resetData() final;
|
||||||
void parse(bool forceConfiguration) final;
|
void parse(bool forceCMakeRun, bool forceConfiguration) final;
|
||||||
void stop() final;
|
void stop() final;
|
||||||
|
|
||||||
bool isParsing() const final;
|
bool isParsing() const final;
|
||||||
|
Reference in New Issue
Block a user