#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;
class BuildInfo;
class Component;
class FileTarget;
-class Target;
class ToolData
{
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 &));
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>