diff options
author | Brad King <brad.king@kitware.com> | 2017-09-25 12:33:29 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-09-25 13:06:24 (GMT) |
commit | 1604716dfc493bf55bc1d87b5083bbe2ee709e60 (patch) | |
tree | 49e44682a002439f4479abdc22dc96137914acdd | |
parent | 4609aaf513ffd6f253ec7c8a8bca6bb93d7eede5 (diff) | |
download | CMake-1604716dfc493bf55bc1d87b5083bbe2ee709e60.zip CMake-1604716dfc493bf55bc1d87b5083bbe2ee709e60.tar.gz CMake-1604716dfc493bf55bc1d87b5083bbe2ee709e60.tar.bz2 |
Revert "Performance: Improve efficiency of source file lookup in cmMakefile"
This reverts commit 3b95ab569345028a1a8fe521d5ecd81fa97f2653.
It regressed some legacy source file property behavior.
Revert pending further investigation.
-rw-r--r-- | Source/cmMakefile.cxx | 50 | ||||
-rw-r--r-- | Source/cmMakefile.h | 11 |
2 files changed, 3 insertions, 58 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index c96b892..e51cfcc 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -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; } diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 2cae659..272522c 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -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; |