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