]> git.tdb.fi Git - builder.git/blobdiff - source/sourcepackage.h
Split Component into several subclasses
[builder.git] / source / sourcepackage.h
index 3d868631871591d88e2f511007c3d15c06c60202..66296001e44229265753f3c52056cef6a2652b02 100644 (file)
@@ -14,6 +14,7 @@
 class Builder;
 class BuildType;
 class FileTarget;
+class TarballComponent;
 
 /**
 A package that can be built by Builder.
@@ -33,8 +34,10 @@ public:
                void init(const Config::InputOptions *);
                virtual void finish();
                void feature(const std::string &, const std::string &);
-               template<Component::Type>
+               template<typename C>
                void component(const std::string &);
+               template<typename C, typename A, A>
+               void component_arg(const std::string &);
                void build_info();
                void generate(const std::string &);
                void if_feature(const std::string &);
@@ -44,7 +47,7 @@ public:
                void version(const std::string &);
        };
 
-       typedef std::list<Component> ComponentList;
+       typedef std::list<Component *> ComponentList;
 
 private:
        typedef std::list<Feature> FeatureList;
@@ -60,12 +63,13 @@ private:
        FeatureList features;
        BuildInfo build_info;
        ComponentList components;
-       Component *source_tarball;
+       TarballComponent *source_tarball;
        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; }
@@ -77,7 +81,7 @@ public:
        Msp::FS::Path get_output_directory() const;
 
        const Toolchain &get_toolchain() const { return local_tools; }
-       const ComponentList &get_components() const { return components; }
+       const Component &get_component(const std::string &) const;
        const Config &get_config() const { return config; }
        bool match_feature(const std::string &, const std::string *) const;
        void set_build_type(const BuildType &);