]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-get.cc
Thai (Theppitak Karoonboonyanan). Closes: #691613
[apt.git] / cmdline / apt-get.cc
index 870c77280957dd85075844d49194b4dc312f95d2..4e307b65737ef54bfd58aeb253b1650ebbb07b79 100644 (file)
@@ -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();
@@ -2362,6 +2362,8 @@ bool DoDownload(CommandLine &CmdL)
 
    pkgRecords Recs(Cache);
    pkgSourceList *SrcList = Cache.GetSourceList();
+   bool gotAll = true;
+
    for (APT::VersionList::const_iterator Ver = verset.begin(); 
         Ver != verset.end(); 
         ++Ver) 
@@ -2372,11 +2374,19 @@ bool DoDownload(CommandLine &CmdL)
       pkgRecords::Parser &rec=Recs.Lookup(Ver.FileList());
       pkgCache::VerFileIterator Vf = Ver.FileList();
       if (Vf.end() == true)
-         return _error->Error("Can not find VerFile");
+      {
+        _error->Error("Can not find VerFile for %s in version %s", Pkg.FullName().c_str(), Ver.VerStr());
+        gotAll = false;
+        continue;
+      }
       pkgCache::PkgFileIterator F = Vf.File();
       pkgIndexFile *index;
       if(SrcList->FindIndex(F, index) == false)
-         return _error->Error("FindIndex failed");
+      {
+        _error->Error(_("Can't find a source to download version '%s' of '%s'"), Ver.VerStr(), Pkg.FullName().c_str());
+        gotAll = false;
+        continue;
+      }
       string uri = index->ArchiveURI(rec.FileName());
       strprintf(descr, _("Downloading %s %s"), Pkg.Name(), Ver.VerStr());
       // get the most appropriate hash
@@ -2392,6 +2402,8 @@ bool DoDownload(CommandLine &CmdL)
       // get the file
       new pkgAcqFile(&Fetcher, uri, hash.toStr(), (*Ver)->Size, descr, Pkg.Name(), ".");
    }
+   if (gotAll == false)
+      return false;
 
    // Just print out the uris and exit if the --print-uris flag was used
    if (_config->FindB("APT::Get::Print-URIs") == true)
@@ -2883,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 || \
@@ -2906,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);
                  }
@@ -2931,6 +2947,8 @@ bool DoBuildDep(CommandLine &CmdL)
                        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)
                  {
@@ -2938,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)
                  {
-                    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)
@@ -2960,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)
@@ -2992,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;
@@ -3075,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;