commit:     02df0addf8f8477590176807d747b4cbb57b7c32
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 16 08:30:41 2018 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Mar 17 21:43:03 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=02df0add

Support BDEPEND (CBUILD dependencies) in EAPI 7

Bug: https://bugs.gentoo.org/317337
Closes: https://github.com/gentoo/portage/pull/268
Reviewed-by: Zac Medico <zmedico <AT> gentoo.org>

 bin/eapi.sh                                        |  4 +++
 bin/ebuild.sh                                      | 29 ++++++++++++++++------
 bin/phase-functions.sh                             |  2 +-
 pym/_emerge/Package.py                             |  5 ++--
 pym/_emerge/actions.py                             |  1 +
 pym/_emerge/depgraph.py                            | 10 +++++++-
 pym/portage/__init__.py                            |  2 +-
 pym/portage/cache/metadata.py                      |  2 +-
 pym/portage/dbapi/bintree.py                       |  7 +++---
 pym/portage/dbapi/porttree.py                      |  2 +-
 pym/portage/dbapi/vartree.py                       |  4 +--
 pym/portage/dep/_slot_operator.py                  |  7 ++++--
 pym/portage/eapi.py                                |  7 +++++-
 .../package/ebuild/_config/special_env_vars.py     |  3 ++-
 pym/portage/package/ebuild/config.py               |  2 +-
 15 files changed, 62 insertions(+), 25 deletions(-)

diff --git a/bin/eapi.sh b/bin/eapi.sh
index 665b6f13e..326eb387e 100644
--- a/bin/eapi.sh
+++ b/bin/eapi.sh
@@ -34,6 +34,10 @@ ___eapi_has_HDEPEND() {
        [[ ${1-${EAPI-0}} =~ ^(5-hdepend)$ ]]
 }
 
+___eapi_has_BDEPEND() {
+       [[ ! ${1-${EAPI-0}} =~ 
^(0|1|2|3|4|4-python|4-slot-abi|5|5-hdepend|5-progress|6)$ ]]
+}
+
 ___eapi_has_RDEPEND_DEPEND_fallback() {
        [[ ${1-${EAPI-0}} =~ ^(0|1|2|3)$ ]]
 }

diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 9995a2f99..061b1aff4 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -264,6 +264,7 @@ inherit() {
        local B_RDEPEND
        local B_PDEPEND
        local B_HDEPEND
+       local B_BDEPEND
        while [ "$1" ]; do
                location=""
                potential_location=""
@@ -307,14 +308,17 @@ inherit() {
                        set -f
 
                        # Retain the old data and restore it later.
-                       unset B_IUSE B_REQUIRED_USE B_DEPEND B_RDEPEND 
B_PDEPEND B_HDEPEND
+                       unset B_IUSE B_REQUIRED_USE B_DEPEND B_RDEPEND B_PDEPEND
+                       unset B_HDEPEND B_BDEPEND
                        [ "${IUSE+set}"       = set ] && B_IUSE="${IUSE}"
                        [ "${REQUIRED_USE+set}" = set ] && 
B_REQUIRED_USE="${REQUIRED_USE}"
                        [ "${DEPEND+set}"     = set ] && B_DEPEND="${DEPEND}"
                        [ "${RDEPEND+set}"    = set ] && B_RDEPEND="${RDEPEND}"
                        [ "${PDEPEND+set}"    = set ] && B_PDEPEND="${PDEPEND}"
                        [ "${HDEPEND+set}"    = set ] && B_HDEPEND="${HDEPEND}"
+                       [ "${BDEPEND+set}"    = set ] && B_BDEPEND="${BDEPEND}"
                        unset IUSE REQUIRED_USE DEPEND RDEPEND PDEPEND HDEPEND
+                       unset BDEPEND
                        #turn on glob expansion
                        set +f
                fi
@@ -333,6 +337,7 @@ inherit() {
                        [ "${RDEPEND+set}"      = set ] && 
E_RDEPEND+="${E_RDEPEND:+ }${RDEPEND}"
                        [ "${PDEPEND+set}"      = set ] && 
E_PDEPEND+="${E_PDEPEND:+ }${PDEPEND}"
                        [ "${HDEPEND+set}"      = set ] && 
E_HDEPEND+="${E_HDEPEND:+ }${HDEPEND}"
+                       [ "${BDEPEND+set}"      = set ] && 
E_BDEPEND+="${E_BDEPEND:+ }${BDEPEND}"
 
                        [ "${B_IUSE+set}"     = set ] && IUSE="${B_IUSE}"
                        [ "${B_IUSE+set}"     = set ] || unset IUSE
@@ -352,6 +357,9 @@ inherit() {
                        [ "${B_HDEPEND+set}"  = set ] && HDEPEND="${B_HDEPEND}"
                        [ "${B_HDEPEND+set}"  = set ] || unset HDEPEND
 
+                       [ "${B_BDEPEND+set}"  = set ] && BDEPEND="${B_BDEPEND}"
+                       [ "${B_BDEPEND+set}"  = set ] || unset BDEPEND
+
                        #turn on glob expansion
                        set +f
 
@@ -618,9 +626,10 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
                # In order to ensure correct interaction between ebuilds and
                # eclasses, they need to be unset before this process of
                # interaction begins.
-               unset EAPI DEPEND RDEPEND PDEPEND HDEPEND INHERITED IUSE 
REQUIRED_USE \
-                       ECLASS E_IUSE E_REQUIRED_USE E_DEPEND E_RDEPEND 
E_PDEPEND \
-                       E_HDEPEND PROVIDES_EXCLUDE REQUIRES_EXCLUDE
+               unset EAPI DEPEND RDEPEND PDEPEND HDEPEND BDEPEND
+               unset INHERITED IUSE REQUIRED_USE ECLASS E_IUSE E_REQUIRED_USE
+               unset E_DEPEND E_RDEPEND E_PDEPEND E_HDEPEND E_BDEPEND
+               unset PROVIDES_EXCLUDE REQUIRES_EXCLUDE
 
                if [[ $PORTAGE_DEBUG != 1 || ${-/x/} != $- ]] ; then
                        source "$EBUILD" || die "error sourcing ebuild"
@@ -656,10 +665,11 @@ if ! has "$EBUILD_PHASE" clean cleanrm ; then
                RDEPEND+="${RDEPEND:+ }${E_RDEPEND}"
                PDEPEND+="${PDEPEND:+ }${E_PDEPEND}"
                HDEPEND+="${HDEPEND:+ }${E_HDEPEND}"
+               BDEPEND+="${BDEPEND:+ }${E_BDEPEND}"
                REQUIRED_USE+="${REQUIRED_USE:+ }${E_REQUIRED_USE}"
                
-               unset ECLASS E_IUSE E_REQUIRED_USE E_DEPEND E_RDEPEND E_PDEPEND 
E_HDEPEND \
-                       __INHERITED_QA_CACHE
+               unset ECLASS E_IUSE E_REQUIRED_USE E_DEPEND E_RDEPEND E_PDEPEND
+               unset E_HDEPEND E_BDEPEND __INHERITED_QA_CACHE
 
                # alphabetically ordered by $EBUILD_PHASE value
                case ${EAPI} in
@@ -728,13 +738,16 @@ if [[ $EBUILD_PHASE = depend ]] ; then
        fi
 
        auxdbkeys="DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE
-               DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND 
UNUSED_05 EAPI
-               PROPERTIES DEFINED_PHASES HDEPEND UNUSED_04
+               DESCRIPTION KEYWORDS INHERITED IUSE REQUIRED_USE PDEPEND BDEPEND
+               EAPI PROPERTIES DEFINED_PHASES HDEPEND UNUSED_04
                UNUSED_03 UNUSED_02 UNUSED_01"
 
        if ! ___eapi_has_HDEPEND; then
                unset HDEPEND
        fi
+       if ! ___eapi_has_BDEPEND; then
+               unset BDEPEND
+       fi
 
        # The extra $(echo) commands remove newlines.
        if [ -n "${dbkey}" ] ; then

diff --git a/bin/phase-functions.sh b/bin/phase-functions.sh
index 6ae61b2f0..3aae3ef56 100644
--- a/bin/phase-functions.sh
+++ b/bin/phase-functions.sh
@@ -7,7 +7,7 @@
 # of ebuild.sh will work for pkg_postinst, pkg_prerm, and pkg_postrm
 # when portage is upgrading itself.
 
-PORTAGE_READONLY_METADATA="DEFINED_PHASES DEPEND DESCRIPTION
+PORTAGE_READONLY_METADATA="BDEPEND DEFINED_PHASES DEPEND DESCRIPTION
        EAPI HDEPEND HOMEPAGE INHERITED IUSE REQUIRED_USE KEYWORDS LICENSE
        PDEPEND RDEPEND REPOSITORY RESTRICT SLOT SRC_URI"
 

diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index b7911c5f4..791a35612 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -42,6 +42,7 @@ class Package(Task):
                "_validated_atoms", "_visible")
 
        metadata_keys = [
+               "BDEPEND",
                "BUILD_ID", "BUILD_TIME", "CHOST", "COUNTER", "DEFINED_PHASES",
                "DEPEND", "EAPI", "HDEPEND", "INHERITED", "IUSE", "KEYWORDS",
                "LICENSE", "MD5", "PDEPEND", "PROVIDES",
@@ -49,8 +50,8 @@ class Package(Task):
                "PROPERTIES", "REQUIRES", "RESTRICT", "SIZE",
                "SLOT", "USE", "_mtime_"]
 
-       _dep_keys = ('DEPEND', 'HDEPEND', 'PDEPEND', 'RDEPEND')
-       _buildtime_keys = ('DEPEND', 'HDEPEND')
+       _dep_keys = ('BDEPEND', 'DEPEND', 'HDEPEND', 'PDEPEND', 'RDEPEND')
+       _buildtime_keys = ('BDEPEND', 'DEPEND', 'HDEPEND')
        _runtime_keys = ('PDEPEND', 'RDEPEND')
        _use_conditional_misc_keys = ('LICENSE', 'PROPERTIES', 'RESTRICT')
        UNKNOWN_REPO = _unknown_repo

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index 455aa7e04..1d4e66def 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1322,6 +1322,7 @@ def calc_depclean(settings, trees, ldpath_mtimes,
                priority_map = {
                        "RDEPEND": runtime,
                        "PDEPEND": runtime_post,
+                       "BDEPEND": buildtime,
                        "HDEPEND": buildtime,
                        "DEPEND": buildtime,
                }

diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index 747ef1a1a..5c863103e 100644
--- a/pym/_emerge/depgraph.py
+++ b/pym/_emerge/depgraph.py
@@ -3289,16 +3289,18 @@ class depgraph(object):
                        # Removal actions never traverse ignored buildtime
                        # dependencies, so it's safe to discard them early.
                        edepend["DEPEND"] = ""
+                       edepend["BDEPEND"] = ""
                        edepend["HDEPEND"] = ""
                        ignore_build_time_deps = True
 
                ignore_depend_deps = ignore_build_time_deps
+               ignore_bdepend_deps = ignore_build_time_deps
                ignore_hdepend_deps = ignore_build_time_deps
 
                if removal_action:
                        depend_root = myroot
                else:
-                       if eapi_attrs.hdepend:
+                       if eapi_attrs.bdepend or eapi_attrs.hdepend:
                                depend_root = myroot
                        else:
                                depend_root = 
self._frozen_config._running_root.root
@@ -3315,6 +3317,8 @@ class depgraph(object):
                if not self._rebuild.rebuild:
                        if ignore_depend_deps:
                                edepend["DEPEND"] = ""
+                       if ignore_bdepend_deps:
+                               edepend["BDEPEND"] = ""
                        if ignore_hdepend_deps:
                                edepend["HDEPEND"] = ""
 
@@ -3335,6 +3339,10 @@ class depgraph(object):
                                self._priority(buildtime=True,
                                optional=(pkg.built or ignore_hdepend_deps),
                                ignored=ignore_hdepend_deps)),
+                       (self._frozen_config._running_root.root, 
edepend["BDEPEND"],
+                               self._priority(buildtime=True,
+                               optional=(pkg.built or ignore_bdepend_deps),
+                               ignored=ignore_bdepend_deps)),
                )
 
                debug = "--debug" in self._frozen_config.myopts

diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 8596b89b1..137351a69 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -508,7 +508,7 @@ auxdbkeys = (
   'DEPEND',    'RDEPEND',   'SLOT',      'SRC_URI',
        'RESTRICT',  'HOMEPAGE',  'LICENSE',   'DESCRIPTION',
        'KEYWORDS',  'INHERITED', 'IUSE', 'REQUIRED_USE',
-       'PDEPEND',   'UNUSED_05', 'EAPI',
+       'PDEPEND',   'BDEPEND', 'EAPI',
        'PROPERTIES', 'DEFINED_PHASES', 'HDEPEND', 'UNUSED_04',
        'UNUSED_03', 'UNUSED_02', 'UNUSED_01',
 )

diff --git a/pym/portage/cache/metadata.py b/pym/portage/cache/metadata.py
index 12639c6a1..59b25b606 100644
--- a/pym/portage/cache/metadata.py
+++ b/pym/portage/cache/metadata.py
@@ -29,7 +29,7 @@ class database(flat_hash.database):
        auxdbkey_order=('DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI',
                'RESTRICT',  'HOMEPAGE',  'LICENSE', 'DESCRIPTION',
                'KEYWORDS',  'INHERITED', 'IUSE', 'REQUIRED_USE',
-               'PDEPEND',   'UNUSED', 'EAPI', 'PROPERTIES',
+               'PDEPEND',   'BDEPEND',   'EAPI', 'PROPERTIES',
                'DEFINED_PHASES', 'HDEPEND')
 
        autocommits = True

diff --git a/pym/portage/dbapi/bintree.py b/pym/portage/dbapi/bintree.py
index 839897a41..fc48a6902 100644
--- a/pym/portage/dbapi/bintree.py
+++ b/pym/portage/dbapi/bintree.py
@@ -85,7 +85,7 @@ class bindbapi(fakedbapi):
                self.move_ent = mybintree.move_ent
                # Selectively cache metadata in order to optimize dep matching.
                self._aux_cache_keys = set(
-                       ["BUILD_ID", "BUILD_TIME", "CHOST", "DEFINED_PHASES",
+                       ["BDEPEND", "BUILD_ID", "BUILD_TIME", "CHOST", 
"DEFINED_PHASES",
                        "DEPEND", "EAPI", "HDEPEND", "IUSE", "KEYWORDS",
                        "LICENSE", "MD5", "PDEPEND", "PROPERTIES",
                        "PROVIDES", "RDEPEND", "repository", "REQUIRES", 
"RESTRICT",
@@ -312,7 +312,7 @@ class binarytree(object):
                        self._pkgindex_keys = self.dbapi._aux_cache_keys.copy()
                        self._pkgindex_keys.update(["CPV", "SIZE"])
                        self._pkgindex_aux_keys = \
-                               ["BASE_URI", "BUILD_ID", "BUILD_TIME", "CHOST",
+                               ["BASE_URI", "BDEPEND", "BUILD_ID", 
"BUILD_TIME", "CHOST",
                                "DEFINED_PHASES", "DEPEND", "DESCRIPTION", 
"EAPI",
                                "HDEPEND", "IUSE", "KEYWORDS", "LICENSE", 
"PDEPEND",
                                "PKGINDEX_URI", "PROPERTIES", "PROVIDES",
@@ -320,7 +320,7 @@ class binarytree(object):
                                "SIZE", "SLOT", "USE"]
                        self._pkgindex_aux_keys = list(self._pkgindex_aux_keys)
                        self._pkgindex_use_evaluated_keys = \
-                               ("DEPEND", "HDEPEND", "LICENSE", "RDEPEND",
+                               ("BDEPEND", "DEPEND", "HDEPEND", "LICENSE", 
"RDEPEND",
                                "PDEPEND", "PROPERTIES", "RESTRICT")
                        self._pkgindex_header_keys = set([
                                "ACCEPT_KEYWORDS", "ACCEPT_LICENSE",
@@ -330,6 +330,7 @@ class binarytree(object):
                                "USE_EXPAND", "USE_EXPAND_HIDDEN", 
"USE_EXPAND_IMPLICIT",
                                "USE_EXPAND_UNPREFIXED"])
                        self._pkgindex_default_pkg_data = {
+                               "BDEPEND" : "",
                                "BUILD_ID"           : "",
                                "BUILD_TIME"         : "",
                                "DEFINED_PHASES"     : "",

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index 1353ac666..69e14dbcd 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -312,7 +312,7 @@ class portdbapi(dbapi):
                                        self._pregen_auxdb[x] = cache
                # Selectively cache metadata in order to optimize dep matching.
                self._aux_cache_keys = set(
-                       ["DEPEND", "EAPI", "HDEPEND",
+                       ["BDEPEND", "DEPEND", "EAPI", "HDEPEND",
                        "INHERITED", "IUSE", "KEYWORDS", "LICENSE",
                        "PDEPEND", "PROPERTIES", "RDEPEND", "repository",
                        "RESTRICT", "SLOT", "DEFINED_PHASES", "REQUIRED_USE"])

diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 6406682d6..bed76d80f 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -176,8 +176,8 @@ class vardbapi(dbapi):
                        vartree = portage.db[settings['EROOT']]['vartree']
                self.vartree = vartree
                self._aux_cache_keys = set(
-                       ["BUILD_TIME", "CHOST", "COUNTER", "DEPEND", 
"DESCRIPTION",
-                       "EAPI", "HDEPEND", "HOMEPAGE",
+                       ["BDEPEND", "BUILD_TIME", "CHOST", "COUNTER", "DEPEND",
+                       "DESCRIPTION", "EAPI", "HDEPEND", "HOMEPAGE",
                        "BUILD_ID", "IUSE", "KEYWORDS",
                        "LICENSE", "PDEPEND", "PROPERTIES", "RDEPEND",
                        "repository", "RESTRICT" , "SLOT", "USE", 
"DEFINED_PHASES",

diff --git a/pym/portage/dep/_slot_operator.py 
b/pym/portage/dep/_slot_operator.py
index 8ce570d5a..bae94b30a 100644
--- a/pym/portage/dep/_slot_operator.py
+++ b/pym/portage/dep/_slot_operator.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2014 Gentoo Foundation
+# Copyright 2012-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 from __future__ import unicode_literals
@@ -65,7 +65,10 @@ def evaluate_slot_operator_equal_deps(settings, use, trees):
        for k in Package._runtime_keys:
                _eval_deps(deps[k], vardbs)
 
-       if eapi_attrs.hdepend:
+       if eapi_attrs.bdepend:
+               _eval_deps(deps["BDEPEND"], [running_vardb])
+               _eval_deps(deps["DEPEND"], [target_vardb])
+       elif eapi_attrs.hdepend:
                _eval_deps(deps["HDEPEND"], [running_vardb])
                _eval_deps(deps["DEPEND"], [target_vardb])
        else:

diff --git a/pym/portage/eapi.py b/pym/portage/eapi.py
index d1ca299f5..5f0017b65 100644
--- a/pym/portage/eapi.py
+++ b/pym/portage/eapi.py
@@ -104,6 +104,10 @@ def eapi_has_automatic_unpack_dependencies(eapi):
 def eapi_has_hdepend(eapi):
        return eapi in ("5-hdepend",)
 
+def eapi_has_bdepend(eapi):
+       return eapi not in ("0", "1", "2", "3", "4", "4-python", "4-slot-abi",
+                       "5", "5-progress", "6")
+
 def eapi_has_targetroot(eapi):
        return eapi in ("5-hdepend",)
 
@@ -116,7 +120,7 @@ def eapi_path_variables_end_with_trailing_slash(eapi):
                        "5", "5-progress", "6")
 
 _eapi_attrs = collections.namedtuple('_eapi_attrs',
-       'dots_in_PN dots_in_use_flags exports_EBUILD_PHASE_FUNC '
+       'bdepend dots_in_PN dots_in_use_flags exports_EBUILD_PHASE_FUNC '
        'exports_PORTDIR exports_ECLASSDIR '
        'feature_flag_test feature_flag_targetroot '
        'hdepend iuse_defaults iuse_effective posixish_locale '
@@ -144,6 +148,7 @@ def _get_eapi_attrs(eapi):
                eapi = None
 
        eapi_attrs = _eapi_attrs(
+               bdepend = (eapi is not None and eapi_has_bdepend(eapi)),
                dots_in_PN = (eapi is None or eapi_allows_dots_in_PN(eapi)),
                dots_in_use_flags = (eapi is None or 
eapi_allows_dots_in_use_flags(eapi)),
                empty_groups_always_true = (eapi is not None and 
eapi_empty_groups_always_true(eapi)),

diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py 
b/pym/portage/package/ebuild/_config/special_env_vars.py
index 65a009d05..68770e237 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -14,7 +14,8 @@ import re
 # to enter the config instance from the external environment or
 # configuration files.
 env_blacklist = frozenset((
-       "A", "AA", "CATEGORY", "DEPEND", "DESCRIPTION", "DOCS", "EAPI",
+       "A", "AA", "BDEPEND", "CATEGORY", "DEPEND", "DESCRIPTION",
+       "DOCS", "EAPI",
        "EBUILD_FORCE_TEST", "EBUILD_PHASE",
        "EBUILD_PHASE_FUNC", "EBUILD_SKIP_MANIFEST",
        "ED", "EMERGE_FROM", "EPREFIX", "EROOT",

diff --git a/pym/portage/package/ebuild/config.py 
b/pym/portage/package/ebuild/config.py
index 3dc64a067..9d2b34a53 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -155,7 +155,7 @@ class config(object):
        _constant_keys = frozenset(['PORTAGE_BIN_PATH', 'PORTAGE_GID',
                'PORTAGE_PYM_PATH', 'PORTAGE_PYTHONPATH'])
 
-       _setcpv_aux_keys = ('DEFINED_PHASES', 'DEPEND', 'EAPI', 'HDEPEND',
+       _setcpv_aux_keys = ('BDEPEND', 'DEFINED_PHASES', 'DEPEND', 'EAPI', 
'HDEPEND',
                'INHERITED', 'IUSE', 'REQUIRED_USE', 'KEYWORDS', 'LICENSE', 
'PDEPEND',
                'PROPERTIES', 'RDEPEND', 'SLOT',
                'repository', 'RESTRICT', 'LICENSE',)

Reply via email to