summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt46
-rw-r--r--Source/CMakeLists.txt40
-rw-r--r--Source/cmake.cxx65
3 files changed, 94 insertions, 57 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14179ed..fe9c53c 100644
--- a/CMakeLists.txt
+++ b/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}"
)
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 44d50da..217d407 100644
--- a/Source/CMakeLists.txt
+++ b/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)
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 3e8e65e..59e81cb 100644
--- a/Source/cmake.cxx
+++ b/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());