X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fexternaltask.h;h=8127c75762459f9a4c73f1c532412a7567c45281;hb=88a344b29ab173cd6ecacd0b038ea96dcb7484fc;hp=1701313b515f1e881d8bf27a725ffe2dc5ee7469;hpb=338eefb513953ae55e8e3614c009c242ba8ad74e;p=builder.git diff --git a/source/externaltask.h b/source/externaltask.h index 1701313..8127c75 100644 --- a/source/externaltask.h +++ b/source/externaltask.h @@ -4,18 +4,51 @@ #include #include #include +#include #include "task.h" +/** +Runs an external command. A zero exit status is translated to a SUCCESS status +for the task, and anything else is treated as an error. Output can optionally +be captured. +*/ class ExternalTask: public Task { +public: + enum Destination + { + PASSTHROUGH, + CAPTURE, + IGNORE + }; + + typedef std::vector Arguments; + private: + Arguments argv; + Msp::FS::Path work_dir; int pid; int exit_code; + Destination stdout_dest; + Destination stderr_dest; + Msp::IO::Pipe *capture_pipe; + std::string output; public: - ExternalTask(const std::vector &, const Msp::FS::Path &); + /** Creates an ExternalTask with an argument array and an optional working + directory. The first element of the argument array should be the command + name. If the working directory is not specified, no chdir is done. */ + ExternalTask(const Arguments &, const Msp::FS::Path & = Msp::FS::Path()); + virtual ~ExternalTask(); + + virtual std::string get_command() const; + virtual void start(); virtual Status check(); + + void set_stdout(Destination); + void set_stderr(Destination); + const std::string &get_output() const { return output; } }; #endif