#ifndef PACKAGEMANAGER_H_
#define PACKAGEMANAGER_H_
-#include <list>
#include <map>
+#include <set>
#include <string>
+#include <vector>
#include <msp/fs/path.h>
class Builder;
*/
class PackageManager
{
-public:
- typedef std::map<std::string, Package *> PackageMap;
-
private:
- typedef std::list<Msp::FS::Path> SearchPath;
-
Builder &builder;
- SearchPath pkg_path;
- SearchPath pkg_dirs;
- SearchPath binpkg_path;
- SearchPath binpkg_files;
- bool no_externals;
- PackageMap packages;
- bool env_set;
+ std::vector<Msp::FS::Path> pkg_path;
+ std::vector<Msp::FS::Path> pkg_dirs;
+ std::vector<Msp::FS::Path> binpkg_path;
+ std::vector<Msp::FS::Path> binpkg_files;
+ bool no_externals = false;
+ std::map<std::string, Package *> packages;
+ Package *main_pkg = 0;
+ std::set<std::string> not_found;
+ bool env_set = false;
public:
- PackageManager(Builder &);
+ PackageManager(Builder &b): builder(b) { }
~PackageManager();
/// Adds a location to look for source packages from.
void add_package(Package *);
/** Returns a package from the cache. */
- Package *get_package(const std::string &);
+ Package *get_package(const std::string &) const;
- const PackageMap &get_packages() const { return packages; }
+ /** Returns the package that was added first. This should be considered
+ the primary build target. */
+ Package &get_main_package() const;
+
+ const std::map<std::string, Package *> &get_packages() const { return packages; }
/** Locates a package and loads it if necessary. */
Package *find_package(const std::string &);
/** Determines the file containing a binary package. The file is expected
to be named after the package. */
Msp::FS::Path get_binary_package_file(const std::string &);
+
+public:
+ void save_all_caches() const;
};
#endif