]> git.tdb.fi Git - builder.git/blobdiff - source/packagemanager.cpp
Move some more functionality into BuildGraph
[builder.git] / source / packagemanager.cpp
index 1a481fb17925a86bf03a6a47b0871fa39ca6e953..93fbbc9c0ed204b56b11fea1dde7a9f33dae9099 100644 (file)
@@ -19,6 +19,7 @@ using namespace Msp;
 PackageManager::PackageManager(Builder &b):
        builder(b),
        no_externals(false),
+       main_pkg(0),
        env_set(false)
 { }
 
@@ -54,14 +55,25 @@ void PackageManager::add_package(Package *pkg)
                        throw logic_error("Package is already managed");
        }
 
+       if(packages.empty())
+               main_pkg = pkg;
+
        packages.insert(PackageMap::value_type(pkg->get_name(), pkg));
 }
 
+Package &PackageManager::get_main_package() const
+{
+       if(!main_pkg)
+               throw logic_error("No packages");
+       return *main_pkg;
+}
+
 Package *PackageManager::find_package(const string &name)
 {
-       PackageMap::iterator i = packages.find(format("%s/%s", name, builder.get_current_arch().get_system()));
-       if(i==packages.end())
-               i = packages.find(name);
+       if(not_found.count(name))
+               return 0;
+
+       PackageMap::iterator i = packages.find(name);
        if(i!=packages.end())
                return i->second;
 
@@ -86,22 +98,21 @@ Package *PackageManager::find_package(const string &name)
                        return i->second;
        }
 
-       Package *pkg = 0;
        try
        {
                // Package source not found - create a binary package
                string flags_str = run_pkgconfig(name, "flags");
                vector<string> flags = split(flags_str);
-               pkg = BinaryPackage::from_flags(builder, name, flags);
+               Package *pkg = BinaryPackage::from_flags(builder, name, flags);
+               packages.insert(PackageMap::value_type(name, pkg));
+               return pkg;
        }
        catch(...)
        {
                builder.problem(name, "not found");
+               not_found.insert(name);
+               return 0;
        }
-
-       packages.insert(PackageMap::value_type(name, pkg));
-
-       return pkg;
 }
 
 string PackageManager::run_pkgconfig(const string &pkg, const string &what)