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 "tools/gn/err.h" | 5 #include "tools/gn/err.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/scope.h" | 8 #include "tools/gn/scope.h" |
9 | 9 |
10 namespace functions { | 10 namespace functions { |
11 | 11 |
12 const char kSetDefaults[] = "set_defaults"; | 12 const char kSetDefaults[] = "set_defaults"; |
13 const char kSetDefaults_HelpShort[] = | 13 const char kSetDefaults_HelpShort[] = |
14 "set_defaults: Set default values for a target type."; | 14 "set_defaults: Set default values for a target type."; |
15 const char kSetDefaults_Help[] = | 15 const char kSetDefaults_Help[] = |
16 "set_defaults: Set default values for a target type.\n" | 16 R"(set_defaults: Set default values for a target type. |
17 "\n" | 17 |
18 " set_defaults(<target_type_name>) { <values...> }\n" | 18 set_defaults(<target_type_name>) { <values...> } |
19 "\n" | 19 |
20 " Sets the default values for a given target type. Whenever\n" | 20 Sets the default values for a given target type. Whenever target_type_name is |
21 " target_type_name is seen in the future, the values specified in\n" | 21 seen in the future, the values specified in set_default's block will be |
22 " set_default's block will be copied into the current scope.\n" | 22 copied into the current scope. |
23 "\n" | 23 |
24 " When the target type is used, the variable copying is very strict.\n" | 24 When the target type is used, the variable copying is very strict. If a |
25 " If a variable with that name is already in scope, the build will fail\n" | 25 variable with that name is already in scope, the build will fail with an |
26 " with an error.\n" | 26 error. |
27 "\n" | 27 |
28 " set_defaults can be used for built-in target types (\"executable\",\n" | 28 set_defaults can be used for built-in target types ("executable", |
29 " \"shared_library\", etc.) and custom ones defined via the \"template\"\n" | 29 "shared_library", etc.) and custom ones defined via the "template" command. |
30 " command. It can be called more than once and the most recent call in\n" | 30 It can be called more than once and the most recent call in any scope will |
31 " any scope will apply, but there is no way to refer to the previous\n" | 31 apply, but there is no way to refer to the previous defaults and modify them |
32 " defaults and modify them (each call to set_defaults must supply a\n" | 32 (each call to set_defaults must supply a complete list of all defaults it |
33 " complete list of all defaults it wants). If you want to share\n" | 33 wants). If you want to share defaults, store them in a separate variable. |
34 " defaults, store them in a separate variable.\n" | 34 |
35 "\n" | 35 Example |
36 "Example\n" | 36 |
37 "\n" | 37 set_defaults("static_library") { |
38 " set_defaults(\"static_library\") {\n" | 38 configs = [ "//tools/mything:settings" ] |
39 " configs = [ \"//tools/mything:settings\" ]\n" | 39 } |
40 " }\n" | 40 |
41 "\n" | 41 static_library("mylib") |
42 " static_library(\"mylib\")\n" | 42 # The configs will be auto-populated as above. You can remove it if |
43 " # The configs will be auto-populated as above. You can remove it if\n" | 43 # you don't want the default for a particular default: |
44 " # you don't want the default for a particular default:\n" | 44 configs -= [ "//tools/mything:settings" ] |
45 " configs -= \"//tools/mything:settings\"\n" | 45 } |
46 " }\n"; | 46 )"; |
47 | 47 |
48 Value RunSetDefaults(Scope* scope, | 48 Value RunSetDefaults(Scope* scope, |
49 const FunctionCallNode* function, | 49 const FunctionCallNode* function, |
50 const std::vector<Value>& args, | 50 const std::vector<Value>& args, |
51 BlockNode* block, | 51 BlockNode* block, |
52 Err* err) { | 52 Err* err) { |
53 if (!EnsureSingleStringArg(function, args, err)) | 53 if (!EnsureSingleStringArg(function, args, err)) |
54 return Value(); | 54 return Value(); |
55 const std::string& target_type(args[0].string_value()); | 55 const std::string& target_type(args[0].string_value()); |
56 | 56 |
(...skipping 10 matching lines...) Expand all Loading... |
67 | 67 |
68 // Now copy the values set on the scope we made into the free-floating one | 68 // Now copy the values set on the scope we made into the free-floating one |
69 // (with no containing scope) used to hold the target defaults. | 69 // (with no containing scope) used to hold the target defaults. |
70 Scope* dest = scope->MakeTargetDefaults(target_type); | 70 Scope* dest = scope->MakeTargetDefaults(target_type); |
71 block_scope.NonRecursiveMergeTo(dest, Scope::MergeOptions(), function, | 71 block_scope.NonRecursiveMergeTo(dest, Scope::MergeOptions(), function, |
72 "<SHOULD NOT FAIL>", err); | 72 "<SHOULD NOT FAIL>", err); |
73 return Value(); | 73 return Value(); |
74 } | 74 } |
75 | 75 |
76 } // namespace functions | 76 } // namespace functions |
OLD | NEW |