49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
/*
|
|
Copyright (c) 2017 Microsoft Corporation. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
|
|
Author: Jared Roesch
|
|
*/
|
|
#pragma once
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include "library/handle.h"
|
|
#include "util/buffer.h"
|
|
#include "library/pipe.h"
|
|
|
|
namespace lean {
|
|
|
|
enum stdio {
|
|
PIPED,
|
|
INHERIT,
|
|
NUL,
|
|
};
|
|
|
|
struct child {
|
|
virtual ~child() {};
|
|
virtual handle_ref get_stdin() = 0;
|
|
virtual handle_ref get_stdout() = 0;
|
|
virtual handle_ref get_stderr() = 0;
|
|
virtual unsigned wait() = 0;
|
|
};
|
|
|
|
class process {
|
|
std::string m_proc_name;
|
|
buffer<std::string> m_args;
|
|
stdio m_stdout;
|
|
stdio m_stdin;
|
|
stdio m_stderr;
|
|
optional<std::string> m_cwd;
|
|
std::unordered_map<std::string, optional<std::string>> m_env;
|
|
std::shared_ptr<child> spawn_core();
|
|
public:
|
|
process(process const & proc) = default;
|
|
process(std::string exe_name, stdio io_stdin, stdio io_stdout, stdio io_stderr);
|
|
process & arg(std::string arg_str);
|
|
process & set_cwd(std::string const & cwd);
|
|
process & set_env(std::string const & var, optional<std::string> const & val);
|
|
std::shared_ptr<child> spawn();
|
|
};
|
|
}
|