From 0348383b8ccb943a68cda3ecf1bdd609212ff5ca Mon Sep 17 00:00:00 2001 From: Harry Mallon Date: Thu, 13 Jul 2017 15:46:52 +0100 Subject: Xcode: Add "outputPaths" to custom command script build phase This is needed for Xcode 9's "New Build System", whose release notes mention "that output must be declared as an explicit output by the script which generates it" in reference to outputs of custom script build phases. --- Help/release/3.9.rst | 2 ++ Source/cmGlobalXCodeGenerator.cxx | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/Help/release/3.9.rst b/Help/release/3.9.rst index c31f533..f8735a8 100644 --- a/Help/release/3.9.rst +++ b/Help/release/3.9.rst @@ -34,6 +34,8 @@ Generators This is an experimental feature and can be activated by setting the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable to a ``TRUE`` value. +* The :generator:`Xcode` generator now supports Xcode 9. + Commands -------- diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 9037961..3cd14e1 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -1517,6 +1517,17 @@ void cmGlobalXCodeGenerator::AddCommandsToBuildPhase( makecmd += " all"; buildphase->AddAttribute("shellScript", this->CreateString(makecmd)); buildphase->AddAttribute("showEnvVarsInLog", this->CreateString("0")); + + cmXCodeObject* outputFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST); + for (std::vector::const_iterator i = commands.begin(); + i != commands.end(); ++i) { + std::vector const& outputs = i->GetOutputs(); + for (std::vector::const_iterator j = outputs.begin(); + j != outputs.end(); ++j) { + outputFiles->AddObject(this->CreateString(*j)); + } + } + buildphase->AddAttribute("outputPaths", outputFiles); } void cmGlobalXCodeGenerator::CreateCustomRulesMakefile( -- cgit v0.12