[Cmake-commits] CMake branch, next, updated. v2.8.10.2-2316-g5cbeeef

Stephen Kelly steveire at gmail.com
Sun Feb 24 16:05:21 EST 2013


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  5cbeeef9ccb4d6bc9a46b8a559c4f4eaa9c64958 (commit)
       via  42ebb1886f7500c2f7a34fee99e2e9fa749f5a93 (commit)
      from  017d273c873f7d33bea09b65326c1e540f0801f2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=5cbeeef9ccb4d6bc9a46b8a559c4f4eaa9c64958
commit 5cbeeef9ccb4d6bc9a46b8a559c4f4eaa9c64958
Merge: 017d273 42ebb18
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun Feb 24 16:05:19 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Sun Feb 24 16:05:19 2013 -0500

    Merge topic 'memoize-link-iface-includes-defines' into next
    
    42ebb18 Memoize includes and defines from interface libraries.


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=42ebb1886f7500c2f7a34fee99e2e9fa749f5a93
commit 42ebb1886f7500c2f7a34fee99e2e9fa749f5a93
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Fri Feb 22 13:03:35 2013 +0100
Commit:     Stephen Kelly <steveire at gmail.com>
CommitDate: Sun Feb 24 22:04:20 2013 +0100

    Memoize includes and defines from interface libraries.
    
    This is similar in spirit to commit e48d8420 (Cache context-independent
    includes on evaluation., 2013-02-03), but it is needed since commit
    a1c4905f (Use the link information as a source of compile definitions
    and includes., 2013-02-12), which changed how includes and defines
    are determined. As they are now determined through the link interface,
    we need to cache the result of evaluating them through that.
    
    In the case of the includes, the result was already being cached
    and then immediately disposed. Store the result as a member variable
    instead to make use of the caching.

diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 003f3d8..717cfc8 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -92,6 +92,7 @@ public:
     // Others not copied here are result caches.
     this->SourceEntries = r.SourceEntries;
     }
+  ~cmTargetInternals();
   typedef cmTarget::SourceFileFlags SourceFileFlags;
   std::map<cmSourceFile const*, SourceFileFlags> SourceFlagsMap;
   bool SourceFileFlagsConstructed;
@@ -138,9 +139,36 @@ public:
   };
   std::vector<IncludeDirectoriesEntry*> IncludeDirectoriesEntries;
   std::vector<cmValueWithOrigin> LinkInterfaceIncludeDirectoriesEntries;
+
+  std::vector<IncludeDirectoriesEntry*>
+                                CachedLinkInterfaceIncludeDirectoriesEntries;
+  std::map<std::string, std::string> CachedLinkInterfaceCompileDefinitions;
+
+  std::map<std::string, bool> CacheLinkInterfaceIncludeDirectoriesDone;
+  std::map<std::string, bool> CacheLinkInterfaceCompileDefinitionsDone;
 };
 
 //----------------------------------------------------------------------------
