Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions e2e/MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,13 @@ uv.lockfile(
hub_name = "pypi",
venv_name = "psql",
)
uv.declare_venv(
hub_name = "pypi",
venv_name = "no-sdist",
)
uv.lockfile(
src = "//cases/uv-no-sdist-754:uv.lock",
hub_name = "pypi",
venv_name = "no-sdist",
)
use_repo(uv, "pypi")
26 changes: 26 additions & 0 deletions e2e/cases/uv-no-sdist-754/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
load("@aspect_bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")

platform(
name = "amd64_windows",
constraint_values = [
"@platforms//os:windows",
"@platforms//cpu:x86_64",
],
flags = [
"--@aspect_rules_py//uv/private/constraints/platform:platform_libc=msvc",
"--@aspect_rules_py//uv/private/constraints/platform:platform_version=1.0",
"--@rules_rust//:extra_rustc_flag=-Cstrip=debuginfo",
"--@rules_rust//rust/settings:lto=fat",
"--stripopt=--strip-all",
# Note that we have to set this
"--@pypi//venv=no-sdist",
],
)

platform_transition_filegroup(
name = "test",
srcs = [
"@pypi//pywin32",
],
target_platform = ":amd64_windows",
)
33 changes: 33 additions & 0 deletions e2e/cases/uv-no-sdist-754/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion uv/private/constraints/platform/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ config_setting(
flag_values = {
":platform_libc": "musl",
},
visibility = ["//visibility:public"],
)

config_setting(
Expand All @@ -76,7 +77,13 @@ config_setting(
visibility = ["//visibility:public"],
)

# TODO: Windows
config_setting(
name = "is_msvc",
flag_values = {
":platform_libc": "msvc",
},
visibility = ["//visibility:public"],
)

generate(
visibility = ["//visibility:public"],
Expand Down
3 changes: 2 additions & 1 deletion uv/private/constraints/platform/defs.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ def supported_platform(platform_tag):
platform_tag == "any" or
platform_tag.startswith("macosx_") or
platform_tag.startswith("manylinux_") or
platform_tag.startswith("musllinux_")
platform_tag.startswith("musllinux_") or
platform_tag.startswith("win")
)

# Adapted from rules_python's config_settings.bzl
Expand Down
38 changes: 38 additions & 0 deletions uv/private/constraints/platform/macro.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,47 @@ def generate_musllinux(visibility):
visibility = visibility,
)

# buildifier: disable=unnamed-macro
# buildifier: disable=function-docstring
def generate_windows(visibility):
native.config_setting(
name = "win32",
flag_values = {
":platform_libc": "msvc",
},
constraint_values = [
"@platforms//os:windows",
"@platforms//cpu:x86_64",
],
visibility = visibility,
)
native.config_setting(
name = "win_amd64",
flag_values = {
":platform_libc": "msvc",
},
constraint_values = [
"@platforms//os:windows",
"@platforms//cpu:x86_64",
],
visibility = visibility,
)
native.config_setting(
name = "win_arm64",
flag_values = {
":platform_libc": "msvc",
},
constraint_values = [
"@platforms//os:windows",
"@platforms//cpu:aarch64",
],
visibility = visibility,
)

# buildifier: disable=unnamed-macro
# buildifier: disable=function-docstring
def generate(visibility):
generate_macos(visibility = visibility)
generate_manylinux(visibility = visibility)
generate_musllinux(visibility = visibility)
generate_windows(visibility = visibility)
50 changes: 31 additions & 19 deletions uv/private/whl_install/repository.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ load("//uv/private/constraints/python:defs.bzl", "supported_python")
def _format_arms(d):
content = [" \"{}\": \"{}\"".format(k, v) for k, v in d.items()]
content = ",\n".join(content)
return "{\n" + content + "\n }"
return "{\n" + content + "\n }"

def _select_key(pair):
"""Force (triple, target) pairs into a orderable form.
Expand Down Expand Up @@ -131,20 +131,32 @@ def _whl_install_impl(repository_ctx):
"//conditions:default": str(repository_ctx.attr.sbuild),
}

else:
content.append("""
filegroup(
name = "_no_sbuild",
srcs = [],
target_compatible_with = ["@platforms//:incompatible"]
)
""")
select_arms = select_arms | {
"//conditions:default": ":_no_sbuild",
}

content.append(
"""
select_chain(
name = "whl",
arms = {},
visibility = ["//visibility:private"],
name = "whl",
arms = {},
visibility = ["//visibility:private"],
)
py_library(
name = "whl_lib",
srcs = [],
data = [
":whl"
],
visibility = ["//visibility:private"],
name = "whl_lib",
srcs = [],
data = [
":whl"
],
visibility = ["//visibility:private"],
)
""".format(
_format_arms(select_arms),
Expand All @@ -155,17 +167,17 @@ py_library(
content.append(
"""
whl_install(
name = "actual_install",
src = ":whl",
visibility = ["//visibility:private"],
name = "actual_install",
src = ":whl",
visibility = ["//visibility:private"],
)
alias(
name = "install",
actual = select({
"@aspect_rules_py//uv/private/constraints:libs_are_libs": ":actual_install",
"@aspect_rules_py//uv/private/constraints:libs_are_whls": ":whl_lib",
}),
visibility = ["//visibility:public"],
name = "install",
actual = select({
"@aspect_rules_py//uv/private/constraints:libs_are_libs": ":actual_install",
"@aspect_rules_py//uv/private/constraints:libs_are_whls": ":whl_lib",
}),
visibility = ["//visibility:public"],
)
""",
)
Expand Down