]> git.tdb.fi Git - builder.git/blobdiff - source/packagemanager.cpp
Adapt to changes in mspcore
[builder.git] / source / packagemanager.cpp
index f840ea22d4edb929624097f3c47fad0a896bf1ae..35c752e8e4e056d979e1b55d536f94e66219ea04 100644 (file)
@@ -5,7 +5,7 @@
 #include <msp/io/print.h>
 #include <msp/strings/format.h>
 #include <msp/strings/utils.h>
-#include <msp/time/units.h>
+#include <msp/time/timedelta.h>
 #include <msp/time/utils.h>
 #include "binarypackage.h"
 #include "builder.h"
@@ -109,14 +109,15 @@ Package *PackageManager::find_package(const string &name)
        {
                // 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;
        }
@@ -124,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();
@@ -151,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);
@@ -163,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)
@@ -184,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<string> files = list_files(*i);
+                       vector<string> files = list_files(*i);
                        unsigned count = 0;
-                       for(list<string>::const_iterator j=files.begin(); j!=files.end(); ++j)
+                       for(vector<string>::const_iterator j=files.begin(); j!=files.end(); ++j)
                        {
                                FS::Path full = *i / *j;
                                if(FS::exists(full/"Build"))
@@ -226,8 +235,8 @@ FS::Path PackageManager::get_binary_package_file(const string &name)
                for(list<FS::Path>::const_iterator i=binpkg_path.begin(); i!=binpkg_path.end(); ++i)
                {
                        builder.get_logger().log("files", format("Traversing %s", *i));
-                       list<string> files = list_filtered(*i, "\\.bpk$");
-                       for(list<string>::const_iterator j=files.begin(); j!=files.end(); ++j)
+                       vector<string> files = list_filtered(*i, "\\.bpk$");
+                       for(vector<string>::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));
                }
@@ -244,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();
+}