|
123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #pragma once
-
- #include <vector>
- #include <memory>
- #include <mutex>
- #include <string>
- #include <ostream>
- #include <atomic>
- #include <condition_variable>
-
- #include "compdb.h"
-
- class DepNode {
- public:
- virtual ~DepNode() = default;
-
- const std::vector<std::shared_ptr<DepNode>> &children() { return deps_; }
- void addChild(std::shared_ptr<DepNode> node);
- bool hasChanged(const std::string &outDir);
- void startBuild(const std::string &outDir);
- void joinBuild();
- void writeCompDB(const std::string &outDir, compdb::Writer &w);
- 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 void doWriteCompDB(const std::string &outDir, compdb::Writer &w) {}
- 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 {}; }
-
- TriState has_changed_ = TriState::UNKNOWN;
- bool build_complete_ = false;
- bool build_started_ = false;
- std::mutex mut_;
- std::condition_variable build_cond_;
- std::vector<std::shared_ptr<DepNode>> deps_;
- };
|