diff -urN portage-2.1.7.17.orig/bin/ebuild.sh portage-2.1.7.17/bin/ebuild.sh --- portage-2.1.7.17.orig/bin/ebuild.sh 2010-04-26 11:59:13.944540717 +0200 +++ portage-2.1.7.17/bin/ebuild.sh 2010-04-26 18:53:49.018685611 +0200 @@ -1088,7 +1088,7 @@ local f x IFS=$' \t\n\r' for f in ASFLAGS CATEGORY CBUILD CC CFLAGS CHOST CTARGET CXX \ - CXXFLAGS DEFINED_PHASES DEPEND EXTRA_ECONF EXTRA_EINSTALL EXTRA_MAKE \ + CXXFLAGS DEFINED_PHASES DEPEND HDEPEND TDEPEND EXTRA_ECONF EXTRA_EINSTALL EXTRA_MAKE \ FEATURES INHERITED IUSE LDFLAGS LIBCFLAGS LIBCXXFLAGS \ LICENSE PDEPEND PF PKGUSE PROPERTIES PROVIDE RDEPEND RESTRICT SLOT \ KEYWORDS HOMEPAGE SRC_URI DESCRIPTION; do @@ -1256,6 +1256,8 @@ local B_IUSE local B_DEPEND + local B_HDEPEND + local B_TDEPEND local B_RDEPEND local B_PDEPEND while [ "$1" ]; do @@ -1303,12 +1305,14 @@ set -f # Retain the old data and restore it later. - unset B_IUSE B_DEPEND B_RDEPEND B_PDEPEND + unset B_IUSE B_DEPEND B_HDEPEND B_TDEPEND B_RDEPEND B_PDEPEND [ "${IUSE+set}" = set ] && B_IUSE="${IUSE}" [ "${DEPEND+set}" = set ] && B_DEPEND="${DEPEND}" + [ "${HDEPEND+set}" = set ] && B_HDEPEND="${HDEPEND}" + [ "${TDEPEND+set}" = set ] && B_TDEPEND="${TDEPEND}" [ "${RDEPEND+set}" = set ] && B_RDEPEND="${RDEPEND}" [ "${PDEPEND+set}" = set ] && B_PDEPEND="${PDEPEND}" - unset IUSE DEPEND RDEPEND PDEPEND + unset IUSE DEPEND HDEPEND TDEPEND RDEPEND PDEPEND #turn on glob expansion set +f @@ -1321,6 +1325,8 @@ # be applied after everything is finished. New incremental behavior. [ "${IUSE+set}" = set ] && export E_IUSE="${E_IUSE} ${IUSE}" [ "${DEPEND+set}" = set ] && export E_DEPEND="${E_DEPEND} ${DEPEND}" + [ "${HDEPEND+set}" = set ] && export E_HDEPEND="${E_HDEPEND} ${HDEPEND}" + [ "${TDEPEND+set}" = set ] && export E_TDEPEND="${E_TDEPEND} ${TDEPEND}" [ "${RDEPEND+set}" = set ] && export E_RDEPEND="${E_RDEPEND} ${RDEPEND}" [ "${PDEPEND+set}" = set ] && export E_PDEPEND="${E_PDEPEND} ${PDEPEND}" @@ -1330,6 +1336,12 @@ [ "${B_DEPEND+set}" = set ] && DEPEND="${B_DEPEND}" [ "${B_DEPEND+set}" = set ] || unset DEPEND + [ "${B_HDEPEND+set}" = set ] && HDEPEND="${B_HDEPEND}" + [ "${B_HDEPEND+set}" = set ] || unset HDEPEND + + [ "${B_TDEPEND+set}" = set ] && TDEPEND="${B_TDEPEND}" + [ "${B_TDEPEND+set}" = set ] || unset TDEPEND + [ "${B_RDEPEND+set}" = set ] && RDEPEND="${B_RDEPEND}" [ "${B_RDEPEND+set}" = set ] || unset RDEPEND @@ -1591,7 +1603,7 @@ # of ebuild.sh will work for pkg_postinst, pkg_prerm, and pkg_postrm # when portage is upgrading itself. -READONLY_EBUILD_METADATA="DEFINED_PHASES DEPEND DESCRIPTION +READONLY_EBUILD_METADATA="DEFINED_PHASES DEPEND HDEPEND TDEPEND DESCRIPTION EAPI HOMEPAGE INHERITED IUSE KEYWORDS LICENSE PDEPEND PROVIDE RDEPEND RESTRICT SLOT SRC_URI" @@ -1766,7 +1778,7 @@ export SANDBOX_ON="1" export S=${WORKDIR}/${P} -unset E_IUSE E_DEPEND E_RDEPEND E_PDEPEND +unset E_IUSE E_DEPEND E_HDEPEND E_TDEPEND E_RDEPEND E_PDEPEND # Turn of extended glob matching so that g++ doesn't get incorrectly matched. shopt -u extglob @@ -1870,7 +1882,7 @@ # In order to ensure correct interaction between ebuilds and # eclasses, they need to be unset before this process of # interaction begins. - unset DEPEND RDEPEND PDEPEND IUSE + unset DEPEND HDEPEND TDEPEND RDEPEND PDEPEND IUSE if [[ $PORTAGE_DEBUG != 1 || ${-/x/} != $- ]] ; then source "$EBUILD" || die "error sourcing ebuild" @@ -1896,10 +1908,12 @@ # add in dependency info from eclasses IUSE="${IUSE} ${E_IUSE}" DEPEND="${DEPEND} ${E_DEPEND}" + HDEPEND="${HDEPEND} ${E_HDEPEND}" + TDEPEND="${TDEPEND} ${E_TDEPEND}" RDEPEND="${RDEPEND} ${E_RDEPEND}" PDEPEND="${PDEPEND} ${E_PDEPEND}" - unset ECLASS E_IUSE E_DEPEND E_RDEPEND E_PDEPEND + unset ECLASS E_IUSE E_DEPEND E_HDEPEND E_TDEPEND E_RDEPEND E_PDEPEND # alphabetically ordered by $EBUILD_PHASE value case "$EAPI" in @@ -2131,7 +2145,7 @@ auxdbkeys="DEPEND RDEPEND SLOT SRC_URI RESTRICT HOMEPAGE LICENSE DESCRIPTION KEYWORDS INHERITED IUSE UNUSED_00 PDEPEND PROVIDE EAPI - PROPERTIES DEFINED_PHASES UNUSED_05 UNUSED_04 + PROPERTIES DEFINED_PHASES HDEPEND TDEPEND UNUSED_03 UNUSED_02 UNUSED_01" #the extra $(echo) commands remove newlines diff -urN portage-2.1.7.17.orig/bin/emaint portage-2.1.7.17/bin/emaint --- portage-2.1.7.17.orig/bin/emaint 2010-04-26 11:59:13.944540717 +0200 +++ portage-2.1.7.17/bin/emaint 2010-04-26 14:19:28.287049012 +0200 @@ -230,7 +230,7 @@ def __init__(self, tree): self._tree = tree self._portdir = tree.settings["PORTDIR"] - self._update_keys = ["DEPEND", "RDEPEND", "PDEPEND", "PROVIDE"] + self._update_keys = ["DEPEND", "HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND", "PROVIDE"] def _grab_global_updates(self, portdir): from portage.update import grab_updates, parse_updates diff -urN portage-2.1.7.17.orig/pym/_emerge/actions.py portage-2.1.7.17/pym/_emerge/actions.py --- portage-2.1.7.17.orig/pym/_emerge/actions.py 2010-04-26 11:59:13.947858545 +0200 +++ portage-2.1.7.17/pym/_emerge/actions.py 2010-04-26 15:44:08.442361798 +0200 @@ -884,14 +884,15 @@ graph = digraph() del cleanlist[:] - dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"] + dep_keys = ["HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND"] runtime = UnmergeDepPriority(runtime=True) runtime_post = UnmergeDepPriority(runtime_post=True) buildtime = UnmergeDepPriority(buildtime=True) priority_map = { "RDEPEND": runtime, "PDEPEND": runtime_post, - "DEPEND": buildtime, + "HDEPEND": buildtime, + "TDEPEND": buildtime, } for node in clean_set: diff -urN portage-2.1.7.17.orig/pym/_emerge/BlockerDB.py portage-2.1.7.17/pym/_emerge/BlockerDB.py --- portage-2.1.7.17.orig/pym/_emerge/BlockerDB.py 2010-04-26 11:59:13.947858545 +0200 +++ portage-2.1.7.17/pym/_emerge/BlockerDB.py 2010-04-26 15:32:25.132401258 +0200 @@ -40,7 +40,7 @@ def findInstalledBlockers(self, new_pkg, acquire_lock=0): blocker_cache = BlockerCache(self._vartree.root, self._vartree.dbapi) - dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"] + dep_keys = ["DEPEND", "HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND"] settings = self._vartree.settings stale_cache = set(blocker_cache) fake_vartree = self._get_fake_vartree(acquire_lock=acquire_lock) diff -urN portage-2.1.7.17.orig/pym/_emerge/depgraph.py portage-2.1.7.17/pym/_emerge/depgraph.py --- portage-2.1.7.17.orig/pym/_emerge/depgraph.py 2010-04-26 11:59:13.947858545 +0200 +++ portage-2.1.7.17/pym/_emerge/depgraph.py 2010-04-26 15:52:43.648948216 +0200 @@ -239,7 +239,7 @@ pkg_tree_map = RootConfig.pkg_tree_map - _dep_keys = ["DEPEND", "RDEPEND", "PDEPEND"] + _dep_keys = ["HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND"] def __init__(self, settings, trees, myopts, myparams, spinner, frozen_config=None, runtime_pkg_mask=None, allow_backtracking=False): @@ -1097,10 +1097,15 @@ removal_action = "remove" in self._dynamic_config.myparams edepend={} - depkeys = ["DEPEND","RDEPEND","PDEPEND"] + depkeys = ["HDEPEND","TDEPEND","RDEPEND","PDEPEND"] for k in depkeys: edepend[k] = metadata[k] + # if HDEPEND and TDEPEND are empty, treat DEPEND as if it was HDEPEND, + # otherwise ignore DEPEND + if edepend["HDEPEND"] == "" and edepend["TDEPEND"] == "": + edepend["HDEPEND"] = metadata["DEPEND"] + if not pkg.built and \ "--buildpkgonly" in self._frozen_config.myopts and \ "deep" not in self._dynamic_config.myparams and \ @@ -1121,10 +1126,12 @@ bdeps_optional = True else: # built packages do not have build time dependencies. - edepend["DEPEND"] = "" + edepend["HDEPEND"] = "" + edepend["TDEPEND"] = "" if removal_action and self._frozen_config.myopts.get("--with-bdeps", "y") == "n": - edepend["DEPEND"] = "" + edepend["HDEPEND"] = "" + edepend["TDEPEND"] = "" if removal_action: bdeps_root = myroot @@ -1135,10 +1142,13 @@ if root_deps is True: bdeps_root = myroot elif root_deps == "rdeps": - edepend["DEPEND"] = "" + edepend["HDEPEND"] = "" deps = ( - (bdeps_root, edepend["DEPEND"], + (bdeps_root, edepend["HDEPEND"], + self._priority(buildtime=(not bdeps_optional), + optional=bdeps_optional)), + (myroot, edepend["TDEPEND"], self._priority(buildtime=(not bdeps_optional), optional=bdeps_optional)), (myroot, edepend["RDEPEND"], self._priority(runtime=True)), @@ -1991,7 +2001,10 @@ return [pkg.slot_atom for pkg in greedy_pkgs] blockers = {} - blocker_dep_keys = ["DEPEND", "PDEPEND", "RDEPEND"] + if pkg.metadata["HDEPEND"] == "" and pkg.metadata["TDEPEND"] == "": + blocker_dep_keys = ["DEPEND", "PDEPEND", "RDEPEND"] + else: + blocker_dep_keys = ["HDEPEND", "TDEPEND", "PDEPEND", "RDEPEND"] for pkg in greedy_pkgs + [highest_pkg]: dep_str = " ".join(pkg.metadata[k] for k in blocker_dep_keys) try: diff -urN portage-2.1.7.17.orig/pym/_emerge/FakeVartree.py portage-2.1.7.17/pym/_emerge/FakeVartree.py --- portage-2.1.7.17.orig/pym/_emerge/FakeVartree.py 2010-04-26 11:59:13.944540717 +0200 +++ portage-2.1.7.17/pym/_emerge/FakeVartree.py 2010-04-26 14:20:22.300402459 +0200 @@ -46,7 +46,7 @@ self._match = self.dbapi.match self.dbapi.match = self._match_wrapper self._aux_get_history = set() - self._portdb_keys = ["EAPI", "DEPEND", "RDEPEND", "PDEPEND"] + self._portdb_keys = ["EAPI", "DEPEND", "HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND"] self._portdb = portdb self._global_updates = None @@ -193,7 +193,7 @@ def perform_global_updates(mycpv, mydb, mycommands): from portage.update import update_dbentries - aux_keys = ["DEPEND", "RDEPEND", "PDEPEND"] + aux_keys = ["DEPEND", "HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND"] aux_dict = dict(zip(aux_keys, mydb.aux_get(mycpv, aux_keys))) updates = update_dbentries(mycommands, aux_dict) if updates: diff -urN portage-2.1.7.17.orig/pym/_emerge/Package.py portage-2.1.7.17/pym/_emerge/Package.py --- portage-2.1.7.17.orig/pym/_emerge/Package.py 2010-04-26 11:59:13.944540717 +0200 +++ portage-2.1.7.17/pym/_emerge/Package.py 2010-04-26 14:21:16.579521127 +0200 @@ -27,7 +27,7 @@ ("_use",) metadata_keys = [ - "CHOST", "COUNTER", "DEPEND", "EAPI", + "CHOST", "COUNTER", "DEPEND", "HDEPEND", "TDEPEND", "EAPI", "INHERITED", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROVIDE", "RDEPEND", "repository", "PROPERTIES", "RESTRICT", "SLOT", "USE", "_mtime_"] diff -urN portage-2.1.7.17.orig/pym/portage/cache/flat_list.py portage-2.1.7.17/pym/portage/cache/flat_list.py --- portage-2.1.7.17.orig/pym/portage/cache/flat_list.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/cache/flat_list.py 2010-04-26 18:56:06.167862528 +0200 @@ -20,7 +20,7 @@ auxdbkey_order=('DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI', 'RESTRICT', 'HOMEPAGE', 'LICENSE', 'DESCRIPTION', 'KEYWORDS', 'IUSE', 'UNUSED_00', - 'PDEPEND', 'PROVIDE', 'EAPI', 'PROPERTIES', 'DEFINED_PHASES') + 'PDEPEND', 'PROVIDE', 'EAPI', 'PROPERTIES', 'DEFINED_PHASES', 'HDEPEND', 'TDEPEND') def __init__(self, label, auxdbkeys, **config): super(database,self).__init__(label, auxdbkeys, **config) diff -urN portage-2.1.7.17.orig/pym/portage/cache/metadata.py portage-2.1.7.17/pym/portage/cache/metadata.py --- portage-2.1.7.17.orig/pym/portage/cache/metadata.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/cache/metadata.py 2010-04-26 18:57:44.391160102 +0200 @@ -28,7 +28,7 @@ auxdbkey_order=('DEPEND', 'RDEPEND', 'SLOT', 'SRC_URI', 'RESTRICT', 'HOMEPAGE', 'LICENSE', 'DESCRIPTION', 'KEYWORDS', 'INHERITED', 'IUSE', 'UNUSED_00', - 'PDEPEND', 'PROVIDE', 'EAPI', 'PROPERTIES', 'DEFINED_PHASES') + 'PDEPEND', 'PROVIDE', 'EAPI', 'PROPERTIES', 'DEFINED_PHASES', 'HDEPEND', 'TDEPEND') autocommits = True serialize_eclasses = False diff -urN portage-2.1.7.17.orig/pym/portage/dbapi/bintree.py portage-2.1.7.17/pym/portage/dbapi/bintree.py --- portage-2.1.7.17.orig/pym/portage/dbapi/bintree.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/dbapi/bintree.py 2010-04-26 15:37:37.262429125 +0200 @@ -49,7 +49,7 @@ self.cpdict={} # Selectively cache metadata in order to optimize dep matching. self._aux_cache_keys = set( - ["CHOST", "DEPEND", "EAPI", "IUSE", "KEYWORDS", + ["CHOST", "DEPEND", "HDEPEND", "TDEPEND", "EAPI", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE", "RDEPEND", "repository", "RESTRICT", "SLOT", "USE"]) self._aux_cache_slot_dict = slot_dict_class(self._aux_cache_keys) @@ -187,12 +187,12 @@ self._pkgindex_keys = self.dbapi._aux_cache_keys.copy() self._pkgindex_keys.update(["CPV", "MTIME", "SIZE"]) self._pkgindex_aux_keys = \ - ["CHOST", "DEPEND", "DESCRIPTION", "EAPI", + ["CHOST", "DEPEND", "HDEPEND", "TDEPEND", "DESCRIPTION", "EAPI", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE", "RDEPEND", "repository", "SLOT", "USE"] self._pkgindex_aux_keys = list(self._pkgindex_aux_keys) self._pkgindex_use_evaluated_keys = \ - ("LICENSE", "RDEPEND", "DEPEND", + ("LICENSE", "RDEPEND", "DEPEND", "HDEPEND", "TDEPEND", "PDEPEND", "PROPERTIES", "PROVIDE") self._pkgindex_header_keys = set([ "ACCEPT_KEYWORDS", "ACCEPT_LICENSE", @@ -201,6 +201,8 @@ "GENTOO_MIRRORS", "INSTALL_MASK", "SYNC", "USE"]) self._pkgindex_default_pkg_data = { "DEPEND" : "", + "HDEPEND" : "", + "TDEPEND" : "", "EAPI" : "0", "IUSE" : "", "KEYWORDS": "", diff -urN portage-2.1.7.17.orig/pym/portage/dbapi/__init__.py portage-2.1.7.17/pym/portage/dbapi/__init__.py --- portage-2.1.7.17.orig/pym/portage/dbapi/__init__.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/dbapi/__init__.py 2010-04-26 15:40:26.489289672 +0200 @@ -217,7 +217,7 @@ maxval = len(cpv_all) aux_get = self.aux_get aux_update = self.aux_update - update_keys = ["DEPEND", "RDEPEND", "PDEPEND", "PROVIDE"] + update_keys = ["DEPEND", "HDEPEND", "TDEPEND", "RDEPEND", "PDEPEND", "PROVIDE"] from portage.update import update_dbentries if onUpdate: onUpdate(maxval, 0) diff -urN portage-2.1.7.17.orig/pym/portage/dbapi/porttree.py portage-2.1.7.17/pym/portage/dbapi/porttree.py --- portage-2.1.7.17.orig/pym/portage/dbapi/porttree.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/dbapi/porttree.py 2010-04-26 15:38:03.315692548 +0200 @@ -375,7 +375,7 @@ pass # Selectively cache metadata in order to optimize dep matching. self._aux_cache_keys = set( - ["DEPEND", "EAPI", "INHERITED", "IUSE", "KEYWORDS", "LICENSE", + ["DEPEND", "HDEPEND", "TDEPEND", "EAPI", "INHERITED", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE", "RDEPEND", "repository", "RESTRICT", "SLOT"]) diff -urN portage-2.1.7.17.orig/pym/portage/dbapi/vartree.py portage-2.1.7.17/pym/portage/dbapi/vartree.py --- portage-2.1.7.17.orig/pym/portage/dbapi/vartree.py 2010-04-26 11:59:13.951181543 +0200 +++ portage-2.1.7.17/pym/portage/dbapi/vartree.py 2010-04-26 15:39:35.223208418 +0200 @@ -113,7 +113,7 @@ vartree = db[root]["vartree"] self.vartree = vartree self._aux_cache_keys = set( - ["CHOST", "COUNTER", "DEPEND", "DESCRIPTION", + ["CHOST", "COUNTER", "DEPEND", "HDEPEND", "TDEPEND", "DESCRIPTION", "EAPI", "HOMEPAGE", "IUSE", "KEYWORDS", "LICENSE", "PDEPEND", "PROPERTIES", "PROVIDE", "RDEPEND", "repository", "RESTRICT" , "SLOT", "USE"]) diff -urN portage-2.1.7.17.orig/pym/portage/__init__.py portage-2.1.7.17/pym/portage/__init__.py --- portage-2.1.7.17.orig/pym/portage/__init__.py 2010-04-26 11:59:13.954519556 +0200 +++ portage-2.1.7.17/pym/portage/__init__.py 2010-04-26 18:54:04.162015733 +0200 @@ -8747,7 +8747,7 @@ 'RESTRICT', 'HOMEPAGE', 'LICENSE', 'DESCRIPTION', 'KEYWORDS', 'INHERITED', 'IUSE', 'UNUSED_00', 'PDEPEND', 'PROVIDE', 'EAPI', - 'PROPERTIES', 'DEFINED_PHASES', 'UNUSED_05', 'UNUSED_04', + 'PROPERTIES', 'DEFINED_PHASES', 'HDEPEND', 'TDEPEND', 'UNUSED_03', 'UNUSED_02', 'UNUSED_01', ] auxdbkeylen=len(auxdbkeys)