Merge topic 'vs-deterministic-guid'

c85367f4 VS: Compute project GUIDs deterministically
This commit is contained in:
Brad King 2015-06-04 09:13:23 -04:00 committed by CMake Topic Stage
commit 2b083b19eb
8 changed files with 22 additions and 71 deletions

View File

@ -310,8 +310,6 @@ public:
{
return this->BinaryDirectories.insert(dir).second;
}
/** Supported systems creates a GUID for the given name */
virtual void CreateGUID(const std::string&) {}
/** Return true if the generated build tree may contain multiple builds.
i.e. "Can I build Debug and Release in the same tree?" */

View File

@ -513,8 +513,6 @@ void cmGlobalVisualStudio7Generator::WriteTargetsToSolution(
cumulativePath = cumulativePath + "/" + *iter;
}
this->CreateGUID(cumulativePath.c_str());
}
if (!cumulativePath.empty())
@ -899,7 +897,6 @@ cmGlobalVisualStudio7Generator::WriteUtilityDepend(cmTarget const* target)
fname += ".vcproj";
cmGeneratedFileStream fout(fname.c_str());
fout.SetCopyIfDifferent(true);
this->CreateGUID(pname.c_str());
std::string guid = this->GetGUID(pname.c_str());
fout <<
@ -943,41 +940,28 @@ cmGlobalVisualStudio7Generator::WriteUtilityDepend(cmTarget const* target)
return pname;
}
std::string cmGlobalVisualStudio7Generator::GetGUID(const std::string& name)
//----------------------------------------------------------------------------
std::string cmGlobalVisualStudio7Generator::GetGUID(std::string const& name)
{
std::string guidStoreName = name;
guidStoreName += "_GUID_CMAKE";
const char* storedGUID =
this->CMakeInstance->GetCacheDefinition(guidStoreName.c_str());
if(storedGUID)
std::string const& guidStoreName = name + "_GUID_CMAKE";
if (const char* storedGUID =
this->CMakeInstance->GetCacheDefinition(guidStoreName.c_str()))
{
return std::string(storedGUID);
}
cmSystemTools::Error("Unknown Target referenced : ",
name.c_str());
return "";
}
void cmGlobalVisualStudio7Generator::CreateGUID(const std::string& name)
{
std::string guidStoreName = name;
guidStoreName += "_GUID_CMAKE";
if(this->CMakeInstance->GetCacheDefinition(guidStoreName.c_str()))
{
return;
}
std::string ret;
UUID uid;
unsigned short *uidstr;
UuidCreate(&uid);
UuidToStringW(&uid,&uidstr);
ret = cmsys::Encoding::ToNarrow(reinterpret_cast<wchar_t*>(uidstr));
RpcStringFreeW(&uidstr);
ret = cmSystemTools::UpperCase(ret);
this->CMakeInstance->AddCacheEntry(guidStoreName.c_str(),
ret.c_str(), "Stored GUID",
cmState::INTERNAL);
// Compute a GUID that is deterministic but unique to the build tree.
std::string input = this->CMakeInstance->GetState()->GetBinaryDirectory();
input += "|";
input += name;
std::string md5 = cmSystemTools::ComputeStringMD5(input);
assert(md5.length() == 32);
std::string const& guid =
(md5.substr( 0,8)+"-"+
md5.substr( 8,4)+"-"+
md5.substr(12,4)+"-"+
md5.substr(16,4)+"-"+
md5.substr(20,12));
return cmSystemTools::UpperCase(guid);
}
//----------------------------------------------------------------------------

View File

