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/build_settings.h" | 5 #include "tools/gn/build_settings.h" |
6 #include "tools/gn/functions.h" | 6 #include "tools/gn/functions.h" |
7 #include "tools/gn/parse_tree.h" | 7 #include "tools/gn/parse_tree.h" |
8 #include "tools/gn/settings.h" | 8 #include "tools/gn/settings.h" |
9 #include "tools/gn/substitution_writer.h" | 9 #include "tools/gn/substitution_writer.h" |
10 #include "tools/gn/target.h" | 10 #include "tools/gn/target.h" |
11 #include "tools/gn/value.h" | 11 #include "tools/gn/value.h" |
12 | 12 |
13 namespace functions { | 13 namespace functions { |
14 | 14 |
15 const char kGetTargetOutputs[] = "get_target_outputs"; | 15 const char kGetTargetOutputs[] = "get_target_outputs"; |
16 const char kGetTargetOutputs_HelpShort[] = | 16 const char kGetTargetOutputs_HelpShort[] = |
17 "get_target_outputs: [file list] Get the list of outputs from a target."; | 17 "get_target_outputs: [file list] Get the list of outputs from a target."; |
18 const char kGetTargetOutputs_Help[] = | 18 const char kGetTargetOutputs_Help[] = |
19 "get_target_outputs: [file list] Get the list of outputs from a target.\n" | 19 R"(get_target_outputs: [file list] Get the list of outputs from a target. |
20 "\n" | 20 |
21 " get_target_outputs(target_label)\n" | 21 get_target_outputs(target_label) |
22 "\n" | 22 |
23 " Returns a list of output files for the named target. The named target\n" | 23 Returns a list of output files for the named target. The named target must |
24 " must have been previously defined in the current file before this\n" | 24 have been previously defined in the current file before this function is |
25 " function is called (it can't reference targets in other files because\n" | 25 called (it can't reference targets in other files because there isn't a |
26 " there isn't a defined execution order, and it obviously can't\n" | 26 defined execution order, and it obviously can't reference targets that are |
27 " reference targets that are defined after the function call).\n" | 27 defined after the function call). |
28 "\n" | 28 |
29 " Only copy and action targets are supported. The outputs from binary\n" | 29 Only copy and action targets are supported. The outputs from binary targets |
30 " targets will depend on the toolchain definition which won't\n" | 30 will depend on the toolchain definition which won't necessarily have been |
31 " necessarily have been loaded by the time a given line of code has run,\n" | 31 loaded by the time a given line of code has run, and source sets and groups |
32 " and source sets and groups have no useful output file.\n" | 32 have no useful output file. |
33 "\n" | 33 |
34 "Return value\n" | 34 Return value |
35 "\n" | 35 |
36 " The names in the resulting list will be absolute file paths (normally\n" | 36 The names in the resulting list will be absolute file paths (normally like |
37 " like \"//out/Debug/bar.exe\", depending on the build directory).\n" | 37 "//out/Debug/bar.exe", depending on the build directory). |
38 "\n" | 38 |
39 " action targets: this will just return the files specified in the\n" | 39 action targets: this will just return the files specified in the "outputs" |
40 " \"outputs\" variable of the target.\n" | 40 variable of the target. |
41 "\n" | 41 |
42 " action_foreach targets: this will return the result of applying\n" | 42 action_foreach targets: this will return the result of applying the output |
43 " the output template to the sources (see \"gn help source_expansion\").\n" | 43 template to the sources (see "gn help source_expansion"). This will be the |
44 " This will be the same result (though with guaranteed absolute file\n" | 44 same result (though with guaranteed absolute file paths), as |
45 " paths), as process_file_template will return for those inputs\n" | 45 process_file_template will return for those inputs (see "gn help |
46 " (see \"gn help process_file_template\").\n" | 46 process_file_template"). |
47 "\n" | 47 |
48 " binary targets (executables, libraries): this will return a list\n" | 48 binary targets (executables, libraries): this will return a list of the |
49 " of the resulting binary file(s). The \"main output\" (the actual\n" | 49 resulting binary file(s). The "main output" (the actual binary or library) |
50 " binary or library) will always be the 0th element in the result.\n" | 50 will always be the 0th element in the result. Depending on the platform and |
51 " Depending on the platform and output type, there may be other output\n" | 51 output type, there may be other output files as well (like import libraries) |
52 " files as well (like import libraries) which will follow.\n" | 52 which will follow. |
53 "\n" | 53 |
54 " source sets and groups: this will return a list containing the path of\n" | 54 source sets and groups: this will return a list containing the path of the |
55 " the \"stamp\" file that Ninja will produce once all outputs are\n" | 55 "stamp" file that Ninja will produce once all outputs are generated. This |
56 " generated. This probably isn't very useful.\n" | 56 probably isn't very useful. |
57 "\n" | 57 |
58 "Example\n" | 58 Example |
59 "\n" | 59 |
60 " # Say this action generates a bunch of C source files.\n" | 60 # Say this action generates a bunch of C source files. |
61 " action_foreach(\"my_action\") {\n" | 61 action_foreach("my_action") { |
62 " sources = [ ... ]\n" | 62 sources = [ ... ] |
63 " outputs = [ ... ]\n" | 63 outputs = [ ... ] |
64 " }\n" | 64 } |
65 "\n" | 65 |
66 " # Compile the resulting source files into a source set.\n" | 66 # Compile the resulting source files into a source set. |
67 " source_set(\"my_lib\") {\n" | 67 source_set("my_lib") { |
68 " sources = get_target_outputs(\":my_action\")\n" | 68 sources = get_target_outputs(":my_action") |
69 " }\n"; | 69 } |
| 70 )"; |
70 | 71 |
71 Value RunGetTargetOutputs(Scope* scope, | 72 Value RunGetTargetOutputs(Scope* scope, |
72 const FunctionCallNode* function, | 73 const FunctionCallNode* function, |
73 const std::vector<Value>& args, | 74 const std::vector<Value>& args, |
74 Err* err) { | 75 Err* err) { |
75 if (args.size() != 1) { | 76 if (args.size() != 1) { |
76 *err = Err(function, "Expected one argument."); | 77 *err = Err(function, "Expected one argument."); |
77 return Value(); | 78 return Value(); |
78 } | 79 } |
79 | 80 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 // Convert to Values. | 132 // Convert to Values. |
132 Value ret(function, Value::LIST); | 133 Value ret(function, Value::LIST); |
133 ret.list_value().reserve(files.size()); | 134 ret.list_value().reserve(files.size()); |
134 for (const auto& file : files) | 135 for (const auto& file : files) |
135 ret.list_value().push_back(Value(function, file.value())); | 136 ret.list_value().push_back(Value(function, file.value())); |
136 | 137 |
137 return ret; | 138 return ret; |
138 } | 139 } |
139 | 140 |
140 } // namespace functions | 141 } // namespace functions |
OLD | NEW |