summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2021-08-19 16:19:21 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2021-08-26 16:40:15 +0200
commit1f3949a5a8182aee4047fcf73413f67c613cbb86 (patch)
treec12e1406c3112030f4ff81549a12a5a8491f76db /src
parentae306b1c5aecdeab726610bfb38600aca564cecb (diff)
CMake: Make _qt_internal_test_expect_pass more configurable
Introduce new options: NO_CLEAN_STEP, NO_BUILD_PROJECT_ARG, GENERATOR, MAKE_PROGRAM, BUILD_TYPE. If cache or env var QT_CMAKE_TESTS_ADDITIONAL_CONFIGURE_OPTIONS is provided, the value is interpreted as a list of additional configure arguments to pass to the built project. Also skip adding a test command if there is no BINARY or BINARY_ARGS option provided. Pick-to: 6.2 Change-Id: I3a1d82b41a734dcd3f473e59cc64efd00363e49b Reviewed-by: Craig Scott <craig.scott@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/Qt6CTestMacros.cmake90
1 files changed, 84 insertions, 6 deletions
diff --git a/src/corelib/Qt6CTestMacros.cmake b/src/corelib/Qt6CTestMacros.cmake
index ada71d0b40..8460600a62 100644
--- a/src/corelib/Qt6CTestMacros.cmake
+++ b/src/corelib/Qt6CTestMacros.cmake
@@ -126,6 +126,18 @@ endfunction()
# Checks if the test project can be built successfully. Arguments:
#
+# NO_CLEAN_STEP: Skips calling 'clean' target before building.
+#
+# NO_BUILD_PROJECT_ARG: Skips adding --build-project argument. Useful when using Xcode generator.
+#
+# GENERATOR: Use a custom generator. When not specified, uses existing CMAKE_GENERATOR value.
+#
+# MAKE_PROGRAM: Specify a different make program. Can be useful with a custom make or ninja wrapper.
+#
+# BUILD_TYPE: Specify a different CMake build type. Defaults to CMAKE_BUILD_TYPE if it is not empty.
+# Which means no build type is passed if the top-level project is configured with a
+# multi-config generator.
+#
# SIMULATE_IN_SOURCE: If the option is specified, the function copies sources of the tests to the
# CMAKE_CURRENT_BINARY_DIR directory, creates internal build directory in the
# copied sources and uses this directory to build and test the project.
@@ -149,11 +161,16 @@ endfunction()
macro(_qt_internal_test_expect_pass _dir)
set(_test_option_args
SIMULATE_IN_SOURCE
+ NO_CLEAN_STEP
+ NO_BUILD_PROJECT_ARG
)
set(_test_single_args
BINARY
TESTNAME
BUILD_DIR
+ GENERATOR
+ MAKE_PROGRAM
+ BUILD_TYPE
)
set(_test_multi_args
BUILD_OPTIONS
@@ -173,6 +190,66 @@ macro(_qt_internal_test_expect_pass _dir)
string(REPLACE "/" "_" testname "${testname}")
endif()
+ # Allow setting a different generator. Needed for iOS.
+ set(generator "${CMAKE_GENERATOR}")
+ if(_ARGS_GENERATOR)
+ set(generator "${_ARGS_GENERATOR}")
+ endif()
+
+ # Allow setting a different make program.
+ set(make_program "${CMAKE_MAKE_PROGRAM}")
+ if(_ARGS_MAKE_PROGRAM)
+ set(make_program "${_ARGS_MAKE_PROGRAM}")
+ endif()
+
+ # Only pass build config if it was specified during the initial tests/auto project
+ # configuration. Important when using Qt multi-config builds which won't have CMAKE_BUILD_TYPE
+ # set.
+ set(build_type "")
+
+ if(_ARGS_BUILD_TYPE)
+ set(build_type "${_ARGS_BUILD_TYPE}")
+ elseif(CMAKE_BUILD_TYPE)
+ set(build_type "${CMAKE_BUILD_TYPE}")
+ endif()
+ if(build_type)
+ set(build_type "--build-config" "${build_type}")
+ endif()
+
+ # Allow skipping clean step.
+ set(build_no_clean "")
+ if(_ARGS_NO_CLEAN_STEP)
+ set(build_no_clean "--build-noclean")
+ endif()
+
+ # Allow omitting the --build-project arg. It's relevant for xcode projects where the project
+ # name on disk is different from the project source dir name.
+ if(NOT _ARGS_NO_BUILD_PROJECT_ARG)
+ set(build_project "--build-project" "${_dir}")
+ else()
+ set(build_project)
+ endif()
+
+ # Allow omitting test command if no binary or binary args are provided.
+ set(test_command "")
+ if(_ARGS_BINARY)
+ list(APPEND test_command ${_ARGS_BINARY} ${_ARGS_BINARY_ARGS})
+ endif()
+ if(test_command)
+ set(test_command "--test-command" ${test_command})
+ endif()
+
+ set(additional_configure_args "")
+
+ # Allow passing additional configure options to all projects via either a cache var or env var.
+ # Can be useful for certain catch-all scenarios.
+ if(QT_CMAKE_TESTS_ADDITIONAL_CONFIGURE_OPTIONS)
+ list(APPEND additional_configure_args ${QT_CMAKE_TESTS_ADDITIONAL_CONFIGURE_OPTIONS})
+ endif()
+ if(DEFINED ENV{QT_CMAKE_TESTS_ADDITIONAL_CONFIGURE_OPTIONS})
+ list(APPEND additional_configure_args $ENV{QT_CMAKE_TESTS_ADDITIONAL_CONFIGURE_OPTIONS})
+ endif()
+
set(__expect_pass_prefixes "${CMAKE_PREFIX_PATH}")
string(REPLACE ";" "\;" __expect_pass_prefixes "${__expect_pass_prefixes}")
@@ -214,13 +291,14 @@ macro(_qt_internal_test_expect_pass _dir)
--build-and-test
"${__expect_pass_source_dir}"
"${__expect_pass_build_dir}"
- --build-config "${CMAKE_BUILD_TYPE}"
- --build-generator "${CMAKE_GENERATOR}"
- --build-makeprogram "${CMAKE_MAKE_PROGRAM}"
- --build-project "${_dir}"
+ ${build_type}
+ ${build_no_clean}
+ --build-generator "${generator}"
+ --build-makeprogram "${make_program}"
+ ${build_project}
--build-options "-DCMAKE_PREFIX_PATH=${__expect_pass_prefixes}" ${BUILD_OPTIONS_LIST}
- ${_ARGS_BUILD_OPTIONS}
- --test-command ${_ARGS_BINARY} ${_ARGS_BINARY_ARGS}
+ ${_ARGS_BUILD_OPTIONS} ${additional_configure_args}
+ ${test_command}
)
add_test(${testname} ${CMAKE_CTEST_COMMAND} ${ctest_command_args})
if(_ARGS_SIMULATE_IN_SOURCE)