summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Priestman <michael.priestman@autodesk.com>2013-10-21 14:46:25 (GMT)
committerBrad King <brad.king@kitware.com>2013-10-21 15:09:59 (GMT)
commite5ec8ad47dc07623b6318bb413e01cc921cf66c4 (patch)
tree4236c73d085dbb1421dfb0d78e025d0f9c660d71
parentbf02e750796c6b42b0e9d39ba322cd5191489a0e (diff)
downloadCMake-e5ec8ad47dc07623b6318bb413e01cc921cf66c4.zip
CMake-e5ec8ad47dc07623b6318bb413e01cc921cf66c4.tar.gz
CMake-e5ec8ad47dc07623b6318bb413e01cc921cf66c4.tar.bz2
Xcode: Generate 'folder' source type for directories (#14498)
Teach the Xcode generator to set 'lastKnownFileType' to be 'folder' for file references that are directories. If you set 'explicitFileType' to 'sourcecode', then Xcode cannot browse the directory.
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx21
1 files changed, 16 insertions, 5 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index c8b6832..13ed143 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -876,10 +876,20 @@ cmGlobalXCodeGenerator::CreateXCodeFileReferenceFromPath(
ext = realExt.substr(1);
}
- std::string sourcecode = GetSourcecodeValueFromFileExtension(ext, lang);
-
- fileRef->AddAttribute("explicitFileType",
- this->CreateString(sourcecode.c_str()));
+ // If fullpath references a directory, then we need to specify
+ // lastKnownFileType as folder in order for Xcode to be able to open the
+ // contents of the folder (Xcode 4.6 does not like explicitFileType=folder).
+ if(cmSystemTools::FileIsDirectory(fullpath.c_str()))
+ {
+ fileRef->AddAttribute("lastKnownFileType",
+ this->CreateString("folder"));
+ }
+ else
+ {
+ std::string sourcecode = GetSourcecodeValueFromFileExtension(ext, lang);
+ fileRef->AddAttribute("explicitFileType",
+ this->CreateString(sourcecode.c_str()));
+ }
// Store the file path relative to the top of the source tree.
std::string path = this->RelativeToSource(fullpath.c_str());
@@ -1009,7 +1019,8 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
cmTarget::SourceFileFlags tsFlags =
cmtarget.GetTargetSourceFileFlags(*i);
- if(strcmp(filetype->GetString(), "compiled.mach-o.objfile") == 0)
+ if(filetype &&
+ strcmp(filetype->GetString(), "compiled.mach-o.objfile") == 0)
{
externalObjFiles.push_back(xsf);
}