[libc++] Check clang-tidy version

Reviewed By: ldionne, #libc

Spies: libcxx-commits, arichardson

Differential Revision: https://reviews.llvm.org/D120087
This commit is contained in:
Nikolas Klauser 2022-03-02 18:40:39 +01:00
parent ef9816e43c
commit b324798fc8
2 changed files with 23 additions and 1 deletions

View File

@ -217,6 +217,21 @@ def runScriptExitCode(config, script):
_, _, exitCode, _ = _executeScriptInternal(test, script)
return exitCode
@_memoizeExpensiveOperation(lambda c, s: (c.substitutions, c.environment, s))
def commandOutput(config, command):
"""
Runs the given script as a Lit test, and returns the output.
If the exit code isn't 0 an exception is raised.
The script must be a list of commands, each of which being something that
could appear on the right-hand-side of a `RUN:` keyword.
"""
with _makeConfigTest(config) as test:
out, _, exitCode, _ = _executeScriptInternal(test, command)
if exitCode != 0:
raise ConfigurationRuntimeError()
return out
@_memoizeExpensiveOperation(lambda c, l: (c.substitutions, c.environment, l))
def hasAnyLocale(config, locales):
"""

View File

@ -18,6 +18,13 @@ _isGCC = lambda cfg: '__GNUC__' in compilerMacros(cfg) and '__clang__' no
_isMSVC = lambda cfg: '_MSC_VER' in compilerMacros(cfg)
_msvcVersion = lambda cfg: (int(compilerMacros(cfg)['_MSC_VER']) // 100, int(compilerMacros(cfg)['_MSC_VER']) % 100)
def _hasSuitableClangTidy(cfg):
try:
return int(re.search('[0-9]+', commandOutput(cfg, ['clang-tidy --version'])).group()) >= 13
except ConfigurationRuntimeError:
return False
DEFAULT_FEATURES = [
Feature(name='fcoroutines-ts',
when=lambda cfg: hasCompileFlag(cfg, '-fcoroutines-ts') and
@ -109,7 +116,7 @@ DEFAULT_FEATURES = [
Feature(name='executor-has-no-bash',
when=lambda cfg: runScriptExitCode(cfg, ['%{exec} bash -c \'bash --version\'']) != 0),
Feature(name='has-clang-tidy',
when=lambda cfg: runScriptExitCode(cfg, ['clang-tidy --version']) == 0),
when=_hasSuitableClangTidy),
Feature(name='apple-clang', when=_isAppleClang),
Feature(name=lambda cfg: 'apple-clang-{__clang_major__}'.format(**compilerMacros(cfg)), when=_isAppleClang),