Alexandru Croitor 49bf77b0f8 CMake: Add RunCMake test to configure and build Qt in various ways
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>
2025-05-17 20:11:17 +02:00
2025-02-21 12:59:40 +01:00
2016-06-28 15:58:12 +00:00
2016-06-28 15:58:12 +00:00
2016-06-28 15:58:12 +00:00
2025-02-21 12:59:40 +01:00
2025-02-20 08:53:41 +01:00
2012-09-05 14:33:37 +02:00
2022-06-23 08:18:48 +02:00
2023-09-23 10:27:29 +02:00
2025-02-21 12:59:40 +01:00

HOW TO BUILD Qt 6

Synopsis

System requirements

  • C++ compiler supporting the C++17 standard
  • CMake
  • Ninja
  • Python 3

For more details, see also https://doc.qt.io/qt-6/build-sources.html

Linux, Mac:

cd <path>/<source_package>
./configure -prefix $PWD/qtbase
cmake --build .

Windows:

  1. Open a command prompt.
  2. Ensure that the following tools can be found in the path:
cd <path>\<source_package>
configure -prefix %CD%\qtbase
cmake --build .

More details follow.

Build!

Qt is built with CMake, and a typical configure && cmake --build . build process is used.

If Ninja is installed, it is automatically chosen as CMake generator.

Some relevant configure options (see configure -help):

  • -release Compile and link Qt with debugging turned off.
  • -debug Compile and link Qt with debugging turned on.

Example for a release build:

./configure -prefix $PWD/qtbase
cmake --build .

Example for a developer build: (enables more autotests, builds debug version of libraries, ...)

./configure -developer-build
cmake --build .

See output of ./configure -help for documentation on various options to configure.

The above examples will build whatever Qt modules have been enabled by default in the build system.

It is possible to build selected repositories with their dependencies by doing a ninja <repo-name>/all. For example, to build only qtdeclarative, and the modules it depends on:

./configure
ninja qtdeclarative/all

This can save a lot of time if you are only interested in a subset of Qt.

Hints

The submodule repository qtrepotools contains useful scripts for developers and release engineers. Consider adding qtrepotools/bin to your PATH environment variable to access them.

Building Qt from git

See http://wiki.qt.io/Building_Qt_6_from_Git and README.git for more information. See http://wiki.qt.io/Qt_6 for the reference platforms.

Documentation

After configuring and compiling Qt, building the documentation is possible by running

cmake --build . --target docs

After having built the documentation, you need to install it with the following command:

cmake --build . --target install_docs

The documentation is installed in the path specified with the configure argument -docdir.

Information about Qt's documentation is located in qtbase/doc/README

Note: Building the documentation is only tested on desktop platforms.

Description
No description provided
Readme 18 MiB
Languages
Shell 58.7%
PowerShell 24.7%
CMake 14.6%
Perl 1.3%
Dockerfile 0.3%
Other 0.3%