From 17e8be403a7f57e8b861711f9c741de8334a6489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Sat, 15 Aug 2020 13:35:06 +0700 Subject: [PATCH] python3-PyQt5-webengine: cross compile --- srcpkgs/python3-PyQt5-webengine/template | 161 +++++++++++++++++++++-- 1 file changed, 152 insertions(+), 9 deletions(-) diff --git a/srcpkgs/python3-PyQt5-webengine/template b/srcpkgs/python3-PyQt5-webengine/template index cd9c0c9ac7..0970f0dbaf 100644 --- a/srcpkgs/python3-PyQt5-webengine/template +++ b/srcpkgs/python3-PyQt5-webengine/template @@ -3,7 +3,8 @@ pkgname=python3-PyQt5-webengine version=5.15.0 revision=1 wrksrc="PyQtWebEngine-${version}" -hostmakedepends="pkg-config qt5-qmake python3-PyQt5 sip5" +hostmakedepends="pkg-config qt5-qmake python3-PyQt5 sip5 qt5-webengine-devel + qt5-declarative-devel qt5-webchannel-devel qt5-location-devel" makedepends="qt5-declarative-devel qt5-webchannel-devel qt5-location-devel qt5-webengine-devel python3-devel python3-PyQt5-devel" depends="python3-PyQt5>=${version}_1 python3-PyQt5-webchannel>=${version}_1" @@ -14,7 +15,6 @@ homepage="https://www.riverbankcomputing.com/software/pyqtwebengine/intro" distfiles="${PYPI_SITE}/P/PyQtWebEngine/PyQtWebEngine-${version}.tar.gz" checksum=670812688e40bf75f70ddf01eadd897d231300318d3856b275bf8e7e0085bf75 lib32disabled=yes -nocross="configure script is broken for cross builds" case "$XBPS_TARGET_MACHINE" in ppc64le*) ;; @@ -22,17 +22,160 @@ case "$XBPS_TARGET_MACHINE" in arm*) broken="depends on qt5-webengine";; esac -pre_build() { +post_extract() { rm -rf pyuic/uic/port_v2 } -do_build() { - python3 configure.py \ - QMAKE_CC="${CC}" QMAKE_CFLAGS="${CFLAGS}" \ - QMAKE_CXX="${CXX}" QMAKE_CXXFLAGS="${CXXFLAGS}" \ - QMAKE_LINK="${CXX}" QMAKE_LINK_SHLIB="${CXX}" - QMAKE_LFLAGS="${LDFLAGS}" QMAKE_STRIP="" +_cross_configure() { + local qmakespec=$XBPS_STATEDIR/qmake-$XBPS_TARGET_MACHINE + mkdir -p $qmakespec/target/linux-g++ + # This is copied from qmake build-style + cat > "$qmakespec/target/linux-g++/qmake.conf" <<-_EOF + MAKEFILE_GENERATOR = UNIX + CONFIG += incremental + QMAKE_INCREMENTAL_STYLE = sublib + include(/usr/lib/qt5/mkspecs/common/linux.conf) + include(/usr/lib/qt5/mkspecs/common/gcc-base-unix.conf) + include(/usr/lib/qt5/mkspecs/common/g++-unix.conf) + + QMAKE_TARGET_CONFIG = ${XBPS_CROSS_BASE}/usr/lib/qt5/mkspecs/qconfig.pri + QMAKE_TARGET_MODULE = ${XBPS_CROSS_BASE}/usr/lib/qt5/mkspecs/qmodule.pri + QMAKE_CC = ${CC} + QMAKE_CXX = ${CXX} + QMAKE_LINK = ${CXX} + QMAKE_LINK_C = ${CC} + QMAKE_LINK_SHLIB = ${CXX} + + QMAKE_AR = ${XBPS_CROSS_TRIPLET}-gcc-ar cqs + QMAKE_OBJCOPY = ${OBJCOPY} + QMAKE_NM = ${NM} -P + QMAKE_STRIP = ${STRIP} + + QMAKE_CFLAGS = ${CFLAGS} + QMAKE_CXXFLAGS = ${CXXFLAGS} + QMAKE_LFLAGS = ${LDFLAGS} + load(qt_config) + _EOF + + cat <<-EOF > "$qmakespec/target/linux-g++/qplatformdefs.h" + #include "${XBPS_CROSS_BASE}/usr/lib/qt5/mkspecs/linux-g++/qplatformdefs.h" + EOF + + + mkdir -p $qmakespec/host/linux-g++ + cat > "$qmakespec/host/linux-g++/qmake.conf" <<-_EOF + MAKEFILE_GENERATOR = UNIX + CONFIG += incremental + QMAKE_INCREMENTAL_STYLE = sublib + + include(/usr/lib/qt5/mkspecs/common/linux.conf) + include(/usr/lib/qt5/mkspecs/common/gcc-base-unix.conf) + include(/usr/lib/qt5/mkspecs/common/g++-unix.conf) + + QMAKE_TARGET_CONFIG = ${XBPS_CROSS_BASE}/usr/lib/qt5/mkspecs/qconfig.pri + QMAKE_TARGET_MODULE = ${XBPS_CROSS_BASE}/usr/lib/qt5/mkspecs/qmodule.pri + QMAKE_CC = ${CC_FOR_BUILD} + QMAKE_CXX = ${CXX_FOR_BUILD} + QMAKE_LINK = ${CXX_FOR_BUILD} + QMAKE_LINK_C = ${CC_FOR_BUILD} + QMAKE_LINK_SHLIB = ${CXX_FOR_BUILD} + + QMAKE_AR = gcc-ar cqs + QMAKE_OBJCOPY = ${OBJCOPY_FOR_BUILD} + QMAKE_NM = ${NM_FOR_BUILD} -P + QMAKE_STRIP = ${STRIP_FOR_BUILD} + + QMAKE_CFLAGS = ${CFLAGS_FOR_BUILD} + QMAKE_CXXFLAGS = ${CXXFLAGS_FOR_BUILD} + QMAKE_LFLAGS = ${LDFLAGS_FOR_BUILD} + load(qt_config) + _EOF + + cat <<-EOF > "$qmakespec/host/linux-g++/qplatformdefs.h" + #include "/usr/lib/qt5/mkspecs/linux-g++/qplatformdefs.h" + EOF + + + cat > "$qmakespec/qt.conf" <<-_EOF + [Paths] + Sysroot=${XBPS_CROSS_BASE} + Prefix=/usr + ArchData=/usr/lib/qt5 + Data=/usr/share/qt5 + Documentation=/usr/share/doc/qt5 + Headers=/usr/include/qt5 + Libraries=${XBPS_CROSS_BASE}/usr/lib + LibraryExecutables=/usr/lib/qt5/libexec + Binaries=/usr/lib/qt5/bin + Tests=${XBPS_CROSS_BASE}/usr/tests + Plugins=/usr/lib/qt5/plugins + Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/imports + Qml2Imports=${XBPS_CROSS_BASE}/usr/lib/qt5/qml + Translations=${XBPS_CROSS_BASE}/usr/share/qt5/translations + Settings=${XBPS_CROSS_BASE}/etc/xdg + Examples=${XBPS_CROSS_BASE}/usr/share/qt5/examples + HostPrefix=/usr + HostData=/usr/lib/qt5 + HostBinaries=/usr/lib/qt5/bin + HostLibraries=/usr/lib + Spec=$qmakespec/host/linux-g++ + TargetSpec=$qmakespec/target/linux-g++ + _EOF + + + case $XBPS_TARGET_MACHINE in + i686*) _qt_arch=i386;; + x86_64*) _qt_arch=x86_64;; + aarch64*) _qt_arch=arm64;; + arm*) _qt_arch=arm;; + mips*) _qt_arch=mips;; + esac + cat <$XBPS_WRAPPERDIR/cross-qmake +#!/bin/sh +export PREFIX=/usr +export QT_INSTALL_PREFIX=/usr +export LIB=/usr/lib +export QT_TARGET_ARCH=$_qt_arch +export PKG_CONFIG_EXECUTABLE=$XBPS_WRAPPERDIR/$PKG_CONFIG +case " \$* " in +" -query ") + /usr/lib/qt5/bin/qmake "\$@" -qtconf $qmakespec/qt.conf | + sed '/^QT_INSTALL_/s,$XBPS_CROSS_BASE,,' + ;; +*) + exec /usr/lib/qt5/bin/qmake -qtconf $qmakespec/qt.conf "\$@" ;; +esac +EOF + chmod +x $XBPS_WRAPPERDIR/cross-qmake + + python3 configure.py --qmake=$XBPS_WRAPPERDIR/cross-qmake \ + --sysroot $XBPS_CROSS_BASE/usr + # Technically, the second sed expr isn't necessary + # since all of them are the same for both host and target. + # We need to fix INSTALL_ROOT anyway, let's fix it, too. + sed -i -e "/INSTALL_ROOT/s,$XBPS_CROSS_BASE,,g" \ + -e "s,-I/usr/include,-I$XBPS_CROSS_BASE/usr/include,g" \ + Makefile \ + QtWebEngine/Makefile \ + QtWebEngineCore/Makefile \ + QtWebEngineWidgets/Makefile + sed -i -e "s,$XBPS_CROSS_BASE,,g" installed.txt +} + +do_configure() { + if [ "$CROSS_BUILD" ]; then + _cross_configure + else + python3 configure.py \ + QMAKE_CC="${CC}" QMAKE_CFLAGS="${CFLAGS}" \ + QMAKE_CXX="${CXX}" QMAKE_CXXFLAGS="${CXXFLAGS}" \ + QMAKE_LINK="${CXX}" QMAKE_LINK_SHLIB="${CXX}" + QMAKE_LFLAGS="${LDFLAGS}" QMAKE_STRIP="" + fi +} + +do_build() { make ${makejobs} }