@ -80,9 +80,8 @@ public:
*/
virtual void OutputSLNFile();
///! Create a GUID or get an existing one.
void CreateGUID(const std::string& name);
std::string GetGUID(const std::string& name);
///! Lookup a stored GUID or compute one deterministically.
std::string GetGUID(std::string const& name);
/** Append the subdirectory for the given configuration. */
virtual void AppendDirectoryForConfig(const std::string& prefix,

View File

@ -185,7 +185,6 @@ void cmGlobalVisualStudio8Generator
void cmGlobalVisualStudio8Generator::Configure()
{
this->cmGlobalVisualStudio7Generator::Configure();
this->CreateGUID(CMAKE_CHECK_BUILD_SYSTEM_TARGET);
}
//----------------------------------------------------------------------------

View File

@ -107,10 +107,9 @@ void cmLocalVisualStudio10Generator
cmVS10XMLParser parser;
parser.ParseFile(path);
// if we can not find a GUID then create one
// if we can not find a GUID then we will generate one later
if(parser.GUID.empty())
{
this->GlobalGenerator->CreateGUID(name);
return;
}

View File

@ -82,8 +82,6 @@ void cmLocalVisualStudio7Generator::AddHelperCommands()
// Now create GUIDs for targets
cmTargets &tgts = this->Makefile->GetTargets();
cmGlobalVisualStudio7Generator* gg =
static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
for(cmTargets::iterator l = tgts.begin(); l != tgts.end(); l++)
{
if(l->second.GetType() == cmTarget::INTERFACE_LIBRARY)
@ -96,10 +94,6 @@ void cmLocalVisualStudio7Generator::AddHelperCommands()
this->ReadAndStoreExternalGUID(
l->second.GetName().c_str(), path);
}
else
{
gg->CreateGUID(l->first.c_str());
}
}
@ -2312,12 +2306,9 @@ void cmLocalVisualStudio7Generator::ReadAndStoreExternalGUID(
{
cmVS7XMLParser parser;
parser.ParseFile(path);
// if we can not find a GUID then create one
// if we can not find a GUID then we will generate one later
if(parser.GUID.size() == 0)
{
cmGlobalVisualStudio7Generator* gg =
static_cast<cmGlobalVisualStudio7Generator *>(this->GlobalGenerator);
gg->CreateGUID(name);
return;
}
std::string guidStoreName = name;

View File

@ -2116,25 +2116,10 @@ void cmMakefile::AddSourceGroup(const std::vector<std::string>& name,
return;
}
// build the whole source group path
const char* fullname = sg->GetFullName();
cmGlobalGenerator* gg = this->GetGlobalGenerator();
if(strlen(fullname))
{
std::string guidName = "SG_Filter_";
guidName += fullname;
gg->CreateGUID(guidName);
}
for(++i; i<=lastElement; ++i)
{
sg->AddChild(cmSourceGroup(name[i].c_str(), 0, sg->GetFullName()));
sg = sg->LookupChild(name[i].c_str());
fullname = sg->GetFullName();
if(strlen(fullname))
{
std::string guidName = "SG_Filter_";
guidName += fullname;
gg->CreateGUID(guidName);
}
}
sg->SetGroupRegex(regex);

View File

@ -178,7 +178,6 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
(cmLocalVisualStudio7Generator*)
this->Makefile->GetLocalGenerator();
this->Name = this->Target->GetName();
this->GlobalGenerator->CreateGUID(this->Name.c_str());
this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
this->Platform = gg->GetPlatformName();
this->NsightTegra = gg->IsNsightTegra();
@ -1084,7 +1083,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
(*this->BuildFileStream) << name << "\">\n";
std::string guidName = "SG_Filter_";
guidName += name;
this->GlobalGenerator->CreateGUID(guidName.c_str());
this->WriteString("<UniqueIdentifier>", 3);
std::string guid
= this->GlobalGenerator->GetGUID(guidName.c_str());
@ -1099,7 +1097,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
{
this->WriteString("<Filter Include=\"Object Libraries\">\n", 2);
std::string guidName = "SG_Filter_Object Libraries";
this->GlobalGenerator->CreateGUID(guidName.c_str());
this->WriteString("<UniqueIdentifier>", 3);
std::string guid =
this->GlobalGenerator->GetGUID(guidName.c_str());
@ -1112,7 +1109,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
{
this->WriteString("<Filter Include=\"Resource Files\">\n", 2);
std::string guidName = "SG_Filter_Resource Files";
this->GlobalGenerator->CreateGUID(guidName.c_str());
this->WriteString("<UniqueIdentifier>", 3);
std::string guid =
this->GlobalGenerator->GetGUID(guidName.c_str());