feat: allow patching the interpreter fetched via toolchains (#1004)
diff --git a/python/repositories.bzl b/python/repositories.bzl
index ba8e433..de8d90a 100644
--- a/python/repositories.bzl
+++ b/python/repositories.bzl
@@ -31,7 +31,7 @@
"MINOR_MAPPING",
"PLATFORMS",
"TOOL_VERSIONS",
- "get_release_url",
+ "get_release_info",
)
def http_archive(**kwargs):
@@ -142,6 +142,12 @@
stripPrefix = rctx.attr.strip_prefix,
)
+ patches = rctx.attr.patches
+ if patches:
+ for patch in patches:
+ # Should take the strip as an attr, but this is fine for the moment
+ rctx.patch(patch, strip = 1)
+
# Write distutils.cfg to the Python installation.
if "windows" in rctx.os.name:
distutils_path = "Lib/distutils/distutils.cfg"
@@ -310,6 +316,10 @@
doc = "Whether the check for root should be ignored or not. This causes cache misses with .pyc files.",
mandatory = False,
),
+ "patches": attr.label_list(
+ doc = "A list of patch files to apply to the unpacked interpreter",
+ mandatory = False,
+ ),
"platform": attr.string(
doc = "The platform name for the Python interpreter tarball.",
mandatory = True,
@@ -389,7 +399,7 @@
if not sha256:
continue
- (release_filename, url, strip_prefix) = get_release_url(platform, python_version, base_url, tool_versions)
+ (release_filename, url, strip_prefix, patches) = get_release_info(platform, python_version, base_url, tool_versions)
python_repository(
name = "{name}_{platform}".format(
@@ -397,6 +407,7 @@
platform = platform,
),
sha256 = sha256,
+ patches = patches,
platform = platform,
python_version = python_version,
release_filename = release_filename,
diff --git a/python/versions.bzl b/python/versions.bzl
index 56d7ae1..3c19c18 100644
--- a/python/versions.bzl
+++ b/python/versions.bzl
@@ -248,7 +248,7 @@
),
}
-def get_release_url(platform, python_version, base_url = DEFAULT_RELEASE_BASE_URL, tool_versions = TOOL_VERSIONS):
+def get_release_info(platform, python_version, base_url = DEFAULT_RELEASE_BASE_URL, tool_versions = TOOL_VERSIONS):
"""Resolve the release URL for the requested interpreter version
Args:
@@ -276,7 +276,15 @@
build = "shared-install_only" if (WINDOWS_NAME in platform) else "install_only",
)
url = "/".join([base_url, release_filename])
- return (release_filename, url, strip_prefix)
+
+ patches = tool_versions[python_version].get("patches", [])
+ if type(patches) == type({}):
+ if platform in patches.keys():
+ patches = patches[platform]
+ else:
+ patches = []
+
+ return (release_filename, url, strip_prefix, patches)
def print_toolchains_checksums(name):
native.genrule(
@@ -307,8 +315,8 @@
"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(
python_version = python_version,
platform = platform,
- release_url = get_release_url(platform, python_version)[1],
- release_url_sha256 = get_release_url(platform, python_version)[1] + ".sha256",
+ release_url = get_release_info(platform, python_version)[1],
+ release_url_sha256 = get_release_info(platform, python_version)[1] + ".sha256",
)
for platform in TOOL_VERSIONS[python_version]["sha256"].keys()
])