summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalXCodeGenerator.cxx
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 /Source/cmGlobalXCodeGenerator.cxx
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.
Diffstat (limited to 'Source/cmGlobalXCodeGenerator.cxx')
-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);
}