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