From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id D23E1158042 for ; Wed, 23 Oct 2024 21:03:21 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 1F9C6E093A; Wed, 23 Oct 2024 21:03:21 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id A1AB8E093A for ; Wed, 23 Oct 2024 21:03:20 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id A7A66340836 for ; Wed, 23 Oct 2024 21:03:19 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 455781B65 for ; Wed, 23 Oct 2024 21:03:18 +0000 (UTC) From: "Ionen Wolkens" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Ionen Wolkens" Message-ID: <1729717254.6fe82082a31990f73ee4c7caaa1bebafbd369525.ionen@gentoo> Subject: [gentoo-commits] proj/qt:master commit in: eclass/ X-VCS-Repository: proj/qt X-VCS-Files: eclass/qt5-build.eclass X-VCS-Directories: eclass/ X-VCS-Committer: ionen X-VCS-Committer-Name: Ionen Wolkens X-VCS-Revision: 6fe82082a31990f73ee4c7caaa1bebafbd369525 X-VCS-Branch: master Date: Wed, 23 Oct 2024 21:03:18 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 9316fdda-6b2d-4057-bc05-e83608ac56a3 X-Archives-Hash: 350bf1ce0aa8a7d82be1212bea8d5fe2 commit: 6fe82082a31990f73ee4c7caaa1bebafbd369525 Author: Ionen Wolkens gentoo org> AuthorDate: Wed Oct 23 20:58:36 2024 +0000 Commit: Ionen Wolkens gentoo org> CommitDate: Wed Oct 23 21:00:54 2024 +0000 URL: https://gitweb.gentoo.org/proj/qt.git/commit/?id=6fe82082 qt5-build.eclass: drop in favor ::gentoo's version Not in sync, and given about about all new development moved to ::gentoo (at least the moment) it is just a hassle to maintain a duplicate here. Bug: https://bugs.gentoo.org/942033 Signed-off-by: Ionen Wolkens gentoo.org> eclass/qt5-build.eclass | 1027 ----------------------------------------------- 1 file changed, 1027 deletions(-) diff --git a/eclass/qt5-build.eclass b/eclass/qt5-build.eclass deleted file mode 100644 index 88720e39..00000000 --- a/eclass/qt5-build.eclass +++ /dev/null @@ -1,1027 +0,0 @@ -# Copyright 1999-2023 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# @ECLASS: qt5-build.eclass -# @MAINTAINER: -# qt@gentoo.org -# @AUTHOR: -# Davide Pesavento -# @SUPPORTED_EAPIS: 8 -# @BLURB: Eclass for Qt5 split ebuilds. -# @DESCRIPTION: -# This eclass contains various functions that are used when building Qt5. - -case ${EAPI} in - 8) ;; - *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; -esac - -if [[ -z ${_QT5_BUILD_ECLASS} ]]; then -_QT5_BUILD_ECLASS=1 - -[[ ${CATEGORY} != dev-qt ]] && - die "${ECLASS} is only to be used for building Qt 5" - -# @ECLASS_VARIABLE: QT5_BUILD_TYPE -# @DESCRIPTION: -# Default value is "release". -# If PV matches "*9999*", this is automatically set to "live". -QT5_BUILD_TYPE=release -if [[ ${PV} == *9999* ]]; then - QT5_BUILD_TYPE=live -fi -readonly QT5_BUILD_TYPE - -# @ECLASS_VARIABLE: QT5_KDEPATCHSET_REV -# @DEFAULT_UNSET -# @PRE_INHERIT -# @DESCRIPTION: -# Downstream generated patchset revision pulled from KDE's Qt5PatchCollection, -# with the patchset having been generated in the following way from upstream's -# qt module git repository: -# @CODE -# git format-patch v${PV}-lts-lgpl..origin/gentoo-kde/${PV} \ -# -o ${QT5_MODULE}-${PV}-gentoo-kde-${QT5_KDEPATCHSET_REV} -# @CODE -# Used for SRC_URI and applied in src_prepare. -# Must be set before inheriting the eclass. - -# @ECLASS_VARIABLE: QT5_MODULE -# @PRE_INHERIT -# @DESCRIPTION: -# The upstream name of the module this package belongs to. Used for -# SRC_URI and EGIT_REPO_URI. Must be set before inheriting the eclass. -: "${QT5_MODULE:=${PN}}" - -# @ECLASS_VARIABLE: QT5_PV -# @DESCRIPTION: -# 3-component version for use in dependency declarations on other dev-qt/ pkgs. -QT5_PV=$(ver_cut 1-3) -readonly QT5_PV - -# @ECLASS_VARIABLE: _QT5_P -# @INTERNAL -# @DESCRIPTION: -# The upstream package name of the module this package belongs to. -# Used for SRC_URI and S. - -# @ECLASS_VARIABLE: _QT5_GENTOOPATCHSET_REV -# @DEFAULT_UNSET -# @INTERNAL -# @DESCRIPTION: -# Gentoo downstream patchset version applied over qtbase. Used for SRC_URI and -# applied in src_prepare. - -# @ECLASS_VARIABLE: QT5_TARGET_SUBDIRS -# @DEFAULT_UNSET -# @DESCRIPTION: -# Array variable containing the source directories that should be built. -# All paths must be relative to ${S}. - -# @ECLASS_VARIABLE: QT5_GENTOO_CONFIG -# @DEFAULT_UNSET -# @DESCRIPTION: -# Array of triplets that are evaluated in src_install -# to generate the per-package list of enabled QT_CONFIG features and macro -# definitions, which are then merged together with all other Qt5 packages -# installed on the system to obtain the global qconfig.{h,pri} files. - -# @ECLASS_VARIABLE: QT5_GENTOO_PRIVATE_CONFIG -# @DEFAULT_UNSET -# @DESCRIPTION: -# Array of pairs that are evaluated in src_install -# to generate the per-package list of enabled QT.global_private features, -# which are then merged together with all other Qt5 packages installed on the -# system to obtain the global qmodule.pri file. - -# @ECLASS_VARIABLE: VIRTUALX_REQUIRED -# @PRE_INHERIT -# @DESCRIPTION: -# For proper description see virtualx.eclass man page. -# Here we redefine default value to be manual, if your package needs virtualx -# for tests you should proceed with setting VIRTUALX_REQUIRED=test. -: "${VIRTUALX_REQUIRED:=manual}" - -inherit estack flag-o-matic toolchain-funcs virtualx - -if [[ ${PN} != qtwebengine ]]; then - case ${PV} in - *9999 ) - inherit kde.org # kde/5.15 branch - ;; - 5.15.[5-9]* | 5.15.??* ) - # official stable release - _QT5_P=${QT5_MODULE}-everywhere-opensource-src-${PV} - HOMEPAGE="https://www.qt.io/" - SRC_URI="https://download.qt.io/official_releases/qt/${PV%.*}/${PV}/submodules/${_QT5_P}.tar.xz" - # KDE Qt5PatchCollection on top of tag v${PV}-lts-lgpl - if [[ -n ${QT5_KDEPATCHSET_REV} ]]; then - HOMEPAGE+=" https://invent.kde.org/qt/qt/${QT5_MODULE} https://community.kde.org/Qt5PatchCollection" - SRC_URI+=" https://dev.gentoo.org/~asturm/distfiles/${QT5_MODULE}-${PV}-gentoo-kde-${QT5_KDEPATCHSET_REV}.tar.xz" - fi - S="${WORKDIR}"/${_QT5_P/opensource-} - ;; - esac -fi - -if [[ ${QT5_MODULE} == qtbase ]]; then - case ${PV} in - 5.15.13) - _QT5_GENTOOPATCHSET_REV=5 - ;; - *) - _QT5_GENTOOPATCHSET_REV=6 - ;; - esac - SRC_URI+=" https://dev.gentoo.org/~asturm/distfiles/qtbase-5.15-gentoo-patchset-${_QT5_GENTOOPATCHSET_REV}.tar.xz" -fi - -# @ECLASS_VARIABLE: QT5_BUILD_DIR -# @OUTPUT_VARIABLE -# @DESCRIPTION: -# Build directory for out-of-source builds. -: "${QT5_BUILD_DIR:=${S}_build}" - -LICENSE="|| ( GPL-2 GPL-3 LGPL-3 ) FDL-1.3" - -case ${PN} in - assistant|linguist|qdbus|qdbusviewer|pixeltool) - SLOT=0 ;; - linguist-tools|qdoc|qtdiag|qtgraphicaleffects|qtimageformats| \ - qtpaths|qtplugininfo|qtquickcontrols|qtquicktimeline| \ - qttranslations|qtwaylandscanner|qtxmlpatterns) - SLOT=5 ;; - *) - SLOT=5/$(ver_cut 1-2) ;; -esac - -IUSE="debug test" - -if [[ ${QT5_BUILD_TYPE} == release ]]; then - RESTRICT="test" # bug 457182 -else - RESTRICT="!test? ( test )" -fi - -BDEPEND=" - dev-lang/perl - virtual/pkgconfig -" -if [[ ${PN} != qttest ]]; then - DEPEND+=" test? ( =dev-qt/qttest-${QT5_PV}* )" -fi - -###### Phase functions ###### - -# @FUNCTION: qt5-build_src_prepare -# @DESCRIPTION: -# Prepares the environment and patches the sources if necessary. -qt5-build_src_prepare() { - qt5_prepare_env - - # Workaround for bug #915203 - # Upstream: https://bugreports.qt.io/browse/QTBUG-111514 - if [[ ${PN} != qtcore ]]; then - append-ldflags $(test-flags-CCLD -Wl,--undefined-version) - fi - - # many bugs, no one to fix - filter-lto - - if [[ ${QT5_BUILD_TYPE} == live ]] || [[ -n ${KDE_ORG_COMMIT} ]]; then - if [[ -n ${KDE_ORG_COMMIT} ]]; then - einfo "Preparing KDE Qt5PatchCollection snapshot at ${KDE_ORG_COMMIT}" - mkdir -p .git || die # need to fake a git repository for configure - fi - fi - - if [[ ${QT5_MODULE} == qtbase ]]; then - qt5_symlink_tools_to_build_dir - - # Avoid unnecessary qmake recompilations - sed -i -e "/Creating qmake/i if [ '!' -e \"\$outpath/bin/qmake\" ]; then" \ - -e '/echo "Done."/a fi' configure || die "sed failed (skip qmake bootstrap)" - - # Respect CXX in bsymbolic_functions, fvisibility, precomp, and a few other tests - sed -i -e "/^QMAKE_CONF_COMPILER=/ s:=.*:=\"$(tc-getCXX)\":" \ - configure || die "sed failed (QMAKE_CONF_COMPILER)" - - # Respect build variables in configure tests (bug #639494) - sed -i -e "s|\"\$outpath/bin/qmake\" \"\$relpathMangled\" -- \"\$@\"|& $(qt5_qmake_args) |" configure || die - fi - - [[ -n ${QT5_KDEPATCHSET_REV} ]] && eapply "${WORKDIR}/${QT5_MODULE}-${PV}-gentoo-kde-${QT5_KDEPATCHSET_REV}" - - if [[ ${QT5_MODULE} == qtbase ]]; then - [[ -n ${_QT5_GENTOOPATCHSET_REV} ]] && eapply "${WORKDIR}/qtbase-5.15-gentoo-patchset-${_QT5_GENTOOPATCHSET_REV}" - - # Respect CC, CXX, *FLAGS, MAKEOPTS and EXTRA_EMAKE when bootstrapping qmake - sed -i -e "/outpath\/qmake\".*\"*\$MAKE\"*)/ s|)| \ - ${MAKEOPTS} ${EXTRA_EMAKE} 'CC=$(tc-getCC)' 'CXX=$(tc-getCXX)' \ - 'QMAKE_CFLAGS=${CFLAGS}' 'QMAKE_CXXFLAGS=${CXXFLAGS}' 'QMAKE_LFLAGS=${LDFLAGS}'&|" \ - -e 's/\(setBootstrapVariable\s\+\|EXTRA_C\(XX\)\?FLAGS=.*\)QMAKE_C\(XX\)\?FLAGS_\(DEBUG\|RELEASE\).*/:/' \ - configure || die "sed failed (respect env for qmake build)" - sed -i -e '/^CPPFLAGS\s*=/ s/-g //' \ - qmake/Makefile.unix || die "sed failed (CPPFLAGS for qmake build)" - fi - - default -} - -# @FUNCTION: qt5-build_src_configure -# @DESCRIPTION: -# Runs qmake in the target directories. For packages -# in qtbase, ./configure is also run before qmake. -qt5-build_src_configure() { - if [[ ${QT5_MODULE} == qtbase ]]; then - qt5_base_configure - fi - if [[ ${QT5_MODULE} == qttools ]]; then - qt5_tools_configure - fi - - qt5_foreach_target_subdir qt5_qmake -} - -# @FUNCTION: qt5-build_src_compile -# @DESCRIPTION: -# Runs emake in the target directories. -qt5-build_src_compile() { - qt5_foreach_target_subdir emake -} - -# @FUNCTION: qt5-build_src_test -# @DESCRIPTION: -# Runs tests in the target directories. -qt5-build_src_test() { - # disable broken cmake tests (bug 474004) - local myqmakeargs=("${myqmakeargs[@]}" -after SUBDIRS-=cmake SUBDIRS-=installed_cmake) - - qt5_foreach_target_subdir qt5_qmake - qt5_foreach_target_subdir emake - - # create a custom testrunner script that correctly sets - # LD_LIBRARY_PATH before executing the given test - local testrunner=${QT5_BUILD_DIR}/gentoo-testrunner - cat > "${testrunner}" <<-_EOF_ || die - #!/bin/sh - export LD_LIBRARY_PATH="${QT5_BUILD_DIR}/lib:${QT5_LIBDIR}" - "\$@" - _EOF_ - chmod +x "${testrunner}" - - set -- qt5_foreach_target_subdir emake TESTRUNNER="'${testrunner}'" check - if [[ ${VIRTUALX_REQUIRED} == test ]]; then - virtx "$@" - else - "$@" - fi -} - -# @FUNCTION: qt5-build_src_install -# @DESCRIPTION: -# Runs emake install in the target directories. -qt5-build_src_install() { - qt5_foreach_target_subdir emake INSTALL_ROOT="${D}" install - - if [[ ${PN} == qtcore ]]; then - pushd "${QT5_BUILD_DIR}" >/dev/null || die - - set -- emake INSTALL_ROOT="${D}" \ - sub-qmake-qmake-aux-pro-install_subtargets \ - install_{syncqt,mkspecs} - - einfo "Running $*" - "$@" - - popd >/dev/null || die - - # install an empty Gentoo/gentoo-qconfig.h in ${D} - # so that it's placed under package manager control - > "${T}"/gentoo-qconfig.h - ( - insinto "${QT5_HEADERDIR#${EPREFIX}}"/Gentoo - doins "${T}"/gentoo-qconfig.h - ) - - # include gentoo-qconfig.h at the beginning of QtCore/qconfig.h - sed -i -e '1i #include \n' \ - "${D}${QT5_HEADERDIR}"/QtCore/qconfig.h \ - || die "sed failed (qconfig.h)" - fi - - qt5_install_module_config - - # prune libtool files - find "${D}" -name '*.la' -type f -delete || die -} - -# @FUNCTION: qt5-build_pkg_postinst -# @DESCRIPTION: -# Regenerate configuration after installation or upgrade/downgrade. -qt5-build_pkg_postinst() { - qt5_regenerate_global_configs -} - -# @FUNCTION: qt5-build_pkg_postrm -# @DESCRIPTION: -# Regenerate configuration when a module is completely removed. -qt5-build_pkg_postrm() { - if [[ -z ${REPLACED_BY_VERSION} && ${PN} != qtcore ]]; then - qt5_regenerate_global_configs - fi -} - - -###### Public helpers ###### - -# @FUNCTION: qt5_configure_oos_quirk -# @USAGE: or -# @DESCRIPTION: -# Quirk for out-of-source builds. Runs qmake in root directory, copies -# generated pri from source to build dir . -# If no is given, is copied to ${QT5_BUILD_DIR}. -qt5_configure_oos_quirk() { - if [[ "$#" == 2 ]]; then - local source="${2}/${1}" - local dest="${QT5_BUILD_DIR}/${2}" - elif [[ "$#" == 1 ]]; then - local source="${1}" - local dest="${QT5_BUILD_DIR}" - else - die "${FUNCNAME[0]} must be passed either one or two arguments" - fi - - mkdir -p "${dest}" || die - qt5_qmake "${QT5_BUILD_DIR}" - cp "${source}" "${dest}" || die -} - -# @FUNCTION: qt5_syncqt_version -# @DESCRIPTION: -# Wrapper for Qt5 syncqt.pl to sync header files for ${PV} (required to run if -# headers are added/removed by patching) -qt5_syncqt_version() { - if [[ ${PV} == *9999* ]]; then - return - fi - - local syncqt - if [[ ${PN} == qtcore ]]; then - syncqt=bin/syncqt.pl - else - syncqt=${QT5_BINDIR}/syncqt.pl - fi - - perl ${syncqt} -version ${PV} || die -} - -# @FUNCTION: qt5_symlink_binary_to_path -# @USAGE: [suffix] -# @DESCRIPTION: -# Symlink a given binary from QT5_BINDIR to QT5_PREFIX/bin, with optional suffix -qt5_symlink_binary_to_path() { - [[ $# -ge 1 ]] || die "${FUNCNAME}() requires at least one argument" - - dosym -r "${QT5_BINDIR}"/${1} /usr/bin/${1}${2} -} - -# @FUNCTION: qt_use -# @USAGE: [feature] [enableval] -# @DESCRIPTION: -# is the name of a flag in IUSE. -# -# Outputs "-${enableval}-${feature}" if is enabled, "-no-${feature}" -# otherwise. If [feature] is not specified, is used in its place. -# If [enableval] is not specified, the "-${enableval}" prefix is omitted. -qt_use() { - [[ $# -ge 1 ]] || die "${FUNCNAME}() requires at least one argument" - - usex "$1" "${3:+-$3}-${2:-$1}" "-no-${2:-$1}" -} - -# @FUNCTION: qt_use_compile_test -# @USAGE: [config] -# @DESCRIPTION: -# is the name of a flag in IUSE. -# [config] is the argument of qtCompileTest, defaults to . -# -# This function is useful to disable optional dependencies that are checked -# at qmake-time using the qtCompileTest() function. If is disabled, -# the compile test is skipped and the dependency is assumed to be unavailable, -# i.e. the corresponding feature will be disabled. Note that all invocations -# of this function must happen before calling qt5-build_src_configure. -qt_use_compile_test() { - [[ $# -ge 1 ]] || die "${FUNCNAME}() requires at least one argument" - - if ! use "$1"; then - mkdir -p "${QT5_BUILD_DIR}" || die - echo "CONFIG += done_config_${2:-$1}" >> "${QT5_BUILD_DIR}"/.qmake.cache || die - fi -} - -# @FUNCTION: qt_use_disable_config -# @USAGE: -# @DESCRIPTION: -# is the name of a flag in IUSE. -# is the (lowercase) name of a Qt5 config entry. -# is a list of one or more qmake project files. -# -# This function patches to treat as disabled -# when is disabled, otherwise it does nothing. -# This can be useful to avoid an automagic dependency when the config entry -# is enabled on the system but the corresponding USE flag is disabled. -qt_use_disable_config() { - [[ $# -ge 3 ]] || die "${FUNCNAME}() requires at least three arguments" - - local flag=$1 - local config=$2 - shift 2 - - if ! use "${flag}"; then - echo "$@" | xargs sed -i -e "s/qtConfig(${config})/false/g" || die - fi -} - -# @FUNCTION: qt_use_disable_mod -# @USAGE: -# @DESCRIPTION: -# is the name of a flag in IUSE. -# is the (lowercase) name of a Qt5 module. -# is a list of one or more qmake project files. -# -# This function patches to treat as not installed -# when is disabled, otherwise it does nothing. -# This can be useful to avoid an automagic dependency when the module -# is present on the system but the corresponding USE flag is disabled. -qt_use_disable_mod() { - [[ $# -ge 3 ]] || die "${FUNCNAME}() requires at least three arguments" - - local flag=$1 - local module=$2 - shift 2 - - if ! use "${flag}"; then - echo "$@" | xargs sed -i -e "s/qtHaveModule(${module})/false/g" || die - fi -} - - -###### Internal functions ###### - -# @FUNCTION: qt5_prepare_env -# @INTERNAL -# @DESCRIPTION: -# Prepares the environment for building Qt. -qt5_prepare_env() { - # setup installation directories - # note: keep paths in sync with qmake-utils.eclass - QT5_PREFIX=${EPREFIX}/usr - QT5_HEADERDIR=${QT5_PREFIX}/include/qt5 - QT5_LIBDIR=${QT5_PREFIX}/$(get_libdir) - QT5_ARCHDATADIR=${QT5_PREFIX}/$(get_libdir)/qt5 - QT5_BINDIR=${QT5_ARCHDATADIR}/bin - QT5_PLUGINDIR=${QT5_ARCHDATADIR}/plugins - QT5_LIBEXECDIR=${QT5_ARCHDATADIR}/libexec - QT5_IMPORTDIR=${QT5_ARCHDATADIR}/imports - QT5_QMLDIR=${QT5_ARCHDATADIR}/qml - QT5_DATADIR=${QT5_PREFIX}/share/qt5 - QT5_DOCDIR=${QT5_PREFIX}/share/qt5-doc - QT5_TRANSLATIONDIR=${QT5_DATADIR}/translations - QT5_EXAMPLESDIR=${QT5_DATADIR}/examples - QT5_TESTSDIR=${QT5_DATADIR}/tests - QT5_SYSCONFDIR=${EPREFIX}/etc/xdg - readonly QT5_PREFIX QT5_HEADERDIR QT5_LIBDIR QT5_ARCHDATADIR \ - QT5_BINDIR QT5_PLUGINDIR QT5_LIBEXECDIR QT5_IMPORTDIR \ - QT5_QMLDIR QT5_DATADIR QT5_DOCDIR QT5_TRANSLATIONDIR \ - QT5_EXAMPLESDIR QT5_TESTSDIR QT5_SYSCONFDIR - - if [[ ${QT5_MODULE} == qtbase ]]; then - # see mkspecs/features/qt_config.prf - export QMAKEMODULES="${QT5_BUILD_DIR}/mkspecs/modules:${S}/mkspecs/modules:${QT5_ARCHDATADIR}/mkspecs/modules" - fi -} - -# @FUNCTION: qt5_foreach_target_subdir -# @INTERNAL -# @DESCRIPTION: -# Executes the command given as argument from inside each directory -# listed in QT5_TARGET_SUBDIRS. Handles autotests subdirs automatically. -qt5_foreach_target_subdir() { - [[ -z ${QT5_TARGET_SUBDIRS[@]} ]] && QT5_TARGET_SUBDIRS=("") - - local subdir= - for subdir in "${QT5_TARGET_SUBDIRS[@]}"; do - if [[ ${EBUILD_PHASE} == test ]]; then - subdir=tests/auto${subdir#src} - [[ -d ${S}/${subdir} ]] || continue - fi - - local msg="Running $* ${subdir:+in ${subdir}}" - einfo "${msg}" - - mkdir -p "${QT5_BUILD_DIR}/${subdir}" || die -n || return $? - pushd "${QT5_BUILD_DIR}/${subdir}" >/dev/null || die -n || return $? - - "$@" || die -n "${msg} failed" || return $? - - popd >/dev/null || die -n || return $? - done -} - -# @FUNCTION: qt5_symlink_tools_to_build_dir -# @INTERNAL -# @DESCRIPTION: -# Symlinks qmake and a few other tools to QT5_BUILD_DIR, -# so that they can be used when building other modules. -qt5_symlink_tools_to_build_dir() { - local tool= tools=() - if [[ ${PN} != qtcore ]]; then - tools+=(qmake moc rcc qlalr) - [[ ${PN} != qtdbus ]] && tools+=(qdbuscpp2xml qdbusxml2cpp) - [[ ${PN} != qtwidgets ]] && tools+=(uic) - fi - - mkdir -p "${QT5_BUILD_DIR}"/bin || die - pushd "${QT5_BUILD_DIR}"/bin >/dev/null || die - - for tool in "${tools[@]}"; do - [[ -e ${QT5_BINDIR}/${tool} ]] || continue - ln -s "${QT5_BINDIR}/${tool}" . || die "failed to symlink ${tool}" - done - - popd >/dev/null || die -} - -# @FUNCTION: qt5_base_configure -# @INTERNAL -# @DESCRIPTION: -# Runs ./configure for modules belonging to qtbase. -qt5_base_configure() { - # setup toolchain variables used by configure - tc-export AR CC CXX OBJDUMP RANLIB STRIP - export LD="$(tc-getCXX)" - - # bug 633838 - unset QMAKESPEC XQMAKESPEC QMAKEPATH QMAKEFEATURES - - # configure arguments - local conf=( - # installation paths - -prefix "${QT5_PREFIX}" - -bindir "${QT5_BINDIR}" - -headerdir "${QT5_HEADERDIR}" - -libdir "${QT5_LIBDIR}" - -archdatadir "${QT5_ARCHDATADIR}" - -plugindir "${QT5_PLUGINDIR}" - -libexecdir "${QT5_LIBEXECDIR}" - -importdir "${QT5_IMPORTDIR}" - -qmldir "${QT5_QMLDIR}" - -datadir "${QT5_DATADIR}" - -docdir "${QT5_DOCDIR}" - -translationdir "${QT5_TRANSLATIONDIR}" - -sysconfdir "${QT5_SYSCONFDIR}" - -examplesdir "${QT5_EXAMPLESDIR}" - -testsdir "${QT5_TESTSDIR}" - - # force appropriate compiler - $(if use kernel_linux; then - if tc-is-gcc; then - echo -platform linux-g++ - elif tc-is-clang; then - echo -platform linux-clang - fi - fi) - - # configure in release mode by default, - # override via the CONFIG qmake variable - -release - -no-separate-debug-info - - # no need to forcefully build host tools in optimized mode, - # just follow the overall debug/release build type - -no-optimized-tools - - # licensing stuff - -opensource -confirm-license - - # autodetect the highest supported version of the C++ standard - #-c++std - - # build shared libraries - -shared - - # disabling accessibility is not recommended by upstream, as - # it will break QStyle and may break other internal parts of Qt - -accessibility - - # disable all SQL drivers by default, override in qtsql - -no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci -no-sql-odbc - -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-sql-tds - - # MIPS DSP instruction set extensions - $(is-flagq -mno-dsp && echo -no-mips_dsp) - $(is-flagq -mno-dspr2 && echo -no-mips_dspr2) - - # use pkg-config to detect include and library paths - -pkg-config - - # prefer system libraries (only common hard deps here) - -system-zlib - -system-pcre - -system-doubleconversion - - # disable everything to prevent automagic deps (part 1) - -no-mtdev - -no-journald -no-syslog - -no-libpng -no-libjpeg - -no-freetype -no-harfbuzz - -no-openssl -no-libproxy - -no-feature-gssapi - -no-xcb-xlib - - # bug 672340 - -no-xkbcommon - -no-bundled-xcb-xinput - - # cannot use -no-gif because there is no way to override it later - #-no-gif - - # always enable glib event loop support - -glib - - # disable everything to prevent automagic deps (part 2) - -no-gtk - - # exclude examples and tests from default build - -nomake examples - -nomake tests - -no-compile-examples - - # disable rpath on non-prefix (bugs 380415 and 417169) - $(usex prefix '' -no-rpath) - - # print verbose information about each configure test - -verbose - - # disable everything to prevent automagic deps (part 3) - -no-cups -no-evdev -no-tslib -no-icu -no-fontconfig -no-dbus - - # let portage handle stripping - -no-strip - - # precompiled headers can cause problems on hardened, so turn them off - -no-pch - - # link-time code generation is not something we want to enable by default - -no-ltcg - - # reduced relocations cause major breakage on at least arm and ppc, so - # don't specify anything and let the configure figure out if they are - # supported; see also https://bugreports.qt.io/browse/QTBUG-36129 - #-reduce-relocations - - # use the system linker (gold will be selected automagically otherwise) - $(tc-ld-is-gold && echo -use-gold-linker || echo -no-use-gold-linker) - - # disable all platform plugins by default, override in qtgui - -no-xcb -no-eglfs -no-kms -no-gbm -no-directfb -no-linuxfb - - # always enable session management support: it doesn't need extra deps - # at configure time and turning it off is dangerous, see bug 518262 - -sm - - # typedef qreal to double (warning: changing this flag breaks the ABI) - -qreal double - - # disable OpenGL and EGL support by default, override in qtgui, - # qtopengl, qtprintsupport and qtwidgets - -no-opengl -no-egl - - # disable libinput-based generic plugin by default, override in qtgui - -no-libinput - - # respect system proxies by default: it's the most natural - # setting, and it'll become the new upstream default in 5.8 - -system-proxies - - # do not build with -Werror - -no-warnings-are-errors - - # enable in respective modules to avoid poisoning QT.global_private.enabled_features - -no-gui -no-widgets - - # QTBUG-76521, default will change to zstd in Qt6 - -no-zstd - - # module-specific options - "${myconf[@]}" - ) - - pushd "${QT5_BUILD_DIR}" >/dev/null || die - - einfo "Configuring with: ${conf[@]}" - "${S}"/configure "${conf[@]}" || die "configure failed" - - # a forwarding header is no longer created since 5.8, causing the system - # config to always be used. bug 599636 - # ${S}/include does not exist in live sources or kde.org snapshots - local basedir="${S}/" - if [[ ${QT5_BUILD_TYPE} == live ]] || [[ -n ${KDE_ORG_COMMIT} ]]; then - basedir="" - fi - cp src/corelib/global/qconfig.h "${basedir}"include/QtCore/ || die - - popd >/dev/null || die - -} - -# @FUNCTION: qt5_tools_configure -# @INTERNAL -# @DESCRIPTION: -# Most of qttools require files that are only generated when qmake is -# run in the root directory. Related bugs: 676948, 716514. -# Runs qt5_qmake in root directory to create qttools-config.pri and copy to -# ${QT5_BUILD_DIR}, disabling modules other than ${PN} belonging to qttools. -qt5_tools_configure() { - # configure arguments - local qmakeargs=( - -- - # not packaged in Gentoo - -no-feature-distancefieldgenerator - -no-feature-kmap2qmap - -no-feature-macdeployqt - -no-feature-makeqpf - -no-feature-qev - -no-feature-qtattributionsscanner - -no-feature-windeployqt - -no-feature-winrtrunner - ) - - local i module=${PN} - case ${PN} in - linguist-tools) module=linguist ;; - *) ;; - esac - for i in assistant designer linguist pixeltool qdbus qdoc qtdiag qtpaths qtplugininfo; do - [[ ${module} != ${i} ]] && qmakeargs+=( -no-feature-${i} ) - done - - # allow the ebuild to override what we set here - myqmakeargs=( "${qmakeargs[@]}" "${myqmakeargs[@]}" ) - - qt5_configure_oos_quirk qttools-config.pri -} - -# @FUNCTION: qt5_qmake_args -# @INTERNAL -# @DESCRIPTION: -# Helper function to get the various toolchain-related variables. -qt5_qmake_args() { - echo \ - QMAKE_AR=\"$(tc-getAR)\" \ - QMAKE_CC=\"$(tc-getCC)\" \ - QMAKE_LINK_C=\"$(tc-getCC)\" \ - QMAKE_LINK_C_SHLIB=\"$(tc-getCC)\" \ - QMAKE_CXX=\"$(tc-getCXX)\" \ - QMAKE_LINK=\"$(tc-getCXX)\" \ - QMAKE_LINK_SHLIB=\"$(tc-getCXX)\" \ - QMAKE_OBJCOPY=\"$(tc-getOBJCOPY)\" \ - QMAKE_RANLIB= \ - QMAKE_STRIP=\"$(tc-getSTRIP)\" \ - QMAKE_CFLAGS=\"${CFLAGS}\" \ - QMAKE_CFLAGS_RELEASE= \ - QMAKE_CFLAGS_DEBUG= \ - QMAKE_CXXFLAGS=\"${CXXFLAGS}\" \ - QMAKE_CXXFLAGS_RELEASE= \ - QMAKE_CXXFLAGS_DEBUG= \ - QMAKE_LFLAGS=\"${LDFLAGS}\" \ - QMAKE_LFLAGS_RELEASE= \ - QMAKE_LFLAGS_DEBUG= -} - -# @FUNCTION: qt5_qmake -# @INTERNAL -# @DESCRIPTION: -# Helper function that runs qmake in the current target subdir. -# Intended to be called by qt5_foreach_target_subdir(). -qt5_qmake() { - local projectdir=${PWD/#${QT5_BUILD_DIR}/${S}} - local qmakepath= - if [[ ${QT5_MODULE} == qtbase ]]; then - qmakepath=${QT5_BUILD_DIR}/bin - else - qmakepath=${QT5_BINDIR} - fi - - "${qmakepath}"/qmake \ - "${projectdir}" \ - CONFIG+=$(usex debug debug release) \ - CONFIG-=$(usex debug release debug) \ - QMAKE_AR="$(tc-getAR) cqs" \ - QMAKE_CC="$(tc-getCC)" \ - QMAKE_LINK_C="$(tc-getCC)" \ - QMAKE_LINK_C_SHLIB="$(tc-getCC)" \ - QMAKE_CXX="$(tc-getCXX)" \ - QMAKE_LINK="$(tc-getCXX)" \ - QMAKE_LINK_SHLIB="$(tc-getCXX)" \ - QMAKE_OBJCOPY="$(tc-getOBJCOPY)" \ - QMAKE_RANLIB= \ - QMAKE_STRIP="$(tc-getSTRIP)" \ - QMAKE_CFLAGS="${CFLAGS}" \ - QMAKE_CFLAGS_RELEASE= \ - QMAKE_CFLAGS_DEBUG= \ - QMAKE_CXXFLAGS="${CXXFLAGS}" \ - QMAKE_CXXFLAGS_RELEASE= \ - QMAKE_CXXFLAGS_DEBUG= \ - QMAKE_LFLAGS="${LDFLAGS}" \ - QMAKE_LFLAGS_RELEASE= \ - QMAKE_LFLAGS_DEBUG= \ - "${myqmakeargs[@]}" \ - || die "qmake failed (${projectdir#${S}/})" -} - -# @FUNCTION: qt5_install_module_config -# @INTERNAL -# @DESCRIPTION: -# Creates and installs gentoo-specific ${PN}-qconfig.{h,pri} and -# ${PN}-qmodule.pri files. -qt5_install_module_config() { - local x qconfig_add= qconfig_remove= qprivateconfig_add= qprivateconfig_remove= - - > "${T}"/${PN}-qconfig.h - > "${T}"/${PN}-qconfig.pri - > "${T}"/${PN}-qmodule.pri - - # generate qconfig_{add,remove} and ${PN}-qconfig.h - for x in "${QT5_GENTOO_CONFIG[@]}"; do - local flag=${x%%:*} - x=${x#${flag}:} - local feature=${x%%:*} - x=${x#${feature}:} - local macro=${x} - macro=$(tr 'a-z-' 'A-Z_' <<< "${macro}") - - if [[ -z ${flag} ]] || { [[ ${flag} != '!' ]] && use ${flag}; }; then - [[ -n ${feature} ]] && qconfig_add+=" ${feature}" - [[ -n ${macro} ]] && echo "#define QT_${macro}" >> "${T}"/${PN}-qconfig.h - else - [[ -n ${feature} ]] && qconfig_remove+=" ${feature}" - [[ -n ${macro} ]] && echo "#define QT_NO_${macro}" >> "${T}"/${PN}-qconfig.h - fi - done - - # install ${PN}-qconfig.h - [[ -s ${T}/${PN}-qconfig.h ]] && ( - insinto "${QT5_HEADERDIR#${EPREFIX}}"/Gentoo - doins "${T}"/${PN}-qconfig.h - ) - - # generate and install ${PN}-qconfig.pri - [[ -n ${qconfig_add} ]] && echo "QCONFIG_ADD=${qconfig_add}" >> "${T}"/${PN}-qconfig.pri - [[ -n ${qconfig_remove} ]] && echo "QCONFIG_REMOVE=${qconfig_remove}" >> "${T}"/${PN}-qconfig.pri - [[ -s ${T}/${PN}-qconfig.pri ]] && ( - insinto "${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/gentoo - doins "${T}"/${PN}-qconfig.pri - ) - - # generate qprivateconfig - for x in "${QT5_GENTOO_PRIVATE_CONFIG[@]}"; do - local flag=${x%%:*} - x=${x#${flag}:} - local feature=${x%%:*} - x=${x#${feature}:} - - if [[ -z ${flag} ]] || { [[ ${flag} != '!' ]] && use ${flag}; }; then - [[ -n ${feature} ]] && qprivateconfig_add+=" ${feature}" - else - [[ -n ${feature} ]] && qprivateconfig_remove+=" ${feature}" - fi - done - - # generate and install ${PN}-qmodule.pri - [[ -n ${qprivateconfig_add} ]] && echo "QT.global_private.enabled_features = ${qprivateconfig_add}" >> "${T}"/${PN}-qmodule.pri - [[ -n ${qprivateconfig_remove} ]] && echo "QT.global_private.disabled_features = ${qprivateconfig_remove}" >> "${T}"/${PN}-qmodule.pri - [[ -s ${T}/${PN}-qmodule.pri ]] && ( - insinto "${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/gentoo - doins "${T}"/${PN}-qmodule.pri - ) - - # install the original {qconfig,qmodule}.pri from qtcore - [[ ${PN} == qtcore ]] && ( - insinto "${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/gentoo - newins "${D}${QT5_ARCHDATADIR}"/mkspecs/qconfig.pri qconfig-qtcore.pri - newins "${D}${QT5_ARCHDATADIR}"/mkspecs/qmodule.pri qmodule-qtcore.pri - ) -} - -# @FUNCTION: qt5_regenerate_global_configs -# @INTERNAL -# @DESCRIPTION: -# Generates Gentoo-specific qconfig.{h,pri} and qmodule.pri according to the -# build configuration. -# Don't call die here because dying in pkg_post{inst,rm} only makes things worse. -qt5_regenerate_global_configs() { - einfo "Regenerating gentoo-qconfig.h" - - find "${ROOT}${QT5_HEADERDIR}"/Gentoo \ - -name '*-qconfig.h' -a \! -name 'gentoo-qconfig.h' -type f \ - -execdir cat '{}' + | sort -u > "${T}"/gentoo-qconfig.h - - [[ -s ${T}/gentoo-qconfig.h ]] || ewarn "Generated gentoo-qconfig.h is empty" - cp "${T}"/gentoo-qconfig.h "${ROOT}${QT5_HEADERDIR}"/Gentoo/gentoo-qconfig.h \ - || eerror "Failed to install new gentoo-qconfig.h" - - einfo "Updating QT_CONFIG in qconfig.pri" - - local qconfig_pri=${ROOT}${QT5_ARCHDATADIR}/mkspecs/qconfig.pri - local qconfig_pri_orig=${ROOT}${QT5_ARCHDATADIR}/mkspecs/gentoo/qconfig-qtcore.pri - if [[ -f ${qconfig_pri} ]]; then - local x qconfig_add= qconfig_remove= - local qt_config new_qt_config= - if [[ -f ${qconfig_pri_orig} ]]; then - qt_config=$(sed -n 's/^QT_CONFIG\s*+=\s*//p' "${qconfig_pri_orig}") - else - qt_config=$(sed -n 's/^QT_CONFIG\s*+=\s*//p' "${qconfig_pri}") - fi - - # generate list of QT_CONFIG entries from the existing list, - # appending QCONFIG_ADD and excluding QCONFIG_REMOVE - eshopts_push -s nullglob - for x in "${ROOT}${QT5_ARCHDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do - qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=\s*//p' "${x}")" - qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=\s*//p' "${x}")" - done - eshopts_pop - for x in ${qt_config} ${qconfig_add}; do - if ! has "${x}" ${new_qt_config} ${qconfig_remove}; then - new_qt_config+=" ${x}" - fi - done - - # now replace the existing QT_CONFIG with the generated list - sed -i -e "s/^QT_CONFIG\s*+=.*/QT_CONFIG +=${new_qt_config}/" \ - "${qconfig_pri}" || eerror "Failed to sed QT_CONFIG in ${qconfig_pri}" - else - ewarn "${qconfig_pri} does not exist or is not a regular file" - fi - - einfo "Updating QT.global_private in qmodule.pri" - - local qmodule_pri=${ROOT}${QT5_ARCHDATADIR}/mkspecs/qmodule.pri - local qmodule_pri_orig=${ROOT}${QT5_ARCHDATADIR}/mkspecs/gentoo/qmodule-qtcore.pri - if [[ -f ${qmodule_pri} && -f ${qmodule_pri_orig} ]]; then - local x - local qprivateconfig_enabled= qprivateconfig_disabled= - local qprivateconfig_orig_enabled= qprivateconfig_orig_disabled= - local new_qprivateconfig_enabled= new_qprivateconfig_disabled= - - # generate lists of QT.global_private.{dis,en}abled_features - qprivateconfig_orig_enabled="$(sed -n 's/^QT.global_private.enabled_features\s=\s*//p' "${qmodule_pri_orig}")" - qprivateconfig_orig_disabled="$(sed -n 's/^QT.global_private.disabled_features\s=\s*//p' "${qmodule_pri_orig}")" - eshopts_push -s nullglob - for x in "${ROOT}${QT5_ARCHDATADIR}"/mkspecs/gentoo/*-qmodule.pri; do - qprivateconfig_enabled+=" $(sed -n 's/^QT.global_private.enabled_features\s=\s*//p' "${x}")" - qprivateconfig_disabled+=" $(sed -n 's/^QT.global_private.disabled_features\s=\s*//p' "${x}")" - done - eshopts_pop - - # anything enabled is enabled, but anything disabled is - # only disabled if it isn't enabled somewhere else. - # this is because we need to forcibly disable some stuff - # in qtcore to support split qtbase. - new_qprivateconfig_enabled=${qprivateconfig_enabled} - for x in ${qprivateconfig_disabled}; do - if ! has "${x}" ${qprivateconfig_enabled}; then - new_qprivateconfig_disabled+=" ${x}" - fi - done - - # check all items from the original qtcore qmodule.pri, - # and add them to the appropriate list if not overridden - # elsewhere - for x in ${qprivateconfig_orig_enabled}; do - if ! has "${x}" ${new_qprivateconfig_enabled} ${new_qprivateconfig_disabled}; then - new_qprivateconfig_enabled+=" ${x}" - fi - done - for x in ${qprivateconfig_orig_disabled}; do - if ! has "${x}" ${new_qprivateconfig_enabled} ${new_qprivateconfig_disabled}; then - new_qprivateconfig_disabled+=" ${x}" - fi - done - - # now replace the existing QT.global_private.{dis,en}abled_features - # with the generated list - sed \ - -e "s/^QT.global_private.enabled_features\s*=.*/QT.global_private.enabled_features =${new_qprivateconfig_enabled}/" \ - -e "s/^QT.global_private.disabled_features\s*=.*/QT.global_private.disabled_features =${new_qprivateconfig_disabled}/" \ - -i "${qmodule_pri}" || eerror "Failed to sed QT.global_private.enabled_features in ${qmodule_pri}" - else - ewarn "${qmodule_pri} or ${qmodule_pri_orig} does not exist or is not a regular file" - fi -} - -fi - -EXPORT_FUNCTIONS src_prepare src_configure src_compile src_install src_test pkg_postinst pkg_postrm