[Cmake-commits] CMake branch, next, updated. v2.8.12.1-5089-geddf494

Brad King brad.king at kitware.com
Tue Nov 12 09:03:48 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  eddf494c8227254ef82fca289a2978d056772d19 (commit)
       via  684063c0363687285126f30a517239aa2ad46149 (commit)
       via  eaf5b7a776e24af55f6f7f254171c3e2d2932d9b (commit)
      from  b7d4cf5e6c29cda3b7d5b8ddb142aedaaab3792e (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=eddf494c8227254ef82fca289a2978d056772d19
commit eddf494c8227254ef82fca289a2978d056772d19
Merge: b7d4cf5 684063c
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 12 09:03:35 2013 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Tue Nov 12 09:03:35 2013 -0500

    Merge topic 'cleanup-edit_cache-target' into next
    
    684063c Refactor tool selection for edit_cache (#14544)
    eaf5b7a cmGlobalGenerator: Do not propagate const through GetCMakeInstance


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=684063c0363687285126f30a517239aa2ad46149
commit 684063c0363687285126f30a517239aa2ad46149
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 12 08:44:08 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Nov 12 08:47:19 2013 -0500

    Refactor tool selection for edit_cache (#14544)
    
    Refactor edit_cache tool selection to ask each global generator for its
    preference.  Teach the Ninja generator to always use cmake-gui because
    Ninja by design cannot run interactive terminal dialogs like ccmake.
    Teach the Makefile generator to use cmake-gui when also using an "extra"
    generator whose IDE has no terminal to run ccmake, and otherwise fall
    back to CMAKE_EDIT_COMMAND selection for normal Makefile build systems.

diff --git a/Help/variable/CMAKE_EDIT_COMMAND.rst b/Help/variable/CMAKE_EDIT_COMMAND.rst
index a5c13f4..562aa0b 100644
--- a/Help/variable/CMAKE_EDIT_COMMAND.rst
+++ b/Help/variable/CMAKE_EDIT_COMMAND.rst
@@ -1,7 +1,8 @@
 CMAKE_EDIT_COMMAND
 ------------------
 
-Full path to cmake-gui or ccmake.
+Full path to cmake-gui or ccmake.  Defined only for Makefile generators
+when not using an "extra" generator for an IDE.
 
 This is the full path to the CMake executable that can graphically
 edit the cache.  For example, cmake-gui or ccmake.
diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx
index 1e799b8..fce1284 100644
--- a/Source/cmExtraCodeBlocksGenerator.cxx
+++ b/Source/cmExtraCodeBlocksGenerator.cxx
@@ -329,31 +329,11 @@ void cmExtraCodeBlocksGenerator
         {
         case cmTarget::GLOBAL_TARGET:
           {
-          bool insertTarget = false;
           // Only add the global targets from CMAKE_BINARY_DIR,
           // not from the subdirs
           if (strcmp(makefile->GetStartOutputDirectory(),
                      makefile->GetHomeOutputDirectory())==0)
             {
-            insertTarget = true;
-            // only add the "edit_cache" target if it's not ccmake, because
-            // this will not work within the IDE
-            if (ti->first == "edit_cache")
-              {
-              const char* editCommand = makefile->GetDefinition
-                                                        ("CMAKE_EDIT_COMMAND");
-              if (editCommand == 0)
-                {
-                insertTarget = false;
-                }
-              else if (strstr(editCommand, "ccmake")!=NULL)
-                {
-                insertTarget = false;
-                }
-              }
-            }
-          if (insertTarget)
-            {
             this->AppendTarget(fout, ti->first.c_str(), 0,
                                make.c_str(), makefile, compiler.c_str());
             }
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index a2dd903..676d4ed 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -995,30 +995,10 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
         {
         case cmTarget::GLOBAL_TARGET:
           {
-          bool insertTarget = false;
           // Only add the global targets from CMAKE_BINARY_DIR,
           // not from the subdirs
           if (subdir.empty())
            {
-           insertTarget = true;
-           // only add the "edit_cache" target if it's not ccmake, because
-           // this will not work within the IDE
-           if (ti->first == "edit_cache")
-             {
-             const char* editCommand = makefile->GetDefinition
-                                                        ("CMAKE_EDIT_COMMAND");
-             if (editCommand == 0)
-               {
-               insertTarget = false;
-               }
-             else if (strstr(editCommand, "ccmake")!=NULL)
-               {
-               insertTarget = false;
-               }
-             }
-           }
-         if (insertTarget)
-           {
            this->AppendTarget(fout, ti->first, make, makeArgs, subdir, ": ");
            }
          }
diff --git a/Source/cmExtraSublimeTextGenerator.cxx b/Source/cmExtraSublimeTextGenerator.cxx
index baed733..9cbdd7c 100644
--- a/Source/cmExtraSublimeTextGenerator.cxx
+++ b/Source/cmExtraSublimeTextGenerator.cxx
@@ -172,31 +172,11 @@ void cmExtraSublimeTextGenerator::
         {
         case cmTarget::GLOBAL_TARGET:
           {
-          bool insertTarget = false;
           // Only add the global targets from CMAKE_BINARY_DIR,
           // not from the subdirs
           if (strcmp(makefile->GetStartOutputDirectory(),
                      makefile->GetHomeOutputDirectory())==0)
             {
-            insertTarget = true;
-            // only add the "edit_cache" target if it's not ccmake, because
-            // this will not work within the IDE
-            if (ti->first == "edit_cache")
-              {
-              const char* editCommand = makefile->GetDefinition
-                                                        ("CMAKE_EDIT_COMMAND");
-              if (editCommand == 0)
-                {
-                insertTarget = false;
-                }
-              else if (strstr(editCommand, "ccmake")!=NULL)
-                {
-                insertTarget = false;
-                }
-              }
-            }
-          if (insertTarget)
-            {
             this->AppendTarget(fout, ti->first.c_str(), *lg, 0,
                                make.c_str(), makefile, compiler.c_str(),
                                sourceFileFlags, false);
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 4ea5895..b2a0ef7 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -2158,11 +2158,11 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
     singleLine.erase(singleLine.begin(), singleLine.end());
     depends.erase(depends.begin(), depends.end());
 
-    // Use CMAKE_EDIT_COMMAND for the edit_cache rule if it is defined.
-    // Otherwise default to the interactive command-line interface.
-    if(mf->GetDefinition("CMAKE_EDIT_COMMAND"))
+    // Use generator preference for the edit_cache rule if it is defined.
+    std::string edit_cmd = this->GetEditCacheCommand();
+    if (!edit_cmd.empty())
       {
-      singleLine.push_back(mf->GetDefinition("CMAKE_EDIT_COMMAND"));
+      singleLine.push_back(edit_cmd);
       singleLine.push_back("-H$(CMAKE_SOURCE_DIR)");
       singleLine.push_back("-B$(CMAKE_BINARY_DIR)");
       cpackCommandLines.push_back(singleLine);
@@ -2174,13 +2174,14 @@ void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
     else
       {
       singleLine.push_back(cmakeCommand);
-      singleLine.push_back("-i");
-      singleLine.push_back(".");
+      singleLine.push_back("-E");
+      singleLine.push_back("echo");
+      singleLine.push_back("No interactive CMake dialog available.");
       cpackCommandLines.push_back(singleLine);
       (*targets)[editCacheTargetName] =
         this->CreateGlobalTarget(
           editCacheTargetName,
-          "Running interactive CMake command-line interface...",
+          "No interactive CMake dialog available...",
           &cpackCommandLines, depends, 0);
       }
     }
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 6577d08..2761158 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -251,6 +251,9 @@ public:
   virtual const char* GetRebuildCacheTargetName()  const { return 0; }
   virtual const char* GetCleanTargetName()         const { return 0; }
 
+  // Lookup edit_cache target command preferred by this generator.
+  virtual std::string GetEditCacheCommand() const { return ""; }
+
   // Class to track a set of dependencies.
   typedef cmTargetDependSet TargetDependSet;
 
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index d262397..e938065 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -637,6 +637,13 @@ bool cmGlobalNinjaGenerator::HasRule(const std::string &name)
 //----------------------------------------------------------------------------
 // Private virtual overrides
 
+std::string cmGlobalNinjaGenerator::GetEditCacheCommand() const
+{
+  // Ninja by design does not run interactive tools in the terminal,
+  // so our only choice is cmake-gui.
+  return cmSystemTools::GetCMakeGUICommand();
+}
+
 // TODO: Refactor to combine with cmGlobalUnixMakefileGenerator3 impl.
 void cmGlobalNinjaGenerator::ComputeTargetObjects(cmGeneratorTarget* gt) const
 {
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index be58df1..e9c8684 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -306,6 +306,7 @@ protected:
 
 
 private:
+  virtual std::string GetEditCacheCommand() const;
 
   /// @see cmGlobalGenerator::ComputeTargetObjects
   virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index ce95c08..cfd93c2 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -68,6 +68,42 @@ void cmGlobalUnixMakefileGenerator3
 }
 
 //----------------------------------------------------------------------------
+std::string cmGlobalUnixMakefileGenerator3::GetEditCacheCommand() const
+{
+  // If generating for an extra IDE, the edit_cache target cannot
+  // launch a terminal-interactive tool, so always use cmake-gui.
+  if(this->GetExtraGeneratorName())
+    {
+    return cmSystemTools::GetCMakeGUICommand();
+    }
+
+  // Use an internal cache entry to track the latest dialog used
+  // to edit the cache, and use that for the edit_cache target.
+  cmake* cm = this->GetCMakeInstance();
+  std::string editCacheCommand = cm->GetCMakeEditCommand();
+  if(!cm->GetCacheDefinition("CMAKE_EDIT_COMMAND") ||
+     !editCacheCommand.empty())
+    {
+    if(editCacheCommand.empty())
+      {
+      editCacheCommand = cmSystemTools::GetCMakeCursesCommand();
+      }
+    if(editCacheCommand.empty())
+      {
+      editCacheCommand = cmSystemTools::GetCMakeGUICommand();
+      }
+    if(!editCacheCommand.empty())
+      {
+      cm->AddCacheEntry
+        ("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(),
+         "Path to cache edit program executable.", cmCacheManager::INTERNAL);
+      }
+    }
+  const char* edit_cmd = cm->GetCacheDefinition("CMAKE_EDIT_COMMAND");
+  return edit_cmd? edit_cmd : "";
+}
+
+//----------------------------------------------------------------------------
 void
 cmGlobalUnixMakefileGenerator3
 ::ComputeTargetObjects(cmGeneratorTarget* gt) const
@@ -99,6 +135,14 @@ cmGlobalUnixMakefileGenerator3
     }
 }
 
+void cmGlobalUnixMakefileGenerator3::Configure()
+{
+  // Initialize CMAKE_EDIT_COMMAND cache entry.
+  this->GetEditCacheCommand();
+
+  this->cmGlobalGenerator::Configure();
+}
+
 void cmGlobalUnixMakefileGenerator3::Generate()
 {
   // first do superclass method
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index 5e9dce3..608f643 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -77,6 +77,8 @@ public:
   virtual void EnableLanguage(std::vector<std::string>const& languages,
                               cmMakefile *, bool optional);
 
+  virtual void Configure();
+
   /**
    * Generate the all required files for building this project/tree. This
    * basically creates a series of LocalGenerators for each directory and
@@ -186,6 +188,7 @@ protected:
 
   cmGeneratedFileStream *CommandDatabase;
 private:
+  virtual std::string GetEditCacheCommand() const;
   virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
 };
 
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 508eca1..8ed8d0a 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -699,17 +699,6 @@ cmLocalUnixMakefileGenerator3
     << "# Escaping for special characters.\n"
     << "EQUALS = =\n"
     << "\n";
-
-  if(const char* edit_cmd =
-     this->Makefile->GetDefinition("CMAKE_EDIT_COMMAND"))
-    {
-    makefileStream
-      << "# The program to use to edit the cache.\n"
-      << "CMAKE_EDIT_COMMAND = "
-      << this->ConvertShellCommand(edit_cmd, FULL) << "\n"
-      << "\n";
-    }
-
   makefileStream
     << "# The top-level source directory on which CMake was run.\n"
     << "CMAKE_SOURCE_DIR = "
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 8bde300..f0f9ef7 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -944,38 +944,6 @@ int cmake::AddCMakePaths()
     ("CMAKE_CPACK_COMMAND", cmSystemTools::GetCPackCommand().c_str(),
      "Path to cpack program executable.", cmCacheManager::INTERNAL);
 #endif
-  // if the edit command is not yet in the cache,
-  // or if CMakeEditCommand has been set on this object,
-  // then set the CMAKE_EDIT_COMMAND in the cache
-  // This will mean that the last gui to edit the cache
-  // will be the one that make edit_cache uses.
-  if(!this->GetCacheDefinition("CMAKE_EDIT_COMMAND")
-    || !this->CMakeEditCommand.empty())
-    {
-    // Find and save the command to edit the cache
-    std::string editCacheCommand;
-    if(!this->CMakeEditCommand.empty())
-      {
-      editCacheCommand = this->CMakeEditCommand;
-      }
-    if(!cmSystemTools::FileExists(editCacheCommand.c_str()) &&
-       !cmSystemTools::GetCMakeCursesCommand().empty())
-      {
-      editCacheCommand = cmSystemTools::GetCMakeCursesCommand();
-      }
-    if(!cmSystemTools::FileExists(editCacheCommand.c_str()) &&
-       !cmSystemTools::GetCMakeGUICommand().empty())
-      {
-      editCacheCommand = cmSystemTools::GetCMakeGUICommand();
-      }
-    if(cmSystemTools::FileExists(editCacheCommand.c_str()))
-      {
-      this->CacheManager->AddCacheEntry
-        ("CMAKE_EDIT_COMMAND", editCacheCommand.c_str(),
-         "Path to cache edit program executable.", cmCacheManager::INTERNAL);
-      }
-    }
-
   if(!cmSystemTools::FileExists(
        (cmSystemTools::GetCMakeRoot()+"/Modules/CMake.cmake").c_str()))
     {
diff --git a/Source/cmake.h b/Source/cmake.h
index d461fbd..dfec55c 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -335,9 +335,10 @@ class cmake
   std::vector<std::string> const& GetDebugConfigs();
 
   void SetCMakeEditCommand(std::string const& s)
-    {
-      this->CMakeEditCommand = s;
-    }
+    { this->CMakeEditCommand = s; }
+  std::string const& GetCMakeEditCommand() const
+    { return this->CMakeEditCommand; }
+
   void SetSuppressDevWarnings(bool v)
     {
       this->SuppressDevWarnings = v;

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=eaf5b7a776e24af55f6f7f254171c3e2d2932d9b
commit eaf5b7a776e24af55f6f7f254171c3e2d2932d9b
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Tue Nov 12 08:42:51 2013 -0500
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Tue Nov 12 08:43:33 2013 -0500

    cmGlobalGenerator: Do not propagate const through GetCMakeInstance
    
    Combine the const and non-const GetCMakeInstance to a const one and
    return a pointer to non-const cmake from it.

diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 8a753b7..6577d08 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -139,8 +139,7 @@ public:
   void SetCMakeInstance(cmake *cm);
 
   ///! Get the CMake instance
-  cmake *GetCMakeInstance() { return this->CMakeInstance; }
-  const cmake *GetCMakeInstance() const { return this->CMakeInstance; }
+  cmake *GetCMakeInstance() const { return this->CMakeInstance; }
 
   void SetConfiguredFilesPath(cmGlobalGenerator* gen);
   const std::vector<cmLocalGenerator *>& GetLocalGenerators() const {

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

Summary of changes:
 Help/variable/CMAKE_EDIT_COMMAND.rst      |    3 +-
 Source/cmExtraCodeBlocksGenerator.cxx     |   20 -------------
 Source/cmExtraEclipseCDT4Generator.cxx    |   20 -------------
 Source/cmExtraSublimeTextGenerator.cxx    |   20 -------------
 Source/cmGlobalGenerator.cxx              |   15 +++++----
 Source/cmGlobalGenerator.h                |    6 ++-
 Source/cmGlobalNinjaGenerator.cxx         |    7 ++++
 Source/cmGlobalNinjaGenerator.h           |    1 +
 Source/cmGlobalUnixMakefileGenerator3.cxx |   44 +++++++++++++++++++++++++++++
 Source/cmGlobalUnixMakefileGenerator3.h   |    3 ++
 Source/cmLocalUnixMakefileGenerator3.cxx  |   11 -------
 Source/cmake.cxx                          |   32 ---------------------
 Source/cmake.h                            |    7 ++--
 13 files changed, 73 insertions(+), 116 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list