]> git.tdb.fi Git - builder.git/blob - source/sourcepackage.h
b8750ee393f3d0946818297c58301840edd5f54e
[builder.git] / source / sourcepackage.h
1 /* $Id$
2
3 This file is part of builder
4 Copyright © 2007-2009  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #ifndef SOURCEPACKAGE_H_
9 #define SOURCEPACKAGE_H_
10
11 #include <string>
12 #include "buildinfo.h"
13 #include "component.h"
14 #include "condition.h"
15 #include "config.h"
16 #include "dependencycache.h"
17 #include "feature.h"
18 #include "package.h"
19
20 class Builder;
21
22 /**
23 A package that can be built by Builder.
24 */
25 class SourcePackage: public Package
26 {
27 public:
28         enum InstallFlags
29         {
30                 INCLUDE=1,
31                 BIN=2,
32                 LIB=4,
33                 DATA=8
34         };
35
36         class Loader: public Package::Loader
37         {
38         public:
39                 Loader(Package &);
40                 SourcePackage &get_object() { return static_cast<SourcePackage &>(pkg); }
41         private:
42                 void feature(const std::string &, const std::string &);
43                 void condition(const std::string &);
44                 void program(const std::string &);
45                 void library(const std::string &);
46                 void module(const std::string &);
47                 void headers(const std::string &);
48                 void build_info();
49                 void tar_file(const std::string &);
50         };
51
52 private:
53         std::string version;
54         std::string description;
55
56         Msp::FS::Path source;
57         PackageList base_reqs;
58         FeatureList features;
59         BuildInfo build_info;
60         ConditionList conditions;
61         ComponentList components;
62         Config config;
63         bool conf_done;
64         mutable DependencyCache deps_cache;
65         PathList tar_files;
66
67 public:
68         SourcePackage(Builder &, const std::string &, const Msp::FS::Path &);
69         const std::string &get_name() const { return name; }
70         const std::string &get_version() const { return version; }
71         const std::string &get_description() const { return description; }
72         const Msp::FS::Path &get_source() const { return source; }
73         Msp::FS::Path get_temp_dir() const;
74         Msp::FS::Path get_out_dir() const;
75         const ComponentList &get_components() const { return components; }
76         const Config &get_config() const { return config; }
77         const BuildInfo &get_build_info() const { return build_info; }
78         const BuildInfo &get_exported_binfo() const { return export_binfo; }
79         Builder &get_builder() const { return builder; }
80
81         /** Returns a bitmask indicating which kinds of things the components of
82         this package install. */
83         unsigned get_install_flags();
84
85         LibMode get_library_mode() const;
86         const PathList &get_tar_files() const { return tar_files; }
87         DependencyCache &get_deps_cache() const { return deps_cache; }
88 private:
89         virtual void do_configure(const StringMap &, unsigned);
90
91         /** Initializes configuration options. */
92         void init_config();
93
94         /** Fills in build info based on configuration.  All required packages must be
95         configured when this is called. */
96         virtual void create_build_info();
97 };
98
99 #endif