From 56e3a35ece5f4db276bd02c9849e7b58ca479970 Mon Sep 17 00:00:00 2001 From: Ken Martin Date: Wed, 28 Feb 2007 12:25:19 -0500 Subject: [PATCH] BUG: allow system information to accept the -G option --- CMakeLists.txt | 46 +++++++++++++++++++++++++++++- Source/CMakeLists.txt | 40 -------------------------- Source/cmake.cxx | 65 ++++++++++++++++++++++++++++++++----------- 3 files changed, 94 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 14179edcd..fe9c53cb5 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 44d50dab8..217d4077f 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 3e8e65e76..59e81cb25 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2915,10 +2915,8 @@ bool cmake::GetPropertyAsBool(const char* prop) int cmake::GetSystemInformation(std::vector& 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& 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& 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());