handle Dir::Bin::Solvers as a list of directories and find the
authorDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 2 May 2011 11:22:14 +0000 (13:22 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Mon, 2 May 2011 11:22:14 +0000 (13:22 +0200)
solver in this list of directories

apt-pkg/algorithms.cc
apt-pkg/init.cc

index bbe315e..e40f741 100644 (file)
@@ -743,10 +743,18 @@ bool pkgProblemResolver::Resolve(bool BrokenFix)
 
    if (solver != "internal")
    {
-//       std::string const file = _config->FindDir("Dir::Bin::Solvers") + solver;
-      std::string const file = solver;
-      if (RealFileExists(file.c_str()) == false)
-        return _error->Error("Can't call external solver '%s' as it is not available: %s", solver.c_str(), file.c_str());
+      std::vector<std::string> const solverDirs = _config->FindVector("Dir::Bin::Solvers");
+      std::string file;
+      for (std::vector<std::string>::const_iterator dir = solverDirs.begin();
+          dir != solverDirs.end(); ++dir) {
+        file = flCombine(*dir, solver);
+        if (RealFileExists(file.c_str()) == true)
+           break;
+        file.clear();
+      }
+
+      if (file.empty() == true)
+        return _error->Error("Can't call external solver '%s' as it is not in a configured directory!", solver.c_str());
       int external[4] = {-1, -1, -1, -1};
       if (pipe(external) != 0 || pipe(external + 2) != 0)
         return _error->Errno("Resolve", "Can't create needed IPC pipes for EDSP");
index a30f278..aff585e 100644 (file)
@@ -72,7 +72,9 @@ bool pkgInitConfig(Configuration &Cnf)
    Cnf.Set("Dir::Etc::preferencesparts","preferences.d");
    Cnf.Set("Dir::Etc::trusted", "trusted.gpg");
    Cnf.Set("Dir::Etc::trustedparts","trusted.gpg.d");
+
    Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods");
+   Cnf.Set("Dir::Bin::solvers::","/usr/lib/apt/solvers");
    Cnf.Set("Dir::Media::MountPath","/media/apt");
 
    // State