| 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/args.h" | 5 #include "tools/gn/args.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "tools/gn/variables.h" | 8 #include "tools/gn/variables.h" |
| 9 | 9 |
| 10 #if defined(OS_WIN) | 10 #if defined(OS_WIN) |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 const Value* Args::GetArgOverride(const char* name) const { | 86 const Value* Args::GetArgOverride(const char* name) const { |
| 87 base::AutoLock lock(lock_); | 87 base::AutoLock lock(lock_); |
| 88 | 88 |
| 89 Scope::KeyValueMap::const_iterator found = | 89 Scope::KeyValueMap::const_iterator found = |
| 90 all_overrides_.find(base::StringPiece(name)); | 90 all_overrides_.find(base::StringPiece(name)); |
| 91 if (found == all_overrides_.end()) | 91 if (found == all_overrides_.end()) |
| 92 return NULL; | 92 return NULL; |
| 93 return &found->second; | 93 return &found->second; |
| 94 } | 94 } |
| 95 | 95 |
| 96 Scope::KeyValueMap Args::GetAllOverrides() const { |
| 97 base::AutoLock lock(lock_); |
| 98 return all_overrides_; |
| 99 } |
| 100 |
| 96 void Args::SetupRootScope(Scope* dest, | 101 void Args::SetupRootScope(Scope* dest, |
| 97 const Scope::KeyValueMap& toolchain_overrides) const { | 102 const Scope::KeyValueMap& toolchain_overrides) const { |
| 98 base::AutoLock lock(lock_); | 103 base::AutoLock lock(lock_); |
| 99 | 104 |
| 100 SetSystemVarsLocked(dest); | 105 SetSystemVarsLocked(dest); |
| 101 ApplyOverridesLocked(overrides_, dest); | 106 ApplyOverridesLocked(overrides_, dest); |
| 102 ApplyOverridesLocked(toolchain_overrides, dest); | 107 ApplyOverridesLocked(toolchain_overrides, dest); |
| 103 SaveOverrideRecordLocked(toolchain_overrides); | 108 SaveOverrideRecordLocked(toolchain_overrides); |
| 104 } | 109 } |
| 105 | 110 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 scope_to_set->SetValue(i->first, i->second, i->second.origin()); | 162 scope_to_set->SetValue(i->first, i->second, i->second.origin()); |
| 158 scope_to_set->MarkUsed(i->first); | 163 scope_to_set->MarkUsed(i->first); |
| 159 } | 164 } |
| 160 } | 165 } |
| 161 | 166 |
| 162 return true; | 167 return true; |
| 163 } | 168 } |
| 164 | 169 |
| 165 bool Args::VerifyAllOverridesUsed(Err* err) const { | 170 bool Args::VerifyAllOverridesUsed(Err* err) const { |
| 166 base::AutoLock lock(lock_); | 171 base::AutoLock lock(lock_); |
| 172 return VerifyAllOverridesUsed(all_overrides_, declared_arguments_, err); |
| 173 } |
| 167 | 174 |
| 168 for (Scope::KeyValueMap::const_iterator i = all_overrides_.begin(); | 175 bool Args::VerifyAllOverridesUsed( |
| 169 i != all_overrides_.end(); ++i) { | 176 const Scope::KeyValueMap& overrides, |
| 170 if (declared_arguments_.find(i->first) == declared_arguments_.end()) { | 177 const Scope::KeyValueMap& declared_arguments, |
| 178 Err* err) { |
| 179 for (Scope::KeyValueMap::const_iterator i = overrides.begin(); |
| 180 i != overrides.end(); ++i) { |
| 181 if (declared_arguments.find(i->first) == declared_arguments.end()) { |
| 171 // Get a list of all possible overrides for help with error finding. | 182 // Get a list of all possible overrides for help with error finding. |
| 172 // | 183 // |
| 173 // It might be nice to do edit distance checks to see if we can find one | 184 // It might be nice to do edit distance checks to see if we can find one |
| 174 // close to what you typed. | 185 // close to what you typed. |
| 175 std::string all_declared_str; | 186 std::string all_declared_str; |
| 176 for (Scope::KeyValueMap::const_iterator cur_str = | 187 for (Scope::KeyValueMap::const_iterator cur_str = |
| 177 declared_arguments_.begin(); | 188 declared_arguments.begin(); |
| 178 cur_str != declared_arguments_.end(); ++cur_str) { | 189 cur_str != declared_arguments.end(); ++cur_str) { |
| 179 if (cur_str != declared_arguments_.begin()) | 190 if (cur_str != declared_arguments.begin()) |
| 180 all_declared_str += ", "; | 191 all_declared_str += ", "; |
| 181 all_declared_str += cur_str->first.as_string(); | 192 all_declared_str += cur_str->first.as_string(); |
| 182 } | 193 } |
| 183 | 194 |
| 184 *err = Err(i->second.origin(), "Build argument has no effect.", | 195 *err = Err(i->second.origin(), "Build argument has no effect.", |
| 185 "The variable \"" + i->first.as_string() + "\" was set as a build " | 196 "The variable \"" + i->first.as_string() + "\" was set as a build " |
| 186 "argument\nbut never appeared in a declare_args() block in any " | 197 "argument\nbut never appeared in a declare_args() block in any " |
| 187 "buildfile.\n\nPossible arguments: " + all_declared_str); | 198 "buildfile.\n\nPossible arguments: " + all_declared_str); |
| 188 return false; | 199 return false; |
| 189 } | 200 } |
| 190 } | 201 } |
| 191 return true; | 202 return true; |
| 192 } | 203 } |
| 193 | 204 |
| 205 void Args::MergeDeclaredArguments(Scope::KeyValueMap* dest) const { |
| 206 base::AutoLock lock(lock_); |
| 207 |
| 208 for (Scope::KeyValueMap::const_iterator i = declared_arguments_.begin(); |
| 209 i != declared_arguments_.end(); ++i) |
| 210 (*dest)[i->first] = i->second; |
| 211 } |
| 212 |
| 194 void Args::SetSystemVarsLocked(Scope* dest) const { | 213 void Args::SetSystemVarsLocked(Scope* dest) const { |
| 214 lock_.AssertAcquired(); |
| 215 |
| 195 // Host OS. | 216 // Host OS. |
| 196 const char* os = NULL; | 217 const char* os = NULL; |
| 197 #if defined(OS_WIN) | 218 #if defined(OS_WIN) |
| 198 os = "win"; | 219 os = "win"; |
| 199 #elif defined(OS_MACOSX) | 220 #elif defined(OS_MACOSX) |
| 200 os = "mac"; | 221 os = "mac"; |
| 201 #elif defined(OS_LINUX) | 222 #elif defined(OS_LINUX) |
| 202 os = "linux"; | 223 os = "linux"; |
| 203 #else | 224 #else |
| 204 #error Unknown OS type. | 225 #error Unknown OS type. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 // Mark these variables used so the build config file can override them | 278 // Mark these variables used so the build config file can override them |
| 258 // without geting a warning about overwriting an unused variable. | 279 // without geting a warning about overwriting an unused variable. |
| 259 declared_arguments_[variables::kOs] = os_val; | 280 declared_arguments_[variables::kOs] = os_val; |
| 260 declared_arguments_[variables::kCpuArch] = arch_val; | 281 declared_arguments_[variables::kCpuArch] = arch_val; |
| 261 dest->MarkUsed(variables::kCpuArch); | 282 dest->MarkUsed(variables::kCpuArch); |
| 262 dest->MarkUsed(variables::kOs); | 283 dest->MarkUsed(variables::kOs); |
| 263 } | 284 } |
| 264 | 285 |
| 265 void Args::ApplyOverridesLocked(const Scope::KeyValueMap& values, | 286 void Args::ApplyOverridesLocked(const Scope::KeyValueMap& values, |
| 266 Scope* scope) const { | 287 Scope* scope) const { |
| 288 lock_.AssertAcquired(); |
| 267 for (Scope::KeyValueMap::const_iterator i = values.begin(); | 289 for (Scope::KeyValueMap::const_iterator i = values.begin(); |
| 268 i != values.end(); ++i) | 290 i != values.end(); ++i) |
| 269 scope->SetValue(i->first, i->second, i->second.origin()); | 291 scope->SetValue(i->first, i->second, i->second.origin()); |
| 270 } | 292 } |
| 271 | 293 |
| 272 void Args::SaveOverrideRecordLocked(const Scope::KeyValueMap& values) const { | 294 void Args::SaveOverrideRecordLocked(const Scope::KeyValueMap& values) const { |
| 295 lock_.AssertAcquired(); |
| 273 for (Scope::KeyValueMap::const_iterator i = values.begin(); | 296 for (Scope::KeyValueMap::const_iterator i = values.begin(); |
| 274 i != values.end(); ++i) | 297 i != values.end(); ++i) |
| 275 all_overrides_[i->first] = i->second; | 298 all_overrides_[i->first] = i->second; |
| 276 } | 299 } |
| OLD | NEW |