Merged from trunk 7791:7792
authorFabian Groffen <grobian@gentoo.org>
Sat, 29 Sep 2007 20:09:31 +0000 (20:09 -0000)
committerFabian Groffen <grobian@gentoo.org>
Sat, 29 Sep 2007 20:09:31 +0000 (20:09 -0000)
   | 7792    | Mask binary packages if their CHOST does not match the one   |
   | zmedico | defined in make.conf.                                        |

svn path=/main/branches/prefix/; revision=7880

pym/emerge/__init__.py
pym/portage/dbapi/bintree.py

index 3cd0e212fa7ae117a892e9e3a5171fce1533adab..9b282f0a28831a25356f23497ba98c6791a1bf46 100644 (file)
@@ -1767,12 +1767,19 @@ class depgraph(object):
                                        "--usepkg" in self.myopts:
                                        # The next line assumes the binarytree has been populated.
                                        # XXX: Need to work out how we use the binary tree with roots.
-                                       myeb_pkg_matches = bindb.match(x)
-                                       if "--usepkgonly" not in self.myopts:
-                                               # Remove any binary package entries that are masked in the portage tree (#55871)
-                                               myeb_pkg_matches = [pkg for pkg in myeb_pkg_matches \
-                                                       if pkg in myeb_matches or  \
-                                                       not portdb.cpv_exists(pkg)]
+                                       usepkgonly = "--usepkgonly" in self.myopts
+                                       chost = pkgsettings["CHOST"]
+                                       myeb_pkg_matches = []
+                                       for pkg in bindb.match(x):
+                                               if chost != bindb.aux_get(pkg, ["CHOST"])[0]:
+                                                       continue
+                                               # Remove any binary package entries that are
+                                               # masked in the portage tree (#55871).
+                                               if not usepkgonly and \
+                                                       not (pkg in myeb_matches or \
+                                                       not portdb.cpv_exists(pkg)):
+                                                       continue
+                                               myeb_pkg_matches.append(pkg)
                                        if myeb_pkg_matches:
                                                myeb_pkg = portage.best(myeb_pkg_matches)
                                                # For best performance, try to reuse an exising node
@@ -1918,6 +1925,15 @@ class depgraph(object):
                                                        print "For more information, see MASKED PACKAGES section in the emerge man page or "
                                                        print "refer to the Gentoo Handbook."
                                                else:
+                                                       alleb = bindb.match(x)
+                                                       if alleb:
+                                                               chost = pkgsettings["CHOST"]
+                                                               for p in alleb:
+                                                                       mreasons = []
+                                                                       pkg_chost =  bindb.aux_get(p, ["CHOST"])[0]
+                                                                       if chost != pkg_chost:
+                                                                               mreasons.append("CHOST: %s" % pkg_chost)
+                                                                       print "- "+p+" (masked by: "+", ".join(mreasons)+")"
                                                        print "\n!!! "+red("There are no packages available to satisfy: ")+green(xinfo)
                                                        print "!!! Either add a suitable binary package or compile from an ebuild."
                                        else:
index 9898639e195dde56675904f9fa10c55294c9fb10..e8e114fa4173a88d5efafd689766745b280def30 100644 (file)
@@ -27,7 +27,7 @@ class bindbapi(fakedbapi):
                self.settings = settings
                self._match_cache = {}
                # Selectively cache metadata in order to optimize dep matching.
-               self._aux_cache_keys = set(["SLOT"])
+               self._aux_cache_keys = set(["CHOST","SLOT"])
                self._aux_cache = {}
 
        def match(self, *pargs, **kwargs):