| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 "if you need to modify the whitelist."); | 56 "if you need to modify the whitelist."); |
| 57 return false; | 57 return false; |
| 58 } | 58 } |
| 59 | 59 |
| 60 } // namespace | 60 } // namespace |
| 61 | 61 |
| 62 const char kExecScript[] = "exec_script"; | 62 const char kExecScript[] = "exec_script"; |
| 63 const char kExecScript_HelpShort[] = | 63 const char kExecScript_HelpShort[] = |
| 64 "exec_script: Synchronously run a script and return the output."; | 64 "exec_script: Synchronously run a script and return the output."; |
| 65 const char kExecScript_Help[] = | 65 const char kExecScript_Help[] = |
| 66 "exec_script: Synchronously run a script and return the output.\n" | 66 R"(exec_script: Synchronously run a script and return the output. |
| 67 "\n" | 67 |
| 68 " exec_script(filename,\n" | 68 exec_script(filename, |
| 69 " arguments = [],\n" | 69 arguments = [], |
| 70 " input_conversion = \"\",\n" | 70 input_conversion = "", |
| 71 " file_dependencies = [])\n" | 71 file_dependencies = []) |
| 72 "\n" | 72 |
| 73 " Runs the given script, returning the stdout of the script. The build\n" | 73 Runs the given script, returning the stdout of the script. The build |
| 74 " generation will fail if the script does not exist or returns a nonzero\n" | 74 generation will fail if the script does not exist or returns a nonzero exit |
| 75 " exit code.\n" | 75 code. |
| 76 "\n" | 76 |
| 77 " The current directory when executing the script will be the root\n" | 77 The current directory when executing the script will be the root build |
| 78 " build directory. If you are passing file names, you will want to use\n" | 78 directory. If you are passing file names, you will want to use the |
| 79 " the rebase_path() function to make file names relative to this\n" | 79 rebase_path() function to make file names relative to this path (see "gn help |
| 80 " path (see \"gn help rebase_path\").\n" | 80 rebase_path"). |
| 81 "\n" | 81 |
| 82 "Arguments:\n" | 82 Arguments: |
| 83 "\n" | 83 |
| 84 " filename:\n" | 84 filename: |
| 85 " File name of python script to execute. Non-absolute names will\n" | 85 File name of python script to execute. Non-absolute names will be treated |
| 86 " be treated as relative to the current build file.\n" | 86 as relative to the current build file. |
| 87 "\n" | 87 |
| 88 " arguments:\n" | 88 arguments: |
| 89 " A list of strings to be passed to the script as arguments.\n" | 89 A list of strings to be passed to the script as arguments. May be |
| 90 " May be unspecified or the empty list which means no arguments.\n" | 90 unspecified or the empty list which means no arguments. |
| 91 "\n" | 91 |
| 92 " input_conversion:\n" | 92 input_conversion: |
| 93 " Controls how the file is read and parsed.\n" | 93 Controls how the file is read and parsed. See "gn help input_conversion". |
| 94 " See \"gn help input_conversion\".\n" | 94 |
| 95 "\n" | 95 If unspecified, defaults to the empty string which causes the script |
| 96 " If unspecified, defaults to the empty string which causes the\n" | 96 result to be discarded. exec script will return None. |
| 97 " script result to be discarded. exec script will return None.\n" | 97 |
| 98 "\n" | 98 dependencies: |
| 99 " dependencies:\n" | 99 (Optional) A list of files that this script reads or otherwise depends |
| 100 " (Optional) A list of files that this script reads or otherwise\n" | 100 on. These dependencies will be added to the build result such that if any |
| 101 " depends on. These dependencies will be added to the build result\n" | 101 of them change, the build will be regenerated and the script will be |
| 102 " such that if any of them change, the build will be regenerated and\n" | 102 re-run. |
| 103 " the script will be re-run.\n" | 103 |
| 104 "\n" | 104 The script itself will be an implicit dependency so you do not need to |
| 105 " The script itself will be an implicit dependency so you do not\n" | 105 list it. |
| 106 " need to list it.\n" | 106 |
| 107 "\n" | 107 Example |
| 108 "Example:\n" | 108 |
| 109 "\n" | 109 all_lines = exec_script( |
| 110 " all_lines = exec_script(\n" | 110 "myscript.py", [some_input], "list lines", |
| 111 " \"myscript.py\", [some_input], \"list lines\",\n" | 111 [ rebase_path("data_file.txt", root_build_dir) ]) |
| 112 " [ rebase_path(\"data_file.txt\", root_build_dir) ])\n" | 112 |
| 113 "\n" | 113 # This example just calls the script with no arguments and discards the |
| 114 " # This example just calls the script with no arguments and discards\n" | 114 # result. |
| 115 " # the result.\n" | 115 exec_script("//foo/bar/myscript.py") |
| 116 " exec_script(\"//foo/bar/myscript.py\")\n"; | 116 )"; |
| 117 | 117 |
| 118 Value RunExecScript(Scope* scope, | 118 Value RunExecScript(Scope* scope, |
| 119 const FunctionCallNode* function, | 119 const FunctionCallNode* function, |
| 120 const std::vector<Value>& args, | 120 const std::vector<Value>& args, |
| 121 Err* err) { | 121 Err* err) { |
| 122 if (args.size() < 1 || args.size() > 4) { | 122 if (args.size() < 1 || args.size() > 4) { |
| 123 *err = Err(function->function(), "Wrong number of arguments to exec_script", | 123 *err = Err(function->function(), "Wrong number of arguments to exec_script", |
| 124 "I expected between one and four arguments."); | 124 "I expected between one and four arguments."); |
| 125 return Value(); | 125 return Value(); |
| 126 } | 126 } |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 msg); | 249 msg); |
| 250 return Value(); | 250 return Value(); |
| 251 } | 251 } |
| 252 | 252 |
| 253 // Default to None value for the input conversion if unspecified. | 253 // Default to None value for the input conversion if unspecified. |
| 254 return ConvertInputToValue(scope->settings(), output, function, | 254 return ConvertInputToValue(scope->settings(), output, function, |
| 255 args.size() >= 3 ? args[2] : Value(), err); | 255 args.size() >= 3 ? args[2] : Value(), err); |
| 256 } | 256 } |
| 257 | 257 |
| 258 } // namespace functions | 258 } // namespace functions |
| OLD | NEW |