X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fpackagemanager.cpp;h=93fbbc9c0ed204b56b11fea1dde7a9f33dae9099;hb=7606161ee4a6fd13c2f5ddca413ba3582df66f03;hp=1a481fb17925a86bf03a6a47b0871fa39ca6e953;hpb=16a068a97326d550aa52ba76beac72d1e9eb2461;p=builder.git diff --git a/source/packagemanager.cpp b/source/packagemanager.cpp index 1a481fb..93fbbc9 100644 --- a/source/packagemanager.cpp +++ b/source/packagemanager.cpp @@ -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 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)