From 158fa9c487da375dece883d9f499d7f22b060fa7 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 3 Mar 2014 17:23:41 +0100 Subject: Qbs: Wait for reparsing to be done after a build This is necessary since the build may change the the properties of the build targets (executable name, etc.), so we can not proceed to run anything without that update. Change-Id: I9790c529db5e4da61f59e638a05339ada714353c Reviewed-by: Joerg Bornemann Reviewed-by: Tobias Hunger --- src/plugins/qbsprojectmanager/qbsbuildstep.cpp | 14 ++++++++++++-- src/plugins/qbsprojectmanager/qbsbuildstep.h | 2 ++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp index 678e4f15f0..4ac5f4721e 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp @@ -234,16 +234,26 @@ QVariantMap QbsBuildStep::toMap() const void QbsBuildStep::buildingDone(bool success) { + m_lastWasSuccess = success; // Report errors: foreach (const qbs::ErrorItem &item, m_job->error().items()) createTaskAndOutput(ProjectExplorer::Task::Error, item.description(), item.codeLocation().fileName(), item.codeLocation().line()); + QbsProject *pro = static_cast(project()); + connect(pro, SIGNAL(projectParsingDone(bool)), this, SLOT(reparsingDone())); + // Building can uncover additional target artifacts. - static_cast(project())->parseCurrentBuildConfiguration(true); + // Wait for reparsing to finish, since before that our run configurations may not be valid. + pro->parseCurrentBuildConfiguration(true); +} +void QbsBuildStep::reparsingDone() +{ + disconnect(static_cast(project()), SIGNAL(projectParsingDone(bool)), + this, SLOT(reparsingDone())); QTC_ASSERT(m_fi, return); - m_fi->reportResult(success); + m_fi->reportResult(m_lastWasSuccess); m_fi = 0; // do not delete, it is not ours m_job->deleteLater(); m_job = 0; diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h index 3b6ceb77c2..9c576b7a46 100644 --- a/src/plugins/qbsprojectmanager/qbsbuildstep.h +++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h @@ -80,6 +80,7 @@ signals: private slots: void buildingDone(bool success); + void reparsingDone(); void handleTaskStarted(const QString &desciption, int max); void handleProgress(int value); void handleCommandDescriptionReport(const QString &highlight, const QString &message); @@ -108,6 +109,7 @@ private: QFutureInterface *m_fi; qbs::BuildJob *m_job; int m_progressBase; + bool m_lastWasSuccess; ProjectExplorer::IOutputParser *m_parser; friend class QbsBuildStepConfigWidget; -- cgit v1.2.3