builder.add_target(this);
}
+void Target::add_depend(Target &dep)
+{
+ if(&dep==this)
+ throw invalid_argument("Target::add_depend");
+ depends.push_back(&dep);
+ if(state>PREPARING)
+ dep.signal_bubble_rebuild.connect(sigc::mem_fun(this, &Target::check_rebuild));
+}
+
Target *Target::get_buildable_target()
{
if(!needs_rebuild())
mark_rebuild("Forced rebuild");
}
-void Target::add_depend(Target &dep)
+void Target::mark_rebuild(const string &reason)
{
- if(&dep==this)
- throw invalid_argument("Target::add_depend");
- depends.push_back(&dep);
- if(state>PREPARING)
- dep.signal_bubble_rebuild.connect(sigc::mem_fun(this, &Target::check_rebuild));
+ if(reason.empty())
+ throw invalid_argument("No reason given for rebuilding "+name);
+
+ state = REBUILD;
+ rebuild_reason = reason;
+
+ builder.get_logger().log("rebuild", format("Rebuilding %s: %s", name, reason));
+
+ signal_bubble_rebuild.emit();
}
void Target::prepare()
return task;
}
-void Target::mark_rebuild(const string &reason)
-{
- if(reason.empty())
- throw invalid_argument("No reason given for rebuilding "+name);
-
- state = REBUILD;
- rebuild_reason = reason;
-
- builder.get_logger().log("rebuild", format("Rebuilding %s: %s", name, reason));
-
- signal_bubble_rebuild.emit();
-}
-
void Target::build_finished(bool /*success*/)
{
state = UPTODATE;
const SourcePackage *get_package() const { return package; }
const Component *get_component() const { return component; }
+ /** Adds a dependency for the target. Order is preseved and is important
+ for some target types. It is an error to create dependency cycles, although
+ this won't be detected until the targets are prepared. */
+ void add_depend(Target &);
+
+protected:
+ /** Finds dependencies for the target. Called during preparation. If the
+ target needs to recursively inspect its dependencies, it should prepare its
+ direct dependencies first. */
+ virtual void find_depends() { }
+
+public:
+ /// Returns the dependencies of the target, in the order they were added.
+ const Dependencies &get_depends() const { return depends; }
+
/** Tries to locate a target that will help getting this target built. If
all dependencies are up-to-date, returns this target. If there are no
targets ready to be built (maybe because they are being built right now),
/** Forces rebuild of the target. */
void force_rebuild();
- /** Adds a dependency for the target. Order is preseved and is important
- for some target types. It is an error to create dependency cycles, although
- this won't be detected until the targets are prepared. */
- void add_depend(Target &);
-
- /// Returns the dependencies of the target, in the order they were added.
- const Dependencies &get_depends() const { return depends; }
+protected:
+ /** Marks the target to be rebuilt and specified a reason for it. */
+ void mark_rebuild(const std::string &);
- /** Finds dependencies for the target. Called during preparation. If the
- target needs to recursively inspect its dependencies, it should prepare its
- direct dependencies first. */
- virtual void find_depends() { }
+ /** Checks if the target needs to be rebuilt and why. */
+ virtual void check_rebuild() = 0;
+public:
/** Prepares the target by finding dependencies, recursively preparing them
and then checking whether rebuilding is needed. */
virtual void prepare();
Task *build();
protected:
- /** Marks the target to be rebuilt and specified a reason for it. */
- void mark_rebuild(const std::string &);
-
- /** Checks if the target needs to be rebuilt and why. */
- virtual void check_rebuild() = 0;
-
/** Handler for Task::signal_finished. */
virtual void build_finished(bool);
};