[Qgis-psc] Grant report Windows Qt6 builds for QGIS with VCPKG

Matthias Kuhn matthias at opengis.ch
Thu Oct 24 08:31:20 PDT 2024


Thanks to the grant for the QGIS Enhancement Proposal 292
<https://github.com/qgis/QGIS-Enhancement-Proposals/issues/292> we were
able to work on integration of Qt6 and the vcpkg dependency management
system into QGIS.
This report gives an overview over what has been accomplished.

*QGIS Build with Qt6 using vcpkg*

Our primary focus has been on transitioning QGIS to build with Qt6 using
`vcpkg` on Windows. This involved integrating Qt6 and other dependencies
through the `vcpkg` dependency management to ensure a smoother build
process. To make the results of this accessible and ensure forward
security, continuous integration (CI) pipelines have been established:
- Per Pull Request Build: Each pull request now triggers a Qt6 build via CI
- Master Branch Build: Continuous builds are also generated for the master
branch

We have also helped to make the QGIS source code ready for Qt6 on Windows.

Qt6 based packages for Windows are now downloadable for each pull request,
we hope that this helps the migration process towards Qt6 by making it
possible for Windows users to test plugins and other functionality.

The check itself has already helped to identify qt6/windows compatibility
problems of a recent pull request early on.

*Documentation for building using vcpkg*

We have also documented build instructions for building with vcpkg in the
INSTALL.md file of QGIS.
We hope that this will help to make it easier for new developers on Windows
to start developing for QGIS and to improve QGIS on Windows.

*Python Ports in vcpkg Registry*

To manage QGIS's Python dependencies more efficiently, we contributed to
open-vcpkg/python-registry <https://github.com/open-vcpkg/python-registry/>.
- Python Ports: Developing custom ports for the Python ecosystem in
`vcpkg`, namely all python packages that are required for QGIS core plugins.
- Version Bumping Script: To reduce maintenance burdens, we implemented an
automated script that regularly updates the versions of these Python
packages to the latest available releases.

*Modernizing CMake Scripts and R**educing Internal Vendored Dependencies*

We continued our long-term efforts to modernize QGIS's CMake build scripts.
By shifting more packages to detect cmake configuration files and using
cmake targets, we reduce package dependent "find" and "configuration" code
that we maintain internally.
We increased usage of system- (or vcpkg-) provided packages instead of
internal or vendored versions. For example, `nlohmann-json` can now be used
directly from vcpkg, for downstream projects this reduces conflicting
library versions.
We made strides to reduce the reliance on vendored internal packages.
Particularly we have tried to make it possible to build with an external
untwine library, but despite efforts to reduce reliance on the internal
copy, the closely tied interface between QGIS and this package prevented
this move at this stage. There are more packages where we could assess the
deviation from upstream and separate QGIS patches from "bundle it for
packaging". This remains an area for future improvement.

*Enhancements to the "Comment Bot" in Pull Requests*

To improve the feedback loop within the QGIS development process, we
enhanced the pull request "comment bot":
- Modularity: Refactored the bot to be more modular and adaptable.
- Sticky Comments: Introduced a single "sticky comment" that allows
multiple CI actions to update a single comment, centralizing feedback and
status updates for each pull request.

*Version Update Reporting Action*

To keep track of dependency changes transparently, we developed a
"reporting" action:
- Version Updates: This action posts updates in the sticky pull request
comment whenever a dependency is added, removed, or updated.
- Dependency Tracking: This helps developers stay informed about changes in
the build environment and dependencies.
Example here: https://github.com/qgis/QGIS/pull/59191

*Preliminary macOS Build Work*

The effort to transition QGIS to Qt6 on Windows has also paved the way for
cross-platform support:
- macOS Support: The same `vcpkg`-based dependency set used for Windows has
been extended to macOS. Although this work is preliminary, it is expected
to simplify development for macOS developers and could form the basis for
future stable macOS packages. https://github.com/qgis/QGIS/pull/59177

*Acknowledgments*

We extend our gratitude to the QGIS Project Steering Committee (PSC) and
the voting community for letting us work on this.

Kind regards
Matthias Kuhn
OPENGIS.ch
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-psc/attachments/20241024/17ed4a3d/attachment.htm>


More information about the QGIS-PSC mailing list