|  | @@ -368,14 +368,13 @@ cmLocalGenerator* cmGlobalXCodeGenerator::CreateLocalGenerator(cmMakefile* mf)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmGlobalXCodeGenerator::AddExtraIDETargets()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  std::map<std::string, std::vector<cmLocalGenerator*>>::iterator it;
 | 
	
		
			
				|  |  |    // make sure extra targets are added before calling
 | 
	
		
			
				|  |  |    // the parent generate which will call trace depends
 | 
	
		
			
				|  |  | -  for (it = this->ProjectMap.begin(); it != this->ProjectMap.end(); ++it) {
 | 
	
		
			
				|  |  | -    cmLocalGenerator* root = it->second[0];
 | 
	
		
			
				|  |  | +  for (auto keyVal : this->ProjectMap) {
 | 
	
		
			
				|  |  | +    cmLocalGenerator* root = keyVal.second[0];
 | 
	
		
			
				|  |  |      this->SetGenerationRoot(root);
 | 
	
		
			
				|  |  |      // add ALL_BUILD, INSTALL, etc
 | 
	
		
			
				|  |  | -    this->AddExtraTargets(root, it->second);
 | 
	
		
			
				|  |  | +    this->AddExtraTargets(root, keyVal.second);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -385,9 +384,8 @@ void cmGlobalXCodeGenerator::Generate()
 | 
	
		
			
				|  |  |    if (cmSystemTools::GetErrorOccuredFlag()) {
 | 
	
		
			
				|  |  |      return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  std::map<std::string, std::vector<cmLocalGenerator*>>::iterator it;
 | 
	
		
			
				|  |  | -  for (it = this->ProjectMap.begin(); it != this->ProjectMap.end(); ++it) {
 | 
	
		
			
				|  |  | -    cmLocalGenerator* root = it->second[0];
 | 
	
		
			
				|  |  | +  for (auto keyVal : this->ProjectMap) {
 | 
	
		
			
				|  |  | +    cmLocalGenerator* root = keyVal.second[0];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      bool generateTopLevelProjectOnly =
 | 
	
		
			
				|  |  |        root->GetMakefile()->IsOn("CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT_ONLY");
 | 
	
	
		
			
				|  | @@ -401,7 +399,7 @@ void cmGlobalXCodeGenerator::Generate()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      this->SetGenerationRoot(root);
 | 
	
		
			
				|  |  |      // now create the project
 | 
	
		
			
				|  |  | -    this->OutputXCodeProject(root, it->second);
 | 
	
		
			
				|  |  | +    this->OutputXCodeProject(root, keyVal.second);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -481,8 +479,7 @@ void cmGlobalXCodeGenerator::AddExtraTargets(
 | 
	
		
			
				|  |  |        continue;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    const std::vector<cmGeneratorTarget*>& tgts = gen->GetGeneratorTargets();
 | 
	
		
			
				|  |  | -    for (auto target : tgts) {
 | 
	
		
			
				|  |  | +    for (auto target : gen->GetGeneratorTargets()) {
 | 
	
		
			
				|  |  |        if (target->GetType() == cmStateEnums::GLOBAL_TARGET) {
 | 
	
		
			
				|  |  |          continue;
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -549,10 +546,9 @@ void cmGlobalXCodeGenerator::CreateReRunCMakeFile(
 | 
	
		
			
				|  |  |    makefileStream << "space:= $(empty) $(empty)\n";
 | 
	
		
			
				|  |  |    makefileStream << "spaceplus:= $(empty)\\ $(empty)\n\n";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  for (std::vector<std::string>::const_iterator i = lfiles.begin();
 | 
	
		
			
				|  |  | -       i != lfiles.end(); ++i) {
 | 
	
		
			
				|  |  | +  for (const auto& lfile : lfiles) {
 | 
	
		
			
				|  |  |      makefileStream << "TARGETS += $(subst $(space),$(spaceplus),$(wildcard "
 | 
	
		
			
				|  |  | -                   << this->ConvertToRelativeForMake(i->c_str()) << "))\n";
 | 
	
		
			
				|  |  | +                   << this->ConvertToRelativeForMake(lfile.c_str()) << "))\n";
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::string checkCache = root->GetBinaryDirectory();
 | 
	
	
		
			
				|  | @@ -761,9 +757,8 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateXCodeSourceFile(
 | 
	
		
			
				|  |  |      cmSystemTools::ExpandListArgument(extraFileAttributes, attributes);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Store the attributes.
 | 
	
		
			
				|  |  | -    for (std::vector<std::string>::const_iterator ai = attributes.begin();
 | 
	
		
			
				|  |  | -         ai != attributes.end(); ++ai) {
 | 
	
		
			
				|  |  | -      attrs->AddObject(this->CreateString(*ai));
 | 
	
		
			
				|  |  | +    for (const auto& attribute : attributes) {
 | 
	
		
			
				|  |  | +      attrs->AddObject(this->CreateString(attribute));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -958,12 +953,10 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |    cmLocalGenerator* gen, std::vector<cmXCodeObject*>& targets)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    this->SetCurrentLocalGenerator(gen);
 | 
	
		
			
				|  |  | -  const std::vector<cmGeneratorTarget*>& tgts =
 | 
	
		
			
				|  |  | -    this->CurrentLocalGenerator->GetGeneratorTargets();
 | 
	
		
			
				|  |  |    typedef std::map<std::string, cmGeneratorTarget*, cmCompareTargets>
 | 
	
		
			
				|  |  |      cmSortedTargets;
 | 
	
		
			
				|  |  |    cmSortedTargets sortedTargets;
 | 
	
		
			
				|  |  | -  for (auto tgt : tgts) {
 | 
	
		
			
				|  |  | +  for (auto tgt : this->CurrentLocalGenerator->GetGeneratorTargets()) {
 | 
	
		
			
				|  |  |      sortedTargets[tgt->GetName()] = tgt;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    for (auto& sortedTarget : sortedTargets) {
 | 
	
	
		
			
				|  | @@ -1010,21 +1003,20 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |      std::vector<cmXCodeObject*> headerFiles;
 | 
	
		
			
				|  |  |      std::vector<cmXCodeObject*> resourceFiles;
 | 
	
		
			
				|  |  |      std::vector<cmXCodeObject*> sourceFiles;
 | 
	
		
			
				|  |  | -    for (std::vector<cmSourceFile*>::const_iterator i = classes.begin();
 | 
	
		
			
				|  |  | -         i != classes.end(); ++i) {
 | 
	
		
			
				|  |  | -      cmXCodeObject* xsf =
 | 
	
		
			
				|  |  | -        this->CreateXCodeSourceFile(this->CurrentLocalGenerator, *i, gtgt);
 | 
	
		
			
				|  |  | +    for (auto sourceFile : classes) {
 | 
	
		
			
				|  |  | +      cmXCodeObject* xsf = this->CreateXCodeSourceFile(
 | 
	
		
			
				|  |  | +        this->CurrentLocalGenerator, sourceFile, gtgt);
 | 
	
		
			
				|  |  |        cmXCodeObject* fr = xsf->GetObject("fileRef");
 | 
	
		
			
				|  |  |        cmXCodeObject* filetype = fr->GetObject()->GetObject("explicitFileType");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        cmGeneratorTarget::SourceFileFlags tsFlags =
 | 
	
		
			
				|  |  | -        gtgt->GetTargetSourceFileFlags(*i);
 | 
	
		
			
				|  |  | +        gtgt->GetTargetSourceFileFlags(sourceFile);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (filetype && filetype->GetString() == "compiled.mach-o.objfile") {
 | 
	
		
			
				|  |  | -        if ((*i)->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  | +        if (sourceFile->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  |            externalObjFiles.push_back(xsf);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -      } else if (this->IsHeaderFile(*i) ||
 | 
	
		
			
				|  |  | +      } else if (this->IsHeaderFile(sourceFile) ||
 | 
	
		
			
				|  |  |                   (tsFlags.Type ==
 | 
	
		
			
				|  |  |                    cmGeneratorTarget::SourceFileTypePrivateHeader) ||
 | 
	
		
			
				|  |  |                   (tsFlags.Type ==
 | 
	
	
		
			
				|  | @@ -1032,12 +1024,13 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |          headerFiles.push_back(xsf);
 | 
	
		
			
				|  |  |        } else if (tsFlags.Type == cmGeneratorTarget::SourceFileTypeResource) {
 | 
	
		
			
				|  |  |          resourceFiles.push_back(xsf);
 | 
	
		
			
				|  |  | -      } else if (!(*i)->GetPropertyAsBool("HEADER_FILE_ONLY")) {
 | 
	
		
			
				|  |  | +      } else if (!sourceFile->GetPropertyAsBool("HEADER_FILE_ONLY")) {
 | 
	
		
			
				|  |  |          // Include this file in the build if it has a known language
 | 
	
		
			
				|  |  |          // and has not been listed as an ignored extension for this
 | 
	
		
			
				|  |  |          // generator.
 | 
	
		
			
				|  |  | -        if (!this->CurrentLocalGenerator->GetSourceFileLanguage(**i).empty() &&
 | 
	
		
			
				|  |  | -            !this->IgnoreFile((*i)->GetExtension().c_str())) {
 | 
	
		
			
				|  |  | +        if (!this->CurrentLocalGenerator->GetSourceFileLanguage(*sourceFile)
 | 
	
		
			
				|  |  | +               .empty() &&
 | 
	
		
			
				|  |  | +            !this->IgnoreFile(sourceFile->GetExtension().c_str())) {
 | 
	
		
			
				|  |  |            sourceFiles.push_back(xsf);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
	
		
			
				|  | @@ -1049,12 +1042,11 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |        // within the target.)
 | 
	
		
			
				|  |  |        std::vector<cmSourceFile const*> objs;
 | 
	
		
			
				|  |  |        gtgt->GetExternalObjects(objs, "");
 | 
	
		
			
				|  |  | -      for (std::vector<cmSourceFile const*>::const_iterator oi = objs.begin();
 | 
	
		
			
				|  |  | -           oi != objs.end(); ++oi) {
 | 
	
		
			
				|  |  | -        if ((*oi)->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  | +      for (auto sourceFile : objs) {
 | 
	
		
			
				|  |  | +        if (sourceFile->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  |            continue;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        std::string const& obj = (*oi)->GetFullPath();
 | 
	
		
			
				|  |  | +        std::string const& obj = sourceFile->GetFullPath();
 | 
	
		
			
				|  |  |          cmXCodeObject* xsf =
 | 
	
		
			
				|  |  |            this->CreateXCodeSourceFileFromPath(obj, gtgt, "", nullptr);
 | 
	
		
			
				|  |  |          externalObjFiles.push_back(xsf);
 | 
	
	
		
			
				|  | @@ -1127,16 +1119,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |        typedef std::map<std::string, std::vector<cmSourceFile*>>
 | 
	
		
			
				|  |  |          mapOfVectorOfSourceFiles;
 | 
	
		
			
				|  |  |        mapOfVectorOfSourceFiles bundleFiles;
 | 
	
		
			
				|  |  | -      for (std::vector<cmSourceFile*>::const_iterator i = classes.begin();
 | 
	
		
			
				|  |  | -           i != classes.end(); ++i) {
 | 
	
		
			
				|  |  | +      for (auto sourceFile : classes) {
 | 
	
		
			
				|  |  |          cmGeneratorTarget::SourceFileFlags tsFlags =
 | 
	
		
			
				|  |  | -          gtgt->GetTargetSourceFileFlags(*i);
 | 
	
		
			
				|  |  | +          gtgt->GetTargetSourceFileFlags(sourceFile);
 | 
	
		
			
				|  |  |          if (tsFlags.Type == cmGeneratorTarget::SourceFileTypeMacContent) {
 | 
	
		
			
				|  |  | -          bundleFiles[tsFlags.MacFolder].push_back(*i);
 | 
	
		
			
				|  |  | +          bundleFiles[tsFlags.MacFolder].push_back(sourceFile);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      mapOfVectorOfSourceFiles::iterator mit;
 | 
	
		
			
				|  |  | -      for (mit = bundleFiles.begin(); mit != bundleFiles.end(); ++mit) {
 | 
	
		
			
				|  |  | +      for (auto keySources : bundleFiles) {
 | 
	
		
			
				|  |  |          cmXCodeObject* copyFilesBuildPhase =
 | 
	
		
			
				|  |  |            this->CreateObject(cmXCodeObject::PBXCopyFilesBuildPhase);
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->SetComment("Copy files");
 | 
	
	
		
			
				|  | @@ -1147,13 +1137,13 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |          std::ostringstream ostr;
 | 
	
		
			
				|  |  |          if (gtgt->IsFrameworkOnApple()) {
 | 
	
		
			
				|  |  |            // dstPath in frameworks is relative to Versions/<version>
 | 
	
		
			
				|  |  | -          ostr << mit->first;
 | 
	
		
			
				|  |  | -        } else if (mit->first != "MacOS") {
 | 
	
		
			
				|  |  | +          ostr << keySources.first;
 | 
	
		
			
				|  |  | +        } else if (keySources.first != "MacOS") {
 | 
	
		
			
				|  |  |            if (gtgt->Target->GetMakefile()->PlatformIsAppleIos()) {
 | 
	
		
			
				|  |  | -            ostr << mit->first;
 | 
	
		
			
				|  |  | +            ostr << keySources.first;
 | 
	
		
			
				|  |  |            } else {
 | 
	
		
			
				|  |  |              // dstPath in bundles is relative to Contents/MacOS
 | 
	
		
			
				|  |  | -            ostr << "../" << mit->first;
 | 
	
		
			
				|  |  | +            ostr << "../" << keySources.first;
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->AddAttribute("dstPath",
 | 
	
	
		
			
				|  | @@ -1162,10 +1152,9 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |                                            this->CreateString("0"));
 | 
	
		
			
				|  |  |          buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->AddAttribute("files", buildFiles);
 | 
	
		
			
				|  |  | -        std::vector<cmSourceFile*>::iterator sfIt;
 | 
	
		
			
				|  |  | -        for (sfIt = mit->second.begin(); sfIt != mit->second.end(); ++sfIt) {
 | 
	
		
			
				|  |  | +        for (auto sourceFile : keySources.second) {
 | 
	
		
			
				|  |  |            cmXCodeObject* xsf = this->CreateXCodeSourceFile(
 | 
	
		
			
				|  |  | -            this->CurrentLocalGenerator, *sfIt, gtgt);
 | 
	
		
			
				|  |  | +            this->CurrentLocalGenerator, sourceFile, gtgt);
 | 
	
		
			
				|  |  |            buildFiles->AddObject(xsf);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          contentBuildPhases.push_back(copyFilesBuildPhase);
 | 
	
	
		
			
				|  | @@ -1178,16 +1167,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |        typedef std::map<std::string, std::vector<cmSourceFile*>>
 | 
	
		
			
				|  |  |          mapOfVectorOfSourceFiles;
 | 
	
		
			
				|  |  |        mapOfVectorOfSourceFiles bundleFiles;
 | 
	
		
			
				|  |  | -      for (std::vector<cmSourceFile*>::const_iterator i = classes.begin();
 | 
	
		
			
				|  |  | -           i != classes.end(); ++i) {
 | 
	
		
			
				|  |  | +      for (auto sourceFile : classes) {
 | 
	
		
			
				|  |  |          cmGeneratorTarget::SourceFileFlags tsFlags =
 | 
	
		
			
				|  |  | -          gtgt->GetTargetSourceFileFlags(*i);
 | 
	
		
			
				|  |  | +          gtgt->GetTargetSourceFileFlags(sourceFile);
 | 
	
		
			
				|  |  |          if (tsFlags.Type == cmGeneratorTarget::SourceFileTypeDeepResource) {
 | 
	
		
			
				|  |  | -          bundleFiles[tsFlags.MacFolder].push_back(*i);
 | 
	
		
			
				|  |  | +          bundleFiles[tsFlags.MacFolder].push_back(sourceFile);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      mapOfVectorOfSourceFiles::iterator mit;
 | 
	
		
			
				|  |  | -      for (mit = bundleFiles.begin(); mit != bundleFiles.end(); ++mit) {
 | 
	
		
			
				|  |  | +      for (auto keySources : bundleFiles) {
 | 
	
		
			
				|  |  |          cmXCodeObject* copyFilesBuildPhase =
 | 
	
		
			
				|  |  |            this->CreateObject(cmXCodeObject::PBXCopyFilesBuildPhase);
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->SetComment("Copy files");
 | 
	
	
		
			
				|  | @@ -1195,16 +1182,15 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |                                            this->CreateString("2147483647"));
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->AddAttribute("dstSubfolderSpec",
 | 
	
		
			
				|  |  |                                            this->CreateString("7"));
 | 
	
		
			
				|  |  | -        copyFilesBuildPhase->AddAttribute("dstPath",
 | 
	
		
			
				|  |  | -                                          this->CreateString(mit->first));
 | 
	
		
			
				|  |  | +        copyFilesBuildPhase->AddAttribute(
 | 
	
		
			
				|  |  | +          "dstPath", this->CreateString(keySources.first));
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->AddAttribute("runOnlyForDeploymentPostprocessing",
 | 
	
		
			
				|  |  |                                            this->CreateString("0"));
 | 
	
		
			
				|  |  |          buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
 | 
	
		
			
				|  |  |          copyFilesBuildPhase->AddAttribute("files", buildFiles);
 | 
	
		
			
				|  |  | -        std::vector<cmSourceFile*>::iterator sfIt;
 | 
	
		
			
				|  |  | -        for (sfIt = mit->second.begin(); sfIt != mit->second.end(); ++sfIt) {
 | 
	
		
			
				|  |  | +        for (auto sourceFile : keySources.second) {
 | 
	
		
			
				|  |  |            cmXCodeObject* xsf = this->CreateXCodeSourceFile(
 | 
	
		
			
				|  |  | -            this->CurrentLocalGenerator, *sfIt, gtgt);
 | 
	
		
			
				|  |  | +            this->CurrentLocalGenerator, sourceFile, gtgt);
 | 
	
		
			
				|  |  |            buildFiles->AddObject(xsf);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          contentBuildPhases.push_back(copyFilesBuildPhase);
 | 
	
	
		
			
				|  | @@ -1243,11 +1229,9 @@ bool cmGlobalXCodeGenerator::CreateXCodeTargets(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void cmGlobalXCodeGenerator::ForceLinkerLanguages()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  for (auto& localGenerator : this->LocalGenerators) {
 | 
	
		
			
				|  |  | -    const std::vector<cmGeneratorTarget*>& tgts =
 | 
	
		
			
				|  |  | -      localGenerator->GetGeneratorTargets();
 | 
	
		
			
				|  |  | +  for (auto localGenerator : this->LocalGenerators) {
 | 
	
		
			
				|  |  |      // All targets depend on the build-system check target.
 | 
	
		
			
				|  |  | -    for (auto tgt : tgts) {
 | 
	
		
			
				|  |  | +    for (auto tgt : localGenerator->GetGeneratorTargets()) {
 | 
	
		
			
				|  |  |        // This makes sure all targets link using the proper language.
 | 
	
		
			
				|  |  |        this->ForceLinkerLanguage(tgt);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -1269,8 +1253,8 @@ void cmGlobalXCodeGenerator::ForceLinkerLanguage(cmGeneratorTarget* gtgt)
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // If the language is compiled as a source trust Xcode to link with it.
 | 
	
		
			
				|  |  | -  cmLinkImplementation const* impl = gtgt->GetLinkImplementation("NOCONFIG");
 | 
	
		
			
				|  |  | -  for (auto const& Language : impl->Languages) {
 | 
	
		
			
				|  |  | +  for (auto const& Language :
 | 
	
		
			
				|  |  | +       gtgt->GetLinkImplementation("NOCONFIG")->Languages) {
 | 
	
		
			
				|  |  |      if (Language == llang) {
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -1370,10 +1354,9 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // add all the sources
 | 
	
		
			
				|  |  |    std::vector<cmCustomCommand> commands;
 | 
	
		
			
				|  |  | -  for (std::vector<cmSourceFile*>::const_iterator i = classes.begin();
 | 
	
		
			
				|  |  | -       i != classes.end(); ++i) {
 | 
	
		
			
				|  |  | -    if ((*i)->GetCustomCommand()) {
 | 
	
		
			
				|  |  | -      commands.push_back(*(*i)->GetCustomCommand());
 | 
	
		
			
				|  |  | +  for (auto sourceFile : classes) {
 | 
	
		
			
				|  |  | +    if (sourceFile->GetCustomCommand()) {
 | 
	
		
			
				|  |  | +      commands.push_back(*sourceFile->GetCustomCommand());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // create prebuild phase
 | 
	
	
		
			
				|  | @@ -1405,10 +1388,8 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(
 | 
	
		
			
				|  |  |    if (resourceBuildPhase) {
 | 
	
		
			
				|  |  |      buildPhases->AddObject(resourceBuildPhase);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  std::vector<cmXCodeObject*>::iterator cit;
 | 
	
		
			
				|  |  | -  for (cit = contentBuildPhases.begin(); cit != contentBuildPhases.end();
 | 
	
		
			
				|  |  | -       ++cit) {
 | 
	
		
			
				|  |  | -    buildPhases->AddObject(*cit);
 | 
	
		
			
				|  |  | +  for (auto obj : contentBuildPhases) {
 | 
	
		
			
				|  |  | +    buildPhases->AddObject(obj);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    if (sourceBuildPhase) {
 | 
	
		
			
				|  |  |      buildPhases->AddObject(sourceBuildPhase);
 | 
	
	
		
			
				|  | @@ -1531,12 +1512,9 @@ void cmGlobalXCodeGenerator::AddCommandsToBuildPhase(
 | 
	
		
			
				|  |  |    makefile += name;
 | 
	
		
			
				|  |  |    makefile += ".make";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  for (std::vector<std::string>::const_iterator currentConfig =
 | 
	
		
			
				|  |  | -         this->CurrentConfigurationTypes.begin();
 | 
	
		
			
				|  |  | -       currentConfig != this->CurrentConfigurationTypes.end();
 | 
	
		
			
				|  |  | -       currentConfig++) {
 | 
	
		
			
				|  |  | +  for (const auto& currentConfig : this->CurrentConfigurationTypes) {
 | 
	
		
			
				|  |  |      this->CreateCustomRulesMakefile(makefile.c_str(), target, commands,
 | 
	
		
			
				|  |  | -                                    *currentConfig);
 | 
	
		
			
				|  |  | +                                    currentConfig);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    std::string cdir = this->CurrentLocalGenerator->GetCurrentBinaryDirectory();
 | 
	
	
		
			
				|  | @@ -2016,8 +1994,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // Add framework search paths needed for linking.
 | 
	
		
			
				|  |  |    if (cmComputeLinkInformation* cli = gtgt->GetLinkInformation(configName)) {
 | 
	
		
			
				|  |  | -    std::vector<std::string> const& fwDirs = cli->GetFrameworkPaths();
 | 
	
		
			
				|  |  | -    for (auto const& fwDir : fwDirs) {
 | 
	
		
			
				|  |  | +    for (auto const& fwDir : cli->GetFrameworkPaths()) {
 | 
	
		
			
				|  |  |        if (emitted.insert(fwDir).second) {
 | 
	
		
			
				|  |  |          std::string incpath = this->XCodeEscapePath(fwDir);
 | 
	
		
			
				|  |  |          if (emitSystemIncludes &&
 | 
	
	
		
			
				|  | @@ -2182,9 +2159,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
 | 
	
		
			
				|  |  |      // runpath dirs needs to be unique to prevent corruption
 | 
	
		
			
				|  |  |      std::set<std::string> unique_dirs;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    for (std::vector<std::string>::const_iterator i = runtimeDirs.begin();
 | 
	
		
			
				|  |  | -         i != runtimeDirs.end(); ++i) {
 | 
	
		
			
				|  |  | -      std::string runpath = *i;
 | 
	
		
			
				|  |  | +    for (auto runpath : runtimeDirs) {
 | 
	
		
			
				|  |  |        runpath = this->ExpandCFGIntDir(runpath, configName);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (unique_dirs.find(runpath) == unique_dirs.end()) {
 | 
	
	
		
			
				|  | @@ -2244,8 +2219,7 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
 | 
	
		
			
				|  |  |    // put this last so it can override existing settings
 | 
	
		
			
				|  |  |    // Convert "XCODE_ATTRIBUTE_*" properties directly.
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  | -    std::vector<std::string> const& props = gtgt->GetPropertyKeys();
 | 
	
		
			
				|  |  | -    for (auto const& prop : props) {
 | 
	
		
			
				|  |  | +    for (auto const& prop : gtgt->GetPropertyKeys()) {
 | 
	
		
			
				|  |  |        if (prop.find("XCODE_ATTRIBUTE_") == 0) {
 | 
	
		
			
				|  |  |          std::string attribute = prop.substr(16);
 | 
	
		
			
				|  |  |          this->FilterConfigurationAttribute(configName, attribute);
 | 
	
	
		
			
				|  | @@ -2312,10 +2286,9 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateUtilityTarget(
 | 
	
		
			
				|  |  |      listfile += "/CMakeLists.txt";
 | 
	
		
			
				|  |  |      sources.push_back(gtgt->Makefile->GetOrCreateSource(listfile));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    for (std::vector<cmSourceFile*>::const_iterator i = sources.begin();
 | 
	
		
			
				|  |  | -         i != sources.end(); ++i) {
 | 
	
		
			
				|  |  | -      if (!(*i)->GetPropertyAsBool("GENERATED")) {
 | 
	
		
			
				|  |  | -        this->CreateXCodeFileReference(*i, gtgt);
 | 
	
		
			
				|  |  | +    for (auto sourceFile : sources) {
 | 
	
		
			
				|  |  | +      if (!sourceFile->GetPropertyAsBool("GENERATED")) {
 | 
	
		
			
				|  |  | +        this->CreateXCodeFileReference(sourceFile, gtgt);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -2584,17 +2557,10 @@ void cmGlobalXCodeGenerator::AppendBuildSettingAttribute(
 | 
	
		
			
				|  |  |      target->GetObject("buildConfigurationList")->GetObject();
 | 
	
		
			
				|  |  |    cmXCodeObject* buildConfigs =
 | 
	
		
			
				|  |  |      configurationList->GetObject("buildConfigurations");
 | 
	
		
			
				|  |  | -  std::vector<cmXCodeObject*> list = buildConfigs->GetObjectList();
 | 
	
		
			
				|  |  | -  // each configuration and the target itself has a buildSettings in it
 | 
	
		
			
				|  |  | -  // list.push_back(target);
 | 
	
		
			
				|  |  | -  for (auto& i : list) {
 | 
	
		
			
				|  |  | -    if (!configName.empty()) {
 | 
	
		
			
				|  |  | -      if (i->GetObject("name")->GetString() == configName) {
 | 
	
		
			
				|  |  | -        cmXCodeObject* settings = i->GetObject("buildSettings");
 | 
	
		
			
				|  |  | -        this->AppendOrAddBuildSetting(settings, attribute, value);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      cmXCodeObject* settings = i->GetObject("buildSettings");
 | 
	
		
			
				|  |  | +  for (auto obj : buildConfigs->GetObjectList()) {
 | 
	
		
			
				|  |  | +    if (configName.empty() ||
 | 
	
		
			
				|  |  | +        obj->GetObject("name")->GetString() == configName) {
 | 
	
		
			
				|  |  | +      cmXCodeObject* settings = obj->GetObject("buildSettings");
 | 
	
		
			
				|  |  |        this->AppendOrAddBuildSetting(settings, attribute, value);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -2612,8 +2578,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Add dependencies on other CMake targets.
 | 
	
		
			
				|  |  | -  TargetDependSet const& deps = this->GetTargetDirectDepends(gt);
 | 
	
		
			
				|  |  | -  for (auto dep : deps) {
 | 
	
		
			
				|  |  | +  for (const auto& dep : this->GetTargetDirectDepends(gt)) {
 | 
	
		
			
				|  |  |      if (cmXCodeObject* dptarget = this->FindXCodeTarget(dep)) {
 | 
	
		
			
				|  |  |        this->AddDependTarget(target, dptarget);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -2628,14 +2593,13 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
 | 
	
		
			
				|  |  |        const char* sep = "";
 | 
	
		
			
				|  |  |        std::vector<cmSourceFile const*> objs;
 | 
	
		
			
				|  |  |        gt->GetExternalObjects(objs, configName);
 | 
	
		
			
				|  |  | -      for (std::vector<cmSourceFile const*>::const_iterator oi = objs.begin();
 | 
	
		
			
				|  |  | -           oi != objs.end(); ++oi) {
 | 
	
		
			
				|  |  | -        if ((*oi)->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  | +      for (auto sourceFile : objs) {
 | 
	
		
			
				|  |  | +        if (sourceFile->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  |            continue;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          linkObjs += sep;
 | 
	
		
			
				|  |  |          sep = " ";
 | 
	
		
			
				|  |  | -        linkObjs += this->XCodeEscapePath((*oi)->GetFullPath());
 | 
	
		
			
				|  |  | +        linkObjs += this->XCodeEscapePath(sourceFile->GetFullPath());
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |        this->AppendBuildSettingAttribute(
 | 
	
		
			
				|  |  |          target, this->GetTargetLinkFlagsVar(gt), linkObjs.c_str(), configName);
 | 
	
	
		
			
				|  | @@ -2655,18 +2619,14 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
 | 
	
		
			
				|  |  |      cmComputeLinkInformation& cli = *pcli;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Add dependencies directly on library files.
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -      std::vector<std::string> const& libDeps = cli.GetDepends();
 | 
	
		
			
				|  |  | -      for (auto const& libDep : libDeps) {
 | 
	
		
			
				|  |  | -        target->AddDependLibrary(configName, libDep);
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | +    for (auto const& libDep : cli.GetDepends()) {
 | 
	
		
			
				|  |  | +      target->AddDependLibrary(configName, libDep);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // add the library search paths
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -      std::vector<std::string> const& libDirs = cli.GetDirectories();
 | 
	
		
			
				|  |  |        std::string linkDirs;
 | 
	
		
			
				|  |  | -      for (auto const& libDir : libDirs) {
 | 
	
		
			
				|  |  | +      for (auto const& libDir : cli.GetDirectories()) {
 | 
	
		
			
				|  |  |          if (!libDir.empty() && libDir != "/usr/lib") {
 | 
	
		
			
				|  |  |            // Now add the same one but append
 | 
	
		
			
				|  |  |            // $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) to it:
 | 
	
	
		
			
				|  | @@ -2685,9 +2645,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |        std::string linkLibs;
 | 
	
		
			
				|  |  |        const char* sep = "";
 | 
	
		
			
				|  |  | -      typedef cmComputeLinkInformation::ItemVector ItemVector;
 | 
	
		
			
				|  |  | -      ItemVector const& libNames = cli.GetItems();
 | 
	
		
			
				|  |  | -      for (auto const& libName : libNames) {
 | 
	
		
			
				|  |  | +      for (auto const& libName : cli.GetItems()) {
 | 
	
		
			
				|  |  |          linkLibs += sep;
 | 
	
		
			
				|  |  |          sep = " ";
 | 
	
		
			
				|  |  |          if (libName.IsPath) {
 | 
	
	
		
			
				|  | @@ -2713,9 +2671,7 @@ bool cmGlobalXCodeGenerator::CreateGroups(
 | 
	
		
			
				|  |  |    for (auto& generator : generators) {
 | 
	
		
			
				|  |  |      cmMakefile* mf = generator->GetMakefile();
 | 
	
		
			
				|  |  |      std::vector<cmSourceGroup> sourceGroups = mf->GetSourceGroups();
 | 
	
		
			
				|  |  | -    const std::vector<cmGeneratorTarget*>& tgts =
 | 
	
		
			
				|  |  | -      generator->GetGeneratorTargets();
 | 
	
		
			
				|  |  | -    for (auto gtgt : tgts) {
 | 
	
		
			
				|  |  | +    for (auto gtgt : generator->GetGeneratorTargets()) {
 | 
	
		
			
				|  |  |        // Same skipping logic here as in CreateXCodeTargets so that we do not
 | 
	
		
			
				|  |  |        // end up with (empty anyhow) ZERO_CHECK, install, or test source
 | 
	
		
			
				|  |  |        // groups:
 | 
	
	
		
			
				|  | @@ -2738,11 +2694,8 @@ bool cmGlobalXCodeGenerator::CreateGroups(
 | 
	
		
			
				|  |  |          gtgt->AddSource(plist);
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      std::vector<cmGeneratorTarget::AllConfigSource> const& sources =
 | 
	
		
			
				|  |  | -        gtgt->GetAllConfigSources();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |        // Put cmSourceFile instances in proper groups:
 | 
	
		
			
				|  |  | -      for (auto const& si : sources) {
 | 
	
		
			
				|  |  | +      for (auto const& si : gtgt->GetAllConfigSources()) {
 | 
	
		
			
				|  |  |          cmSourceFile const* sf = si.Source;
 | 
	
		
			
				|  |  |          if (this->XcodeVersion >= 50 && !sf->GetObjectLibrary().empty()) {
 | 
	
		
			
				|  |  |            // Object library files go on the link line instead.
 | 
	
	
		
			
				|  | @@ -2851,11 +2804,10 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateOrGetPBXGroup(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // It's a recursive folder structure, let's find the real parent group
 | 
	
		
			
				|  |  |    if (std::string(sg->GetFullName()) != std::string(sg->GetName())) {
 | 
	
		
			
				|  |  | -    std::vector<std::string> folders =
 | 
	
		
			
				|  |  | -      cmSystemTools::tokenize(sg->GetFullName(), "\\");
 | 
	
		
			
				|  |  |      std::string curr_folder = target;
 | 
	
		
			
				|  |  |      curr_folder += "/";
 | 
	
		
			
				|  |  | -    for (auto const& folder : folders) {
 | 
	
		
			
				|  |  | +    for (auto const& folder :
 | 
	
		
			
				|  |  | +         cmSystemTools::tokenize(sg->GetFullName(), "\\")) {
 | 
	
		
			
				|  |  |        curr_folder += folder;
 | 
	
		
			
				|  |  |        std::map<std::string, cmXCodeObject*>::iterator i_folder =
 | 
	
		
			
				|  |  |          this->GroupNameMap.find(curr_folder);
 | 
	
	
		
			
				|  | @@ -2960,10 +2912,9 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
 | 
	
		
			
				|  |  |      this->CreateObject(cmXCodeObject::OBJECT_LIST);
 | 
	
		
			
				|  |  |    typedef std::vector<std::pair<std::string, cmXCodeObject*>> Configs;
 | 
	
		
			
				|  |  |    Configs configs;
 | 
	
		
			
				|  |  | -  const char* defaultConfigName = "Debug";
 | 
	
		
			
				|  |  | -  for (unsigned int i = 0; i < this->CurrentConfigurationTypes.size(); ++i) {
 | 
	
		
			
				|  |  | -    const char* name = this->CurrentConfigurationTypes[i].c_str();
 | 
	
		
			
				|  |  | -    if (0 == i) {
 | 
	
		
			
				|  |  | +  std::string defaultConfigName;
 | 
	
		
			
				|  |  | +  for (const auto& name : this->CurrentConfigurationTypes) {
 | 
	
		
			
				|  |  | +    if (defaultConfigName.empty()) {
 | 
	
		
			
				|  |  |        defaultConfigName = name;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      cmXCodeObject* config =
 | 
	
	
		
			
				|  | @@ -2971,6 +2922,9 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
 | 
	
		
			
				|  |  |      config->AddAttribute("name", this->CreateString(name));
 | 
	
		
			
				|  |  |      configs.push_back(std::make_pair(name, config));
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  if (defaultConfigName.empty()) {
 | 
	
		
			
				|  |  | +    defaultConfigName = "Debug";
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    for (auto& config : configs) {
 | 
	
		
			
				|  |  |      buildConfigurations->AddObject(config.second);
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -3035,16 +2989,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // Put this last so it can override existing settings
 | 
	
		
			
				|  |  |      // Convert "CMAKE_XCODE_ATTRIBUTE_*" variables directly.
 | 
	
		
			
				|  |  | -    std::vector<std::string> vars = this->CurrentMakefile->GetDefinitions();
 | 
	
		
			
				|  |  | -    for (std::vector<std::string>::const_iterator d = vars.begin();
 | 
	
		
			
				|  |  | -         d != vars.end(); ++d) {
 | 
	
		
			
				|  |  | -      if (d->find("CMAKE_XCODE_ATTRIBUTE_") == 0) {
 | 
	
		
			
				|  |  | -        std::string attribute = d->substr(22);
 | 
	
		
			
				|  |  | +    for (const auto& var : this->CurrentMakefile->GetDefinitions()) {
 | 
	
		
			
				|  |  | +      if (var.find("CMAKE_XCODE_ATTRIBUTE_") == 0) {
 | 
	
		
			
				|  |  | +        std::string attribute = var.substr(22);
 | 
	
		
			
				|  |  |          this->FilterConfigurationAttribute(config.first, attribute);
 | 
	
		
			
				|  |  |          if (!attribute.empty()) {
 | 
	
		
			
				|  |  |            cmGeneratorExpression ge;
 | 
	
		
			
				|  |  |            std::string processed =
 | 
	
		
			
				|  |  | -            ge.Parse(this->CurrentMakefile->GetDefinition(*d))
 | 
	
		
			
				|  |  | +            ge.Parse(this->CurrentMakefile->GetDefinition(var))
 | 
	
		
			
				|  |  |                ->Evaluate(this->CurrentLocalGenerator, config.first);
 | 
	
		
			
				|  |  |            buildSettingsForCfg->AddAttribute(attribute,
 | 
	
		
			
				|  |  |                                              this->CreateString(processed));
 | 
	
	
		
			
				|  | @@ -3160,10 +3112,7 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
 | 
	
		
			
				|  |  |      "# link.  This forces Xcode to relink the targets from scratch.  It\n"
 | 
	
		
			
				|  |  |      "# does not seem to check these dependencies itself.\n";
 | 
	
		
			
				|  |  |    /* clang-format on */
 | 
	
		
			
				|  |  | -  for (std::vector<std::string>::const_iterator ct =
 | 
	
		
			
				|  |  | -         this->CurrentConfigurationTypes.begin();
 | 
	
		
			
				|  |  | -       ct != this->CurrentConfigurationTypes.end(); ++ct) {
 | 
	
		
			
				|  |  | -    std::string configName = *ct;
 | 
	
		
			
				|  |  | +  for (const auto& configName : this->CurrentConfigurationTypes) {
 | 
	
		
			
				|  |  |      for (auto target : targets) {
 | 
	
		
			
				|  |  |        cmGeneratorTarget* gt = target->GetTarget();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3173,7 +3122,7 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
 | 
	
		
			
				|  |  |            gt->GetType() == cmStateEnums::SHARED_LIBRARY ||
 | 
	
		
			
				|  |  |            gt->GetType() == cmStateEnums::MODULE_LIBRARY) {
 | 
	
		
			
				|  |  |          // Declare an entry point for the target post-build phase.
 | 
	
		
			
				|  |  | -        makefileStream << this->PostBuildMakeTarget(gt->GetName(), *ct)
 | 
	
		
			
				|  |  | +        makefileStream << this->PostBuildMakeTarget(gt->GetName(), configName)
 | 
	
		
			
				|  |  |                         << ":\n";
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3186,21 +3135,19 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // Add this target to the post-build phases of its dependencies.
 | 
	
		
			
				|  |  |          std::map<std::string, cmXCodeObject::StringVec>::const_iterator y =
 | 
	
		
			
				|  |  | -          target->GetDependTargets().find(*ct);
 | 
	
		
			
				|  |  | +          target->GetDependTargets().find(configName);
 | 
	
		
			
				|  |  |          if (y != target->GetDependTargets().end()) {
 | 
	
		
			
				|  |  | -          std::vector<std::string> const& deptgts = y->second;
 | 
	
		
			
				|  |  | -          for (auto const& deptgt : deptgts) {
 | 
	
		
			
				|  |  | -            makefileStream << this->PostBuildMakeTarget(deptgt, *ct) << ": "
 | 
	
		
			
				|  |  | -                           << trel << "\n";
 | 
	
		
			
				|  |  | +          for (auto const& deptgt : y->second) {
 | 
	
		
			
				|  |  | +            makefileStream << this->PostBuildMakeTarget(deptgt, configName)
 | 
	
		
			
				|  |  | +                           << ": " << trel << "\n";
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          std::vector<cmGeneratorTarget*> objlibs;
 | 
	
		
			
				|  |  |          gt->GetObjectLibrariesCMP0026(objlibs);
 | 
	
		
			
				|  |  | -        for (std::vector<cmGeneratorTarget*>::const_iterator it =
 | 
	
		
			
				|  |  | -               objlibs.begin();
 | 
	
		
			
				|  |  | -             it != objlibs.end(); ++it) {
 | 
	
		
			
				|  |  | -          makefileStream << this->PostBuildMakeTarget((*it)->GetName(), *ct)
 | 
	
		
			
				|  |  | +        for (auto objLib : objlibs) {
 | 
	
		
			
				|  |  | +          makefileStream << this->PostBuildMakeTarget(objLib->GetName(),
 | 
	
		
			
				|  |  | +                                                      configName)
 | 
	
		
			
				|  |  |                           << ": " << trel << "\n";
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -3209,23 +3156,20 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // List dependencies if any exist.
 | 
	
		
			
				|  |  |          std::map<std::string, cmXCodeObject::StringVec>::const_iterator x =
 | 
	
		
			
				|  |  | -          target->GetDependLibraries().find(*ct);
 | 
	
		
			
				|  |  | +          target->GetDependLibraries().find(configName);
 | 
	
		
			
				|  |  |          if (x != target->GetDependLibraries().end()) {
 | 
	
		
			
				|  |  | -          std::vector<std::string> const& deplibs = x->second;
 | 
	
		
			
				|  |  | -          for (auto const& deplib : deplibs) {
 | 
	
		
			
				|  |  | +          for (auto const& deplib : x->second) {
 | 
	
		
			
				|  |  |              std::string file = this->ConvertToRelativeForMake(deplib.c_str());
 | 
	
		
			
				|  |  |              makefileStream << "\\\n\t" << file;
 | 
	
		
			
				|  |  |              dummyRules.insert(file);
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        for (std::vector<cmGeneratorTarget*>::const_iterator it =
 | 
	
		
			
				|  |  | -               objlibs.begin();
 | 
	
		
			
				|  |  | -             it != objlibs.end(); ++it) {
 | 
	
		
			
				|  |  | +        for (auto objLib : objlibs) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -          const std::string objLibName = (*it)->GetName();
 | 
	
		
			
				|  |  | +          const std::string objLibName = objLib->GetName();
 | 
	
		
			
				|  |  |            std::string d = this->GetObjectsNormalDirectory(this->CurrentProject,
 | 
	
		
			
				|  |  | -                                                          configName, *it);
 | 
	
		
			
				|  |  | +                                                          configName, objLib);
 | 
	
		
			
				|  |  |            d += "lib";
 | 
	
		
			
				|  |  |            d += objLibName;
 | 
	
		
			
				|  |  |            d += ".a";
 | 
	
	
		
			
				|  | @@ -3245,7 +3189,7 @@ void cmGlobalXCodeGenerator::CreateXCodeDependHackTarget(
 | 
	
		
			
				|  |  |          if (this->Architectures.size() > 1) {
 | 
	
		
			
				|  |  |            std::string universal = this->GetObjectsNormalDirectory(
 | 
	
		
			
				|  |  |              this->CurrentProject, configName, gt);
 | 
	
		
			
				|  |  | -          for (auto& architecture : this->Architectures) {
 | 
	
		
			
				|  |  | +          for (const auto& architecture : this->Architectures) {
 | 
	
		
			
				|  |  |              std::string universalFile = universal;
 | 
	
		
			
				|  |  |              universalFile += architecture;
 | 
	
		
			
				|  |  |              universalFile += "/";
 | 
	
	
		
			
				|  | @@ -3276,7 +3220,7 @@ void cmGlobalXCodeGenerator::OutputXCodeProject(
 | 
	
		
			
				|  |  |      return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    // Skip local generators that are excluded from this project.
 | 
	
		
			
				|  |  | -  for (auto& generator : generators) {
 | 
	
		
			
				|  |  | +  for (auto generator : generators) {
 | 
	
		
			
				|  |  |      if (this->IsExcluded(root, generator)) {
 | 
	
		
			
				|  |  |        continue;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -3322,10 +3266,7 @@ void cmGlobalXCodeGenerator::OutputXCodeSharedSchemes(
 | 
	
		
			
				|  |  |    // collect all tests for the targets
 | 
	
		
			
				|  |  |    std::map<std::string, cmXCodeScheme::TestObjects> testables;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  for (std::vector<cmXCodeObject*>::const_iterator i =
 | 
	
		
			
				|  |  | -         this->XCodeObjects.begin();
 | 
	
		
			
				|  |  | -       i != this->XCodeObjects.end(); ++i) {
 | 
	
		
			
				|  |  | -    cmXCodeObject* obj = *i;
 | 
	
		
			
				|  |  | +  for (auto obj : this->XCodeObjects) {
 | 
	
		
			
				|  |  |      if (obj->GetType() != cmXCodeObject::OBJECT ||
 | 
	
		
			
				|  |  |          obj->GetIsA() != cmXCodeObject::PBXNativeTarget) {
 | 
	
		
			
				|  |  |        continue;
 | 
	
	
		
			
				|  | @@ -3344,10 +3285,7 @@ void cmGlobalXCodeGenerator::OutputXCodeSharedSchemes(
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // generate scheme
 | 
	
		
			
				|  |  | -  for (std::vector<cmXCodeObject*>::const_iterator i =
 | 
	
		
			
				|  |  | -         this->XCodeObjects.begin();
 | 
	
		
			
				|  |  | -       i != this->XCodeObjects.end(); ++i) {
 | 
	
		
			
				|  |  | -    cmXCodeObject* obj = *i;
 | 
	
		
			
				|  |  | +  for (auto obj : this->XCodeObjects) {
 | 
	
		
			
				|  |  |      if (obj->GetType() == cmXCodeObject::OBJECT &&
 | 
	
		
			
				|  |  |          (obj->GetIsA() == cmXCodeObject::PBXNativeTarget ||
 | 
	
		
			
				|  |  |           obj->GetIsA() == cmXCodeObject::PBXAggregateTarget)) {
 | 
	
	
		
			
				|  | @@ -3576,17 +3514,17 @@ void cmGlobalXCodeGenerator::AppendFlag(std::string& flags,
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    // Flag value with escaped quotes and backslashes.
 | 
	
		
			
				|  |  | -  for (const char* c = flag.c_str(); *c; ++c) {
 | 
	
		
			
				|  |  | -    if (*c == '\'') {
 | 
	
		
			
				|  |  | +  for (auto c : flag) {
 | 
	
		
			
				|  |  | +    if (c == '\'') {
 | 
	
		
			
				|  |  |        if (this->XcodeVersion >= 40) {
 | 
	
		
			
				|  |  |          flags += "'\\''";
 | 
	
		
			
				|  |  |        } else {
 | 
	
		
			
				|  |  |          flags += "\\'";
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -    } else if (*c == '\\') {
 | 
	
		
			
				|  |  | +    } else if (c == '\\') {
 | 
	
		
			
				|  |  |        flags += "\\\\";
 | 
	
		
			
				|  |  |      } else {
 | 
	
		
			
				|  |  | -      flags += *c;
 | 
	
		
			
				|  |  | +      flags += c;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 |