X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftool.h;h=b756563242ba4099152f0ce125bd93a6504d9ffb;hb=edd4771292a2273080fbcbac266c6831834b0b86;hp=dab39e7424882ffc10a840bbda2fe916bc938a59;hpb=b29b79ca42fe4285c18b5d348b4eb59010d2c2da;p=builder.git diff --git a/source/tool.h b/source/tool.h index dab39e7..b756563 100644 --- a/source/tool.h +++ b/source/tool.h @@ -6,7 +6,10 @@ #include #include #include "buildinfo.h" +#include "externaltask.h" #include "internaltask.h" +#include "sourcepackage.h" +#include "target.h" #include "virtualfilesystem.h" class Architecture; @@ -14,7 +17,6 @@ class Builder; class BuildInfo; class Component; class FileTarget; -class Target; class ToolData { @@ -71,7 +73,7 @@ protected: void set_run(std::function); template - void set_run(Task *(*)(const T &)); + void set_run_external(ExternalTask::Arguments (*)(const T &, Msp::FS::Path &)); template void set_run_internal(bool (*)(const T &)); @@ -149,9 +151,13 @@ public: template -void Tool::set_run(Task *(*f)(const T &)) +void Tool::set_run_external(ExternalTask::Arguments (*f)(const T &, Msp::FS::Path &)) { - set_run([f](const Target &t){ return f(dynamic_cast(t)); }); + set_run([f](const Target &t){ + Msp::FS::Path work_dir = t.get_package()->get_source_directory(); + ExternalTask::Arguments args = f(dynamic_cast(t), work_dir); + return new ExternalTask(args, work_dir); + }); } template