No description
  • Shell 77.2%
  • Dockerfile 10.9%
  • Python 9.8%
  • CMake 2.1%
Find a file
mbulatov bab8ed7497
All checks were successful
CI / validate (push) Successful in 6s
Release qtif / release (push) Successful in 3m11s
Release qtif / release (release) Successful in 56s
fix build
2026-07-14 10:04:26 +03:00
.forgejo add wayland support 2026-06-02 11:18:31 +03:00
.vscode fix build 2026-07-14 10:04:26 +03:00
ifw-scripts fix build 2026-07-14 10:04:26 +03:00
scripts fix avx 2026-07-14 08:54:04 +03:00
toolchains fix avx 2026-07-14 08:54:04 +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 fix avx 2026-07-14 08:54:04 +03:00
Dockerfile fix avx 2026-07-14 08:54:04 +03:00
Dockerfile.ifw fix avx 2026-07-14 08:54:04 +03:00
README.md fix avx 2026-07-14 08:54:04 +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

Builds use a generic x86_64 CPU baseline by default:

QTIF_CPU_FLAGS="-march=x86-64 -mtune=generic"

Override QTIF_CPU_FLAGS only if you intentionally want a newer CPU baseline.

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
QTIF_CPU_FLAGS
ARTIFACTS_DIR

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