Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Side by Side Diff: tools/gn/substitution_writer.h

Issue 2387763002: Support for source_target_relative expansion in GN (Closed)
Patch Set: Reimplemented as source_target_relative Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef TOOLS_GN_SUBSTITUTION_WRITER_H_ 5 #ifndef TOOLS_GN_SUBSTITUTION_WRITER_H_
6 #define TOOLS_GN_SUBSTITUTION_WRITER_H_ 6 #define TOOLS_GN_SUBSTITUTION_WRITER_H_
7 7
8 #include <iosfwd> 8 #include <iosfwd>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 27 matching lines...) Expand all
38 // 38 //
39 // - Compiler substitutions: These are used to compute compiler outputs. 39 // - Compiler substitutions: These are used to compute compiler outputs.
40 // It includes all source substitutions (since they depend on the various 40 // It includes all source substitutions (since they depend on the various
41 // parts of the source file) as well as the target substitutions. 41 // parts of the source file) as well as the target substitutions.
42 // 42 //
43 // - Linker substitutions: These are used to compute linker outputs. It 43 // - Linker substitutions: These are used to compute linker outputs. It
44 // includes the target substitutions. 44 // includes the target substitutions.
45 // 45 //
46 // The compiler and linker specific substitutions do NOT include the various 46 // The compiler and linker specific substitutions do NOT include the various
47 // cflags, ldflags, libraries, etc. These are written by the ninja target 47 // cflags, ldflags, libraries, etc. These are written by the ninja target
48 // writer since they depend on traversing the dependency tree. 48 // writer since they depend on traversing the dependency tree.
brettw 2016/10/05 19:47:50 Can you append a note here that the functions that
Petr Hosek 2016/10/11 00:59:50 Done.
49 class SubstitutionWriter { 49 class SubstitutionWriter {
50 public: 50 public:
51 enum OutputStyle { 51 enum OutputStyle {
52 OUTPUT_ABSOLUTE, // Dirs will be absolute "//foo/bar". 52 OUTPUT_ABSOLUTE, // Dirs will be absolute "//foo/bar".
53 OUTPUT_RELATIVE, // Dirs will be relative to a given directory. 53 OUTPUT_RELATIVE, // Dirs will be relative to a given directory.
54 }; 54 };
55 55
56 // Writes the pattern to the given stream with no special handling, and with 56 // Writes the pattern to the given stream with no special handling, and with
57 // Ninja variables replacing the patterns. 57 // Ninja variables replacing the patterns.
58 static void WriteWithNinjaVariables( 58 static void WriteWithNinjaVariables(
(...skipping 14 matching lines...) Expand all
73 const Settings* settings, 73 const Settings* settings,
74 const SubstitutionList& list, 74 const SubstitutionList& list,
75 std::vector<OutputFile>* output); 75 std::vector<OutputFile>* output);
76 76
77 // Source substitutions ----------------------------------------------------- 77 // Source substitutions -----------------------------------------------------
78 78
79 // Applies the substitution pattern to a source file, returning the result 79 // Applies the substitution pattern to a source file, returning the result
80 // as either a string, a SourceFile or an OutputFile. If the result is 80 // as either a string, a SourceFile or an OutputFile. If the result is
81 // expected to be a SourceFile or an OutputFile, this will CHECK if the 81 // expected to be a SourceFile or an OutputFile, this will CHECK if the
82 // result isn't in the correct directory. The caller should validate this 82 // result isn't in the correct directory. The caller should validate this
83 // first (see for example IsFileInOuputDir). 83 // first (see for example IsFileInOuputDir).
brettw 2016/10/05 19:47:50 GN almost never supports random pointers being nul
Petr Hosek 2016/10/11 00:59:49 Done.
84 static SourceFile ApplyPatternToSource( 84 static SourceFile ApplyPatternToSource(
85 const Target* target,
85 const Settings* settings, 86 const Settings* settings,
86 const SubstitutionPattern& pattern, 87 const SubstitutionPattern& pattern,
87 const SourceFile& source); 88 const SourceFile& source);
88 static std::string ApplyPatternToSourceAsString( 89 static std::string ApplyPatternToSourceAsString(
90 const Target* target,
89 const Settings* settings, 91 const Settings* settings,
90 const SubstitutionPattern& pattern, 92 const SubstitutionPattern& pattern,
91 const SourceFile& source); 93 const SourceFile& source);
92 static OutputFile ApplyPatternToSourceAsOutputFile( 94 static OutputFile ApplyPatternToSourceAsOutputFile(
95 const Target* target,
93 const Settings* settings, 96 const Settings* settings,
94 const SubstitutionPattern& pattern, 97 const SubstitutionPattern& pattern,
95 const SourceFile& source); 98 const SourceFile& source);
96 99
97 // Applies the substitution list to a source, APPENDING the result to the 100 // Applies the substitution list to a source, APPENDING the result to the
98 // given output vector. It works this way so one can call multiple times to 101 // given output vector. It works this way so one can call multiple times to
99 // apply to multiple files and create a list. The result can either be 102 // apply to multiple files and create a list. The result can either be
100 // SourceFiles or OutputFiles. 103 // SourceFiles or OutputFiles.
101 static void ApplyListToSource( 104 static void ApplyListToSource(
105 const Target* target,
102 const Settings* settings, 106 const Settings* settings,
103 const SubstitutionList& list, 107 const SubstitutionList& list,
104 const SourceFile& source, 108 const SourceFile& source,
105 std::vector<SourceFile>* output); 109 std::vector<SourceFile>* output);
106 static void ApplyListToSourceAsString( 110 static void ApplyListToSourceAsString(
111 const Target* target,
107 const Settings* settings, 112 const Settings* settings,
108 const SubstitutionList& list, 113 const SubstitutionList& list,
109 const SourceFile& source, 114 const SourceFile& source,
110 std::vector<std::string>* output); 115 std::vector<std::string>* output);
111 static void ApplyListToSourceAsOutputFile( 116 static void ApplyListToSourceAsOutputFile(
117 const Target* target,
112 const Settings* settings, 118 const Settings* settings,
113 const SubstitutionList& list, 119 const SubstitutionList& list,
114 const SourceFile& source, 120 const SourceFile& source,
115 std::vector<OutputFile>* output); 121 std::vector<OutputFile>* output);
116 122
117 // Like ApplyListToSource but applies the list to all sources and replaces 123 // Like ApplyListToSource but applies the list to all sources and replaces
118 // rather than appends the output (this produces the complete output). 124 // rather than appends the output (this produces the complete output).
119 static void ApplyListToSources( 125 static void ApplyListToSources(
126 const Target* target,
120 const Settings* settings, 127 const Settings* settings,
121 const SubstitutionList& list, 128 const SubstitutionList& list,
122 const std::vector<SourceFile>& sources, 129 const std::vector<SourceFile>& sources,
123 std::vector<SourceFile>* output); 130 std::vector<SourceFile>* output);
124 static void ApplyListToSourcesAsString( 131 static void ApplyListToSourcesAsString(
132 const Target* target,
125 const Settings* settings, 133 const Settings* settings,
126 const SubstitutionList& list, 134 const SubstitutionList& list,
127 const std::vector<SourceFile>& sources, 135 const std::vector<SourceFile>& sources,
128 std::vector<std::string>* output); 136 std::vector<std::string>* output);
129 static void ApplyListToSourcesAsOutputFile( 137 static void ApplyListToSourcesAsOutputFile(
138 const Target* target,
130 const Settings* settings, 139 const Settings* settings,
131 const SubstitutionList& list, 140 const SubstitutionList& list,
132 const std::vector<SourceFile>& sources, 141 const std::vector<SourceFile>& sources,
133 std::vector<OutputFile>* output); 142 std::vector<OutputFile>* output);
134 143
135 // Given a list of source replacement types used, writes the Ninja variable 144 // Given a list of source replacement types used, writes the Ninja variable
136 // definitions for the given source file to use for those replacements. The 145 // definitions for the given source file to use for those replacements. The
137 // variables will be indented two spaces. Since this is for writing to 146 // variables will be indented two spaces. Since this is for writing to
138 // Ninja files, paths will be relative to the build dir, and no definition 147 // Ninja files, paths will be relative to the build dir, and no definition
139 // for {{source}} will be written since that maps to Ninja's implicit $in 148 // for {{source}} will be written since that maps to Ninja's implicit $in
140 // variable. 149 // variable.
141 static void WriteNinjaVariablesForSource( 150 static void WriteNinjaVariablesForSource(
151 const Target* target,
142 const Settings* settings, 152 const Settings* settings,
143 const SourceFile& source, 153 const SourceFile& source,
144 const std::vector<SubstitutionType>& types, 154 const std::vector<SubstitutionType>& types,
145 const EscapeOptions& escape_options, 155 const EscapeOptions& escape_options,
146 std::ostream& out); 156 std::ostream& out);
147 157
148 // Extracts the given type of substitution related to a source file from the 158 // Extracts the given type of substitution related to a source file from the
149 // given source file. If output_style is OUTPUT_RELATIVE, relative_to 159 // given source file. If output_style is OUTPUT_RELATIVE, relative_to
150 // indicates the directory that the relative directories should be relative 160 // indicates the directory that the relative directories should be relative
151 // to, otherwise it is ignored. 161 // to, otherwise it is ignored.
152 static std::string GetSourceSubstitution( 162 static std::string GetSourceSubstitution(
163 const Target* target,
153 const Settings* settings, 164 const Settings* settings,
154 const SourceFile& source, 165 const SourceFile& source,
155 SubstitutionType type, 166 SubstitutionType type,
156 OutputStyle output_style, 167 OutputStyle output_style,
157 const SourceDir& relative_to); 168 const SourceDir& relative_to);
158 169
159 // Target substitutions ------------------------------------------------------ 170 // Target substitutions ------------------------------------------------------
160 // 171 //
161 // Handles the target substitutions that apply to both compiler and linker 172 // Handles the target substitutions that apply to both compiler and linker
162 // tools. 173 // tools.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // Like GetSourceSubstitution but for strings based on the target or 231 // Like GetSourceSubstitution but for strings based on the target or
221 // toolchain. This type of result will always be relative to the build 232 // toolchain. This type of result will always be relative to the build
222 // directory. 233 // directory.
223 static std::string GetLinkerSubstitution( 234 static std::string GetLinkerSubstitution(
224 const Target* target, 235 const Target* target,
225 const Tool* tool, 236 const Tool* tool,
226 SubstitutionType type); 237 SubstitutionType type);
227 }; 238 };
228 239
229 #endif // TOOLS_GN_SUBSTITUTION_WRITER_H_ 240 #endif // TOOLS_GN_SUBSTITUTION_WRITER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698