diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmGlobalXCodeGenerator.cxx | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index f9d4445..442152a 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -526,11 +526,13 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg, buildFile->AddAttribute("settings", settings); fileRef->AddAttribute("fileEncoding", this->CreateString("4")); + const char* lang = this->CurrentLocalGenerator->GetSourceFileLanguage(*sf); std::string sourcecode = "sourcecode"; std::string ext = sf->GetExtension(); ext = cmSystemTools::LowerCase(ext); + if(ext == "o") { sourcecode = "compiled.mach-o.objfile"; @@ -541,41 +543,50 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg, } else if(ext == "m") { - sourcecode += ".cpp.objc"; + sourcecode += ".c.objc"; } else if(ext == "plist") { sourcecode += ".text.plist"; } - else if(!lang) + else if(ext == "h" || ext == "hxx" || ext == "hpp") { - sourcecode += ext; - sourcecode += "."; - sourcecode += ext; - } - else if(strcmp(lang, "C") == 0) - { - sourcecode += ".c.c"; + const char* linkLanguage = cmtarget.GetLinkerLanguage(this); + if(linkLanguage && (std::string(linkLanguage) == "CXX")) + { + sourcecode += ".cpp.h"; + } + else + { + sourcecode += ".c.h"; + } } - else if(strcmp(lang, "CXX") == 0) + else if(lang && strcmp(lang, "CXX") == 0) { sourcecode += ".cpp.cpp"; } - else + else if(lang && strcmp(lang, "C") == 0) { - sourcecode += ext; - sourcecode += "."; - sourcecode += ext; + sourcecode += ".c.c"; } + //else + // { + // // Already specialized above or we leave sourcecode == "sourcecode" + // // which is probably the most correct choice. Extensionless headers, + // // for example... Or file types unknown to Xcode that do not map to a + // // valid lastKnownFileType value. + // } + fileRef->AddAttribute("lastKnownFileType", this->CreateString(sourcecode.c_str())); - std::string path = + + std::string path = this->ConvertToRelativeForXCode(sf->GetFullPath().c_str()); std::string dir; std::string file; cmSystemTools::SplitProgramPath(sf->GetFullPath().c_str(), dir, file); - + fileRef->AddAttribute("name", this->CreateString(file.c_str())); fileRef->AddAttribute("path", this->CreateString(path.c_str())); if(this->XcodeVersion == 15) @@ -590,6 +601,7 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg, { fileRef->AddAttribute("sourceTree", this->CreateString("<absolute>")); } + return buildFile; } @@ -693,7 +705,9 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen, { externalObjFiles.push_back(xsf); } - else if((*i)->GetPropertyAsBool("HEADER_FILE_ONLY")) + else if((*i)->GetPropertyAsBool("HEADER_FILE_ONLY") || + (tsFlags.Type == cmTarget::SourceFileTypePrivateHeader) || + (tsFlags.Type == cmTarget::SourceFileTypePublicHeader)) { headerFiles.push_back(xsf); } |