From a24ab56da8b0382c4cc58d196fc9eab3bec485d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 1 Feb 2023 11:19:16 -0500 Subject: [PATCH] build-aux: introduce 'black' tool for python formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 'black' tool is intended to be an opinionated formatting tool for python code. It is complementary to flake8 which validates coding bad practices, but (mostly) ignores code layout issues. Reviewed-by: Michal Privoznik Signed-off-by: Daniel P. Berrangé --- build-aux/Makefile.in | 1 + build-aux/meson.build | 5 +++++ build-aux/syntax-check.mk | 18 ++++++++++++++++++ meson.build | 1 + 4 files changed, 25 insertions(+) diff --git a/build-aux/Makefile.in b/build-aux/Makefile.in index 7ee4680847..db44ee36a4 100644 --- a/build-aux/Makefile.in +++ b/build-aux/Makefile.in @@ -3,6 +3,7 @@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ FLAKE8 = @flake8_path@ +BLACK = @black_path@ RUNUTF8 = @runutf8@ PYTHON = @PYTHON3@ GREP = @GREP@ diff --git a/build-aux/meson.build b/build-aux/meson.build index f96d46c445..06be6ab6c8 100644 --- a/build-aux/meson.build +++ b/build-aux/meson.build @@ -5,6 +5,10 @@ if git and tests_enabled[0] if flake8_prog.found() flake8_path = flake8_prog.full_path() endif + black_path = '' + if black_prog.found() + black_path = black_prog.full_path() + endif if host_machine.system() == 'freebsd' or host_machine.system() == 'darwin' make_prog = find_program('gmake') @@ -35,6 +39,7 @@ if git and tests_enabled[0] 'top_srcdir': meson.project_source_root(), 'top_builddir': meson.project_build_root(), 'flake8_path': flake8_path, + 'black_path': black_path, 'runutf8': ' '.join(runutf8), 'PYTHON3': python3_prog.full_path(), 'GREP': grep_prog.full_path(), diff --git a/build-aux/syntax-check.mk b/build-aux/syntax-check.mk index 070737842e..721e82f49a 100644 --- a/build-aux/syntax-check.mk +++ b/build-aux/syntax-check.mk @@ -608,6 +608,16 @@ sc_flake8: echo 'skipping test $@: flake8 not installed' 1>&2; \ fi +sc_black: + if [ -n "$(BLACK)" ]; then \ + DOT_PY=$$($(VC_LIST_EXCEPT) | $(GREP) '\.py$$'); \ + BANG_PY=$$($(VC_LIST_EXCEPT) | xargs grep -l '^#!/usr/bin/env python3$$'); \ + ALL_PY=$$(printf "%s\n%s" "$$DOT_PY" "$$BANG_PY" | sort -u); \ + echo "$$ALL_PY" | xargs --no-run-if-empty $(BLACK) --check; \ + else \ + echo 'skipping test $@: black not installed' 1>&2; \ + fi + # mymain() in test files should use return, not exit, for nicer output sc_prohibit_exit_in_tests: @prohibit='\&2; \ echo "*****************************************************" >&2; \ fi + if [ -z "$(BLACK)" ]; then \ + echo "*****************************************************" >&2; \ + echo "* black not installed, sc_black has been skipped *" >&2; \ + echo "*****************************************************" >&2; \ + fi endif # Don't include duplicate header in the source (either *.c or *.h) @@ -1486,6 +1501,9 @@ exclude_file_name_regexp--sc_prohibit_select = \ ^build-aux/syntax-check\.mk|src/util/vireventglibwatch\.c|tests/meson\.build$$ +exclude_file_name_regexp--sc_black = \ + ^tools/|src/|tests/|ci/|run\.in|scripts/[^/]*\.py + ## -------------- ## ## Implementation ## ## -------------- ## diff --git a/meson.build b/meson.build index dc0969abcc..5b095bb809 100644 --- a/meson.build +++ b/meson.build @@ -809,6 +809,7 @@ endforeach optional_programs = [ 'augparse', + 'black', 'dmidecode', 'ebtables', 'flake8',