Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
sewerynplazuk authored Mar 27, 2024
2 parents 49ac855 + 9c6eb04 commit 445fa43
Show file tree
Hide file tree
Showing 18 changed files with 160 additions and 35 deletions.
2 changes: 1 addition & 1 deletion MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module(
bazel_dep(name = "apple_support", version = "1.14.0", repo_name = "build_bazel_apple_support")
bazel_dep(name = "bazel_skylib", version = "1.3.0")
bazel_dep(name = "platforms", version = "0.0.7")
bazel_dep(name = "rules_swift", version = "1.16.0", repo_name = "build_bazel_rules_swift")
bazel_dep(name = "rules_swift", version = "1.17.0", repo_name = "build_bazel_rules_swift")

bazel_dep(
name = "stardoc",
Expand Down
15 changes: 15 additions & 0 deletions apple/internal/ios_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ def _ios_application_impl(ctx):
bundle_verification_targets = bundle_verification_targets,
environment_plist = ctx.file._environment_plist,
launch_storyboard = ctx.file.launch_storyboard,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -451,6 +452,7 @@ def _ios_application_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -713,6 +715,7 @@ def _ios_app_clip_impl(ctx):
environment_plist = ctx.file._environment_plist,
executable_name = executable_name,
launch_storyboard = ctx.file.launch_storyboard,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -754,6 +757,7 @@ def _ios_app_clip_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -1309,6 +1313,7 @@ def _ios_extension_impl(ctx):
executable_name = executable_name,
extensionkit_keys_required = ctx.attr.extensionkit_extension,
launch_storyboard = None,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -1357,6 +1362,7 @@ def _ios_extension_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -1979,6 +1985,7 @@ def _ios_imessage_application_impl(ctx):
bundle_verification_targets = bundle_verification_targets,
environment_plist = ctx.file._environment_plist,
launch_storyboard = None,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -2017,6 +2024,7 @@ def _ios_imessage_application_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -2240,6 +2248,7 @@ def _ios_imessage_extension_impl(ctx):
environment_plist = ctx.file._environment_plist,
executable_name = executable_name,
launch_storyboard = None,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -2279,6 +2288,7 @@ def _ios_imessage_extension_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -2532,6 +2542,7 @@ ios_application = rule_factory.create_apple_rule(
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.launch_images_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
platform_type = "ios",
add_environment_plist = True,
Expand Down Expand Up @@ -2642,6 +2653,7 @@ ios_app_clip = rule_factory.create_apple_rule(
),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
platform_type = "ios",
add_environment_plist = True,
Expand Down Expand Up @@ -2713,6 +2725,7 @@ However, iOS 14 introduced Widget Extensions that use a traditional `main` entry
rule_attrs.extensionkit_attrs(),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
platform_type = "ios",
add_environment_plist = True,
Expand Down Expand Up @@ -3008,6 +3021,7 @@ for either an iOS iMessage extension or a Sticker Pack extension.""",
),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
platform_type = "ios",
add_environment_plist = True,
Expand Down Expand Up @@ -3055,6 +3069,7 @@ ios_imessage_extension = rule_factory.create_apple_rule(
),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
platform_type = "ios",
add_environment_plist = True,
Expand Down
6 changes: 6 additions & 0 deletions apple/internal/macos_rules.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ def _macos_application_impl(ctx):
bundle_verification_targets = bundle_verification_targets,
environment_plist = ctx.file._environment_plist,
launch_storyboard = None,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -401,6 +402,7 @@ def _macos_application_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -902,6 +904,7 @@ def _macos_extension_impl(ctx):
executable_name = executable_name,
extensionkit_keys_required = ctx.attr.extensionkit_extension,
launch_storyboard = None,
locales_to_include = ctx.attr.locales_to_include,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
rule_descriptor = rule_descriptor,
Expand Down Expand Up @@ -951,6 +954,7 @@ def _macos_extension_impl(ctx):
entitlements = entitlements.codesigning,
features = features,
ipa_post_processor = ctx.executable.ipa_post_processor,
locales_to_include = ctx.attr.locales_to_include,
partials = processor_partials,
platform_prerequisites = platform_prerequisites,
predeclared_outputs = predeclared_outputs,
Expand Down Expand Up @@ -2261,6 +2265,7 @@ simple command line tool as a standalone binary, use
),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
add_environment_plist = True,
platform_type = "macos",
Expand Down Expand Up @@ -2412,6 +2417,7 @@ point (typically expressed through Swift's `@main` attribute).""",
rule_attrs.extensionkit_attrs(),
rule_attrs.infoplist_attrs(),
rule_attrs.ipa_post_processor_attrs(),
rule_attrs.locales_to_include_attrs(),
rule_attrs.platform_attrs(
add_environment_plist = True,
platform_type = "macos",
Expand Down
20 changes: 16 additions & 4 deletions apple/internal/partials/resources.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -109,21 +109,29 @@ def _merge_root_infoplists(

return [(processor.location.content, None, depset(direct = files))]

def _locales_requested(*, config_vars):
def _locales_requested(*, locales_to_include, config_vars):
"""Determines which locales to include when resource actions.
If the user has specified "apple.locales_to_include" we use those. Otherwise we don't filter.
'Base' is included by default to any given list of locales to include.
Args:
config_vars: A dictionary (String to String) of config variables. Typically from `ctx.var`.
locales_to_include: A string list of locales to bundle.
Returns:
A set of locales to include or None if all should be included.
"""
requested_locales = config_vars.get("apple.locales_to_include")
config_locals_to_include = config_vars.get("apple.locales_to_include")
requested_locales = None
if locales_to_include:
requested_locales = locales_to_include
else:
config_locals_to_include = config_vars.get("apple.locales_to_include")
requested_locales = config_locals_to_include.split(",") if config_locals_to_include else None

if requested_locales != None:
return sets.make(["Base"] + [x.strip() for x in requested_locales.split(",")])
return sets.make(["Base"] + [x.strip() for x in requested_locales])
else:
return None

Expand Down Expand Up @@ -179,6 +187,7 @@ def _resources_partial_impl(
environment_plist,
extensionkit_keys_required,
launch_storyboard,
locales_to_include,
output_discriminator,
platform_prerequisites,
resource_deps,
Expand Down Expand Up @@ -258,7 +267,7 @@ def _resources_partial_impl(

infoplists = []

locales_requested = _locales_requested(config_vars = platform_prerequisites.config_vars)
locales_requested = _locales_requested(locales_to_include = locales_to_include, config_vars = platform_prerequisites.config_vars)
locales_excluded = _locales_excluded(config_vars = platform_prerequisites.config_vars)
locales_included = sets.make(["Base"])
locales_dropped = sets.make()
Expand Down Expand Up @@ -386,6 +395,7 @@ def resources_partial(
environment_plist,
extensionkit_keys_required = False,
launch_storyboard,
locales_to_include = [],
output_discriminator = None,
platform_prerequisites,
resource_deps,
Expand Down Expand Up @@ -424,6 +434,7 @@ def resources_partial(
environment_plist: File referencing a plist with the required variables about the versions
the target is being built for and with.
launch_storyboard: A file to be used as a launch screen for the application.
locales_to_include: List of locales to bundle.
output_discriminator: A string to differentiate between different target intermediate files
or `None`.
platform_prerequisites: Struct containing information on the platform being targeted.
Expand Down Expand Up @@ -457,6 +468,7 @@ def resources_partial(
environment_plist = environment_plist,
extensionkit_keys_required = extensionkit_keys_required,
launch_storyboard = launch_storyboard,
locales_to_include = locales_to_include,
output_discriminator = output_discriminator,
platform_prerequisites = platform_prerequisites,
resource_deps = resource_deps,
Expand Down
12 changes: 11 additions & 1 deletion apple/internal/processor.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ def _bundle_partial_outputs_files(
extra_input_files = [],
ipa_post_processor = None,
label_name,
locales_to_include = [],
output_discriminator,
output_file,
partial_outputs,
Expand All @@ -257,6 +258,7 @@ def _bundle_partial_outputs_files(
extra_input_files: Extra files to include in the bundling action.
ipa_post_processor: A file that acts as a bundle post processing tool. May be `None`.
label_name: The name of the target being built.
locales_to_include: List of locales to bundle.
output_discriminator: A string to differentiate between different target intermediate files
or `None`.
output_file: The file where the final zipped bundle should be created.
Expand All @@ -269,7 +271,7 @@ def _bundle_partial_outputs_files(

# Autotrim locales here only if the rule supports it and there weren't requested locales.
config_vars = platform_prerequisites.config_vars
requested_locales_flag = config_vars.get("apple.locales_to_include")
requested_locales_flag = locales_to_include or config_vars.get("apple.locales_to_include")

trim_locales = defines.bool_value(
config_vars = config_vars,
Expand Down Expand Up @@ -473,6 +475,7 @@ def _bundle_post_process_and_sign(
entitlements,
features,
ipa_post_processor,
locales_to_include,
output_archive,
output_discriminator,
partial_outputs,
Expand All @@ -495,6 +498,7 @@ def _bundle_post_process_and_sign(
entitlements: The entitlements file to sign with. Can be `None` if one was not provided.
features: List of features enabled by the user. Typically from `ctx.features`.
ipa_post_processor: A file that acts as a bundle post processing tool. May be `None`.
locales_to_include: List of locales to bundle.
output_archive: The file representing the final bundled, post-processed and signed archive.
output_discriminator: A string to differentiate between different target intermediate files
or `None`.
Expand Down Expand Up @@ -554,6 +558,7 @@ def _bundle_post_process_and_sign(
extra_input_files = extra_input_files,
ipa_post_processor = ipa_post_processor,
label_name = rule_label.name,
locales_to_include = locales_to_include,
output_discriminator = output_discriminator,
output_file = output_archive,
partial_outputs = partial_outputs,
Expand Down Expand Up @@ -583,6 +588,7 @@ def _bundle_post_process_and_sign(
bundle_name = bundle_name,
ipa_post_processor = ipa_post_processor,
label_name = rule_label.name,
locales_to_include = locales_to_include,
output_discriminator = output_discriminator,
output_file = unprocessed_archive,
partial_outputs = partial_outputs,
Expand Down Expand Up @@ -658,6 +664,7 @@ def _bundle_post_process_and_sign(
embedding = True,
ipa_post_processor = ipa_post_processor,
label_name = rule_label.name,
locales_to_include = locales_to_include,
output_discriminator = output_discriminator,
output_file = unprocessed_embedded_archive,
partial_outputs = partial_outputs,
Expand Down Expand Up @@ -701,6 +708,7 @@ def _process(
entitlements = None,
features,
ipa_post_processor = None,
locales_to_include = [],
output_discriminator = None,
partials,
platform_prerequisites,
Expand All @@ -724,6 +732,7 @@ def _process(
entitlements: The entitlements file to sign with. Can be `None` if one was not provided.
features: List of features enabled by the user. Typically from `ctx.features`.
ipa_post_processor: A file that acts as a bundle post processing tool. Defaults to `None`.
locales_to_include: List of locales to explicitly include in the bundle. Defaults tp `[]`.
output_discriminator: A string to differentiate between different target intermediate files
or `None`.
partials: The list of partials to process to construct the complete bundle.
Expand Down Expand Up @@ -764,6 +773,7 @@ def _process(
entitlements = entitlements,
features = features,
ipa_post_processor = ipa_post_processor,
locales_to_include = locales_to_include,
output_archive = output_archive,
output_discriminator = output_discriminator,
partial_outputs = partial_outputs,
Expand Down
13 changes: 13 additions & 0 deletions apple/internal/rule_attrs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,18 @@ def _simulator_runner_template_attr():
),
}

def _locales_to_include_attr():
"""Returns the attribute required to support configuring the explicit set of locales supported for the bundle."""
return {
"locales_to_include": attr.string_list(
mandatory = False,
doc = """
A list of locales to include in the bundle. Only *.lproj directories that are matched will be copied as a part of the build.
This value takes precedence (and is preferred) over locales defined using `--define "apple.locales_to_include=..."`.
""",
),
}

# Returns the aspects required to support a test host for a given target.
_TEST_HOST_ASPECTS = [framework_provider_aspect]

Expand All @@ -732,6 +744,7 @@ rule_attrs = struct(
extensionkit_attrs = _extensionkit_attrs,
infoplist_attrs = _infoplist_attrs,
ipa_post_processor_attrs = _ipa_post_processor_attrs,
locales_to_include_attrs = _locales_to_include_attr,
launch_images_attrs = _launch_images_attrs,
platform_attrs = _platform_attrs,
settings_bundle_attrs = _settings_bundle_attrs,
Expand Down
Loading

0 comments on commit 445fa43

Please sign in to comment.