浏览代码

Merge topic 'cleanup-unused-variable-check'

a4335a6 Fix unused cache warning after multiple configure iterations
a75ebe3 Refine unused cache variable warning
Brad King 14 年之前
父节点
当前提交
0506e37499
共有 4 个文件被更改,包括 28 次插入27 次删除
  1. 0 2
      Source/cmGlobalGenerator.cxx
  2. 25 22
      Source/cmake.cxx
  3. 2 2
      Source/cmake.h
  4. 1 1
      Tests/CMakeLists.txt

+ 0 - 2
Source/cmGlobalGenerator.cxx

@@ -903,8 +903,6 @@ void cmGlobalGenerator::Generate()
     }
 
   this->CMakeInstance->UpdateProgress("Generating done", -1);
-
-  this->CMakeInstance->RunCheckForUnusedVariables("generation");
 }
 
 //----------------------------------------------------------------------------

+ 25 - 22
Source/cmake.cxx

@@ -2346,11 +2346,6 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
   std::string oldstartoutputdir = this->GetStartOutputDirectory();
   this->SetStartDirectory(this->GetHomeDirectory());
   this->SetStartOutputDirectory(this->GetHomeOutputDirectory());
-  const bool warncli = this->WarnUnusedCli;
-  if (!this->ScriptMode)
-    {
-    this->WarnUnusedCli = false;
-    }
   int ret = this->Configure();
   if (ret || this->ScriptMode)
     {
@@ -2372,7 +2367,6 @@ int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
 #endif
     return ret;
     }
-  this->WarnUnusedCli = warncli;
   ret = this->Generate();
   std::string message = "Build files have been written to: ";
   message += this->GetHomeOutputDirectory();
@@ -2394,6 +2388,10 @@ int cmake::Generate()
     return -1;
     }
   this->GlobalGenerator->Generate();
+  if(this->WarnUnusedCli)
+    {
+    this->RunCheckForUnusedVariables();
+    }
   if(cmSystemTools::GetErrorOccuredFlag())
     {
     return -1;
@@ -4347,7 +4345,10 @@ void cmake::WatchUnusedCli(const char* var)
 {
 #ifdef CMAKE_BUILD_WITH_CMAKE
   this->VariableWatch->AddWatch(var, cmWarnUnusedCliWarning, this);
-  this->UsedCliVariables[var] = false;
+  if(this->UsedCliVariables.find(var) == this->UsedCliVariables.end())
+    {
+    this->UsedCliVariables[var] = false;
+    }
 #endif
 }
 
@@ -4355,27 +4356,29 @@ void cmake::UnwatchUnusedCli(const char* var)
 {
 #ifdef CMAKE_BUILD_WITH_CMAKE
   this->VariableWatch->RemoveWatch(var, cmWarnUnusedCliWarning);
-  this->UsedCliVariables[var] = true;
+  this->UsedCliVariables.erase(var);
 #endif
 }
 
-void cmake::RunCheckForUnusedVariables(const std::string& reason) const
+void cmake::RunCheckForUnusedVariables()
 {
 #ifdef CMAKE_BUILD_WITH_CMAKE
-    if(this->WarnUnusedCli)
+  bool haveUnused = false;
+  cmOStringStream msg;
+  msg << "Manually-specified variables were not used by the project:";
+  for(std::map<cmStdString, bool>::const_iterator
+        it = this->UsedCliVariables.begin();
+      it != this->UsedCliVariables.end(); ++it)
+    {
+    if(!it->second)
       {
-      std::map<std::string, bool>::const_iterator it;
-      for(it = this->UsedCliVariables.begin();
-          it != this->UsedCliVariables.end(); ++it)
-        {
-        if(!it->second)
-          {
-          std::string message = "CMake Warning: The variable, '" + it->first +
-            "', specified manually, was not used during the " + reason +
-            ".";
-          cmSystemTools::Message(message.c_str());
-          }
-        }
+      haveUnused = true;
+      msg << "\n  " << it->first;
       }
+    }
+  if(haveUnused)
+    {
+    this->IssueMessage(cmake::WARNING, msg.str(), cmListFileBacktrace());
+    }
 #endif
 }

+ 2 - 2
Source/cmake.h

@@ -368,8 +368,8 @@ class cmake
 
   void UnwatchUnusedCli(const char* var);
   void WatchUnusedCli(const char* var);
-  void RunCheckForUnusedVariables(const std::string& reason) const;
 protected:
+  void RunCheckForUnusedVariables();
   void InitializeProperties();
   int HandleDeleteCacheVariables(const char* var);
   cmPropertyMap Properties;
@@ -467,7 +467,7 @@ private:
   bool WarnUnused;
   bool WarnUnusedCli;
   bool CheckSystemVars;
-  std::map<std::string, bool> UsedCliVariables;
+  std::map<cmStdString, bool> UsedCliVariables;
   std::string CMakeEditCommand;
   std::string CMakeCommand;
   std::string CXXEnvironment;

+ 1 - 1
Tests/CMakeLists.txt

@@ -1244,7 +1244,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
     --build-project WarnUnusedCliUnused
     --build-options "-DUNUSED_CLI_VARIABLE=Unused")
   SET_TESTS_PROPERTIES(WarnUnusedCliUnused PROPERTIES
-    PASS_REGULAR_EXPRESSION "CMake Warning: The variable, 'UNUSED_CLI_VARIABLE'")
+    PASS_REGULAR_EXPRESSION "CMake Warning:.*Manually-specified variables were not used by the project:.*  UNUSED_CLI_VARIABLE")
   LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused")
 
   ADD_TEST(WarnUnusedCliUsed ${CMAKE_CTEST_COMMAND}