CMake/Tests/CMakeTestAllGenerators/RunCMake.cmake

96 lines
2.7 KiB
CMake

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}'")