X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftarget.h;h=e7150c205deb0d1b274b63da6a0194abd3161299;hb=HEAD;hp=6b9cc90a0842de77c845982a1f6462d7c107caf6;hpb=24981eb7ef702aa97b2ab90399ccd3fc23ce9ccf;p=builder.git diff --git a/source/target.h b/source/target.h deleted file mode 100644 index 6b9cc90..0000000 --- a/source/target.h +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef TARGET_H_ -#define TARGET_H_ - -#include -#include -#include -#include -#include -#include - -class Builder; -class Component; -class SourcePackage; -class Task; -class Tool; - -/** -Targets make up the build graph. This class is a base for all target types and -handles many common tasks. See also FileTarget and VirtualTarget. -*/ -class Target -{ -public: - typedef std::list Dependencies; - -protected: - enum State - { - INIT, - PREPARING, - REBUILD, - BUILDING, - UPTODATE, - BROKEN - }; - -public: - sigc::signal signal_bubble_rebuild; - -protected: - Builder &builder; - const SourcePackage *package; - const Component *component; - std::string name; - - Tool *tool; - State state; - std::string rebuild_reason; - std::list problems; - - Dependencies depends; - Dependencies side_effects; - Target *primary_target; - - Target(Builder &, const std::string &); -public: - virtual ~Target() { } - - virtual const char *get_type() const = 0; - const std::string &get_name() const { return name; } - 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_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_dependencies() { } - -public: - /// Returns the dependencies of the target, in the order they were added. - 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 - targets ready to be built (maybe because they are being built right now), - returns 0. */ - virtual Target *get_buildable_target(); - - /** If this target is a proxy for another (such as InstalledFile), return - that target. Otherwise, return the target itself. Implementors should call - the function recursively to find the final target. */ - virtual Target *get_real_target() { return this; } - - void set_tool(Tool &); - - /** Returns the tool used to build the target. To actually build it, call - the build() function. */ - const Tool *get_tool() const { return tool; } - - /** Indicates if it's possible to build this target. */ - bool is_buildable() const { return tool!=0; } - - /** Indicates if this target needs rebuilding. Only makes sense after the - target has been prepared. */ - bool needs_rebuild() const { return state>PREPARING && state &get_problems() const { return problems; } - - /** Prepares the target by finding dependencies, recursively preparing them - and then checking whether rebuilding is needed. */ - void prepare(); - - /** Invokes the associated Tool to build the target and returns the - resulting Task. The task must be started by the caller. */ - virtual Task *build(); - -protected: - /** Targets can override this to do additional setup on the Task. This is - also called on side effects, which normally do not get built by themselves. */ - virtual void build(Task &) { } - - /** 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