// -*- c++ -*- // Distributed under the BSD 2-Clause License. // See accompanying file LICENSE for details. #pragma once #include <string> #include <memory> #include <deque> #include "task.h" struct Target { ctor::build_configuration config; std::string path; }; //! Get list of all registered targets const std::deque<Target>& getTargets(const ctor::settings& settings, bool resolve_externals = true); //! Returns next dirty task from the dirtyTasks list that has all its dependencies //! fulfilled. //! The returned task is removed from the dirty list. //! Return nullptr if no dirty task is ready. std::shared_ptr<Task> getNextTask(const std::vector<std::shared_ptr<Task>>& allTasks, std::vector<std::shared_ptr<Task>>& dirtyTasks); //! Get list of tasks filtered by name including each of their direct //! dependency tasks (ie. objects tasks from their sources). std::vector<std::shared_ptr<Task>> getTasks(const ctor::settings& settings, const std::vector<std::string> names = {}, bool resolve_externals = true); //! Generate list of targets from a single configuration, including the final //! link target and all its objects files (if any). std::vector<std::shared_ptr<Task>> taskFactory(const ctor::build_configuration& config, const ctor::settings& settings, const std::string& sourceDir, bool is_self);