From f820ead9015e9cecb87fea62154b3f33da1baf20 Mon Sep 17 00:00:00 2001
From: Mike Frysinger <vapier@chromium.org>
Date: Mon, 25 Jan 2016 19:27:56 -0500
Subject: test: allow use of system gmock/gtest libs

Some systems provide prebuilt copies of gmock/gtest (such as Chromium
OS).  Add a configure flag so they can take advantage of that.  This
allows for a smaller checkout as they don't need to include the full
testing/ tree.

BUG=chromium:579384
TEST=`make check` passes w/--enable-system-test-libs
TEST=`make check` passes w/--disable-system-test-libs
R=thestig@chromium.org

Review URL: https://codereview.chromium.org/1638653002 .
---
 Makefile.am                        |  10 +-
 Makefile.in                        | 132 ++++++++++++-------
 configure                          | 257 ++++++++++++++++++++++++++++++++++++-
 configure.ac                       |  33 +++++
 src/breakpad_googletest_includes.h |   4 +-
 5 files changed, 385 insertions(+), 51 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index e0a8b6ae..3fb2224d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -113,12 +113,17 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA =
 
 ## Common test logic
+if SYSTEM_TEST_LIBS
+TEST_CFLAGS = $(GTEST_CFLAGS) $(GMOCK_CFLAGS)
+TEST_LIBS = $(GTEST_LIBS) -lgtest_main $(GMOCK_LIBS)
+else
 TEST_CFLAGS = \
 	-I$(top_srcdir)/src/testing/include \
 	-I$(top_srcdir)/src/testing/gtest/include \
 	-I$(top_srcdir)/src/testing/gtest \
 	-I$(top_srcdir)/src/testing
 TEST_LIBS = src/testing/libtesting.a
+endif
 
 ## Libraries
 check_LIBRARIES =
@@ -131,12 +136,14 @@ CLEANFILES =
 
 check_LIBRARIES += src/testing/libtesting.a
 
+if !SYSTEM_TEST_LIBS
 src_testing_libtesting_a_SOURCES = \
 	src/testing/gtest/src/gtest-all.cc \
 	src/testing/gtest/src/gtest_main.cc \
 	src/testing/src/gmock-all.cc
 src_testing_libtesting_a_CPPFLAGS = \
 	$(AM_CPPFLAGS) $(TEST_CFLAGS)
+endif
 
 if !DISABLE_PROCESSOR
 lib_LIBRARIES += src/libbreakpad.a
@@ -519,7 +526,8 @@ src_client_linux_linux_client_unittest_LDFLAGS += \
 endif
 
 src_client_linux_linux_client_unittest_LDADD = \
-	src/client/linux/linux_client_unittest_shlib
+	src/client/linux/linux_client_unittest_shlib \
+	$(TEST_LIBS)
 
 src_client_linux_linux_client_unittest_DEPENDENCIES = \
 	src/client/linux/linux_client_unittest_shlib
diff --git a/Makefile.in b/Makefile.in
index be1e5189..f87c6745 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -487,9 +487,13 @@ am__src_libbreakpad_a_SOURCES_DIST =  \
 src_libbreakpad_a_OBJECTS = $(am_src_libbreakpad_a_OBJECTS)
 src_testing_libtesting_a_AR = $(AR) $(ARFLAGS)
 src_testing_libtesting_a_LIBADD =
-am_src_testing_libtesting_a_OBJECTS = src/testing/gtest/src/src_testing_libtesting_a-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_testing_libtesting_a-gtest_main.$(OBJEXT) \
-	src/testing/src/src_testing_libtesting_a-gmock-all.$(OBJEXT)
+am__src_testing_libtesting_a_SOURCES_DIST =  \
+	src/testing/gtest/src/gtest-all.cc \
+	src/testing/gtest/src/gtest_main.cc \
+	src/testing/src/gmock-all.cc
+@SYSTEM_TEST_LIBS_FALSE@am_src_testing_libtesting_a_OBJECTS = src/testing/gtest/src/src_testing_libtesting_a-gtest-all.$(OBJEXT) \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/gtest/src/src_testing_libtesting_a-gtest_main.$(OBJEXT) \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/src/src_testing_libtesting_a-gmock-all.$(OBJEXT)
 src_testing_libtesting_a_OBJECTS =  \
 	$(am_src_testing_libtesting_a_OBJECTS)
 src_third_party_libdisasm_libdisasm_a_AR = $(AR) $(ARFLAGS)
