]> git.tdb.fi Git - builder.git/blob - source/component.h
Drop some deprecated datafile statements from Component
[builder.git] / source / component.h
1 #ifndef COMPONENT_H_
2 #define COMPONENT_H_
3
4 #include <string>
5 #include <msp/datafile/loader.h>
6 #include <msp/fs/path.h>
7 #include "buildinfo.h"
8 #include "misc.h"
9 #include "package.h"
10
11 class SourcePackage;
12
13 /**
14 Components specify things to be built.  Each component may build one binary (it
15 may also build none), as well as install a bunch of headers.  Components inherit
16 dependencies and build info from the package they belong to, and may also add
17 their own.
18 */
19 class Component
20 {
21 public:
22         class Loader: public Msp::DataFile::Loader
23         {
24         private:
25                 Component &comp;
26                 std::string inst_hdr;
27
28         public:
29                 Loader(Component &);
30                 Component &get_object() { return comp; }
31         private:
32                 virtual void finish();
33                 void source(const std::string &);
34                 void require(const std::string &);
35                 void build_info();
36         };
37
38         enum Type
39         {
40                 HEADERS,
41                 LIBRARY,
42                 PROGRAM,
43                 MODULE,
44                 DATAFILE,
45                 INSTALL,
46                 TARBALL
47         };
48
49 protected:
50         SourcePackage &pkg;
51         Type type;
52         std::string name;
53         StringList sources;
54         bool install;
55         BuildInfo build_info;
56         PackageList requires;
57         bool deflt;
58
59 public:
60         Component(SourcePackage &, Type, const std::string &);
61         const SourcePackage &get_package() const { return pkg; }
62         Type get_type() const { return type; }
63         const std::string &get_name() const { return name; }
64         const StringList &get_sources() const { return sources; }
65         const BuildInfo &get_build_info() const { return build_info; }
66         bool get_install() const { return install; }
67         const PackageList &get_requires() const { return requires; }
68         bool is_default() const { return deflt; }
69
70         void configure(const StringMap &, unsigned);
71
72         /** Prepares the build information for building.  Pulls build info from the
73         parent and dependency packages, and adds any component-specific flags. */
74         void create_build_info();
75
76         void create_targets() const;
77
78 protected:
79         /** Returns a list of all source files for the component. */
80         PathList collect_source_files() const;
81 };
82
83 typedef std::list<Component> ComponentList;
84
85 #endif