diff options
author | David Cole <david.cole@kitware.com> | 2009-10-22 14:14:40 (GMT) |
---|---|---|
committer | David Cole <david.cole@kitware.com> | 2009-10-22 14:14:40 (GMT) |
commit | 57214662ae56950bd40ab641a5c19de15ced86ab (patch) | |
tree | d958b98e949cdbd7b915fb4e3d9eac575c78fb7c /Tests/CMakeTestAllGenerators/RunCMake.cmake | |
parent | 44c4600ae5f18eaa821d7fe572cddb7ef6e7eff0 (diff) | |
download | CMake-57214662ae56950bd40ab641a5c19de15ced86ab.zip CMake-57214662ae56950bd40ab641a5c19de15ced86ab.tar.gz CMake-57214662ae56950bd40ab641a5c19de15ced86ab.tar.bz2 |
Add test of all cmake -G generators. Ignore any errors from this as not all generators are expected to be usable on all machines. Help to increase coverage of the various generators and cmake.cxx itself.
Diffstat (limited to 'Tests/CMakeTestAllGenerators/RunCMake.cmake')
-rw-r--r-- | Tests/CMakeTestAllGenerators/RunCMake.cmake | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/Tests/CMakeTestAllGenerators/RunCMake.cmake b/Tests/CMakeTestAllGenerators/RunCMake.cmake new file mode 100644 index 0000000..dcf4a23 --- /dev/null +++ b/Tests/CMakeTestAllGenerators/RunCMake.cmake @@ -0,0 +1,95 @@ +if(NOT DEFINED CMake_SOURCE_DIR) + message(FATAL_ERROR "CMake_SOURCE_DIR not defined") +endif() + +if(NOT DEFINED dir) + message(FATAL_ERROR "dir not defined") +endif() + +# Analyze 'cmake --help' output for list of available generators: +# +execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${dir}) +execute_process(COMMAND ${CMAKE_COMMAND} --help + RESULT_VARIABLE result + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr + WORKING_DIRECTORY ${dir}) + +string(REPLACE ";" "\\;" stdout "${stdout}") +string(REPLACE "\n" "E;" stdout "${stdout}") + +set(collecting 0) +set(generators) +foreach(eline ${stdout}) + string(REGEX REPLACE "^(.*)E$" "\\1" line "${eline}") + if(collecting AND NOT line STREQUAL "") + if(line MATCHES "=") + string(REGEX REPLACE "^ (.+)= (.*)$" "\\1" gen "${line}") + if(gen MATCHES "[A-Za-z]") + string(REGEX REPLACE "^(.*[^ ]) +$" "\\1" gen "${gen}") + if(gen) + set(generators ${generators} ${gen}) + endif() + endif() + else() + if(line MATCHES "^ [A-Za-z0-9]") + string(REGEX REPLACE "^ (.+)$" "\\1" gen "${line}") + string(REGEX REPLACE "^(.*[^ ]) +$" "\\1" gen "${gen}") + if(gen) + set(generators ${generators} ${gen}) + endif() + endif() + endif() + endif() + if(line STREQUAL "The following generators are available on this platform:") + set(collecting 1) + endif() +endforeach() + +# Also call with one non-existent generator: +# +set(generators ${generators} "BOGUS_CMAKE_GENERATOR") + +# Call cmake with -G on each available generator. We do not care if this +# succeeds or not. We expect it *not* to succeed if the underlying packaging +# tools are not installed on the system... This test is here simply to add +# coverage for the various cmake generators, even/especially to test ones +# where the tools are not installed. +# +message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)") + +message(STATUS "CMake generators='${generators}'") + +# First setup a source tree to run CMake on. +# +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMake_SOURCE_DIR}/Tests/CTestTest/SmallAndFast + ${dir}/Source +) + +foreach(g ${generators}) + message(STATUS "cmake -G \"${g}\" ..") + + # Create a binary directory for each generator: + # + execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory + ${dir}/Source/${g} + ) + + # Run cmake: + # + execute_process(COMMAND ${CMAKE_COMMAND} -G ${g} .. + RESULT_VARIABLE result + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr + WORKING_DIRECTORY ${dir}/Source/${g} + ) + + message(STATUS "result='${result}'") + message(STATUS "stdout='${stdout}'") + message(STATUS "stderr='${stderr}'") + message(STATUS "") +endforeach() + +message(STATUS "CMake generators='${generators}'") +message(STATUS "CMAKE_COMMAND='${CMAKE_COMMAND}'") |