X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.h;h=00465f3af4f3ba501952f1a7bf29ce149d04865a;hb=4b075b4a7ed921be62740c302edeebcd8b06ca29;hp=cb8464beab873ef24146b49a5ab02bd6a9aaa21c;hpb=0aa50a0d3e5567e9295ecf4d7ba6d4b14fa73b9b;p=builder.git diff --git a/source/externaltask.h b/source/externaltask.h index cb8464b..00465f3 100644 --- a/source/externaltask.h +++ b/source/externaltask.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include "task.h" @@ -15,22 +16,25 @@ be captured. class ExternalTask: public Task { public: - enum Destination + enum StreamAction { PASSTHROUGH, //< Do not touch the stream CAPTURE, //< Capture the stream + REDIRECT, //< Redirect the stream to/from a file IGNORE //< Redirect the stream to oblivion }; - typedef std::vector Arguments; + typedef Msp::Process::Arguments Arguments; private: Arguments argv; Msp::FS::Path work_dir; - int pid; + Msp::Process *process; int exit_code; - Destination stdout_dest; - Destination stderr_dest; + Msp::FS::Path stdin_file; + StreamAction stdout_action; + Msp::FS::Path stdout_file; + StreamAction stderr_action; Msp::IO::Pipe *capture_pipe; std::string output; @@ -50,11 +54,17 @@ private: Status do_wait(bool); public: + /// Redirect stdin from a file. Has no effect after the task is started. + void set_stdin(const Msp::FS::Path &); + /// Sets destination for stdout. Has no effect after the task is started. - void set_stdout(Destination); + void set_stdout(StreamAction); + + /// Redirect stdout to a file. Has no effect after the task is started. + void set_stdout(const Msp::FS::Path &); /// Sets destination for stderr. Has no effect after the task is started. - void set_stderr(Destination); + void set_stderr(StreamAction); /** Returns captured output, if any. This may be called while the task is still running, but it will always return all output. */