Chromium Code Reviews| 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/functions.h" | 5 #include "tools/gn/functions.h" |
| 6 | 6 |
| 7 #include "tools/gn/config_values_generator.h" | 7 #include "tools/gn/config_values_generator.h" |
| 8 #include "tools/gn/err.h" | 8 #include "tools/gn/err.h" |
| 9 #include "tools/gn/parse_tree.h" | 9 #include "tools/gn/parse_tree.h" |
| 10 #include "tools/gn/scope.h" | 10 #include "tools/gn/scope.h" |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 240 BlockNode* block, | 240 BlockNode* block, |
| 241 Err* err) { | 241 Err* err) { |
| 242 return ExecuteGenericTarget(functions::kActionForEach, scope, function, args, | 242 return ExecuteGenericTarget(functions::kActionForEach, scope, function, args, |
| 243 block, err); | 243 block, err); |
| 244 } | 244 } |
| 245 | 245 |
| 246 // bundle_data ----------------------------------------------------------------- | 246 // bundle_data ----------------------------------------------------------------- |
| 247 | 247 |
| 248 const char kBundleData[] = "bundle_data"; | 248 const char kBundleData[] = "bundle_data"; |
| 249 const char kBundleData_HelpShort[] = | 249 const char kBundleData_HelpShort[] = |
| 250 "bundle_data: Declare a target without output."; | 250 "bundle_data: [iOS/OS X] Declare a target without output."; |
| 251 const char kBundleData_Help[] = | 251 const char kBundleData_Help[] = |
| 252 "bundle_data: Declare a target without output.\n" | 252 "bundle_data: [iOS/OS X] Declare a target without output.\n" |
| 253 "\n" | 253 "\n" |
| 254 " This target type allows to declare data that is required at runtime.\n" | 254 " This target type allows to declare data that is required at runtime.\n" |
| 255 " It is used to inform \"create_bundle\" targets of the files to copy\n" | 255 " It is used to inform \"create_bundle\" targets of the files to copy\n" |
| 256 " into generated bundle, see \"gn help create_bundle\" for help.\n"; | 256 " into generated bundle, see \"gn help create_bundle\" for help.\n" |
| 257 "\n" | |
| 258 " The target must define a list of files as \"sources\" and a single\n" | |
| 259 " \"outputs\". If there are multiple files, source patterns can be used.\n" | |
|
brettw
2016/03/07 21:57:30
"If there are multiple files, source patterns can
sdefresne
2016/03/08 14:33:31
Done.
| |
| 260 " All the output path needs to be relative to {{bundle_root_dir}}.\n" | |
|
brettw
2016/03/07 21:57:30
This should either say "the output is treated as r
sdefresne
2016/03/08 14:33:30
Done.
| |
| 261 "\n" | |
| 262 " This target can be used on all platforms though it is designed only to\n" | |
| 263 " generate iOS/OS X bundle. It is advised to put it behind \"is_ios\" or\n" | |
| 264 " \"is_mac\" tests.\n" | |
| 265 "\n" | |
| 266 " See \"gn help create_bundle\" for more information.\n" | |
| 267 "\n" | |
| 268 "Variables\n" | |
| 269 "\n" | |
| 270 " sources*, outputs*, deps, data_deps, public_deps, visibility\n" | |
| 271 " * = required\n" | |
| 272 "\n" | |
| 273 "Examples\n" | |
| 274 "\n" | |
| 275 " bundle_data(\"icudata\") {\n" | |
| 276 " sources = [ \"sources/data/in/icudtl.dat\" ]\n" | |
| 277 " outputs = [ \"{{bundle_resources_dir}}/{{source_file_part}}\" ]\n" | |
| 278 " }\n" | |
| 279 "\n" | |
| 280 " bundle_data(\"base_unittests_bundle_data]\") {\n" | |
| 281 " sources = [ \"test/data\" ]\n" | |
| 282 " outputs = [\n" | |
| 283 " \"{{bundle_resources_dir}}/{{source_root_relative_dir}}/\" +\n" | |
| 284 " \"{{source_file_part}}\"\n" | |
| 285 " ]\n" | |
| 286 " }\n" | |
| 287 "\n" | |
| 288 " bundle_data(\"material_typography_bundle_data\") {\n" | |
| 289 " sources = [\n" | |
| 290 " \"src/MaterialTypography.bundle/Roboto-Black.ttf\",\n" | |
| 291 " \"src/MaterialTypography.bundle/Roboto-BlackItalic.ttf\",\n" | |
|
brettw
2016/03/07 21:57:30
I think 2-4 ttf files should be enough for this ex
sdefresne
2016/03/08 14:33:31
Ack.
| |
| 292 " \"src/MaterialTypography.bundle/Roboto-Bold.ttf\",\n" | |
| 293 " \"src/MaterialTypography.bundle/Roboto-BoldItalic.ttf\",\n" | |
| 294 " \"src/MaterialTypography.bundle/Roboto-Italic.ttf\",\n" | |
| 295 " \"src/MaterialTypography.bundle/Roboto-Light.ttf\",\n" | |
| 296 " \"src/MaterialTypography.bundle/Roboto-LightItalic.ttf\",\n" | |
| 297 " \"src/MaterialTypography.bundle/Roboto-Medium.ttf\",\n" | |
| 298 " \"src/MaterialTypography.bundle/Roboto-MediumItalic.ttf\",\n" | |
| 299 " \"src/MaterialTypography.bundle/Roboto-Regular.ttf\",\n" | |
| 300 " \"src/MaterialTypography.bundle/Roboto-Thin.ttf\",\n" | |
| 301 " \"src/MaterialTypography.bundle/Roboto-ThinItalic.ttf\",\n" | |
| 302 " ]\n" | |
| 303 " outputs = [\n" | |
| 304 " \"{{bundle_resources_dir}}/MaterialTypography.bundle/\"\n" | |
| 305 " \"{{source_file_part}}\"\n" | |
| 306 " ]\n" | |
| 307 " }\n"; | |
| 257 | 308 |
| 258 Value RunBundleData(Scope* scope, | 309 Value RunBundleData(Scope* scope, |
| 259 const FunctionCallNode* function, | 310 const FunctionCallNode* function, |
| 260 const std::vector<Value>& args, | 311 const std::vector<Value>& args, |
| 261 BlockNode* block, | 312 BlockNode* block, |
| 262 Err* err) { | 313 Err* err) { |
| 263 return ExecuteGenericTarget(functions::kBundleData, scope, function, args, | 314 return ExecuteGenericTarget(functions::kBundleData, scope, function, args, |
| 264 block, err); | 315 block, err); |
| 265 } | 316 } |
| 266 | 317 |
| 318 // create_bundle --------------------------------------------------------------- | |
| 319 | |
| 320 const char kCreateBundle[] = "create_bundle"; | |
| 321 const char kCreateBundle_HelpShort[] = | |
| 322 "create_bundle: [iOS/OS X] Build an OS X / iOS bundle."; | |
| 323 const char kCreateBundle_Help[] = | |
| 324 "create_bundle: [iOS/OS X] Build an OS X / iOS bundle.\n" | |
| 325 "\n" | |
| 326 " This target generates an iOS/OS X bundle (which is a directory with a\n" | |
| 327 " well know structure). This target does not define any sources, instead\n" | |
|
brettw
2016/03/07 21:57:30
"well know" -> "well-known"
sdefresne
2016/03/08 14:33:30
Done.
| |
| 328 " they are computed from all \"bundle_data\" target this one depends on\n" | |
| 329 " transitively (the recursion stops at each \"create_bundle\" targets).\n" | |
|
brettw
2016/03/07 21:57:30
Remove "each"
sdefresne
2016/03/08 14:33:31
Done.
| |
| 330 "\n" | |
| 331 " This target needs to define the value used for the expansion of the\n" | |
|
brettw
2016/03/07 21:57:30
Can you express this a different way? I found this
sdefresne
2016/03/08 14:33:30
Is it better now?
| |
| 332 " patterns used in \"bundle_data\" target via the property with the same\n" | |
| 333 " name, i.e. \"bundle_root_dir\" correspond to {{bundle_root_dir}}, etc.\n" | |
| 334 "\n" | |
| 335 " This target can be used on all platforms though it is designed only to\n" | |
| 336 " generate iOS/OS X bundle. It is advised to put it behind \"is_ios\" or\n" | |
|
brettw
2016/03/07 21:57:30
is_ios and is_mac aren't built-in variables (they'
sdefresne
2016/03/08 14:33:30
Done.
| |
| 337 " \"is_mac\" tests.\n" | |
| 338 "\n" | |
| 339 "Variables\n" | |
| 340 "\n" | |
| 341 " bundle_root_dir*, bundle_resources_dir*, bundle_executable_dir*,\n" | |
| 342 " bundle_plugins_dir*, deps, data_deps, public_deps, visibility\n" | |
| 343 " * = required\n" | |
| 344 "\n" | |
| 345 "Example\n" | |
| 346 "\n" | |
| 347 " # Defines a template to create an application. On most platform, this\n" | |
| 348 " # is just an alias for an \"executable\" target, but on iOS/OS X, it\n" | |
| 349 " # builds an application bundle.\n" | |
| 350 " template(\"app\") {\n" | |
| 351 " if (!is_ios && !is_mac) {\n" | |
| 352 " executable(target_name) {\n" | |
| 353 " forward_variables_from(invoker, \"*\")\n" | |
| 354 " }\n" | |
| 355 " } else {\n" | |
| 356 " app_name = target_name\n" | |
| 357 " gen_path = target_gen_dir\n" | |
| 358 "\n" | |
| 359 " action(\"${app_name}_generate_info_plist\") {\n" | |
| 360 " script = [ \"//build/ios/ios_gen_plist.py\" ]\n" | |
| 361 " sources = [ \"templates/Info.plist\" ]\n" | |
| 362 " outputs = [ \"$gen_path/Info.plist\" ]\n" | |
| 363 " args = rebase_path(sources, root_build_dir) +\n" | |
| 364 " rebase_path(outputs, root_build_dir)\n" | |
| 365 " }\n" | |
| 366 "\n" | |
| 367 " bundle_data(\"${app_name}_bundle_info_plist\") {\n" | |
| 368 " deps = [ \":${app_name}_generate_info_plist\" ]\n" | |
| 369 " sources = [ \"$gen_path/Info.plist\" ]\n" | |
| 370 " outputs = [ \"{{bundle_root_dir}}/Info.plist\" ]\n" | |
| 371 " }\n" | |
| 372 "\n" | |
| 373 " executable(\"${app_name}_generate_executable\") {\n" | |
| 374 " forward_variables_from(invoker, \"*\", [\n" | |
| 375 " \"output_name\",\n" | |
| 376 " \"visibility\",\n" | |
| 377 " ])\n" | |
| 378 " output_name =\n" | |
| 379 " rebase_path(\"$gen_path/$app_name\", root_build_dir)\n" | |
| 380 " }\n" | |
| 381 "\n" | |
| 382 " bundle_data(\"${app_name}_bundle_executable\") {\n" | |
| 383 " deps = [ \":${app_name}_generate_executable\" ]\n" | |
| 384 " sources = [ \"$gen_path/$app_name\" ]\n" | |
| 385 " outputs = [ \"{{bundle_executable_dir}}/$app_name\" ]\n" | |
| 386 " }\n" | |
| 387 "\n" | |
| 388 " create_bundle(\"${app_name}.app\") {\n" | |
| 389 " deps = [\n" | |
| 390 " \":${app_name}_bundle_executable\",\n" | |
| 391 " \":${app_name}_bundle_info_plist\",\n" | |
| 392 " ]\n" | |
| 393 " if (is_ios) {\n" | |
| 394 " bundle_root_dir = \"${root_build_dir}/$target_name\"\n" | |
| 395 " bundle_resources_dir = bundle_root_dir\n" | |
| 396 " bundle_executable_dir = bundle_root_dir\n" | |
| 397 " bundle_plugins_dir = bundle_root_dir + \"/Plugins\"\n" | |
| 398 " } else {\n" | |
| 399 " bundle_root_dir = \"${root_build_dir}/target_name/Contents\"\n" | |
| 400 " bundle_resources_dir = bundle_root_dir + \"/Resources\"\n" | |
| 401 " bundle_executable_dir = bundle_root_dir + \"/MacOS\"\n" | |
| 402 " bundle_plugins_dir = bundle_root_dir + \"/Plugins\"\n" | |
| 403 " }\n" | |
| 404 " }\n" | |
| 405 "\n" | |
| 406 " group(target_name) {\n" | |
| 407 " forward_variables_from(invoker, [\"visibility\"])\n" | |
| 408 " deps = [ \":${app_name}.app\" ]\n" | |
| 409 " }\n" | |
| 410 " }\n" | |
| 411 " }\n" | |
| 412 "\n"; | |
| 413 | |
| 414 Value RunCreateBundle(Scope* scope, | |
| 415 const FunctionCallNode* function, | |
| 416 const std::vector<Value>& args, | |
| 417 BlockNode* block, | |
| 418 Err* err) { | |
| 419 return ExecuteGenericTarget(functions::kCreateBundle, scope, function, args, | |
| 420 block, err); | |
| 421 } | |
| 422 | |
| 267 // copy ------------------------------------------------------------------------ | 423 // copy ------------------------------------------------------------------------ |
| 268 | 424 |
| 269 const char kCopy[] = "copy"; | 425 const char kCopy[] = "copy"; |
| 270 const char kCopy_HelpShort[] = | 426 const char kCopy_HelpShort[] = |
| 271 "copy: Declare a target that copies files."; | 427 "copy: Declare a target that copies files."; |
| 272 const char kCopy_Help[] = | 428 const char kCopy_Help[] = |
| 273 "copy: Declare a target that copies files.\n" | 429 "copy: Declare a target that copies files.\n" |
| 274 "\n" | 430 "\n" |
| 275 "File name handling\n" | 431 "File name handling\n" |
| 276 "\n" | 432 "\n" |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 578 const Template* templ = scope->GetTemplate(target_type); | 734 const Template* templ = scope->GetTemplate(target_type); |
| 579 if (templ) | 735 if (templ) |
| 580 return templ->Invoke(scope, function, sub_args, block, err); | 736 return templ->Invoke(scope, function, sub_args, block, err); |
| 581 | 737 |
| 582 // Otherwise, assume the target is a built-in target type. | 738 // Otherwise, assume the target is a built-in target type. |
| 583 return ExecuteGenericTarget(target_type.c_str(), scope, function, sub_args, | 739 return ExecuteGenericTarget(target_type.c_str(), scope, function, sub_args, |
| 584 block, err); | 740 block, err); |
| 585 } | 741 } |
| 586 | 742 |
| 587 } // namespace functions | 743 } // namespace functions |
| OLD | NEW |