+++ /dev/null
-#ifndef TASK_H_
-#define TASK_H_
-
-#include <string>
-#include <sigc++/signal.h>
-#include <msp/fs/path.h>
-
-/**
-Tasks are used to manage other programs and worker threads involved in the
-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:
- enum Status
- {
- RUNNING,
- SUCCESS,
- ERROR
- };
-
- sigc::signal<void, bool> signal_finished;
-
-protected:
- std::vector<Msp::FS::Path> files;
- bool unlink;
-
- Task();
-public:
- virtual ~Task() { }
-
- /** Associate the task with a file. */
- void add_file(const Msp::FS::Path &);
-
- /** If set to true, the associated files are removed before the task is
- started. */
- void set_unlink(bool = true);
-
- /** 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;
-
-protected:
- /// Ensures that the output directory exists and removes files if necessary.
- void prepare();
-
-public:
- /// 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;
-};
-
-#endif