]> git.tdb.fi Git - builder.git/blobdiff - source/externaltask.h
Target::prepare shouldn't be virtual
[builder.git] / source / externaltask.h
index c9bc823112db7b3cb55eb7eeea043b2a94f140d1..a5f10ec0b0c1486ce6b7b951d8dd10e668923cfb 100644 (file)
@@ -7,6 +7,11 @@
 #include <msp/io/pipe.h>
 #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:
@@ -30,16 +35,28 @@ private:
        std::string output;
 
 public:
-       ExternalTask(const Arguments &, 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();
+       Status wait();
+private:
+       Status do_wait(bool);
 
+public:
        void set_stdout(Destination);
        void set_stderr(Destination);
        const std::string &get_output() const { return output; }
+
+       /** Executes a command and captures its output.  Stderr is ignored, but if
+       the command exits with a nonzero status, an exception is thrown. */
+       static std::string run_and_capture_output(const Arguments &, const Msp::FS::Path & = Msp::FS::Path());
 };
 
 #endif