Coin CI only tests 'prefix' builds of Qt, because that's what we use for packaging. But many developers configure and build Qt in various ways which are not covered by tests. Introduce a new suite of RunCMake tests that configure and build Qt in all the different permutations that we know people use. This includes various combinations of: - prefix vs no-prefix - out-of-source vs in-source - per-repo vs top-level - building tests and examples in-tree vs out-of-tree - building examples as in-tree vs external projects - building more than one repo The aim is to run all or some subset of these tests in a nightly Coin CI run. It can also be a useful way to test "risky" unmerged changes in an automated way, instead of manually doing the various builds. The current default set of repos that are built are: qtbase, qtshadertools and qtdeclarative. The submodules that are built can be controlled by setting various cmake or env vars when configuring or running the test: - QT_CI_BUILD_QT_SYNC_MODULE - the main repo that should be checked out. Its dependencies will also be checked out, based on its dependencies.yaml info. - QT_CI_BUILD_QT_PIN_GIT_REF - the git sha1 or ref of the main repo that should be checked out - QT_CI_BUILD_QT_SKIP_SUBMODULES - a list of submodules that should be skipped, can be useful to skip optional dependencies - QT_CI_BUILD_QT_EXTRA_CHECKOUT_CHANGES - a list of gerrit commit sha1s or refs for each submodule to be checked out to specifically. - QT_CI_BUILD_QT_EXTRA_CHERRYPICK_CHANGES - a list of gerrit commit sha1s or refs to be cherry-picked on top of whatever commits the submodules were synced to. - QT_CI_BUILD_QT_FILTER - a list of filters to include or exclude test cases to run. Sample usage: mkdir build && cd build cmake ~/qt5/tests/manual/RunCMake # Run regular tests ctest -V -R RunCMake.ConfigureBuildQt # Skip some optional submodules of qtdeclarative export QT_CI_BUILD_QT_SYNC_MODULE=qtdeclarative export QT_CI_BUILD_QT_SKIP_SUBMODULES='qtimageformats,qtlanguageserver" ctest -V -R RunCMake.ConfigureBuildQt # Cherry-pick extra changes on top of the synced commits # repos are split by '|', commits by ',' export QT_CI_BUILD_QT_EXTRA_CHERRYPICK_CHANGES='qtbase aaabbbccc|qtshadertools a12,b23,b45,refs/changes/57/628457/2' ctest -V -R RunCMake.ConfigureBuildQt # Checkout specific commits for each submodule export QT_CI_BUILD_QT_EXTRA_CHECKOUT_CHANGES='qtbase refs/changes/54/634554/5|qtshadertools 3bb8a41c44fa69c30f6887685ad70ef7e84c10a6' ctest -V -R RunCMake.ConfigureBuildQt # Only run top-level no-prefix, but not in-source source builds export QT_CI_BUILD_QT_FILTER='top_level,no_prefix,-per_repo,-in_source' ctest -V -R RunCMake.ConfigureBuildQt Change-Id: I355084081dd7b48cdf75c03eb001b64ab7ba96fb Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Cristian Le <cristian.le@qt.io>
10 lines
387 B
CMake
10 lines
387 B
CMake
# This file is include()d by run_cmake right after it calls execute_process.
|
|
# The msg var is set to a non-empty value when the was an error of
|
|
# some kind. Record failure with a separate variable in the parent scope,
|
|
# so we can FATAL_ERROR at the end.
|
|
if(NOT "${msg}" STREQUAL "")
|
|
set(should_error_out TRUE PARENT_SCOPE)
|
|
else()
|
|
set(should_error_out FALSE PARENT_SCOPE)
|
|
endif()
|