# Template file for 'qt5' pkgname=qt5 version=5.13.2 revision=2 wrksrc="qt-everywhere-src-${version}" build_style=gnu-configure hostmakedepends="cmake clang flex git glib-devel gperf ninja pkg-config protobuf python re2c ruby which" makedepends="SDL2-devel Vulkan-Headers alsa-lib-devel double-conversion-devel eudev-libudev-devel ffmpeg-devel freetds-devel glib-devel gst-plugins-base1-devel gtk+3-devel icu-devel jsoncpp-devel libXv-devel libbluetooth-devel libcap-devel libevent-devel libinput-devel libmng-devel libmysqlclient-devel libproxy-devel libvpx-devel libwebp-devel libxslt-devel minizip-devel nss-devel cups-devel opus-devel pciutils-devel pcre2-devel postgresql-libs-devel protobuf-devel pulseaudio-devel snappy-devel tslib-devel unixodbc-devel xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel libzstd-devel harfbuzz-devel" depends="qtchooser" short_desc="Cross-platform application and UI framework (QT5)" maintainer="Jürgen Buchmüller " license="GPL-3.0-or-later, LGPL-3.0-or-later" homepage="https://qt.io/" distfiles="http://download.qt.io/official_releases/qt/${version%.*}/${version}/single/qt-everywhere-src-${version}.tar.xz" checksum=55e8273536be41f4f63064a79e552a22133848bb419400b6fa8e9fc0dc05de08 replaces="qt5-doc<5.6.0 qt5-quick1<5.6.0 qt5-quick1-devel<5.6.0 qt5-webkit<5.6.0 qt5-webkit-devel<5.6.0 qt5-enginio<5.7.1 qt5-enginio-devel<5.7.1 qt5-plugin-gtk<5.7.1 qt5-canvas3d<5.13.0" build_options="webengine" desc_option_webengine="Build Chromium-based WebEngine component" makedepends+=" harfbuzz-devel" if [ "$XBPS_TARGET_LIBC" = "musl" ]; then makedepends+=" musl-legacy-compat" fi case "$XBPS_TARGET_MACHINE" in armv5tel*) ;; # qtwebengine uses VSM assembler commands ppc|ppc-musl) ;; # qtwebengine does not support ppc 32 bit *) if [ "$XBPS_WORDSIZE" = "$XBPS_TARGET_WORDSIZE" ]; then # webengine can be built only if word size matches build_options_default="webengine" fi;; esac if [ "$build_option_webengine" ]; then # v8 requires libatomic on armv[56]*/ppc*/s390x/mips* case "$XBPS_TARGET_MACHINE" in armv[56]*|mips*|ppc*) makedepends+=" libatomic-devel" ;; *) ;; esac # also need it on host when it's one of those archs case "$XBPS_MACHINE" in armv[56]*|mips*|ppc*) hostmakedepends+=" libatomic-devel" ;; *) ;; esac fi subpackages="qt5-3d qt5-3d-devel qt5-charts qt5-charts-devel qt5-connectivity qt5-connectivity-devel qt5-datavis3d qt5-datavis3d-devel qt5-declarative qt5-declarative-devel qt5-devel qt5-examples qt5-gamepad qt5-gamepad-devel qt5-graphicaleffects qt5-host-tools qt5-imageformats qt5-location qt5-location-devel qt5-multimedia qt5-multimedia-devel qt5-networkauth qt5-networkauth-devel qt5-plugin-mysql qt5-plugin-odbc qt5-plugin-pgsql qt5-plugin-sqlite qt5-plugin-tds qt5-purchasing qt5-purchasing-devel qt5-qmake qt5-quickcontrols qt5-quickcontrols2 qt5-quickcontrols2-devel qt5-remoteobjects qt5-remoteobjects-devel qt5-script qt5-script-devel qt5-scxml qt5-scxml-devel qt5-sensors qt5-sensors-devel qt5-serialbus qt5-serialbus-devel qt5-serialport qt5-serialport-devel qt5-speech qt5-speech-devel qt5-svg qt5-svg-devel qt5-tools qt5-tools-devel qt5-translations qt5-virtualkeyboard qt5-virtualkeyboard-devel qt5-wayland qt5-wayland-devel qt5-webchannel qt5-webchannel-devel qt5-webglplugin qt5-webglplugin-devel qt5-websockets qt5-websockets-devel qt5-webview qt5-webview-devel qt5-x11extras qt5-x11extras-devel qt5-xmlpatterns qt5-xmlpatterns-devel qt5-lottie qt5-lottie-devel" if [ "$build_option_webengine" ]; then subpackages+=" qt5-webengine qt5-webengine-devel" fi if [ "$XBPS_WORDSIZE" -eq 32 ]; then nodebug=yes # prevent OOM fi # Work around SSLv3_{client,server}_method missing in libressl-2.3.3 CFLAGS="-DOPENSSL_NO_PSK -DOPENSSL_NO_NEXTPROTONEG" CXXFLAGS="${CFLAGS} -Wno-deprecated-declarations -Wno-class-memaccess -Wno-packed-not-aligned" # Required for musl libc LDFLAGS="-pthread -ldl -fPIE -Wl,-z,stack-size=2097152" if [ "$CROSS_BUILD" ]; then # Need some devel packages in the host to build qmake, moc, uic, rcc # wayland-devel contains /usr/bin/wayland-scanner hostmakedepends+=" icu-devel wayland-devel zlib-devel" hostmakedepends+=" postgresql-libs-devel" # Cross building qtwebengine requires some more host packages if [ "$build_option_webengine" ]; then hostmakedepends+=" nss-devel libevent-devel" fi fi _bootstrap_gn() { # Bootstrap gn (generate ninja) echo "Bootstrapping 'gn'" cd ${wrksrc}/qtwebengine/src/3rdparty/gn CFLAGS="$CFLAGS_host" CXXFLAGS="$CXXFLAGS_host" LDFLAGS="$LDFLAGS_host" \ PKGCONFIG=/usr/bin/pkgconfig PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig" \ python2 build/gen.py --no-last-commit-position --out-path \ ${wrksrc}/qtwebengine/src/3rdparty/gn/out/Release --cc "$CC_host" \ --cxx "$CXX_host" --ld "$CXX_host" --ar "$AR_host" ninja -C out/Release gn cd ${wrksrc} } _cleanup_wrksrc_leak() { if [ -d "${PKGDESTDIR}/usr/lib/cmake" ]; then # Replace references to ${wrksrc} in cmake files sed -i ${PKGDESTDIR}/usr/lib/cmake/*/*.cmake \ -e "s;${wrksrc}/host;/usr/lib/qt5;g" \ -e "s;devices/void-${XBPS_CROSS_TRIPLET}-g++;linux-g++;g" fi if [ -d "${PKGDESTDIR}/usr/lib/pkgconfig" ]; then # Replace references to ${wrksrc} in pkgconfig files sed -i ${PKGDESTDIR}/usr/lib/pkgconfig/*.pc \ -e "s;${wrksrc}/host;/usr/lib/qt5;g" \ -e "s;devices/void-${XBPS_CROSS_TRIPLET}-g++;linux-g++;g" fi # Remove QMAKE_PRL_BUILD_DIR from hint files for static libraries # and replace references to ${wrksrc} find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \ -e "/^QMAKE_PRL_BUILD_DIR/d" \ -e "s;-L${wrksrc}/qtbase/lib;-L/usr/lib;g" \; # Replace ${wrksrc} in project include files find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \ -e "s;${wrksrc}/qtbase;/usr/lib/qt5;g" \; } _install_subpkg() { local module=$1 f base cd ${wrksrc}/${module} make INSTALL_ROOT=${PKGDESTDIR} install rm -rf ${PKGDESTDIR}/builddir rm -rf ${PKGDESTDIR}/usr/include rm -rf ${PKGDESTDIR}/usr/lib/cmake rm -rf ${PKGDESTDIR}/usr/lib/qt5/mkspecs rm -rf ${PKGDESTDIR}/usr/lib/pkgconfig rm -f ${PKGDESTDIR}/usr/lib/*.a rm -f ${PKGDESTDIR}/usr/lib/*.so rm -f ${PKGDESTDIR}/usr/lib/*.prl if [ -d ${PKGDESTDIR}/usr/lib/qt5/bin ]; then if [ "$CROSS_BUILD" ]; then for f in $(find ${PKGDESTDIR}/usr/lib/qt5/bin -name "*-target" -type f); do base=${f##*/} mv -v ${f} ${f%-target} done fi vmkdir usr/bin for f in $(find ${PKGDESTDIR}/usr/lib/qt5/bin -type f); do base=${f##*/} ln -sf /usr/lib/qt5/bin/${base} ${PKGDESTDIR}/usr/bin/${base}-qt5 done fi } _install_devel() { local module=$1 cd ${wrksrc}/${module} make INSTALL_ROOT=${PKGDESTDIR} install rm -rf ${PKGDESTDIR}/builddir rm -rf ${PKGDESTDIR}/usr/share rm -rf ${PKGDESTDIR}/usr/lib/qt5/bin rm -rf ${PKGDESTDIR}/usr/lib/qt5/qml rm -rf ${PKGDESTDIR}/usr/lib/qt5/libexec rm -rf ${PKGDESTDIR}/usr/lib/qt5/plugins rm -f ${PKGDESTDIR}/usr/lib/*.so.* _cleanup_wrksrc_leak } _move_target_binaries() { local f [ -z "$CROSS_BUILD" ] && return 0 vmkdir usr/lib/qt5/bin for f in $@; do if [ -f ${DESTDIR}/usr/lib/qt5/bin/${f}-target ]; then mv -v ${DESTDIR}/usr/lib/qt5/bin/${f}-target \ ${PKGDESTDIR}/usr/lib/qt5/bin/${f} fi done } _create_config() { local specs=${wrksrc}/qtbase/mkspecs/devices device="$1" local qmake_conf="${specs}/${device}/qmake.conf" mkdir -p ${specs}/${device} echo "#" > ${qmake_conf} echo "# qmake configuration for building with $XBPS_TARGET_MACHINE" >> ${qmake_conf} echo "#" >> ${qmake_conf} echo >> ${qmake_conf} echo "include(../common/linux_device_pre.conf)" >> ${qmake_conf} echo >> ${qmake_conf} # Fake distro name to tell we want control echo "DISTRO = arch" >> ${qmake_conf} # Hard float on armv6, armv7, not on armv5tel case "$XBPS_TARGET_MACHINE" in armv6*|armv7*) echo "DISTRO_OPTS += hard-float" >> ${qmake_conf} ;; esac echo "QMAKE_CC = ${CC}" >> ${qmake_conf} echo "QMAKE_CXX = ${CXX}" >> ${qmake_conf} echo "QMAKE_LINK = ${CXX}" >> ${qmake_conf} echo "QMAKE_LINK_SHLIB = ${CXX}" >> ${qmake_conf} echo "QMAKE_LFLAGS = ${LDFLAGS}" >> ${qmake_conf} echo "QMAKE_CFLAGS = ${CFLAGS}" >> ${qmake_conf} echo "QMAKE_CXXFLAGS = ${CXXFLAGS}" >> ${qmake_conf} echo >> ${qmake_conf} case "$XBPS_TARGET_MACHINE" in arm*) echo "include(../common/linux_arm_device_post.conf)" >> ${qmake_conf} ;; *) echo "include(../common/linux_device_post.conf)" >> ${qmake_conf} ;; esac echo "load(qt_config)" >> ${qmake_conf} echo '#include "../../linux-g++/qplatformdefs.h"' > ${specs}/${device}/qplatformdefs.h } _msg_cross() { msg_normal "***************************************************\n" msg_normal "$1 for target ${CROSS_BUILD} ...\n" msg_normal "***************************************************\n" } do_configure() { local opts spec # Compatibility functions res_ninit() and res_nclose() for musl libc cp ${FILESDIR}/resolv_compat.h ${wrksrc}/qtwebengine/src/3rdparty/chromium/net/dns case "$XBPS_TARGET_MACHINE" in armv5*|armv6*) # Disable "yield" assembler instruction sed -i qtwebengine/src/3rdparty/chromium/base/allocator/partition_allocator/spin_lock.cc \ qtwebengine/src/3rdparty/chromium/third_party/pdfium/third_party/base/allocator/partition_allocator/spin_lock.cc \ -e 's;"yield";"nop";' ;; esac case "$XBPS_TARGET_MACHINE" in *-musl) # Patch .../linux/*/config.{h,asm} to define HAVE_SYSCTL 0 local config chromium=${wrksrc}/qtwebengine/src/3rdparty/chromium for config in $(find ${chromium}/third_party/ffmpeg/chromium/config -name "config\.*" | grep linux); do sed -i ${config} -e "s;HAVE_SYSCTL 1;HAVE_SYSCTL 0;" done # Do not use allocator shim (incompatible with musl libc) sed -i qtwebengine/src/3rdparty/chromium/build/config/allocator.gni \ -e "s;\(use_allocator_shim\) = .*;\1 = false;" # Define to set 2 MiB stack size for qthread export CXXFLAGS+=" -D_POSIX_THREAD_ATTR_STACKSIZE=2097152" ;; esac # Cross build patches if [ "$CROSS_BUILD" ]; then # This also sets default {C,CXX,LD}FLAGS for projects built using qmake sed -i -e "s|^\(QMAKE_CFLAGS_RELEASE.*\)|\1 ${XBPS_CFLAGS}|" \ ${wrksrc}/qtbase/mkspecs/common/gcc-base.conf sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 ${XBPS_LDFLAGS}|" \ ${wrksrc}/qtbase/mkspecs/common/g++-unix.conf # Create symbolic links for private include directories for d in $(ls ${wrksrc}/qtbase/include); do ln -sfv ${version}/${d}/private qtbase/include/${d}/private done if [ "$build_option_webengine" ]; then _bootstrap_gn fi case "$XBPS_TARGET_MACHINE" in mips*) # sgidefs.h is in /usr/include/asm for f in \ qtwebengine/src/3rdparty/chromium/third_party/lss/linux_syscall_support.h \ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/android/include/asm-mips/fpregdef.h \ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/android/include/asm-mips/regdef.h \ qtwebengine/src/3rdparty/chromium/third_party/breakpad/breakpad/src/common/android/include/asm-mips/asm.h \ qtwebengine/src/3rdparty/chromium/third_party/tcmalloc/vendor/src/base/linux_syscall_support.h \ qtwebengine/src/3rdparty/chromium/third_party/tcmalloc/chromium/src/base/linux_syscall_support.h \ qtscript/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h; do sed -i $f -e "s;;;" done # Assume that RGBA order is correct for big endian CPUs sed -i qtwebengine/src/3rdparty/chromium/skia/config/SkUserConfig.h \ -e '/#error Read the comment at this location/d' ;; esac patch -Np0 < ${FILESDIR}/0090-hard-disable-qmlchachegen.patch else # qmake {CXX,L}FLAGS patches sed -i -e "s|^\(CXXFLAGS =.*\)|\1 ${CXXFLAGS}|" \ -e "s|^\(LFLAGS =.*\)|\1 ${LDFLAGS}|" \ ${wrksrc}/qtbase/qmake/Makefile.unix # Build qmake using Void {C,LD}FLAGS # This also sets default {C,CXX,LD}FLAGS for projects built using qmake sed -i -e "s|^\(QMAKE_CFLAGS_RELEASE.*\)|\1 ${CFLAGS}|" \ ${wrksrc}/qtbase/mkspecs/common/gcc-base.conf sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 ${LDFLAGS}|" \ ${wrksrc}/qtbase/mkspecs/common/g++-unix.conf fi opts+=" -confirm-license" opts+=" -opensource" opts+=" -prefix /usr" opts+=" -bindir /usr/lib/qt5/bin" opts+=" -datadir /usr/share/qt5" opts+=" -headerdir /usr/include/qt5" opts+=" -sysconfdir /etc/xdg" opts+=" -plugindir /usr/lib/qt5/plugins" opts+=" -docdir /usr/share/doc/qt5" opts+=" -importdir /usr/lib/qt5/imports" opts+=" -translationdir /usr/share/qt5/translations" opts+=" -examplesdir /usr/share/qt5/examples" opts+=" -archdatadir /usr/lib/qt5" opts+=" -accessibility" opts+=" -fontconfig" opts+=" -icu" opts+=" -openssl-linked" opts+=" -dbus-linked" opts+=" -sql-mysql" opts+=" -mysql_config ${XBPS_CROSS_BASE}/usr/bin/mysql_config" opts+=" -sql-psql" opts+=" -psql_config /usr/bin/pg_config" opts+=" -no-pch" opts+=" -no-strip" opts+=" -nomake examples" opts+=" -optimized-qmake" # opts+=" -opengl dynamic" opts+=" -no-use-gold-linker" opts+=" -system-libjpeg" opts+=" -system-libpng" opts+=" -system-zlib" opts+=" -system-sqlite" opts+=" -system-harfbuzz" # Rely on auto detection (fails if forced for cross builds) if [ "$build_option_webengine" ]; then # opts+=" -webengine-alsa" opts+=" -no-webengine-embedded-build" opts+=" -webengine-icu" opts+=" -webengine-ffmpeg" opts+=" -webengine-opus" opts+=" -webengine-webp" opts+=" -webengine-pepper-plugins" opts+=" -webengine-printing-and-pdf" opts+=" -webengine-proprietary-codecs" opts+=" -webengine-pulseaudio" opts+=" -webengine-spellchecker" opts+=" -webengine-webrtc" opts+=" -webengine-geolocation" opts+=" -webengine-v8-snapshot" fi opts+=" -silent" # opts+=" -v" # make sure to disable webengine on platforms that we don't build it for if [ -z "$build_option_webengine" ]; then opts+=" -skip qtwebengine" fi LDFLAGS+=" -Wl,--no-keep-memory" # needs more than 8GB RAM else if [ "$CROSS_BUILD" ]; then spec=void-${XBPS_CROSS_TRIPLET}-g++ _create_config ${spec} opts+=" -device ${spec}" opts+=" -device-option CROSS_COMPILE=${XBPS_CROSS_TRIPLET}-" opts+=" -sysroot ${XBPS_CROSS_BASE}" opts+=" -hostprefix host" opts+=" -extprefix /usr" case "$XBPS_TARGET_MACHINE" in arm*|mips*) if [ "$build_option_webengine" ]; then # V8 snapshot can't be built with a 64 bit host compiler opts+=" -no-webengine-v8-snapshot" fi ;; esac case "$XBPS_TARGET_MACHINE" in aarch64*|armv7*) sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \ -e "/arm_use_neon=/s;false;true;" ;; arm*) sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \ -e "/arm_use_neon=/s;true;false;" ;; esac sed -i ${wrksrc}/qtwebengine/src/core/config/linux.pri \ -e "/equals(MARMV/s;true;false;" # Make sure libQt5Designer is built cp -v ${FILESDIR}/qttools_src.pro qttools/src/src.pro cp -v ${FILESDIR}/designer_src.pro qttools/src/designer/src/src.pro cp -v ${FILESDIR}/assistant.pro qttools/src/assistant/assistant.pro cp -v ${FILESDIR}/linguist.pro qttools/src/linguist/linguist.pro fi CC="cc" CXX="c++" CPP="cpp" LD="c++" AR="ar" AS="as" NM="nm" \ OBJDUMP="objdump" STRIP="strip" RANLIB="ranlib" \ CFLAGS="$XBPS_CFLAGS" CXXFLAGS="$XBPS_CXXFLAGS" \ CPPFLAGS="$XBPS_CPPFLAGS" LDFLAGS="$XBPS_LDFLAGS" \ LFLAGS="$XBPS_LDFLAGS" \ ${wrksrc}/configure ${opts} export LD_LIBRARY_PATH="${wrksrc}/qtbase/lib:${wrksrc}/qttools/lib:${LD_LIBRARY_PATH}" } do_build() { export NINJAJOBS=${makejobs} # Run make twice because sometimes a file "chrome/grit/generated_resources.h" # is not yet ready when it is to be included. Repeating make works around that # problem without having to resort to disable_parallel_build=yes make ${makejobs} || make ${makejobs} } do_install() { local f base bin dir dirs if [ -z "$CROSS_BUILD" ]; then unset CC CXX LD CPP AR AS RANLIB fi cd ${wrksrc}/qtbase make INSTALL_ROOT=${DESTDIR} install _cleanup_wrksrc_leak # Symbolic links for remaining binaries vmkdir usr/bin for f in $(find ${DESTDIR}/usr/lib/qt5/bin -type f); do base=${f##*/} ln -sf /usr/lib/qt5/bin/${base} ${PKGDESTDIR}/usr/bin/${base}-qt5 done if [ "$CROSS_BUILD" ]; then vmkdir usr/bin vmkdir usr/lib/qt5/bin # # Build qmake for the target # _msg_cross "Building qmake" cd ${wrksrc}/qtbase/qmake sed Makefile \ -e"s;^\(CC\\s*=\).*;\1 $CC;" \ -e"s;^\(CXX\\s*=\).*;\1 $CXX;" \ -e"s;^\(LINK\\s*=\).*;\1 $CXX;" \ -e"s;^\(QMAKE_CFLAGS\\s*=\).*;\1 $CFLAGS;" \ -e"s;^\(QMAKE_CXXFLAGS\\s*=\).*;\1 $CXXFLAGS;" \ -e"s;^\(QMAKE_LFLAGS\\s*=\).*;\1 $LDFLAGS;" \ -e"s;\$(BUILD_PATH)/bin;${PKGDESTDIR}/usr/lib/qt5/bin;" \ > Makefile.target make clean make -f Makefile.target ${makejobs} ln -sf ../lib/qt5/bin/qmake ${PKGDESTDIR}/usr/bin/qmake-qt5 cp -ar ${wrksrc}/qtbase/mkspecs ${PKGDESTDIR}/usr/lib/qt5 # # Build qmldevtools for the target # base=qmldevtools dir=qtdeclarative/src _msg_cross " Building ${base}" cd ${wrksrc}/${dir}/${base} [ -f "${base}.pro" ] && cp -a ${base}.pro{,.orig} sed -i ${base}.pro \ -e "/option(host_build)/d" \ -e "/include(..\/3rdparty\/masm\/masm-defs.pri)/i include(../3rdparty/masm/masm.pri)" make clean # Create the Makefile mv -v Makefile{,.orig} ${wrksrc}/qtbase/bin/qmake -o Makefile ${base}.pro make ${makejobs} # Restore profile, if any [ -f "${base}.pro.orig" ] && mv -v ${base}.pro{.orig,} mv -v Makefile{.orig,} # Avoid rebuilding the Makefile by changing the rule sed -i Makefile -e "s;^Makefile:;Makefile.host:;" # # Build various tools for the target # dirs+=" qtdeclarative/tools/qmlmin" dirs+=" qtdeclarative/tools/qmllint" dirs+=" qtdeclarative/tools/qmlimportscanner" dirs+=" qtbase/src/tools/moc" dirs+=" qtbase/src/tools/rcc" dirs+=" qtbase/src/tools/uic" dirs+=" qtbase/src/tools/qdbuscpp2xml" dirs+=" qtbase/src/tools/qdbusxml2cpp" dirs+=" qtbase/src/tools/qlalr" dirs+=" qt3d/tools/qgltf" dirs+=" qtremoteobjects/tools/repc" dirs+=" qtscxml/tools/qscxmlc" dirs+=" qttools/src/qtattributionsscanner" dirs+=" qttools/src/linguist/lconvert" dirs+=" qttools/src/linguist/lrelease" dirs+=" qttools/src/linguist/lrelease-pro" dirs+=" qttools/src/linguist/lprodump" dirs+=" qttools/src/linguist/lupdate" dirs+=" qttools/src/linguist/lupdate-pro" # Cannot be cross compiled (target clang issue) # dirs+=" qttools/src/qdoc" for f in ${dirs}; do base=${f##*/} dir=${f%%/*} _msg_cross " Building ${base}" cd ${wrksrc}/${f} if [ -x "${wrksrc}/${dir}/bin/${base}" ]; then mv -v ${wrksrc}/${dir}/bin/${base}{,-host} fi [ -f Makefile ] && make clean [ -f "${base}.pro" ] && cp -a ${base}.pro{,.orig} if [ -f "${FILESDIR}/${base}.pro" ]; then # A specific *.pro file is available, use it. cp ${FILESDIR}/${base}.pro ${base}.pro else # Otherwise strip the option(host_build) sed -i ${base}.pro -e "/option(host_build)/d" fi # Create the Makefile [ -f Makefile ] && mv -v Makefile{,.orig} ${wrksrc}/qtbase/bin/qmake -o Makefile ${base}.pro # Now patch the Makefile(s) to not use the bootstrap libs and # use the compiler, linker, flags, etc. for the target arch find . -name "Makefile*" -exec sed -i "{}" \ -e "s; force_bootstrap;;" \ -e "s;^\(CC\\s*=\).*;\1 $CC;" \ -e "s;^\(CXX\\s*=\).*;\1 $CXX;" \ -e "s;^\(LINK\\s*=\).*;\1 $CXX;" \ -e "s;^\(CFLAGS\\s*=.*\);\1 $CFLAGS;" \ -e "s;^\(CXXFLAGS\\s*=.*\);\1 $CXXFLAGS;" \ -e "s;^\(LFLAGS\\s*=.*\);\1 $LDFLAGS;" \ -e "s;^\(AR\\s*=\).*;\1 $AR cqs;" \ -e "s;^\(RANLIB\\s*=\).*;\1 $RANLIB;" \ \; # Set a different destination directory and target name sed -i Makefile \ -e "s;^\(DESTDIR\\s*=\).*;\1 ${DESTDIR}/usr/lib/qt5/bin/;" \ -e "s;^\(TARGET\\s*=\).*;\1 ${DESTDIR}/usr/lib/qt5/bin/${base}-target;" make ${makejobs} # Restore profile, if any [ -f "${base}.pro.orig" ] && mv -v ${base}.pro{.orig,} [ -f Makefile.orig ] && mv -v Makefile{.orig,} # Avoid rebuilding the Makefile by changing the rule sed -i Makefile -e 's;^all:.*;all:;' sed -i Makefile -e "s;^Makefile:;Makefile.host:;" if [ -x "${wrksrc}/${dir}/bin/${base}-host" ]; then mv -v ${wrksrc}/${dir}/bin/${base}{-host,} touch ${wrksrc}/${dir}/bin/${base} fi done fi # Remove builddir from installation rm -rf ${DESTDIR}/builddir } qt5-3d-devel_package() { short_desc+=" - C++ and QML APIs for 3D graphics (development)" depends="qt5-3d-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qt3d _move_target_binaries qgltf } } qt5-3d_package() { short_desc+=" - C++ and QML APIs for 3D graphics" pkg_install() { _install_subpkg qt3d } } qt5-charts-devel_package() { short_desc+=" - Charts component (development)" depends="qt5-charts-${version}_${revision} qt5-declarative-devel-${version}_${revision}" pkg_install() { _install_devel qtcharts } } qt5-charts_package() { short_desc+=" - Charts component" pkg_install() { _install_subpkg qtcharts } } qt5-connectivity-devel_package() { short_desc+=" - Connectivity component (development)" depends="qt5-connectivity-${version}_${revision} qt5-declarative-devel-${version}_${revision}" pkg_install() { _install_devel qtconnectivity } } qt5-connectivity_package() { short_desc+=" - Connectivity component" pkg_install() { _install_subpkg qtconnectivity } } qt5-datavis3d-devel_package() { short_desc+=" - 3D data visualization (development)" depends="qt5-datavis3d-${version}_${revision} qt5-declarative-devel-${version}_${revision}" pkg_install() { _install_devel qtdatavis3d } } qt5-datavis3d_package() { short_desc+=" - 3D data visualization" pkg_install() { _install_subpkg qtdatavis3d } } qt5-declarative-devel_package() { short_desc+=" - Declarative component (development)" depends="qt5-declarative-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtdeclarative } } qt5-declarative_package() { short_desc+=" - Declarative component" pkg_install() { _install_subpkg qtdeclarative _move_target_binaries qmlmin qmllint qmlimportscanner } } qt5-examples_package() { short_desc+=" - Examples" depends="qt5-devel-${version}_${revision} qt5-qmake-${version}_${revision} qt5-host-tools-${version}_${revision}" pkg_install() { local dir mod base=usr/share/qt5/examples vmkdir ${base} vcopy qtbase/examples/examples.pro ${base}/ # Copy examples source for dir in $(find ${wrksrc} -maxdepth 2 -type d -name examples); do mod=${dir%/examples} mod=${mod##*/} vcopy ${dir}/* ${base}/ if [ -e "${PKGDESTDIR}/${base}/README" ]; then mv ${PKGDESTDIR}/${base}/README{,.${mod}} fi done } } qt5-lottie-devel_package() { pkg_install() { _install_devel qtlottie } } qt5-lottie_package() { pkg_install() { _install_subpkg qtlottie } } qt5-gamepad-devel_package() { short_desc+=" - Gamepad component (development)" depends="qt5-gamepad-${version}_${revision} qt5-declarative-devel-${version}_${revision}" pkg_install() { _install_devel qtgamepad } } qt5-gamepad_package() { short_desc+=" - Gamepad component" pkg_install() { _install_subpkg qtgamepad } } qt5-graphicaleffects_package() { short_desc+=" - Graphicaleffects component" pkg_install() { _install_subpkg qtgraphicaleffects } } qt5-imageformats_package() { short_desc+=" - Plugins for additional image formats" pkg_install() { _install_subpkg qtimageformats } } qt5-location-devel_package() { short_desc+=" - Location and Positioning components (development)" depends="qt5-location-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtlocation } } qt5-location_package() { short_desc+=" - Location and Positioning components" pkg_install() { _install_subpkg qtlocation } } qt5-multimedia-devel_package() { short_desc+=" - Multimedia component (development)" depends="qt5-multimedia-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtmultimedia } } qt5-multimedia_package() { short_desc+=" - Multimedia component" pkg_install() { _install_subpkg qtmultimedia } } qt5-networkauth-devel_package() { short_desc+=" - NetworkAuth component (development)" depends="qt5-networkauth-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtnetworkauth } } qt5-networkauth_package() { short_desc+=" - NetworkAuth component" pkg_install() { _install_subpkg qtnetworkauth } } qt5-purchasing-devel_package() { short_desc+=" - Purchasing component (development)" depends="qt5-purchasing-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtpurchasing } } qt5-purchasing_package() { short_desc+=" - Purchasing component" pkg_install() { _install_subpkg qtpurchasing } } qt5-quickcontrols_package() { short_desc+=" - Quick UI controls" pkg_install() { _install_subpkg qtquickcontrols } } qt5-quickcontrols2-devel_package() { short_desc+=" - Quick2 UI controls (development)" depends="qt5-quickcontrols2-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtquickcontrols2 } } qt5-quickcontrols2_package() { short_desc+=" - Quick2 UI controls" pkg_install() { _install_subpkg qtquickcontrols2 } } qt5-remoteobjects-devel_package() { short_desc+=" - Remote Objects (development)" depends="qt5-remoteobjects-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtremoteobjects } } qt5-remoteobjects_package() { short_desc+=" - Remote Objects" pkg_install() { _install_subpkg qtremoteobjects _move_target_binaries repc } } qt5-script-devel_package() { short_desc+=" - Scriptable classes (development)" depends="qt5-script-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtscript } } qt5-script_package() { short_desc+=" - Scriptable classes" pkg_install() { _install_subpkg qtscript } } qt5-scxml-devel_package() { short_desc+=" - SCXML model integration (development)" depends="qt5-scxml-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtscxml } } qt5-scxml_package() { short_desc+=" - SCXML model integration" pkg_install() { _install_subpkg qtscxml _move_target_binaries qscxmlc } } qt5-sensors-devel_package() { short_desc+=" - Sensors component (development)" depends="qt5-sensors-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtsensors } } qt5-sensors_package() { short_desc+=" - Sensors component" pkg_install() { _install_subpkg qtsensors } } qt5-serialbus-devel_package() { short_desc+=" - Serial bus component (development)" depends="qt5-serialbus-${version}_${revision} qt5-serialport-devel-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtserialbus } } qt5-serialbus_package() { short_desc+=" - Serial bus component" pkg_install() { _install_subpkg qtserialbus } } qt5-serialport-devel_package() { short_desc+=" - Serial port component (development)" depends="qt5-serialport-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtserialport } } qt5-serialport_package() { short_desc+=" - Serial port component" pkg_install() { _install_subpkg qtserialport } } qt5-speech-devel_package() { short_desc+=" - Speech component (development)" depends="qt5-speech-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtspeech } } qt5-speech_package() { short_desc+=" - Speech component" pkg_install() { _install_subpkg qtspeech } } qt5-svg-devel_package() { short_desc+=" - Svg component (development)" depends="qt5-svg-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtsvg } } qt5-svg_package() { short_desc+=" - Svg component" pkg_install() { _install_subpkg qtsvg } } qt5-virtualkeyboard-devel_package() { short_desc+=" - Virtual keyboard (development)" depends="qt5-virtualkeyboard-${version}_${revision} qt5-declarative-devel-${version}_${revision}" pkg_install() { _install_devel qtvirtualkeyboard } } qt5-virtualkeyboard_package() { short_desc+=" - Virtual keyboard" pkg_install() { _install_subpkg qtvirtualkeyboard } } qt5-wayland-devel_package() { short_desc+=" - Wayland component (development)" depends="qt5-wayland-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwayland } } qt5-wayland_package() { short_desc+=" - Wayland component" pkg_install() { _install_subpkg qtwayland } } qt5-webchannel-devel_package() { short_desc+=" - WebChannel component (development)" depends="qt5-webchannel-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwebchannel } } qt5-webchannel_package() { short_desc+=" - WebChannel component" pkg_install() { _install_subpkg qtwebchannel } } qt5-webengine-devel_package() { short_desc+=" - WebEngine component (development)" depends="qt5-webengine-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwebengine } } qt5-webengine_package() { short_desc+=" - WebEngine component" pkg_install() { _install_subpkg qtwebengine } } qt5-webglplugin-devel_package() { short_desc+=" - WebGL plugin (development)" depends="qt5-webglplugin-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwebglplugin } } qt5-webglplugin_package() { short_desc+=" - WebGL plugin" pkg_install() { _install_subpkg qtwebglplugin } } qt5-websockets-devel_package() { short_desc+=" - WebSockets component (development)" depends="qt5-websockets-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwebsockets } } qt5-websockets_package() { short_desc+=" - WebSockets component" pkg_install() { _install_subpkg qtwebsockets } } qt5-webview-devel_package() { short_desc+=" - WebView component (development)" depends="qt5-webview-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtwebview } } qt5-webview_package() { short_desc+=" - WebView component" pkg_install() { _install_subpkg qtwebview } } qt5-x11extras-devel_package() { short_desc+=" - X11 extras (development)" depends="qt5-x11extras-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtx11extras } } qt5-x11extras_package() { short_desc+=" - X11 extras" pkg_install() { _install_subpkg qtx11extras } } qt5-xmlpatterns-devel_package() { short_desc+=" - XML components (development)" depends="qt5-xmlpatterns-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qtxmlpatterns } } qt5-xmlpatterns_package() { short_desc+=" - XML components" pkg_install() { _install_subpkg qtxmlpatterns } } qt5-translations_package() { short_desc+=" - Translations" pkg_install() { _install_subpkg qttranslations } } qt5-host-tools_package() { short_desc+=" - Tools required when cross compiling" pkg_install() { local dest=${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/qt5-tools-${version} vmkdir usr/lib/qt5/bin vmkdir usr/bin for f in moc rcc uic qlalr qdbuscpp2xml qdbusxml2cpp \ lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do if [ -r ${dest}/usr/lib/qt5/bin/${f} ]; then mv -v ${dest}/usr/lib/qt5/bin/${f} ${PKGDESTDIR}/usr/lib/qt5/bin/ fi if [ -f ${DESTDIR}/usr/lib/qt5/bin/${f}-target ]; then mv -v ${DESTDIR}/usr/lib/qt5/bin/${f}{-target,} fi if [ -f ${DESTDIR}/usr/lib/qt5/bin/${f} ]; then vmove usr/lib/qt5/bin/${f} fi if [ -f ${DESTDIR}/usr/bin/${f}-qt5 ] || [ -h ${DESTDIR}/usr/bin/${f}-qt5 ]; then vmove usr/bin/${f}-qt5 else ln -sf ../lib/qt5/bin/${f} ${PKGDESTDIR}/usr/bin/${f}-qt5 fi done } } qt5-tools-devel_package() { short_desc+=" - Development tools (development)" depends="qt5-tools-${version}_${revision} qt5-devel-${version}_${revision}" pkg_install() { _install_devel qttools } } qt5-tools_package() { short_desc+=" - Development tools" depends="qt5-translations desktop-file-utils hicolor-icon-theme" pkg_install() { local f dest=${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/qt5-host-tools-${version} _install_subpkg qttools # install missing icons and desktop files for icon in ${wrksrc}/qttools/src/linguist/linguist/images/icons/linguist-*-32.png ; do size=$(echo $(basename ${icon}) | cut -d- -f2) install -p -D -m644 ${icon} \ ${PKGDESTDIR}/usr/share/icons/hicolor/${size}x${size}/apps/linguist-qt5.png done install -Dm644 ${wrksrc}/qttools/src/assistant/assistant/images/assistant.png \ ${PKGDESTDIR}/usr/share/icons/hicolor/32x32/apps/assistant-qt5.png install -Dm644 ${wrksrc}/qttools/src/assistant/assistant/images/assistant-128.png \ ${PKGDESTDIR}/usr/share/icons/hicolor/128x128/apps/assistant-qt5.png install -Dm644 ${wrksrc}/qttools/src/designer/src/designer/images/designer.png \ ${PKGDESTDIR}/usr/share/icons/hicolor/128x128/apps/designer-qt5.png install -Dm644 ${wrksrc}/qttools/src/qdbus/qdbusviewer/images/qdbusviewer.png \ ${PKGDESTDIR}/usr/share/icons/hicolor/32x32/apps/qdbusviewer-qt5.png install -Dm644 ${wrksrc}/qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png \ ${PKGDESTDIR}/usr/share/icons/hicolor/128x128/apps/qdbusviewer-qt5.png # install desktop files vmkdir usr/share/applications install -m644 ${FILESDIR}/*.desktop ${PKGDESTDIR}/usr/share/applications _move_target_binaries qtattributionsscanner qdoc # Move some binaries to qt5-host-tools for f in lconvert lupdate lupdate-pro lprodump lrelease lrelease-pro; do if [ -f ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ]; then mkdir -p ${dest}/usr/lib/qt5/bin mv -v ${PKGDESTDIR}/usr/lib/qt5/bin/${f} ${dest}/usr/lib/qt5/bin/ fi if [ -f ${PKGDESTDIR}/usr/bin/${f}-qt5 ] || [ -h ${PKGDESTDIR}/usr/bin/${f}-qt5 ]; then mkdir -p ${dest}/usr/bin mv -v ${PKGDESTDIR}/usr/bin/${f}-qt5 ${dest}/usr/bin/ fi done } } qt5-devel_package() { depends="zlib-devel libressl-devel>=2.1.4 libXext-devel libXrender-devel fontconfig-devel libglib-devel MesaLib-devel mtdev-devel dbus-devel icu-devel cups-devel qt5-${version}_${revision} qt5-qmake-${version}_${revision} qt5-host-tools-${version}_${revision}" short_desc+=" - Development files" # qt5-enginio-devel is gone pkg_install() { vmove usr/include vmove usr/lib/*.a vmove usr/lib/*.prl vmove usr/lib/cmake vmove usr/lib/pkgconfig _cleanup_wrksrc_leak } } qt5-plugin-odbc_package() { short_desc+=" - ODBC plugin" pkg_install() { vmove usr/lib/qt5/plugins/sqldrivers/libqsqlodbc.so } } qt5-plugin-pgsql_package() { short_desc+=" - PostgreSQL plugin" pkg_install() { vmove usr/lib/qt5/plugins/sqldrivers/libqsqlpsql.so } } qt5-plugin-mysql_package() { short_desc+=" - MySQL plugin" pkg_install() { vmove usr/lib/qt5/plugins/sqldrivers/libqsqlmysql.so } } qt5-plugin-sqlite_package() { short_desc+=" - SQLite plugin" pkg_install() { vmove usr/lib/qt5/plugins/sqldrivers/libqsqlite.so } } qt5-plugin-tds_package() { short_desc+=" - TDS plugin" pkg_install() { vmove usr/lib/qt5/plugins/sqldrivers/libqsqltds.so } } qt5-qmake_package() { short_desc+=" - Qmake Makefile generator tool" pkg_install() { vmove usr/lib/qt5/bin/qmake vmove usr/lib/qt5/mkspecs vmove usr/bin/qmake-qt5 # Change -isystem to -I to avoid "#include_next " errors sed -i ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf \ -e '/^QMAKE_CFLAGS_ISYSTEM/s;-isystem;-I;' find ${PKGDESTDIR} -iname "*.prl" -exec sed -i "{}" \ -e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \; find ${PKGDESTDIR} -iname "*.pri" -exec sed -i "{}" \ -e 's%/usr/lib/lib\([^[:space:]]*\)\.[sa][o]*%-l\1%g' \; # Undo changes to mkspecs/common/gcc-base.conf and g++-unix.conf if [ "$CROSS_BUILD" ]; then sed -i -e "s|^\(QMAKE_CFLAGS_RELEASE.*\) ${XBPS_CFLAGS}|\1|" \ ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\) ${XBPS_LDFLAGS}|\1|" \ ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/g++-unix.conf else sed -i -e "s|^\(QMAKE_CFLAGS_RELEASE.*\) ${CFLAGS}|\1|" \ ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/gcc-base.conf sed -i -e "s|^\(QMAKE_LFLAGS_RELEASE.*\) ${LDFLAGS}|\1|" \ ${PKGDESTDIR}/usr/lib/qt5/mkspecs/common/g++-unix.conf fi } }