OLD | NEW |
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 #include "tools/gn/substitution_type.h" | 5 #include "tools/gn/substitution_type.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 | 9 |
10 #include "tools/gn/err.h" | 10 #include "tools/gn/err.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 "{{cflags_cc}}", // SUBSTITUTION_CFLAGS_CC | 36 "{{cflags_cc}}", // SUBSTITUTION_CFLAGS_CC |
37 "{{cflags_objc}}", // SUBSTITUTION_CFLAGS_OBJC | 37 "{{cflags_objc}}", // SUBSTITUTION_CFLAGS_OBJC |
38 "{{cflags_objcc}}", // SUBSTITUTION_CFLAGS_OBJCC | 38 "{{cflags_objcc}}", // SUBSTITUTION_CFLAGS_OBJCC |
39 "{{defines}}", // SUBSTITUTION_DEFINES | 39 "{{defines}}", // SUBSTITUTION_DEFINES |
40 "{{include_dirs}}", // SUBSTITUTION_INCLUDE_DIRS | 40 "{{include_dirs}}", // SUBSTITUTION_INCLUDE_DIRS |
41 | 41 |
42 "{{inputs}}", // SUBSTITUTION_LINKER_INPUTS | 42 "{{inputs}}", // SUBSTITUTION_LINKER_INPUTS |
43 "{{inputs_newline}}", // SUBSTITUTION_LINKER_INPUTS_NEWLINE | 43 "{{inputs_newline}}", // SUBSTITUTION_LINKER_INPUTS_NEWLINE |
44 "{{ldflags}}", // SUBSTITUTION_LDFLAGS | 44 "{{ldflags}}", // SUBSTITUTION_LDFLAGS |
45 "{{libs}}", // SUBSTITUTION_LIBS | 45 "{{libs}}", // SUBSTITUTION_LIBS |
| 46 "{{output_dir}}", // SUBSTITUTION_OUTPUT_DIR |
46 "{{output_extension}}", // SUBSTITUTION_OUTPUT_EXTENSION | 47 "{{output_extension}}", // SUBSTITUTION_OUTPUT_EXTENSION |
47 "{{solibs}}", // SUBSTITUTION_SOLIBS | 48 "{{solibs}}", // SUBSTITUTION_SOLIBS |
48 | 49 |
49 "{{bundle_root_dir}}", // SUBSTITUTION_BUNDLE_ROOT_DIR | 50 "{{bundle_root_dir}}", // SUBSTITUTION_BUNDLE_ROOT_DIR |
50 "{{bundle_resources_dir}}", // SUBSTITUTION_BUNDLE_RESOURCES_DIR | 51 "{{bundle_resources_dir}}", // SUBSTITUTION_BUNDLE_RESOURCES_DIR |
51 "{{bundle_executable_dir}}", // SUBSTITUTION_BUNDLE_EXECUTABLE_DIR | 52 "{{bundle_executable_dir}}", // SUBSTITUTION_BUNDLE_EXECUTABLE_DIR |
52 "{{bundle_plugins_dir}}", // SUBSTITUTION_BUNDLE_PLUGINS_DIR | 53 "{{bundle_plugins_dir}}", // SUBSTITUTION_BUNDLE_PLUGINS_DIR |
53 | 54 |
54 "{{response_file_name}}", // SUBSTITUTION_RSP_FILE_NAME | 55 "{{response_file_name}}", // SUBSTITUTION_RSP_FILE_NAME |
55 }; | 56 }; |
(...skipping 28 matching lines...) Expand all Loading... |
84 "defines", // SUBSTITUTION_DEFINES | 85 "defines", // SUBSTITUTION_DEFINES |
85 "include_dirs", // SUBSTITUTION_INCLUDE_DIRS | 86 "include_dirs", // SUBSTITUTION_INCLUDE_DIRS |
86 | 87 |
87 // LINKER_INPUTS expands to the same Ninja var as SUBSTITUTION_SOURCE. These | 88 // LINKER_INPUTS expands to the same Ninja var as SUBSTITUTION_SOURCE. These |
88 // are used in different contexts and are named differently to keep things | 89 // are used in different contexts and are named differently to keep things |
89 // clear, but they both expand to the "set of input files" for a build rule. | 90 // clear, but they both expand to the "set of input files" for a build rule. |
90 "in", // SUBSTITUTION_LINKER_INPUTS | 91 "in", // SUBSTITUTION_LINKER_INPUTS |
91 "in_newline", // SUBSTITUTION_LINKER_INPUTS_NEWLINE | 92 "in_newline", // SUBSTITUTION_LINKER_INPUTS_NEWLINE |
92 "ldflags", // SUBSTITUTION_LDFLAGS | 93 "ldflags", // SUBSTITUTION_LDFLAGS |
93 "libs", // SUBSTITUTION_LIBS | 94 "libs", // SUBSTITUTION_LIBS |
| 95 "output_dir", // SUBSTITUTION_OUTPUT_DIR |
94 "output_extension", // SUBSTITUTION_OUTPUT_EXTENSION | 96 "output_extension", // SUBSTITUTION_OUTPUT_EXTENSION |
95 "solibs", // SUBSTITUTION_SOLIBS | 97 "solibs", // SUBSTITUTION_SOLIBS |
96 | 98 |
97 "bundle_root_dir", // SUBSTITUTION_BUNDLE_ROOT_DIR | 99 "bundle_root_dir", // SUBSTITUTION_BUNDLE_ROOT_DIR |
98 "bundle_resources_dir", // SUBSTITUTION_BUNDLE_RESOURCES_DIR | 100 "bundle_resources_dir", // SUBSTITUTION_BUNDLE_RESOURCES_DIR |
99 "bundle_executable_dir", // SUBSTITUTION_BUNDLE_EXECUTABLE_DIR | 101 "bundle_executable_dir", // SUBSTITUTION_BUNDLE_EXECUTABLE_DIR |
100 "bundle_plugins_dir", // SUBSTITUTION_BUNDLE_PLUGINS_DIR | 102 "bundle_plugins_dir", // SUBSTITUTION_BUNDLE_PLUGINS_DIR |
101 | 103 |
102 "rspfile", // SUBSTITUTION_RSP_FILE_NAME | 104 "rspfile", // SUBSTITUTION_RSP_FILE_NAME |
103 }; | 105 }; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 return (IsValidToolSubstitution(type) && type != SUBSTITUTION_OUTPUT) || | 188 return (IsValidToolSubstitution(type) && type != SUBSTITUTION_OUTPUT) || |
187 IsValidSourceSubstitution(type); | 189 IsValidSourceSubstitution(type); |
188 } | 190 } |
189 | 191 |
190 bool IsValidLinkerSubstitution(SubstitutionType type) { | 192 bool IsValidLinkerSubstitution(SubstitutionType type) { |
191 return IsValidToolSubstitution(type) || | 193 return IsValidToolSubstitution(type) || |
192 type == SUBSTITUTION_LINKER_INPUTS || | 194 type == SUBSTITUTION_LINKER_INPUTS || |
193 type == SUBSTITUTION_LINKER_INPUTS_NEWLINE || | 195 type == SUBSTITUTION_LINKER_INPUTS_NEWLINE || |
194 type == SUBSTITUTION_LDFLAGS || | 196 type == SUBSTITUTION_LDFLAGS || |
195 type == SUBSTITUTION_LIBS || | 197 type == SUBSTITUTION_LIBS || |
| 198 type == SUBSTITUTION_OUTPUT_DIR || |
196 type == SUBSTITUTION_OUTPUT_EXTENSION || | 199 type == SUBSTITUTION_OUTPUT_EXTENSION || |
197 type == SUBSTITUTION_SOLIBS; | 200 type == SUBSTITUTION_SOLIBS; |
198 } | 201 } |
199 | 202 |
200 bool IsValidLinkerOutputsSubstitution(SubstitutionType type) { | 203 bool IsValidLinkerOutputsSubstitution(SubstitutionType type) { |
201 // All valid compiler outputs plus the output extension. | 204 // All valid compiler outputs plus the output extension. |
202 return IsValidCompilerOutputsSubstitution(type) || | 205 return IsValidCompilerOutputsSubstitution(type) || |
| 206 type == SUBSTITUTION_OUTPUT_DIR || |
203 type == SUBSTITUTION_OUTPUT_EXTENSION; | 207 type == SUBSTITUTION_OUTPUT_EXTENSION; |
204 } | 208 } |
205 | 209 |
206 bool IsValidCopySubstitution(SubstitutionType type) { | 210 bool IsValidCopySubstitution(SubstitutionType type) { |
207 return IsValidToolSubstitution(type) || | 211 return IsValidToolSubstitution(type) || |
208 type == SUBSTITUTION_SOURCE; | 212 type == SUBSTITUTION_SOURCE; |
209 } | 213 } |
210 | 214 |
211 bool IsValidCompileXCassetsSubstitution(SubstitutionType type) { | 215 bool IsValidCompileXCassetsSubstitution(SubstitutionType type) { |
212 return IsValidToolSubstitution(type) || | 216 return IsValidToolSubstitution(type) || |
213 type == SUBSTITUTION_LINKER_INPUTS; | 217 type == SUBSTITUTION_LINKER_INPUTS; |
214 } | 218 } |
215 | 219 |
216 bool EnsureValidSourcesSubstitutions( | 220 bool EnsureValidSourcesSubstitutions( |
217 const std::vector<SubstitutionType>& types, | 221 const std::vector<SubstitutionType>& types, |
218 const ParseNode* origin, | 222 const ParseNode* origin, |
219 Err* err) { | 223 Err* err) { |
220 for (size_t i = 0; i < types.size(); i++) { | 224 for (size_t i = 0; i < types.size(); i++) { |
221 if (!IsValidSourceSubstitution(types[i])) { | 225 if (!IsValidSourceSubstitution(types[i])) { |
222 *err = Err(origin, "Invalid substitution type.", | 226 *err = Err(origin, "Invalid substitution type.", |
223 "The substitution " + std::string(kSubstitutionNames[types[i]]) + | 227 "The substitution " + std::string(kSubstitutionNames[types[i]]) + |
224 " isn't valid for something\n" | 228 " isn't valid for something\n" |
225 "operating on a source file such as this."); | 229 "operating on a source file such as this."); |
226 return false; | 230 return false; |
227 } | 231 } |
228 } | 232 } |
229 return true; | 233 return true; |
230 } | 234 } |
OLD | NEW |