* apt-pkg/deb/deblistparser.cc:
[ntk/apt.git] / apt-pkg / deb / deblistparser.cc
index 0a7e415..4948c9b 100644 (file)
@@ -637,16 +637,18 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
    if (Section.Find(Tag,Start,Stop) == false)
       return true;
 
-   string Package;
    string const pkgArch = Ver.Arch();
-   string Version;
-   unsigned int Op;
 
    while (1)
    {
+      string Package;
+      string Version;
+      unsigned int Op;
+
       Start = ParseDepends(Start,Stop,Package,Version,Op,false,!MultiArchEnabled);
       if (Start == 0)
         return _error->Error("Problem parsing dependency %s",Tag);
+      size_t const found = Package.rfind(':');
 
       if (MultiArchEnabled == true &&
          (Type == pkgCache::Dep::Conflicts ||
@@ -658,6 +660,18 @@ bool debListParser::ParseDepends(pkgCache::VerIterator &Ver,
            if (NewDepends(Ver,Package,*a,Version,Op,Type) == false)
               return false;
       }
+      else if (MultiArchEnabled == true && found != string::npos &&
+              strcmp(Package.c_str() + found, ":any") != 0)
+      {
+        string Arch = Package.substr(found+1, string::npos);
+        Package = Package.substr(0, found);
+        // Such dependencies are not supposed to be accepted …
+        // … but this is probably the best thing to do.
+        if (Arch == "native")
+           Arch = _config->Find("APT::Architecture");
+        if (NewDepends(Ver,Package,Arch,Version,Op,Type) == false)
+           return false;
+      }
       else if (NewDepends(Ver,Package,pkgArch,Version,Op,Type) == false)
         return false;
       if (Start == Stop)