diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 000000000000..3233d55ba5d0 --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +# README for Qt 5 mingw-w64 packages +## Development, building, issues +* All PKGBUILDs are managed at https://github.com/Martchus/PKGBUILDs where you also find the URL of a binary repository. +* Issues are tracks there as well. +* All patches are managed at https://github.com/Martchus/qtbase, https://github.com/Martchus/qttools, ... + +### Build order +Qt packages can be built in the following order (for example): +``` +qt5-base qt5-base-static qt5-svg qt5-declarative qt5-tools qt5-xmlpatterns qt5-script qt5-imageformats qt5-location qt5-multimedia qt5-sensors qt5-webchannel qt5-3d qt5-quickcontrols qt5-quickcontrols2 qt5-translations qt5-websockets qt5-winextras qt5-serialport qt5-canvas3d qt5-connectivity qt5-charts qt5-graphicaleffects qt5-gamepad qt5-scxml qt5-datavis3d qt5-virtualkeyboard qt5-activeqt qt5-speech qt5-remoteobjects qt5-networkauth qt5-webkit +``` + +### Executables +By default, executables will be present in the package because I find them useful for testing. To remove executables, +set NO_EXECUTABLES (or NO_STATIC_EXECUTABLES to remove statically linked executables only) when building the package. +If Qt modules containing tools are built as static and as dynamic library only the dynamically linked tools will be present +in the package. + +## Variants +There are different variants of the package which can be selected by simply adjusting pkgname: + +| Package name | Customization | +| ----------------------------------------------- | -----------------------------------------------------------------------| +| mingw-w64-qt5-base or mingw-w64-qt5-base-opengl | using native OpenGL | +| mingw-w64-qt5-base-angle | using ANGLE rather than native OpenGL | +| mingw-w64-qt5-base-dynamic | allows choosing between ANGLE and native OpenGL dynamically at runtime | +| mingw-w64-qt5-base-noopenql | no OpenGL support | + +* The variants are conflicting (and hence can not be installed at the same time). +* See also: http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers + +## Static libraries +The variants listed above only contain dynamic libraries. For building static libraries +just append `-static` to the package name, eg. `mingw-w64-qt5-base-static` or `mingw-w64-qt5-base-angle-static`. + +The static variants rely on the corresponding dynamic variant for headers and tools. +I only tested the static variant using native OpenGL so far (`mingw-w64-qt5-base-static`). +Note that ANGLE will still be loaded as dynamic library in `mingw-w64-qt5-base-dynamic-static`. + +Further Qt modules (those not found in the base repository) include by default static and dynamic libraries; if only one +version is requried, just set `NO_STATIC_LIBS` or `NO_SHARED_LIBS` when building the package, eg. by adding `NO_STATIC_LIBS=1` +to `/etc/makepkg.conf`. + +### Using static libraries +By default, CMake and qmake will link against the dynamic Qt libraries. + +#### CMake +To use the static Qt libraries with CMake prepend the Qt module name with Static, eg.: +``` +find_package(Qt5Core) becomes find_package(StaticQt5Core) +``` + +To use a static module, add the corresponding imported target, eg.: +``` +target_link_libraries(target ... StaticQt5::Core) +``` + +This approach allows installing dynamic and static Qt in the same prefix +and using both variants in the same CMake project. + +To use a static plugin, add the corresponding imported target, eg.: +``` +target_link_libraries(target ... StaticQt5::QWindowsIntegrationPlugin) +``` + +Automatically importing static plugins is currently not possible, though. +Hence it is required to use Q_IMPORT_PLUGIN, eg.: +``` +#include<QtPlugin> +Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin) +``` + +It is also possible to use static Qt libraries with CMake by setting the +variable `USE_STATIC_QT_BY_DEFAULT`: `set(USE_STATIC_QT_BY_DEFAULT ON)` + +In this case the regular imported targets (eg. `Qt5::Core`) will be static. +This approach does *not* allow to use dynamic and static Qt in the same +CMake project. + +#### qmake +To use the static Qt libraries with qmake add 'static' to the project config (either inside the *.pro file or as qmake argument): +``` +CONFIG+=static +``` + +Currently qmake is messing with linker flags for cyclic dependencies and static MariaDB is unavailable due to clashing symbols. +To workaround these issues, use the following arguments: +``` +CONFIG+=no_smart_library_merge QTPLUGIN.sqldrivers=qsqlite QTPLUGIN.sqldrivers+=qsqlpsql QTPLUGIN.sqldrivers+=qsqlodbc +```
\ No newline at end of file |