- Shell 76.9%
- Dockerfile 11.1%
- Python 10.2%
- CMake 1.8%
| .forgejo | ||
| ifw-scripts | ||
| scripts | ||
| toolchains | ||
| .dockerignore | ||
| .gitignore | ||
| build.sh | ||
| Dockerfile | ||
| Dockerfile.ifw | ||
| README.md | ||
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.