1234567891011121314151617181920212223242526272829303132333435 |
- #pragma once
-
- #include <vector>
- #include <memory>
- #include <mutex>
- #include <string>
-
- class DepNode {
- public:
- void addChild(std::shared_ptr<DepNode> node);
- bool hasChanged(const std::string &outDir);
- void build(const std::string &outDir);
- virtual std::vector<std::string> publicLDFlags(const std::string &outDir);
- virtual std::vector<std::string> publicLDLibs(const std::string &outDir);
- virtual std::vector<std::string> 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<std::string> getPublicLDFlags(const std::string &outDir) { return {}; }
- virtual std::vector<std::string> getPublicLDLibs(const std::string &outDir) { return {}; }
- virtual std::vector<std::string> 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<std::shared_ptr<DepNode>> deps_;
- };
|