diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index a3fb896..cd226ee 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -962,8 +962,9 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
End->Type != pkgCache::Dep::Conflicts &&
End->Type != pkgCache::Dep::Obsoletes))
{
- // Try a little harder to fix protected packages..
- if ((Flags[I->ID] & Protected) == Protected)
+ // Try a little harder for protected packages and obsoletes..
+ if ((Flags[I->ID] & Protected) == Protected ||
+ End->Type == pkgCache::Dep::Obsoletes)
{
if (DoUpgrade(Pkg) == true)
{
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 70b392a..3d4574f 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -295,6 +295,13 @@ signed short pkgPolicy::GetPkgPriority(const pkgCache::PkgIterator &Pkg)
Max = Prio;
}
}
+
+ /* XXX HACK alert: give non-native packages slightly lower priority */
+ string CAS = _config->Find("RPM::CompatArchSuffix");
+ if (!CAS.empty() &&
+ string(Pkg.Name()).rfind(CAS) != string::npos) {
+ Max--;
+ }
return Max;
}
/*}}}*/
diff --git a/apt-pkg/rpm/rpmpackagedata.cc b/apt-pkg/rpm/rpmpackagedata.cc
index 7dbac3a..24060e2 100644
--- a/apt-pkg/rpm/rpmpackagedata.cc
+++ b/apt-pkg/rpm/rpmpackagedata.cc
@@ -42,6 +42,10 @@ RPMPackageData::RPMPackageData()
PreferredArch = _config->Find(PA.c_str(), BaseArch.c_str());
string CAS = MLBase + "::CompatArchSuffix";
CompatArchSuffix = _config->Find(CAS.c_str(), ".32bit");
+
+ // Blech, export for easy use elsewhere .. for now
+ _config->Set("RPM::PreferredArch", PreferredArch);
+ _config->Set("RPM::CompatArchSuffix", CompatArchSuffix);
}
// Populate priorities