X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpackagemanager.cpp;h=35c752e8e4e056d979e1b55d536f94e66219ea04;hb=9dd42116ce72f8b2288ab535f89242f87a44337a;hp=93fbbc9c0ed204b56b11fea1dde7a9f33dae9099;hpb=7606161ee4a6fd13c2f5ddca413ba3582df66f03;p=builder.git diff --git a/source/packagemanager.cpp b/source/packagemanager.cpp index 93fbbc9..35c752e 100644 --- a/source/packagemanager.cpp +++ b/source/packagemanager.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include "binarypackage.h" #include "builder.h" @@ -61,6 +61,15 @@ void PackageManager::add_package(Package *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) @@ -73,9 +82,8 @@ 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) { @@ -83,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; } @@ -93,23 +101,23 @@ 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 { // Package source not found - create a binary package string flags_str = run_pkgconfig(name, "flags"); - vector flags = split(flags_str); - Package *pkg = BinaryPackage::from_flags(builder, name, flags); + BinaryPackage::Flags flags = split(flags_str); + flags_str = run_pkgconfig(name, "staticflags"); + BinaryPackage::Flags static_flags = split(flags_str); + Package *pkg = BinaryPackage::from_flags(builder, name, flags, static_flags); packages.insert(PackageMap::value_type(name, pkg)); return pkg; } catch(...) { - builder.problem(name, "not found"); not_found.insert(name); return 0; } @@ -117,6 +125,7 @@ Package *PackageManager::find_package(const string &name) string PackageManager::run_pkgconfig(const string &pkg, const string &what) { +#ifndef _WIN32 if(!env_set) { const FS::Path &prefix = builder.get_prefix(); @@ -144,10 +153,12 @@ string PackageManager::run_pkgconfig(const string &pkg, const string &what) argv.push_back("pkg-config"); if(what=="cflags" || what=="libs") argv.push_back("--"+what); - else if(what=="flags") + else if(what=="flags" || what=="staticflags") { argv.push_back("--cflags"); argv.push_back("--libs"); + if(what=="staticflags") + argv.push_back("--static"); } else argv.push_back("--variable="+what); @@ -156,6 +167,11 @@ string PackageManager::run_pkgconfig(const string &pkg, const string &what) builder.get_logger().log("auxcommands", format("Running %s", join(argv.begin(), argv.end()))); return ExternalTask::run_and_capture_output(argv); +#else + (void)pkg; + (void)what; + return string(); +#endif } FS::Path PackageManager::get_package_location(const string &name) @@ -177,9 +193,9 @@ FS::Path PackageManager::get_package_location(const string &name) for(SearchPath::const_iterator i=pkg_path.begin(); i!=pkg_path.end(); ++i) { builder.get_logger().log("files", format("Traversing %s", *i)); - list files = list_files(*i); + vector files = list_files(*i); unsigned count = 0; - for(list::const_iterator j=files.begin(); j!=files.end(); ++j) + for(vector::const_iterator j=files.begin(); j!=files.end(); ++j) { FS::Path full = *i / *j; if(FS::exists(full/"Build")) @@ -219,8 +235,8 @@ FS::Path PackageManager::get_binary_package_file(const string &name) for(list::const_iterator i=binpkg_path.begin(); i!=binpkg_path.end(); ++i) { builder.get_logger().log("files", format("Traversing %s", *i)); - list files = list_filtered(*i, "\\.bpk$"); - for(list::const_iterator j=files.begin(); j!=files.end(); ++j) + vector files = list_filtered(*i, "\\.bpk$"); + for(vector::const_iterator j=files.begin(); j!=files.end(); ++j) binpkg_files.push_back(*i / *j); builder.get_logger().log("packagemgr", format("%d binary packages found in %s", files.size(), *i)); } @@ -237,3 +253,9 @@ FS::Path PackageManager::get_binary_package_file(const string &name) return FS::Path(); } + +void PackageManager::save_all_caches() const +{ + for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i) + i->second->save_caches(); +}