| # Avoid QtTest library timeouts before ctest's timeout. | |
| set(ENV{QTEST_FUNCTION_TIMEOUT} 3600000) | |
| 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() | |
| set(_instrumentation_files | |
| "${_srcdir}/main.cxx" | |
| "${_srcdir}/lib.h" | |
| "${_srcdir}/lib.cxx" | |
| "${_srcdir}/callback.cmake" | |
| ) | |
| foreach(_instrumentation_file IN LISTS _instrumentation_files) | |
| if(EXISTS "${_instrumentation_file}.in") | |
| cmake_path(GET _instrumentation_file FILENAME _instrumentation_file_name) | |
| configure_file("${_instrumentation_file}.in" "${_workdir}/src/${_instrumentation_file_name}" @ONLY) | |
| endif() | |
| endforeach() | |
| 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:installDir | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-installDir/src/" | |
| "--preset=installDir" | |
| ) | |
| run_cmake_gui_test(presetArg:noExist | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetArg-noExist/src" | |
| "--preset=noExist" | |
| ) | |
| run_cmake_gui_test(changingPresets) | |
| run_cmake_gui_test(presetApplyOrdering:apply | |
| DO_CONFIGURE | |
| CONFIGURE_ARGS -DRACE_VALUE:STRING=old | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-apply/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-apply/build" | |
| ) | |
| run_cmake_gui_test(presetApplyOrdering:replace | |
| DO_CONFIGURE | |
| CONFIGURE_ARGS -DRACE_VALUE:STRING=old | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-replace/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-replace/build" | |
| ) | |
| run_cmake_gui_test(presetApplyOrdering:replaceCycle | |
| DO_CONFIGURE | |
| CONFIGURE_ARGS -DRACE_VALUE:STRING=old | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-replaceCycle/src" | |
| -B "${CMakeGUITest_BINARY_DIR}/presetApplyOrdering-replaceCycle/build" | |
| ) | |
| run_cmake_gui_test(presetApplyStartup:available | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetApplyStartup-available/src" | |
| "--preset=raceA" | |
| ) | |
| run_cmake_gui_test(presetApplyStartup:unavailable | |
| ARGS | |
| -S "${CMakeGUITest_BINARY_DIR}/presetApplyStartup-unavailable/src" | |
| "--preset=doesNotExist" | |
| ) | |
| if("${CMakeGUITest_GENERATOR}" MATCHES "Make|Ninja|FASTBuild") | |
| run_cmake_gui_test(instrumentation) | |
| set(instrumentation_build_dir | |
| "${CMakeGUITest_BINARY_DIR}/instrumentation/build" | |
| ) | |
| include(${CMAKE_CURRENT_LIST_DIR}/instrumentation/check-data-dir.cmake) | |
| endif() |