Skip to content

Commit 41f5b49

Browse files
committed
chore(pypi): cleanup dead code on config_settings
Summary: - remove config settings generation - remove unnecessary params - remove BUILD.bazel generating unnecessary params
1 parent 5fd3c86 commit 41f5b49

File tree

12 files changed

+73
-1624
lines changed

12 files changed

+73
-1624
lines changed

python/private/pypi/BUILD.bazel

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,6 @@ bzl_library(
320320
srcs = ["pkg_aliases.bzl"],
321321
deps = [
322322
":labels_bzl",
323-
":parse_whl_name_bzl",
324-
":whl_target_platforms_bzl",
325323
"//python/private:text_util_bzl",
326324
"@bazel_skylib//lib:selects",
327325
],
@@ -349,9 +347,7 @@ bzl_library(
349347
srcs = ["render_pkg_aliases.bzl"],
350348
deps = [
351349
":generate_group_library_build_bazel_bzl",
352-
":parse_whl_name_bzl",
353350
":whl_config_setting_bzl",
354-
":whl_target_platforms_bzl",
355351
"//python/private:normalize_name_bzl",
356352
"//python/private:text_util_bzl",
357353
],

python/private/pypi/config_settings.bzl

Lines changed: 30 additions & 298 deletions
Large diffs are not rendered by default.

python/private/pypi/extension.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ def _configure(
490490
continue
491491

492492
config["platforms"][platform][key] = value
493-
else:
493+
elif platform:
494494
config["platforms"].pop(platform)
495495

496496
def _plat(*, name, arch_name, os_name, config_settings = [], env = {}, marker = "", whl_abi_tags = [], whl_platform_tags = []):

python/private/pypi/hub_repository.bzl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,10 +142,6 @@ def whl_config_settings_to_json(repo_mapping):
142142

143143
def _whl_config_setting_dict(a):
144144
ret = {}
145-
if a.config_setting:
146-
ret["config_setting"] = a.config_setting
147-
if a.filename:
148-
ret["filename"] = a.filename
149145
if a.target_platforms:
150146
ret["target_platforms"] = a.target_platforms
151147
if a.version:

python/private/pypi/pkg_aliases.bzl

Lines changed: 11 additions & 232 deletions
Original file line numberDiff line numberDiff line change
@@ -23,54 +23,12 @@ Definitions:
2323
:suffix: Can be either empty or `_<os>_<suffix>`, which is usually used to distinguish multiple versions used for different target platforms.
2424
:os: OS identifier that exists in `@platforms//os:<os>`.
2525
:cpu: CPU architecture identifier that exists in `@platforms//cpu:<cpu>`.
26-
:python_tag: The Python tag as defined by the [Python Packaging Authority][packaging_spec]. E.g. `py2.py3`, `py3`, `py311`, `cp311`.
27-
:abi_tag: The ABI tag as defined by the [Python Packaging Authority][packaging_spec]. E.g. `none`, `abi3`, `cp311`, `cp311t`.
28-
:platform_tag: The Platform tag as defined by the [Python Packaging Authority][packaging_spec]. E.g. `manylinux_2_17_x86_64`.
29-
:platform_suffix: is a derivative of the `platform_tag` and is used to implement selection based on `libc` or `osx` version.
3026
3127
All of the config settings used by this macro are generated by
3228
{obj}`config_settings`, for more detailed documentation on what each config
3329
setting maps to and their precedence, refer to documentation on that page.
3430
35-
The first group of config settings that are as follows:
36-
37-
* `//_config:is_cp3<minor_version><suffix>` is used to select legacy `pip`
38-
based `whl` and `sdist` {obj}`whl_library` instances. Whereas other config
39-
settings are created when {obj}`pip.parse.experimental_index_url` is used.
40-
* `//_config:is_cp3<minor_version>_sdist<suffix>` is for wheels built from
41-
`sdist` in {obj}`whl_library`.
42-
* `//_config:is_cp3<minor_version>_py_<abi_tag>_any<suffix>` for wheels with
43-
`py2.py3` `python_tag` value.
44-
* `//_config:is_cp3<minor_version>_py3_<abi_tag>_any<suffix>` for wheels with
45-
`py3` `python_tag` value.
46-
* `//_config:is_cp3<minor_version>_<abi_tag>_any<suffix>` for any other wheels.
47-
* `//_config:is_cp3<minor_version>_py_<abi_tag>_<platform_suffix>` for
48-
platform-specific wheels with `py2.py3` `python_tag` value.
49-
* `//_config:is_cp3<minor_version>_py3_<abi_tag>_<platform_suffix>` for
50-
platform-specific wheels with `py3` `python_tag` value.
51-
* `//_config:is_cp3<minor_version>_<abi_tag>_<platform_suffix>` for any other
52-
platform-specific wheels.
53-
54-
Note that wheels with `abi3` or `none` `abi_tag` values and `python_tag` values
55-
other than `py2.py3` or `py3` are compatible with the python version that is
56-
equal or higher than the one denoted in the `python_tag`. For example: `py37`
57-
and `cp37` wheels are compatible with Python 3.7 and above and in the case of
58-
the target python version being `3.11`, `rules_python` will use
59-
`//_config:is_cp311_<abi_tag>_any<suffix>` config settings.
60-
61-
For platform-specific wheels, i.e. the ones that have their `platform_tag` as
62-
something else than `any`, we treat them as below:
63-
* `linux_<cpu>` tags assume that the target `libc` flavour is `glibc`, so this
64-
is in many ways equivalent to it being `manylinux`, but with an unspecified
65-
`libc` version.
66-
* For `osx` and `linux` OSes wheel filename will be mapped to multiple config settings:
67-
* `osx_<cpu>` and `osx_<major_version>_<minor_version>_<cpu>` where
68-
`major_version` and `minor_version` are the compatible OSX versions.
69-
* `<many|musl>linux_<cpu>` and
70-
`<many|musl>linux_<major_version>_<minor_version>_<cpu>` where the version
71-
identifiers are the compatible libc versions.
72-
73-
[packaging_spec]: https://packaging.python.org/en/latest/specifications/platform-compatibility-tags/
31+
`//_config:is_cp3<minor_version><suffix>` is used to select any target platforms.
7432
"""
7533

7634
load("@bazel_skylib//lib:selects.bzl", "selects")
@@ -85,14 +43,6 @@ load(
8543
"WHEEL_FILE_IMPL_LABEL",
8644
"WHEEL_FILE_PUBLIC_LABEL",
8745
)
88-
load(":parse_whl_name.bzl", "parse_whl_name")
89-
load(":whl_target_platforms.bzl", "whl_target_platforms")
90-
91-
# This value is used as sentinel value in the alias/config setting machinery
92-
# for libc and osx versions. If we encounter this version in this part of the
93-
# code, then it means that we have a bug in rules_python and that we should fix
94-
# it. It is more of an internal consistency check.
95-
_VERSION_NONE = (0, 0)
9646

9747
_NO_MATCH_ERROR_TEMPLATE = """\
9848
No matching wheel for current configuration's Python version.
@@ -137,7 +87,7 @@ def pkg_aliases(
13787
to bazel skylib's `selects.with_or`, so they can be tuples as well.
13888
group_name: {type}`str` The group name that the pkg belongs to.
13989
extra_aliases: {type}`list[str]` The extra aliases to be created.
140-
**kwargs: extra kwargs to pass to {bzl:obj}`get_filename_config_settings`.
90+
**kwargs: extra kwargs to pass to {bzl:obj}`get_config_settings`.
14191
"""
14292
alias = kwargs.pop("native", native).alias
14393
select = kwargs.pop("select", selects.with_or)
@@ -219,21 +169,9 @@ def pkg_aliases(
219169
actual = "//_groups:{}_whl".format(group_name),
220170
)
221171

222-
def _normalize_versions(name, versions):
223-
if not versions:
224-
return []
225-
226-
if _VERSION_NONE in versions:
227-
fail("a sentinel version found in '{}', check render_pkg_aliases for bugs".format(name))
228-
229-
return sorted(versions)
230-
231172
def multiplatform_whl_aliases(
232173
*,
233-
aliases = [],
234-
glibc_versions = [],
235-
muslc_versions = [],
236-
osx_versions = []):
174+
aliases = []):
237175
"""convert a list of aliases from filename to config_setting ones.
238176
239177
Exposed only for unit tests.
@@ -243,12 +181,6 @@ def multiplatform_whl_aliases(
243181
to process. Any aliases that have the filename set will be
244182
converted to a dict of config settings to repo names. The
245183
struct is created by {func}`whl_config_setting`.
246-
glibc_versions: {type}`list[tuple[int, int]]` list of versions that can be
247-
used in this hub repo.
248-
muslc_versions: {type}`list[tuple[int, int]]` list of versions that can be
249-
used in this hub repo.
250-
osx_versions: {type}`list[tuple[int, int]]` list of versions that can be
251-
used in this hub repo.
252184
253185
Returns:
254186
A dict with of config setting labels to repo names or the repo name itself.
@@ -258,207 +190,54 @@ def multiplatform_whl_aliases(
258190
# We don't have any aliases, this is a repo name
259191
return aliases
260192

261-
# TODO @aignas 2024-11-17: we might be able to use FeatureFlagInfo and some
262-
# code gen to create a version_lt_x target, which would allow us to check
263-
# if the libc version is in a particular range.
264-
glibc_versions = _normalize_versions("glibc_versions", glibc_versions)
265-
muslc_versions = _normalize_versions("muslc_versions", muslc_versions)
266-
osx_versions = _normalize_versions("osx_versions", osx_versions)
267-
268193
ret = {}
269-
versioned_additions = {}
270194
for alias, repo in aliases.items():
271195
if type(alias) != "struct":
272196
ret[alias] = repo
273197
continue
274-
elif not (alias.filename or alias.target_platforms):
275-
# This is an internal consistency check
276-
fail("Expected to have either 'filename' or 'target_platforms' set, got: {}".format(alias))
277198

278-
config_settings, all_versioned_settings = get_filename_config_settings(
279-
filename = alias.filename or "",
199+
config_settings = get_config_settings(
280200
target_platforms = alias.target_platforms,
281201
python_version = alias.version,
282-
# If we have multiple platforms but no wheel filename, lets use different
283-
# config settings.
284-
non_whl_prefix = "sdist" if alias.filename else "",
285-
glibc_versions = glibc_versions,
286-
muslc_versions = muslc_versions,
287-
osx_versions = osx_versions,
288202
)
289203

290204
for setting in config_settings:
291205
ret["//_config" + setting] = repo
292206

293-
# Now for the versioned platform config settings, we need to select one
294-
# that best fits the bill and if there are multiple wheels, e.g.
295-
# manylinux_2_17_x86_64 and manylinux_2_28_x86_64, then we need to select
296-
# the former when the glibc is in the range of [2.17, 2.28) and then chose
297-
# the later if it is [2.28, ...). If the 2.28 wheel was not present in
298-
# the hub, then we would need to use 2.17 for all the glibc version
299-
# configurations.
300-
#
301-
# Here we add the version settings to a dict where we key the range of
302-
# versions that the whl spans. If the wheel supports musl and glibc at
303-
# the same time, we do this for each supported platform, hence the
304-
# double dict.
305-
for default_setting, versioned in all_versioned_settings.items():
306-
versions = sorted(versioned)
307-
min_version = versions[0]
308-
max_version = versions[-1]
309-
310-
versioned_additions.setdefault(default_setting, {})[(min_version, max_version)] = struct(
311-
repo = repo,
312-
settings = versioned,
313-
)
314-
315-
versioned = {}
316-
for default_setting, candidates in versioned_additions.items():
317-
# Sort the candidates by the range of versions the span, so that we
318-
# start with the lowest version.
319-
for _, candidate in sorted(candidates.items()):
320-
# Set the default with the first candidate, which gives us the highest
321-
# compatibility. If the users want to use a higher-version than the default
322-
# they can configure the glibc_version flag.
323-
versioned.setdefault("//_config" + default_setting, candidate.repo)
324-
325-
# We will be overwriting previously added entries, but that is intended.
326-
for _, setting in candidate.settings.items():
327-
versioned["//_config" + setting] = candidate.repo
328-
329-
ret.update(versioned)
330207
return ret
331208

332-
def get_filename_config_settings(
209+
def get_config_settings(
333210
*,
334-
filename,
335211
target_platforms,
336-
python_version,
337-
glibc_versions = None,
338-
muslc_versions = None,
339-
osx_versions = None,
340-
non_whl_prefix = "sdist"):
212+
python_version):
341213
"""Get the filename config settings.
342214
343215
Exposed only for unit tests.
344216
345217
Args:
346-
filename: the distribution filename (can be a whl or an sdist).
347218
target_platforms: list[str], target platforms in "{abi}_{os}_{cpu}" format.
348-
glibc_versions: list[tuple[int, int]], list of versions.
349-
muslc_versions: list[tuple[int, int]], list of versions.
350-
osx_versions: list[tuple[int, int]], list of versions.
351219
python_version: the python version to generate the config_settings for.
352-
non_whl_prefix: the prefix of the config setting when the whl we don't have
353-
a filename ending with ".whl".
354220
355221
Returns:
356222
A tuple:
357223
* A list of config settings that are generated by ./pip_config_settings.bzl
358224
* The list of default version settings.
359225
"""
360-
prefixes = []
361-
suffixes = []
362-
setting_supported_versions = {}
363-
364-
if filename.endswith(".whl"):
365-
parsed = parse_whl_name(filename)
366-
if parsed.python_tag == "py2.py3":
367-
py = "py_"
368-
elif parsed.python_tag == "py3":
369-
py = "py3_"
370-
elif parsed.python_tag.startswith("cp"):
371-
py = ""
372-
else:
373-
py = "py3_"
374226

375-
abi = parsed.abi_tag
376-
377-
# TODO @aignas 2025-04-20: test
378-
abi, _, _ = abi.partition(".")
379-
380-
if parsed.platform_tag == "any":
381-
prefixes = ["{}{}_any".format(py, abi)]
382-
else:
383-
prefixes = ["{}{}".format(py, abi)]
384-
suffixes = _whl_config_setting_suffixes(
385-
platform_tag = parsed.platform_tag,
386-
glibc_versions = glibc_versions,
387-
muslc_versions = muslc_versions,
388-
osx_versions = osx_versions,
389-
setting_supported_versions = setting_supported_versions,
390-
)
391-
else:
392-
prefixes = [non_whl_prefix or ""]
393-
394-
py = "cp{}".format(python_version).replace(".", "")
395227
prefixes = [
396-
"{}_{}".format(py, prefix) if prefix else py
397-
for prefix in prefixes
228+
"cp{}".format(python_version).replace(".", ""),
398229
]
399230

400-
versioned = {
401-
":is_{}_{}".format(prefix, suffix): {
402-
version: ":is_{}_{}".format(prefix, setting)
403-
for version, setting in versions.items()
404-
}
405-
for prefix in prefixes
406-
for suffix, versions in setting_supported_versions.items()
407-
}
408-
409-
if suffixes or target_platforms or versioned:
231+
if target_platforms:
410232
target_platforms = target_platforms or []
411-
suffixes = suffixes or [_non_versioned_platform(p) for p in target_platforms]
233+
suffixes = [_non_versioned_platform(p) for p in target_platforms]
412234
return [
413235
":is_{}_{}".format(prefix, suffix)
414236
for prefix in prefixes
415237
for suffix in suffixes
416-
], versioned
238+
]
417239
else:
418-
return [":is_{}".format(p) for p in prefixes], setting_supported_versions
419-
420-
def _whl_config_setting_suffixes(
421-
platform_tag,
422-
glibc_versions,
423-
muslc_versions,
424-
osx_versions,
425-
setting_supported_versions):
426-
suffixes = []
427-
for platform_tag in platform_tag.split("."):
428-
for p in whl_target_platforms(platform_tag):
429-
prefix = p.os
430-
suffix = p.cpu
431-
if "manylinux" in platform_tag:
432-
prefix = "manylinux"
433-
versions = glibc_versions
434-
elif "musllinux" in platform_tag:
435-
prefix = "musllinux"
436-
versions = muslc_versions
437-
elif p.os in ["linux", "windows"]:
438-
versions = [(0, 0)]
439-
elif p.os == "osx":
440-
versions = osx_versions
441-
if "universal2" in platform_tag:
442-
suffix = "universal2"
443-
else:
444-
fail("Unsupported whl os: {}".format(p.os))
445-
446-
default_version_setting = "{}_{}".format(prefix, suffix)
447-
supported_versions = {}
448-
for v in versions:
449-
if v == (0, 0):
450-
suffixes.append(default_version_setting)
451-
elif v >= p.version:
452-
supported_versions[v] = "{}_{}_{}_{}".format(
453-
prefix,
454-
v[0],
455-
v[1],
456-
suffix,
457-
)
458-
if supported_versions:
459-
setting_supported_versions[default_version_setting] = supported_versions
460-
461-
return suffixes
240+
return [":is_{}".format(p) for p in prefixes]
462241

463242
def _non_versioned_platform(p, *, strict = False):
464243
"""A small utility function that converts 'cp311_linux_x86_64' to 'linux_x86_64'.

0 commit comments

Comments
 (0)