| 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 #ifndef TOOLS_GN_ARGS_H_ | 5 #ifndef TOOLS_GN_ARGS_H_ |
| 6 #define TOOLS_GN_ARGS_H_ | 6 #define TOOLS_GN_ARGS_H_ |
| 7 | 7 |
| 8 #include "base/containers/hash_tables.h" | 8 #include "base/containers/hash_tables.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 void AddArgOverrides(const Scope::KeyValueMap& overrides); | 33 void AddArgOverrides(const Scope::KeyValueMap& overrides); |
| 34 | 34 |
| 35 // Returns the value corresponding to the given argument name, or NULL if no | 35 // Returns the value corresponding to the given argument name, or NULL if no |
| 36 // argument is set. | 36 // argument is set. |
| 37 const Value* GetArgOverride(const char* name) const; | 37 const Value* GetArgOverride(const char* name) const; |
| 38 | 38 |
| 39 // Gets all overrides set on the build. | 39 // Gets all overrides set on the build. |
| 40 Scope::KeyValueMap GetAllOverrides() const; | 40 Scope::KeyValueMap GetAllOverrides() const; |
| 41 | 41 |
| 42 // Sets up the root scope for a toolchain. This applies the default system | 42 // Sets up the root scope for a toolchain. This applies the default system |
| 43 // flags, then any overrides stored in this object, then applies any | 43 // flags and saves the toolchain overrides so they can be applied to |
| 44 // toolchain overrides specified in the argument. | 44 // declare_args blocks that appear when loading files in that toolchain. |
| 45 void SetupRootScope(Scope* dest, | 45 void SetupRootScope(Scope* dest, |
| 46 const Scope::KeyValueMap& toolchain_overrides) const; | 46 const Scope::KeyValueMap& toolchain_overrides) const; |
| 47 | 47 |
| 48 // Sets up the given scope with arguments passed in. | 48 // Sets up the given scope with arguments passed in. |
| 49 // | 49 // |
| 50 // If the values specified in the args are not already set, the values in | 50 // If the values specified in the args are not already set, the values in |
| 51 // the args list will be used (which are assumed to be the defaults), but | 51 // the args list will be used (which are assumed to be the defaults), but |
| 52 // they will not override the system defaults or the current overrides. | 52 // they will not override the system defaults or the current overrides. |
| 53 // | 53 // |
| 54 // All args specified in the input will be marked as "used". | 54 // All args specified in the input will be marked as "used". |
| 55 // | 55 // |
| 56 // On failure, the err will be set and it will return false. | 56 // On failure, the err will be set and it will return false. |
| 57 bool DeclareArgs(const Scope::KeyValueMap& args, | 57 bool DeclareArgs(const Scope::KeyValueMap& args, |
| 58 Scope* scope_to_set, | 58 Scope* scope_to_set, |
| 59 Err* err) const; | 59 Err* err) const; |
| 60 | 60 |
| 61 // Checks to see if any of the overrides ever used were never declared as | 61 // Checks to see if any of the overrides ever used were never declared as |
| 62 // arguments. If there are, this returns false and sets the error. | 62 // arguments. If there are, this returns false and sets the error. |
| 63 bool VerifyAllOverridesUsed(Err* err) const; | 63 bool VerifyAllOverridesUsed(Err* err) const; |
| 64 | 64 |
| 65 // Adds all declared arguments to the given output list. If the values exist | 65 // Adds all declared arguments to the given output list. If the values exist |
| 66 // in the list already, their values will be overwriten, but other values | 66 // in the list already, their values will be overwriten, but other values |
| 67 // already in the list will remain. | 67 // already in the list will remain. |
| 68 void MergeDeclaredArguments(Scope::KeyValueMap* dest) const; | 68 void MergeDeclaredArguments(Scope::KeyValueMap* dest) const; |
| 69 | 69 |
| 70 private: | 70 private: |
| 71 using DeclaredArgumentsPerToolchain = | 71 using ArgumentsPerToolchain = |
| 72 base::hash_map<const Settings*, Scope::KeyValueMap>; | 72 base::hash_map<const Settings*, Scope::KeyValueMap>; |
| 73 | 73 |
| 74 // Sets the default config based on the current system. | 74 // Sets the default config based on the current system. |
| 75 void SetSystemVarsLocked(Scope* scope) const; | 75 void SetSystemVarsLocked(Scope* scope) const; |
| 76 | 76 |
| 77 // Sets the given vars on the given scope. | 77 // Sets the given already declared vars on the given scope. |
| 78 void ApplyOverridesLocked(const Scope::KeyValueMap& values, | 78 void ApplyOverridesLocked(const Scope::KeyValueMap& values, |
| 79 Scope* scope) const; | 79 Scope* scope) const; |
| 80 | 80 |
| 81 void SaveOverrideRecordLocked(const Scope::KeyValueMap& values) const; | 81 void SaveOverrideRecordLocked(const Scope::KeyValueMap& values) const; |
| 82 | 82 |
| 83 // Returns the KeyValueMap used for arguments declared for the specified | 83 // Returns the KeyValueMap used for arguments declared for the specified |
| 84 // toolchain. | 84 // toolchain. |
| 85 Scope::KeyValueMap& DeclaredArgumentsForToolchainLocked(Scope* scope) const; | 85 Scope::KeyValueMap& DeclaredArgumentsForToolchainLocked(Scope* scope) const; |
| 86 | 86 |
| 87 // Returns the KeyValueMap used for overrides for the specified |
| 88 // toolchain. |
| 89 Scope::KeyValueMap& OverridesForToolchainLocked(Scope* scope) const; |
| 90 |
| 87 // Since this is called during setup which we assume is single-threaded, | 91 // Since this is called during setup which we assume is single-threaded, |
| 88 // this is not protected by the lock. It should be set only during init. | 92 // this is not protected by the lock. It should be set only during init. |
| 89 Scope::KeyValueMap overrides_; | 93 Scope::KeyValueMap overrides_; |
| 90 | 94 |
| 91 mutable base::Lock lock_; | 95 mutable base::Lock lock_; |
| 92 | 96 |
| 93 // Maintains a list of all overrides we've ever seen. This is the main | 97 // Maintains a list of all overrides we've ever seen. This is the main |
| 94 // |overrides_| as well as toolchain overrides. Tracking this allows us to | 98 // |overrides_| as well as toolchain overrides. Tracking this allows us to |
| 95 // check for overrides that were specified but never used. | 99 // check for overrides that were specified but never used. |
| 96 mutable Scope::KeyValueMap all_overrides_; | 100 mutable Scope::KeyValueMap all_overrides_; |
| 97 | 101 |
| 98 // Maps from Settings (which corresponds to a toolchain) to the map of | 102 // Maps from Settings (which corresponds to a toolchain) to the map of |
| 99 // declared variables. This is used to tracks all variables declared in any | 103 // declared variables. This is used to tracks all variables declared in any |
| 100 // buildfile. This is so we can see if the user set variables on the command | 104 // buildfile. This is so we can see if the user set variables on the command |
| 101 // line that are not used anywhere. Each map is toolchain specific as each | 105 // line that are not used anywhere. Each map is toolchain specific as each |
| 102 // toolchain may define variables in different locations. | 106 // toolchain may define variables in different locations. |
| 103 mutable DeclaredArgumentsPerToolchain declared_arguments_per_toolchain_; | 107 mutable ArgumentsPerToolchain declared_arguments_per_toolchain_; |
| 108 |
| 109 // Overrides for individual toolchains. This is necessary so we |
| 110 // can apply the correct override for the current toolchain, once |
| 111 // we see an argument declaration. |
| 112 mutable ArgumentsPerToolchain toolchain_overrides_; |
| 104 | 113 |
| 105 DISALLOW_ASSIGN(Args); | 114 DISALLOW_ASSIGN(Args); |
| 106 }; | 115 }; |
| 107 | 116 |
| 108 #endif // TOOLS_GN_ARGS_H_ | 117 #endif // TOOLS_GN_ARGS_H_ |
| OLD | NEW |