+void deleteAndClear(
+      std::vector<cmTargetInternals::IncludeDirectoriesEntry*> &entries)
+{
+  for (std::vector<cmTargetInternals::IncludeDirectoriesEntry*>::const_iterator
+      it = entries.begin(),
+      end = entries.end();
+      it != end; ++it)
+    {
+      delete *it;
+    }
+  entries.clear();
+}
+
+//----------------------------------------------------------------------------
+cmTargetInternals::~cmTargetInternals()
+{
+  deleteAndClear(CachedLinkInterfaceIncludeDirectoriesEntries);
+}
+
+//----------------------------------------------------------------------------
 cmTarget::cmTarget()
 {
   this->Makefile = 0;
@@ -2655,20 +2683,6 @@ void cmTarget::GatherDependencies( const cmMakefile& mf,
 }
 
 //----------------------------------------------------------------------------
-void deleteAndClear(
-      std::vector<cmTargetInternals::IncludeDirectoriesEntry*> &entries)
-{
-  for (std::vector<cmTargetInternals::IncludeDirectoriesEntry*>::const_iterator
-      it = entries.begin(),
-      end = entries.end();
-      it != end; ++it)
-    {
-      delete *it;
-    }
-  entries.clear();
-}
-
-//----------------------------------------------------------------------------
 void cmTarget::SetProperty(const char* prop, const char* value)
 {
   if (!prop)
@@ -2870,41 +2884,53 @@ std::vector<std::string> cmTarget::GetIncludeDirectories(const char *config)
                             config,
                             debugIncludes);
 
-  std::vector<cmTargetInternals::IncludeDirectoriesEntry*>
-                                      linkInterfaceIncludeDirectoriesEntries;
-
-  for (std::vector<cmValueWithOrigin>::const_iterator
-      it = this->Internal->LinkInterfaceIncludeDirectoriesEntries.begin(),
-      end = this->Internal->LinkInterfaceIncludeDirectoriesEntries.end();
-      it != end; ++it)
+  std::string configString = config ? config : "";
+  if (!this->Internal->CacheLinkInterfaceIncludeDirectoriesDone[configString])
     {
-    {
-    cmGeneratorExpression ge(lfbt);
-    cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(it->Value);
-    std::string result = cge->Evaluate(this->Makefile, config,
-                                       false, this, 0, 0);
-    if (!this->Makefile->FindTargetToUse(result.c_str()))
+    for (std::vector<cmValueWithOrigin>::const_iterator
+        it = this->Internal->LinkInterfaceIncludeDirectoriesEntries.begin(),
+        end = this->Internal->LinkInterfaceIncludeDirectoriesEntries.end();
+        it != end; ++it)
       {
-      continue;
+      {
+      cmGeneratorExpression ge(lfbt);
+      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
+                                                        ge.Parse(it->Value);
+      std::string result = cge->Evaluate(this->Makefile, config,
+                                        false, this, 0, 0);
+      if (!this->Makefile->FindTargetToUse(result.c_str()))
+        {
+        continue;
+        }
       }
-    }
-    cmGeneratorExpression ge(it->Backtrace);
-    cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
-        "$<TARGET_PROPERTY:" + it->Value + ",INTERFACE_INCLUDE_DIRECTORIES>");
+      cmGeneratorExpression ge(it->Backtrace);
+      cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(
+          "$<TARGET_PROPERTY:" +
+                              it->Value + ",INTERFACE_INCLUDE_DIRECTORIES>");
 
-    linkInterfaceIncludeDirectoriesEntries.push_back(
+      this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries.push_back(
                         new cmTargetInternals::IncludeDirectoriesEntry(cge));
+      }
     }
 
   processIncludeDirectories(this,
-                            linkInterfaceIncludeDirectoriesEntries,
+              this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries,
                             includes,
                             uniqueIncludes,
                             &dagChecker,
                             config,
                             debugIncludes);
 
-  deleteAndClear(linkInterfaceIncludeDirectoriesEntries);
+  if (!this->Makefile->IsGeneratingBuildSystem())
+    {
+    deleteAndClear(
+              this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries);
+    }
+  else
+    {
+    this->Internal->CacheLinkInterfaceIncludeDirectoriesDone[configString]
+                                                                      = true;
+    }
 
   return includes;
 }
@@ -2957,16 +2983,34 @@ std::string cmTarget::GetCompileDefinitions(const char *config)
       }
     }
 
-  cmGeneratorExpression ge2(lfbt);
-  cmsys::auto_ptr<cmCompiledGeneratorExpression> cge2 = ge2.Parse(depString);
-  std::string depResult = cge2->Evaluate(this->Makefile,
-                      config,
-                      false,
-                      this,
-                      &dagChecker);
-  if (!depResult.empty())
+  std::string configString = config ? config : "";
+  if (!this->Internal->CacheLinkInterfaceCompileDefinitionsDone[configString])
+    {
+    cmGeneratorExpression ge2(lfbt);
+    cmsys::auto_ptr<cmCompiledGeneratorExpression> cge2 =
+                                                        ge2.Parse(depString);
+    this->Internal->CachedLinkInterfaceCompileDefinitions[configString] =
+                                                cge2->Evaluate(this->Makefile,
+                                                               config,
+                                                               false,
+                                                               this,
+                                                               &dagChecker);
+    }
+  if (!this->Internal->CachedLinkInterfaceCompileDefinitions[configString]
+                                                                    .empty())
+    {
+    result += (result.empty() ? "" : ";")
+        + this->Internal->CachedLinkInterfaceCompileDefinitions[configString];
+    }
+
+  if (!this->Makefile->IsGeneratingBuildSystem())
+    {
+    this->Internal->CachedLinkInterfaceCompileDefinitions[configString] = "";
+    }
+  else
     {
-    result += (result.empty() ? "" : ";") + depResult;
+    this->Internal->CacheLinkInterfaceCompileDefinitionsDone[configString]
+                                                                      = true;
     }
 
   return result;

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list