Forráskód Böngészése

Merge topic 'minor-cleanups'

531e40b cmTarget: Make GetSourceFiles populate an out-vector parameter.
38de54c cmGeneratorTarget: Add methods to access source file groups.
f579fe0 Help: Fix link to MAP_IMPORTED_CONFIG_<CONFIG>
590d238 cmTarget: Handle NO_SYSTEM_FROM_IMPORTED.
Brad King 11 éve
szülő
commit
e56530f612

+ 1 - 1
Help/manual/cmake-buildsystem.7.rst

@@ -428,7 +428,7 @@ the ``CONFIG`` generator expression.
 
 The ``CONFIG`` parameter is compared case-insensitively with the configuration
 being built.  In the presence of :prop_tgt:`IMPORTED` targets, the content of
-:prop_tgt:`MAP_IMPORTED_CONFIG_DEBUG <MAP_IMPORTED_CONFIG_CONFIG>` is also
+:prop_tgt:`MAP_IMPORTED_CONFIG_DEBUG <MAP_IMPORTED_CONFIG_<CONFIG>>` is also
 accounted for by this expression.
 
 Some buildsystems generated by :manual:`cmake(1)` have a predetermined

+ 2 - 1
Source/cmExtraCodeBlocksGenerator.cxx

@@ -398,7 +398,8 @@ void cmExtraCodeBlocksGenerator
         case cmTarget::OBJECT_LIBRARY:
         case cmTarget::UTILITY: // can have sources since 2.6.3
           {
-          const std::vector<cmSourceFile*>&sources=ti->second.GetSourceFiles();
+          std::vector<cmSourceFile*> sources;
+          ti->second.GetSourceFiles(sources);
           for (std::vector<cmSourceFile*>::const_iterator si=sources.begin();
                si!=sources.end(); si++)
             {

+ 2 - 1
Source/cmExtraEclipseCDT4Generator.cxx

@@ -559,7 +559,8 @@ void cmExtraEclipseCDT4Generator::CreateLinksForTargets(
           std::vector<cmSourceGroup> sourceGroups=makefile->GetSourceGroups();
           // get the files from the source lists then add them to the groups
           cmTarget* tgt = const_cast<cmTarget*>(&ti->second);
-          std::vector<cmSourceFile*>const & files = tgt->GetSourceFiles();
+          std::vector<cmSourceFile*> files;
+          tgt->GetSourceFiles(files);
           for(std::vector<cmSourceFile*>::const_iterator sfIt = files.begin();
               sfIt != files.end();
               sfIt++)

+ 2 - 1
Source/cmExtraSublimeTextGenerator.cxx

@@ -237,7 +237,8 @@ void cmExtraSublimeTextGenerator::
     {
       cmGeneratorTarget *gtgt = this->GlobalGenerator
                                     ->GetGeneratorTarget(target);
-      std::vector<cmSourceFile*> const& sourceFiles = target->GetSourceFiles();
+      std::vector<cmSourceFile*> sourceFiles;
+      target->GetSourceFiles(sourceFiles);
       std::vector<cmSourceFile*>::const_iterator sourceFilesEnd =
         sourceFiles.end();
       for (std::vector<cmSourceFile*>::const_iterator iter =

+ 2 - 2
Source/cmFLTKWrapUICommand.cxx

@@ -132,8 +132,8 @@ void cmFLTKWrapUICommand::FinalPass()
     cmSystemTools::Message(msg.c_str(),"Warning");
     return;
     }
-  std::vector<cmSourceFile*> const& srcs =
-    target->GetSourceFiles();
+  std::vector<cmSourceFile*> srcs;
+  target->GetSourceFiles(srcs);
   bool found = false;
   for (unsigned int i = 0; i < srcs.size(); ++i)
     {

+ 92 - 8
Source/cmGeneratorTarget.cxx

@@ -65,7 +65,8 @@ cmGeneratorTarget::GetSourceDepends(cmSourceFile* sf) const
 static void handleSystemIncludesDep(cmMakefile *mf, const std::string &name,
                                   const char *config, cmTarget *headTarget,
                                   cmGeneratorExpressionDAGChecker *dagChecker,
-                                  std::vector<std::string>& result)
+                                  std::vector<std::string>& result,
+                                  bool excludeImported)
 {
   cmTarget* depTgt = mf->FindTargetToUse(name.c_str());
 
@@ -85,7 +86,7 @@ static void handleSystemIncludesDep(cmMakefile *mf, const std::string &name,
                                       config, false, headTarget,
                                       depTgt, dagChecker), result);
     }
-  if (!depTgt->IsImported())
+  if (!depTgt->IsImported() || excludeImported)
     {
     return;
     }
@@ -101,6 +102,84 @@ static void handleSystemIncludesDep(cmMakefile *mf, const std::string &name,
     }
 }
 
+//----------------------------------------------------------------------------
+void
+cmGeneratorTarget::GetObjectSources(std::vector<cmSourceFile*> &objs) const
+{
+  objs = this->ObjectSources;
+}
+
+//----------------------------------------------------------------------------
+const std::string& cmGeneratorTarget::GetObjectName(cmSourceFile const* file)
+{
+  return this->Objects[file];
+}
+
+void cmGeneratorTarget::AddObject(cmSourceFile *sf, std::string const&name)
+{
+    this->Objects[sf] = name;
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::AddExplicitObjectName(cmSourceFile* sf)
+{
+  this->ExplicitObjectName.insert(sf);
+}
+
+//----------------------------------------------------------------------------
+bool cmGeneratorTarget::HasExplicitObjectName(cmSourceFile const* file) const
+{
+  std::set<cmSourceFile const*>::const_iterator it
+                                        = this->ExplicitObjectName.find(file);
+  return it != this->ExplicitObjectName.end();
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetResxSources(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->ResxSources;
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetIDLSources(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->IDLSources;
+}
+
+//----------------------------------------------------------------------------
+void
+cmGeneratorTarget::GetHeaderSources(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->HeaderSources;
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::GetExtraSources(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->ExtraSources;
+}
+
+//----------------------------------------------------------------------------
+void
+cmGeneratorTarget::GetCustomCommands(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->CustomCommands;
+}
+
+//----------------------------------------------------------------------------
+void
+cmGeneratorTarget::GetExpectedResxHeaders(std::set<std::string>& srcs) const
+{
+  srcs = this->ExpectedResxHeaders;
+}
+
+//----------------------------------------------------------------------------
+void
+cmGeneratorTarget::GetExternalObjects(std::vector<cmSourceFile*>& srcs) const
+{
+  srcs = this->ExternalObjects;
+}
+
 //----------------------------------------------------------------------------
 bool cmGeneratorTarget::IsSystemIncludeDirectory(const char *dir,
                                                  const char *config) const
@@ -130,6 +209,9 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const char *dir,
                                         this->GetName(),
                                         "SYSTEM_INCLUDE_DIRECTORIES", 0, 0);
 
+    bool excludeImported
+                = this->Target->GetPropertyAsBool("NO_SYSTEM_FROM_IMPORTED");
+
     std::vector<std::string> result;
     for (std::set<cmStdString>::const_iterator
         it = this->Target->GetSystemIncludeDirectories().begin();
@@ -156,7 +238,7 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const char *dir,
           }
 
         handleSystemIncludesDep(this->Makefile, *li, config, this->Target,
-                                &dagChecker, result);
+                                &dagChecker, result, excludeImported);
 
         std::vector<std::string> deps;
         tgt->GetTransitivePropertyLinkLibraries(config, this->Target, deps);
@@ -167,7 +249,7 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const char *dir,
           if (uniqueDeps.insert(*di).second)
             {
             handleSystemIncludesDep(this->Makefile, *di, config, this->Target,
-                                    &dagChecker, result);
+                                    &dagChecker, result, excludeImported);
             }
           }
         }
@@ -202,9 +284,9 @@ bool cmGeneratorTarget::GetPropertyAsBool(const char *prop) const
 }
 
 //----------------------------------------------------------------------------
