12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #pragma once
-
- #include <vector>
- #include <string>
- #include <optional>
-
- #include "BBParser.h"
- #include "sys.h"
-
- class SourceFile {
- public:
- enum FileType {
- UNKNOWN, C, CXX,
- };
-
- static FileType fileTypeFrom(const std::string &name);
-
- SourceFile(
- std::string dir, std::string name,
- FileType type, BBParser::Variables vars);
-
- const std::string &dir() const { return dir_; }
- const std::string &name() const { return name_; }
- std::string path() const { return dir_ + '/' + name_; }
- FileType type() const { return type_; }
- const BBParser::Variables &vars() const { return vars_; }
- std::string objectPath(const std::string &outDir) const;
-
- const std::vector<std::string> *variable(const std::string &name) const;
-
- const std::vector<std::string> &compileFlags() const;
- std::vector<std::string> ldFlags() const;
- std::vector<std::string> ldLibs() const;
-
- std::vector<std::string> dependencies() const;
- bool needsRecompile(const std::string &outDir) const;
- void compile(const std::string &outDir) const;
- std::vector<std::string> compileCommand(const std::string &outDir) const;
-
- private:
- std::string dir_;
- std::string name_;
- FileType type_;
- BBParser::Variables vars_;
-
- // Compile flags are cached, because they're used multiple times
- mutable std::vector<std::string> compileFlags_;
- mutable bool hasCompileFlags_ = false;
- };
|