summaryrefslogtreecommitdiff
path: root/cmdline/apt-get.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cmdline/apt-get.cc')
-rw-r--r--cmdline/apt-get.cc48
1 files changed, 31 insertions, 17 deletions
diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc
index d4c7f4200..4bbe0c492 100644
--- a/cmdline/apt-get.cc
+++ b/cmdline/apt-get.cc
@@ -1434,7 +1434,7 @@ bool TryToInstallBuildDep(pkgCache::PkgIterator Pkg,pkgCacheFile &Cache,
if (Cache[Pkg].CandidateVer == 0 && Pkg->ProvidesList != 0)
{
CacheSetHelperAPTGet helper(c1out);
- helper.showErrors(AllowFail == false);
+ helper.showErrors(false);
pkgCache::VerIterator Ver = helper.canNotFindNewestVer(Cache, Pkg);
if (Ver.end() == false)
Pkg = Ver.ParentPkg();
@@ -2895,11 +2895,15 @@ bool DoBuildDep(CommandLine &CmdL)
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 || \
@@ -2918,13 +2922,13 @@ bool DoBuildDep(CommandLine &CmdL)
}
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);
}
@@ -2937,12 +2941,14 @@ bool DoBuildDep(CommandLine &CmdL)
for (; Ver != verlist.end(); ++Ver)
{
forbidden.clear();
- if (Ver->MultiArch == pkgCache::Version::None || Ver->MultiArch == pkgCache::Version::All)
+ if (Ver->MultiArch == pkgCache::Version::None)
{
if (colon == string::npos)
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)
{
@@ -2950,11 +2956,15 @@ bool DoBuildDep(CommandLine &CmdL)
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)
+ else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign || Ver->MultiArch == pkgCache::Version::All)
{
- 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)
@@ -2972,7 +2982,8 @@ bool DoBuildDep(CommandLine &CmdL)
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)
@@ -3004,7 +3015,7 @@ bool DoBuildDep(CommandLine &CmdL)
else
Pkg = Cache->FindPkg(D->Package);
- if (Pkg.end() == true)
+ if (Pkg.end() == true || (Pkg->VersionList == 0 && Pkg->ProvidesList == 0))
{
if (_config->FindB("Debug::BuildDeps",false) == true)
cout << " (not found)" << (*D).Package << endl;
@@ -3087,7 +3098,7 @@ bool DoBuildDep(CommandLine &CmdL)
}
}
- if (TryToInstallBuildDep(Pkg,Cache,Fix,false,false) == true)
+ if (TryToInstallBuildDep(Pkg,Cache,Fix,false,false,false) == true)
{
// We successfully installed something; skip remaining alternatives
skipAlternatives = hasAlternatives;
@@ -3239,7 +3250,10 @@ bool DownloadChangelog(CacheFile &CacheFile, pkgAcquire &Fetcher,
return true;
// error
- return _error->Error("changelog download failed");
+ pkgRecords Recs(CacheFile);
+ pkgRecords::Parser &rec=Recs.Lookup(Ver.FileList());
+ string srcpkg = rec.SourcePkg().empty() ? Pkg.Name() : rec.SourcePkg();
+ return _error->Error("changelog for this version is not (yet) available; try https://launchpad.net/ubuntu/+source/%s/+changelog", srcpkg.c_str());
}
/*}}}*/
// DisplayFileInPager - Display File with pager /*{{{*/