-std::vector<cmSourceFile*> const& cmGeneratorTarget::GetSourceFiles() const
+void cmGeneratorTarget::GetSourceFiles(std::vector<cmSourceFile*> &files) const
 {
-  return this->Target->GetSourceFiles();
+  this->Target->GetSourceFiles(files);
 }
 
 //----------------------------------------------------------------------------
@@ -216,7 +298,8 @@ void cmGeneratorTarget::ClassifySources()
   bool isObjLib = targetType == cmTarget::OBJECT_LIBRARY;
 
   std::vector<cmSourceFile*> badObjLib;
-  std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
+  std::vector<cmSourceFile*> sources;
+  this->Target->GetSourceFiles(sources);
   for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
       si != sources.end(); ++si)
     {
@@ -414,7 +497,8 @@ cmTargetTraceDependencies
   this->CurrentEntry = 0;
 
   // Queue all the source files already specified for the target.
-  std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
+  std::vector<cmSourceFile*> sources;
+  this->Target->GetSourceFiles(sources);
   for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
       si != sources.end(); ++si)
     {

+ 29 - 18
Source/cmGeneratorTarget.h

@@ -30,36 +30,35 @@ public:
   const char *GetName() const;
   const char *GetProperty(const char *prop) const;
   bool GetPropertyAsBool(const char *prop) const;
-  std::vector<cmSourceFile*> const& GetSourceFiles() const;
+  void GetSourceFiles(std::vector<cmSourceFile*>& files) const;
+
+  void GetObjectSources(std::vector<cmSourceFile*> &) const;
+  const std::string& GetObjectName(cmSourceFile const* file);
+
+  void AddObject(cmSourceFile *sf, std::string const&name);
+  bool HasExplicitObjectName(cmSourceFile const* file) const;
+  void AddExplicitObjectName(cmSourceFile* sf);
+
+  void GetResxSources(std::vector<cmSourceFile*>&) const;
+  void GetIDLSources(std::vector<cmSourceFile*>&) const;
+  void GetExternalObjects(std::vector<cmSourceFile*>&) const;
+  void GetHeaderSources(std::vector<cmSourceFile*>&) const;
+  void GetExtraSources(std::vector<cmSourceFile*>&) const;
+  void GetCustomCommands(std::vector<cmSourceFile*>&) const;
+  void GetExpectedResxHeaders(std::set<std::string>&) const;
 
   cmTarget* Target;
   cmMakefile* Makefile;
   cmLocalGenerator* LocalGenerator;
   cmGlobalGenerator* GlobalGenerator;
 
-  /** Sources classified by purpose.  */
-  std::vector<cmSourceFile*> CustomCommands;
-  std::vector<cmSourceFile*> ExtraSources;
-  std::vector<cmSourceFile*> HeaderSources;
-  std::vector<cmSourceFile*> ObjectSources;
-  std::vector<cmSourceFile*> ExternalObjects;
-  std::vector<cmSourceFile*> IDLSources;
-  std::vector<cmSourceFile*> ResxSources;
-
   std::string ModuleDefinitionFile;
 
-  std::map<cmSourceFile const*, std::string> Objects;
-  std::set<cmSourceFile const*> ExplicitObjectName;
-
-  std::set<std::string> ExpectedResxHeaders;
-
   /** Full path with trailing slash to the top-level directory
       holding object files for this target.  Includes the build
       time config name placeholder if needed for the generator.  */
   std::string ObjectDirectory;
 
-  std::vector<cmTarget*> ObjectLibraries;
-
   void UseObjectLibraries(std::vector<std::string>& objs) const;
 
   void GetAppleArchs(const char* config,
@@ -89,11 +88,23 @@ public:
   /** Get sources that must be built before the given source.  */
   std::vector<cmSourceFile*> const* GetSourceDepends(cmSourceFile* sf) const;
 
+private:
+  friend class cmTargetTraceDependencies;
   struct SourceEntry { std::vector<cmSourceFile*> Depends; };
   typedef std::map<cmSourceFile*, SourceEntry> SourceEntriesType;
   SourceEntriesType SourceEntries;
 
-private:
+  std::vector<cmSourceFile*> CustomCommands;
+  std::vector<cmSourceFile*> ExtraSources;
+  std::vector<cmSourceFile*> HeaderSources;
+  std::vector<cmSourceFile*> ExternalObjects;
+  std::vector<cmSourceFile*> IDLSources;
+  std::vector<cmSourceFile*> ResxSources;
+  std::map<cmSourceFile const*, std::string> Objects;
+  std::set<cmSourceFile const*> ExplicitObjectName;
+  std::set<std::string> ExpectedResxHeaders;
+  std::vector<cmSourceFile*> ObjectSources;
+  std::vector<cmTarget*> ObjectLibraries;
   mutable std::map<std::string, std::vector<std::string> > SystemIncludesCache;
 
   cmGeneratorTarget(cmGeneratorTarget const&);

+ 2 - 1
Source/cmGlobalGenerator.cxx

@@ -2900,7 +2900,8 @@ void cmGlobalGenerator::WriteSummary(cmTarget* target)
 
     // List the source files with any per-source labels.
     fout << "# Source files and their labels\n";
-    std::vector<cmSourceFile*> const& sources = target->GetSourceFiles();
+    std::vector<cmSourceFile*> sources;
+    target->GetSourceFiles(sources);
     for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
         si != sources.end(); ++si)
       {

+ 2 - 1
Source/cmGlobalKdevelopGenerator.cxx

@@ -138,7 +138,8 @@ bool cmGlobalKdevelopGenerator
     for (cmTargets::iterator ti = targets.begin();
          ti != targets.end(); ti++)
       {
-      const std::vector<cmSourceFile*>& sources=ti->second.GetSourceFiles();
+      std::vector<cmSourceFile*> sources;
+      ti->second.GetSourceFiles(sources);
       for (std::vector<cmSourceFile*>::const_iterator si=sources.begin();
            si!=sources.end(); si++)
         {

+ 5 - 3
Source/cmGlobalNinjaGenerator.cxx

@@ -644,15 +644,17 @@ void cmGlobalNinjaGenerator::ComputeTargetObjects(cmGeneratorTarget* gt) const
   dir_max += "/";
   gt->ObjectDirectory = dir_max;
 
+  std::vector<cmSourceFile*> objectSources;
+  gt->GetObjectSources(objectSources);
   // Compute the name of each object file.
   for(std::vector<cmSourceFile*>::iterator
-        si = gt->ObjectSources.begin();
-      si != gt->ObjectSources.end(); ++si)
+        si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     cmSourceFile* sf = *si;
     std::string objectName = gt->LocalGenerator
       ->GetObjectFileNameWithoutTarget(*sf, dir_max);
-    gt->Objects[sf] = objectName;
+    gt->AddObject(sf, objectName);
     }
 }
 

+ 5 - 3
Source/cmGlobalUnixMakefileGenerator3.cxx

@@ -120,17 +120,19 @@ cmGlobalUnixMakefileGenerator3
   dir_max += "/";
   gt->ObjectDirectory = dir_max;
 
+  std::vector<cmSourceFile*> objectSources;
+  gt->GetObjectSources(objectSources);
   // Compute the name of each object file.
   for(std::vector<cmSourceFile*>::iterator
-        si = gt->ObjectSources.begin();
-      si != gt->ObjectSources.end(); ++si)
+        si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     cmSourceFile* sf = *si;
     bool hasSourceExtension = true;
     std::string objectName = gt->LocalGenerator
       ->GetObjectFileNameWithoutTarget(*sf, dir_max,
                                        &hasSourceExtension);
-    gt->Objects[sf] = objectName;
+    gt->AddObject(sf, objectName);
     lg->AddLocalObjectFile(target, sf, objectName, hasSourceExtension);
     }
 }

