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") if(DEFINED ENV{PWD}) set(_old_pwd "$ENV{PWD}") else() set(_old_pwd) endif() set(ENV{PWD} "${_workdir}") execute_process( COMMAND "${CMakeGUITest_COMMAND}" ${_rcgt_ARGS} WORKING_DIRECTORY "${_workdir}" RESULT_VARIABLE _result OUTPUT_VARIABLE _output ERROR_VARIABLE _error ) if(DEFINED _old_pwd) set(ENV{PWD} "${_old_pwd}") else() set(ENV{PWD}) endif() 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)