| function(run_cmake_gui_test name) | |
| if(DEFINED ENV{CMakeGUITest_TEST_FILTER} AND NOT name MATCHES "$ENV{CMakeGUITest_TEST_FILTER}") | |
| return() | |
| endif() | |
| set(_fail) | |
| cmake_parse_arguments(_rcgt | |
| "DO_CONFIGURE" | |
| "GENERATOR" | |
| "ARGS;CONFIGURE_ARGS" | |
| ${ARGN} | |
| ) | |
| string(REPLACE ":" "-" _file_name "${name}") | |
| set(_srcdir "${CMakeGUITest_SOURCE_DIR}/${_file_name}") | |
| set(_workdir "${CMakeGUITest_BINARY_DIR}/${_file_name}") | |
| file(REMOVE_RECURSE "${_workdir}") | |
| file(MAKE_DIRECTORY "${_workdir}") | |
| set(_ini_in "${_srcdir}/CMakeSetup.ini.in") | |
| if(EXISTS "${_ini_in}") | |
| configure_file("${_ini_in}" "${_workdir}/config/Kitware/CMakeSetup.ini" @ONLY) | |
| endif() | |
| set(_cmakelists_in "${_srcdir}/CMakeLists.txt.in") | |
| if(EXISTS "${_cmakelists_in}") | |
| configure_file("${_cmakelists_in}" "${_workdir}/src/CMakeLists.txt" @ONLY) | |
| endif() | |
| set(_cmakepresets_in "${_srcdir}/CMakePresets.json.in") | |
| if(EXISTS "${_cmakepresets_in}") | |
| configure_file("${_cmakepresets_in}" "${_workdir}/src/CMakePresets.json" @ONLY) | |
| endif() | |
| if(_rcgt_DO_CONFIGURE) | |
| if(NOT _rcgt_GENERATOR) | |
| set(_rcgt_GENERATOR "${CMakeGUITest_GENERATOR}") | |
| endif() | |
| execute_process( | |
| COMMAND "${CMAKE_COMMAND}" | |
| -S "${_workdir}/src" | |
| -B "${_workdir}/build" | |
| -G "${_rcgt_GENERATOR}" | |
| ${_rcgt_CONFIGURE_ARGS} | |
| RESULT_VARIABLE _result | |
| OUTPUT_VARIABLE _output | |
| ERROR_VARIABLE _error | |
| ) | |
| if(_result) | |
| set(_fail 1) | |
| string(REPLACE "\n" "\n " _formatted_output "${_output}") | |
| string(REPLACE "\n" "\n " _formatted_error "${_error}") | |
| message(SEND_ERROR | |
| "Configuring ${_workdir}/src failed with exit code ${_result}, should be 0\n" | |
| "stdout:\n ${_formatted_output}\n" | |
| "stderr:\n ${_formatted_error}" | |
| ) | |
| endif() | |
| endif() | |
| set(ENV{CMake_GUI_TEST_NAME} "${name}") | |
| set(ENV{CMake_GUI_CONFIG_DIR} "${_workdir}/config") | |
| execute_process( | |
| COMMAND "${CMakeGUITest_COMMAND}" ${_rcgt_ARGS} | |
| WORKING_DIRECTORY "${_workdir}" | |
| RESULT_VARIABLE _result | |
| OUTPUT_VARIABLE _output | |
| ERROR_VARIABLE _error | |
| ) | |
| if(_result) | |
| set(_fail 1) | |
| string(REPLACE "\n" "\n " _formatted_output "${_output}") | |
| string(REPLACE "\n" "\n " _formatted_error "${_error}") | |
| message(SEND_ERROR "CMake GUI test ${name} failed with exit code ${_result}, should be 0\n" | |
| "stdout:\n ${_formatted_output}\n" | |
| "stderr:\n ${_formatted_error}" | |
| ) | |
| endif() | |
| if(NOT _fail) | |
| message(STATUS "${name} -- passed") | |
| endif() | |
| endfunction() | |
| run_cmake_gui_test(sourceBinaryArgs:sourceAndBinaryDir | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-sourceAndBinaryDir/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-sourceAndBinaryDir/build" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:sourceAndBinaryDirRelative | |
| ARGS | |
| "-Ssrc" | |
| "-Bbuild" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:sourceDir | |
| ARGS | |
| "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-sourceDir/src" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:binaryDir | |
| DO_CONFIGURE | |
| ARGS | |
| "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-binaryDir/build" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:noExist | |
| ARGS | |
| "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-noExist/noexist" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:noExistConfig | |
| ARGS | |
| "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-noExistConfig/noexist" | |
| ) | |
| run_cmake_gui_test(sourceBinaryArgs:noExistConfigExists | |
| DO_CONFIGURE | |
| ARGS | |
| "${CMakeGUITest_BINARY_DIR}/sourceBinaryArgs-noExistConfigExists/noexist" | |
| ) | |
| run_cmake_gui_test(simpleConfigure:success) | |
| run_cmake_gui_test(simpleConfigure:fail) | |
| unset(ENV{ADDED_VARIABLE}) | |
| set(ENV{KEPT_VARIABLE} "Kept variable") | |
| set(ENV{CHANGED_VARIABLE} "This variable will be changed") | |
| set(ENV{REMOVED_VARIABLE} "Removed variable") | |
| run_cmake_gui_test(environment) | |
| run_cmake_gui_test(presetArg:preset | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-preset/src" | |
| "--preset=ninja" | |
| ) | |
| run_cmake_gui_test(presetArg:presetBinary | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-presetBinary/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetArg-presetBinary/build" | |
| "--preset=ninja" | |
| ) | |
| run_cmake_gui_test(presetArg:presetBinaryChange | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-presetBinaryChange/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetArg-presetBinaryChange/build" | |
| "--preset=ninja" | |
| ) | |
| run_cmake_gui_test(presetArg:noPresetBinaryChange | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-noPresetBinaryChange/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetArg-noPresetBinaryChange/build" | |
| ) | |
| run_cmake_gui_test(presetArg:presetConfigExists | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-presetConfigExists/src" | |
| "--preset=ninja" | |
| ) | |
| run_cmake_gui_test(presetArg:noExist | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-noExist/src" | |
| "--preset=noExist" | |
| ) | |
| run_cmake_gui_test(changingPresets) |