Revert "Performance: Improve efficiency of source file lookup in cmMakefile"

This reverts commit 3b95ab5693.
It regressed some legacy source file property behavior.
Revert pending further investigation.
This commit is contained in:
Brad King
2017-09-25 08:33:29 -04:00
parent 4609aaf513
commit 1604716dfc
2 changed files with 3 additions and 58 deletions

View File

@@ -3082,18 +3082,9 @@ void cmMakefile::SetArgcArgv(const std::vector<std::string>& args)
cmSourceFile* cmMakefile::GetSource(const std::string& sourceName) const
{
cmSourceFileLocation sfl(this, sourceName);
#if defined(_WIN32) || defined(__APPLE__)
const auto& name = cmSystemTools::LowerCase(sfl.GetName());
#else
const auto& name = sfl.GetName();
#endif
auto sfsi = this->SourceFileSearchIndex.find(name);
if (sfsi != this->SourceFileSearchIndex.end()) {
for (auto sf : sfsi->second) {
if (sf->Matches(sfl)) {
return sf;
}
for (cmSourceFile* sf : this->SourceFiles) {
if (sf->Matches(sfl)) {
return sf;
}
}
return nullptr;
@@ -3107,41 +3098,6 @@ cmSourceFile* cmMakefile::CreateSource(const std::string& sourceName,
sf->SetProperty("GENERATED", "1");
}
this->SourceFiles.push_back(sf);
auto name = sf->GetLocation().GetName();
#if defined(_WIN32) || defined(__APPLE__)
name = cmSystemTools::LowerCase(name);
#endif
// For a file in the form "a.b.c" add the cmSourceFile to the index
// at "a.b.c", "a.b" and "a".
auto partial = name;
while (true) {
this->SourceFileSearchIndex[partial].insert(sf);
auto i = partial.rfind('.');
if (i == std::string::npos) {
break;
}
partial = partial.substr(0, i);
}
if (sf->GetLocation().ExtensionIsAmbiguous()) {
// For an ambiguous extension also add the various "known"
// extensions to the original filename.
const auto& srcExts = this->GetCMakeInstance()->GetSourceExtensions();
for (const auto& ext : srcExts) {
auto name_ext = name + "." + cmSystemTools::LowerCase(ext);
this->SourceFileSearchIndex[name_ext].insert(sf);
}
const auto& hdrExts = this->GetCMakeInstance()->GetHeaderExtensions();
for (const auto& ext : hdrExts) {
auto name_ext = name + "." + cmSystemTools::LowerCase(ext);
this->SourceFileSearchIndex[name_ext].insert(sf);
}
}
return sf;
}

View File

@@ -13,7 +13,6 @@
#include <stddef.h>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "cmAlgorithms.h"
@@ -809,17 +808,7 @@ protected:
// libraries, classes, and executables
mutable cmTargets Targets;
std::map<std::string, std::string> AliasTargets;
std::vector<cmSourceFile*> SourceFiles;
// Because cmSourceFile names are compared in a fuzzy way (see
// cmSourceFileLocation::Match()) we can't have a straight mapping from
// filename to cmSourceFile. To make lookups more efficient we store the
// Name portion of the cmSourceFileLocation and then compare on the list of
// cmSourceFiles that might match that name. Note that on platforms which
// have a case-insensitive filesystem we store the key in all lowercase.
typedef std::unordered_set<cmSourceFile*> SourceFileSet;
typedef std::unordered_map<std::string, SourceFileSet> SourceFileMap;
SourceFileMap SourceFileSearchIndex;
// Tests
std::map<std::string, cmTest*> Tests;