[llvm-commits] [llvm] r122754 - in /llvm/trunk: docs/TestingGuide.html test/lit.cfg utils/lit/lit/TestRunner.py
David Greene
greened at obbligato.org
Mon Jan 3 09:30:25 PST 2011
Author: greened
Date: Mon Jan 3 11:30:25 2011
New Revision: 122754
URL: http://llvm.org/viewvc/llvm-project?rev=122754&view=rev
Log:
Reapply 122341 to fix PR8199 now that clang changes are in.
Modified:
llvm/trunk/docs/TestingGuide.html
llvm/trunk/test/lit.cfg
llvm/trunk/utils/lit/lit/TestRunner.py
Modified: llvm/trunk/docs/TestingGuide.html
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/TestingGuide.html?rev=122754&r1=122753&r2=122754&view=diff
==============================================================================
--- llvm/trunk/docs/TestingGuide.html (original)
+++ llvm/trunk/docs/TestingGuide.html Mon Jan 3 11:30:25 2011
@@ -376,6 +376,11 @@
shell. Consequently the syntax differs from normal shell script syntax in a
few ways. You can specify as many RUN lines as needed.</p>
+ <p>lit performs substitution on each RUN line to replace LLVM tool
+ names with the full paths to the executable built for each tool (in
+ $(LLVM_OBJ_ROOT)/$(BuildMode)/bin). This ensures that lit does not
+ invoke any stray LLVM tools in the user's path during testing.</p>
+
<p>Each RUN line is executed on its own, distinct from other lines unless
its last character is <tt>\</tt>. This continuation character causes the RUN
line to be concatenated with the next one. In this way you can build up long
Modified: llvm/trunk/test/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lit.cfg?rev=122754&r1=122753&r2=122754&view=diff
==============================================================================
--- llvm/trunk/test/lit.cfg (original)
+++ llvm/trunk/test/lit.cfg Mon Jan 3 11:30:25 2011
@@ -4,6 +4,7 @@
import os
import sys
+import re
# name: The name of this test suite.
config.name = 'LLVM'
@@ -148,6 +149,44 @@
else:
config.substitutions.append(('%' + sub, site_exp[sub]))
+# For each occurrence of an llvm 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. Thus this list
+# includes every tool placed in $(LLVM_OBJ_ROOT)/$(BuildMode)/bin
+# (llvm_tools_dir in lit parlance).
+ # Don't match 'bugpoint-'.
+for pattern in [r"\bbugpoint\b(?!-)", r"\bclang\b",
+ r"\bedis\b", r"\bgold\b",
+ r"\bllc\b", r"\blli\b",
+ r"\bllvm-ar\b", r"\bllvm-as\b",
+ r"\bllvm-bcanalyzer\b", r"\bllvm-config\b",
+ r"\bllvm-diff\b", r"\bllvm-dis\b",
+ r"\bllvm-extract\b", r"\bllvm-ld\b",
+ r"\bllvm-link\b", r"\bllvm-mc\b",
+ r"\bllvm-nm\b", r"\bllvm-prof\b",
+ r"\bllvm-ranlib\b", r"\bllvm-shlib\b",
+ r"\bllvm-stub\b", r"\bllvm2cpp\b",
+ # Don't match '-llvmc'.
+ r"(?<!-)\bllvmc\b", r"\blto\b",
+ # Don't match '.opt', '-opt'
+ # or '^opt'.
+ r"\bmacho-dump\b", r"(?<!\.|-|\^)\bopt\b",
+ r"\btblgen\b", r"\bFileCheck\b",
+ r"\bFileUpdate\b", r"\bc-index-test\b",
+ r"\bfpcmp\b", r"\bllvm-PerfectShuffle\b",
+ # 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.
+ substitution = re.sub(r"^(\\)?((\| )?)\W+b([0-9A-Za-z-_]+)\\b\W*$",
+ r"\2" + llvm_tools_dir + "/" + r"\4",
+ pattern)
+ config.substitutions.append((pattern, substitution))
+
excludes = []
# Provide target_triple for use in XFAIL and XTARGET.
Modified: llvm/trunk/utils/lit/lit/TestRunner.py
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/lit/lit/TestRunner.py?rev=122754&r1=122753&r2=122754&view=diff
==============================================================================
--- llvm/trunk/utils/lit/lit/TestRunner.py (original)
+++ llvm/trunk/utils/lit/lit/TestRunner.py Mon Jan 3 11:30:25 2011
@@ -8,6 +8,8 @@
import platform
import tempfile
+import re
+
class InternalShellError(Exception):
def __init__(self, command, message):
self.command = command
@@ -444,11 +446,13 @@
if ln[ln.index('END.'):].strip() == 'END.':
break
- # Apply substitutions to the script.
+ # Apply substitutions to the script. Allow full regular
+ # expression syntax. Replace each matching occurrence of regular
+ # expression pattern a with substitution b in line ln.
def processLine(ln):
# Apply substitutions
for a,b in substitutions:
- ln = ln.replace(a,b)
+ ln = re.sub(a, b, ln)
# Strip the trailing newline and any extra whitespace.
return ln.strip()
More information about the llvm-commits
mailing list