diff --git a/bin/qt-cmake-standalone-test.in b/bin/qt-cmake-standalone-test.in index d13c3eee40f..b0fbea5dedf 100755 --- a/bin/qt-cmake-standalone-test.in +++ b/bin/qt-cmake-standalone-test.in @@ -1,4 +1,4 @@ @__qt_cmake_standalone_test_os_prelude@ @__qt_cmake_standalone_test_script_relpath@ -@__qt_cmake_private_relpath@ @__qt_cmake_standalone_test_relpath@ -DQT_STANDALONE_TEST_PATH=@__qt_cmake_standalone_passed_args@ +@__qt_cmake_private_relpath@ @__qt_cmake_standalone_test_relpath@ -DQT_BUILD_STANDALONE_TESTS=ON -DQT_STANDALONE_TEST_PATH=@__qt_cmake_standalone_passed_args@ diff --git a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake index 18fb737edac..2d4c11ede2f 100644 --- a/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake +++ b/cmake/QtBuildInternals/QtBuildInternalsConfig.cmake @@ -637,3 +637,16 @@ macro(qt_examples_build_end) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ${BACKUP_CMAKE_FIND_ROOT_PATH_MODE_PACKAGE}) endmacro() + +if ("STANDALONE_TEST" IN_LIST Qt6BuildInternals_FIND_COMPONENTS) + include(${CMAKE_CURRENT_LIST_DIR}/QtStandaloneTestTemplateProject/Main.cmake) + if (NOT PROJECT_VERSION_MAJOR) + get_property(_qt_major_version TARGET ${QT_CMAKE_EXPORT_NAMESPACE}::Core PROPERTY INTERFACE_QT_MAJOR_VERSION) + set(PROJECT_VERSION ${Qt${_qt_major_version}Core_VERSION}) + + string(REPLACE "." ";" _qt_core_version_list ${PROJECT_VERSION}) + list(GET _qt_core_version_list 0 PROJECT_VERSION_MAJOR) + list(GET _qt_core_version_list 1 PROJECT_VERSION_MINOR) + list(GET _qt_core_version_list 2 PROJECT_VERSION_PATCH) + endif() +endif() diff --git a/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/CMakeLists.txt b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/CMakeLists.txt index a84c567b5a2..564ed610c82 100644 --- a/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/CMakeLists.txt +++ b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/CMakeLists.txt @@ -3,19 +3,7 @@ project(qt_single_test VERSION 6.0.0 LANGUAGES C CXX ASM) find_package(Qt6 REQUIRED COMPONENTS BuildInternals) -# Includes QtSetup and friends for private CMake API. -qt_build_internals_set_up_private_api() - -# Find all StandaloneTestsConfig.cmake files, and include them -# This will find all Qt packages that are required for standalone tests. -# It will find more packages that needed for a certain test, but will ensure any test can -# be built. -qt_get_standalone_tests_confg_files_path(standalone_tests_config_path) - -file(GLOB config_files "${standalone_tests_config_path}/*") -foreach(file ${config_files}) - include("${file}") -endforeach() +include(${CMAKE_CURRENT_LIST_DIR}/Main.cmake) # Get the absolute path of the passed-in project dir, relative to the current working directory # of the calling script, rather than relative to this source directory. @@ -27,10 +15,5 @@ else() set(absolute_project_path "${QT_STANDALONE_TEST_PATH}") endif() -# Just before adding the test, change the local (non-cache) install prefix to something other than -# the Qt install prefix, so that tests don't try to install and pollute the Qt install prefix. -# Needs to be called after qt_get_standalone_tests_confg_files_path(). -qt_set_up_fake_standalone_tests_install_prefix() - # Add the test project path as a subdirectory project. add_subdirectory("${absolute_project_path}" "build_dir") diff --git a/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake new file mode 100644 index 00000000000..38e1d75d870 --- /dev/null +++ b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake @@ -0,0 +1,18 @@ +# Includes QtSetup and friends for private CMake API. +qt_build_internals_set_up_private_api() + +# Find all StandaloneTestsConfig.cmake files, and include them +# This will find all Qt packages that are required for standalone tests. +# It will find more packages that needed for a certain test, but will ensure any test can +# be built. +qt_get_standalone_tests_confg_files_path(standalone_tests_config_path) + +file(GLOB config_files "${standalone_tests_config_path}/*") +foreach(file ${config_files}) + include("${file}") +endforeach() + +# Just before adding the test, change the local (non-cache) install prefix to something other than +# the Qt install prefix, so that tests don't try to install and pollute the Qt install prefix. +# Needs to be called after qt_get_standalone_tests_confg_files_path(). +qt_set_up_fake_standalone_tests_install_prefix() diff --git a/cmake/QtTestHelpers.cmake b/cmake/QtTestHelpers.cmake index cad4d6ecf9f..c2a9d717802 100644 --- a/cmake/QtTestHelpers.cmake +++ b/cmake/QtTestHelpers.cmake @@ -378,18 +378,20 @@ function(qt_internal_add_test name) "${CMAKE_CURRENT_SOURCE_DIR}") qt_path_join(testdata_install_dir ${QT_INSTALL_DIR} "${relative_path_to_test_project}") - foreach(testdata IN LISTS arg_TESTDATA) - set(testdata "${CMAKE_CURRENT_SOURCE_DIR}/${testdata}") - if (IS_DIRECTORY "${testdata}") - qt_install( - DIRECTORY "${testdata}" - DESTINATION "${testdata_install_dir}") - else() - qt_install( - FILES "${testdata}" - DESTINATION "${testdata_install_dir}") - endif() - endforeach() + if (testdata_install_dir) + foreach(testdata IN LISTS arg_TESTDATA) + set(testdata "${CMAKE_CURRENT_SOURCE_DIR}/${testdata}") + if (IS_DIRECTORY "${testdata}") + qt_install( + DIRECTORY "${testdata}" + DESTINATION "${testdata_install_dir}") + else() + qt_install( + FILES "${testdata}" + DESTINATION "${testdata_install_dir}") + endif() + endforeach() + endif() endif() endfunction()