]> granicus.if.org Git - llvm/commitdiff
[lit] Parse command-line options from LIT_OPTS
authorJoel E. Denny <jdenny.ornl@gmail.com>
Mon, 8 Jul 2019 12:18:40 +0000 (12:18 +0000)
committerJoel E. Denny <jdenny.ornl@gmail.com>
Mon, 8 Jul 2019 12:18:40 +0000 (12:18 +0000)
Similar to `FILECHECK_OPTS` for FileCheck, `LIT_OPTS` makes it easy to
adjust lit behavior when running the test suite via ninja.  For
example:

```
$ LIT_OPTS='--time-tests -vv --filter=threadprivate' \
  ninja check-clang-openmp
```

Reviewed By: probinson

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

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

docs/CommandGuide/lit.rst
utils/lit/lit/main.py
utils/lit/tests/Inputs/lit-opts/lit.cfg [new file with mode: 0644]
utils/lit/tests/Inputs/lit-opts/test.txt [new file with mode: 0644]
utils/lit/tests/lit-opts.py [new file with mode: 0644]

index bcaa5c66c8c3f021736a850de80a05f459de51e0..7bb499b971d09112182751ee59db098da0f57eee 100644 (file)
@@ -38,6 +38,11 @@ Finally, :program:`lit` also supports additional options for only running a
 subset of the options specified on the command line, see
 :ref:`selection-options` for more information.
 
+:program:`lit` parses options from the environment variable ``LIT_OPTS`` after
+parsing options from the command line.  ``LIT_OPTS`` is primarily useful for
+supplementing or overriding the command-line options supplied to :program:`lit`
+by ``check`` targets defined by a project's build system.
+
 Users interested in the :program:`lit` architecture or designing a
 :program:`lit` testing implementation should see :ref:`lit-infrastructure`.
 
index bae6d91174d445318f3ca81cd77327aa12abcd7b..49aaf638a2213ca95339a22cd5522fc9c9178f37 100755 (executable)
@@ -11,6 +11,7 @@ import os
 import platform
 import random
 import re
+import shlex
 import sys
 import time
 import argparse
@@ -322,7 +323,8 @@ def main_with_tmp(builtinParameters):
                       help="Show all discovered tests",
                       action="store_true", default=False)
 
-    opts = parser.parse_args()
+    opts = parser.parse_args(sys.argv[1:] +
+                             shlex.split(os.environ.get("LIT_OPTS", "")))
     args = opts.test_paths
 
     if opts.show_version:
diff --git a/utils/lit/tests/Inputs/lit-opts/lit.cfg b/utils/lit/tests/Inputs/lit-opts/lit.cfg
new file mode 100644 (file)
index 0000000..d8dccdb
--- /dev/null
@@ -0,0 +1,7 @@
+import lit.formats
+config.name = 'lit-opts'
+config.suffixes = ['.txt']
+config.test_format = lit.formats.ShTest()
+config.test_source_root = None
+config.test_exec_root = None
+config.substitutions.append(('%var', lit_config.params.get('var', '')))
diff --git a/utils/lit/tests/Inputs/lit-opts/test.txt b/utils/lit/tests/Inputs/lit-opts/test.txt
new file mode 100644 (file)
index 0000000..0ddee88
--- /dev/null
@@ -0,0 +1 @@
+# RUN: echo %var
diff --git a/utils/lit/tests/lit-opts.py b/utils/lit/tests/lit-opts.py
new file mode 100644 (file)
index 0000000..4c068dd
--- /dev/null
@@ -0,0 +1,33 @@
+# Check cases where LIT_OPTS has no effect.
+#
+# RUN:                 %{lit} -j 1 -s %{inputs}/lit-opts | FileCheck %s
+# RUN: env LIT_OPTS=   %{lit} -j 1 -s %{inputs}/lit-opts | FileCheck %s
+# RUN: env LIT_OPTS=-s %{lit} -j 1 -s %{inputs}/lit-opts | FileCheck %s
+
+# Check that LIT_OPTS can override command-line options.
+#
+# RUN: env LIT_OPTS=-a \
+# RUN: %{lit} -j 1 -s %{inputs}/lit-opts \
+# RUN: | FileCheck -check-prefix=SHOW-ALL -DVAR= %s
+
+# Check that LIT_OPTS understands multiple options with arbitrary spacing.
+#
+# RUN: env LIT_OPTS='-a -v  -Dvar=foobar' \
+# RUN: %{lit} -j 1 -s %{inputs}/lit-opts \
+# RUN: | FileCheck -check-prefix=SHOW-ALL -DVAR=foobar %s
+
+# Check that LIT_OPTS parses shell-like quotes and escapes.
+#
+# RUN: env LIT_OPTS='-a   -v -Dvar="foo bar"\ baz' \
+# RUN: %{lit} -j 1 -s %{inputs}/lit-opts \
+# RUN: | FileCheck -check-prefix=SHOW-ALL -DVAR="foo bar baz" %s
+
+# CHECK:      Testing: 1 tests
+# CHECK-NOT:  PASS
+# CHECK:      Expected Passes : 1
+
+# SHOW-ALL:     Testing: 1 tests
+# SHOW-ALL:     PASS: lit-opts :: test.txt (1 of 1)
+# SHOW-ALL:     {{^}}[[VAR]]
+# SHOW-ALL-NOT: PASS
+# SHOW-ALL:     Expected Passes : 1