+ 8 - 6
Source/cmGlobalVisualStudioGenerator.cxx

@@ -129,9 +129,11 @@ cmGlobalVisualStudioGenerator
   // Count the number of object files with each name.  Note that
   // windows file names are not case sensitive.
   std::map<cmStdString, int> counts;
+  std::vector<cmSourceFile*> objectSources;
+  gt->GetObjectSources(objectSources);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = gt->ObjectSources.begin();
-      si != gt->ObjectSources.end(); ++si)
+        si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     cmSourceFile* sf = *si;
     std::string objectNameLower = cmSystemTools::LowerCase(
@@ -143,8 +145,8 @@ cmGlobalVisualStudioGenerator
   // For all source files producing duplicate names we need unique
   // object name computation.
   for(std::vector<cmSourceFile*>::const_iterator
-        si = gt->ObjectSources.begin();
-      si != gt->ObjectSources.end(); ++si)
+        si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     cmSourceFile* sf = *si;
     std::string objectName =
@@ -152,10 +154,10 @@ cmGlobalVisualStudioGenerator
     objectName += ".obj";
     if(counts[cmSystemTools::LowerCase(objectName)] > 1)
       {
-      gt->ExplicitObjectName.insert(sf);
+      gt->AddExplicitObjectName(sf);
       objectName = lg->GetObjectFileNameWithoutTarget(*sf, dir_max);
       }
-    gt->Objects[sf] = objectName;
+    gt->AddObject(sf, objectName);
     }
 
   std::string dir = gt->Makefile->GetCurrentOutputDirectory();

