if (StripMultiArch == false && D->Type != pkgSrcRecords::Parser::BuildDependIndep)
{
size_t const colon = D->Package.find(":");
- if (colon != string::npos &&
- (strcmp(D->Package.c_str() + colon, ":any") == 0 || strcmp(D->Package.c_str() + colon, ":native") == 0))
- Pkg = Cache->FindPkg(D->Package.substr(0,colon));
+ if (colon != string::npos)
+ {
+ if (strcmp(D->Package.c_str() + colon, ":any") == 0 || strcmp(D->Package.c_str() + colon, ":native") == 0)
+ Pkg = Cache->FindPkg(D->Package.substr(0,colon));
+ else
+ Pkg = Cache->FindPkg(D->Package);
+ }
else
- Pkg = Cache->FindPkg(D->Package);
+ Pkg = Cache->FindPkg(D->Package, hostArch);
// a bad version either is invalid or doesn't satify dependency
#define BADVER(Ver) (Ver.end() == true || \
}
if (verlist.empty() == true)
{
- pkgCache::PkgIterator HostPkg = Cache->FindPkg(D->Package, hostArch);
- if (HostPkg.end() == false)
+ pkgCache::PkgIterator BuildPkg = Cache->FindPkg(D->Package, "native");
+ if (BuildPkg.end() == false && Pkg != BuildPkg)
{
- pkgCache::VerIterator Ver = (*Cache)[HostPkg].InstVerIter(*Cache);
+ pkgCache::VerIterator Ver = (*Cache)[BuildPkg].InstVerIter(*Cache);
if (BADVER(Ver) == false)
verlist.insert(Ver);
- Ver = (*Cache)[HostPkg].CandidateVerIter(*Cache);
+ Ver = (*Cache)[BuildPkg].CandidateVerIter(*Cache);
if (BADVER(Ver) == false)
verlist.insert(Ver);
}
Pkg = Ver.ParentPkg().Group().FindPkg(hostArch);
else if (strcmp(D->Package.c_str() + colon, ":any") == 0)
forbidden = "Multi-Arch: none";
+ else if (strcmp(D->Package.c_str() + colon, ":native") == 0)
+ Pkg = Ver.ParentPkg().Group().FindPkg("native");
}
else if (Ver->MultiArch == pkgCache::Version::Same)
{
Pkg = Ver.ParentPkg().Group().FindPkg(hostArch);
else if (strcmp(D->Package.c_str() + colon, ":any") == 0)
forbidden = "Multi-Arch: same";
- // :native gets the buildArch
+ else if (strcmp(D->Package.c_str() + colon, ":native") == 0)
+ Pkg = Ver.ParentPkg().Group().FindPkg("native");
}
else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
{
- if (colon != string::npos)
+ if (colon == string::npos)
+ Pkg = Ver.ParentPkg().Group().FindPkg("native");
+ else if (strcmp(D->Package.c_str() + colon, ":any") == 0 ||
+ strcmp(D->Package.c_str() + colon, ":native") == 0)
forbidden = "Multi-Arch: foreign";
}
else if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
if (Pkg.end() == true)
Pkg = Grp.FindPreferredPkg(true);
}
- // native gets buildArch
+ else if (strcmp(D->Package.c_str() + colon, ":native") == 0)
+ Pkg = Ver.ParentPkg().Group().FindPkg("native");
}
if (forbidden.empty() == false)