summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-09-10 13:45:47 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-09-10 13:45:52 (GMT)
commit9b5f167348d1bb6e4ddaa0a105d6794b9f290122 (patch)
tree2dc0bd2ba77a0f54b963f4e3b3399c9c0e94ae60 /Source
parent8de27c599f297654342920b0b8aec65c3245936f (diff)
parent9ac3503d30ed46c63c6a733304072d316f0042cf (diff)
downloadCMake-9b5f167348d1bb6e4ddaa0a105d6794b9f290122.zip
CMake-9b5f167348d1bb6e4ddaa0a105d6794b9f290122.tar.gz
CMake-9b5f167348d1bb6e4ddaa0a105d6794b9f290122.tar.bz2
Merge topic 'automoc-rerun-missing-dependency' into release-3.18
9ac3503d30 AutoMoc: Re-run moc if a dependency is missing Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5180
Diffstat (limited to 'Source')
-rw-r--r--Source/cmQtAutoMocUic.cxx22
1 files changed, 15 insertions, 7 deletions
diff --git a/Source/cmQtAutoMocUic.cxx b/Source/cmQtAutoMocUic.cxx
index 71c288c..9cb172b 100644
--- a/Source/cmQtAutoMocUic.cxx
+++ b/Source/cmQtAutoMocUic.cxx
@@ -192,7 +192,7 @@ public:
{
public:
// -- Parse Cache
- bool ParseCacheChanged = false;
+ std::atomic<bool> ParseCacheChanged = ATOMIC_VAR_INIT(false);
cmFileTime ParseCacheTime;
ParseCacheT ParseCache;
@@ -1777,16 +1777,24 @@ bool cmQtAutoMocUicT::JobProbeDepsMocT::Probe(MappingT const& mapping,
{
// Check dependency timestamps
std::string const sourceDir = SubDirPrefix(sourceFile);
- for (std::string const& dep : mapping.SourceFile->ParseData->Moc.Depends) {
+ auto& dependencies = mapping.SourceFile->ParseData->Moc.Depends;
+ for (auto it = dependencies.begin(); it != dependencies.end(); ++it) {
+ auto& dep = *it;
+
// Find dependency file
auto const depMatch = FindDependency(sourceDir, dep);
if (depMatch.first.empty()) {
- Log().Warning(GenT::MOC,
- cmStrCat(MessagePath(sourceFile), " depends on ",
- MessagePath(dep),
- " but the file does not exist."));
- continue;
+ if (reason != nullptr) {
+ *reason =
+ cmStrCat("Generating ", MessagePath(outputFile), " from ",
+ MessagePath(sourceFile), ", because its dependency ",
+ MessagePath(dep), " vanished.");
+ }
+ dependencies.erase(it);
+ BaseEval().ParseCacheChanged = true;
+ return true;
}
+
// Test if dependency file is older
if (outputFileTime.Older(depMatch.second)) {
if (reason != nullptr) {