#include <string>
#include <vector>
#include <sigc++/signal.h>
+#include <msp/core/noncopyable.h>
#include <msp/time/timestamp.h>
#include "libbuilder_api.h"
BROKEN
};
+ struct PushPrepare: Msp::NonCopyable
+ {
+ PushPrepare(Target *t) { prepare_stack.push_back(t); }
+ ~PushPrepare() { prepare_stack.pop_back(); }
+ };
+
public:
sigc::signal<void> signal_bubble_rebuild;
sigc::signal<void> signal_modified;
Dependencies trans_depends;
Dependencies side_effects;
Target *primary_target = 0;
+ bool rescan_trans_deps = false;
+
+ static std::vector<Target *> prepare_stack;
Target(Builder &, const std::string &);
public:
direct dependencies first. */
virtual void find_dependencies() { }
+private:
+ bool find_transitive_dependencies();
+ void find_transitive_dependencies(Target &, std::vector<Target *> &) const;
+
+protected:
+ virtual Target *resolve_transitive_dependency(Target &, Target &dep) const { return &dep; }
+
public:
/// Returns the dependencies of the target, in the order they were added.
const Dependencies &get_dependencies() const { return depends; }