diff --git a/llvm/docs/CommandGuide/lit.rst b/llvm/docs/CommandGuide/lit.rst --- a/llvm/docs/CommandGuide/lit.rst +++ b/llvm/docs/CommandGuide/lit.rst @@ -523,6 +523,9 @@ %S source dir (directory of the file currently being run) %p same as %S %{pathsep} path separator + %{fs-src-root} root component of file system paths pointing to the LLVM checkout + %{fs-tmp-root} root component of file system paths pointing to the test's temporary directory + %{fs-sep} file system path separator %t temporary file name unique to the test %basename_t The last path component of %t but without the ``.tmp`` extension %T parent directory of %t (not unique, deprecated, do not use) diff --git a/llvm/docs/TestingGuide.rst b/llvm/docs/TestingGuide.rst --- a/llvm/docs/TestingGuide.rst +++ b/llvm/docs/TestingGuide.rst @@ -569,6 +569,18 @@ Expands to the path separator, i.e. ``:`` (or ``;`` on Windows). +``${fs-src-root}`` + Expands to the root component of file system paths for the source directory, + i.e. ``/`` on Unix systems or ``C:\`` (or another drive) on Windows. + +``${fs-tmp-root}`` + Expands to the root component of file system paths for the test's temporary + directory, i.e. ``/`` on Unix systems or ``C:\`` (or another drive) on + Windows. + +``${fs-sep}`` + Expands to the file system separator, i.e. ``/`` or ``\`` on Windows. + ``%/s, %/S, %/t, %/T:`` Act like the corresponding substitution above but replace any ``\`` diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -6,6 +6,7 @@ import os, signal, subprocess, sys import re import stat +import pathlib import platform import shutil import tempfile @@ -1121,6 +1122,12 @@ ('%basename_t', baseName), ('%T', tmpDir)]) + substitutions.extend([ + ('%{fs-src-root}', pathlib.Path(sourcedir).anchor), + ('%{fs-tmp-root}', pathlib.Path(tmpBase).anchor), + ('%{fs-sep}', os.path.sep), + ]) + # "%/[STpst]" should be normalized. substitutions.extend([ ('%/s', sourcepath.replace('\\', '/')),