I have now worked more with
Qt Lite and have been able to make a build based on this configuration:
- Code: Select all
../qt5/configure \
-release \
-shared \
-opensource \
-confirm-license \
-optimize-size \
-ltcg \
-make libs \
-nomake examples \
-nomake tests \
-nomake tools \
-skip qtandroidextras \
-skip qtdeclarative \
-skip qtmultimedia \
-skip qtnetworkauth \
-skip qttools \
-skip qtwinextras \
-no-pch \
-no-feature-accessibility-atspi-bridge \
-no-feature-alloca \
-no-feature-alloca_h \
-no-feature-alloca_malloc_h \
-no-feature-android-style-assets \
-no-feature-angle \
-no-feature-angle_d3d11_qdtd \
-no-feature-appstore-compliant \
-no-feature-avx2 \
-no-feature-big_codecs \
-no-feature-buttongroup \
-no-feature-c++11 \
-no-feature-c++14 \
-no-feature-c++1z \
-no-feature-c11 \
-no-feature-c99 \
-no-feature-calendarwidget \
-no-feature-checkbox \
-no-feature-clock-gettime \
-no-feature-colordialog \
-no-feature-colornames \
-no-feature-columnview \
-no-feature-combined-angle-lib \
-no-feature-combobox \
-no-feature-commandlineparser \
-no-feature-commandlinkbutton \
-no-feature-completer \
-no-feature-contextmenu \
-no-feature-cross_compile \
-no-feature-cssparser \
-no-feature-cxx11_future \
-no-feature-datawidgetmapper \
-no-feature-datetimeedit \
-no-feature-datetimeparser \
-no-feature-dbus \
-no-feature-dbus-linked \
-no-feature-debug_and_release \
-no-feature-desktopservices \
-no-feature-dial \
-no-feature-dialog \
-no-feature-dialogbuttonbox \
-no-feature-direct2d \
-no-feature-direct2d1_1 \
-no-feature-direct3d11 \
-no-feature-direct3d11_1 \
-no-feature-direct3d9 \
-no-feature-directfb \
-no-feature-dirmodel \
-no-feature-drm_atomic \
-no-feature-dxgi \
-no-feature-dxgi1_2 \
-no-feature-dxguid \
-no-feature-effects \
-no-feature-egl \
-no-feature-egl_x11 \
-no-feature-eglfs \
-no-feature-eglfs_brcm \
-no-feature-eglfs_egldevice \
-no-feature-eglfs_gbm \
-no-feature-eglfs_mali \
-no-feature-eglfs_openwfd \
-no-feature-eglfs_rcar \
-no-feature-eglfs_viv \
-no-feature-eglfs_viv_wl \
-no-feature-eglfs_vsp2 \
-no-feature-eglfs_x11 \
-no-feature-errormessage \
-no-feature-etw \
-no-feature-evdev \
-no-feature-filedialog \
-no-feature-force_asserts \
-no-feature-formlayout \
-no-feature-framework \
-no-feature-fontcombobox \
-no-feature-fontconfig \
-no-feature-fontdialog \
-no-feature-fscompleter \
-no-feature-futimens \
-no-feature-futimes \
-no-feature-getauxval \
-no-feature-getentropy \
-no-feature-gif \
-no-feature-glib \
-no-feature-glibc \
-no-feature-gnu-libiconv \
-no-feature-groupbox \
-no-feature-gtk3 \
-no-feature-harfbuzz \
-no-feature-ico \
-no-feature-iconv \
-no-feature-icu \
-no-feature-im \
-no-feature-image_heuristic_mask \
-no-feature-image_text \
-no-feature-imageformat_bmp \
-no-feature-imageformat_ppm \
-no-feature-imageformat_xbm \
-no-feature-inputdialog \
-no-feature-integrityfb \
-no-feature-integrityhid \
-no-feature-journald \
-no-feature-keysequenceedit \
-no-feature-kms \
-no-feature-lcdnumber \
-no-feature-libinput \
-no-feature-libinput-axis-api \
-no-feature-libudev \
-no-feature-lineedit \
-no-feature-linkat \
-no-feature-linuxfb \
-no-feature-listview \
-no-feature-listwidget \
-no-feature-lttng \
-no-feature-mdiarea \
-no-feature-messagebox \
-no-feature-mirclient \
-no-feature-movie \
-no-feature-mtdev \
-no-feature-network \
-no-feature-openvg \
-no-feature-paint_debug \
-no-feature-pdf \
-no-feature-picture \
-no-feature-pkg-config \
-no-feature-posix-libiconv \
-no-feature-posix_fallocate \
-no-feature-printer \
-no-feature-progressbar \
-no-feature-progressdialog \
-no-feature-radiobutton \
-no-feature-reduce_exports \
-no-feature-reduce_relocations \
-no-feature-release_tools \
-no-feature-renameat2 \
-no-feature-rpath \
-no-feature-rubberband \
-no-feature-scroller \
-no-feature-separate_debug_info \
-no-feature-sha3-fast \
-no-feature-simulator_and_device \
-no-feature-sizegrip \
-no-feature-slog2 \
-no-feature-spinbox \
-no-feature-splashscreen \
-no-feature-splitter \
-no-feature-sql \
-no-feature-sql-sqlite \
-no-feature-stack-protector-strong \
-no-feature-statustip \
-no-feature-statx \
-no-feature-style-android \
-no-feature-style-fusion \
-no-feature-style-mac \
-no-feature-style-stylesheet \
-no-feature-style-windows \
-no-feature-style-windowsvista \
-no-feature-syntaxhighlighter \
-no-feature-syslog \
-no-feature-system-doubleconversion \
-no-feature-system-freetype \
-no-feature-system-harfbuzz \
-no-feature-system-pcre2 \
-no-feature-system-png \
-no-feature-system-zlib \
-no-feature-systemtrayicon \
-no-feature-tabletevent \
-no-feature-tableview \
-no-feature-tablewidget \
-no-feature-testlib \
-no-feature-textbrowser \
-no-feature-textedit \
-no-feature-texthtmlparser \
-no-feature-textodfwriter \
-no-feature-texture_format_astc_experimental \
-no-feature-timezone \
-no-feature-toolbox \
-no-feature-tooltip \
-no-feature-topleveldomain \
-no-feature-translation \
-no-feature-treeview \
-no-feature-treewidget \
-no-feature-tslib \
-no-feature-tuiotouch \
-no-feature-undocommand \
-no-feature-undogroup \
-no-feature-undostack \
-no-feature-undoview \
-no-feature-vnc \
-no-feature-vsp2 \
-no-feature-vulkan \
-no-feature-whatsthis \
-no-feature-wizard \
-no-feature-xcb-xinput \
-no-feature-xlib \
-no-feature-xml \
-no-feature-xmlstreamwriter \
-xcb \
-feature-xlib \
-feature-xcb-xlib \
-feature-jpeg \
-feature-library \
-feature-mainwindow \
-feature-dockwidget \
-feature-draganddrop \
-feature-wheelevent \
-feature-contextmenu \
-feature-pushbutton \
-feature-menubar \
-feature-toolbar
It contains a lot (most) of the classes that I can imagine VASSAL needs. The size of the release libs are still small:
libQt5Core.so.5.12.9 --- 5,4 MB
libQt5Gui.so.5.12.9 --- 5,1 MB
libQt5Widgets.so.5.12.9 --- 4,5 MB
libQt5XcbQpa.so.5.12.9 --- 1,8 MB
Even if we need to modify the
Qt Lite build the size of the libs will likely not change very much. These libs fit very well with a distribution. Note that the libs can also be used by C++.
I then managed to make the corresponding bindings. The size of the release binding libs are now:
qtcore.so --- 17,4 MB
qtgui.so --- 19,2 MB
qtwidgets.so --- 18,5 MB
These sizes are basically acceptable, given that they in a sense replace the JAVA runtime. I had to make heavy modifications to
lqt. In short this involved removing unnecessary schema-classes to an unused-folder and commenting out calls to class-members not used. These modifications do constitute what we can call
custom-lqt. These modifications need to be precisely defined and automated.
Unfortunately, even if
Qt Lite and
custom-lqt builds, my script does not run. The reason for that is simple. Using
nm -D on the libs one sees many undefined symbols. The reference to these symbols either have to be removed in the code or added to the code as need be.
This is fine, but there is a much more serious issue which I have mentioned before. Building
lqt under Linux produce errors. This means that bindings to classes like QMenubar and QToolbar are not there. More specifically, the error is the parsing of C++ code to XML, which is done by the program
cpptoxml.
This issue must be solved before anything else. The parser will likely run on Windows (and therefore produce all Window bindings) but as long as it doesn't run on Linux it's pointless.
I am in contact with the guys that have made
lqt. The issue may be solved or not. I note that even if their software is 10+ years old they have never bothered to make a Linux build (and no Android build either).
If we are lucky we could find an alternative
cpptoxml that works on all platforms. Nevertheless, it probably means spending weeks and months on this issue. Is this something we want to do?
lqt is not part of the official
Language Bindings of Qt. It may not be a good idea to work with a script/widget combination that is not a finished tool. As I said before, as application developers we must focus on the application, not on the tools.
So what do you guys think? Shall we invest time on
lqt or find an alternative?