Support running tests using the new 'lit', via 'make test LIT2=1'.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81225 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Makefile b/test/Makefile
index 3fb103e..12d713b 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -22,6 +22,14 @@
   VGARG=
 endif
 
+ifdef LIT2
+all::
+	@ echo '--- Running clang tests for $(TARGET_TRIPLE) ---'
+	@ $(LLVM_SRC_ROOT)/utils/lit/lit.py \
+	  --path $(ToolDir) \
+	  --path $(LLVM_SRC_ROOT)/test/Scripts \
+	  $(TESTARGS) $(TESTDIRS) $(VGARG)
+else
 all::
 	@ echo '--- Running clang tests for $(TARGET_TRIPLE) ---'
 	@ $(PROJ_SRC_DIR)/../utils/test/MultiTestRunner.py \
@@ -29,6 +37,7 @@
 	  --path $(ToolDir) \
 	  --path $(LLVM_SRC_ROOT)/test/Scripts \
 	  $(TESTARGS) $(TESTDIRS) $(VGARG)
+endif
 
 clean::
 	@ rm -rf Output/
diff --git a/test/lit.cfg b/test/lit.cfg
index 2375a43..dcda2ab 100644
--- a/test/lit.cfg
+++ b/test/lit.cfg
@@ -1,10 +1,92 @@
 # -*- Python -*-
 
+def config_new():
+    # Configuration file for the 'lit' test runner.
+
+    # name: The name of this test suite.
+    config.name = 'Clang'
+
+    # testFormat: The test format to use to interpret tests.
+    #
+    # For now we require '&&' between commands, until they get globally killed and
+    # the test runner updated.
+    config.test_format = lit.formats.ShTest(execute_external = True,
+                                            require_and_and = True)
+
+    # suffixes: A list of file extensions to treat as test files.
+    config.suffixes = ['.c', '.cpp', '.m', '.mm']
+
+    ###
+
+    # Discover the 'clang' and 'clangcc' to use.
+
+    import os
+
+    def inferClang(PATH):
+        # Determine which clang to use.
+        clang = os.getenv('CLANG')
+
+        # If the user set clang in the environment, definitely use that and don't
+        # try to validate.
+        if clang:
+            return clang
+
+        # Otherwise look in the path.
+        clang = lit.util.which('clang', PATH)
+
+        if not clang:
+            lit.fatal("couldn't find 'clang' program, try setting "
+                      "CLANG in your environment")
+
+        return clang
+
+    def inferClangCC(clang, PATH):
+        clangcc = os.getenv('CLANGCC')
+
+        # If the user set clang in the environment, definitely use that and don't
+        # try to validate.
+        if clangcc:
+            return clangcc
+
+        # Otherwise try adding -cc since we expect to be looking in a build
+        # directory.
+        if clang.endswith('.exe'):
+            clangccName = clang[:-4] + '-cc.exe'
+        else:
+            clangccName = clang + '-cc'
+        clangcc = lit.util.which(clangccName, PATH)
+        if not clangcc:
+            # Otherwise ask clang.
+            res = lit.util.capture([clang, '-print-prog-name=clang-cc'])
+            res = res.strip()
+            if res and os.path.exists(res):
+                clangcc = res
+
+        if not clangcc:
+            lit.fatal("couldn't find 'clang-cc' program, try setting "
+                      "CLANGCC in your environment")
+
+        return clangcc
+
+    clang = inferClang(config.environment['PATH'])
+    if not lit.quiet:
+        lit.note('using clang: %r' % clang)
+    config.substitutions.append( (' clang ', ' ' + clang + ' ') )
+
+    clang_cc = inferClangCC(clang, config.environment['PATH'])
+    if not lit.quiet:
+        lit.note('using clang-cc: %r' % clang_cc)
+    config.substitutions.append( (' clang-cc ', ' ' + clang_cc + ' ') )
+
+if 'config' in globals():
+    config_new()
+    raise SystemExit # End configuration.
+
 # Configuration file for the 'lit' test runner.
 
 # suffixes: A list of file extensions to treat as test files.
 suffixes = ['.c', '.cpp', '.m', '.mm']
-    
+
 # environment: The base environment to use when running test commands.
 #
 # The 'PATH' and 'SYSTEMROOT' variables will be set automatically from the lit