@@ -584,6 +588,10 @@ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
 am_src_client_linux_linux_client_unittest_OBJECTS =
 src_client_linux_linux_client_unittest_OBJECTS =  \
 	$(am_src_client_linux_linux_client_unittest_OBJECTS)
+am__DEPENDENCIES_1 =
+@SYSTEM_TEST_LIBS_FALSE@am__DEPENDENCIES_2 = src/testing/libtesting.a
+@SYSTEM_TEST_LIBS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \
+@SYSTEM_TEST_LIBS_TRUE@	$(am__DEPENDENCIES_1)
 src_client_linux_linux_client_unittest_LINK = $(CCLD) $(AM_CFLAGS) \
 	$(CFLAGS) $(src_client_linux_linux_client_unittest_LDFLAGS) \
 	$(LDFLAGS) -o $@
@@ -613,9 +621,9 @@ am__src_client_linux_linux_client_unittest_shlib_SOURCES_DIST =  \
 	src/common/android/breakpad_getcontext.S \
 	src/client/linux/microdump_writer/microdump_writer_unittest.cc \
 	src/common/android/breakpad_getcontext_unittest.cc
-am__objects_2 = src/testing/gtest/src/src_client_linux_linux_client_unittest_shlib-gtest-all.$(OBJEXT) \
-	src/testing/gtest/src/src_client_linux_linux_client_unittest_shlib-gtest_main.$(OBJEXT) \
-	src/testing/src/src_client_linux_linux_client_unittest_shlib-gmock-all.$(OBJEXT)
+@SYSTEM_TEST_LIBS_FALSE@am__objects_2 = src/testing/gtest/src/src_client_linux_linux_client_unittest_shlib-gtest-all.$(OBJEXT) \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/gtest/src/src_client_linux_linux_client_unittest_shlib-gtest_main.$(OBJEXT) \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/src/src_client_linux_linux_client_unittest_shlib-gmock-all.$(OBJEXT)
 @ANDROID_HOST_TRUE@@LINUX_HOST_TRUE@am__objects_3 = src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext.$(OBJEXT)
 @ANDROID_HOST_TRUE@@LINUX_HOST_TRUE@am__objects_4 = src/common/android/src_client_linux_linux_client_unittest_shlib-breakpad_getcontext_unittest.$(OBJEXT)
 @LINUX_HOST_TRUE@am_src_client_linux_linux_client_unittest_shlib_OBJECTS =  \
@@ -647,7 +655,6 @@ am__objects_2 = src/testing/gtest/src/src_client_linux_linux_client_unittest_shl
 @LINUX_HOST_TRUE@	$(am__objects_4)
 src_client_linux_linux_client_unittest_shlib_OBJECTS =  \
 	$(am_src_client_linux_linux_client_unittest_shlib_OBJECTS)
-am__DEPENDENCIES_1 =
 src_client_linux_linux_client_unittest_shlib_LINK = $(CXXLD) \
 	$(AM_CXXFLAGS) $(CXXFLAGS) \
 	$(src_client_linux_linux_client_unittest_shlib_LDFLAGS) \
@@ -746,7 +753,7 @@ am__src_common_dumper_unittest_SOURCES_DIST =  \
 src_common_dumper_unittest_OBJECTS =  \
 	$(am_src_common_dumper_unittest_OBJECTS)
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@src_common_dumper_unittest_DEPENDENCIES =  \
-@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(TEST_LIBS) \
+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_2) \
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_1) \
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_1)
 am__src_common_mac_macho_reader_unittest_SOURCES_DIST =  \
@@ -788,7 +795,7 @@ am__src_common_mac_macho_reader_unittest_SOURCES_DIST =  \
 src_common_mac_macho_reader_unittest_OBJECTS =  \
 	$(am_src_common_mac_macho_reader_unittest_OBJECTS)
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@src_common_mac_macho_reader_unittest_DEPENDENCIES =  \
-@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(TEST_LIBS) \
+@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_2) \
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_1) \
 @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_1)
 am__src_common_test_assembler_unittest_SOURCES_DIST =  \
