From aa2508ba411ce19471d75a62fdee10cc22c44642 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Date: Thu, 16 May 2013 18:11:46 +0200
Subject: [PATCH] Fix qmake's pro file cache to interact correctly with
 write_file

When writing a file with write_file() we have to inform the pro file parser
cache to discard the file if it's existent in the cache, to ensure that
calling include() after write_file() always works.

Change-Id: I7d09269a57de55ca30b0e11dd40770de9f919f64
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
(cherry picked from qtbase/f45d6414ad6ef1d75f049a61411cd954bcae29c3)
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
---
 src/shared/proparser/qmakebuiltins.cpp | 1 +
 src/shared/proparser/qmakeparser.cpp   | 6 ++++++
 src/shared/proparser/qmakeparser.h     | 2 ++
 3 files changed, 9 insertions(+)

diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 274ef9f328f..6e29843ed19 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -308,6 +308,7 @@ QMakeEvaluator::writeFile(const QString &ctx, const QString &fn, QIODevice::Open
                   .arg(ctx, QDir::toNativeSeparators(qfi.filePath()), errStr));
         return ReturnFalse;
     }
+    m_parser->discardFileFromCache(qfi.filePath());
     return ReturnTrue;
 }
 
diff --git a/src/shared/proparser/qmakeparser.cpp b/src/shared/proparser/qmakeparser.cpp
index a7e022a249b..1cbb57889a1 100644
--- a/src/shared/proparser/qmakeparser.cpp
+++ b/src/shared/proparser/qmakeparser.cpp
@@ -210,6 +210,12 @@ ProFile *QMakeParser::parsedProBlock(
     return pro;
 }
 
+void QMakeParser::discardFileFromCache(const QString &fileName)
+{
+    if (m_cache)
+        m_cache->discardFile(fileName);
+}
+
 bool QMakeParser::read(ProFile *pro)
 {
     QFile file(pro->fileName());
diff --git a/src/shared/proparser/qmakeparser.h b/src/shared/proparser/qmakeparser.h
index 7db20158415..6fc599f617d 100644
--- a/src/shared/proparser/qmakeparser.h
+++ b/src/shared/proparser/qmakeparser.h
@@ -82,6 +82,8 @@ public:
     ProFile *parsedProBlock(const QString &contents, const QString &name, int line = 0,
                             SubGrammar grammar = FullGrammar);
 
+    void discardFileFromCache(const QString &fileName);
+
 private:
     enum ScopeNesting {
         NestNone = 0,
-- 
GitLab