Add testing infrastructure to check if gdb is available for testing.

Reviewers: echristo, EricWF

Subscribers: mgorny, christof, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67194

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@371120 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8a2114f..e6ef628 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -60,6 +60,14 @@
   message(FATAL_ERROR "Expected LIBCXX_TEST_DEPS to be defined")
 endif()
 
+find_program(LIBCXX_GDB gdb)
+if (LIBCXX_GDB)
+  set(LIBCXX_GDB "${LIBCXX_GDB}")
+  message(STATUS "gdb found: ${LIBCXX_GDB}")
+else()
+  message(STATUS "gdb not found. Disabling dependent tests.")
+endif()
+
 if (LIBCXX_INCLUDE_TESTS)
   include(AddLLVM) # for configure_lit_site_cfg and add_lit_testsuit
 
@@ -87,7 +95,6 @@
   setup_lcov_test_target_coverage("cxx" "${output_dir}" "${capture_dirs}" "${extract_dirs}")
 endif()
 
-
 if (LIBCXX_CONFIGURE_IDE)
   # Create dummy targets for each of the tests in the test suite, this allows
   # IDE's such as CLion to correctly highlight the tests because it knows
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index fd3d7d8..fafc8fe 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -35,6 +35,7 @@
 config.cxx_ext_threads          = @LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY@
 config.pstl_src_root            = "@ParallelSTL_SOURCE_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None
 config.pstl_obj_root            = "@ParallelSTL_BINARY_DIR@" if @LIBCXX_ENABLE_PARALLEL_ALGORITHMS@ else None
+config.libcxx_gdb               = "@LIBCXX_GDB@"
 
 # Let the main config do the real work.
 config.loaded_site_config = True
diff --git a/utils/libcxx/test/config.py b/utils/libcxx/test/config.py
index f353432..3be1aa1 100644
--- a/utils/libcxx/test/config.py
+++ b/utils/libcxx/test/config.py
@@ -490,6 +490,10 @@
             self.config.available_features.add('glibc-%s' % maj_v)
             self.config.available_features.add('glibc-%s.%s' % (maj_v, min_v))
 
+        if 'NOTFOUND' not in self.get_lit_conf('libcxx_gdb'):
+            self.config.available_features.add('libcxx_gdb')
+            self.cxx.libcxx_gdb = self.get_lit_conf('libcxx_gdb')
+
         # Support Objective-C++ only on MacOS and if the compiler supports it.
         if self.target_info.platform() == "darwin" and \
            self.target_info.is_host_macosx() and \
@@ -1072,6 +1076,8 @@
         not_py = os.path.join(self.libcxx_src_root, 'utils', 'not.py')
         not_str = '%s %s ' % (pipes.quote(sys.executable), pipes.quote(not_py))
         sub.append(('not ', not_str))
+        if self.get_lit_conf('libcxx_gdb'):
+            sub.append(('%libcxx_gdb', self.get_lit_conf('libcxx_gdb')))
 
     def can_use_deployment(self):
         # Check if the host is on an Apple platform using clang.