X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpackagemanager.cpp;h=f840ea22d4edb929624097f3c47fad0a896bf1ae;hb=65ba6a595dd4a1d74675abcfdf96307062dc43eb;hp=240bf60caafd888ad9b56845331235c8849dce62;hpb=7c61a1e64153bac91431e1a72d946208dd61eb30;p=builder.git diff --git a/source/packagemanager.cpp b/source/packagemanager.cpp index 240bf60..f840ea2 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,17 +55,35 @@ 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_package(const string &name) const +{ + PackageMap::const_iterator i = packages.find(name); + if(i!=packages.end()) + return i->second; + + return 0; +} + +Package &PackageManager::get_main_package() const +{ + if(!main_pkg) + throw logic_error("No packages"); + return *main_pkg; +} + Package *PackageManager::find_package(const string &name) { if(not_found.count(name)) return 0; - PackageMap::iterator i = packages.find(name); - if(i!=packages.end()) - return i->second; + if(Package *pkg = get_package(name)) + return pkg; if(!no_externals) { @@ -72,7 +91,7 @@ Package *PackageManager::find_package(const string &name) if(!path.empty()) { builder.load_build_file(path/"Build"); - i = packages.find(name); + PackageMap::iterator i = packages.find(name); if(i!=packages.end()) return i->second; } @@ -82,9 +101,8 @@ Package *PackageManager::find_package(const string &name) if(!path.empty()) { builder.load_build_file(path); - i = packages.find(name); - if(i!=packages.end()) - return i->second; + if(Package *pkg = get_package(name)) + return pkg; } try