Skip to content

Commit 20f7a11

Browse files
committed
Fix deduplication of -enable-experimental-feature
1 parent 5f56d54 commit 20f7a11

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

swiftpkg/internal/bzl_selects.bzl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,13 +201,42 @@ No Starlark expression members were generated for {}\
201201

202202
return scg.new_expr(*expr_members)
203203

204+
def _unwrap_list(values, kind_handlers = {}):
205+
"""Converts the provied values into unstructured types using the information in the \
206+
kind handlers.
207+
208+
Args:
209+
values: A `list` of values that are processed and added to the output.
210+
kind_handlers: A `dict` of king handler `struct` values
211+
(`bzl_selects.new_kind_handler`).
212+
213+
Returns:
214+
A list where `struct` values are unwrapped
215+
"""
216+
result = []
217+
for v in values:
218+
v_type = type(v)
219+
if v_type != "struct":
220+
if v_type == "list":
221+
result.extend(v)
222+
else:
223+
result.append(v)
224+
continue
225+
226+
# We are assuming that the select will always result in a list.
227+
# Hence, we wrap the transformed value in a list.
228+
kind_handler = kind_handlers.get(v.kind, _noop_kind_handler)
229+
result.extend(lists.flatten(kind_handler.transform(v.value)))
230+
return result
231+
204232
bzl_selects = struct(
205233
default_condition = _bazel_select_default_condition,
206234
new = _new,
207235
new_from_build_setting = _new_from_build_setting,
208236
new_from_target_dependency_condition = _new_from_target_dependency_condition,
209237
new_kind_handler = _new_kind_handler,
210238
to_starlark = _to_starlark,
239+
unwrap_list = _unwrap_list,
211240
)
212241

213242
# NEED TO CONVERT:

swiftpkg/internal/swiftpkg_build_files.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def _swift_target_build_file(pkg_ctx, target):
106106
if len(defines) > 0:
107107
attrs["defines"] = bzl_selects.to_starlark(defines)
108108
if len(copts) > 0:
109-
attrs["copts"] = bzl_selects.to_starlark(copts)
109+
attrs["copts"] = bzl_selects.unwrap_list(copts)
110110

111111
res_build_file = _handle_target_resources(
112112
pkg_ctx,

0 commit comments

Comments
 (0)