+ 13 - 7
Source/cmGlobalXCodeGenerator.cxx

@@ -991,7 +991,8 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
       }
 
     // organize the sources
-    std::vector<cmSourceFile*> classes = cmtarget.GetSourceFiles();
+    std::vector<cmSourceFile*> classes;
+    cmtarget.GetSourceFiles(classes);
     std::sort(classes.begin(), classes.end(), cmSourceFilePathCompare());
 
     std::vector<cmXCodeObject*> externalObjFiles;
@@ -1360,7 +1361,8 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(cmXCodeObject* buildPhases,
     postbuild.push_back(command);
     }
 
-  std::vector<cmSourceFile*>const &classes = cmtarget.GetSourceFiles();
+  std::vector<cmSourceFile*> classes;
+  cmtarget.GetSourceFiles(classes);
   // add all the sources
   std::vector<cmCustomCommand> commands;
   for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
@@ -2442,7 +2444,8 @@ cmGlobalXCodeGenerator::CreateUtilityTarget(cmTarget& cmtarget)
   // Add source files without build rules for editing convenience.
   if(cmtarget.GetType() == cmTarget::UTILITY)
     {
-    std::vector<cmSourceFile*> const& sources = cmtarget.GetSourceFiles();
+    std::vector<cmSourceFile*> sources;
+    cmtarget.GetSourceFiles(sources);
     for(std::vector<cmSourceFile*>::const_iterator i = sources.begin();
         i != sources.end(); ++i)
       {
@@ -2945,7 +2948,8 @@ void cmGlobalXCodeGenerator::CreateGroups(cmLocalGenerator* root,
         cmtarget.AddSourceFile(sf);
         }
 
-      std::vector<cmSourceFile*>  classes = cmtarget.GetSourceFiles();
+      std::vector<cmSourceFile*> classes;
+      cmtarget.GetSourceFiles(classes);
 
       // Put cmSourceFile instances in proper groups:
       for(std::vector<cmSourceFile*>::const_iterator s = classes.begin();
@@ -3925,9 +3929,11 @@ cmGlobalXCodeGenerator
   // to avoid exact duplicate file names. Note that Mac file names are not
   // typically case sensitive, hence the LowerCase.
   std::map<cmStdString, int> counts;
+  std::vector<cmSourceFile*> objectSources;
+  gt->GetObjectSources(objectSources);
   for(std::vector<cmSourceFile*>::const_iterator
-      si = gt->ObjectSources.begin();
-      si != gt->ObjectSources.end(); ++si)
+      si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     cmSourceFile* sf = *si;
     std::string objectName =
@@ -3941,7 +3947,7 @@ cmGlobalXCodeGenerator
       // TODO: emit warning about duplicate name?
       }
 
-    gt->Objects[sf] = objectName;
+    gt->AddObject(sf, objectName);
     }
 
   const char* configName = this->GetCMakeCFGIntDir();

+ 4 - 2
Source/cmLocalGenerator.cxx

@@ -657,7 +657,8 @@ void cmLocalGenerator::AddBuildTargetRule(const char* llang,
   cmStdString objs;
   std::vector<std::string> objVector;
   // Add all the sources outputs to the depends of the target
-  std::vector<cmSourceFile*> const& classes = target.GetSourceFiles();
+  std::vector<cmSourceFile*> classes;
+  target.GetSourceFiles(classes);
   for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
       i != classes.end(); ++i)
     {
@@ -1631,7 +1632,8 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
       if(this->Makefile->IsOn("WIN32") &&
          !(this->Makefile->IsOn("CYGWIN") || this->Makefile->IsOn("MINGW")))
         {
-        const std::vector<cmSourceFile*>& sources = target->GetSourceFiles();
+        std::vector<cmSourceFile*> sources;
+        target->GetSourceFiles(sources);
         for(std::vector<cmSourceFile*>::const_iterator i = sources.begin();
             i != sources.end(); ++i)
           {

+ 4 - 3
Source/cmLocalVisualStudio6Generator.cxx

@@ -314,7 +314,8 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
   std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
 
   // get the classes from the source lists then add them to the groups
-  std::vector<cmSourceFile*> const & classes = target.GetSourceFiles();
+  std::vector<cmSourceFile*> classes;
+  target.GetSourceFiles(classes);
 
   // now all of the source files have been properly assigned to the target
   // now stick them into source groups using the reg expressions
@@ -401,9 +402,9 @@ void cmLocalVisualStudio6Generator
     std::string compileFlags;
     std::vector<std::string> depends;
     std::string objectNameDir;
-    if(gt->ExplicitObjectName.find(*sf) != gt->ExplicitObjectName.end())
+    if(gt->HasExplicitObjectName(*sf))
       {
-      objectNameDir = cmSystemTools::GetFilenamePath(gt->Objects[*sf]);
+      objectNameDir = cmSystemTools::GetFilenamePath(gt->GetObjectName(*sf));
       }
 
     // Add per-source file flags.

+ 4 - 3
Source/cmLocalVisualStudio7Generator.cxx

@@ -1381,7 +1381,8 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
 
   // get the classes from the source lists then add them to the groups
   this->ModuleDefinitionFile = "";
-  std::vector<cmSourceFile*>const & classes = target.GetSourceFiles();
+  std::vector<cmSourceFile*> classes;
+  target.GetSourceFiles(classes);
   for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
       i != classes.end(); i++)
     {
@@ -1468,9 +1469,9 @@ cmLocalVisualStudio7GeneratorFCInfo
   cmGeneratorTarget* gt =
     lg->GetGlobalGenerator()->GetGeneratorTarget(&target);
   std::string objectName;
-  if(gt->ExplicitObjectName.find(&sf) != gt->ExplicitObjectName.end())
+  if(gt->HasExplicitObjectName(&sf))
     {
-    objectName = gt->Objects[&sf];
+    objectName = gt->GetObjectName(&sf);
     }
 
   // Compute per-source, per-config information.

+ 21 - 11
Source/cmMakefileTargetGenerator.cxx

@@ -151,9 +151,11 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules()
 
   // First generate the object rule files.  Save a list of all object
   // files for this target.
+  std::vector<cmSourceFile*> customCommands;
+  this->GeneratorTarget->GetCustomCommands(customCommands);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->CustomCommands.begin();
-      si != this->GeneratorTarget->CustomCommands.end(); ++si)
+        si = customCommands.begin();
+      si != customCommands.end(); ++si)
     {
     cmCustomCommand const* cc = (*si)->GetCustomCommand();
     this->GenerateCustomRuleFile(*cc);
@@ -170,21 +172,28 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules()
         }
       }
     }
