bazel: Add proto_library rules for well known types. Fixes #2763
Adds a proto_library rule for each well known type proto:
$ bazel query "filter(\".*_proto$\", \"...\")"
//:wrappers_proto
//:timestamp_proto
//:struct_proto
//:field_mask_proto
//:empty_proto
//:duration_proto
//:compiler_plugin_proto
//:descriptor_proto
//:api_proto
//:type_proto
//:source_context_proto
//:any_proto
Bazel users can reference these proto_library rules for their own
language specific rules i.e.
java_proto_library(
name = "any_java_proto",
deps = ["@com_google_protobuf//:any_proto"],
)
Also set the workspace name to "com_google_protobuf", as proto_library
rules reference protobuf that way.
diff --git a/BUILD b/BUILD
index cacd237..8e1d4bd 100644
--- a/BUILD
+++ b/BUILD
@@ -224,21 +224,24 @@
visibility = ["//visibility:public"],
)
-RELATIVE_WELL_KNOWN_PROTOS = [
- # AUTOGEN(well_known_protos)
- "google/protobuf/any.proto",
- "google/protobuf/api.proto",
- "google/protobuf/compiler/plugin.proto",
- "google/protobuf/descriptor.proto",
- "google/protobuf/duration.proto",
- "google/protobuf/empty.proto",
- "google/protobuf/field_mask.proto",
- "google/protobuf/source_context.proto",
- "google/protobuf/struct.proto",
- "google/protobuf/timestamp.proto",
- "google/protobuf/type.proto",
- "google/protobuf/wrappers.proto",
-]
+# Map of all well known protos.
+# name => (include path, imports)
+WELL_KNOWN_PROTO_MAP = {
+ "any" : ("google/protobuf/any.proto", []),
+ "api" : ("google/protobuf/api.proto", ["source_context", "type"]),
+ "compiler_plugin" : ("google/protobuf/compiler/plugin.proto", ["descriptor"]),
+ "descriptor" : ("google/protobuf/descriptor.proto", []),
+ "duration" : ("google/protobuf/duration.proto", []),
+ "empty" : ("google/protobuf/empty.proto", []),
+ "field_mask" : ("google/protobuf/field_mask.proto", []),
+ "source_context" : ("google/protobuf/source_context.proto", []),
+ "struct" : ("google/protobuf/struct.proto", []),
+ "timestamp" : ("google/protobuf/timestamp.proto", []),
+ "type" : ("google/protobuf/type.proto", ["any", "source_context"]),
+ "wrappers" : ("google/protobuf/wrappers.proto", []),
+}
+
+RELATIVE_WELL_KNOWN_PROTOS = [proto[1][0] for proto in WELL_KNOWN_PROTO_MAP.items()]
WELL_KNOWN_PROTOS = ["src/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
@@ -259,6 +262,33 @@
)
################################################################################
+# Well Known Types Proto Library Rules
+#
+# These proto_library rules can be used with one of the language specific proto
+# library rules i.e. java_proto_library:
+#
+# java_proto_library(
+# name = "any_java_proto",
+# deps = ["@com_google_protobuf//:any_proto],
+# )
+################################################################################
+
+internal_copied_filegroup(
+ name = "_internal_wkt_protos",
+ srcs = WELL_KNOWN_PROTOS,
+ dest = "",
+ strip_prefix = "src",
+ visibility = ["//visibility:hidden"],
+)
+
+[proto_library(
+ name = proto[0] + "_proto",
+ srcs = [proto[1][0]],
+ deps = [dep + "_proto" for dep in proto[1][1]],
+ visibility = ["//visibility:public"],
+ ) for proto in WELL_KNOWN_PROTO_MAP.items()]
+
+################################################################################
# Protocol Buffers Compiler
################################################################################
diff --git a/WORKSPACE b/WORKSPACE
index 2a49e37..1066a0e 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1,3 +1,5 @@
+workspace(name = "com_google_protobuf")
+
new_git_repository(
name = "googletest",
build_file = "gmock.BUILD",