No description
  • Shell 76.9%
  • Dockerfile 11.1%
  • Python 10.2%
  • CMake 1.8%
Find a file
mbulatov 89713740a4
All checks were successful
CI / validate (push) Successful in 1m30s
Release qtif / release (push) Successful in 36m50s
Release qtif / release (release) Successful in 42s
add wayland support
2026-06-02 11:18:31 +03:00
.forgejo add wayland support 2026-06-02 11:18:31 +03:00
ifw-scripts add wayland support 2026-06-02 11:18:31 +03:00
scripts add wayland support 2026-06-02 11:18:31 +03:00
toolchains fix qt 2026-06-02 09:16:45 +03:00
.dockerignore Initial qtif Docker builder 2026-06-02 06:14:24 +03:00
.gitignore Fix Forgejo CI Docker jobs 2026-06-02 06:27:39 +03:00
build.sh add wayland support 2026-06-02 11:18:31 +03:00
Dockerfile add wayland support 2026-06-02 11:18:31 +03:00
Dockerfile.ifw add wayland support 2026-06-02 11:18:31 +03:00
README.md add wayland support 2026-06-02 11:18:31 +03:00

Static QtIF Builder

Docker builds Qt Installer Framework with fully static Qt for Linux and Windows.

What is built:

  • static Qt for Linux: /opt/qt/<qt-version>/linux-static
  • static Qt for Windows x86_64/llvm-mingw: /opt/qt/<qt-version>/windows-static
  • static OpenSSL, always linked into Qt
  • static Wayland client libraries for Linux Qt
  • static Qt Installer Framework for Linux and Windows

Qt is optimized for QtIF and built only from the required submodule set:

qtbase, qtdeclarative, qttools, qttranslations, qt5compat, qtwayland

qtdeclarative is kept because QtIF links against Qt QML for installer scripting. qt5compat is kept because QtIF 4.11 uses core5compat. qtwayland is kept so Linux GUI tools can run under Wayland as well as X11/XCB. qtactiveqt and qtwebengine are skipped by default; they are not needed for QtIF.

Default versions:

  • Qt: 6.11.1
  • Qt Installer Framework: 4.11.0
  • OpenSSL: 3.5.6
  • Ubuntu base image: 26.04

Qt sources are downloaded from:

https://files.acnas.net/Develop/Qt/<qt-minor>/<qt-version>/single/qt-everywhere-src-<qt-version>.tar.xz

QtIF sources are downloaded from the GitHub tag archive:

https://github.com/qtproject/installer-framework/archive/refs/tags/<ifw-version>.tar.gz

Local Build

Build fully static QtIF and export Linux/Windows artifacts:

./build.sh build-ifw-portable

Artifacts are written to:

dist/qtif/linux
dist/qtif/windows

Check resolved versions and image names:

./build.sh print-env

Run the Linux portability test in an old Ubuntu container:

./build.sh test-linux-portability

This test runs the Linux QtIF tools on ubuntu:20.04 by default, verifies that the ELF files have no interpreter and no NEEDED dynamic libraries, checks ldd, and smoke-tests the command line tools plus static Qt platform plugins.

Set versions manually:

QT_VERSION=6.11.1 IFW_VERSION=4.11.0 ./build.sh build-ifw-portable

Use a different Ubuntu base image:

UBUNTU_VERSION=22.04 ./build.sh build-ifw-portable

Set versions from a release tag:

QTIF_RELEASE_TAG=v6.11.1-ifw4.11.0-1 ./build.sh build-ifw-portable

Tag format:

v<qt-version>-ifw<ifw-version>-<release-number>

Example:

v6.11.1-ifw4.11.0-1

QT_VERSION and IFW_VERSION override versions parsed from the tag.

Release

Forgejo release workflow runs on tags matching v*, on published web releases, or manually through workflow_dispatch. It parses Qt and QtIF versions from the tag, builds static QtIF, runs the Linux portability test on the configured old Ubuntu image, checks that forbidden Windows dynamic libraries are not imported, packages artifacts, and uploads them to the Forgejo release.

Create a release:

git tag -a v6.11.1-ifw4.11.0-1 -m "qtif v6.11.1-ifw4.11.0-1"
git push origin main --tags

Release assets:

qtif-<tag>-linux-x86_64.tar.xz
qtif-<tag>-windows-x86_64.tar.xz
SHA256SUMS.txt
RELEASE_NOTES.md

Configuration

Useful environment variables:

QT_VERSION
IFW_VERSION
UBUNTU_VERSION
LINUX_TEST_UBUNTU_VERSION
QT_SUBMODULES
QT_SKIP_MODULES
QTIF_RELEASE_TAG
QT_SOURCE_URL
QT_SOURCE_SHA256
IFW_SOURCE_URL
IFW_SOURCE_SHA256
OPENSSL_VERSION
OPENSSL_SOURCE_URL
OPENSSL_SOURCE_SHA256
WAYLAND_VERSION
WAYLAND_SOURCE_URL
WAYLAND_SOURCE_SHA256
WAYLAND_PROTOCOLS_VERSION
WAYLAND_PROTOCOLS_SOURCE_URL
WAYLAND_PROTOCOLS_SOURCE_SHA256
LLVM_MINGW_VERSION
LLVM_MINGW_SHA256
ARTIFACTS_DIR

OpenSSL is not optional in this project. Qt is always configured with -openssl-linked and OPENSSL_USE_STATIC_LIBS=ON.