Przeglądaj źródła

BUG: allow system information to accept the -G option

Ken Martin 18 lat temu
rodzic
commit
56e3a35ece
3 zmienionych plików z 94 dodań i 57 usunięć
  1. 45 1
      CMakeLists.txt
  2. 0 40
      Source/CMakeLists.txt
  3. 49 16
      Source/cmake.cxx

+ 45 - 1
CMakeLists.txt

@@ -430,7 +430,51 @@ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/Templates/CTestScript.cmake.in"
   "${CMAKE_CURRENT_BINARY_DIR}/CTestScript.cmake"
   @ONLY IMMEDIATE)
 
+# Testing
+IF (NOT DART_ROOT)
+  SET(MAKEPROGRAM ${CMAKE_MAKE_PROGRAM})
+ENDIF (NOT DART_ROOT)
+
+IF(BUILD_TESTING)
+  SET(CMAKE_TEST_GENERATOR "" CACHE STRING "Generator used when running tests")
+  SET(CMAKE_TEST_MAKEPROGRAM "" CACHE FILEPATH "Generator used when running tests")
+  IF(NOT CMAKE_TEST_GENERATOR)
+    SET(CMAKE_TEST_GENERATOR "${CMAKE_GENERATOR}")
+    SET(CMAKE_TEST_MAKEPROGRAM "${MAKEPROGRAM}")
+  ELSE(NOT CMAKE_TEST_GENERATOR)
+    SET(CMAKE_TEST_DIFFERENT_GENERATOR TRUE)
+  ENDIF(NOT CMAKE_TEST_GENERATOR)
+
+  # Are we testing with the MSVC compiler?
+  SET(CMAKE_TEST_MSVC 0)
+  IF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
+    SET(CMAKE_TEST_MSVC 1)
+  ELSE(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
+    IF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR
+        "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio")
+      SET(CMAKE_TEST_MSVC 1)
+    ENDIF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR
+      "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio")
+  ENDIF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
+
+  SET(CMAKE_TEST_SYSTEM_LIBRARIES 0)
+  FOREACH(util CURL EXPAT XMLRPC ZLIB)
+    IF(CMAKE_USE_SYSTEM_${util})
+      SET(CMAKE_TEST_SYSTEM_LIBRARIES 1)
+    ENDIF(CMAKE_USE_SYSTEM_${util})
+  ENDFOREACH(util)
+
+  # This variable is set by cmake, however to
+  # test cmake we want to make sure that
+  # the ctest from this cmake is used for testing
+  # and not the ctest from the cmake building and testing
+  # cmake.
+  SET(CMAKE_CTEST_COMMAND "${EXECUTABLE_OUTPUT_PATH}/ctest")
+  SET(CMAKE_CMAKE_COMMAND "${EXECUTABLE_OUTPUT_PATH}/cmake")
+ENDIF(BUILD_TESTING)
+
 ADD_TEST(SystemInformationNew 
-  "${EXECUTABLE_OUTPUT_PATH}/cmake" --system-information
+  "${CMAKE_CMAKE_COMMAND}" --system-information
+  -G "${CMAKE_TEST_GENERATOR}"
   )
 

+ 0 - 40
Source/CMakeLists.txt

@@ -353,47 +353,7 @@ IF(BUILD_WXDialog)
 ENDIF(BUILD_WXDialog)
 
 # Testing
-IF (NOT DART_ROOT)
-  SET(MAKEPROGRAM ${CMAKE_MAKE_PROGRAM})
-ENDIF (NOT DART_ROOT)
-
 IF(BUILD_TESTING)
