1import lit
2
3# Use lit's internal shell to help guarantee test portability.
4config.test_format = lit.formats.ShTest(execute_external=False)
5
6# %ProtectFileCheckOutput should precede a FileCheck call if and only if the
7# call's textual output affects test results.  It's usually easy to tell: just
8# look for redirection or piping of the FileCheck call's stdout or stderr.
9#
10# Examples:
11#
12#   ; Test another program, using FileCheck to verify its textual output.
13#   ; Only FileCheck's exit status affects test results, so a bare FileCheck
14#   ; call is sufficient and more convenient for debugging.
15#   ;
16#   ; RUN: %t | FileCheck %s
17#   ; CHECK: {{[0-9]+\.0}}
18#
19#   ; Test FileCheck itself, but only examine its exit status, so a bare
20#   ; FileCheck call is still sufficient and more convenient for debugging.
21#   ;
22#   ; RUN: FileCheck -input-file %s %s
23#   ; CHECK: {{[0-9]+\.0}}
24#   ; 5.0
25#
26#   ; Check that the FileCheck trace is off by default.  The first FileCheck
27#   ; call's textual output affects test results, so it requires
28#   ; %ProtectFileCheckOutput to be safe.
29#   ;
30#   ; RUN: %ProtectFileCheckOutput FileCheck -input-file %s %s 2>&1 \
31#   ; RUN: | FileCheck -allow-empty -check-prefix QUIET %s
32#   ;
33#   ; CHECK: {{[0-9]+\.0}}
34#   ; 5.0
35#   ; QUIET-NOT: expected string found in input
36#
37#   ; Check that the FileCheck trace is on when FILECHECK_OPTS=-v.
38#   ; FILECHECK_OPTS must be set after %ProtectFileCheckOutput, which clears
39#   ; FILECHECK_OPTS beforehand.
40#   ;
41#   ; RUN: %ProtectFileCheckOutput FILECHECK_OPTS=-v \
42#   ; RUN: FileCheck -dump-input=never -input-file %s %s 2>&1 \
43#   ; RUN: | FileCheck -check-prefix TRACE %s
44#   ;
45#   ; CHECK: {{[0-9]+\.0}}
46#   ; 5.0
47#   ; TRACE: expected string found in input
48#
49# %ProtectFileCheckOutput's purpose is to ensure correct test results when
50# developers set FileCheck environment variables (e.g.,
51# FILECHECK_OPTS=-dump-input=fail) to tweak the output of FileCheck while
52# debugging tests.  If a developer sets values that affect FileCheck's exit
53# status (e.g., FILECHECK_OPTS=-strict-whitespace), he shouldn't be surprised
54# that test results throughout all test suites are affected.
55config.substitutions.append(('%ProtectFileCheckOutput',
56    'env -u FILECHECK_OPTS'))
57