std::string rebuild_reason;
Dependencies depends;
+ Dependencies side_effects;
+ Target *primary_target;
Target(Builder &, const std::string &);
public:
/** 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 &);
+ void add_dependency(Target &);
+
+ /** Adds a side effect for the target. Side effects are not built on their
+ own, but together with their primary target. */
+ void add_side_effect(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() { }
+ virtual void find_dependencies() { }
public:
/// Returns the dependencies of the target, in the order they were added.
- const Dependencies &get_depends() const { return depends; }
+ const Dependencies &get_dependencies() const { return depends; }
+
+ /// Returns the side effects of the target.
+ const Dependencies &get_side_effects() const { return side_effects; }
+
+ /// Returns the primary target associated with a side effect target.
+ Target *get_primary_target() const { return primary_target; }
/** 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
public:
/** Prepares the target by finding dependencies, recursively preparing them
and then checking whether rebuilding is needed. */
- virtual void prepare();
+ void prepare();
/** Invokes the associated Tool to build the target and returns the
resulting Task. The task must be started by the caller. */
protected:
/** Handler for Task::signal_finished. */
virtual void build_finished(bool);
+
+ virtual void modified() { }
+
+public:
+ /** Removes any results of building the target. */
+ virtual void clean() { }
};
#endif