]> git.tdb.fi Git - builder.git/blobdiff - source/tool.h
Refactor the use of external tasks in tools
[builder.git] / source / tool.h
index dab39e7424882ffc10a840bbda2fe916bc938a59..b756563242ba4099152f0ce125bd93a6504d9ffb 100644 (file)
@@ -6,7 +6,10 @@
 #include <vector>
 #include <msp/fs/path.h>
 #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<Task *(const Target &)>);
 
        template<typename T>
-       void set_run(Task *(*)(const T &));
+       void set_run_external(ExternalTask::Arguments (*)(const T &, Msp::FS::Path &));
 
        template<typename T>
        void set_run_internal(bool (*)(const T &));
@@ -149,9 +151,13 @@ public:
 
 
 template<typename T>
-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<const T &>(t)); });
+       set_run([f](const Target &t){
+               Msp::FS::Path work_dir = t.get_package()->get_source_directory();
+               ExternalTask::Arguments args = f(dynamic_cast<const T &>(t), work_dir);
+               return new ExternalTask(args, work_dir);
+       });
 }
 
 template<typename T>