]> 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 5218592ff9d0a0743957b17bf24e70fbe8cf2315..9327f17c4eccc619cfa9e1b2dd5226d93c8ed701 100644 (file)
@@ -1,13 +1,7 @@
-/* $Id$
-
-This file is part of builder
-Copyright © 2007-2009  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef SOURCEPACKAGE_H_
 #define SOURCEPACKAGE_H_
 
+#include <stdexcept>
 #include <string>
 #include "buildinfo.h"
 #include "component.h"
@@ -18,6 +12,14 @@ Distributed under the LGPL
 #include "package.h"
 
 class Builder;
+class BuildType;
+
+class bad_expansion: public std::runtime_error
+{
+public:
+       bad_expansion(const std::string &w): std::runtime_error(w) { }
+       virtual ~bad_expansion() throw() { }
+};
 
 /**
 A package that can be built by Builder.
@@ -25,26 +27,26 @@ A package that can be built by Builder.
 class SourcePackage: public Package
 {
 public:
-       enum InstallFlags
+       class Loader: public Msp::DataFile::DerivedObjectLoader<SourcePackage, Package>
        {
-               INCLUDE = 1,
-               BIN = 2,
-               LIB = 4,
-               DATA = 8
-       };
+       private:
+               const Config::InputOptions *options;
+               std::map<std::string, std::string> install_map;
 
-       class Loader: public Package::Loader
-       {
        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>
                void component(const std::string &);
                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 &);
        };
@@ -54,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; }
@@ -71,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:
@@ -91,6 +87,10 @@ private:
        /** Fills in build info based on configuration.  All required packages must be
        configured when this is called. */
        virtual void create_build_info();
+
+       virtual void create_targets();
+
+       virtual void save_caches();
 };
 
 #endif