Bladeren bron

Refine unused cache variable warning

List all unused variables in one warning.  Cleanup implementation to run
the check exactly once at the end of generation.
Brad King 14 jaren geleden
bovenliggende
commit
a75ebe3ea4
4 gewijzigde bestanden met toevoegingen van 23 en 25 verwijderingen
  1. 0 2
      Source/cmGlobalGenerator.cxx
  2. 20 20
      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");
 }
 
 //----------------------------------------------------------------------------

+ 20 - 20
Source/cmake.cxx

@@ -2310,11 +2310,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)
     {
@@ -2336,7 +2331,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();
@@ -2358,6 +2352,10 @@ int cmake::Generate()
     return -1;
     }
   this->GlobalGenerator->Generate();
+  if(this->WarnUnusedCli)
+    {
+    this->RunCheckForUnusedVariables();
+    }
   if(cmSystemTools::GetErrorOccuredFlag())
     {
     return -1;
@@ -4320,23 +4318,25 @@ void cmake::UnwatchUnusedCli(const char* 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;
@@ -465,7 +465,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

@@ -1202,7 +1202,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}