@@ -799,7 +806,8 @@ am__src_common_test_assembler_unittest_SOURCES_DIST =  \
 src_common_test_assembler_unittest_OBJECTS =  \
 	$(am_src_common_test_assembler_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_common_test_assembler_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_address_map_unittest_SOURCES_DIST =  \
 	src/processor/address_map_unittest.cc
@@ -818,7 +826,8 @@ src_processor_basic_source_line_resolver_unittest_OBJECTS = $(am_src_processor_b
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
-@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_cfi_frame_info_unittest_SOURCES_DIST =  \
@@ -830,7 +839,8 @@ src_processor_cfi_frame_info_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/cfi_frame_info.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_contained_range_map_unittest_SOURCES_DIST =  \
 	src/processor/contained_range_map_unittest.cc
@@ -848,7 +858,8 @@ src_processor_disassembler_x86_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@src_processor_disassembler_x86_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/disassembler_x86.o \
 @DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_exploitability_unittest_SOURCES_DIST =  \
 	src/processor/exploitability_unittest.cc
@@ -889,7 +900,8 @@ src_processor_exploitability_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/symbolic_constants_win.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
 @DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_fast_source_line_resolver_unittest_SOURCES_DIST =  \
 	src/processor/fast_source_line_resolver_unittest.cc
@@ -903,7 +915,8 @@ src_processor_fast_source_line_resolver_unittest_OBJECTS = $(am_src_processor_fa
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/source_line_resolver_base.o \
-@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_map_serializers_unittest_SOURCES_DIST =  \
@@ -914,7 +927,8 @@ src_processor_map_serializers_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@src_processor_map_serializers_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_microdump_processor_unittest_SOURCES_DIST =  \
 	src/processor/microdump_processor_unittest.cc
@@ -946,7 +960,8 @@ src_processor_microdump_processor_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_ppc64.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_sparc.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/stackwalker_x86.o \
-@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_microdump_stackwalk_SOURCES_DIST =  \
@@ -1035,7 +1050,8 @@ src_processor_minidump_processor_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/symbolic_constants_win.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/tokenize.o \
 @DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_minidump_stackwalk_SOURCES_DIST =  \
 	src/processor/minidump_stackwalk.cc
@@ -1094,7 +1110,8 @@ src_processor_minidump_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/minidump.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/proc_maps_linux.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_pathname_stripper_unittest_SOURCES_DIST =  \
 	src/processor/pathname_stripper_unittest.cc
@@ -1126,7 +1143,8 @@ src_processor_proc_maps_linux_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
 @DISABLE_PROCESSOR_FALSE@	src/third_party/libdisasm/libdisasm.a \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_range_map_unittest_SOURCES_DIST =  \
 	src/processor/range_map_unittest.cc
@@ -1146,7 +1164,8 @@ am__src_processor_stackwalker_address_list_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_address_list_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_address_list_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_address_list_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_stackwalker_amd64_unittest_SOURCES_DIST =  \
@@ -1157,7 +1176,8 @@ am__src_processor_stackwalker_amd64_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_amd64_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_amd64_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_amd64_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_stackwalker_arm64_unittest_SOURCES_DIST =  \
@@ -1168,7 +1188,8 @@ am__src_processor_stackwalker_arm64_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_arm64_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_arm64_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm64_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_stackwalker_arm_unittest_SOURCES_DIST =  \
@@ -1179,7 +1200,8 @@ am__src_processor_stackwalker_arm_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_arm_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_arm_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_arm_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_stackwalker_mips_unittest_SOURCES_DIST =  \
@@ -1190,7 +1212,8 @@ am__src_processor_stackwalker_mips_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_mips_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_mips_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_mips_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_stackwalker_selftest_SOURCES_DIST =  \
@@ -1234,7 +1257,8 @@ am__src_processor_stackwalker_x86_unittest_SOURCES_DIST =  \
 src_processor_stackwalker_x86_unittest_OBJECTS =  \
 	$(am_src_processor_stackwalker_x86_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_stackwalker_x86_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a $(TEST_LIBS) \
+@DISABLE_PROCESSOR_FALSE@	src/libbreakpad.a \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_static_address_map_unittest_SOURCES_DIST =  \
@@ -1245,7 +1269,8 @@ src_processor_static_address_map_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@src_processor_static_address_map_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_static_contained_range_map_unittest_SOURCES_DIST =  \
 	src/processor/static_contained_range_map_unittest.cc
@@ -1254,7 +1279,8 @@ src_processor_static_contained_range_map_unittest_OBJECTS = $(am_src_processor_s
 @DISABLE_PROCESSOR_FALSE@src_processor_static_contained_range_map_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_static_map_unittest_SOURCES_DIST =  \
 	src/processor/static_map_unittest.cc
@@ -1264,7 +1290,8 @@ src_processor_static_map_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@src_processor_static_map_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_static_range_map_unittest_SOURCES_DIST =  \
 	src/processor/static_range_map_unittest.cc
@@ -1274,7 +1301,8 @@ src_processor_static_range_map_unittest_OBJECTS =  \
 @DISABLE_PROCESSOR_FALSE@src_processor_static_range_map_unittest_DEPENDENCIES =  \
 @DISABLE_PROCESSOR_FALSE@	src/processor/logging.o \
 @DISABLE_PROCESSOR_FALSE@	src/processor/pathname_stripper.o \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_processor_synth_minidump_unittest_SOURCES_DIST =  \
 	src/common/test_assembler.cc src/common/test_assembler.h \
@@ -1286,7 +1314,8 @@ am__src_processor_synth_minidump_unittest_SOURCES_DIST =  \
 src_processor_synth_minidump_unittest_OBJECTS =  \
 	$(am_src_processor_synth_minidump_unittest_OBJECTS)
 @DISABLE_PROCESSOR_FALSE@src_processor_synth_minidump_unittest_DEPENDENCIES =  \
-@DISABLE_PROCESSOR_FALSE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_2) \
+@DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1) \
 @DISABLE_PROCESSOR_FALSE@	$(am__DEPENDENCIES_1)
 am__src_tools_linux_core2md_core2md_SOURCES_DIST =  \
 	src/tools/linux/core2md/core2md.cc
@@ -1344,7 +1373,7 @@ am__src_tools_linux_md2core_minidump_2_core_unittest_SOURCES_DIST =  \
 @LINUX_HOST_TRUE@am_src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS = src/tools/linux/md2core/src_tools_linux_md2core_minidump_2_core_unittest-minidump_memory_range_unittest.$(OBJEXT)
 src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS = $(am_src_tools_linux_md2core_minidump_2_core_unittest_OBJECTS)
 @LINUX_HOST_TRUE@src_tools_linux_md2core_minidump_2_core_unittest_DEPENDENCIES =  \
-@LINUX_HOST_TRUE@	$(TEST_LIBS) $(am__DEPENDENCIES_1) \
+@LINUX_HOST_TRUE@	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
 @LINUX_HOST_TRUE@	$(am__DEPENDENCIES_1)
 am__src_tools_linux_symupload_minidump_upload_SOURCES_DIST =  \
 	src/common/linux/http_upload.cc \
@@ -1504,7 +1533,7 @@ SOURCES = $(src_client_linux_libbreakpad_client_a_SOURCES) \
 DIST_SOURCES =  \
 	$(am__src_client_linux_libbreakpad_client_a_SOURCES_DIST) \
 	$(am__src_libbreakpad_a_SOURCES_DIST) \
-	$(src_testing_libtesting_a_SOURCES) \
+	$(am__src_testing_libtesting_a_SOURCES_DIST) \
 	$(am__src_third_party_libdisasm_libdisasm_a_SOURCES_DIST) \
 	$(src_client_linux_linux_client_unittest_SOURCES) \
 	$(am__src_client_linux_linux_client_unittest_shlib_SOURCES_DIST) \
@@ -1823,7 +1852,13 @@ ECHO_N = @ECHO_N@
 ECHO_T = @ECHO_T@
 EGREP = @EGREP@
 EXEEXT = @EXEEXT@
+GMOCK_CFLAGS = @GMOCK_CFLAGS@
+GMOCK_CONFIG = @GMOCK_CONFIG@
+GMOCK_LIBS = @GMOCK_LIBS@
 GREP = @GREP@
+GTEST_CFLAGS = @GTEST_CFLAGS@
+GTEST_CONFIG = @GTEST_CONFIG@
+GTEST_LIBS = @GTEST_LIBS@
 HAVE_CXX11 = @HAVE_CXX11@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -1946,24 +1981,26 @@ includepdir = $(includedir)/$(PACKAGE)/processor
 includep_HEADERS = $(top_srcdir)/src/processor/*.h
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = $(am__append_6) $(am__append_9)
-TEST_CFLAGS = \
-	-I$(top_srcdir)/src/testing/include \
-	-I$(top_srcdir)/src/testing/gtest/include \
-	-I$(top_srcdir)/src/testing/gtest \
-	-I$(top_srcdir)/src/testing
-
-TEST_LIBS = src/testing/libtesting.a
+@SYSTEM_TEST_LIBS_FALSE@TEST_CFLAGS = \
+@SYSTEM_TEST_LIBS_FALSE@	-I$(top_srcdir)/src/testing/include \
+@SYSTEM_TEST_LIBS_FALSE@	-I$(top_srcdir)/src/testing/gtest/include \
+@SYSTEM_TEST_LIBS_FALSE@	-I$(top_srcdir)/src/testing/gtest \
+@SYSTEM_TEST_LIBS_FALSE@	-I$(top_srcdir)/src/testing
+
+@SYSTEM_TEST_LIBS_TRUE@TEST_CFLAGS = $(GTEST_CFLAGS) $(GMOCK_CFLAGS)
+@SYSTEM_TEST_LIBS_FALSE@TEST_LIBS = src/testing/libtesting.a
+@SYSTEM_TEST_LIBS_TRUE@TEST_LIBS = $(GTEST_LIBS) -lgtest_main $(GMOCK_LIBS)
 check_LIBRARIES = src/testing/libtesting.a
 noinst_LIBRARIES = $(am__append_7)
 lib_LIBRARIES = $(am__append_5) $(am__append_8)
 CLEANFILES = $(am__append_16)
-src_testing_libtesting_a_SOURCES = \
-	src/testing/gtest/src/gtest-all.cc \
-	src/testing/gtest/src/gtest_main.cc \
-	src/testing/src/gmock-all.cc
+@SYSTEM_TEST_LIBS_FALSE@src_testing_libtesting_a_SOURCES = \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/gtest/src/gtest-all.cc \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/gtest/src/gtest_main.cc \
+@SYSTEM_TEST_LIBS_FALSE@	src/testing/src/gmock-all.cc
 
-src_testing_libtesting_a_CPPFLAGS = \
-	$(AM_CPPFLAGS) $(TEST_CFLAGS)
+@SYSTEM_TEST_LIBS_FALSE@src_testing_libtesting_a_CPPFLAGS = \
+@SYSTEM_TEST_LIBS_FALSE@	$(AM_CPPFLAGS) $(TEST_CFLAGS)
 
 @LINUX_HOST_TRUE@src_client_linux_libbreakpad_client_a_SOURCES = src/client/linux/crash_generation/crash_generation_client.cc \
 @LINUX_HOST_TRUE@	src/client/linux/crash_generation/crash_generation_server.cc \
@@ -2223,7 +2260,8 @@ TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
 @LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_LDFLAGS =  \
 @LINUX_HOST_TRUE@	-Wl,-rpath,'$$ORIGIN' $(am__append_23)
 @LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_LDADD = \
-@LINUX_HOST_TRUE@	src/client/linux/linux_client_unittest_shlib
+@LINUX_HOST_TRUE@	src/client/linux/linux_client_unittest_shlib \
+@LINUX_HOST_TRUE@	$(TEST_LIBS)
 
 @LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_DEPENDENCIES = \
 @LINUX_HOST_TRUE@	src/client/linux/linux_client_unittest_shlib
diff --git a/configure b/configure
index 196cb2cc..9304e53f 100755
--- a/configure
+++ b/configure
@@ -628,6 +628,14 @@ LTLIBOBJS
 LIBOBJS
 SELFTEST_FALSE
 SELFTEST_TRUE
+GTEST_LIBS
+GTEST_CFLAGS
+GTEST_CONFIG
+GMOCK_LIBS
+GMOCK_CFLAGS
+GMOCK_CONFIG
+SYSTEM_TEST_LIBS_FALSE
+SYSTEM_TEST_LIBS_TRUE
 DISABLE_TOOLS_FALSE
 DISABLE_TOOLS_TRUE
 DISABLE_PROCESSOR_FALSE
@@ -763,6 +771,7 @@ enable_m32
 enable_largefile
 enable_processor
 enable_tools
+enable_system_test_libs
 enable_selftest
 '
       ac_precious_vars='build_alias
@@ -778,7 +787,13 @@ CCASFLAGS
 CPP
 CXX
 CXXFLAGS
-CCC'
+CCC
+GMOCK_CONFIG
+GMOCK_CFLAGS
+GMOCK_LIBS
+GTEST_CONFIG
+GTEST_CFLAGS
+GTEST_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1410,6 +1425,9 @@ Optional Features:
   --disable-largefile     omit support for large files
   --disable-processor     Don't build processor library (default is no)
   --disable-tools         Don't build tool binaries (default is no)
+  --enable-system-test-libs
+                          Use gtest/gmock/etc... from the system instead of
+                          the local copies (default is local)
   --enable-selftest       Run extra tests with "make check" (may conflict with
                           optimizations) (default is no)
 
@@ -1426,6 +1444,16 @@ Some influential environment variables:
   CPP         C preprocessor
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
+  GMOCK_CONFIG
+              Path to gmock-config script
+  GMOCK_CFLAGS
+              Compiler flags for gmock
+  GMOCK_LIBS  Linker flags for gmock
+  GTEST_CONFIG
+              Path to gtest-config script
+  GTEST_CFLAGS
+              Compiler flags for gtest
+  GTEST_LIBS  Linker flags for gtest
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -7453,6 +7481,229 @@ if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue -a x$disable_tools
    as_fn_error $? "--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!" "$LINENO" 5
 fi
 
+# Check whether --enable-system-test-libs was given.
+if test "${enable_system_test_libs+set}" = set; then :
+  enableval=$enable_system_test_libs; case "${enableval}" in
+                 yes)
+                   system_test_libs=true
+                   ;;
+                 no)
+                   system_test_libs=false
+                   ;;
+                 *)
+                   as_fn_error $? "bad value ${enableval} for --enable-system-test-libs" "$LINENO" 5
+                   ;;
+               esac
+else
+  system_test_libs=false
+fi
+
+ if test x$system_test_libs = xtrue; then
+  SYSTEM_TEST_LIBS_TRUE=
+  SYSTEM_TEST_LIBS_FALSE='#'
+else
+  SYSTEM_TEST_LIBS_TRUE='#'
+  SYSTEM_TEST_LIBS_FALSE=
+fi
+
+
+
+
+
+
+
+
+if test x$system_test_libs = xtrue; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gmock-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gmock-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GMOCK_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GMOCK_CONFIG"; then
+  ac_cv_prog_GMOCK_CONFIG="$GMOCK_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GMOCK_CONFIG="${ac_tool_prefix}gmock-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GMOCK_CONFIG=$ac_cv_prog_GMOCK_CONFIG
+if test -n "$GMOCK_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMOCK_CONFIG" >&5
+$as_echo "$GMOCK_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GMOCK_CONFIG"; then
+  ac_ct_GMOCK_CONFIG=$GMOCK_CONFIG
+  # Extract the first word of "gmock-config", so it can be a program name with args.
+set dummy gmock-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_GMOCK_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GMOCK_CONFIG"; then
+  ac_cv_prog_ac_ct_GMOCK_CONFIG="$ac_ct_GMOCK_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_GMOCK_CONFIG="gmock-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_GMOCK_CONFIG=$ac_cv_prog_ac_ct_GMOCK_CONFIG
+if test -n "$ac_ct_GMOCK_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GMOCK_CONFIG" >&5
+$as_echo "$ac_ct_GMOCK_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GMOCK_CONFIG" = x; then
+    GMOCK_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    GMOCK_CONFIG=$ac_ct_GMOCK_CONFIG
+  fi
+else
+  GMOCK_CONFIG="$ac_cv_prog_GMOCK_CONFIG"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gtest-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gtest-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GTEST_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GTEST_CONFIG"; then
+  ac_cv_prog_GTEST_CONFIG="$GTEST_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GTEST_CONFIG="${ac_tool_prefix}gtest-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GTEST_CONFIG=$ac_cv_prog_GTEST_CONFIG
+if test -n "$GTEST_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTEST_CONFIG" >&5
+$as_echo "$GTEST_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_GTEST_CONFIG"; then
+  ac_ct_GTEST_CONFIG=$GTEST_CONFIG
+  # Extract the first word of "gtest-config", so it can be a program name with args.
+set dummy gtest-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_GTEST_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_GTEST_CONFIG"; then
+  ac_cv_prog_ac_ct_GTEST_CONFIG="$ac_ct_GTEST_CONFIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_GTEST_CONFIG="gtest-config"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_GTEST_CONFIG=$ac_cv_prog_ac_ct_GTEST_CONFIG
+if test -n "$ac_ct_GTEST_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GTEST_CONFIG" >&5
+$as_echo "$ac_ct_GTEST_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_GTEST_CONFIG" = x; then
+    GTEST_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    GTEST_CONFIG=$ac_ct_GTEST_CONFIG
+  fi
+else
+  GTEST_CONFIG="$ac_cv_prog_GTEST_CONFIG"
+fi
+
+  GMOCK_CFLAGS=`$GMOCK_CONFIG --cppflags --cxxflags`
+  GMOCK_LIBS=`$GMOCK_CONFIG --ldflags --libs`
+  GTEST_CFLAGS=`$GTEST_CONFIG --cppflags --cxxflags`
+  GTEST_LIBS=`$GTEST_CONFIG --ldflags --libs`
+fi
+
 # Check whether --enable-selftest was given.
 if test "${enable_selftest+set}" = set; then :
   enableval=$enable_selftest; case "${enableval}" in
@@ -7650,6 +7901,10 @@ if test -z "${DISABLE_TOOLS_TRUE}" && test -z "${DISABLE_TOOLS_FALSE}"; then
   as_fn_error $? "conditional \"DISABLE_TOOLS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${SYSTEM_TEST_LIBS_TRUE}" && test -z "${SYSTEM_TEST_LIBS_FALSE}"; then
+  as_fn_error $? "conditional \"SYSTEM_TEST_LIBS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then
   as_fn_error $? "conditional \"SELFTEST\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/configure.ac b/configure.ac
index cbea712f..18426ae1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -135,6 +135,39 @@ if test x$LINUX_HOST = xfalse -a x$disable_processor = xtrue -a x$disable_tools
    AC_MSG_ERROR([--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!])
 fi
 
+AC_ARG_ENABLE(system-test-libs,
+              AS_HELP_STRING([--enable-system-test-libs],
+                             [Use gtest/gmock/etc... from the system instead ]
+                             [of the local copies (default is local)]),
+              [case "${enableval}" in
+                 yes)
+                   system_test_libs=true
+                   ;;
+                 no)
+                   system_test_libs=false
+                   ;;
+                 *)
+                   AC_MSG_ERROR(bad value ${enableval} for --enable-system-test-libs)
+                   ;;
+               esac],
+              [system_test_libs=false])
+AM_CONDITIONAL(SYSTEM_TEST_LIBS, test x$system_test_libs = xtrue)
+
+AC_ARG_VAR([GMOCK_CONFIG], [Path to gmock-config script])
+AC_ARG_VAR([GMOCK_CFLAGS], [Compiler flags for gmock])
+AC_ARG_VAR([GMOCK_LIBS], [Linker flags for gmock])
+AC_ARG_VAR([GTEST_CONFIG], [Path to gtest-config script])
+AC_ARG_VAR([GTEST_CFLAGS], [Compiler flags for gtest])
+AC_ARG_VAR([GTEST_LIBS], [Linker flags for gtest])
+if test x$system_test_libs = xtrue; then
+  AC_CHECK_TOOL([GMOCK_CONFIG], [gmock-config])
+  AC_CHECK_TOOL([GTEST_CONFIG], [gtest-config])
+  GMOCK_CFLAGS=`$GMOCK_CONFIG --cppflags --cxxflags`
+  GMOCK_LIBS=`$GMOCK_CONFIG --ldflags --libs`
+  GTEST_CFLAGS=`$GTEST_CONFIG --cppflags --cxxflags`
+  GTEST_LIBS=`$GTEST_CONFIG --ldflags --libs`
+fi
+
 AC_ARG_ENABLE(selftest,
               AS_HELP_STRING([--enable-selftest],
                              [Run extra tests with "make check" ]
diff --git a/src/breakpad_googletest_includes.h b/src/breakpad_googletest_includes.h
index 1cc324b2..19a3e980 100644
--- a/src/breakpad_googletest_includes.h
+++ b/src/breakpad_googletest_includes.h
@@ -30,8 +30,8 @@
 #ifndef BREAKPAD_GOOGLETEST_INCLUDES_H__
 #define BREAKPAD_GOOGLETEST_INCLUDES_H__
 
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/include/gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
 
 // If AddressSanitizer is used, NULL pointer dereferences generate SIGILL
 // (illegal instruction) instead of SIGSEGV (segmentation fault).  Also,
-- 
cgit v1.2.1