diff options
author | 2014-04-23 08:01:30 +0000 | |
---|---|---|
committer | 2014-04-23 08:01:30 +0000 | |
commit | 71fff6242e1bdddd3eba23d2933300fcce1943c2 (patch) | |
tree | 6e1991904d9c45c81cb53ee3e3150fdb038351cd /eclass/qt5-build.eclass | |
parent | bump; drop pypy2_0, py3.2, add py3.4; add IUSE gevent, test; set REQUIRED_USE... (diff) | |
download | historical-71fff6242e1bdddd3eba23d2933300fcce1943c2.tar.gz historical-71fff6242e1bdddd3eba23d2933300fcce1943c2.tar.bz2 historical-71fff6242e1bdddd3eba23d2933300fcce1943c2.zip |
Add qt5-build eclass from qt overlay
Diffstat (limited to 'eclass/qt5-build.eclass')
-rw-r--r-- | eclass/qt5-build.eclass | 618 |
1 files changed, 618 insertions, 0 deletions
diff --git a/eclass/qt5-build.eclass b/eclass/qt5-build.eclass new file mode 100644 index 000000000000..acd088972df0 --- /dev/null +++ b/eclass/qt5-build.eclass @@ -0,0 +1,618 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/eclass/qt5-build.eclass,v 1.1 2014/04/23 08:01:30 patrick Exp $ + +# @ECLASS: qt5-build.eclass +# @MAINTAINER: +# Qt herd <qt@gentoo.org> +# @AUTHOR: +# Davide Pesavento <pesa@gentoo.org> +# @BLURB: Eclass for Qt5 split ebuilds. +# @DESCRIPTION: +# This eclass contains various functions that are used when building Qt5. +# Requires EAPI 5. + +case ${EAPI} in + 5) : ;; + *) die "qt5-build.eclass: unsupported EAPI=${EAPI:-0}" ;; +esac + +# @ECLASS-VARIABLE: VIRTUALX_REQUIRED +# @DESCRIPTION: +# For proper description see virtualx.eclass manpage. +# 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 eutils flag-o-matic multilib toolchain-funcs versionator virtualx + +HOMEPAGE="http://qt-project.org/ http://qt.digia.com/" +LICENSE="|| ( LGPL-2.1 GPL-3 )" +SLOT="5" + +# @ECLASS-VARIABLE: QT5_MODULE +# @DESCRIPTION: +# The upstream name of the module this package belongs to. Used for +# SRC_URI and EGIT_REPO_URI. Must be defined before inheriting the eclass. +: ${QT5_MODULE:=${PN}} + +case ${PV} in + 5.9999) + # git dev branch + QT5_BUILD_TYPE="live" + EGIT_BRANCH="dev" + ;; + 5.?.9999) + # git stable branch + QT5_BUILD_TYPE="live" + EGIT_BRANCH="stable" + ;; + *_alpha*|*_beta*|*_rc*) + # pre-releases + QT5_BUILD_TYPE="release" + MY_P="${QT5_MODULE}-opensource-src-${PV/_/-}" + SRC_URI="http://download.qt-project.org/development_releases/qt/${PV%.*}/${PV/_/-}/submodules/${MY_P}.tar.xz" + S=${WORKDIR}/${MY_P} + ;; + *) + # official stable releases + QT5_BUILD_TYPE="release" + MY_P="${QT5_MODULE}-opensource-src-${PV}" + SRC_URI="http://download.qt-project.org/official_releases/qt/${PV%.*}/${PV}/submodules/${MY_P}.tar.xz" + S=${WORKDIR}/${MY_P} + ;; +esac + +EGIT_REPO_URI=( + "git://gitorious.org/qt/${QT5_MODULE}.git" + "https://git.gitorious.org/qt/${QT5_MODULE}.git" +) +[[ ${QT5_BUILD_TYPE} == "live" ]] && inherit git-r3 + +IUSE="debug test" + +DEPEND=" + >=dev-lang/perl-5.14 + virtual/pkgconfig +" +if [[ ${PN} != "qttest" ]]; then + if [[ ${QT5_MODULE} == "qtbase" ]]; then + DEPEND+=" test? ( ~dev-qt/qttest-${PV}[debug=] )" + else + DEPEND+=" test? ( >=dev-qt/qttest-${PV}:5[debug=] )" + fi +fi + +EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postinst pkg_postrm + +# @ECLASS-VARIABLE: PATCHES +# @DEFAULT_UNSET +# @DESCRIPTION: +# Array variable containing all the patches to be applied. This variable +# is expected to be defined in the global scope of ebuilds. Make sure to +# specify the full path. This variable is used in src_prepare phase. +# +# Example: +# @CODE +# PATCHES=( +# "${FILESDIR}/mypatch.patch" +# "${FILESDIR}/mypatch2.patch" +# ) +# @CODE + +# @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_BUILD_DIR +# @DESCRIPTION: +# Build directory for out-of-source builds. +: ${QT5_BUILD_DIR:=${S}_build} + +# @ECLASS-VARIABLE: QT5_VERBOSE_BUILD +# @DESCRIPTION: +# Set to false to reduce build output during compilation. +: ${QT5_VERBOSE_BUILD:=true} + +# @ECLASS-VARIABLE: QCONFIG_ADD +# @DEFAULT_UNSET +# @DESCRIPTION: +# Array of options that must be added to QT_CONFIG in qconfig.pri + +# @ECLASS-VARIABLE: QCONFIG_REMOVE +# @DEFAULT_UNSET +# @DESCRIPTION: +# Array of options that must be removed from QT_CONFIG in qconfig.pri + +# @ECLASS-VARIABLE: QCONFIG_DEFINE +# @DEFAULT_UNSET +# @DESCRIPTION: +# Array of macros that must be defined in QtCore/qconfig.h + +# @FUNCTION: qt5-build_pkg_setup +# @DESCRIPTION: +# Warns and/or dies if the user is trying to downgrade Qt. +qt5-build_pkg_setup() { + # Warn users of possible breakage when downgrading to a previous release. + # Downgrading revisions within the same release is safe. + if has_version ">${CATEGORY}/${P}-r9999:5"; then + ewarn + ewarn "Downgrading Qt is completely unsupported and can break your system!" + ewarn + fi +} + +# @FUNCTION: qt5-build_src_unpack +# @DESCRIPTION: +# Unpacks the sources. +qt5-build_src_unpack() { + if ! version_is_at_least 4.4 $(gcc-version); then + ewarn + ewarn "Using a GCC version lower than 4.4 is not supported." + ewarn + fi + + if [[ ${PN} == "qtwebkit" ]]; then + eshopts_push -s extglob + if is-flagq '-g?(gdb)?([1-9])'; then + ewarn + ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)." + ewarn "You may experience really long compilation times and/or increased memory usage." + ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug." + ewarn "For more info check out https://bugs.gentoo.org/307861" + ewarn + fi + eshopts_pop + fi + + case ${QT5_BUILD_TYPE} in + live) + git-r3_src_unpack + ;; + release) + default + ;; + esac +} + +# @FUNCTION: qt5-build_src_prepare +# @DESCRIPTION: +# Prepares the sources before the configure phase. +qt5-build_src_prepare() { + qt5_prepare_env + + if [[ ${QT5_MODULE} == "qtbase" ]]; then + # Avoid unnecessary qmake recompilations + sed -i -re "s|^if true;.*(\[ '\!').*(\"\\\$outpath/bin/qmake\".*)|if \1 -e \2 then|" \ + configure || die "sed failed (skip qmake bootstrap)" + + # 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 '/"$CFG_RELEASE_QMAKE"/,/^\s\+fi$/ d' \ + 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)" + + # Reset QMAKE_*FLAGS_{RELEASE,DEBUG} variables, + # or they will override user's flags (bug 427782) + sed -i -e '/^SYSTEM_VARIABLES=/ i \ + QMakeVar set QMAKE_CFLAGS_RELEASE\ + QMakeVar set QMAKE_CFLAGS_DEBUG\ + QMakeVar set QMAKE_CXXFLAGS_RELEASE\ + QMakeVar set QMAKE_CXXFLAGS_DEBUG\ + QMakeVar set QMAKE_LFLAGS_RELEASE\ + QMakeVar set QMAKE_LFLAGS_DEBUG\n' \ + configure || die "sed failed (QMAKE_*FLAGS_{RELEASE,DEBUG})" + + # Respect CXX in configure + sed -i -e "/^QMAKE_CONF_COMPILER=/ s:=.*:=\"$(tc-getCXX)\":" \ + configure || die "sed failed (QMAKE_CONF_COMPILER)" + + # Respect toolchain and flags in config.tests + find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \ + sed -ri -e '/CXXFLAGS=/ s/"(\$CXXFLAGS) (\$PARAM)"/"\2 \1"/' \ + -e '/LFLAGS=/ s/"(\$LFLAGS) (\$PARAM)"/"\2 \1"/' \ + -e '/bin\/qmake/ s/-nocache //' \ + || die "sed failed (config.tests)" + fi + + if [[ ${PN} != "qtcore" ]]; then + qt5_symlink_tools_to_buildtree + fi + + # Apply patches + [[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}" + epatch_user +} + +# @FUNCTION: qt5-build_src_configure +# @DESCRIPTION: +# Runs qmake, possibly preceded by ./configure. +qt5-build_src_configure() { + # toolchain setup + tc-export CC CXX RANLIB STRIP + # qmake-generated Makefiles use LD/LINK for linking + export LD="$(tc-getCXX)" + + mkdir -p "${QT5_BUILD_DIR}" || die + pushd "${QT5_BUILD_DIR}" > /dev/null || die + + if [[ ${QT5_MODULE} == "qtbase" ]]; then + qt5_base_configure + fi + + qt5_foreach_target_subdir qt5_qmake + + popd > /dev/null || die +} + +# @FUNCTION: qt5-build_src_compile +# @DESCRIPTION: +# Compiles the code in target directories. +qt5-build_src_compile() { + qt5_foreach_target_subdir emake +} + +# @FUNCTION: qt5-build_src_test +# @DESCRIPTION: +# Runs tests in target directories. +# TODO: find a way to avoid circular deps with USE=test. +qt5-build_src_test() { + echo ">>> Test phase [QtTest]: ${CATEGORY}/${PF}" + + # create a custom testrunner script that correctly sets + # {,DY}LD_LIBRARY_PATH before executing the given test + local testrunner=${QT5_BUILD_DIR}/gentoo-testrunner + cat <<-EOF > "${testrunner}" + #!/bin/sh + export LD_LIBRARY_PATH="${QT5_BUILD_DIR}/lib:${QT5_LIBDIR}" + export DYLD_LIBRARY_PATH="${QT5_BUILD_DIR}/lib:${QT5_LIBDIR}" + "\$@" + EOF + chmod +x "${testrunner}" + + qt5_foreach_target_subdir qt5_qmake + qt5_foreach_target_subdir emake + + _test_runner() { + qt5_foreach_target_subdir emake TESTRUNNER="'${testrunner}'" check + } + + if [[ ${VIRTUALX_REQUIRED} == test ]]; then + VIRTUALX_COMMAND="_test_runner" virtualmake + else + _test_runner + fi +} + +# @FUNCTION: qt5-build_src_install +# @DESCRIPTION: +# Performs the actual installation of 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 + einfo "Running emake INSTALL_ROOT=${D} install_{mkspecs,qmake,syncqt}" + emake INSTALL_ROOT="${D}" install_{mkspecs,qmake,syncqt} + popd > /dev/null || die + + # create an empty Gentoo/gentoo-qconfig.h + dodir "${QT5_HEADERDIR#${EPREFIX}}"/Gentoo + : > "${D}${QT5_HEADERDIR}"/Gentoo/gentoo-qconfig.h + + # include gentoo-qconfig.h at the beginning of QtCore/qconfig.h + sed -i -e '2a#include <Gentoo/gentoo-qconfig.h>\n' \ + "${D}${QT5_HEADERDIR}"/QtCore/qconfig.h \ + || die "sed failed (qconfig.h)" + fi + + qt5_install_module_qconfigs + + # remove .la files since we are building only shared libraries + prune_libtool_files +} + +# @FUNCTION: qt5-build_pkg_postinst +# @DESCRIPTION: +# Regenerate configuration, plus throw a message about possible +# breakages and proposed solutions. +qt5-build_pkg_postinst() { + qt5_regenerate_global_qconfigs +} + +# @FUNCTION: qt5-build_pkg_postrm +# @DESCRIPTION: +# Regenerate configuration when the package is completely removed. +qt5-build_pkg_postrm() { + if [[ -z ${REPLACED_BY_VERSION} && ${PN} != "qtcore" ]]; then + qt5_regenerate_global_qconfigs + fi +} + +# @FUNCTION: qt_use +# @USAGE: <flag> [feature] [enableval] +# @DESCRIPTION: +# This will echo "-${enableval}-${feature}" if <flag> is enabled, or +# "-no-${feature}" if it's disabled. If [feature] is not specified, +# <flag> will be used for that. If [enableval] is not specified, the +# "-${enableval}" prefix is omitted. +qt_use() { + use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}" +} + +# @FUNCTION: qt_use_disable_mod +# @USAGE: <flag> <module> <files...> +# @DESCRIPTION: +# <flag> is the name of a flag in IUSE. +# <module> is the (lowercase) name of a Qt5 module. +# <files...> is a list of one or more qmake project files. +# +# This function patches <files> to treat <module> as not installed +# when <flag> 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 3 arguments" + + local flag=$1 + local module=$2 + shift 2 + + use "${flag}" && return + + echo "$@" | xargs sed -i -e "s/qtHaveModule(${module})/false/g" || die +} + + +###### Internal functions ###### + +# @FUNCTION: qt5_prepare_env +# @INTERNAL +# @DESCRIPTION: +# Prepares the environment for building Qt. +qt5_prepare_env() { + # setup installation directories + 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/doc/qt-${PV} + QT5_TRANSLATIONDIR=${QT5_DATADIR}/translations + QT5_EXAMPLESDIR=${QT5_DATADIR}/examples + QT5_TESTSDIR=${QT5_DATADIR}/tests + QT5_SYSCONFDIR=${EPREFIX}/etc/qt5 + + if [[ ${QT5_MODULE} == "qtbase" ]]; then + # see mkspecs/features/qt_config.prf + # note: this could be the cause of bug 451456, so do it + # only when really needed, i.e. for qtbase modules + export QMAKEMODULES="${QT5_BUILD_DIR}/mkspecs/modules:${S}/mkspecs/modules:${QT5_ARCHDATADIR}/mkspecs/modules" + fi +} + +# @FUNCTION: qt5_symlink_tools_to_buildtree +# @INTERNAL +# @DESCRIPTION: +# Symlinks qtcore tools to buildtree, so they can be used when building other modules. +qt5_symlink_tools_to_buildtree() { + mkdir -p "${QT5_BUILD_DIR}"/bin || die + + local bin + for bin in "${QT5_BINDIR}"/{qmake,moc,rcc,uic,qdoc,qdbuscpp2xml,qdbusxml2cpp}; do + if [[ -e ${bin} ]]; then + ln -s "${bin}" "${QT5_BUILD_DIR}"/bin/ || die "failed to symlink ${bin}" + fi + done +} + +# @FUNCTION: qt5_base_configure +# @INTERNAL +# @DESCRIPTION: +# Runs ./configure for modules belonging to qtbase. +qt5_base_configure() { + # 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}" + + # debug/release + $(use debug && echo -debug || echo -release) + -no-separate-debug-info + + # licensing stuff + -opensource -confirm-license + + # build shared libraries + -shared + + # disabling accessibility support is not recommended by upstream, + # as it will break QStyle and may break other internal parts of Qt + -accessibility + + # use pkg-config to detect include and library paths + -pkg-config + + # prefer system libraries + -system-zlib + -system-pcre + -system-xcb + -system-xkbcommon + + # exclude examples and tests from default build + -nomake examples + -nomake tests + + # disable rpath on non-prefix (bugs 380415 and 417169) + $(use prefix || echo -no-rpath) + + # verbosity of the configure and build phases + -verbose $(${QT5_VERBOSE_BUILD} || echo -silent) + + # don't strip + -no-strip + + # precompiled headers aren't really useful for us + # and cause problems on hardened, so turn them off + -no-pch + + # reduce relocations in libraries through extra linker optimizations + # requires GNU ld >= 2.18 + -reduce-relocations + + # 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 + + # disable all platform plugins by default, override in qtgui + -no-xcb -no-xrender -no-eglfs -no-directfb -no-linuxfb -no-kms + + # disable gtkstyle because it adds qt4 include paths to the compiler + # command line if x11-libs/cairo is built with USE=qt4 (bug 433826) + -no-gtkstyle + + # do not build with -Werror + -no-warnings-are-errors + + # module-specific options + "${myconf[@]}" + ) + + einfo "Configuring with: ${conf[@]}" + "${S}"/configure "${conf[@]}" || die "configure failed" +} + +# @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}} + + "${QT5_BUILD_DIR}"/bin/qmake "${projectdir}" \ + || die "qmake failed (${projectdir})" +} + +# @FUNCTION: qt5_foreach_target_subdir +# @INTERNAL +# @DESCRIPTION: +# Executes the arguments inside each directory listed in QT5_TARGET_SUBDIRS. +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 + + mkdir -p "${QT5_BUILD_DIR}/${subdir}" || die + pushd "${QT5_BUILD_DIR}/${subdir}" > /dev/null || die + + einfo "Running $* ${subdir:+in ${subdir}}" + "$@" + + popd > /dev/null || die + done +} + +# @FUNCTION: qt5_install_module_qconfigs +# @INTERNAL +# @DESCRIPTION: +# Creates and installs gentoo-specific ${PN}-qconfig.{h,pri} files. +qt5_install_module_qconfigs() { + local x + + # qconfig.h + : > "${T}"/${PN}-qconfig.h + for x in "${QCONFIG_DEFINE[@]}"; do + echo "#define ${x}" >> "${T}"/${PN}-qconfig.h + done + [[ -s ${T}/${PN}-qconfig.h ]] && ( + insinto "${QT5_HEADERDIR#${EPREFIX}}"/Gentoo + doins "${T}"/${PN}-qconfig.h + ) + + # qconfig.pri + : > "${T}"/${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 + ) +} + +# @FUNCTION: qt5_regenerate_global_qconfigs +# @INTERNAL +# @DESCRIPTION: +# Generates gentoo-specific qconfig.{h,pri}. +# Don't die here because dying in pkg_post{inst,rm} just makes things worse. +qt5_regenerate_global_qconfigs() { + einfo "Regenerating gentoo-qconfig.h" + + find "${ROOT%/}${QT5_HEADERDIR}"/Gentoo \ + -name '*-qconfig.h' -a \! -name 'gentoo-qconfig.h' -type f \ + -execdir cat '{}' + > "${T}"/gentoo-qconfig.h + + [[ -s ${T}/gentoo-qconfig.h ]] || ewarn "Generated gentoo-qconfig.h is empty" + mv -f "${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 + if [[ -f ${qconfig_pri} ]]; then + local x qconfig_add= qconfig_remove= + local qt_config=$(sed -n 's/^QT_CONFIG\s*+=\s*//p' "${qconfig_pri}") + local new_qt_config= + + # 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 +} |