# Maintainer: Martchus # Contributor: ant32 # Contributor: Filip Brcic # Contributor: jellysheep # BEFORE COMMENTING OR REPORING ISSUES, PLEASE READ THE FILE `README.md` IN THIS REPOSITORY. # ALSO HAVE A LOOK AT THE COMMENTS IN THE AUR. # All my PKGBUILDs are managed at https://github.com/Martchus/PKGBUILDs where # you also find the URL of a binary repository. # This file is created from PKGBUILD.sh.ep contained by the mentioned repository. # Do not edit it manually! See README.md in the repository's root directory # for more information. # All patches are managed at https://github.com/Martchus/qtbase _qt_module=qtbase pkgname=mingw-w64-qt5-base pkgver=5.15.6+kde+r165 pkgrel=1 _basever=${pkgver%%+*} _commit=eeadc036d77b75bec5b7c41869688c7db9a2e221 pkgdesc='A cross-platform application and UI framework, native OpenGL backend (mingw-w64)' arch=('i686' 'x86_64') url='https://www.qt.io/' license=('GPL3' 'LGPL3' 'FDL' 'custom') depends=('mingw-w64-crt' 'mingw-w64-zlib' 'mingw-w64-libjpeg-turbo' 'mingw-w64-sqlite' 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz' 'mingw-w64-pcre2') optdepends=('mingw-w64-mesa: use LLVMpipe software rasterizer for Qt Quick' 'mingw-w64-postgresql: PostgreSQL support' 'mingw-w64-mariadb-connector-c: MySQL support') makedepends=('mingw-w64-gcc' 'mingw-w64-postgresql' 'mingw-w64-mariadb-connector-c' 'mingw-w64-vulkan-headers' 'mingw-w64-pkg-config' 'mingw-w64-environment' 'git') groups=('mingw-w64-qt5') options=('!strip' '!buildflags' 'staticlibs' '!emptydirs') _pkgfqn=${_qt_module} source=(git+https://invent.kde.org/qt/qt/$_pkgfqn#commit=$_commit '0001-Adjust-win32-g-profile-for-cross-compilation-with-mi.patch' '0002-Ensure-GLdouble-is-defined-when-using-dynamic-OpenGL.patch' '0003-Fix-too-many-sections-assemler-error-in-OpenGL-facto.patch' '0004-Make-sure-.pc-files-are-installed-correctly.patch' '0005-Don-t-add-resource-files-to-LIBS-parameter.patch' '0006-Prevent-debug-library-names-in-pkg-config-files.patch' '0007-Fix-linking-against-shared-static-libpng.patch' '0008-Fix-linking-against-static-D-Bus.patch' '0009-Don-t-try-to-use-debug-version-of-D-Bus-library.patch' '0010-Fix-linking-against-static-freetype2.patch' '0011-Fix-linking-against-static-harfbuzz.patch' '0012-Fix-linking-against-static-pcre.patch' '0013-Fix-linking-against-shared-static-MariaDB.patch' '0014-Fix-linking-against-shared-static-PostgreSQL.patch' '0015-Rename-qtmain-to-qt5main.patch' '0016-Enable-rpath-for-build-tools.patch' '0017-Use-system-zlib-for-build-tools.patch' '0018-Merge-shared-and-static-library-trees.patch' '0019-Use-.dll.a-as-import-lib-extension.patch' '0020-Pull-dependencies-of-static-libraries-in-CMake-modul.patch' '0021-Allow-usage-of-static-version-with-CMake.patch' '0022-Adjust-linker-flags-for-static-build-with-cmake-ming.patch' '0023-Use-correct-pkg-config-static-flag.patch' '0024-Fix-macro-invoking-moc-rcc-and-uic.patch' '0025-Ignore-errors-about-missing-feature-static.patch' '0026-Enable-and-fix-use-of-iconv.patch' '0027-Ignore-failing-pkg-config-test.patch' '0028-Prevent-qmake-from-messing-static-lib-dependencies.patch' '0029-Hardcode-linker-flags-for-platform-plugins.patch' '0030-Fix-linking-against-static-plugins-with-qmake.patch' '0031-Prevent-Cannot-find-feature-windows_vulkan_sdk.patch' '0032-Fix-crashes-in-rasterization-code-using-setjmp.patch') sha256sums=('SKIP' 'c41a27864036608b0356c240d48fb105b6afbd47a976e36908c9aed327d7b7cb' 'a69ef91d9f42adc4d5796dd268dd58710fd080fb938fa3a65889b6ad517ccaf0' '260a3fb5f812c2dfa515eb2585c395ffb2b00a5ee86ab21f580c70ba2ef6ece5' '5a6539b00e1459016554d04c4c4e7951989528c012dd5ed01a5ef5a1a01d326e' 'b029b7a73680b9b972d8c29be109133b75834c76b3c99533382e7145d9cdadff' '40267b7089d95c59899b5fb2a2ce8c9ce66b284e8ca222ecf56839bbc8619be6' '75afb4b6eab560d55058f170565944774fb534bcfe077acf95035f331dce321f' 'e76976133fa5b31d57a4b05b8aad5369559f50c93f9e4a3cb75a4645fee0c017' 'f4867d176bda13c506543b630931d1efe3b0c8e02d80fd81cca6de9a53ed9fea' '2049f9afc17877edc8014ad1abfa7492d7208fc6a1e97f90c6ff3e8fd89ed853' 'b8d69fa14f6e14aaf98e2e9ca201b0e54ea066c70f514d84e652e2dc06d75bba' 'c021e47b0452c47a7b486596324f62fdc192665a6c476cb7fad9207340b7fe5f' '0aa2ec748924f3fa1ebe16645c581f6b5d5bf82186e58407c8ee0597e7547a10' 'b2ffe203da527c95936806121d646bcf03026b0a7cc8ada2f60d4d26284028b3' 'bfddd2c8c44bab7f7995623bdcb89fd3ff8fbe9125522b1bb50b43efe297ee13' 'a9e9ac55bd881390b41b49a06f11c3441a008409527f7fce3d337df6820598c6' 'fb8de523d608ded6a6f6ca82d884af7bd086091e10d492902363f4f3f90f1a5b' '4d6f76f552cd0eaae0ae8e9ea8232f36ad140680c2d04ed70e792c11b85c86ac' 'bb0bfd9431d103af36d4b09134f3f9f1ac7a05feeb7779e6c15d447593ce6381' 'af6014fb1c311b91a1390898d25622d6aba555a0a30724dd953af2ea17cad6c5' 'ab620d4da6897d0b5fed70f8ac01febb46b9ff6e04e8fb49b4c1a2cb8527994f' 'e7217028a44537e40ddac73ac49630f77a361ecd20d6c40f6482517ae3103939' '7937d08e1aaf5bb59161e84ecd23cb0ea6a251eae0b98a8291e126442bf048f1' 'ed37dc1bef6aee8e842c347ebe4fb3a4435887a15664f98487466d771d85f15e' '071cce97add50db7e4703c6798afc42500405276043b2e5e6e9a5cf80556726c' '62ae5fbeace74ba9830c185f45432decd5f0f8305767d9a3b9bfac27647f5a7c' '9fae7c2dc88a27322bdb32748ea03fac1a04d8d35327acce05be511dd00b04e2' '06836073078a6cb304931443eab9306baee29d1c19f167765cff238bd34ae78d' '484996266fe418c1b5db76eec61d1bce1bc163546f534acf8343b0f77796cab7' '94852f7bd841f0ded357e9d0a5c6e53434711df1b701674da49f4f1a8f61a26b' '242f068c25d72ed8f67790d2c629b4aea2f13053760a9c8de43cab26c620bfe1' '5f83de1635acee180f65019ccd37112f284552d6d4831b770a1a0c0119f17f5e') _architectures='i686-w64-mingw32 x86_64-w64-mingw32' pkgver() { cd $_pkgfqn echo "$_basever+kde+r"`git rev-list --count v$_basever-lts-lgpl..$_commit` } prepare() { cd "${srcdir}/${_pkgfqn}" # apply patches; further descriptions can be found in patch files itself for patch in "$srcdir/"*.patch; do msg2 "Applying patch $patch" patch -p1 -i "$patch" done # clear buildflags ('!buildflags' only effects build() but not prepare()) unset CPPFLAGS CFLAGS CXXFLAGS LDFLAGS PKG_CONFIG_PATH # build qmake using mingw-w64 {C,CXX,LD}FLAGS # * This also sets default {C,CXX,LD}FLAGS for projects built using qmake. source mingw-env sed -i -e "s|^\(QMAKE_CFLAGS_RELEASE.*=\).*$|\1 ${CFLAGS}|" \ -e "s|^\(QMAKE_CXXFLAGS_RELEASE.*=\).*$|\1 ${CXXFLAGS}|" \ -e "s|^\(QMAKE_LFLAGS_RELEASE.*=\).*$|\1 ${LDFLAGS}|" \ mkspecs/common/gcc-base.conf \ mkspecs/common/g++-win32.conf sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*=\).*$|\1|" \ mkspecs/common/g++-unix.conf } build() { cd "${srcdir}/${_pkgfqn}" for _arch in ${_architectures}; do # define general configure arguments local qt_configure_args="\ -xplatform win32-g++ \ -optimized-qmake \ -verbose \ -opensource \ -confirm-license \ -force-pkg-config \ -force-debug-info \ -system-zlib \ -system-libpng \ -system-libjpeg \ -system-sqlite \ -system-freetype \ -system-harfbuzz \ -system-pcre \ -no-fontconfig \ -sql-mysql \ -sql-psql \ -sql-sqlite \ -dbus-linked \ -no-glib \ -no-icu \ -iconv \ -nomake examples \ -make tools \ -hostprefix /usr/${_arch} \ -hostdatadir /usr/${_arch}/lib/qt \ -hostbindir /usr/${_arch}/lib/qt/bin \ -prefix /usr/${_arch} \ -bindir /usr/${_arch}/bin \ -archdatadir /usr/${_arch}/lib/qt \ -datadir /usr/${_arch}/share/qt \ -docdir /usr/${_arch}/share/doc/qt \ -examplesdir /usr/${_arch}/share/qt/examples \ -headerdir /usr/${_arch}/include/qt \ -libdir /usr/${_arch}/lib \ -plugindir /usr/${_arch}/lib/qt/plugins \ -sysconfdir /usr/${_arch}/etc \ -translationdir /usr/${_arch}/share/qt/translations \ -device-option CROSS_COMPILE=${_arch}- \ -device-option CROSS_COMPILE_PREFIX=/usr/${_arch}" # allows using ccache despite the use of pre-compile header (sloppiness must be set to pch_defines,time_macros in ccache config for this) qt_configure_args+=' -device-option CROSS_COMPILE_CFLAGS=-fpch-preprocess' qt_configure_args+=' -device-option CROSS_COMPILE_CXXFLAGS=-fpch-preprocess' # add include directory of freetype2 and dbus manually (pkg-config detection in qmake doesn't work which is currently ignored via a patch) qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2 dbus-1 | sed -e "s/-I\/usr\/${_arch}\/include //g")" # note: The sed is required to prevent -isystem /usr/${_arch}/include (qmake will turn -I into -isystem) which would lead to # the same issue as here: https://github.com/Martchus/tageditor/issues/22#issuecomment-330899141 # enable debug build if MINGW_W64_QT_DEBUG_BUILD is set (could be set in eg. /etc/makepkg.config if debug build is wanted) [[ $MINGW_W64_QT_DEBUG_BUILD ]] \ && qt_configure_args+=' -debug-and-release' \ || qt_configure_args+=' -release' # configure usage of ANGLE/OpenGL msg2 'Using native OpenGL backend' qt_configure_args+=' -opengl desktop' # add include directory of MariaDB qt_configure_args+=" -I/usr/${_arch}/include/mariadb" # add include directory for Vulkan export VULKAN_SDK=/usr/${_arch} msg2 'Configure and build qmake' mkdir -p ../build-${_arch} && pushd ../build-${_arch} qt_configure_args+=' -shared' # configure shared version to load OpenSSL dynamically qt_configure_args+=' -openssl-runtime' qt_configure_args+=' -device-option CROSS_COMPILE_CUSTOM_CONFIG=actually_a_shared_build' # override LD_LIBRARY_PATH so libraries for native build tools like libQt5Bootstrap.so are found #export LD_LIBRARY_PATH="$PWD/lib" #export LDFLAGS="-L$PWD/lib" msg2 'Build qmake and configure' && ../${_pkgfqn}/configure $qt_configure_args msg2 'Build Qt libraries' && make popd done } package() { for _arch in ${_architectures}; do cd "$srcdir/${_pkgfqn}" make install -C ../build-${_arch} INSTALL_ROOT="${pkgdir}" # use prl files from build directory since installed prl files seem to have incorrect QMAKE_PRL_LIBS_FOR_CMAKE pushd "$srcdir/build-${_arch}/lib" find -iname '*.prl' -exec cp --target-directory "${pkgdir}/usr/${_arch}/lib" --parents {} + popd pushd "$srcdir/build-${_arch}/plugins" find -iname '*.prl' -exec cp --target-directory "${pkgdir}/usr/${_arch}/lib/qt/plugins" --parents {} + popd # remove DLLs from libdir (DLLs are installed in both bindir and libdir, one copy is sufficient) find "${pkgdir}/usr/${_arch}/lib" -maxdepth 1 -name "*.dll" -exec rm {} \; # install missing libQt5BootstrapDBus.a manually cp --target-directory "${pkgdir}/usr/${_arch}/lib" "$srcdir/build-${_arch}/lib/libQt5BootstrapDBus.a" # create symlinks for tools mkdir -p "${pkgdir}/usr/bin" for tool in qmake moc rcc uic qdbuscpp2xml qdbusxml2cpp qdoc syncqt.pl; do ln -s "../${_arch}/lib/qt/bin/${tool}" "${pkgdir}/usr/bin/${_arch}-${tool}-qt5" done # create qt.conf containing plugin path, see https://github.com/Martchus/PKGBUILDs/issues/109 echo "[Paths] Plugins = /usr/${_arch}/lib/qt/plugins" > "${pkgdir}/usr/${_arch}/bin/qt.conf" # drop QMAKE_PRL_BUILD_DIR because reference the build dir find "${pkgdir}/usr/${_arch}/lib" -type f -name '*.prl' -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; # remove doc rm -rf "${pkgdir}/usr/${_arch}/share/doc" # remove prl files for debug version if ! [[ $MINGW_W64_QT_DEBUG_BUILD ]]; then for file in $(find "${pkgdir}/usr/${_arch}" -name '*d.prl' -o -name '*d.static.prl'); do [ -f "${file%d*}${file##*d}" ] && rm "${file}"; done fi # remove '.static.prl' files find "${pkgdir}/usr/${_arch}" -name '.static.prl' -delete # replace library path in *.prl files so it points to the installed location and not the build directory find "${pkgdir}/usr/${_arch}/lib" \( -type f -name '*.prl' -o -name '*.pc' \) -exec sed -i -e "s:${PWD%/*}/build-${_arch}/lib:/usr/${_arch}/lib:g" {} \; # strip binaries, remove unuseful files strip --strip-all "${pkgdir}/usr/${_arch}/lib/qt/bin/"*[!.pl] strip --strip-debug "${pkgdir}/usr/${_arch}/lib/libQt5Bootstrap"*.a if [[ $NO_EXECUTABLES ]]; then find "${pkgdir}/usr/${_arch}" -name '*.exe' -delete else find "${pkgdir}/usr/${_arch}" -name '*.exe' -exec ${_arch}-strip --strip-all {} \; fi find "${pkgdir}/usr/${_arch}" \( -name '*.bat' -o -name '*.def' -o -name '*.exp' \) -delete find "${pkgdir}/usr/${_arch}" -name '*.dll' -exec ${_arch}-strip --strip-unneeded {} \; find "${pkgdir}/usr/${_arch}" \( -name '*.a' -not -name 'libQt5QmlDevTools.a' -not -name 'libQt5Bootstrap.a' \) -exec ${_arch}-strip -g {} \; done }