]> git.tdb.fi Git - builder.git/blob - source/target.cpp
481d2f4a68dd460a6f3c0a8222af58be349208c9
[builder.git] / source / target.cpp
1 #include "builder.h"
2 #include "target.h"
3
4 using namespace std;
5
6 Target *TargetRef::get_target()
7 {
8         if(!target)
9                 target=builder.get_target(name);
10         return target;
11 }
12
13 Target *Target::get_buildable_target()
14 {
15         if(rebuild && ready_for_build && !building)
16                 return this;
17
18         for(list<Target *>::iterator i=depends.begin(); i!=depends.end(); ++i)
19         {
20                 Target *tgt=(*i)->get_buildable_target();
21                 if(tgt)
22                         return tgt;
23         }
24
25         return 0;
26 }
27
28 void Target::add_depend(Target *dep)
29 {
30         depends.push_back(dep);
31         dep->rdepends.push_back(this);
32 }
33
34 Target::Target(Builder &b, const Package *p, const string &n):
35         builder(b),
36         package(p),
37         name(n),
38         building(false),
39         rebuild(false),
40         ready_for_build(false)
41 { }
42
43 void Target::mark_rebuild(const std::string &reason)
44 {
45         rebuild=true;
46         rebuild_reason=reason;
47 }