lit.py: Add new %{shared_output(LABEL)} substitution

This refers to a temporary path that can be shared across all tests,
identified by a particular label. This can be used for things like
caches.

At the moment, the character set for the LABEL is limited to C
identifier characters, plus '-', '+', '=', and '.'. This is the same
set of characters currently allowed in REQUIRES clause identifiers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315697 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jordan Rose 2017-10-13 16:12:23 +00:00
parent b5a710de5a
commit e9bafbf370
9 changed files with 53 additions and 11 deletions

View File

@ -395,17 +395,18 @@ PRE-DEFINED SUBSTITUTIONS
:program:`lit` provides various patterns that can be used with the RUN command.
These are defined in TestRunner.py. The base set of substitutions are:
========== ==============
Macro Substitution
========== ==============
%s source path (path to the file currently being run)
%S source dir (directory of the file currently being run)
%p same as %S
%{pathsep} path separator
%t temporary file name unique to the test
%T temporary directory unique to the test
%% %
========== ==============
======================= ==============
Macro Substitution
======================= ==============
%s source path (path to the file currently being run)
%S source dir (directory of the file currently being run)
%p same as %S
%{pathsep} path separator
%t temporary file name unique to the test
%T temporary directory unique to the test
%{shared_output(LABEL)} temporary file name, identified by "LABEL", shared across all tests
%% %
======================= ==============
Other substitutions are provided that are variations on this base set and
further substitution patterns can be defined by each test module. See the

View File

@ -464,6 +464,12 @@ RUN lines:
Example: ``/home/user/llvm.build/test/MC/ELF/Output``
``%{shared_output(LABEL)}``
File path to a temporary file name shared across all tests, identified by
LABEL. This is useful as a cache for generated resources.
Example: ``/home/user/llvm.build/test/Output/Shared/LABEL.tmp``
``%{pathsep}``
Expands to the path separator, i.e. ``:`` (or ``;`` on Windows).

View File

@ -829,6 +829,9 @@ def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False):
sourcepath = test.getSourcePath()
sourcedir = os.path.dirname(sourcepath)
sharedOutputDir = os.path.join(test.suite.exec_root, 'Output', 'Shared')
sharedOutputDir += os.path.sep
# Normalize slashes, if requested.
if normalize_slashes:
sourcepath = sourcepath.replace('\\', '/')
@ -849,6 +852,8 @@ def getDefaultSubstitutions(test, tmpDir, tmpBase, normalize_slashes=False):
('%t', tmpName),
('%basename_t', baseName),
('%T', tmpDir),
('%{shared_output\(([-+=._a-zA-Z0-9]+)\)}',
'%s\\1.tmp' % (sharedOutputDir,)),
('#_MARKER_#', '%')])
# "%/[STpst]" should be normalized.

View File

@ -1,4 +1,5 @@
import os
import shutil
import sys
import threading
import time
@ -136,6 +137,13 @@ class Run(object):
return True
win32api.SetConsoleCtrlHandler(console_ctrl_handler, True)
# Make fresh shared output directories.
suites = set(test.suite for test in self.tests)
for suite in suites:
shared_dir = os.path.join(suite.exec_root, 'Output', 'Shared')
shutil.rmtree(shared_dir, ignore_errors=True)
lit.util.mkdir_p(shared_dir)
# Save the display object on the runner so that we can update it from
# our task completion callback.
self.display = display

View File

@ -0,0 +1,5 @@
import lit.formats
config.name = 'shared-output'
config.suffixes = ['.txt']
config.test_format = lit.formats.ShTest()
config.test_source_root = os.path.dirname(os.path.realpath(__file__))

View File

@ -0,0 +1,2 @@
RUN: echo "primary" >> %{shared_output(SHARED)}
RUN: echo "other" >> %{shared_output(OTHER)}

View File

@ -0,0 +1 @@
RUN: echo "secondary" >> %{shared_output(SHARED)}

View File

@ -0,0 +1 @@
RUN: echo "sub" >> %{shared_output(SHARED)}

View File

@ -0,0 +1,13 @@
# RUN: rm -rf %t && mkdir -p %t
# RUN: echo 'lit_config.load_config(config, "%{inputs}/shared-output/lit.cfg")' > %t/lit.site.cfg
# RUN: %{lit} %t
# RUN: FileCheck %s < %t/Output/Shared/SHARED.tmp
# RUN: FileCheck -check-prefix=NEGATIVE %s < %t/Output/Shared/SHARED.tmp
# RUN: FileCheck -check-prefix=OTHER %s < %t/Output/Shared/OTHER.tmp
# CHECK-DAG: primary
# CHECK-DAG: secondary
# CHECK-DAG: sub
# NEGATIVE-NOT: other
# OTHER: other