Browse Source

QtAutogen: Don't modify target source files while iterating them.

Populate a separate vector of files and append them separately. This
was the pattern used prior to commit 035b6908 (Autogen: Split AutoRcc
handling into two methods, 2013-12-10), which was erroneously not
maintained in that refactoring.
Stephen Kelly 12 years ago
parent
commit
870bd16f2c
1 changed files with 10 additions and 1 deletions
  1. 10 1
      Source/cmQtAutoGenerators.cxx

+ 10 - 1
Source/cmQtAutoGenerators.cxx

@@ -810,6 +810,8 @@ void cmQtAutoGenerators::InitializeAutoRccTarget(cmTarget* target)
 
   const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
 
+  std::vector<cmSourceFile*> newFiles;
+
   for(std::vector<cmSourceFile*>::const_iterator fileIt = srcFiles.begin();
       fileIt != srcFiles.end();
       ++fileIt)
@@ -833,10 +835,17 @@ void cmQtAutoGenerators::InitializeAutoRccTarget(cmTarget* target)
                                 rcc_output_file.c_str(), false);
         cmSourceFile* rccCppSource
                 = makefile->GetOrCreateSource(rcc_output_file.c_str(), true);
-        target->AddSourceFile(rccCppSource);
+        newFiles.push_back(rccCppSource);
         }
       }
     }
+
+  for(std::vector<cmSourceFile*>::const_iterator fileIt = newFiles.begin();
+      fileIt != newFiles.end();
+      ++fileIt)
+    {
+    target->AddSourceFile(*fileIt);
+    }
 }
 
 void cmQtAutoGenerators::SetupAutoRccTarget(cmTarget const* target)