summaryrefslogtreecommitdiffstats
path: root/Tests/CMakeTestAllGenerators
diff options
context:
space:
mode:
authorDavid Cole <david.cole@kitware.com>2009-10-22 14:14:40 (GMT)
committerDavid Cole <david.cole@kitware.com>2009-10-22 14:14:40 (GMT)
commit57214662ae56950bd40ab641a5c19de15ced86ab (patch)
treed958b98e949cdbd7b915fb4e3d9eac575c78fb7c /Tests/CMakeTestAllGenerators
parent44c4600ae5f18eaa821d7fe572cddb7ef6e7eff0 (diff)
downloadCMake-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')
-rw-r--r--Tests/CMakeTestAllGenerators/RunCMake.cmake95
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}'")