Skip to content

Commit

Permalink
Add internal macros and partially migrate Bazel for upcoming change
Browse files Browse the repository at this point in the history
This adds `@bazel_tools//tools/python:private/defs.bzl`, which defines macro wrappers around the four native Python rules (`py_library`, `py_binary`, `py_test`, `py_runtime`). These wrappers simulate the behavior of `@rules_python//python:defs.bzl`, so that they are compatible with the upcoming `--incompatible_load_python_rules_from_bzl` flag.

This change also updates many direct uses of the native Python rules to use the wrappers instead. However, changes to the third_party/ directory have to be in a separate commit.

The new macros should only be used by Bazel itself. All external users should use @rules_python instead.

I'm omitting updating src/test/py/bazel/testdata/runfiles_test/*/BUILD.mock files because they appear to be tests that shouldn't complain until the flag is flipped, and I'm not sure that adding a load won't break them. Also not updating the examples/ dir for similar reasons.

Work toward #9006.

RELNOTES: None
PiperOrigin-RevId: 260858287
  • Loading branch information
brandjon authored and copybara-github committed Jul 31, 2019
1 parent a9cdc3d commit db063a8
Show file tree
Hide file tree
Showing 19 changed files with 75 additions and 5 deletions.
2 changes: 2 additions & 0 deletions BUILD
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Bazel - Google's Build System

load("//tools/python:private/defs.bzl", "py_binary")

package(default_visibility = ["//scripts/release:__pkg__"])

exports_files(["LICENSE"])
Expand Down
2 changes: 2 additions & 0 deletions scripts/docs/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_library", "py_binary")

