X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fsourcepackage.h;h=8be8ada63d654f68a963feb55cdec9f8c7544d77;hb=d1f9551e05c9d341149eb490e05b1465d3d6b711;hp=1e0e5f9cde5b76cff7a5c282e195e9e2dba879fb;hpb=1496723307ed47b60d3116623ba383e85b50efef;p=builder.git diff --git a/source/sourcepackage.h b/source/sourcepackage.h index 1e0e5f9..8be8ada 100644 --- a/source/sourcepackage.h +++ b/source/sourcepackage.h @@ -6,20 +6,16 @@ #include "buildinfo.h" #include "cache.h" #include "component.h" +#include "conditionalloader.h" #include "config.h" #include "feature.h" #include "package.h" +#include "toolchain.h" class Builder; class BuildType; class FileTarget; - -class bad_expansion: public std::runtime_error -{ -public: - bad_expansion(const std::string &w): std::runtime_error(w) { } - virtual ~bad_expansion() throw() { } -}; +class SourceArchiveComponent; /** A package that can be built by Builder. @@ -27,49 +23,48 @@ A package that can be built by Builder. class SourcePackage: public Package { public: - class Loader: public Msp::DataFile::DerivedObjectLoader + class Loader: public Msp::DataFile::DerivedObjectLoader, public FeatureConditional { private: const Config::InputOptions *options; public: - Loader(SourcePackage &); - Loader(SourcePackage &, const Config::InputOptions &); + Loader(SourcePackage &, const Config::InputOptions *); private: - void init(const Config::InputOptions *); - virtual void finish(); + void finish() override; + void feature(const std::string &, const std::string &); - template + template void component(const std::string &); + template + void component_arg(A, const std::string &); void build_info(); - void if_feature(const std::string &); + void generate(const std::string &); void interface_version(const std::string &); - void source_tarball(); + void source_archive(); void tarball(const std::string &); void version(const std::string &); }; - typedef std::list ComponentList; - private: - typedef std::list FeatureList; - std::string version; std::string interface_version; std::string description; FileTarget *build_file; Msp::FS::Path source_dir; - const BuildType *build_type; - FeatureList features; + const BuildType *build_type = 0; + Toolchain local_tools; + std::vector features; BuildInfo build_info; - ComponentList components; - Component *source_tarball; + std::vector components; + SourceArchiveComponent *source_archive; Config config; mutable Cache cache; public: SourcePackage(Builder &, const std::string &, const Msp::FS::Path &); + ~SourcePackage(); const std::string &get_version() const { return version; } const std::string &get_interface_version() const { return interface_version; } @@ -80,18 +75,19 @@ public: Msp::FS::Path get_temp_directory() const; Msp::FS::Path get_output_directory() const; - const ComponentList &get_components() const { return components; } + const Toolchain &get_toolchain() const { return local_tools; } + const Component &get_component(const std::string &) const; const Config &get_config() const { return config; } - bool match_feature(const std::string &) const; + bool match_feature(const std::string &, const std::string *) const; void set_build_type(const BuildType &); const BuildInfo &get_build_info() const { return build_info; } private: - virtual void do_prepare(); + void do_prepare() override; public: Cache &get_cache() const { return cache; } private: - virtual void save_caches(); + void save_caches() override; }; #endif