X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Ftarget.cpp;h=577438b3528dce736aa3c22077e0857a24f5a0b4;hb=c7efb9da9b070c345473c9d22a50b60c332f2132;hp=cf227a42edf421377817e1740240e808900ec0a0;hpb=d6e5645659cc31231e6da5028ddd0e0aeca19218;p=builder.git diff --git a/source/target.cpp b/source/target.cpp index cf227a4..577438b 100644 --- a/source/target.cpp +++ b/source/target.cpp @@ -3,7 +3,7 @@ #include #include "builder.h" #include "filetarget.h" -#include "package.h" +#include "sourcepackage.h" #include "target.h" #include "task.h" #include "tool.h" @@ -55,12 +55,13 @@ void Target::force_rebuild() mark_rebuild("Forced rebuild"); } -void Target::add_depend(Target *dep) +void Target::add_depend(Target &dep) { - if(dep==this) + if(&dep==this) throw invalid_argument("Target::add_depend"); - depends.push_back(dep); - dep->signal_bubble_rebuild.connect(sigc::mem_fun(this, &Target::check_rebuild)); + depends.push_back(&dep); + if(state>PREPARING) + dep.signal_bubble_rebuild.connect(sigc::mem_fun(this, &Target::check_rebuild)); } void Target::prepare() @@ -78,7 +79,7 @@ void Target::prepare() if(tool) { if(FileTarget *tool_exe = tool->get_executable()) - add_depend(tool_exe); + add_depend(*tool_exe); } for(Dependencies::iterator i=depends.begin(); i!=depends.end(); ++i) @@ -87,12 +88,16 @@ void Target::prepare() check_rebuild(); if(state==PREPARING) state = UPTODATE; + + for(Dependencies::iterator i=depends.begin(); i!=depends.end(); ++i) + (*i)->signal_bubble_rebuild.connect(sigc::mem_fun(this, &Target::check_rebuild)); } Task *Target::build() { if(!tool) { + // This special case is needed for VirtualTargets state = UPTODATE; return 0; } @@ -116,9 +121,10 @@ void Target::mark_rebuild(const string &reason) state = REBUILD; rebuild_reason = reason; - signal_bubble_rebuild.emit(); builder.get_logger().log("rebuild", format("Rebuilding %s: %s", name, reason)); + + signal_bubble_rebuild.emit(); } void Target::build_finished(bool /*success*/)