public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/portage:master commit in: man/, pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/, cnf/
@ 2011-06-21  1:11 Zac Medico
  0 siblings, 0 replies; only message in thread
From: Zac Medico @ 2011-06-21  1:11 UTC (permalink / raw
  To: gentoo-commits

commit:     1fdeb78d08bac14f3f999f112499d179a87cf342
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 21 01:08:59 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Tue Jun 21 01:08:59 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1fdeb78d

config: repo-level make.defaults/package.use

This completes the implementation of bug #370693.

---
 cnf/make.globals                                 |    2 +-
 man/ebuild.5                                     |    5 +-
 man/make.conf.5                                  |    5 ++-
 man/portage.5                                    |    2 +
 pym/portage/package/ebuild/_config/UseManager.py |    1 +
 pym/portage/package/ebuild/config.py             |   45 +++++++++++++++++++++-
 6 files changed, 55 insertions(+), 5 deletions(-)

diff --git a/cnf/make.globals b/cnf/make.globals
index 2258fd2..2892d50 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -106,7 +106,7 @@ CONFIG_PROTECT="/etc"
 CONFIG_PROTECT_MASK="/etc/env.d"
 
 # Disable auto-use
-USE_ORDER="env:pkg:conf:defaults:pkginternal:env.d"
+USE_ORDER="env:pkg:conf:defaults:pkginternal:repo:env.d"
 
 # Default ownership of installed files.
 PORTAGE_INST_UID="0"

diff --git a/man/ebuild.5 b/man/ebuild.5
index bc5680f..20117e0 100644
--- a/man/ebuild.5
+++ b/man/ebuild.5
@@ -246,8 +246,9 @@ is possible to prefix flags with + or - in order to create default settings
 that respectively enable or disable the corresponding \fBUSE\fR flags. For
 details about \fBUSE\fR flag stacking order, refer to the \fBUSE_ORDER\fR
 variable in \fBmake.conf\fR(5). Given the default \fBUSE_ORDER\fR setting,
-negative IUSE default settings are ineffective since profile and user
-configuration settings override them.
+negative IUSE default settings are effective only for negation of
+repo\-level USE settings, since profile and user configuration settings
+override them.
 .TP
 \fBDEPEND\fR
 This should contain a list of all packages that are required for the

diff --git a/man/make.conf.5 b/man/make.conf.5
index 86ac462..fcb0954 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -838,7 +838,7 @@ in USE="foo_bar foo_bla".
 Names of \fBUSE_EXPAND\fR variables that should not be shown in the verbose merge
 list output of the \fBemerge\fR(1) command.
 .TP
-\fBUSE_ORDER\fR = \fI"env:pkg:conf:defaults:pkginternal:env.d"\fR
+\fBUSE_ORDER\fR = \fI"env:pkg:conf:defaults:pkginternal:repo:env.d"\fR
 Determines the precedence of layers in the incremental stacking of the USE
 variable. Precedence decreases from left to right such that env overrides
 pkg, pkg overrides conf, and so forth.
@@ -866,6 +866,9 @@ USE from make.defaults and package.use in the profile (see \fBportage\fR(5))
 .B pkginternal
 USE from \fBebuild\fR(5) IUSE defaults
 .TP
+.B repo
+USE from make.defaults and package.use in the repo (see \fBportage\fR(5))
+.TP
 .B env.d
 USE from the environment variables defined by files in \fI/etc/env.d/\fR
 .RE

diff --git a/man/portage.5 b/man/portage.5
index 61f4623..b2b0eb1 100644
--- a/man/portage.5
+++ b/man/portage.5
@@ -81,8 +81,10 @@ categories
 info_pkgs
 info_vars
 license_groups
+make.defaults
 package.mask
 package.unmask
+package.use
 package.use.force
 package.use.mask
 profiles.desc

diff --git a/pym/portage/package/ebuild/_config/UseManager.py b/pym/portage/package/ebuild/_config/UseManager.py
index 3905f4f..de18500 100644
--- a/pym/portage/package/ebuild/_config/UseManager.py
+++ b/pym/portage/package/ebuild/_config/UseManager.py
@@ -53,6 +53,7 @@ class UseManager(object):
 		self._repo_useforce_dict = self._parse_repository_files_to_dict_of_tuples("use.force", repositories)
 		self._repo_pusemask_dict = self._parse_repository_files_to_dict_of_dicts("package.use.mask", repositories)
 		self._repo_puseforce_dict = self._parse_repository_files_to_dict_of_dicts("package.use.force", repositories)
+		self._repo_puse_dict = self._parse_repository_files_to_dict_of_dicts("package.use", repositories)
 
 		self._usemask_list = self._parse_profile_files_to_tuple_of_tuples("use.mask", profiles)
 		self._useforce_list = self._parse_profile_files_to_tuple_of_tuples("use.force", profiles)

diff --git a/pym/portage/package/ebuild/config.py b/pym/portage/package/ebuild/config.py
index b75a177..6b7af51 100644
--- a/pym/portage/package/ebuild/config.py
+++ b/pym/portage/package/ebuild/config.py
@@ -206,6 +206,7 @@ class config(object):
 			self.repositories = clone.repositories
 			self._iuse_implicit_match = clone._iuse_implicit_match
 			self._non_user_variables = clone._non_user_variables
+			self._repo_make_defaults = clone._repo_make_defaults
 			self.usemask = clone.usemask
 			self.useforce = clone.useforce
 			self.puse = clone.puse
@@ -229,6 +230,7 @@ class config(object):
 			self.configdict = copy.deepcopy(clone.configdict)
 			self.configlist = [
 				self.configdict['env.d'],
+				self.configdict['repo'],
 				self.configdict['pkginternal'],
 				self.configdict['globals'],
 				self.configdict['defaults'],
@@ -319,6 +321,9 @@ class config(object):
 			self.configdict["env.d"] = self.configlist[-1]
 
 			self.configlist.append({})
+			self.configdict["repo"] = self.configlist[-1]
+
+			self.configlist.append({})
 			self.configdict["pkginternal"] = self.configlist[-1]
 
 			self.packages_list = [grabfile_package(os.path.join(x, "packages"), verify_eapi=True) for x in self.profiles]
@@ -509,6 +514,14 @@ class config(object):
 
 			locations_manager.set_port_dirs(self["PORTDIR"], self["PORTDIR_OVERLAY"])
 
+			self._repo_make_defaults = {}
+			for repo in self.repositories.repos_with_profiles():
+				d = getconfig(os.path.join(repo.location, "profiles", "make.defaults"),
+					expand=self.configdict["globals"].copy()) or {}
+				for blacklisted in self._env_blacklist:
+					d.pop(blacklisted, None)
+				self._repo_make_defaults[repo.name] = d
+
 			#Read package.keywords and package.accept_keywords.
 			self._keywords_manager = KeywordsManager(self.profiles, abs_user_config, \
 				local_config, global_accept_keywords=self.configdict["defaults"].get("ACCEPT_KEYWORDS", ""))
@@ -629,7 +642,7 @@ class config(object):
 			# reasonable defaults; this is important as without USE_ORDER,
 			# USE will always be "" (nothing set)!
 			if "USE_ORDER" not in self:
-				self.backupenv["USE_ORDER"] = "env:pkg:conf:defaults:pkginternal:env.d"
+				self.backupenv["USE_ORDER"] = "env:pkg:conf:defaults:pkginternal:repo:env.d"
 
 			self["PORTAGE_GID"] = str(portage_gid)
 			self.backup_changes("PORTAGE_GID")
@@ -890,6 +903,7 @@ class config(object):
 			del self._penv[:]
 			self.configdict["pkg"].clear()
 			self.configdict["pkginternal"].clear()
+			self.configdict["repo"].clear()
 			self.configdict["defaults"]["USE"] = \
 				" ".join(self.make_defaults_use)
 			self.usemask = self._use_manager.getUseMask()
@@ -1065,6 +1079,7 @@ class config(object):
 
 		pkg_configdict["CATEGORY"] = cat
 		pkg_configdict["PF"] = pf
+		repository = None
 		if mydb:
 			if not hasattr(mydb, "aux_get"):
 				for k in aux_keys:
@@ -1109,6 +1124,34 @@ class config(object):
 			self.configdict["pkginternal"]["USE"] = pkginternaluse
 			has_changed = True
 
+		repo_env = []
+		repo_env_empty = True
+		if repository and repository != Package.UNKNOWN_REPO:
+			for repo in [repo.name for
+				repo in self.repositories[repository].masters] + [repository]:
+				d = self._repo_make_defaults.get(repo)
+				if d is None:
+					d = {}
+				else:
+					# make a copy, since we might modify it with
+					# package.use settings
+					d = d.copy()
+				repo_env.append(d)
+				cpdict = self._use_manager._repo_puse_dict.get(repo, {}).get(cp)
+				if cpdict:
+					repo_puse = ordered_by_atom_specificity(cpdict, pkg)
+					if repo_puse:
+						for x in repo_puse:
+							d["USE"] = d.get("USE", "") + " " + " ".join(x)
+				if d:
+					repo_env_empty = False
+
+		if not repo_env_empty or self.configdict["repo"]:
+			self.configdict["repo"].clear()
+			self.configdict["repo"].update(stack_dicts(repo_env,
+				incrementals=self.incrementals))
+			has_changed = True
+
 		defaults = []
 		for i, pkgprofileuse_dict in enumerate(self._use_manager._pkgprofileuse):
 			if self.make_defaults_use[i]:



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2011-06-21  1:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-21  1:11 [gentoo-commits] proj/portage:master commit in: man/, pym/portage/package/ebuild/, pym/portage/package/ebuild/_config/, cnf/ Zac Medico

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox