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 ||
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)
sometimes it is needed to identify these to ignore them… */
bool pkgCache::DepIterator::IsMultiArchImplicit() const
{
- if (ParentPkg()->Arch != TargetPkg()->Arch)
+ if (ParentPkg()->Arch != TargetPkg()->Arch &&
+ (S->Type == pkgCache::Dep::Replaces ||
+ S->Type == pkgCache::Dep::DpkgBreaks ||
+ S->Type == pkgCache::Dep::Conflicts))
return true;
return false;
}
[ Thibaut Girka ]
* cmdline/apt-get.cc:
- complain correctly about :any build-dep on M-A:none packages
+ * apt-pkg/deb/deblistparser.cc:
+ - add support for arch-specific qualifiers in dependencies
-- David Kalnischkies <kalnischkies@gmail.com> Wed, 06 Jun 2012 23:54:01 +0200