aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Jakob Buchgraber <buchgr@google.com>2017-09-05 17:15:10 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-09-05 22:33:54 +0200
commit699c0eb9cf6573f3a00b4db61f60aff92dc3dd7a (patch)
treef8a1f6f97bdea7d0680e65a65a558b3693997e1d
parent6699f2cf64c656d96f4d6f93fa9563faf02e94b4 (diff)
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.
-rw-r--r--BUILD60
-rw-r--r--WORKSPACE2
2 files changed, 47 insertions, 15 deletions
diff --git a/BUILD b/BUILD
index cacd2375..8e1d4bde 100644
--- a/BUILD
+++ b/BUILD
@@ -224,21 +224,24 @@ objc_library(
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 @@ cc_proto_library(
)
################################################################################
+# 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 2a49e372..1066a0e6 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -1,3 +1,5 @@
+workspace(name = "com_google_protobuf")
+
new_git_repository(
name = "googletest",
build_file = "gmock.BUILD",