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.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id DB0221382C5 for ; Fri, 2 Feb 2018 11:54:16 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E2916E0D01; Fri, 2 Feb 2018 11:54:15 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id B76DDE0D01 for ; Fri, 2 Feb 2018 11:54:15 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id CD83D335C7E for ; Fri, 2 Feb 2018 11:54:14 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id DC75D1E0 for ; Fri, 2 Feb 2018 11:54:11 +0000 (UTC) From: "Michael Palimaka" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Michael Palimaka" Message-ID: <1517572437.e553539e7ee050d094da9a4673b2e5ac71aae422.kensington@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: kensington X-VCS-Committer-Name: Michael Palimaka X-VCS-Revision: e553539e7ee050d094da9a4673b2e5ac71aae422 X-VCS-Branch: master Date: Fri, 2 Feb 2018 11:54:11 +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-Archives-Salt: c09545f6-349f-4d8a-aa76-dc72dc71ff35 X-Archives-Hash: 780e2b237c37bb3ade32535b935dcccf commit: e553539e7ee050d094da9a4673b2e5ac71aae422 Author: Michael Palimaka gentoo org> AuthorDate: Fri Jan 26 01:29:27 2018 +0000 Commit: Michael Palimaka gentoo org> CommitDate: Fri Feb 2 11:53:57 2018 +0000 URL: https://gitweb.gentoo.org/proj/qt.git/commit/?id=e553539e qt5-build.eclass: introduce for QT5_GENTOO_PRIVATE_CONFIG This behaves similarly to QT5_GENTOO_CONFIG, but for the new qmodule.pri instead. Bug: https://bugs.gentoo.org/634622 eclass/qt5-build.eclass | 116 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 10 deletions(-) diff --git a/eclass/qt5-build.eclass b/eclass/qt5-build.eclass index 28d303e2..939a048d 100644 --- a/eclass/qt5-build.eclass +++ b/eclass/qt5-build.eclass @@ -42,6 +42,14 @@ esac # 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 # @DESCRIPTION: # For proper description see virtualx.eclass man page. @@ -319,7 +327,7 @@ qt5-build_src_install() { dosym qt5-"${CHOST}".conf /etc/xdg/qtchooser/qt5.conf fi - qt5_install_module_qconfigs + qt5_install_module_config prune_libtool_files } @@ -327,7 +335,7 @@ qt5-build_src_install() { # @DESCRIPTION: # Regenerate configuration after installation or upgrade/downgrade. qt5-build_pkg_postinst() { - qt5_regenerate_global_qconfigs + qt5_regenerate_global_configs } # @FUNCTION: qt5-build_pkg_postrm @@ -335,7 +343,7 @@ qt5-build_pkg_postinst() { # Regenerate configuration when a module is completely removed. qt5-build_pkg_postrm() { if [[ -z ${REPLACED_BY_VERSION} && ${PN} != qtcore ]]; then - qt5_regenerate_global_qconfigs + qt5_regenerate_global_configs fi } @@ -675,6 +683,9 @@ qt5_base_configure() { # do not build with -Werror -no-warnings-are-errors + # enable in respective modules to avoid poisoning QT.global_private.enabled_features + $([[ ${QT5_MINOR_VERSION} -ge 9 ]] && echo -no-gui -no-widgets) + # module-specific options "${myconf[@]}" ) @@ -762,15 +773,17 @@ qt5_qmake() { || die "qmake failed (${projectdir#${S}/})" } -# @FUNCTION: qt5_install_module_qconfigs +# @FUNCTION: qt5_install_module_config # @INTERNAL # @DESCRIPTION: -# Creates and installs gentoo-specific ${PN}-qconfig.{h,pri} files. -qt5_install_module_qconfigs() { - local x qconfig_add= qconfig_remove= +# 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 + [[ ${QT5_MINOR_VERSION} -ge 9 ]] && > "${T}"/${PN}-qmodule.pri # generate qconfig_{add,remove} and ${PN}-qconfig.h for x in "${QT5_GENTOO_CONFIG[@]}"; do @@ -804,19 +817,45 @@ qt5_install_module_qconfigs() { doins "${T}"/${PN}-qconfig.pri ) + if [[ ${QT5_MINOR_VERSION} -ge 9 ]]; then + # 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 + ) + fi + # install also the original qconfig.pri [[ ${PN} == qtcore && ${QT5_MINOR_VERSION} -ge 9 ]] && ( insinto "${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/gentoo newins "${D}${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/qconfig.pri qconfig-qtcore.pri + newins "${D}${QT5_ARCHDATADIR#${EPREFIX}}"/mkspecs/qmodule.pri qmodule-qtcore.pri ) } -# @FUNCTION: qt5_regenerate_global_qconfigs +# @FUNCTION: qt5_regenerate_global_configs # @INTERNAL # @DESCRIPTION: -# Generates Gentoo-specific qconfig.{h,pri} according to the build configuration. +# 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_qconfigs() { +qt5_regenerate_global_configs() { einfo "Regenerating gentoo-qconfig.h" find "${ROOT%/}${QT5_HEADERDIR}"/Gentoo \ @@ -860,4 +899,61 @@ qt5_regenerate_global_qconfigs() { else ewarn "${qconfig_pri} does not exist or is not a regular file" fi + + if [[ ${QT5_MINOR_VERSION} -ge 9 ]]; then + 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 overriden + # 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 }