]> git.tdb.fi Git - builder.git/blobdiff - source/target.h
Add a utility function for setting the executable for a Tool
[builder.git] / source / target.h
index a649e92e157057459e8dbcce918897eb417b053b..eda77d00dcd126b1c587768f04af4b8e7b162b2b 100644 (file)
@@ -42,11 +42,13 @@ protected:
        const Component *component;
        std::string name;
 
-       const Tool *tool;
+       Tool *tool;
        State state;
        std::string rebuild_reason;
 
        Dependencies depends;
+       Dependencies side_effects;
+       Target *primary_target;
 
        Target(Builder &, const std::string &);
 public:
@@ -60,17 +62,27 @@ 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
@@ -83,7 +95,7 @@ public:
        the function recursively to find the final target. */
        virtual Target *get_real_target() { return this; }
 
-       void set_tool(const Tool &);
+       void set_tool(Tool &);
 
        /** Returns the tool used to build the target.  To actually build it, call
        the build() function. */
@@ -113,7 +125,7 @@ protected:
 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. */
@@ -122,6 +134,12 @@ public:
 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