diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2020-01-21 09:26:42 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-01-28 16:16:11 (GMT) |
commit | f8c505d4b30aa636b013486913591060b2040716 (patch) | |
tree | 2853577d4c09ff8f11dac45bfd4ba8a2a014dc90 /Source/cmGccDepfileLexerHelper.h | |
parent | 306328ace87376dddb2a42bf33c6338aac5d09ad (diff) | |
download | CMake-f8c505d4b30aa636b013486913591060b2040716.zip CMake-f8c505d4b30aa636b013486913591060b2040716.tar.gz CMake-f8c505d4b30aa636b013486913591060b2040716.tar.bz2 |
Add a parser for GCC-style depfiles
Introduce the function cmReadGccDepfile that parses a GCC-style depfile
and returns its content. The implementation uses a lexer that is
modeled after the re2c implementation in Ninja.
The sample files of the autotest have been created with gcc 8.3.0.
This depfile reader is to be used by the Autogen facility to make use
of the depfiles that are generated by Qt's meta object compiler.
Diffstat (limited to 'Source/cmGccDepfileLexerHelper.h')
-rw-r--r-- | Source/cmGccDepfileLexerHelper.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Source/cmGccDepfileLexerHelper.h b/Source/cmGccDepfileLexerHelper.h new file mode 100644 index 0000000..e6b2fcf --- /dev/null +++ b/Source/cmGccDepfileLexerHelper.h @@ -0,0 +1,40 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#ifndef cmGccDepfileLexerHelper_h +#define cmGccDepfileLexerHelper_h + +#include <utility> + +#include <cmGccDepfileReaderTypes.h> + +class cmGccDepfileLexerHelper +{ +public: + cmGccDepfileLexerHelper() = default; + + bool readFile(const char* filePath); + cmGccDepfileContent extractContent() && { return std::move(this->Content); } + + // Functions called by the lexer + void newEntry(); + void newRule(); + void newDependency(); + void newRuleOrDependency(); + void addToCurrentPath(const char* s); + +private: + void sanitizeContent(); + + cmGccDepfileContent Content; + + enum class State + { + Rule, + Dependency + }; + State HelperState = State::Rule; +}; + +#define YY_EXTRA_TYPE cmGccDepfileLexerHelper* + +#endif |