#pragma once #include #include #include #include "common/goos/Object.h" struct ToolInput { std::vector& input; // the input file std::vector& deps; // explicit dependencies std::vector& output; // produced output files. goos::Object arg; // optional argument }; class Tool { public: Tool(const std::string& name); virtual bool run(const ToolInput& task) = 0; virtual std::vector get_additional_dependencies(const ToolInput&) { return {}; } virtual bool needs_run(const ToolInput& task); virtual ~Tool() = default; const std::string& name() const { return m_name; } private: std::string m_name; };