diff options
author | Alexandru Croitor <[email protected]> | 2023-07-04 17:47:14 +0200 |
---|---|---|
committer | Alexandru Croitor <[email protected]> | 2023-12-04 19:37:53 +0100 |
commit | c7bd7ddfb6ee8d09d8c591a4d8b5a3b32ae3defb (patch) | |
tree | a71c60d95be2f06997e4caa0714bee5cdcd7969c | |
parent | 64edf3181f593585c774b523d6affb8a9dd8dcc2 (diff) |
CMake: Don't set QT_BUILDING_QT for single standalone tests
Standalone test projects have the following condition in the
beginning of their project:
if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
find_package(Qt6BuildInternals COMPONENT STANDALONE_TEST)
endif()
When configuring the project the first time, QT_BUILDING_QT is not
set, find_package is called, configuration succeeds.
But because standalone projects implicitly include QtSetup.cmake,
that file sets the QT_BUILDING_QT cache var to true, and upon test
reconfiguration, cmake errors out with:
Unknown CMake command "qt_internal_add_test"
or similar.
This happens because QT_BUILDING_QT is true on the second
reconfiguration and the find_package mentioned above is not executed
anymore, leading to unknown internal command errors.
Set a new QT_INTERNAL_IS_STANDALONE_TEST variable when we detect
a standalone test and check for its value in QtSetup so we don't
set QT_BUILDING_QT to TRUE anymore.
Adjust a few code locations where QT_BUILDING_QT being false might
trigger different behavior for standalone tests.
6.5 resolved conflicts:
src/corelib/Qt6AndroidMacros.cmake
Task-number: QTBUG-93020
Change-Id: I5413b9f37653225175a1006f7626e023045b5979
Reviewed-by: Qt CI Bot <[email protected]>
Reviewed-by: Joerg Bornemann <[email protected]>
Reviewed-by: Thiago Macieira <[email protected]>
Reviewed-by: Amir Masoud Abdol <[email protected]>
(cherry picked from commit b9b5ed3aa607f644cf32b5798ac742442de9fe3e)
Reviewed-by: Alexey Edelev <[email protected]>
-rw-r--r-- | cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake | 1 | ||||
-rw-r--r-- | cmake/QtSetup.cmake | 12 | ||||
-rw-r--r-- | src/corelib/Qt6AndroidMacros.cmake | 4 |
3 files changed, 12 insertions, 5 deletions
diff --git a/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake index c7222c8b718..3d5117d9232 100644 --- a/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake +++ b/cmake/QtBuildInternals/QtStandaloneTestTemplateProject/Main.cmake @@ -2,6 +2,7 @@ # SPDX-License-Identifier: BSD-3-Clause # Includes QtSetup and friends for private CMake API. +set(QT_INTERNAL_IS_STANDALONE_TEST TRUE) qt_internal_project_setup() qt_build_internals_set_up_private_api() diff --git a/cmake/QtSetup.cmake b/cmake/QtSetup.cmake index 7745f32cc88..6d02ee600ab 100644 --- a/cmake/QtSetup.cmake +++ b/cmake/QtSetup.cmake @@ -3,10 +3,16 @@ ## Set a default build type if none was specified -# Set the QT_IS_BUILDING_QT variable so we can verify whether we are building -# Qt from source -set(QT_BUILDING_QT TRUE CACHE BOOL +# Set the QT_BUILDING_QT variable so we can verify whether we are building +# Qt from source. +# Make sure not to set it when building a standalone test, otherwise +# upon reconfiguration we get an error about qt_internal_add_test +# not being found due the if(NOT QT_BUILDING_QT) check we have +# in each standalone test. +if(NOT QT_INTERNAL_IS_STANDALONE_TEST) + set(QT_BUILDING_QT TRUE CACHE BOOL "When this is present and set to true, it signals that we are building Qt from source.") +endif() # Pre-calculate the developer_build feature if it's set by the user via the INPUT_developer_build # variable when using the configure script. When not using configure, don't take the INPUT variable diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index a337f1ed66c..310781e7410 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -877,7 +877,7 @@ endfunction() # It doesn't overwrite public properties, but instead writes formatted values to internal # properties. function(_qt_internal_android_format_deployment_paths target) - if(QT_BUILD_STANDALONE_TESTS OR QT_BUILDING_QT) + if(QT_BUILD_STANDALONE_TESTS OR QT_BUILDING_QT OR QT_INTERNAL_IS_STANDALONE_TEST) # When building standalone tests or Qt itself we obligate developers to not use # windows paths when setting QT_* properties below, so their values are used as is when # generating deployment settings. @@ -977,7 +977,7 @@ function(_qt_internal_get_android_abi_cmake_dir_path out_path abi) else() _qt_internal_get_android_abi_prefix_path(prefix_path ${abi}) if((PROJECT_NAME STREQUAL "QtBase" OR QT_SUPERBUILD) AND QT_BUILDING_QT AND - NOT QT_BUILD_STANDALONE_TESTS) + NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_INTERNAL_IS_STANDALONE_TEST) set(cmake_dir "${QT_CONFIG_BUILD_DIR}") else() set(cmake_dir "${prefix_path}/${QT6_INSTALL_LIBS}/cmake") |