+  std::vector<cmSourceFile*> headerSources;
+  this->GeneratorTarget->GetHeaderSources(headerSources);
   this->OSXBundleGenerator->GenerateMacOSXContentStatements(
-    this->GeneratorTarget->HeaderSources,
+    headerSources,
     this->MacOSXContentGenerator);
+  std::vector<cmSourceFile*> extraSources;
+  this->GeneratorTarget->GetExtraSources(extraSources);
   this->OSXBundleGenerator->GenerateMacOSXContentStatements(
-    this->GeneratorTarget->ExtraSources,
+    extraSources,
     this->MacOSXContentGenerator);
+  std::vector<cmSourceFile*> externalObjects;
+  this->GeneratorTarget->GetExternalObjects(externalObjects);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->ExternalObjects.begin();
-      si != this->GeneratorTarget->ExternalObjects.end(); ++si)
+        si = externalObjects.begin();
+      si != externalObjects.end(); ++si)
     {
     this->ExternalObjects.push_back((*si)->GetFullPath());
     }
+  std::vector<cmSourceFile*> objectSources;
+  this->GeneratorTarget->GetObjectSources(objectSources);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->ObjectSources.begin();
-      si != this->GeneratorTarget->ObjectSources.end(); ++si)
+        si = objectSources.begin(); si != objectSources.end(); ++si)
     {
     // Generate this object file's rule file.
     this->WriteObjectRuleFiles(**si);
@@ -421,7 +430,8 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(cmSourceFile& source)
     }
 
   // Get the full path name of the object file.
