#include <msp/parser/loader.h>
#include <msp/path/path.h>
#include "buildinfo.h"
+#include "misc.h"
+#include "packageref.h"
class Package;
+/**
+Components specify things to be built. Each component may build one binary (it
+may also build none), as well as install a bunch of headers. Components inherit
+dependencies and build info from the package they belong to, and may also add
+their own.
+*/
class Component
{
public:
+ /// Loads a Component from file. Used from Package::Loader.
class Loader: public Msp::Parser::Loader
{
public:
Component ∁
void source(const std::string &);
+ void require(const std::string &);
+ void build_info();
};
enum Type
const Package &get_package() const { return pkg; }
Type get_type() const { return type; }
const std::string &get_name() const { return name; }
- const Msp::Path::Path &get_source() const { return source; }
+ const PathList &get_sources() const { return sources; }
const BuildInfo &get_build_info() const { return build_info; }
bool get_install() const { return install; }
const std::string &get_install_headers() const { return install_headers; }
+ void resolve_refs();
void create_build_info();
protected:
Package &pkg;
Type type;
std::string name;
- Msp::Path::Path source;
+ PathList sources;
bool install;
std::string install_headers;
BuildInfo build_info;
+ PkgRefList requires;
};
typedef std::list<Component> ComponentList;