diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-10-25 10:55:00 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-25 16:22:00 +0200 |
commit | f45d6414ad6ef1d75f049a61411cd954bcae29c3 (patch) | |
tree | ebde425c3c7b2dab39227f49d5ea460d9088fc14 | |
parent | 79a389c34618880fab7a0b4f397ed3b0f0c0c675 (diff) |
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 existant in the cache, to ensure that
calling include() after write_file() always works.
Change-Id: I7d09269a57de55ca30b0e11dd40770de9f919f64
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
-rw-r--r-- | qmake/library/qmakebuiltins.cpp | 1 | ||||
-rw-r--r-- | qmake/library/qmakeparser.cpp | 6 | ||||
-rw-r--r-- | qmake/library/qmakeparser.h | 2 | ||||
-rw-r--r-- | tests/auto/tools/qmake/testdata/pro_file_cache/pro_file_cache.pro | 19 | ||||
-rw-r--r-- | tests/auto/tools/qmake/tst_qmake.cpp | 7 |
5 files changed, 35 insertions, 0 deletions
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 4d4f6d9793..bafa867f8b 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -320,6 +320,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/qmake/library/qmakeparser.cpp b/qmake/library/qmakeparser.cpp index ca69ce8116..9bf716a880 100644 --- a/qmake/library/qmakeparser.cpp +++ b/qmake/library/qmakeparser.cpp @@ -222,6 +222,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/qmake/library/qmakeparser.h b/qmake/library/qmakeparser.h index 0b22a91004..0bab5eea3b 100644 --- a/qmake/library/qmakeparser.h +++ b/qmake/library/qmakeparser.h @@ -94,6 +94,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, diff --git a/tests/auto/tools/qmake/testdata/pro_file_cache/pro_file_cache.pro b/tests/auto/tools/qmake/testdata/pro_file_cache/pro_file_cache.pro new file mode 100644 index 0000000000..e324c3f25f --- /dev/null +++ b/tests/auto/tools/qmake/testdata/pro_file_cache/pro_file_cache.pro @@ -0,0 +1,19 @@ +TEMPLATE = app +CONFIG -= debug_and_release_target + +SOURCES = + +content = "" +write_file("include.pri", content) +include(include.pri) + +content = "SOURCES = main.cpp" +write_file("include.pri", content) +include(include.pri) + +# Make sure that including the .pri file a second time will reload it properly +# off disk with the new content. +isEmpty(SOURCES): error(No sources defined) + +# Empty it again to silence qmake about non-existance sources +SOURCES = diff --git a/tests/auto/tools/qmake/tst_qmake.cpp b/tests/auto/tools/qmake/tst_qmake.cpp index 6e2eb316b9..fbecb7db96 100644 --- a/tests/auto/tools/qmake/tst_qmake.cpp +++ b/tests/auto/tools/qmake/tst_qmake.cpp @@ -92,6 +92,7 @@ private slots: void includefunction(); void substitutes(); void project(); + void proFileCache(); private: TestCompiler test_compiler; @@ -546,5 +547,11 @@ void tst_qmake::project() QVERIFY( test_compiler.removeProject( workDir, "project" )); } +void tst_qmake::proFileCache() +{ + QString workDir = base_path + "/testdata/pro_file_cache"; + QVERIFY( test_compiler.qmake( workDir, "pro_file_cache" )); +} + QTEST_MAIN(tst_qmake) #include "tst_qmake.moc" |