-  std::string const& objectName = this->GeneratorTarget->Objects[&source];
+  std::string const& objectName = this->GeneratorTarget
+                                      ->GetObjectName(&source);
   std::string obj = this->LocalGenerator->GetTargetDirectory(*this->Target);
   obj += "/";
   obj += objectName;
@@ -1142,8 +1152,8 @@ cmMakefileTargetGenerator
 ::DriveCustomCommands(std::vector<std::string>& depends)
 {
   // Depend on all custom command outputs.
-  const std::vector<cmSourceFile*>& sources =
-    this->Target->GetSourceFiles();
+  std::vector<cmSourceFile*> sources;
+  this->Target->GetSourceFiles(sources);
   for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
       source != sources.end(); ++source)
     {

+ 23 - 11
Source/cmNinjaTargetGenerator.cxx

@@ -276,7 +276,8 @@ cmNinjaTargetGenerator
   std::string path = this->LocalGenerator->GetHomeRelativeOutputPath();
   if(!path.empty())
     path += "/";
-  std::string const& objectName = this->GeneratorTarget->Objects[source];
+  std::string const& objectName = this->GeneratorTarget
+                                      ->GetObjectName(source);
   path += this->LocalGenerator->GetTargetDirectory(*this->Target);
   path += "/";
   path += objectName;
@@ -458,28 +459,37 @@ cmNinjaTargetGenerator
     << this->GetTargetName()
     << "\n\n";
 
+  std::vector<cmSourceFile*> customCommands;
+  this->GeneratorTarget->GetCustomCommands(customCommands);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->CustomCommands.begin();
-      si != this->GeneratorTarget->CustomCommands.end(); ++si)
+        si = customCommands.begin();
+      si != customCommands.end(); ++si)
      {
      cmCustomCommand const* cc = (*si)->GetCustomCommand();
      this->GetLocalGenerator()->AddCustomCommandTarget(cc, this->GetTarget());
      }
+  std::vector<cmSourceFile*> headerSources;
+  this->GeneratorTarget->GetHeaderSources(headerSources);
   this->OSXBundleGenerator->GenerateMacOSXContentStatements(
-    this->GeneratorTarget->HeaderSources,
+    headerSources,
     this->MacOSXContentGenerator);
+  std::vector<cmSourceFile*> extraSources;
+  this->GeneratorTarget->GetExtraSources(extraSources);
   this->OSXBundleGenerator->GenerateMacOSXContentStatements(
-    this->GeneratorTarget->ExtraSources,
+    extraSources,
     this->MacOSXContentGenerator);
+  std::vector<cmSourceFile*> externalObjects;
+  this->GeneratorTarget->GetExternalObjects(externalObjects);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->ExternalObjects.begin();
-      si != this->GeneratorTarget->ExternalObjects.end(); ++si)
+        si = externalObjects.begin();
+      si != externalObjects.end(); ++si)
     {
     this->Objects.push_back(this->GetSourceFilePath(*si));
     }
+  std::vector<cmSourceFile*> objectSources;
+  this->GeneratorTarget->GetObjectSources(objectSources);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->ObjectSources.begin();
-      si != this->GeneratorTarget->ObjectSources.end(); ++si)
+        si = objectSources.begin(); si != objectSources.end(); ++si)
     {
     this->WriteObjectBuildStatement(*si);
     }
@@ -539,9 +549,11 @@ cmNinjaTargetGenerator
   }
 
   // Add order-only dependencies on custom command outputs.
+  std::vector<cmSourceFile*> customCommands;
+  this->GeneratorTarget->GetCustomCommands(customCommands);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->CustomCommands.begin();
-      si != this->GeneratorTarget->CustomCommands.end(); ++si)
+        si = customCommands.begin();
+      si != customCommands.end(); ++si)
     {
     cmCustomCommand const* cc = (*si)->GetCustomCommand();
     const std::vector<std::string>& ccoutputs = cc->GetOutputs();

+ 2 - 2
Source/cmNinjaUtilityTargetGenerator.cxx

@@ -42,8 +42,8 @@ void cmNinjaUtilityTargetGenerator::Generate()
     }
   }
 
