8000 feat: allow patching the interpreter fetched via toolchains (#1004) · ahans/rules_python@b4a47a4 · GitHub
[go: up one dir, main page]

Skip to content

Commit b4a47a4

Browse files
authored
feat: allow patching the interpreter fetched via toolchains (bazel-contrib#1004)
1 parent 1722988 commit b4a47a4

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

python/repositories.bzl

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ load(
3131
"MINOR_MAPPING",
3232
"PLATFORMS",
3333
"TOOL_VERSIONS",
34-
"get_release_url",
34+
"get_release_info",
3535
)
3636

3737
def http_archive(**kwargs):
@@ -142,6 +142,12 @@ def _python_repository_impl(rctx):
142142
stripPrefix = rctx.attr.strip_prefix,
143143
)
144144

145+
patches = rctx.attr.patches
146+
if patches:
147+
for patch in patches:
148+
# Should take the strip as an attr, but this is fine for the moment
149+
rctx.patch(patch, strip = 1)
150+
145151
# Write distutils.cfg to the Python installation.
146152
if "windows" in rctx.os.name:
147153
distutils_path = "Lib/distutils/distutils.cfg"
@@ -310,6 +316,10 @@ python_repository = repository_rule(
310316
doc = "Whether the check for root should be ignored or not. This causes cache misses with .pyc files.",
311317
mandatory = False,
312318
),
319+
"patches": attr.label_list(
320+
doc = "A list of patch files to apply to the unpacked interpreter",
321+
mandatory = False,
322+
),
313323
"platform": attr.string(
314324
doc = "The platform name for the 10000 Python interpreter tarball.",
315325
mandatory = True,
@@ -389,14 +399,15 @@ def python_register_toolchains(
389399
if not sha256:
390400
continue
391401

392-
(release_filename, url, strip_prefix) = get_release_url(platform, python_version, base_url, tool_versions)
402+
(release_filename, url, strip_prefix, patches) = get_release_info(platform, python_version, base_url, tool_versions)
393403

394404
python_repository(
395405
name = "{name}_{platform}".format(
396406
name = name,
397407
platform = platform,
398408
),
399409
sha256 = sha256,
410+
patches = patches,
400411
platform = platform,
401412
python_version = python_version,
402413
release_filename = release_filename,

python/versions.bzl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ PLATFORMS = {
248248
),
249249
}
250250

251-
def get_release_url(platform, python_version, base_url = DEFAULT_RELEASE_BASE_URL, tool_versions = TOOL_VERSIONS):
251+
def get_release_info(platform, python_version, base_url = DEFAULT_RELEASE_BASE_URL, tool_versions = TOOL_VERSIONS):
252252
"""Resolve the release URL for the requested interpreter version
253253
254254
Args:
@@ -276,7 +276,15 @@ def get_release_url(platform, python_version, base_url = DEFAULT_RELEASE_BASE_UR
276276
build = "shared-install_only" if (WINDOWS_NAME in platform) else "install_only",
277277
)
278278
url = "/".join([base_url, release_filename])
279-
return (release_filename, url, strip_prefix)
279+
280+
patches = tool_versions[python_version].get("patches", [])
281+
if type(patches) == type({}):
282+
if platform in patches.keys():
283+
patches = patches[platform]
284+
else:
285+
patches = []
286+
287+
return (release_filename, url, strip_prefix, patches)
280288

281289
def print_toolchains_checksums(name):
282290
native.genrule(
@@ -307,8 +315,8 @@ def _commands_for_version(python_version):
307315
"echo \"{python_version}: {platform}: $$(curl --location --fail {release_url_sha256} 2>/dev/null || curl --location --fail {release_url} 2>/dev/null | shasum -a 256 | awk '{{ print $$1 }}')\"".format(
308316
python_version = python_version,
309317
platform = platform,
310-
release_url = get_release_url(platform, python_version)[1],
311-
release_url_sha256 = get_release_url(platform, python_version)[1] + ".sha256",
318+
release_url = get_release_info(platform, python_version)[1],
319+
release_url_sha256 = get_release_info(platform, python_version)[1] + ".sha256",
312320
)
313321
for platform in TOOL_VERSIONS[python_version]["sha256"].keys()
314322
])

0 commit comments

Comments
 (0)
0