| Index: third_party/protobuf/BUILD
 | 
| diff --git a/third_party/protobuf/BUILD b/third_party/protobuf/BUILD
 | 
| index 8b1046b90d5c9014f594943c0ed36866c4db6afe..f17c500a783898fa0c984ed21b3255a8bb417f80 100644
 | 
| --- a/third_party/protobuf/BUILD
 | 
| +++ b/third_party/protobuf/BUILD
 | 
| @@ -2,6 +2,8 @@
 | 
|  
 | 
|  licenses(["notice"])
 | 
|  
 | 
| +exports_files(["LICENSE"])
 | 
| +
 | 
|  ################################################################################
 | 
|  # Protobuf Runtime Library
 | 
|  ################################################################################
 | 
| @@ -12,7 +14,7 @@ COPTS = [
 | 
|      "-Wwrite-strings",
 | 
|      "-Woverloaded-virtual",
 | 
|      "-Wno-sign-compare",
 | 
| -    "-Wno-error=unused-function",
 | 
| +    "-Wno-unused-function",
 | 
|  ]
 | 
|  
 | 
|  config_setting(
 | 
| @@ -32,6 +34,7 @@ load(
 | 
|      "protobuf",
 | 
|      "cc_proto_library",
 | 
|      "py_proto_library",
 | 
| +    "internal_copied_filegroup",
 | 
|      "internal_gen_well_known_protos_java",
 | 
|      "internal_protobuf_py_tests",
 | 
|  )
 | 
| @@ -313,6 +316,7 @@ cc_library(
 | 
|          "src/google/protobuf/compiler/objectivec/objectivec_message_field.cc",
 | 
|          "src/google/protobuf/compiler/objectivec/objectivec_oneof.cc",
 | 
|          "src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc",
 | 
| +        "src/google/protobuf/compiler/php/php_generator.cc",
 | 
|          "src/google/protobuf/compiler/plugin.cc",
 | 
|          "src/google/protobuf/compiler/plugin.pb.cc",
 | 
|          "src/google/protobuf/compiler/python/python_generator.cc",
 | 
| @@ -387,8 +391,10 @@ RELATIVE_TEST_PROTOS = [
 | 
|      "google/protobuf/util/internal/testdata/field_mask.proto",
 | 
|      "google/protobuf/util/internal/testdata/maps.proto",
 | 
|      "google/protobuf/util/internal/testdata/oneofs.proto",
 | 
| +    "google/protobuf/util/internal/testdata/proto3.proto",
 | 
|      "google/protobuf/util/internal/testdata/struct.proto",
 | 
|      "google/protobuf/util/internal/testdata/timestamp_duration.proto",
 | 
| +    "google/protobuf/util/internal/testdata/wrappers.proto",
 | 
|      "google/protobuf/util/json_format_proto3.proto",
 | 
|      "google/protobuf/util/message_differencer_unittest.proto",
 | 
|  ]
 | 
| @@ -560,6 +566,8 @@ py_library(
 | 
|              "python/google/protobuf/**/*.py",
 | 
|          ],
 | 
|          exclude = [
 | 
| +            "python/google/protobuf/__init__.py",
 | 
| +            "python/google/protobuf/**/__init__.py",
 | 
|              "python/google/protobuf/internal/*_test.py",
 | 
|              "python/google/protobuf/internal/test_util.py",
 | 
|          ],
 | 
| @@ -569,7 +577,7 @@ py_library(
 | 
|  )
 | 
|  
 | 
|  cc_binary(
 | 
| -    name = "internal/_api_implementation.so",
 | 
| +    name = "python/google/protobuf/internal/_api_implementation.so",
 | 
|      srcs = ["python/google/protobuf/internal/api_implementation.cc"],
 | 
|      copts = COPTS + [
 | 
|          "-DPYTHON_PROTO2_CPP_IMPL_V2",
 | 
| @@ -583,7 +591,7 @@ cc_binary(
 | 
|  )
 | 
|  
 | 
|  cc_binary(
 | 
| -    name = "pyext/_message.so",
 | 
| +    name = "python/google/protobuf/pyext/_message.so",
 | 
|      srcs = glob([
 | 
|          "python/google/protobuf/pyext/*.cc",
 | 
|          "python/google/protobuf/pyext/*.h",
 | 
| @@ -622,15 +630,31 @@ config_setting(
 | 
|      },
 | 
|  )
 | 
|  
 | 
| +# Copy the builtin proto files from src/google/protobuf to
 | 
| +# python/google/protobuf. This way, the generated Python sources will be in the
 | 
| +# same directory as the Python runtime sources. This is necessary for the
 | 
| +# modules to be imported correctly since they are all part of the same Python
 | 
| +# package.
 | 
| +internal_copied_filegroup(
 | 
| +    name = "protos_python",
 | 
| +    srcs = WELL_KNOWN_PROTOS,
 | 
| +    strip_prefix = "src",
 | 
| +    dest = "python",
 | 
| +)
 | 
| +
 | 
| +# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
 | 
| +# which case we can simply add :protos_python in srcs.
 | 
| +COPIED_WELL_KNOWN_PROTOS = ["python/" + s for s in RELATIVE_WELL_KNOWN_PROTOS]
 | 
| +
 | 
|  py_proto_library(
 | 
|      name = "protobuf_python",
 | 
| -    srcs = WELL_KNOWN_PROTOS,
 | 
| -    include = "src",
 | 
| +    srcs = COPIED_WELL_KNOWN_PROTOS,
 | 
| +    include = "python",
 | 
|      data = select({
 | 
|          "//conditions:default": [],
 | 
|          ":use_fast_cpp_protos": [
 | 
| -            ":internal/_api_implementation.so",
 | 
| -            ":pyext/_message.so",
 | 
| +            ":python/google/protobuf/internal/_api_implementation.so",
 | 
| +            ":python/google/protobuf/pyext/_message.so",
 | 
|          ],
 | 
|      }),
 | 
|      default_runtime = "",
 | 
| @@ -643,10 +667,27 @@ py_proto_library(
 | 
|      visibility = ["//visibility:public"],
 | 
|  )
 | 
|  
 | 
| +# Copy the test proto files from src/google/protobuf to
 | 
| +# python/google/protobuf. This way, the generated Python sources will be in the
 | 
| +# same directory as the Python runtime sources. This is necessary for the
 | 
| +# modules to be imported correctly by the tests since they are all part of the
 | 
| +# same Python package.
 | 
| +internal_copied_filegroup(
 | 
| +    name = "protos_python_test",
 | 
| +    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
 | 
| +    strip_prefix = "src",
 | 
| +    dest = "python",
 | 
| +)
 | 
| +
 | 
| +# TODO(dzc): Remove this once py_proto_library can have labels in srcs, in
 | 
| +# which case we can simply add :protos_python_test in srcs.
 | 
| +COPIED_LITE_TEST_PROTOS = ["python/" + s for s in RELATIVE_LITE_TEST_PROTOS]
 | 
| +COPIED_TEST_PROTOS = ["python/" + s for s in RELATIVE_TEST_PROTOS]
 | 
| +
 | 
|  py_proto_library(
 | 
|      name = "python_common_test_protos",
 | 
| -    srcs = LITE_TEST_PROTOS + TEST_PROTOS,
 | 
| -    include = "src",
 | 
| +    srcs = COPIED_LITE_TEST_PROTOS + COPIED_TEST_PROTOS,
 | 
| +    include = "python",
 | 
|      default_runtime = "",
 | 
|      protoc = ":protoc",
 | 
|      srcs_version = "PY2AND3",
 | 
| @@ -672,6 +713,7 @@ py_library(
 | 
|          [
 | 
|              "python/google/protobuf/internal/*_test.py",
 | 
|              "python/google/protobuf/internal/test_util.py",
 | 
| +            "python/google/protobuf/internal/import_test_package/__init__.py",
 | 
|          ],
 | 
|      ),
 | 
|      imports = ["python"],
 | 
| 
 |