aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw@src.gnome.org>2019-09-19 21:24:04 +0800
committerTing-Wei Lan <lantw@src.gnome.org>2019-09-29 00:11:15 +0800
commit0390b673f11cc2834b6a04e1fc5e58e4cb24afcb (patch)
tree86e28fd355a32a9ccec58f481e5af58a6f606086
parent08ce1fb541374fb1ddce1d7318ceb92459942e9e (diff)
downloadmeson-0390b673f11cc2834b6a04e1fc5e58e4cb24afcb.zip
meson-0390b673f11cc2834b6a04e1fc5e58e4cb24afcb.tar.gz
meson-0390b673f11cc2834b6a04e1fc5e58e4cb24afcb.tar.bz2
Find clang-format with alternative names
This is similar to what we currently do for scan-build except there is no environment variable to choose a specific clang-format to run. If an environment variable is needed for better control, we can add it later.
-rw-r--r--mesonbuild/backend/ninjabackend.py3
-rw-r--r--mesonbuild/environment.py18
-rw-r--r--mesonbuild/scripts/clangformat.py13
3 files changed, 28 insertions, 6 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 8315ab1..c960727 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2657,9 +2657,8 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
self.create_target_alias('meson-scan-build')
def generate_clangformat(self):
- import shutil
target_name = 'clang-format'
- if shutil.which('clang-format') is None:
+ if not environment.detect_clangformat():
return
if not os.path.exists(os.path.join(self.environment.source_dir, '.clang-format')) and \
not os.path.exists(os.path.join(self.environment.source_dir, '_clang-format')):
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 7c10825..0fec347 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -189,7 +189,7 @@ def get_llvm_tool_names(tool: str) -> typing.List[str]:
names.append(tool + suffix)
return names
-def detect_scanbuild():
+def detect_scanbuild() -> typing.List[str]:
""" Look for scan-build binary on build platform
First, if a SCANBUILD env variable has been provided, give it precedence
@@ -220,6 +220,22 @@ def detect_scanbuild():
return [tool]
return []
+def detect_clangformat() -> typing.List[str]:
+ """ Look for clang-format binary on build platform
+
+ Do the same thing as detect_scanbuild to find clang-format except it
+ currently does not check the environment variable.
+
+ Return: a single-element list of the found clang-format binary ready to be
+ passed to Popen()
+ """
+ tools = get_llvm_tool_names('clang-format')
+ for tool in tools:
+ path = shutil.which(tool)
+ if path is not None:
+ return [path]
+ return []
+
def detect_native_windows_arch():
"""
The architecture of Windows itself: x86, amd64 or arm64
diff --git a/mesonbuild/scripts/clangformat.py b/mesonbuild/scripts/clangformat.py
index 351d06b..4b441de 100644
--- a/mesonbuild/scripts/clangformat.py
+++ b/mesonbuild/scripts/clangformat.py
@@ -16,9 +16,10 @@ import pathlib
import subprocess
from concurrent.futures import ThreadPoolExecutor
+from ..environment import detect_clangformat
from ..compilers import lang_suffixes
-def clangformat(srcdir_name, builddir_name):
+def clangformat(exelist, srcdir_name, builddir_name):
srcdir = pathlib.Path(srcdir_name)
suffixes = set(lang_suffixes['c']).union(set(lang_suffixes['cpp']))
suffixes.add('h')
@@ -28,11 +29,17 @@ def clangformat(srcdir_name, builddir_name):
strf = str(f)
if strf.startswith(builddir_name):
continue
- futures.append(e.submit(subprocess.check_call, ['clang-format', '-style=file', '-i', strf]))
+ futures.append(e.submit(subprocess.check_call, exelist + ['-style=file', '-i', strf]))
[x.result() for x in futures]
return 0
def run(args):
srcdir_name = args[0]
builddir_name = args[1]
- return clangformat(srcdir_name, builddir_name)
+
+ exelist = detect_clangformat()
+ if not exelist:
+ print('Could not execute clang-format "%s"' % ' '.join(exelist))
+ return 1
+
+ return clangformat(exelist, srcdir_name, builddir_name)