From 0c030ef72c30d9c8634d0d815b15d9f238b7b267 Mon Sep 17 00:00:00 2001 From: David Cole Date: Mon, 18 Jul 2011 15:25:30 -0400 Subject: Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects. Facilitates building iOS projects, enabling switching back and forth between simulator and device builds at development time. --- Source/cmGlobalXCodeGenerator.cxx | 19 ++++++++++++------- Source/cmTarget.cxx | 14 +++++++++++++- Source/cmTarget.h | 6 +++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 2cbd3ed..76dd770 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -1480,7 +1480,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, BuildObjectListOrString ppDefs(this, this->XcodeVersion >= 30); if(this->XcodeVersion > 15) { - this->AppendDefines(ppDefs, "CMAKE_INTDIR=\"$(CONFIGURATION)\""); + this->AppendDefines(ppDefs, + "CMAKE_INTDIR=\"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)\""); } if(const char* exportMacro = target.GetExportMacro()) { @@ -1597,9 +1598,12 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target, { if(this->XcodeVersion >= 21) { - std::string pncdir = target.GetDirectory(configName); - buildSettings->AddAttribute("CONFIGURATION_BUILD_DIR", - this->CreateString(pncdir.c_str())); + if(!target.UsesDefaultOutputDir(configName, false)) + { + std::string pncdir = target.GetDirectory(configName); + buildSettings->AddAttribute("CONFIGURATION_BUILD_DIR", + this->CreateString(pncdir.c_str())); + } } else { @@ -2399,10 +2403,10 @@ void cmGlobalXCodeGenerator { if(this->XcodeVersion > 15) { - // now add the same one but append $(CONFIGURATION) to it: + // now add the same one but append $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) to it: linkDirs += " "; linkDirs += this->XCodeEscapePath( - (*libDir + "/$(CONFIGURATION)").c_str()); + (*libDir + "/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)").c_str()); } linkDirs += " "; linkDirs += this->XCodeEscapePath(libDir->c_str()); @@ -3173,7 +3177,8 @@ cmGlobalXCodeGenerator::WriteXCodePBXProj(std::ostream& fout, //---------------------------------------------------------------------------- const char* cmGlobalXCodeGenerator::GetCMakeCFGInitDirectory() { - return this->XcodeVersion >= 21? "$(CONFIGURATION)" : "."; + return this->XcodeVersion >= 21 ? + "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" : "."; } //---------------------------------------------------------------------------- diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 52b9072..2cb3c01 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -3688,9 +3688,11 @@ const char* cmTarget::GetOutputTargetType(bool implib) } //---------------------------------------------------------------------------- -void cmTarget::ComputeOutputDir(const char* config, +bool cmTarget::ComputeOutputDir(const char* config, bool implib, std::string& out) { + bool usesDefaultOutputDir = false; + // Look for a target property defining the target output directory // based on the target type. std::string targetTypeName = this->GetOutputTargetType(implib); @@ -3742,6 +3744,7 @@ void cmTarget::ComputeOutputDir(const char* config, if(out.empty()) { // Default to the current output directory. + usesDefaultOutputDir = true; out = "."; } @@ -3757,6 +3760,15 @@ void cmTarget::ComputeOutputDir(const char* config, this->Makefile->GetLocalGenerator()->GetGlobalGenerator()-> AppendDirectoryForConfig("/", config, "", out); } + + return usesDefaultOutputDir; +} + +//---------------------------------------------------------------------------- +bool cmTarget::UsesDefaultOutputDir(const char* config, bool implib) +{ + std::string dir; + return this->ComputeOutputDir(config, implib, dir); } //---------------------------------------------------------------------------- diff --git a/Source/cmTarget.h b/Source/cmTarget.h index 3b1f016..28652e2 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -446,6 +446,10 @@ public: /** Get a build-tree directory in which to place target support files. */ std::string GetSupportDirectory() const; + /** Return whether this target uses the default value for its output + directory. */ + bool UsesDefaultOutputDir(const char* config, bool implib); + private: /** * A list of direct dependencies. Use in conjunction with DependencyMap. @@ -558,7 +562,7 @@ private: // Cache target output paths for each configuration. struct OutputInfo; OutputInfo const* GetOutputInfo(const char* config); - void ComputeOutputDir(const char* config, bool implib, std::string& out); + bool ComputeOutputDir(const char* config, bool implib, std::string& out); // Cache import information from properties for each configuration. struct ImportInfo; -- cgit v0.12 From 74c73d5fa0af15c8316a4ab7cfe0aed0f39450f1 Mon Sep 17 00:00:00 2001 From: David Cole Date: Tue, 19 Jul 2011 11:33:01 -0400 Subject: Correct KWStyle line too long error --- Source/cmGlobalXCodeGenerator.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 76dd770..b3e2e7a 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -2403,7 +2403,8 @@ void cmGlobalXCodeGenerator { if(this->XcodeVersion > 15) { - // now add the same one but append $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) to it: + // Now add the same one but append + // $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) to it: linkDirs += " "; linkDirs += this->XCodeEscapePath( (*libDir + "/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)").c_str()); -- cgit v0.12