]> granicus.if.org Git - clang/commitdiff
Make clang/test/lit.cfg pre-scan the RUN line looking for tool names,
authorPaul Robinson <paul_robinson@playstation.sony.com>
Fri, 21 Mar 2014 18:13:35 +0000 (18:13 +0000)
committerPaul Robinson <paul_robinson@playstation.sony.com>
Fri, 21 Mar 2014 18:13:35 +0000 (18:13 +0000)
and substitute fully qualified path names pointing to the build
directory.  This ensures we're testing the just-built tools.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204493 91177308-0d34-0410-b5e6-96231b3b80d8

test/lit.cfg

index f7acb2f156843c5ce74b5c0c4f33d935581874d3..8d0ac80ebe6818cca8fe8228e706bbb7139a773e 100644 (file)
@@ -288,6 +288,40 @@ config.substitutions.append(
     (' %clang-cl ',
      """*** invalid substitution, use '%clang_cl'. ***""") )
 
+# For each occurrence of a clang tool name as its own word, replace it
+# with the full path to the build directory holding that tool.  This
+# ensures that we are testing the tools just built and not some random
+# tools that might happen to be in the user's PATH.
+# For example, don't match 'clang-check-' or '.clang-format'.
+# Regex assertions to reject neighbor hyphens/dots (seen in some tests).
+NoPreHyphenDot = r"(?<!(-|\.))"
+NoPostHyphenDot = r"(?!(-|\.))"
+
+for pattern in [r"\bFileCheck\b",
+                r"\bc-index-test\b",
+                NoPreHyphenDot + r"\bclang-check\b" + NoPostHyphenDot,
+                NoPreHyphenDot + r"\bclang-format\b" + NoPostHyphenDot,
+                # FIXME: Some clang test uses opt?
+                NoPreHyphenDot + r"\bopt\b" + NoPostHyphenDot,
+                # Handle these specially as they are strings searched
+                # for during testing.
+                r"\| \bcount\b",
+                r"\| \bnot\b"]:
+    # Extract the tool name from the pattern.  This relies on the tool
+    # name being surrounded by \b word match operators.  If the
+    # pattern starts with "| ", include it in the string to be
+    # substituted.
+    tool_match = re.match(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
+                          pattern)
+    tool_pipe = tool_match.group(2)
+    tool_name = tool_match.group(4)
+    tool_path = lit.util.which(tool_name, llvm_tools_dir)
+    if not tool_path:
+        # Warn, but still provide a substitution.
+        lit_config.note('Did not find ' + tool_name + ' in ' + llvm_tools_dir)
+        tool_path = llvm_tools_dir + '/' + tool_name
+    config.substitutions.append((pattern, tool_pipe + tool_path))
+
 ###
 
 # Set available features we allow tests to conditionalize on.