| 
					
				 | 
			
			
				@@ -1154,47 +1154,25 @@ std::string GetSourcecodeValueFromFileExtension( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return sourcecode; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// If the file has no extension it's either a raw executable or might 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// be a direct reference to a binary within a framework (bad practice!). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// This is where we change the path to point to the framework directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// .tbd files also can be located in SDK frameworks (they are 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// placeholders for actual libraries shipped with the OS) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-std::string GetLibraryOrFrameworkPath(const std::string& path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} // anonymous 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// Extracts the framework directory, if path matches the framework syntax 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// otherwise returns the path untouched 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+std::string cmGlobalXCodeGenerator::GetLibraryOrFrameworkPath( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const std::string& path) const 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  auto ext = cmSystemTools::GetFilenameLastExtension(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (ext.empty() || ext == ".tbd") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto name = cmSystemTools::GetFilenameWithoutExtension(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // Check for iOS framework structure: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //    FwName.framework/FwName (and also on macOS where FwName lib is a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //    symlink) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto parentDir = cmSystemTools::GetParentDirectory(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    auto parentName = cmSystemTools::GetFilenameWithoutExtension(parentDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ext = cmSystemTools::GetFilenameLastExtension(parentDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (ext == ".framework" && name == parentName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return parentDir; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // Check for macOS framework structure: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //    FwName.framework/Versions/*/FwName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::vector<std::string> components; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    cmSystemTools::SplitPath(path, components); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (components.size() > 3 && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        components[components.size() - 3] == "Versions") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      ext = cmSystemTools::GetFilenameLastExtension( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        components[components.size() - 4]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      parentName = cmSystemTools::GetFilenameWithoutExtension( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        components[components.size() - 4]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (ext == ".framework" && name == parentName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        components.erase(components.begin() + components.size() - 3, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                         components.end()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return cmSystemTools::JoinPath(components); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  auto fwItems = this->SplitFrameworkPath(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (fwItems) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (fwItems->first.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return cmStrCat(fwItems->second, ".framework"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return cmStrCat(fwItems->first, '/', fwItems->second, ".framework"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return path; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} // anonymous 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 cmXCodeObject* cmGlobalXCodeGenerator::CreateXCodeFileReferenceFromPath( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const std::string& fullpath, cmGeneratorTarget* target, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const std::string& lang, cmSourceFile* sf) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1217,7 +1195,7 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateXCodeFileReferenceFromPath( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ext = ext.substr(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (fileType.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    path = GetLibraryOrFrameworkPath(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    path = this->GetLibraryOrFrameworkPath(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ext = cmSystemTools::GetFilenameLastExtension(path); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (!ext.empty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       ext = ext.substr(1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3541,7 +3519,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       linkDir = libItem->Value.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    linkDir = GetLibraryOrFrameworkPath(linkDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    linkDir = this->GetLibraryOrFrameworkPath(linkDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     bool isFramework = cmSystemTools::IsPathToFramework(linkDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     linkDir = cmSystemTools::GetParentDirectory(linkDir); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (isFramework) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -3729,7 +3707,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (cmSystemTools::FileIsFullPath(cleanPath)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             cleanPath = cmSystemTools::CollapseFullPath(cleanPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          const auto libPath = GetLibraryOrFrameworkPath(cleanPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          const auto libPath = this->GetLibraryOrFrameworkPath(cleanPath); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (cmSystemTools::StringEndsWith(libPath.c_str(), ".framework")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             const auto fwName = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               cmSystemTools::GetFilenameWithoutExtension(libPath); 
			 |