diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtTestHelpers.cmake | 99 |
1 files changed, 57 insertions, 42 deletions
diff --git a/cmake/QtTestHelpers.cmake b/cmake/QtTestHelpers.cmake index 061452dd40..4bfa8f4619 100644 --- a/cmake/QtTestHelpers.cmake +++ b/cmake/QtTestHelpers.cmake @@ -33,13 +33,22 @@ function(qt_internal_add_benchmark target) ${exec_args} ) + qt_internal_collect_command_environment(benchmark_env_path benchmark_env_plugin_path) + # Add a ${target}_benchmark generator target, to run single benchmark more easily. - # TODO: Need to use test wrapper script with propagated environment variables to run benchmarks. + set(benchmark_wrapper_file "${arg_OUTPUT_DIRECTORY}/${target}Wrapper$<CONFIG>.cmake") + qt_internal_create_command_script(COMMAND "$<TARGET_FILE:${target}>" + OUTPUT_FILE "${benchmark_wrapper_file}" + ENVIRONMENT "PATH" "${benchmark_env_path}" + "QT_PLUGIN_PATH" "${benchmark_env_plugin_path}" + ) + add_custom_target("${target}_benchmark" VERBATIM COMMENT "Running benchmark ${target}" - COMMAND "$<TARGET_FILE:${target}>" - ) + COMMAND "${CMAKE_COMMAND}" "-P" "${benchmark_wrapper_file}" + ) + add_dependencies("${target}_benchmark" "${target}") #Add benchmark to meta target. @@ -259,42 +268,6 @@ function(qt_internal_add_test name) endif() endif() - # Get path to <qt_relocatable_install_prefix>/bin, as well as CMAKE_INSTALL_PREFIX/bin, then - # prepend them to the PATH environment variable. - # It's needed on Windows to find the shared libraries and plugins. - # qt_relocatable_install_prefix is dynamically computed from the location of where the Qt CMake - # package is found. - # The regular CMAKE_INSTALL_PREFIX can be different for example when building standalone tests. - # Any given CMAKE_INSTALL_PREFIX takes priority over qt_relocatable_install_prefix for the - # PATH environment variable. - set(install_prefixes "${CMAKE_INSTALL_PREFIX}") - if(QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX) - list(APPEND install_prefixes "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}") - endif() - - file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" test_env_path) - foreach(install_prefix ${install_prefixes}) - file(TO_NATIVE_PATH "${install_prefix}/${INSTALL_BINDIR}" install_prefix) - set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}${install_prefix}") - endforeach() - set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}$ENV{PATH}") - string(REPLACE ";" "\;" test_env_path "${test_env_path}") - - # Add the install prefix to list of plugin paths when doing a prefix build - if(NOT QT_INSTALL_DIR) - foreach(install_prefix ${install_prefixes}) - file(TO_NATIVE_PATH "${install_prefix}/${INSTALL_BINDIR}" install_prefix) - list(APPEND plugin_paths "${install_prefix}") - endforeach() - endif() - - #TODO: Collect all paths from known repositories when performing a super - # build. - file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/${INSTALL_PLUGINSDIR}" install_pluginsdir) - list(APPEND plugin_paths "${install_pluginsdir}") - list(JOIN plugin_paths "${QT_PATH_SEPARATOR}" plugin_paths_joined) - string(REPLACE ";" "\;" plugin_paths_joined "${plugin_paths_joined}") - if (ANDROID) qt_internal_android_test_arguments("${name}" test_executable extra_test_args) set(test_working_dir "${CMAKE_CURRENT_BINARY_DIR}") @@ -319,13 +292,15 @@ function(qt_internal_add_test name) endif() endif() + qt_internal_collect_command_environment(test_env_path test_env_plugin_path) + if(arg_NO_WRAPPER OR QT_NO_TEST_WRAPPERS) add_test(NAME "${name}" COMMAND ${test_executable} ${extra_test_args} WORKING_DIRECTORY "${test_working_dir}") set_property(TEST "${name}" APPEND PROPERTY ENVIRONMENT "PATH=${test_env_path}" "QT_TEST_RUNNING_IN_CTEST=1" - "QT_PLUGIN_PATH=${plugin_paths_joined}" + "QT_PLUGIN_PATH=${test_env_plugin_path}" ) else() set(test_wrapper_file "${CMAKE_CURRENT_BINARY_DIR}/${name}Wrapper$<CONFIG>.cmake") @@ -336,7 +311,7 @@ function(qt_internal_add_test name) OUTPUT_FILE "${test_wrapper_file}" ENVIRONMENT "QT_TEST_RUNNING_IN_CTEST" 1 "PATH" "${test_env_path}" - "QT_PLUGIN_PATH" "${plugin_paths_joined}" + "QT_PLUGIN_PATH" "${test_env_plugin_path}" ) endif() @@ -584,7 +559,7 @@ execute_process(COMMAND ${extra_runner} ${arg_COMMAND} ) ${post_run} if(NOT result EQUAL 0) - message(FATAL_ERROR) + message(FATAL_ERROR \"${arg_COMMAND} execution failed.\") endif()" ) endfunction() @@ -631,3 +606,43 @@ function(qt_internal_wrap_command_arguments argument_list) list(JOIN ${argument_list} " " ${argument_list}) set(${argument_list} "${${argument_list}}" PARENT_SCOPE) endfunction() + +function(qt_internal_collect_command_environment out_path out_plugin_path) + # Get path to <qt_relocatable_install_prefix>/bin, as well as CMAKE_INSTALL_PREFIX/bin, and + # combine them with the PATH environment variable. + # It's needed on Windows to find the shared libraries and plugins. + # qt_relocatable_install_prefix is dynamically computed from the location of where the Qt CMake + # package is found. + # The regular CMAKE_INSTALL_PREFIX can be different for example when building standalone tests. + # Any given CMAKE_INSTALL_PREFIX takes priority over qt_relocatable_install_prefix for the + # PATH environment variable. + set(install_prefixes "${CMAKE_INSTALL_PREFIX}") + if(QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX) + list(APPEND install_prefixes "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}") + endif() + + file(TO_NATIVE_PATH "${CMAKE_CURRENT_BINARY_DIR}" test_env_path) + foreach(install_prefix ${install_prefixes}) + file(TO_NATIVE_PATH "${install_prefix}/${INSTALL_BINDIR}" install_prefix) + set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}${install_prefix}") + endforeach() + set(test_env_path "${test_env_path}${QT_PATH_SEPARATOR}$ENV{PATH}") + string(REPLACE ";" "\;" test_env_path "${test_env_path}") + set(${out_path} "${test_env_path}" PARENT_SCOPE) + + # Add the install prefix to list of plugin paths when doing a prefix build + if(NOT QT_INSTALL_DIR) + foreach(install_prefix ${install_prefixes}) + file(TO_NATIVE_PATH "${install_prefix}/${INSTALL_BINDIR}" install_prefix) + list(APPEND plugin_paths "${install_prefix}") + endforeach() + endif() + + #TODO: Collect all paths from known repositories when performing a super + # build. + file(TO_NATIVE_PATH "${PROJECT_BINARY_DIR}/${INSTALL_PLUGINSDIR}" install_pluginsdir) + list(APPEND plugin_paths "${install_pluginsdir}") + list(JOIN plugin_paths "${QT_PATH_SEPARATOR}" plugin_paths_joined) + string(REPLACE ";" "\;" plugin_paths_joined "${plugin_paths_joined}") + set(${out_plugin_path} "${plugin_paths_joined}" PARENT_SCOPE) +endfunction() |