diff --git a/cmake/QtResourceHelpers.cmake b/cmake/QtResourceHelpers.cmake index 3dcad1f5d8a..2df1fed50fa 100644 --- a/cmake/QtResourceHelpers.cmake +++ b/cmake/QtResourceHelpers.cmake @@ -5,6 +5,10 @@ function(qt_internal_add_resource target resourceName) if(NOT TARGET "${target}") message(FATAL_ERROR "${target} is not a target.") endif() + qt_internal_is_skipped_test(skipped ${target}) + if(skipped) + return() + endif() qt_internal_is_in_test_batch(in_batch ${target}) if(in_batch) _qt_internal_test_batch_target_name(target) diff --git a/cmake/QtTargetHelpers.cmake b/cmake/QtTargetHelpers.cmake index 4bb187a44ef..183baa8da41 100644 --- a/cmake/QtTargetHelpers.cmake +++ b/cmake/QtTargetHelpers.cmake @@ -20,6 +20,10 @@ function(qt_internal_extend_target target) if(NOT TARGET "${target}") message(FATAL_ERROR "${target} is not a target.") endif() + qt_internal_is_skipped_test(skipped ${target}) + if(skipped) + return() + endif() qt_internal_is_in_test_batch(in_batch ${target}) if(in_batch) _qt_internal_test_batch_target_name(target) @@ -1075,6 +1079,10 @@ function(qt_internal_undefine_global_definition target) if(NOT TARGET "${target}") message(FATAL_ERROR "${target} is not a target.") endif() + qt_internal_is_skipped_test(skipped ${target}) + if(skipped) + return() + endif() qt_internal_is_in_test_batch(in_batch ${target}) if(in_batch) _qt_internal_test_batch_target_name(target) diff --git a/cmake/QtTestHelpers.cmake b/cmake/QtTestHelpers.cmake index 945311b4a71..463229abd5c 100644 --- a/cmake/QtTestHelpers.cmake +++ b/cmake/QtTestHelpers.cmake @@ -398,6 +398,34 @@ function(qt_internal_is_in_test_batch out name) endif() endfunction() +function(qt_internal_is_skipped_test out name) + get_target_property(is_skipped_test ${name} _qt_is_skipped_test) + set(${out} ${is_skipped_test} PARENT_SCOPE) +endfunction() + +function(qt_internal_set_skipped_test name) + set_target_properties(${name} PROPERTIES _qt_is_skipped_test TRUE) +endfunction() + +function(qt_internal_is_qtbase_test out) + get_filename_component(dir "${CMAKE_CURRENT_BINARY_DIR}" ABSOLUTE) + set(${out} FALSE PARENT_SCOPE) + + while(TRUE) + get_filename_component(filename "${dir}" NAME) + if("${filename}" STREQUAL "qtbase") + set(${out} TRUE PARENT_SCOPE) + break() + endif() + + set(prev_dir "${dir}") + get_filename_component(dir "${dir}" DIRECTORY) + if("${dir}" STREQUAL "${prev_dir}") + break() + endif() + endwhile() +endfunction() + function(qt_internal_get_batched_test_arguments out testname) if(WASM) # Add a query string to the runner document, so that the script therein @@ -434,6 +462,18 @@ function(qt_internal_add_test name) ) _qt_internal_validate_all_args_are_parsed(arg) + if(QT_BUILD_TESTS_BATCHED AND QT_SUPERBUILD AND NOT arg_NO_BATCH AND NOT arg_QMLTEST) + qt_internal_is_qtbase_test(is_qtbase_test) + if(NOT is_qtbase_test) + file(GENERATE OUTPUT "dummy${name}.cpp" CONTENT "int main() { return 0; }") + # Add a dummy target to tackle some potential problems + qt_internal_add_executable(${name} SOURCES "dummy${name}.cpp") + # Batched tests outside of qtbase are unsupported and skipped + qt_internal_set_skipped_test(${name}) + return() + endif() + endif() + if (NOT arg_OUTPUT_DIRECTORY) set(arg_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") endif()