From d1d35b280af1459458f996502e255d3774f391c2 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 21 Aug 2023 05:18:25 -0700 Subject: [PATCH] Expose PackageSpecificationInfo provider as a top level symbol PiperOrigin-RevId: 558757374 Change-Id: I09ba247ebb611efcebb4ee9f774d1687edd91dd1 --- .../PackageSpecificationProvider.java | 4 ++- .../bazel/rules/BazelRuleClassProvider.java | 10 ++++++++ .../build/lib/bazel/rules/CcRules.java | 3 --- .../PackageSpecificationProviderApi.java | 25 +++++++++++++++++++ .../common/cc/cc_toolchain_attrs.bzl | 2 +- 5 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/starlarkbuildapi/PackageSpecificationProviderApi.java diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java index a6f63e8de37631..a6ce95562ae2a0 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java @@ -24,13 +24,15 @@ import com.google.devtools.build.lib.packages.PackageGroup; import com.google.devtools.build.lib.packages.PackageSpecification.PackageGroupContents; import com.google.devtools.build.lib.packages.Provider; +import com.google.devtools.build.lib.starlarkbuildapi.PackageSpecificationProviderApi; import java.util.Optional; /** * A {@link TransitiveInfoProvider} that describes a set of transitive package specifications used * in package groups. */ -public class PackageSpecificationProvider extends NativeInfo implements TransitiveInfoProvider { +public class PackageSpecificationProvider extends NativeInfo + implements TransitiveInfoProvider, PackageSpecificationProviderApi { private static final String STARLARK_NAME = "PackageSpecificationInfo"; diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index 355106295997d1..712b9ec6fbf1a0 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.actions.ActionEnvironment; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet; +import com.google.devtools.build.lib.analysis.PackageSpecificationProvider; import com.google.devtools.build.lib.analysis.PlatformConfiguration; import com.google.devtools.build.lib.analysis.ShellConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; @@ -522,6 +523,14 @@ public ImmutableList requires() { } }; + static final RuleSet PACKAGING_RULES = + new RuleSet() { + @Override + public void init(ConfiguredRuleClassProvider.Builder builder) { + builder.addBzlToplevel("PackageSpecificationInfo", PackageSpecificationProvider.PROVIDER); + } + }; + private static final ImmutableSet RULE_SETS = ImmutableSet.of( BAZEL_SETUP, @@ -542,6 +551,7 @@ public ImmutableList requires() { J2ObjcRules.INSTANCE, TestingSupportRules.INSTANCE, VARIOUS_WORKSPACE_RULES, + PACKAGING_RULES, // This rule set is a little special: it needs to depend on every configuration fragment // that has Make variables, so we put it last. ToolchainRules.INSTANCE); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java index 93a533385b946f..bd8bf2c4e4da42 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/CcRules.java @@ -16,7 +16,6 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet; -import com.google.devtools.build.lib.analysis.PackageSpecificationProvider; import com.google.devtools.build.lib.analysis.StaticallyLinkedMarkerProvider; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcBinaryRule; import com.google.devtools.build.lib.bazel.rules.cpp.BazelCcImportRule; @@ -109,8 +108,6 @@ public void init(ConfiguredRuleClassProvider.Builder builder) { builder.addStarlarkBuiltinsInternal( "PropellerOptimizeInfo", PropellerOptimizeProvider.PROVIDER); builder.addStarlarkBuiltinsInternal("MemProfProfileInfo", MemProfProfileProvider.PROVIDER); - builder.addStarlarkBuiltinsInternal( - "PackageSpecificationInfo", PackageSpecificationProvider.PROVIDER); builder.addStarlarkBuiltinsInternal("cc_common", bazelCcModule); builder.addStarlarkBootstrap( new CcBootstrap( diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/PackageSpecificationProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/PackageSpecificationProviderApi.java new file mode 100644 index 00000000000000..c313719dcbbd5c --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/PackageSpecificationProviderApi.java @@ -0,0 +1,25 @@ +// Copyright 2023 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. +package com.google.devtools.build.lib.starlarkbuildapi; + +import com.google.devtools.build.docgen.annot.DocCategory; +import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi; +import net.starlark.java.annot.StarlarkBuiltin; + +/** Provider which describes a set of transitive package specifications used in package groups. */ +@StarlarkBuiltin( + name = "PackageSpecificationInfo", + doc = "Information about transitive package specifications used in package groups.", + category = DocCategory.PROVIDER) +public interface PackageSpecificationProviderApi extends StructApi {} diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl index e1c7bcca9aac93..78ab88faad0a61 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain_attrs.bzl @@ -19,7 +19,7 @@ load(":common/cc/semantics.bzl", "semantics") FdoProfileInfo = _builtins.internal.FdoProfileInfo FdoPrefetchHintsInfo = _builtins.internal.FdoPrefetchHintsInfo PropellerOptimizeInfo = _builtins.internal.PropellerOptimizeInfo -PackageSpecificationInfo = _builtins.internal.PackageSpecificationInfo +PackageSpecificationInfo = _builtins.toplevel.PackageSpecificationInfo CcToolchainConfigInfo = _builtins.toplevel.CcToolchainConfigInfo MemProfProfileInfo = _builtins.internal.MemProfProfileInfo