Qmake: Fix detection of successful parsing run

Do not report success of a qmake parsing run based on every .pro-file
having reported success. Take the top-level .pro-file's success value
instead.

This fixes e.g. Creator, which has some .pro-files that error out in
some conditions.

Task-number: QTCREATORBUG-18992
Change-Id: I888141e723da84fb780ccd84c86acc25d03f5f28
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Tobias Hunger
2017-11-02 14:32:18 +01:00
parent af572c546f
commit 1094fe5abf
3 changed files with 4 additions and 9 deletions

View File

@@ -1489,7 +1489,7 @@ void QmakeProFile::asyncEvaluate(QFutureInterface<QmakeEvalResult *> &fi, QmakeE
void QmakeProFile::applyAsyncEvaluate()
{
applyEvaluate(m_parseFutureWatcher.result());
m_project->decrementPendingEvaluateFutures(validParse());
m_project->decrementPendingEvaluateFutures();
}
bool sortByParserNodes(Node *a, Node *b)

View File

@@ -500,24 +500,20 @@ void QmakeProject::startAsyncTimer(QmakeProFile::AsyncUpdateDelay delay)
void QmakeProject::incrementPendingEvaluateFutures()
{
++m_pendingEvaluateFuturesCount;
if (m_pendingEvaluateFuturesCount == 1)
m_totalEvaluationSuccess = true;
m_asyncUpdateFutureInterface->setProgressRange(m_asyncUpdateFutureInterface->progressMinimum(),
m_asyncUpdateFutureInterface->progressMaximum() + 1);
}
void QmakeProject::decrementPendingEvaluateFutures(bool success)
void QmakeProject::decrementPendingEvaluateFutures()
{
--m_pendingEvaluateFuturesCount;
m_totalEvaluationSuccess = m_totalEvaluationSuccess && success;
m_asyncUpdateFutureInterface->setProgressValue(m_asyncUpdateFutureInterface->progressValue() + 1);
if (m_pendingEvaluateFuturesCount == 0) {
// We are done!
setRootProjectNode(QmakeNodeTreeBuilder::buildTree(this));
if (!m_totalEvaluationSuccess)
if (!m_rootProFile->validParse())
m_asyncUpdateFutureInterface->reportCanceled();
m_asyncUpdateFutureInterface->reportFinished();

View File

@@ -100,7 +100,7 @@ public:
/// \internal
void incrementPendingEvaluateFutures();
/// \internal
void decrementPendingEvaluateFutures(bool success);
void decrementPendingEvaluateFutures();
/// \internal
bool wasEvaluateCanceled();
@@ -186,7 +186,6 @@ private:
// cached data during project rescan
QMakeGlobals *m_qmakeGlobals = nullptr;
int m_qmakeGlobalsRefCnt = 0;
bool m_totalEvaluationSuccess = false;
QString m_qmakeSysroot;