1 #ifndef PACKAGEMANAGER_H_
2 #define PACKAGEMANAGER_H_
7 #include <msp/fs/path.h>
13 Keeps track of packages. Also responsible for locating previously unknown
19 typedef std::map<std::string, Package *> PackageMap;
22 typedef std::list<Msp::FS::Path> SearchPath;
27 SearchPath binpkg_path;
28 SearchPath binpkg_files;
31 std::set<std::string> not_found;
35 PackageManager(Builder &);
38 /// Adds a location to look for source packages from.
39 void append_package_path(const Msp::FS::Path &);
41 /// Adds a location to look for binary packages from.
42 void append_binary_package_path(const Msp::FS::Path &);
44 /** Prevent creation of source packages. */
45 void set_no_externals(bool);
47 /** Adds a package to the manager. Called from Package constructor. */
48 void add_package(Package *);
50 /** Returns a package from the cache. */
51 Package *get_package(const std::string &);
53 const PackageMap &get_packages() const { return packages; }
55 /** Locates a package and loads it if necessary. */
56 Package *find_package(const std::string &);
59 std::string run_pkgconfig(const std::string &, const std::string &);
61 /** Determines the source directory of a package. Pkg-config is consulted
62 first, and if it fails, the package path is searched for matches. The
63 package is expected to be located in a directory named after itself. */
64 Msp::FS::Path get_package_location(const std::string &);
66 /** Determines the file containing a binary package. The file is expected
67 to be named after the package. */
68 Msp::FS::Path get_binary_package_file(const std::string &);