-  const std::vector<cmSourceFile*>& sources =
-    this->GetTarget()->GetSourceFiles();
+  std::vector<cmSourceFile*> sources;
+  this->GetTarget()->GetSourceFiles(sources);
   for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
       source != sources.end(); ++source)
     {

+ 8 - 4
Source/cmQtAutoGenerators.cxx

@@ -451,7 +451,8 @@ void cmQtAutoGenerators::SetupAutoMocTarget(cmTarget const* target,
   const char* sepFiles = "";
   const char* sepHeaders = "";
 
-  const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
+  std::vector<cmSourceFile*> srcFiles;
+  target->GetSourceFiles(srcFiles);
 
   std::string skip_moc;
   const char *sep = "";
@@ -643,7 +644,8 @@ void cmQtAutoGenerators::SetupAutoUicTarget(cmTarget const* target,
   const char *qtUic = makefile->GetSafeDefinition("QT_UIC_EXECUTABLE");
   makefile->AddDefinition("_qt_uic_executable", qtUic);
 
-  const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
+  std::vector<cmSourceFile*> srcFiles;
+  target->GetSourceFiles(srcFiles);
 
   std::string skip_uic;
   const char *sep = "";
@@ -809,7 +811,8 @@ void cmQtAutoGenerators::InitializeAutoRccTarget(cmTarget* target)
 {
   cmMakefile *makefile = target->GetMakefile();
 
-  const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
+  std::vector<cmSourceFile*> srcFiles;
+  target->GetSourceFiles(srcFiles);
 
   std::vector<cmSourceFile*> newFiles;
 
@@ -855,7 +858,8 @@ void cmQtAutoGenerators::SetupAutoRccTarget(cmTarget const* target)
   const char* sepRccFiles = "";
   cmMakefile *makefile = target->GetMakefile();
 
-  const std::vector<cmSourceFile*>& srcFiles = target->GetSourceFiles();
+  std::vector<cmSourceFile*> srcFiles;
+  target->GetSourceFiles(srcFiles);
 
   std::string rccFileFiles;
   std::string rccFileOptions;

+ 4 - 3
Source/cmTarget.cxx

@@ -530,9 +530,9 @@ bool cmTarget::FindSourceFiles()
 }
 
 //----------------------------------------------------------------------------
-std::vector<cmSourceFile*> const& cmTarget::GetSourceFiles() const
+void cmTarget::GetSourceFiles(std::vector<cmSourceFile*> &files) const
 {
-  return this->SourceFiles;
+  files = this->SourceFiles;
 }
 
 //----------------------------------------------------------------------------
@@ -673,7 +673,8 @@ void cmTarget::ConstructSourceFileFlags() const
 
   // Handle the MACOSX_PACKAGE_LOCATION property on source files that
   // were not listed in one of the other lists.
-  std::vector<cmSourceFile*> const& sources = this->GetSourceFiles();
+  std::vector<cmSourceFile*> sources;
+  this->GetSourceFiles(sources);
   for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
       si != sources.end(); ++si)
     {

+ 1 - 1
Source/cmTarget.h

@@ -132,7 +132,7 @@ public:
   /**
    * Get the list of the source files used by this target
    */
-  std::vector<cmSourceFile*> const& GetSourceFiles() const;
+  void GetSourceFiles(std::vector<cmSourceFile*> &files) const;
   void AddSourceFile(cmSourceFile* sf);
   std::vector<std::string> const& GetObjectLibraries() const
     {

+ 36 - 22
Source/cmVisualStudio10TargetGenerator.cxx

@@ -376,8 +376,8 @@ void cmVisualStudio10TargetGenerator::WriteDotNetReferences()
 
 void cmVisualStudio10TargetGenerator::WriteEmbeddedResourceGroup()
 {
-  std::vector<cmSourceFile*> const& resxObjs =
-    this->GeneratorTarget->ResxSources;
+  std::vector<cmSourceFile*> resxObjs;
+    this->GeneratorTarget->GetResxSources(resxObjs);
   if(!resxObjs.empty())
     {
     this->WriteString("<ItemGroup>\n", 1);
@@ -550,9 +550,11 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
 void cmVisualStudio10TargetGenerator::WriteCustomCommands()
 {
   this->SourcesVisited.clear();
+  std::vector<cmSourceFile*> customCommands;
+  this->GeneratorTarget->GetCustomCommands(customCommands);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->CustomCommands.begin();
-      si != this->GeneratorTarget->CustomCommands.end(); ++si)
+        si = customCommands.begin();
+      si != customCommands.end(); ++si)
     {
     this->WriteCustomCommand(*si);
     }
@@ -697,7 +699,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
   // collect up group information
   std::vector<cmSourceGroup> sourceGroups =
     this->Makefile->GetSourceGroups();
-  std::vector<cmSourceFile*>  classes = this->Target->GetSourceFiles();
+  std::vector<cmSourceFile*> classes;
+  this->Target->GetSourceFiles(classes);
 
   std::set<cmSourceGroup*> groupsUsed;
   for(std::vector<cmSourceFile*>::const_iterator s = classes.begin();
@@ -740,8 +743,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
     this->WriteGroupSources(ti->first.c_str(), ti->second, sourceGroups);
     }
 
-  std::vector<cmSourceFile*> const& resxObjs =
-    this->GeneratorTarget->ResxSources;
+  std::vector<cmSourceFile*> resxObjs;
+    this->GeneratorTarget->GetResxSources(resxObjs);
   if(!resxObjs.empty())
     {
     this->WriteString("<ItemGroup>\n", 1);
@@ -813,7 +816,7 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
     this->WriteString("</Filter>\n", 2);
     }
 
-  if(!this->GeneratorTarget->ResxSources.empty())
+  if(!resxObjs.empty())
     {
     this->WriteString("<Filter Include=\"Resource Files\">\n", 2);
     std::string guidName = "SG_Filter_Resource Files";
@@ -996,12 +999,18 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
     }
   this->WriteString("<ItemGroup>\n", 1);
 
-  this->WriteSources("ClInclude", this->GeneratorTarget->HeaderSources);
-  this->WriteSources("Midl", this->GeneratorTarget->IDLSources);
+  std::vector<cmSourceFile*> headerSources;
+  this->GeneratorTarget->GetHeaderSources(headerSources);
+  this->WriteSources("ClInclude", headerSources);
+  std::vector<cmSourceFile*> idlSources;
+  this->GeneratorTarget->GetIDLSources(idlSources);
+  this->WriteSources("Midl", idlSources);
 
+  std::vector<cmSourceFile*> objectSources;
+  this->GeneratorTarget->GetObjectSources(objectSources);
   for(std::vector<cmSourceFile*>::const_iterator
-        si = this->GeneratorTarget->ObjectSources.begin();
-      si != this->GeneratorTarget->ObjectSources.end(); ++si)
+        si = objectSources.begin();
+      si != objectSources.end(); ++si)
     {
     const char* lang = (*si)->GetLanguage();
     const char* tool = NULL;
@@ -1038,19 +1047,21 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
       }
     }
 
+  std::vector<cmSourceFile*> externalObjects;
+  this->GeneratorTarget->GetExternalObjects(externalObjects);
   if(this->LocalGenerator->GetVersion() > cmLocalVisualStudioGenerator::VS10)
     {
     // For VS >= 11 we use LinkObjects to avoid linking custom command
     // outputs.  Use Object for all external objects, generated or not.
-    this->WriteSources("Object", this->GeneratorTarget->ExternalObjects);
+    this->WriteSources("Object", externalObjects);
     }
   else
     {
     // If an object file is generated in this target, then vs10 will use
     // it in the build, and we have to list it as None instead of Object.
     for(std::vector<cmSourceFile*>::const_iterator
-          si = this->GeneratorTarget->ExternalObjects.begin();
-        si != this->GeneratorTarget->ExternalObjects.end(); ++si)
+          si = externalObjects.begin();
+        si != externalObjects.end(); ++si)
       {
       std::vector<cmSourceFile*> const* d =
                                 this->GeneratorTarget->GetSourceDepends(*si);
@@ -1058,7 +1069,9 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
       }
     }
 
-  this->WriteSources("None", this->GeneratorTarget->ExtraSources);
+  std::vector<cmSourceFile*> extraSources;
+  this->GeneratorTarget->GetExtraSources(extraSources);
+  this->WriteSources("None", extraSources);
 
   // Add object library contents as external objects.
   std::vector<std::string> objs;
@@ -1081,10 +1094,9 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
   cmSourceFile& sf = *source;
 
   std::string objectName;
-  if(this->GeneratorTarget->ExplicitObjectName.find(&sf)
-     != this->GeneratorTarget->ExplicitObjectName.end())
+  if(this->GeneratorTarget->HasExplicitObjectName(&sf))
     {
-    objectName = this->GeneratorTarget->Objects[&sf];
+    objectName = this->GeneratorTarget->GetObjectName(&sf);
     }
   std::string flags;
   std::string defines;
@@ -1884,8 +1896,10 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
 bool cmVisualStudio10TargetGenerator::
   IsResxHeader(const std::string& headerFile)
 {
-  std::set<std::string>::iterator it =
-      this->GeneratorTarget->ExpectedResxHeaders.find(headerFile);
+  std::set<std::string> expectedResxHeaders;
+  this->GeneratorTarget->GetExpectedResxHeaders(expectedResxHeaders);
 
-  return it != this->GeneratorTarget->ExpectedResxHeaders.end();
+  std::set<std::string>::const_iterator it =
+                                        expectedResxHeaders.find(headerFile);
+  return it != expectedResxHeaders.end();
 }