]> git.tdb.fi Git - builder.git/blob - source/filetarget.h
Inline simple constructors
[builder.git] / source / filetarget.h
1 #ifndef FILETARGET_H_
2 #define FILETARGET_H_
3
4 #include <msp/fs/path.h>
5 #include "target.h"
6
7 /**
8 An intermediate base class for targets that represent files.  Almost all target
9 classes are derived from this.
10 */
11 class FileTarget: public Target
12 {
13 protected:
14         Msp::FS::Path path;
15         Msp::Time::TimeStamp mtime;
16         unsigned size = 0;
17         Msp::FS::Path install_location;
18         std::string install_filename;
19         bool nested_build_sig = false;
20         bool arch_in_build_sig = false;
21
22         FileTarget(Builder &b, const Msp::FS::Path &a): FileTarget(b, 0, a) { }
23         FileTarget(Builder &b, const SourcePackage &p, const Msp::FS::Path &a): FileTarget(b, &p, a) { }
24 private:
25         FileTarget(Builder &, const SourcePackage *, const Msp::FS::Path &);
26         void stat();
27         static std::string generate_name(Builder &, const SourcePackage *, const Msp::FS::Path &);
28
29 public:
30         const Msp::FS::Path &get_path() const { return path; }
31         const Msp::Time::TimeStamp &get_mtime() const { return mtime; }
32         unsigned get_size() const { return size; }
33
34         bool is_installable() const { return !install_location.empty(); }
35         const Msp::FS::Path &get_install_location() const { return install_location; }
36         const std::string &get_install_filename() const { return install_filename; }
37
38         /// Changes the mtime of the target to the current time.
39         void touch();
40
41 protected:
42         void check_rebuild() override;
43
44         virtual std::string create_build_signature() const;
45
46         void build(Task &) override;
47
48         void build_finished(bool) override;
49
50 public:
51         void clean() override;
52 };
53
54 #endif