From dea1df4e5e05b8ba3de5099741a50cdea384f88e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Thu, 2 May 2013 16:52:48 +0200 Subject: Memoize usage requirement include directories in a config-specific map Commit 42ebb188 (Memoize includes and defines from interface libraries., 2013-02-22) introduced caching of the includes. Fix the memoization to be configuration-specific so that we do not accumulate entries across multiple evaluations in a multi-config generator. --- Source/cmTarget.cxx | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 1ccfa47..d14bfca 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -142,7 +142,7 @@ public: std::vector IncludeDirectoriesEntries; std::vector LinkInterfaceIncludeDirectoriesEntries; - std::vector + std::map > CachedLinkInterfaceIncludeDirectoriesEntries; std::map CachedLinkInterfaceCompileDefinitions; @@ -165,6 +165,19 @@ void deleteAndClear( } //---------------------------------------------------------------------------- +void deleteAndClear( + std::map > &entries) +{ + for (std::map >::iterator + it = entries.begin(), end = entries.end(); it != end; ++it) + { + deleteAndClear(it->second); + } +} + +//---------------------------------------------------------------------------- cmTargetInternals::~cmTargetInternals() { deleteAndClear(CachedLinkInterfaceIncludeDirectoriesEntries); @@ -2976,14 +2989,15 @@ std::vector cmTarget::GetIncludeDirectories(const char *config) cmsys::auto_ptr cge = ge.Parse( includeGenex); - this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries.push_back( + this->Internal + ->CachedLinkInterfaceIncludeDirectoriesEntries[configString].push_back( new cmTargetInternals::IncludeDirectoriesEntry(cge, it->Value)); } } processIncludeDirectories(this, - this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries, + this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries[configString], includes, uniqueIncludes, &dagChecker, @@ -2993,7 +3007,7 @@ std::vector cmTarget::GetIncludeDirectories(const char *config) if (!this->Makefile->IsGeneratingBuildSystem()) { deleteAndClear( - this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries); + this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries); } else { -- cgit v0.12