summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py3
-rw-r--r--mesonbuild/scripts/clangformat.py13
-rw-r--r--mesonbuild/scripts/clangtidy.py4
3 files changed, 16 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 64921ffa6..81b8bb51a 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -3659,6 +3659,9 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
if extra_arg:
target_name += f'-{extra_arg}'
extra_args.append(f'--{extra_arg}')
+ colorout = self.environment.coredata.optstore.get_value('b_colorout') \
+ if OptionKey('b_colorout') in self.environment.coredata.optstore else 'always'
+ extra_args.extend(['--color', colorout])
if not os.path.exists(os.path.join(self.environment.source_dir, '.clang-' + name)) and \
not os.path.exists(os.path.join(self.environment.source_dir, '_clang-' + name)):
return
diff --git a/mesonbuild/scripts/clangformat.py b/mesonbuild/scripts/clangformat.py
index 9ce050458..88cc89071 100644
--- a/mesonbuild/scripts/clangformat.py
+++ b/mesonbuild/scripts/clangformat.py
@@ -6,6 +6,7 @@ from __future__ import annotations
import argparse
import subprocess
from pathlib import Path
+import sys
from .run_tool import run_tool
from ..environment import detect_clangformat
@@ -13,12 +14,15 @@ from ..mesonlib import version_compare
from ..programs import ExternalProgram
import typing as T
-def run_clang_format(fname: Path, exelist: T.List[str], check: bool, cformat_ver: T.Optional[str]) -> subprocess.CompletedProcess:
+def run_clang_format(fname: Path, exelist: T.List[str], options: argparse.Namespace, cformat_ver: T.Optional[str]) -> subprocess.CompletedProcess:
clangformat_10 = False
- if check and cformat_ver:
+ if options.check and cformat_ver:
if version_compare(cformat_ver, '>=10'):
clangformat_10 = True
exelist = exelist + ['--dry-run', '--Werror']
+ # The option is not documented but it exists in version 10
+ if options.color == 'always' or options.color == 'auto' and sys.stdout.isatty():
+ exelist += ['--color=1']
else:
original = fname.read_bytes()
before = fname.stat().st_mtime
@@ -26,7 +30,7 @@ def run_clang_format(fname: Path, exelist: T.List[str], check: bool, cformat_ver
after = fname.stat().st_mtime
if before != after:
print('File reformatted: ', fname)
- if check and not clangformat_10:
+ if options.check and not clangformat_10:
# Restore the original if only checking.
fname.write_bytes(original)
ret.returncode = 1
@@ -35,6 +39,7 @@ def run_clang_format(fname: Path, exelist: T.List[str], check: bool, cformat_ver
def run(args: T.List[str]) -> int:
parser = argparse.ArgumentParser()
parser.add_argument('--check', action='store_true')
+ parser.add_argument('--color', default='always')
parser.add_argument('sourcedir')
parser.add_argument('builddir')
options = parser.parse_args(args)
@@ -52,4 +57,4 @@ def run(args: T.List[str]) -> int:
else:
cformat_ver = None
- return run_tool('clang-format', srcdir, builddir, run_clang_format, exelist, options.check, cformat_ver)
+ return run_tool('clang-format', srcdir, builddir, run_clang_format, exelist, options, cformat_ver)
diff --git a/mesonbuild/scripts/clangtidy.py b/mesonbuild/scripts/clangtidy.py
index a922f8514..fe34801e0 100644
--- a/mesonbuild/scripts/clangtidy.py
+++ b/mesonbuild/scripts/clangtidy.py
@@ -26,6 +26,7 @@ def run_clang_tidy(fname: Path, tidyexe: list, builddir: Path, fixesdir: T.Optio
def run(args: T.List[str]) -> int:
parser = argparse.ArgumentParser()
parser.add_argument('--fix', action='store_true')
+ parser.add_argument('--color', default='always')
parser.add_argument('sourcedir')
parser.add_argument('builddir')
options = parser.parse_args(args)
@@ -38,6 +39,9 @@ def run(args: T.List[str]) -> int:
print(f'Could not execute clang-tidy "{" ".join(tidyexe)}"')
return 1
+ if options.color == 'always' or options.color == 'auto' and sys.stdout.isatty():
+ tidyexe += ['--use-color']
+
fixesdir: T.Optional[Path] = None
if options.fix:
applyexe = detect_clangapply()