filegroup(
name = "srcs",
srcs = glob(["**"]),
Expand Down
1 change: 1 addition & 0 deletions src/BUILD
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Packaging

load("//tools/python:private/defs.bzl", "py_library", "py_binary")
load(":embedded_tools.bzl", "srcsfile")
load(":rule_size_test.bzl", "rule_size_test")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public void setup(MockToolsConfig config) throws IOException {
addTool(config, "tools/python/srcs_version.bzl");
addTool(config, "tools/python/toolchain.bzl");
addTool(config, "tools/python/utils.bzl");
addTool(config, "tools/python/private/defs.bzl");

config.create(
TestConstants.TOOLS_REPOSITORY_SCRATCH + "tools/python/BUILD",
Expand Down
1 change: 1 addition & 0 deletions src/test/py/bazel/BUILD
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package(default_visibility = ["//visibility:private"])

load("@rules_cc//cc:defs.bzl", "cc_binary")
load("//tools/python:private/defs.bzl", "py_library", "py_test")

filegroup(
name = "srcs",
Expand Down
1 change: 1 addition & 0 deletions src/test/starlark/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ load(
"rule_test",
"file_test",
)
load("//tools/python:private/defs.bzl", "py_test")

package(default_visibility = ["//src:__subpackages__"])

Expand Down
2 changes: 2 additions & 0 deletions tools/android/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_library", "py_binary", "py_test")

package(default_visibility = ["//tools:__pkg__"])

py_binary(
Expand Down
2 changes: 2 additions & 0 deletions tools/android/BUILD.tools
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_library", "py_binary")

package(default_visibility = ["//visibility:public"])

alias(
Expand Down
2 changes: 2 additions & 0 deletions tools/aquery_differ/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.

load("//tools/python:private/defs.bzl", "py_library", "py_binary", "py_test")

package(default_visibility = ["//visibility:public"])

licenses(["notice"]) # Apache 2.0
Expand Down
2 changes: 2 additions & 0 deletions tools/build_defs/hash/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_binary")

licenses(["notice"]) # Apache 2.0

filegroup(
Expand Down
1 change: 1 addition & 0 deletions tools/build_defs/pkg/BUILD
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
load("//tools/config:common_settings.bzl", "bool_flag")
load("//tools/python:private/defs.bzl", "py_library", "py_binary", "py_test")

licenses(["notice"]) # Apache 2.0

Expand Down
2 changes: 2 additions & 0 deletions tools/build_rules/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_test")

licenses(["notice"]) # Apache 2.0

filegroup(
Expand Down
1 change: 1 addition & 0 deletions tools/jdk/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ load(
"remote_java_tools_java_import",
)
load("@rules_cc//cc:defs.bzl", "cc_binary")
load("//tools/python:private/defs.bzl", "py_binary", "py_test")

package(default_visibility = ["//visibility:public"])

Expand Down
1 change: 1 addition & 0 deletions tools/python/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
load("//tools/python:private/defs.bzl", "py_test")
load(":utils.bzl", "expand_pyversion_template")

package(default_visibility = ["//visibility:public"])
Expand Down
1 change: 1 addition & 0 deletions tools/python/BUILD.tools
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ exports_files([
"srcs_version.bzl",
"toolchain.bzl",
"utils.bzl",
"private/defs.bzl",
# write_file.bzl fortunately doesn't need to be exposed because it's only
# used in this BUILD file.
])
Expand Down
43 changes: 43 additions & 0 deletions tools/python/private/defs.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Copyright 2019 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.

"""This is a Bazel-internal file; do not load() it!
This file replicates the behavior of the macros in bazelbuild/rules_python's
`//python:defs.bzl` file, allowing the four native rules to be used even with
`--incompatible_load_python_rules_from_bzl` enabled.
We need this file because Bazel's own codebase may not depend on rules_python.
"""

_MIGRATION_TAG = "__PYTHON_RULES_MIGRATION_DO_NOT_USE_WILL_BREAK__"

def _add_tags(attrs):
if "tags" in attrs and attrs["tags"] != None:
attrs["tags"] += [_MIGRATION_TAG]
else:
attrs["tags"] = [_MIGRATION_TAG]
return attrs

def py_library(**attrs):
native.py_library(**_add_tags(attrs))

def py_binary(**attrs):
native.py_binary(**_add_tags(attrs))

def py_test(**attrs):
native.py_test(**_add_tags(attrs))

def py_runtime(**attrs):
native.py_runtime(**_add_tags(attrs))
2 changes: 2 additions & 0 deletions tools/python/runfiles/BUILD
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_library", "py_test")

package(default_visibility = ["//visibility:private"])

filegroup(
Expand Down
2 changes: 2 additions & 0 deletions tools/python/runfiles/BUILD.tools
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
load("//tools/python:private/defs.bzl", "py_library")

py_library(
name = "runfiles",
srcs = ["runfiles.py"],
Expand Down
11 changes: 6 additions & 5 deletions tools/python/toolchain.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"""Definitions related to the Python toolchain."""

load(":utils.bzl", "expand_pyversion_template")
load(":private/defs.bzl", "py_runtime")

def _py_runtime_pair_impl(ctx):
if ctx.attr.py2_runtime != None:
Expand Down Expand Up @@ -159,28 +160,28 @@ def define_autodetecting_toolchain(
# have to use a workaround to allow it to be depended on by py_runtime. See
# https://github.com/bazelbuild/bazel/issues/4286#issuecomment-475661317.

native.py_runtime(
py_runtime(
name = "_autodetecting_py2_runtime",
interpreter = ":py2wrapper.sh",
python_version = "PY2",
visibility = ["//visibility:private"],
)

native.py_runtime(
py_runtime(
name = "_autodetecting_py3_runtime",
interpreter = ":py3wrapper.sh",
python_version = "PY3",
visibility = ["//visibility:private"],
)

native.py_runtime(
py_runtime(
name = "_autodetecting_py2_runtime_nonstrict",
interpreter = ":py2wrapper_nonstrict.sh",
python_version = "PY2",
visibility = ["//visibility:private"],
)

native.py_runtime(
py_runtime(
name = "_autodetecting_py3_runtime_nonstrict",
interpreter = ":py3wrapper_nonstrict.sh",
python_version = "PY3",
Expand All @@ -190,7 +191,7 @@ def define_autodetecting_toolchain(
# This is a dummy runtime whose interpreter_path triggers the native rule
# logic to use the legacy behavior on Windows.
# TODO(#7844): Remove this target.
native.py_runtime(
py_runtime(
name = "_sentinel_py2_runtime",
interpreter_path = "/_magic_pyruntime_sentinel_do_not_use",
python_version = "PY2",
Expand Down

0 comments on commit db063a8

Please sign in to comment.