]> git.tdb.fi Git - builder.git/blobdiff - source/sourcepackage.h
Evaluate conditions at load time to allow more flexibility
[builder.git] / source / sourcepackage.h
index 8ba3eb3c899fa4febd920ba9b18bcc2e6920e535..9327f17c4eccc619cfa9e1b2dd5226d93c8ed701 100644 (file)
@@ -12,6 +12,7 @@
 #include "package.h"
 
 class Builder;
+class BuildType;
 
 class bad_expansion: public std::runtime_error
 {
@@ -26,23 +27,17 @@ A package that can be built by Builder.
 class SourcePackage: public Package
 {
 public:
-       enum InstallFlags
-       {
-               INCLUDE = 1,
-               BIN = 2,
-               LIB = 4,
-               DATA = 8
-       };
-
-       class Loader: public Package::Loader
+       class Loader: public Msp::DataFile::DerivedObjectLoader<SourcePackage, Package>
        {
        private:
+               const Config::InputOptions *options;
                std::map<std::string, std::string> install_map;
 
        public:
-               Loader(Package &);
-               SourcePackage &get_object() { return static_cast<SourcePackage &>(pkg); }
+               Loader(SourcePackage &);
+               Loader(SourcePackage &, const Config::InputOptions &);
        private:
+               void init(const Config::InputOptions *);
                virtual void finish();
                void feature(const std::string &, const std::string &);
                template<Component::Type>
@@ -50,6 +45,8 @@ public:
                void condition(const std::string &);
                void build_info();
                void headers(const std::string &);
+               void if_arch(const std::string &);
+               void if_feature(const std::string &);
                void tarball(const std::string &);
                void tar_file(const std::string &);
        };
@@ -59,16 +56,15 @@ private:
        std::string description;
 
        Msp::FS::Path source;
+       const BuildType *build_type;
        FeatureList features;
        BuildInfo build_info;
-       ConditionList conditions;
        ComponentList components;
        Config config;
        mutable DependencyCache deps_cache;
 
 public:
        SourcePackage(Builder &, const std::string &, const Msp::FS::Path &);
-       const std::string &get_name() const { return name; }
        const std::string &get_version() const { return version; }
        const std::string &get_description() const { return description; }
        const Msp::FS::Path &get_source() const { return source; }
@@ -76,15 +72,10 @@ public:
        Msp::FS::Path get_out_dir() const;
        const ComponentList &get_components() const { return components; }
        const Config &get_config() const { return config; }
+       void set_build_type(const BuildType &);
        const BuildInfo &get_build_info() const { return build_info; }
-       const BuildInfo &get_exported_binfo() const { return export_binfo; }
        Builder &get_builder() const { return builder; }
 
-       /** Returns a bitmask indicating which kinds of things the components of
-       this package install. */
-       unsigned get_install_flags();
-
-       LibMode get_library_mode() const;
        DependencyCache &get_deps_cache() const { return deps_cache; }
        std::string expand_string(const std::string &) const;
 private:
@@ -98,6 +89,8 @@ private:
        virtual void create_build_info();
 
        virtual void create_targets();
+
+       virtual void save_caches();
 };
 
 #endif