|
|
@@ -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);
|
|
|
}
|