]> git.tdb.fi Git - builder.git/blobdiff - source/packagemanager.h
Use default member initializers and constructor delegation
[builder.git] / source / packagemanager.h
index 3484687e6191bf6a3c93bc72221f2ccac9b4c113..22f1eacfbbe6eaf3eabce855ed69aa2350dc4ceb 100644 (file)
@@ -1,9 +1,10 @@
 #ifndef PACKAGEMANAGER_H_
 #define PACKAGEMANAGER_H_
 
-#include <list>
 #include <map>
+#include <set>
 #include <string>
+#include <vector>
 #include <msp/fs/path.h>
 
 class Builder;
@@ -15,22 +16,28 @@ packages by name.
 */
 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;
-       bool no_externals;
-       PackageMap packages;
+       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();
 
+       /// Adds a location to look for source packages from.
+       void append_package_path(const Msp::FS::Path &);
+
+       /// Adds a location to look for binary packages from.
+       void append_binary_package_path(const Msp::FS::Path &);
+
        /** Prevent creation of source packages. */
        void set_no_externals(bool);
 
@@ -38,19 +45,31 @@ public:
        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;
 
-       /** Locates a package and creates it if necessary. */
+       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 &);
 
 private:
        std::string run_pkgconfig(const std::string &, const std::string &);
 
        /** Determines the source directory of a package.  Pkg-config is consulted
-       first, and if it fails, the package path is searched for matches. */
+       first, and if it fails, the package path is searched for matches.  The
+       package is expected to be located in a directory named after itself. */
        Msp::FS::Path get_package_location(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