xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm/WindowsResource/ResourceProcessor.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===-- ResourceProcessor.h -------------------------------------*- C++-*-===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===---------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #ifndef LLVM_INCLUDE_LLVM_SUPPORT_WINDOWS_RESOURCE_PROCESSOR_H
10*0b57cec5SDimitry Andric #define LLVM_INCLUDE_LLVM_SUPPORT_WINDOWS_RESOURCE_PROCESSOR_H
11*0b57cec5SDimitry Andric 
12*0b57cec5SDimitry Andric #include "llvm/ADT/StringMap.h"
13*0b57cec5SDimitry Andric #include "llvm/ADT/StringRef.h"
14*0b57cec5SDimitry Andric #include "llvm/Support/Error.h"
15*0b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h"
16*0b57cec5SDimitry Andric 
17*0b57cec5SDimitry Andric #include <memory>
18*0b57cec5SDimitry Andric #include <vector>
19*0b57cec5SDimitry Andric 
20*0b57cec5SDimitry Andric 
21*0b57cec5SDimitry Andric namespace llvm {
22*0b57cec5SDimitry Andric 
23*0b57cec5SDimitry Andric class WindowsResourceProcessor {
24*0b57cec5SDimitry Andric public:
25*0b57cec5SDimitry Andric   using PathType = SmallVector<char, 64>;
26*0b57cec5SDimitry Andric 
WindowsResourceProcessor()27*0b57cec5SDimitry Andric   WindowsResourceProcessor() {}
28*0b57cec5SDimitry Andric 
29*0b57cec5SDimitry Andric   void addDefine(StringRef Key, StringRef Value = StringRef()) {
30*0b57cec5SDimitry Andric     PreprocessorDefines.emplace_back(Key, Value);
31*0b57cec5SDimitry Andric   }
addInclude(const PathType & IncludePath)32*0b57cec5SDimitry Andric   void addInclude(const PathType &IncludePath) {
33*0b57cec5SDimitry Andric     IncludeList.push_back(IncludePath);
34*0b57cec5SDimitry Andric   }
setVerbose(bool Verbose)35*0b57cec5SDimitry Andric   void setVerbose(bool Verbose) { IsVerbose = Verbose; }
setNullAtEnd(bool NullAtEnd)36*0b57cec5SDimitry Andric   void setNullAtEnd(bool NullAtEnd) { AppendNull = NullAtEnd; }
37*0b57cec5SDimitry Andric 
38*0b57cec5SDimitry Andric   Error process(StringRef InputData,
39*0b57cec5SDimitry Andric     std::unique_ptr<raw_fd_ostream> OutputStream);
40*0b57cec5SDimitry Andric 
41*0b57cec5SDimitry Andric private:
42*0b57cec5SDimitry Andric   StringRef InputData;
43*0b57cec5SDimitry Andric   std::vector<PathType> IncludeList;
44*0b57cec5SDimitry Andric   std::vector<std::pair<StringRef, StringRef>> PreprocessorDefines;
45*0b57cec5SDimitry Andric   bool IsVerbose, AppendNull;
46*0b57cec5SDimitry Andric };
47*0b57cec5SDimitry Andric 
48*0b57cec5SDimitry Andric }
49*0b57cec5SDimitry Andric 
50*0b57cec5SDimitry Andric #endif
51