Index: tools/grit/repack.gni |
diff --git a/tools/grit/repack.gni b/tools/grit/repack.gni |
index 4f0462cf7fe8ab3c7ecac1cda9880b2eaa8db03d..0f257bb7c4274c1f478ac05e1c3018d37676593b 100644 |
--- a/tools/grit/repack.gni |
+++ b/tools/grit/repack.gni |
@@ -13,26 +13,12 @@ |
# output [required] |
# File name (single string) of the output file. |
# |
-# copy_data_to_bundle [optional] |
-# Whether to define a bundle_data() for the resulting pak. |
-# |
-# bundle_output [optional] |
-# Path of the file in the application bundle, defaults to |
-# {{bundle_resources_dir}}/{{source_file_part}}. |
-# |
# deps [optional] |
# public_deps [optional] |
# visibility [optional] |
# Normal meaning. |
template("repack") { |
- _copy_data_to_bundle = |
- defined(invoker.copy_data_to_bundle) && invoker.copy_data_to_bundle |
- _repack_target_name = target_name |
- if (_copy_data_to_bundle) { |
- _repack_target_name = "${target_name}__repack" |
- } |
- |
- action(_repack_target_name) { |
+ action(target_name) { |
forward_variables_from(invoker, |
[ |
"deps", |
@@ -40,9 +26,6 @@ |
"testonly", |
"visibility", |
]) |
- if (defined(visibility) && _copy_data_to_bundle) { |
- visibility += [ ":${invoker.target_name}" ] |
- } |
assert(defined(invoker.sources), "Need sources for $target_name") |
assert(defined(invoker.output), "Need output for $target_name") |
@@ -63,119 +46,63 @@ |
args += [ rebase_path(invoker.output, root_build_dir) ] |
args += rebase_path(invoker.sources, root_build_dir) |
} |
+} |
- if (_copy_data_to_bundle) { |
- bundle_data(target_name) { |
- forward_variables_from(invoker, |
- [ |
- "testonly", |
- "visibility", |
- ]) |
+# This template combines repacking resources and defining a bundle_data target |
+# to move them to the application bundle. This is mostly useful on iOS. |
+# |
+# Parameters: |
+# sources [required] |
+# List of pak files that need to be combined. |
+# |
+# output [required] |
+# File name (single string) of the output file. |
+# |
+# bundle_output [optional] |
+# Path of the file in the application bundle, defaults to |
+# {{bundle_resources_dir}}/{{source_file_part}} if omitted. |
+# |
+# deps [optional] |
+# visibility [optional] |
+# Normal meaning. |
+template("repack_and_bundle") { |
+ assert(defined(invoker.bundle_output), "Need bundle_output for $target_name") |
- public_deps = [ |
- ":$_repack_target_name", |
+ _repack_target_name = target_name + "_repack" |
+ _bundle_target_name = target_name |
+ |
+ repack(_repack_target_name) { |
+ visibility = [ ":$_bundle_target_name" ] |
+ forward_variables_from(invoker, |
+ [ |
+ "deps", |
+ "output", |
+ "sources", |
+ "testonly", |
+ ]) |
+ } |
+ |
+ bundle_data(_bundle_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "testonly", |
+ "visibility", |
+ ]) |
+ |
+ public_deps = [ |
+ ":$_repack_target_name", |
+ ] |
+ sources = [ |
+ invoker.output, |
+ ] |
+ if (defined(invoker.bundle_output)) { |
+ outputs = [ |
+ invoker.bundle_output, |
] |
- sources = [ |
- invoker.output, |
+ } else { |
+ outputs = [ |
+ "{{bundle_resources_dir}}/{{source_file_part}}", |
] |
- if (defined(invoker.bundle_output)) { |
- outputs = [ |
- invoker.bundle_output, |
- ] |
- } else { |
- outputs = [ |
- "{{bundle_resources_dir}}/{{source_file_part}}", |
- ] |
- } |
} |
} |
} |
- |
-# Repacks a set of .pak files for each locale. |
-# |
-# Parameters: |
-# |
-# input_locales [required] |
-# List of locale names to use as inputs. |
-# |
-# output_locales [required] |
-# A list containing the corresponding output names for each of the |
-# input names. Mac and iOS use different names in some cases. |
-# |
-# source_patterns [required] |
-# The pattern for pak files which need repacked. The filenames always end |
-# with "${locale}.pak". |
-# E.g.: |
-# ${root_gen_dir}/foo_ expands to ${root_gen_dir}/foo_zh-CN.pak |
-# when locale is zh-CN. |
-# |
-# output_dir [optional] |
-# Directory in which to put all pak files. |
-# |
-# deps [optional] |
-# visibility [optional] |
-# testonly [optional] |
-# copy_data_to_bundle [optional] |
-# repack_whitelist [optional] |
-# Normal meaning. |
-template("repack_locales") { |
- # GN can't handle invoker.output_locales[foo] (http://crbug.com/614747). |
- _output_locales = invoker.output_locales |
- _output_dir = "$target_gen_dir/$target_name" |
- if (defined(invoker.output_dir)) { |
- _output_dir = invoker.output_dir |
- } |
- |
- # Collects all targets the loop generates. |
- _locale_targets = [] |
- |
- # This loop iterates over the input locales and also keeps a counter so it |
- # can simultaneously iterate over the output locales (using GN's very |
- # limited looping capabilities). |
- _current_index = 0 |
- foreach(_input_locale, invoker.input_locales) { |
- _output_locale = _output_locales[_current_index] |
- |
- # Compute the name of the target for the current file. Save it for the deps. |
- _current_name = "${target_name}_${_input_locale}" |
- _locale_targets += [ ":$_current_name" ] |
- |
- repack(_current_name) { |
- forward_variables_from(invoker, |
- [ |
- "copy_data_to_bundle", |
- "bundle_output", |
- "deps", |
- "repack_whitelist", |
- "testonly", |
- ]) |
- visibility = [ ":${invoker.target_name}" ] |
- if (is_ios) { |
- output = "$_output_dir/${_output_locale}.lproj/locale.pak" |
- if (defined(copy_data_to_bundle) && copy_data_to_bundle) { |
- bundle_output = |
- "{{bundle_resources_dir}}/${_output_locale}.lproj/locale.pak" |
- } |
- } else { |
- output = "$_output_dir/${_output_locale}.pak" |
- } |
- set_sources_assignment_filter([]) |
- sources = [] |
- foreach(_pattern, invoker.source_patterns) { |
- sources += [ "${_pattern}${_input_locale}.pak" ] |
- } |
- } |
- |
- _current_index = _current_index + 1 |
- } |
- |
- # The group that external targets depend on which collects all deps. |
- group(target_name) { |
- forward_variables_from(invoker, |
- [ |
- "visibility", |
- "testonly", |
- ]) |
- public_deps = _locale_targets |
- } |
-} |