| 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} -E capabilities |
| RESULT_VARIABLE result |
| OUTPUT_VARIABLE stdout |
| ERROR_VARIABLE stderr |
| WORKING_DIRECTORY ${dir}) |
| |
| set(generators) |
| string(REGEX MATCHALL [["name":"[^"]+","platformSupport"]] generators_json "${stdout}") |
| foreach(gen_json IN LISTS generators_json) |
| if("${gen_json}" MATCHES [["name":"([^"]+)"]]) |
| set(gen "${CMAKE_MATCH_1}") |
| if(NOT gen MATCHES " (Win64|IA64|ARM)$") |
| list(APPEND generators "${gen}") |
| endif() |
| endif() |
| endforeach() |
| list(REMOVE_DUPLICATES generators) |
| |
| # 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}'") |