-#ifndef SOURCEPACKAGE_H_
-#define SOURCEPACKAGE_H_
-
-#include <stdexcept>
-#include <string>
-#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 SourceArchiveComponent;
-
-/**
-A package that can be built by Builder.
-*/
-class SourcePackage: public Package
-{
-public:
- class Loader: public Msp::DataFile::DerivedObjectLoader<SourcePackage, Package::Loader>, public FeatureConditional
- {
- private:
- const Config::InputOptions *options;
-
- public:
- Loader(SourcePackage &, const Config::InputOptions *);
- private:
- void finish() override;
-
- void feature(const std::string &, const std::string &);
- template<typename C>
- void component(const std::string &);
- template<typename C, typename A>
- void component_arg(A, const std::string &);
- void build_info();
- void generate(const std::string &);
- void interface_version(const std::string &);
- void source_archive();
- void tarball(const std::string &);
- void version(const std::string &);
- };
-
-private:
- std::string version;
- std::string interface_version;
- std::string description;
-
- FileTarget *build_file;
- Msp::FS::Path source_dir;
- const BuildType *build_type;
- Toolchain local_tools;
- std::vector<Feature> features;
- BuildInfo build_info;
- std::vector<Component *> 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; }
- 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 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 std::string *) const;
- void set_build_type(const BuildType &);
- const BuildInfo &get_build_info() const { return build_info; }
-private:
- void do_prepare() override;
-
-public:
- Cache &get_cache() const { return cache; }
-private:
- void save_caches() override;
-};
-
-#endif