summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Lauer <patrick@gentoo.org>2014-04-23 08:01:30 +0000
committerPatrick Lauer <patrick@gentoo.org>2014-04-23 08:01:30 +0000
commit71fff6242e1bdddd3eba23d2933300fcce1943c2 (patch)
tree6e1991904d9c45c81cb53ee3e3150fdb038351cd /eclass/qt5-build.eclass
parentbump; drop pypy2_0, py3.2, add py3.4; add IUSE gevent, test; set REQUIRED_USE... (diff)
downloadhistorical-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.eclass618
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
+}