-#ifndef SOURCEPACKAGE_H_
-#define SOURCEPACKAGE_H_
-
-#include <stdexcept>
-#include <string>
-#include "buildinfo.h"
-#include "cache.h"
-#include "component.h"
-#include "config.h"
-#include "feature.h"
-#include "package.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() { }
-};
-
-/**
-A package that can be built by Builder.
-*/
-class SourcePackage: public Package
-{
-public:
- class Loader: public Msp::DataFile::DerivedObjectLoader<SourcePackage, Package::Loader>
- {
- private:
- const Config::InputOptions *options;
-
- public:
- 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 build_info();
- void if_feature(const std::string &);
- void interface_version(const std::string &);
- void source_tarball();
- void tarball(const std::string &);
- void version(const std::string &);
- };
-
- typedef std::list<Component> ComponentList;
-
-private:
- typedef std::list<Feature> 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;
- BuildInfo build_info;
- ComponentList components;
- Component *source_tarball;
- Config config;
- mutable Cache cache;
-
-public:
- SourcePackage(Builder &, const std::string &, const Msp::FS::Path &);
-
- const std::string &get_version() const { return version; }
- const std::string &get_interface_version() const { return interface_version; }
- const std::string &get_description() const { return description; }
-
- FileTarget &get_build_file() const { return *build_file; }
- const Msp::FS::Path &get_source_directory() const { return source_dir; }
- Msp::FS::Path get_temp_directory() const;
- Msp::FS::Path get_output_directory() const;
-
- const ComponentList &get_components() const { return components; }
- const Config &get_config() const { return config; }
- bool match_feature(const std::string &) const;
- void set_build_type(const BuildType &);
- const BuildInfo &get_build_info() const { return build_info; }
-private:
- virtual void do_prepare();
-
-public:
- Cache &get_cache() const { return cache; }
-private:
- virtual void save_caches();
-};
-
-#endif