aboutsummaryrefslogtreecommitdiff
path: root/examples/wheel/BUILD.bazel
diff options
context:
space:
mode:
Diffstat (limited to 'examples/wheel/BUILD.bazel')
-rw-r--r--examples/wheel/BUILD.bazel287
1 files changed, 287 insertions, 0 deletions
diff --git a/examples/wheel/BUILD.bazel b/examples/wheel/BUILD.bazel
new file mode 100644
index 0000000..f56a41b
--- /dev/null
+++ b/examples/wheel/BUILD.bazel
@@ -0,0 +1,287 @@
+# Copyright 2018 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load("@bazel_skylib//rules:build_test.bzl", "build_test")
+load("//examples/wheel/private:wheel_utils.bzl", "directory_writer", "make_variable_tags")
+load("//python:defs.bzl", "py_library", "py_test")
+load("//python:packaging.bzl", "py_package", "py_wheel")
+load("//python:versions.bzl", "gen_python_config_settings")
+
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"]) # Apache 2.0
+
+py_library(
+ name = "main",
+ srcs = ["main.py"],
+ deps = [
+ "//examples/wheel/lib:simple_module",
+ "//examples/wheel/lib:module_with_data",
+ # Example dependency which is not packaged in the wheel
+ # due to "packages" filter on py_package rule.
+ "//tests/load_from_macro:foo",
+ ],
+)
+
+py_library(
+ name = "main_with_gen_data",
+ srcs = ["main.py"],
+ data = [
+ ":gen_dir",
+ ],
+)
+
+directory_writer(
+ name = "gen_dir",
+ out = "someDir",
+ files = {"foo.py": ""},
+)
+
+# Package just a specific py_libraries, without their dependencies
+py_wheel(
+ name = "minimal_with_py_library",
+ testonly = True, # Set this to verify the generated .dist target doesn't break things
+ # Package data. We're building "example_minimal_library-0.0.1-py3-none-any.whl"
+ distribution = "example_minimal_library",
+ python_tag = "py3",
+ version = "0.0.1",
+ deps = [
+ "//examples/wheel/lib:module_with_data",
+ "//examples/wheel/lib:simple_module",
+ ],
+)
+
+# Populate a rule with "Make Variable" arguments for
+# abi, python_tag and version. You might want to do this
+# for the following use cases:
+# - abi, python_tag: introspect a toolchain to map to appropriate cpython tags
+# - version: populate given this or a dependent module's version
+make_variable_tags(
+ name = "make_variable_tags",
+)
+
+py_wheel(
+ name = "minimal_with_py_library_with_make_variables",
+ testonly = True,
+ abi = "$(ABI)",
+ distribution = "example_minimal_library",
+ python_tag = "$(PYTHON_TAG)",
+ toolchains = ["//examples/wheel:make_variable_tags"],
+ version = "$(VERSION)",
+ deps = [
+ "//examples/wheel/lib:module_with_data",
+ "//examples/wheel/lib:simple_module",
+ ],
+)
+
+build_test(
+ name = "dist_build_tests",
+ targets = [":minimal_with_py_library.dist"],
+)
+
+# Package just a specific py_libraries, without their dependencies
+py_wheel(
+ name = "minimal_with_py_library_with_stamp",
+ # Package data. We're building "example_minimal_library-0.0.1-py3-none-any.whl"
+ distribution = "example_minimal_library{BUILD_USER}",
+ python_tag = "py3",
+ stamp = 1,
+ version = "0.1.{BUILD_TIMESTAMP}",
+ deps = [
+ "//examples/wheel/lib:module_with_data",
+ "//examples/wheel/lib:simple_module",
+ ],
+)
+
+# Use py_package to collect all transitive dependencies of a target,
+# selecting just the files within a specific python package.
+py_package(
+ name = "example_pkg",
+ # Only include these Python packages.
+ packages = ["examples.wheel"],
+ deps = [":main"],
+)
+
+py_package(
+ name = "example_pkg_with_data",
+ packages = ["examples.wheel"],
+ deps = [":main_with_gen_data"],
+)
+
+py_wheel(
+ name = "minimal_with_py_package",
+ # Package data. We're building "example_minimal_package-0.0.1-py3-none-any.whl"
+ distribution = "example_minimal_package",
+ python_tag = "py3",
+ version = "0.0.1",
+ deps = [":example_pkg"],
+)
+
+# An example that uses all features provided by py_wheel.
+py_wheel(
+ name = "customized",
+ author = "Example Author with non-ascii characters: żółw",
+ author_email = "example@example.com",
+ classifiers = [
+ "License :: OSI Approved :: Apache Software License",
+ "Intended Audience :: Developers",
+ ],
+ console_scripts = {
+ "customized_wheel": "examples.wheel.main:main",
+ },
+ description_file = "README.md",
+ # Package data. We're building "example_customized-0.0.1-py3-none-any.whl"
+ distribution = "example_customized",
+ entry_points = {
+ "console_scripts": ["another = foo.bar:baz"],
+ "group2": [
+ "second = second.main:s",
+ "first = first.main:f",
+ ],
+ },
+ extra_distinfo_files = {
+ "//examples/wheel:NOTICE": "NOTICE",
+ # Rename the file when packaging to show we can.
+ "//examples/wheel:README.md": "README",
+ },
+ homepage = "www.example.com",
+ license = "Apache 2.0",
+ project_urls = {
+ "Bug Tracker": "www.example.com/issues",
+ "Documentation": "www.example.com/docs",
+ },
+ python_tag = "py3",
+ # Requirements embedded into the wheel metadata.
+ requires = ["pytest"],
+ summary = "A one-line summary of this test package",
+ version = "0.0.1",
+ deps = [":example_pkg"],
+)
+
+# An example of how to change the wheel package root directory using 'strip_path_prefixes'.
+py_wheel(
+ name = "custom_package_root",
+ # Package data. We're building "examples_custom_package_root-0.0.1-py3-none-any.whl"
+ distribution = "examples_custom_package_root",
+ entry_points = {
+ "console_scripts": ["main = foo.bar:baz"],
+ },
+ python_tag = "py3",
+ strip_path_prefixes = [
+ "examples",
+ ],
+ version = "0.0.1",
+ deps = [
+ ":example_pkg",
+ ],
+)
+
+py_wheel(
+ name = "custom_package_root_multi_prefix",
+ # Package data. We're building "custom_custom_package_root_multi_prefix-0.0.1-py3-none-any.whl"
+ distribution = "example_custom_package_root_multi_prefix",
+ python_tag = "py3",
+ strip_path_prefixes = [
+ "examples/wheel/lib",
+ "examples/wheel",
+ ],
+ version = "0.0.1",
+ deps = [
+ ":example_pkg",
+ ],
+)
+
+py_wheel(
+ name = "custom_package_root_multi_prefix_reverse_order",
+ # Package data. We're building "custom_custom_package_root_multi_prefix_reverse_order-0.0.1-py3-none-any.whl"
+ distribution = "example_custom_package_root_multi_prefix_reverse_order",
+ python_tag = "py3",
+ strip_path_prefixes = [
+ "examples/wheel",
+ "examples/wheel/lib", # this is not effective, because the first prefix takes priority
+ ],
+ version = "0.0.1",
+ deps = [
+ ":example_pkg",
+ ],
+)
+
+py_wheel(
+ name = "python_requires_in_a_package",
+ distribution = "example_python_requires_in_a_package",
+ python_requires = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
+ python_tag = "py3",
+ version = "0.0.1",
+ deps = [
+ ":example_pkg",
+ ],
+)
+
+py_wheel(
+ name = "use_rule_with_dir_in_outs",
+ distribution = "use_rule_with_dir_in_outs",
+ python_tag = "py3",
+ version = "0.0.1",
+ deps = [
+ ":example_pkg_with_data",
+ ],
+)
+
+gen_python_config_settings()
+
+py_wheel(
+ name = "python_abi3_binary_wheel",
+ abi = "abi3",
+ distribution = "example_python_abi3_binary_wheel",
+ # these platform strings must line up with test_python_abi3_binary_wheel() in wheel_test.py
+ platform = select({
+ ":aarch64-apple-darwin": "macosx_11_0_arm64",
+ ":aarch64-unknown-linux-gnu": "manylinux2014_aarch64",
+ ":x86_64-apple-darwin": "macosx_11_0_x86_64", # this is typically macosx_10_9_x86_64?
+ ":x86_64-pc-windows-msvc": "win_amd64",
+ ":x86_64-unknown-linux-gnu": "manylinux2014_x86_64",
+ }),
+ python_requires = ">=3.8",
+ python_tag = "cp38",
+ version = "0.0.1",
+)
+
+py_wheel(
+ name = "filename_escaping",
+ # Per https://www.python.org/dev/peps/pep-0427/#escaping-and-unicode
+ # runs of non-alphanumeric, non-digit symbols should be replaced with a single underscore.
+ # Unicode non-ascii letters should *not* be replaced with underscore.
+ distribution = "file~~name-escaping",
+ python_tag = "py3",
+ version = "0.0.1-r7",
+ deps = [":example_pkg"],
+)
+
+py_test(
+ name = "wheel_test",
+ srcs = ["wheel_test.py"],
+ data = [
+ ":custom_package_root",
+ ":custom_package_root_multi_prefix",
+ ":custom_package_root_multi_prefix_reverse_order",
+ ":customized",
+ ":filename_escaping",
+ ":minimal_with_py_library",
+ ":minimal_with_py_library_with_stamp",
+ ":minimal_with_py_package",
+ ":python_abi3_binary_wheel",
+ ":python_requires_in_a_package",
+ ":use_rule_with_dir_in_outs",
+ ],
+)