-  SET(CMAKE_TEST_GENERATOR "" CACHE STRING "Generator used when running tests")
-  SET(CMAKE_TEST_MAKEPROGRAM "" CACHE FILEPATH "Generator used when running tests")
-  IF(NOT CMAKE_TEST_GENERATOR)
-    SET(CMAKE_TEST_GENERATOR "${CMAKE_GENERATOR}")
-    SET(CMAKE_TEST_MAKEPROGRAM "${MAKEPROGRAM}")
-  ELSE(NOT CMAKE_TEST_GENERATOR)
-    SET(CMAKE_TEST_DIFFERENT_GENERATOR TRUE)
-  ENDIF(NOT CMAKE_TEST_GENERATOR)
-
-  # Are we testing with the MSVC compiler?
-  SET(CMAKE_TEST_MSVC 0)
-  IF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
-    SET(CMAKE_TEST_MSVC 1)
-  ELSE(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
-    IF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR
-        "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio")
-      SET(CMAKE_TEST_MSVC 1)
-    ENDIF("${CMAKE_TEST_GENERATOR}" MATCHES "NMake" OR
-      "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio")
-  ENDIF(MSVC AND NOT CMAKE_TEST_DIFFERENT_GENERATOR)
-
-  SET(CMAKE_TEST_SYSTEM_LIBRARIES 0)
-  FOREACH(util CURL EXPAT XMLRPC ZLIB)
-    IF(CMAKE_USE_SYSTEM_${util})
-      SET(CMAKE_TEST_SYSTEM_LIBRARIES 1)
-    ENDIF(CMAKE_USE_SYSTEM_${util})
-  ENDFOREACH(util)
-
-  # This variable is set by cmake, however to
-  # test cmake we want to make sure that
-  # the ctest from this cmake is used for testing
-  # and not the ctest from the cmake building and testing
-  # cmake.
-  SET(CMAKE_CTEST_COMMAND "${EXECUTABLE_OUTPUT_PATH}/ctest")
-  SET(CMAKE_CMAKE_COMMAND "${EXECUTABLE_OUTPUT_PATH}/cmake")
-
   # Should the long tests be run?
   OPTION(CMAKE_RUN_LONG_TESTS "Should the long tests be run (such as Bootstrap)." ON)
   MARK_AS_ADVANCED(CMAKE_RUN_LONG_TESTS)

+ 49 - 16
Source/cmake.cxx

@@ -2915,10 +2915,8 @@ bool cmake::GetPropertyAsBool(const char* prop)
 
 int cmake::GetSystemInformation(std::vector<std::string>& args)
 {
-  // we must create a temporary directory, copy some files to it
-  // run cmake on it, and then collect the results.
-  
   // so create the directory
+  std::string resultFile;
   std::string cwd = cmSystemTools::GetCurrentWorkingDirectory();
   std::string destPath = cwd + "/__cmake_systeminformation";
   cmSystemTools::RemoveADirectory(destPath.c_str());
@@ -2928,7 +2926,53 @@ int cmake::GetSystemInformation(std::vector<std::string>& args)
       "writable directory!\n";
     return 1;
     }
-  
+
+  // process the arguments
+  for(unsigned int i=1; i < args.size(); ++i)
+    {
+    std::string arg = args[i];
+    if(arg.find("-V",0) == 0)
+      {
+      this->Verbose = true;
+      }
+    else if(arg.find("-G",0) == 0)
+      {
+      std::string value = arg.substr(2);
+      if(value.size() == 0)
+        {
+        ++i;
+        if(i >= args.size())
+          {
+          cmSystemTools::Error("No generator specified for -G");
+          return -1;
+          }
+        value = args[i];
+        }
+      cmGlobalGenerator* gen =
+        this->CreateGlobalGenerator(value.c_str());
+      if(!gen)
+        {
+        cmSystemTools::Error("Could not create named generator ",
+                             value.c_str());
+        }
+      else
+        {
+        this->SetGlobalGenerator(gen);
+        }
+      }
+    // no option assume it is the output file
+    else
+      {
+      if (!cmSystemTools::FileIsFullPath(arg.c_str()))
+        {
+        resultFile += cwd;
+        resultFile += "/";
+        }
+      resultFile = arg;
+      }
+    }
+
+
   // we have to find the module directory, so we can copy the files
   this->AddCMakePaths(args[0].c_str());
   std::string modulesPath = 
@@ -2948,22 +2992,11 @@ int cmake::GetSystemInformation(std::vector<std::string>& args)
     }
   
   // do we write to a file or to stdout?
-  std::string resultFile;
-
-  if (args.size() == 1)
+  if (resultFile.size() == 0)
     {
     resultFile = cwd;
     resultFile += "/__cmake_systeminformation/results.txt";
     }
-  else
-    {
-    if (!cmSystemTools::FileIsFullPath(args[1].c_str()))
-      {
-      resultFile += cwd;
-      resultFile += "/";
-      }
-    resultFile = args[1];
-    }
 
   // now run cmake on the CMakeLists file
   cmSystemTools::ChangeDirectory(destPath.c_str());