Add a BUILD file for googletest.

This is from upstream in-progress pull request
<https://github.com/google/googletest/pull/581>. We should update after
upstream accepts a final version.

Change-Id: Ifbb4baabc66f398ebd48f5ca37539f7e79e50a5e
diff --git a/third_party/googletest/BUILD b/third_party/googletest/BUILD
new file mode 100644
index 0000000..0eb47fd
--- /dev/null
+++ b/third_party/googletest/BUILD
@@ -0,0 +1,602 @@
+# This Package contains the necessary targets to incorporate the googletest
+# libraries into your Bazel built projects.
+#
+# The libraries are defined here rather than in their component directories
+# because googlemock has dependencies on googletest and by defining the
+# build targets here, the libraries are independent of their location in
+# a more straightforward way.
+
+licenses(["notice"])
+
+cc_library(
+    name = "googletest",
+    srcs = glob([
+    	"googletest/src/gtest.cc",
+    	"googletest/src/gtest-death-test.cc",
+    	"googletest/src/gtest-filepath.cc",
+    	"googletest/src/gtest-internal-inl.h",
+    	"googletest/src/gtest-port.cc",
+    	"googletest/src/gtest-printers.cc",
+    	"googletest/src/gtest-test-part.cc",
+    	"googletest/src/gtest-typed-test.cc",
+    	"googletest/include/gtest/internal/*.h",
+    	"googletest/include/gtest/internal/custom/*.h",
+    ]),
+    hdrs = glob([
+    	"googletest/include/gtest/*.h"
+    ]),
+    includes = [
+        "googletest",
+        "googletest/include",
+    ],
+    copts = [
+        "-g",
+        "-Wall",
+        "-Wextra",
+    ],
+    linkopts = [
+        "-pthread",
+    ],
+)
+
+cc_library(
+	name = "googlemock",
+    srcs = glob([
+        "googlemock/src/gmock-cardinalities.cc",
+        "googlemock/src/gmock.cc",
+        "googlemock/src/gmock-internal-utils.cc",
+        "googlemock/src/gmock_main.cc",
+        "googlemock/src/gmock-matchers.cc",
+        "googlemock/src/gmock-spec-builders.cc",
+        "googlemock/include/gmock/internal/*.h",
+        "googlemock/include/gmock/internal/custom/*.h",
+    ]),
+    hdrs = glob([
+        "googlemock/include/gmock/*.h"
+    ]),
+    includes = [
+        "googletest/include",
+        "googlemock",
+        "googlemock/include",
+    ],
+    copts = [
+        "-std=c++11",
+        "-g",
+        "-Wall",
+        "-Wextra",
+    ],
+    linkopts = [
+        "-pthread",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_library(
+	name = "googletest_sample_libs",
+	hdrs = [
+	    "googletest/samples/prime_tables.h",
+	    "googletest/samples/sample1.h",
+	    "googletest/samples/sample2.h",
+	    "googletest/samples/sample3-inl.h",
+	    "googletest/samples/sample4.h",
+	],
+	srcs = [
+	    "googletest/samples/sample1.cc",
+	    "googletest/samples/sample2.cc",
+	    "googletest/samples/sample4.cc",
+	],
+)
+
+test_suite(
+	name = "googletest_example_tests",
+	tests = [
+	    ":googletest_sample1_test",
+	    ":googletest_sample2_test",
+	    ":googletest_sample3_test",
+	    ":googletest_sample4_test",
+	    ":googletest_sample5_test",
+	    ":googletest_sample6_test",
+  	    ":googletest_sample7_test",
+	    ":googletest_sample8_test",
+	    ":googletest_sample9_test",
+	    ":googletest_sample10_test",
+	],
+)
+
+test_suite(
+    name = "googletest_tests",
+    tests = [
+        ":googletest_gtest_filepath_test",
+        ":googletest_gtest_linked_ptr_test",
+        ":googletest_gtest_message_test",
+        # The gtest_options_test fails when run as a test suite since it
+        # uses a hard-coded binary name.
+        # ":googletest_gtest_options_test",
+        ":googletest_gtest_port_test",
+        ":googletest_gtest_pred_impl_unittest",
+        ":googletest_gtest_prod_test",
+        ":googletest_gtest_test_part_test",
+        ":googletest_gtest_typed_test_test",
+        ":googletest_gtest_typed_test2_test",
+        ":googletest_gtest_unittest",
+        ":googletest_gtest_production_test",
+    ],
+)
+
+test_suite(
+    name = "googlemock_tests",
+    tests = [
+        ":googlemock_gmock_actions_test",
+        ":googlemock_gmock_cardinalities_test",
+        ":googlemock_gmock_ex_test",
+        ":googlemock_gmock_generated_actions_test",
+        ":googlemock_gmock-generated_function_mockers_test",
+        ":googlemock_gmock-generated_internal_utils_test",
+        ":googlemock_gmock-generated_matchers_test",
+        ":googlemock_gmock_internal_utils_test",
+        #  ":googlemock_gmock_leak_test",
+        ":googlemock_gmock_link_test",
+        ":googlemock_gmock_link2_test",
+        ":googlemock_gmock_matchers_test",
+        ":googlemock_gmock_more_actions_test",
+        ":googlemock_gmock_nice_strict_test",
+        #  ":googlemock_gmock_output_test",
+        ":googlemock_gmock_port_test",
+        ":googlemock_gmock_spec_builders_test",
+        ":googlemock_gmock_stress_test",
+        ":googlemock_gmock_test",
+    ],
+)
+
+cc_test(
+	name = "googletest_sample1_test",
+	srcs = ["googletest/samples/sample1_unittest.cc"],
+	deps = [
+	    ":googletest_sample_libs",
+	    ":googletest",
+	],
+)
+
+cc_test(
+	name = "googletest_sample2_test",
+	srcs = ["googletest/samples/sample2_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample3_test",
+	srcs = ["googletest/samples/sample3_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample4_test",
+	srcs = ["googletest/samples/sample4_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample5_test",
+	srcs = ["googletest/samples/sample5_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample6_test",
+	srcs = ["googletest/samples/sample6_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample7_test",
+	srcs = ["googletest/samples/sample7_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample8_test",
+	srcs = ["googletest/samples/sample8_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample9_test",
+	srcs = ["googletest/samples/sample9_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+cc_test(
+	name = "googletest_sample10_test",
+	srcs = ["googletest/samples/sample10_unittest.cc"],
+	deps = [
+	    ":googletest",
+	    ":googletest_sample_libs",
+	],
+)
+
+""" Tests on the googletest library itself."""
+cc_library(
+    name = "gtest_production",
+    hdrs = [
+        "googletest/test/production.h",
+    ],
+    srcs = [
+        "googletest/test/production.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_filepath_test",
+    srcs = [
+        "googletest/test/gtest-filepath_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_linked_ptr_test",
+    srcs = [
+        "googletest/test/gtest-linked_ptr_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_message_test",
+    srcs = [
+        "googletest/test/gtest-message_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+"""
+This test currently fails based on how the test itself checks for the running executable
+name.
+
+cc_test(
+    name = "googletest_gtest_options_test",
+    srcs = [
+        "googletest/test/gtest-options_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)"""
+
+cc_test(
+    name = "googletest_gtest_port_test",
+    srcs = [
+        "googletest/test/gtest-port_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_pred_impl_unittest",
+    srcs = [
+        "googletest/test/gtest_pred_impl_unittest.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_prod_test",
+    srcs = [
+        "googletest/test/gtest_prod_test.cc",
+    ],
+    includes = [
+        "googletest",
+        "googletest/include",
+    ],
+    deps = [
+        ":googletest",
+        ":gtest_production",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_test_part_test",
+    srcs = [
+        "googletest/test/gtest-test-part_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_typed_test_test",
+    srcs = [
+        "googletest/test/gtest-typed-test_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_typed_test2_test",
+    srcs = [
+        "googletest/test/gtest-typed-test2_test.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_unittest",
+    srcs = [
+        "googletest/test/gtest_unittest.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googletest_gtest_production_test",
+    srcs = [
+        "googletest/test/production.cc",
+    ],
+    deps = [
+        ":googletest",
+    ],
+)
+
+""" Tests on the googlemock library itself."""
+cc_test(
+    name = "googlemock_gmock_actions_test",
+    srcs = [
+        "googlemock/test/gmock-actions_test.cc",
+    ],
+    copts = [
+        "-std=c++11",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_cardinalities_test",
+    srcs = [
+        "googlemock/test/gmock-cardinalities_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_ex_test",
+    srcs = [
+        "googlemock/test/gmock_ex_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_generated_actions_test",
+    srcs = [
+        "googlemock/test/gmock-generated-actions_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock-generated_function_mockers_test",
+    srcs = [
+        "googlemock/test/gmock-generated-function-mockers_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock-generated_internal_utils_test",
+    srcs = [
+        "googlemock/test/gmock-generated-internal-utils_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock-generated_matchers_test",
+    srcs = [
+        "googlemock/test/gmock-generated-matchers_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_internal_utils_test",
+    srcs = [
+        "googlemock/test/gmock-internal-utils_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+"""
+This test currently runs through the python component and fails on its own.
+cc_test(
+    name = "googlemock_gmock_leak_test",
+    srcs = [
+        "googlemock/test/gmock_leak_test_.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)"""
+
+cc_test(
+    name = "googlemock_gmock_link_test",
+    srcs = [
+        "googlemock/test/gmock_link_test.h",
+        "googlemock/test/gmock_link_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_link2_test",
+    srcs = [
+        "googlemock/test/gmock_link2_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_matchers_test",
+    srcs = [
+        "googlemock/test/gmock-matchers_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_more_actions_test",
+    srcs = [
+        "googlemock/test/gmock-more-actions_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_nice_strict_test",
+    srcs = [
+        "googlemock/test/gmock-nice-strict_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+"""
+This test is currently run through the python component and fails on its own.
+cc_test(
+    name = "googlemock_gmock_output_test",
+    srcs = [
+        "googlemock/test/gmock_output_test_.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)"""
+
+cc_test(
+    name = "googlemock_gmock_port_test",
+    srcs = [
+        "googlemock/test/gmock-port_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_spec_builders_test",
+    srcs = [
+        "googlemock/test/gmock-spec-builders_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_stress_test",
+    srcs = [
+        "googlemock/test/gmock_stress_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
+
+cc_test(
+    name = "googlemock_gmock_test",
+    srcs = [
+        "googlemock/test/gmock_test.cc",
+    ],
+    deps = [
+        ":googlemock",
+        ":googletest",
+    ],
+)
diff --git a/third_party/googletest/googlemock/test/gmock-internal-utils_test.cc b/third_party/googletest/googlemock/test/gmock-internal-utils_test.cc
index 4f00f0d..9d5ec60 100644
--- a/third_party/googletest/googlemock/test/gmock-internal-utils_test.cc
+++ b/third_party/googletest/googlemock/test/gmock-internal-utils_test.cc
@@ -36,6 +36,7 @@
 #include "gmock/internal/gmock-internal-utils.h"
 #include <stdlib.h>
 #include <map>
+#include <memory>
 #include <string>
 #include <sstream>
 #include <vector>