There is an inherent contradiction between (a) Bitcoin Core build system and (b) Bitcoin Core GUI build system.
Bitcoin Core:
- strives to minimize dependencies for security reasons
- adds new features without introducing new build dependencies (as usual)
Bitcoin Core GUI:
- new features (e.g., QR-code reader, QML-based UI, OpenGL support, Wayland support) usually do introduce new build dependencies
A concept of the separated GUI build system is here: https://github.com/hebasto/bitcoin-qtw/commits/220418-add-core-subtree
One could test it as follows:
0$ ./autogen.sh
1$ ./configure --disable-fuzz-binary --disable-tests --disable-bench --without-utils --without-daemon --without-libs
2$ make
3$ ./src/qt/bitcoin-qt
The suggested approach uses this repository as a subtree.
Pros:
- ability to drop GUI-related stuff from this repo
- ability to use alternative build system for the current Qt Widget based GUI (e.g., use CMake which allows to adopt Qt6 more seamless, even without upstream support of
*.pc
files) - ability to develop alternative UI frameworks (e.g., Qt Quick based GUI; fwiw, keeping QML GUI project synchronized to this repo preserving commit history goes out of hands due to the shared build system)
Cons:
- a GUI repo becomes a completely separated one, not like current https://github.com/bitcoin-core/gui
- the release process requires to be modified to handle GUI binaries from a separated repo