]> git.saurik.com Git - apt.git/blobdiff - cmdline/apt-get.cc
Add --arch-only option for apt-get build-dep only only ...
[apt.git] / cmdline / apt-get.cc
index 70e86f21911ded69a2ce2379194de0ffb308c0a6..76945b805c32f9e4f9e8365d816f44e56da1f72f 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: apt-get.cc,v 1.107 2001/05/27 04:45:49 jgg Exp $
+// $Id: apt-get.cc,v 1.111 2001/11/04 17:09:18 tausq Exp $
 /* ######################################################################
    
    apt-get - Cover for dpkg
@@ -88,6 +88,13 @@ class CacheFile : public pkgCacheFile
       
       return true;
    };
+   bool OpenForInstall()
+   {
+      if (_config->FindB("APT::Get::Print-URIs") == true)
+        return Open(false);
+      else
+        return Open(true);
+   }
    CacheFile() : List(0) {};
 };
                                                                        /*}}}*/
@@ -180,30 +187,55 @@ void ShowBroken(ostream &out,CacheFile &Cache,bool Now)
    {
       pkgCache::PkgIterator I(Cache,Cache.List[J]);
       
-      if (Cache[I].InstBroken() == false)
-         continue;
-         
+      if (Now == true)
+      {
+        if (Cache[I].NowBroken() == false)
+           continue;
+      }
+      else
+      {
+        if (Cache[I].InstBroken() == false)
+           continue;
+      }
+      
       // Print out each package and the failed dependencies
       out <<"  " <<  I.Name() << ":";
       unsigned Indent = strlen(I.Name()) + 3;
       bool First = true;
-      if (Cache[I].InstVerIter(Cache).end() == true)
+      pkgCache::VerIterator Ver;
+      
+      if (Now == true)
+        Ver = I.CurrentVer();
+      else
+        Ver = Cache[I].InstVerIter(Cache);
+      
+      if (Ver.end() == true)
       {
-        cout << endl;
+        out << endl;
         continue;
       }
       
-      for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false;)
+      for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false;)
       {
         // Compute a single dependency element (glob or)
         pkgCache::DepIterator Start;
         pkgCache::DepIterator End;
         D.GlobOr(Start,End);
 
-        if (Cache->IsImportantDep(End) == false || 
-            (Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+        if (Cache->IsImportantDep(End) == false)
            continue;
-
+        
+        if (Now == true)
+        {
+           if ((Cache[End] & pkgDepCache::DepGNow) == pkgDepCache::DepGNow)
+              continue;
+        }
+        else
+        {
+           if ((Cache[End] & pkgDepCache::DepGInstall) == pkgDepCache::DepGInstall)
+              continue;
+        }
+        
         bool FirstOr = true;
         while (1)
         {
@@ -236,7 +268,7 @@ void ShowBroken(ostream &out,CacheFile &Cache,bool Now)
               pkgCache::VerIterator Ver = Cache[Targ].InstVerIter(Cache);
               if (Now == true)
                  Ver = Targ.CurrentVer();
-                 
+                   
               if (Ver.end() == false)
               {
                  if (Now == true)
@@ -635,7 +667,8 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask = true,
    
    // Lock the archive directory
    FileFd Lock;
-   if (_config->FindB("Debug::NoLocking",false) == false)
+   if (_config->FindB("Debug::NoLocking",false) == false &&
+       _config->FindB("APT::Get::Print-URIs") == false)
    {
       Lock.Fd(GetLock(_config->FindDir("Dir::Cache::Archives") + "lock"));
       if (_error->PendingError() == true)
@@ -1189,7 +1222,7 @@ bool DoUpdate(CommandLine &CmdL)
 bool DoUpgrade(CommandLine &CmdL)
 {
    CacheFile Cache;
-   if (Cache.Open() == false || Cache.CheckDeps() == false)
+   if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
       return false;
 
    // Do the upgrade
@@ -1208,7 +1241,8 @@ bool DoUpgrade(CommandLine &CmdL)
 bool DoInstall(CommandLine &CmdL)
 {
    CacheFile Cache;
-   if (Cache.Open() == false || Cache.CheckDeps(CmdL.FileSize() != 1) == false)
+   if (Cache.OpenForInstall() == false || 
+       Cache.CheckDeps(CmdL.FileSize() != 1) == false)
       return false;
    
    // Enter the special broken fixing mode if the user specified arguments
@@ -1404,7 +1438,7 @@ bool DoInstall(CommandLine &CmdL)
 bool DoDistUpgrade(CommandLine &CmdL)
 {
    CacheFile Cache;
-   if (Cache.Open() == false || Cache.CheckDeps() == false)
+   if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
       return false;
 
    c0out << _("Calculating Upgrade... ") << flush;
@@ -1426,7 +1460,7 @@ bool DoDistUpgrade(CommandLine &CmdL)
 bool DoDSelectUpgrade(CommandLine &CmdL)
 {
    CacheFile Cache;
-   if (Cache.Open() == false || Cache.CheckDeps() == false)
+   if (Cache.OpenForInstall() == false || Cache.CheckDeps() == false)
       return false;
    
    // Install everything with the install flag set
@@ -1826,7 +1860,7 @@ bool DoBuildDep(CommandLine &CmdL)
             
       // Process the build-dependencies
       vector<pkgSrcRecords::Parser::BuildDepRec> BuildDeps;
-      if (Last->BuildDepends(BuildDeps) == false)
+      if (Last->BuildDepends(BuildDeps, _config->FindB("APT::Get::Arch-Only",false)) == false)
        return _error->Error(_("Unable to get build-dependency information for %s"),Src.c_str());
    
       if (BuildDeps.size() == 0)
@@ -1843,8 +1877,15 @@ bool DoBuildDep(CommandLine &CmdL)
       {
         pkgCache::PkgIterator Pkg = Cache->FindPkg((*D).Package);
         if (Pkg.end() == true)
+         {
+           /* for a build-conflict; ignore unknown packages */
+           if ((*D).Type == pkgSrcRecords::Parser::BuildConflict || 
+               (*D).Type == pkgSrcRecords::Parser::BuildConflictIndep)
+               continue;
+
            return _error->Error(_("%s dependency on %s cannot be satisfied because the package %s cannot be found"),
                                 Last->BuildDepType((*D).Type),Src.c_str(),(*D).Package.c_str());
+         }
         pkgCache::VerIterator IV = (*Cache)[Pkg].InstVerIter(*Cache);
         
         if ((*D).Type == pkgSrcRecords::Parser::BuildConflict || 
@@ -2078,6 +2119,7 @@ int main(int argc,const char *argv[])
       {0,"trivial-only","APT::Get::Trivial-Only",0},
       {0,"remove","APT::Get::Remove",0},
       {0,"only-source","APT::Get::Only-Source",0},
+      {0,"arch-only","APT::Get::Arch-Only",0},
       {'c',"config-file",0,CommandLine::ConfigFile},
       {'o',"option",0,CommandLine::ArbItem},
       {0,0,0,0}};