#pragma once #include #include #include #include class DepNode { public: void addChild(std::shared_ptr node); bool hasChanged(const std::string &outDir); void build(const std::string &outDir); virtual std::vector publicLDFlags(const std::string &outDir); virtual std::vector publicLDLibs(const std::string &outDir); virtual std::vector publicObjects(const std::string &outDir); protected: enum class TriState { UNKNOWN, FALSE, TRUE, }; virtual bool checkHasChanged(const std::string &outDir) = 0; virtual void doBuild(const std::string &outDir) = 0; virtual std::vector getPublicLDFlags(const std::string &outDir) { return {}; } virtual std::vector getPublicLDLibs(const std::string &outDir) { return {}; } virtual std::vector getPublicObjects(const std::string &outDir) { return {}; } bool haveDepsChanged(const std::string &outDir); std::mutex mut_; TriState has_changed_ = TriState::UNKNOWN; bool was_rebuilt_ = false; bool was_prepared_ = false; std::vector> deps_; };