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}'") # If we'll be testing any of the MinGW Makefiles generators, adjust the # ENV{PATH} to make sure libgmp-10.dll can be loaded as needed. But only if # the testing machine has a default MinGW install... (If you have a # non-default install, append to the PATH before running the test...) # if(generators MATCHES "MinGW Makefiles") if(EXISTS "C:/MinGW/bin/libgmp-10.dll") string(TOLOWER "$ENV{PATH}" path) if(NOT path MATCHES "/mingw/bin") if(UNIX) set(sep ":") set(mingw_bin "/mingw/bin") else() set(sep ";") set(mingw_bin "C:/MinGW/bin") endif() set(ENV{PATH} "$ENV{PATH}${sep}${mingw_bin}") message(STATUS "info: appending '${sep}${mingw_bin}' to the PATH") endif() endif() endif() # 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}'")