summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2017-09-25 12:33:29 (GMT)
committerBrad King <brad.king@kitware.com>2017-09-25 13:06:24 (GMT)
commit1604716dfc493bf55bc1d87b5083bbe2ee709e60 (patch)
tree49e44682a002439f4479abdc22dc96137914acdd
parent4609aaf513ffd6f253ec7c8a8bca6bb93d7eede5 (diff)
downloadCMake-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.cxx50
-rw-r--r--Source/cmMakefile.h11
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;