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)
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)
{
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;
}
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<string> 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;
}
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);
return FS::Path();
}
+
+void PackageManager::save_all_caches() const
+{
+ for(PackageMap::const_iterator i=packages.begin(); i!=packages.end(); ++i)
+ i->second->save_caches();
+}