]> git.tdb.fi Git - builder.git/blob - source/package.h
743a962f52e2750c429c6bd93299208729dde8e0
[builder.git] / source / package.h
1 #ifndef PACKAGE_H_
2 #define PACKAGE_H_
3
4 #include <list>
5 #include <string>
6 #include <msp/parser/loader.h>
7 #include "buildinfo.h"
8 #include "component.h"
9 #include "config.h"
10 #include "packageref.h"
11
12 class Builder;
13
14 class Package
15 {
16 public:
17         class Loader: public Msp::Parser::Loader
18         {
19         public:
20                 Loader(Package &);
21                 Package &get_object() { return pkg; }
22                 ~Loader();
23         private:
24                 Package &pkg;
25                 
26                 void require(const std::string &);
27                 void program(const std::string &);
28                 void library(const std::string &);
29                 void headers(const std::string &);
30                 void build_info();
31         };
32
33         Package(Builder &, const std::string &, const Msp::Path::Path &);
34         void                set_path(const Msp::Path::Path &);
35         const std::string   &get_name() const           { return name; }
36         const Msp::Path::Path &get_source() const       { return source; }
37         const ComponentList &get_components() const     { return components; }
38         bool                get_buildable() const       { return buildable; }
39         const Config        &get_config() const         { return config; }
40         const PkgRefList    &get_requires() const       { return requires; }
41         const BuildInfo     &get_build_info() const     { return build_info; }
42         const BuildInfo     &get_exported_binfo() const { return export_binfo; }
43         Builder             &get_builder() const        { return builder; }
44         bool                get_need_path() const       { return need_path; }
45         void                resolve_refs();
46         void                create_build_info();
47         void                process_options(const RawOptionMap &);
48
49         static Package *create(Builder &, const std::string &);
50 private:
51         enum InstallFlags
52         {
53                 INCLUDE=1,
54                 BIN=2,
55                 LIB=4,
56                 DATA=8
57         };
58         
59         Builder       &builder;
60         
61         std::string   name;
62         std::string   version;
63         std::string   description;
64         
65         bool          buildable;
66         Msp::Path::Path source;
67         PkgRefList    requires;
68         BuildInfo     build_info;
69         BuildInfo     export_binfo;
70         ComponentList components;
71         Config        config;
72         bool          build_info_ready;
73
74         bool          need_path;
75         Msp::Path::Path path;
76
77         Package(Builder &, const std::string &, const std::vector<std::string> &);
78         void    init_buildable();
79         unsigned get_install_flags();
80 };
81
82 #endif