| /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| file Copyright.txt or https://cmake.org/licensing for details. */ | |
| #pragma once | |
| #include <array> | |
| #include <cstddef> // IWYU pragma: keep | |
| #include <cstdint> | |
| #include <iosfwd> | |
| #include <memory> | |
| #include <string> | |
| #include <vector> | |
| #include <cm3p/uv.h> | |
| class cmUVProcessChain; | |
| class cmUVProcessChainBuilder | |
| { | |
| public: | |
| enum Stream | |
| { | |
| Stream_INPUT = 0, | |
| Stream_OUTPUT = 1, | |
| Stream_ERROR = 2, | |
| }; | |
| cmUVProcessChainBuilder(); | |
| cmUVProcessChainBuilder& AddCommand( | |
| const std::vector<std::string>& arguments); | |
| cmUVProcessChainBuilder& SetNoStream(Stream stdio); | |
| cmUVProcessChainBuilder& SetBuiltinStream(Stream stdio); | |
| cmUVProcessChainBuilder& SetExternalStream(Stream stdio, int fd); | |
| cmUVProcessChain Start() const; | |
| private: | |
| enum StdioType | |
| { | |
| None, | |
| Builtin, | |
| External, | |
| }; | |
| friend class cmUVProcessChain; | |
| struct StdioConfiguration | |
| { | |
| StdioType Type; | |
| int FileDescriptor; | |
| }; | |
| struct ProcessConfiguration | |
| { | |
| std::vector<std::string> Arguments; | |
| }; | |
| std::array<StdioConfiguration, 3> Stdio; | |
| std::vector<ProcessConfiguration> Processes; | |
| }; | |
| class cmUVProcessChain | |
| { | |
| public: | |
| struct Status | |
| { | |
| int64_t ExitStatus; | |
| int TermSignal; | |
| }; | |
| cmUVProcessChain(const cmUVProcessChain& other) = delete; | |
| cmUVProcessChain(cmUVProcessChain&& other) noexcept; | |
| ~cmUVProcessChain(); | |
| cmUVProcessChain& operator=(const cmUVProcessChain& other) = delete; | |
| cmUVProcessChain& operator=(cmUVProcessChain&& other) noexcept; | |
| uv_loop_t& GetLoop(); | |
| // FIXME: Add stdin support | |
| std::istream* OutputStream(); | |
| std::istream* ErrorStream(); | |
| bool Valid() const; | |
| bool Wait(int64_t milliseconds = -1); | |
| std::vector<const Status*> GetStatus() const; | |
| const Status* GetStatus(std::size_t index) const; | |
| private: | |
| friend class cmUVProcessChainBuilder; | |
| cmUVProcessChain(); | |
| struct InternalData; | |
| std::unique_ptr<InternalData> Data; | |
| }; |