X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fpackagemanager.h;h=d5cfb52e51d5b8493e4adc9d2caf7e4e0319b622;hb=fefa7d1e8ac40136b690e305ce9594af95c678b8;hp=96c3dcacdb1809bc0ab4ae8040c9a40ccd5d8ac5;hpb=1d687970cc35e54c3335f4aa2fdef23424fe0a06;p=builder.git diff --git a/source/packagemanager.h b/source/packagemanager.h index 96c3dca..d5cfb52 100644 --- a/source/packagemanager.h +++ b/source/packagemanager.h @@ -1,9 +1,10 @@ #ifndef PACKAGEMANAGER_H_ #define PACKAGEMANAGER_H_ -#include #include +#include #include +#include #include class Builder; @@ -15,41 +16,60 @@ packages by name. */ class PackageManager { -public: - typedef std::map PackageMap; - private: - typedef std::list SearchPath; - Builder &builder; - SearchPath pkg_path; - SearchPath pkg_dirs; + std::vector pkg_path; + std::vector pkg_dirs; + std::vector binpkg_path; + std::vector binpkg_files; bool no_externals; - PackageMap packages; + std::map packages; + Package *main_pkg; + std::set not_found; + bool env_set; 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); /** Adds a package to the manager. Called from Package constructor. */ 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 &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