|
@@ -18,6 +18,7 @@
|
|
|
#include "cmsys/RegularExpression.hxx"
|
|
#include "cmsys/RegularExpression.hxx"
|
|
|
|
|
|
|
|
#include "cmComputeLinkInformation.h"
|
|
#include "cmComputeLinkInformation.h"
|
|
|
|
|
+#include "cmCryptoHash.h"
|
|
|
#include "cmCustomCommand.h"
|
|
#include "cmCustomCommand.h"
|
|
|
#include "cmCustomCommandGenerator.h"
|
|
#include "cmCustomCommandGenerator.h"
|
|
|
#include "cmCustomCommandLines.h"
|
|
#include "cmCustomCommandLines.h"
|
|
@@ -797,9 +798,10 @@ void cmGlobalXCodeGenerator::addObject(std::unique_ptr<cmXCodeObject> obj)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateObject(
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateObject(
|
|
|
- cmXCodeObject::PBXType ptype)
|
|
|
|
|
|
|
+ cmXCodeObject::PBXType ptype, cm::string_view key)
|
|
|
{
|
|
{
|
|
|
- auto obj = cm::make_unique<cmXCode21Object>(ptype, cmXCodeObject::OBJECT);
|
|
|
|
|
|
|
+ auto obj = cm::make_unique<cmXCode21Object>(ptype, cmXCodeObject::OBJECT,
|
|
|
|
|
+ this->GetObjectId(ptype, key));
|
|
|
auto ptr = obj.get();
|
|
auto ptr = obj.get();
|
|
|
this->addObject(std::move(obj));
|
|
this->addObject(std::move(obj));
|
|
|
return ptr;
|
|
return ptr;
|
|
@@ -807,7 +809,9 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateObject(
|
|
|
|
|
|
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateObject(cmXCodeObject::Type type)
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateObject(cmXCodeObject::Type type)
|
|
|
{
|
|
{
|
|
|
- auto obj = cm::make_unique<cmXCodeObject>(cmXCodeObject::None, type);
|
|
|
|
|
|
|
+ auto obj = cm::make_unique<cmXCodeObject>(
|
|
|
|
|
+ cmXCodeObject::None, type,
|
|
|
|
|
+ "Temporary cmake object, should not be referred to in Xcode file");
|
|
|
auto ptr = obj.get();
|
|
auto ptr = obj.get();
|
|
|
this->addObject(std::move(obj));
|
|
this->addObject(std::move(obj));
|
|
|
return ptr;
|
|
return ptr;
|
|
@@ -1725,13 +1729,13 @@ void cmGlobalXCodeGenerator::CreateCustomCommands(
|
|
|
if (this->XcodeBuildSystem >= BuildSystem::Twelve) {
|
|
if (this->XcodeBuildSystem >= BuildSystem::Twelve) {
|
|
|
// create prebuild phase
|
|
// create prebuild phase
|
|
|
preBuildPhase =
|
|
preBuildPhase =
|
|
|
- this->CreateRunScriptBuildPhase("CMake PreBuild Rules", prebuild);
|
|
|
|
|
|
|
+ this->CreateRunScriptBuildPhase("CMake PreBuild Rules", gtgt, prebuild);
|
|
|
// create prelink phase
|
|
// create prelink phase
|
|
|
preLinkPhase =
|
|
preLinkPhase =
|
|
|
- this->CreateRunScriptBuildPhase("CMake PreLink Rules", prelink);
|
|
|
|
|
|
|
+ this->CreateRunScriptBuildPhase("CMake PreLink Rules", gtgt, prelink);
|
|
|
// create postbuild phase
|
|
// create postbuild phase
|
|
|
- postBuildPhase =
|
|
|
|
|
- this->CreateRunScriptBuildPhase("CMake PostBuild Rules", postbuild);
|
|
|
|
|
|
|
+ postBuildPhase = this->CreateRunScriptBuildPhase("CMake PostBuild Rules",
|
|
|
|
|
+ gtgt, postbuild);
|
|
|
} else {
|
|
} else {
|
|
|
std::vector<cmSourceFile*> classes;
|
|
std::vector<cmSourceFile*> classes;
|
|
|
if (!gtgt->GetConfigCommonSourceFiles(classes)) {
|
|
if (!gtgt->GetConfigCommonSourceFiles(classes)) {
|
|
@@ -1859,7 +1863,8 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateRunScriptBuildPhase(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cmXCodeObject* buildPhase =
|
|
cmXCodeObject* buildPhase =
|
|
|
- this->CreateObject(cmXCodeObject::PBXShellScriptBuildPhase);
|
|
|
|
|
|
|
+ this->CreateObject(cmXCodeObject::PBXShellScriptBuildPhase,
|
|
|
|
|
+ cmStrCat(gt->GetName(), ':', sf->GetFullPath()));
|
|
|
buildPhase->AddAttribute("buildActionMask",
|
|
buildPhase->AddAttribute("buildActionMask",
|
|
|
this->CreateString("2147483647"));
|
|
this->CreateString("2147483647"));
|
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
@@ -1918,7 +1923,8 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateRunScriptBuildPhase(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateRunScriptBuildPhase(
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateRunScriptBuildPhase(
|
|
|
- std::string const& name, std::vector<cmCustomCommand> const& commands)
|
|
|
|
|
|
|
+ std::string const& name, cmGeneratorTarget const* gt,
|
|
|
|
|
+ std::vector<cmCustomCommand> const& commands)
|
|
|
{
|
|
{
|
|
|
if (commands.empty()) {
|
|
if (commands.empty()) {
|
|
|
return nullptr;
|
|
return nullptr;
|
|
@@ -1941,7 +1947,8 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateRunScriptBuildPhase(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cmXCodeObject* buildPhase =
|
|
cmXCodeObject* buildPhase =
|
|
|
- this->CreateObject(cmXCodeObject::PBXShellScriptBuildPhase);
|
|
|
|
|
|
|
+ this->CreateObject(cmXCodeObject::PBXShellScriptBuildPhase,
|
|
|
|
|
+ cmStrCat(gt->GetName(), ':', name));
|
|
|
buildPhase->AddAttribute("buildActionMask",
|
|
buildPhase->AddAttribute("buildActionMask",
|
|
|
this->CreateString("2147483647"));
|
|
this->CreateString("2147483647"));
|
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
@@ -2909,8 +2916,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmGeneratorTarget* gtgt,
|
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateUtilityTarget(
|
|
cmXCodeObject* cmGlobalXCodeGenerator::CreateUtilityTarget(
|
|
|
cmGeneratorTarget* gtgt)
|
|
cmGeneratorTarget* gtgt)
|
|
|
{
|
|
{
|
|
|
- cmXCodeObject* shellBuildPhase =
|
|
|
|
|
- this->CreateObject(cmXCodeObject::PBXShellScriptBuildPhase);
|
|
|
|
|
|
|
+ cmXCodeObject* shellBuildPhase = this->CreateObject(
|
|
|
|
|
+ cmXCodeObject::PBXShellScriptBuildPhase, gtgt->GetName());
|
|
|
shellBuildPhase->AddAttribute("buildActionMask",
|
|
shellBuildPhase->AddAttribute("buildActionMask",
|
|
|
this->CreateString("2147483647"));
|
|
this->CreateString("2147483647"));
|
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
cmXCodeObject* buildFiles = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
|
@@ -3138,6 +3145,32 @@ cmXCodeObject* cmGlobalXCodeGenerator::FindXCodeTarget(
|
|
|
return i->second;
|
|
return i->second;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+std::string cmGlobalXCodeGenerator::GetObjectId(cmXCodeObject::PBXType ptype,
|
|
|
|
|
+ cm::string_view key)
|
|
|
|
|
+{
|
|
|
|
|
+ std::string objectId;
|
|
|
|
|
+ if (!key.empty()) {
|
|
|
|
|
+ cmCryptoHash hash(cmCryptoHash::AlgoSHA256);
|
|
|
|
|
+ hash.Initialize();
|
|
|
|
|
+ hash.Append(&ptype, sizeof(ptype));
|
|
|
|
|
+ hash.Append(key);
|
|
|
|
|
+ objectId = cmSystemTools::UpperCase(hash.FinalizeHex().substr(0, 24));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ char cUuid[40] = { 0 };
|
|
|
|
|
+ CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
|
|
|
|
|
+ CFStringRef s = CFUUIDCreateString(kCFAllocatorDefault, uuid);
|
|
|
|
|
+ CFStringGetCString(s, cUuid, sizeof(cUuid), kCFStringEncodingUTF8);
|
|
|
|
|
+ objectId = cUuid;
|
|
|
|
|
+ CFRelease(s);
|
|
|
|
|
+ CFRelease(uuid);
|
|
|
|
|
+ cmSystemTools::ReplaceString(objectId, "-", "");
|
|
|
|
|
+ if (objectId.size() > 24) {
|
|
|
|
|
+ objectId = objectId.substr(0, 24);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return objectId;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
std::string cmGlobalXCodeGenerator::GetOrCreateId(const std::string& name,
|
|
std::string cmGlobalXCodeGenerator::GetOrCreateId(const std::string& name,
|
|
|
const std::string& id)
|
|
const std::string& id)
|
|
|
{
|
|
{
|