| 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 | 
|---|