public:
enum Destination
{
- PASSTHROUGH,
- CAPTURE,
- IGNORE
+ PASSTHROUGH, //< Do not touch the stream
+ CAPTURE, //< Capture the stream
+ IGNORE //< Redirect the stream to oblivion
};
typedef std::vector<std::string> Arguments;
Status do_wait(bool);
public:
+ /// Sets destination for stdout. Has no effect after the task is started.
void set_stdout(Destination);
+
+ /// Sets destination for stderr. Has no effect after the task is started.
void set_stderr(Destination);
+
+ /** Returns captured output, if any. This may be called while the task is
+ still running, but it will always return all output. */
const std::string &get_output() const { return output; }
/** Executes a command and captures its output. Stderr is ignored, but if
/**
Tasks are used to manage other programs and worker threads involved in the
-build process. They are run asynchronously.
+build process. They are run asynchronously by default, but a wait() method is
+provided should it be necessary to wait for a task to finish.
*/
class Task
{
public:
virtual ~Task() { }
+ /** Returns the command being executed for this task. Only makes sense if
+ an external command is involved. */
virtual std::string get_command() const = 0;
+
+ /// Starts the task.
virtual void start() = 0;
+
+ /// Checks the status of the task and immediately returns.
virtual Status check() = 0;
+
+ /// Waits for the task to finish and returns its final status.
virtual Status wait() = 0;
};