diff options
author | David Cole <david.cole@kitware.com> | 2008-09-05 19:51:19 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2008-09-05 19:51:19 (GMT) |
commit | 58be1b005f6dc0122a1fcce4e2c1dc977df6e623 (patch) | |
tree | 29cae1944a5a826a96e60756ca0343a35f6a15ac | |
parent | e3dda17db2fd4c02dbcb50baccd994830b91b0f0 (diff) | |
download | CMake-58be1b005f6dc0122a1fcce4e2c1dc977df6e623.zip CMake-58be1b005f6dc0122a1fcce4e2c1dc977df6e623.tar.gz CMake-58be1b005f6dc0122a1fcce4e2c1dc977df6e623.tar.bz2 |
BUG: Fix issue #7046 - make sure extensionless headers and resource files work with the Xcode generator. Also fix incorrect mappings in the lastKnownFileType code. Add some extensionless files to the Framework test.
-rw-r--r-- | Source/cmGlobalXCodeGenerator.cxx | 48 | ||||
-rw-r--r-- | Tests/Framework/CMakeLists.txt | 13 | ||||
-rw-r--r-- | Tests/Framework/fooExtensionlessResource | 1 | ||||
-rw-r--r-- | Tests/Framework/fooPrivateExtensionlessHeader | 1 | ||||
-rw-r--r-- | Tests/Framework/fooPublicExtensionlessHeader | 1 |
5 files changed, 44 insertions, 20 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); } diff --git a/Tests/Framework/CMakeLists.txt b/Tests/Framework/CMakeLists.txt index 397e970..29f9838 100644 --- a/Tests/Framework/CMakeLists.txt +++ b/Tests/Framework/CMakeLists.txt @@ -5,8 +5,11 @@ add_library(foo SHARED foo.cxx foo.h foo2.h + fooExtensionlessResource fooPublic.h + fooPublicExtensionlessHeader fooPrivate.h + fooPrivateExtensionlessHeader fooNeither.h fooBoth.h test.lua @@ -20,9 +23,9 @@ set(foo_ver ver4) set_target_properties(foo PROPERTIES FRAMEWORK TRUE FRAMEWORK_VERSION ${foo_ver} - PRIVATE_HEADER "fooPrivate.h;fooBoth.h" - PUBLIC_HEADER "foo.h;foo2.h;fooPublic.h;fooBoth.h" - RESOURCE "test.lua" + PRIVATE_HEADER "fooPrivate.h;fooBoth.h;fooPrivateExtensionlessHeader" + PUBLIC_HEADER "foo.h;foo2.h;fooPublic.h;fooBoth.h;fooPublicExtensionlessHeader" + RESOURCE "fooExtensionlessResource;test.lua" INSTALL_NAME_DIR "@executable_path/../../../Library/Frameworks" DEBUG_POSTFIX -d ) @@ -57,11 +60,15 @@ add_library(fooStatic STATIC foo.cxx foo.h foo2.h + fooExtensionlessResource fooPublic.h + fooPublicExtensionlessHeader fooPrivate.h + fooPrivateExtensionlessHeader fooNeither.h fooBoth.h test.lua + fooDeepPublic.h ) set_target_properties(fooStatic PROPERTIES FRAMEWORK TRUE diff --git a/Tests/Framework/fooExtensionlessResource b/Tests/Framework/fooExtensionlessResource new file mode 100644 index 0000000..5122750 --- /dev/null +++ b/Tests/Framework/fooExtensionlessResource @@ -0,0 +1 @@ +fooExtensionlessResource diff --git a/Tests/Framework/fooPrivateExtensionlessHeader b/Tests/Framework/fooPrivateExtensionlessHeader new file mode 100644 index 0000000..ac97b92 --- /dev/null +++ b/Tests/Framework/fooPrivateExtensionlessHeader @@ -0,0 +1 @@ +fooPrivateExtensionlessHeader diff --git a/Tests/Framework/fooPublicExtensionlessHeader b/Tests/Framework/fooPublicExtensionlessHeader new file mode 100644 index 0000000..972d989 --- /dev/null +++ b/Tests/Framework/fooPublicExtensionlessHeader @@ -0,0 +1 @@ +fooPublicExtensionlessHeader |