From e8c4cf949bea6b5f8763a0bbe979552d6e6e0f35 Mon Sep 17 00:00:00 2001 From: Thom Wiggers Date: Fri, 1 Mar 2019 11:44:22 +0100 Subject: [PATCH 1/2] Move clang-tidy into python-based tests --- Makefile | 52 --------------------------------------------- test/test_linter.py | 34 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 52 deletions(-) delete mode 100644 Makefile create mode 100644 test/test_linter.py diff --git a/Makefile b/Makefile deleted file mode 100644 index 0369c83b..00000000 --- a/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -ALL_SCHEMES=$(filter-out crypto_%.c, $(wildcard crypto_*/*)) - -default: help - -.PHONY: require_scheme -require_scheme: -# assumes a SCHEME variable; e.g. make functest SCHEME=crypto_kem/kyber768 -ifndef SCHEME - $(error The SCHEME variable is not set. Example: SCHEME=crypto_kem/kyber768) -endif - -.PHONY: clean -clean: - rm -rf bin - -.PHONY: tidy -tidy: - $(MAKE) do-tidy - -do-tidy: require_scheme - clang-tidy \ - -quiet $(.TIDY_FIX) \ - $(SCHEME)/clean/*.c \ - common/*.c \ - -- -iquote "common/" -iquote "$(SCHEME)/clean" - -.PHONY: apply-tidy -apply-tidy: - $(MAKE) do-tidy .TIDY_FIX=-fix - -# The below should be outlined with ts=8 -.PHONY: help -help: - @echo "make clean Clean up the bin/ folder" - @echo "make tidy SCHEME=scheme Runs the clang-tidy linter against SCHEME" - @echo "make apply-tidy SCHEME=scheme Tries to automatically fix the issues found by clang-tidy in SCHEME" - @echo "make tidy-all Runs the clang-tidy linter against all schemes" - @echo "make apply-tidy-all Tidy up all schemes" - @echo "make help Displays this message" - - -.PHONY: tidy-all -tidy-all: - @for scheme in $(ALL_SCHEMES); do \ - $(MAKE) tidy SCHEME=$$scheme || exit 1 ; \ - done - -.PHONY: apply-tidy-all -apply-tidy-all: - @for scheme in $(ALL_SCHEMES); do \ - $(MAKE) apply-tidy SCHEME=$$scheme; \ - done diff --git a/test/test_linter.py b/test/test_linter.py new file mode 100644 index 00000000..7d550c87 --- /dev/null +++ b/test/test_linter.py @@ -0,0 +1,34 @@ +import os +from glob import glob + +import pqclean +from helpers import run_subprocess + + +def test_clang_tidy(): + for scheme in pqclean.Scheme.all_schemes(): + for implementation in scheme.implementations: + yield check_tidy, implementation + + +def check_tidy(implementation: pqclean.Implementation): + cfiles = glob(os.path.join(implementation.path(), '*.c')) + common_files = glob(os.path.join('..', 'common', '*.c')) + run_subprocess(['clang-tidy', + '-quiet', + '-header-filter=.*', + *cfiles, + *common_files, + '--', + '-iquote', os.path.join('..', 'common'), + '-iquote', implementation.path(), + ]) + + +if __name__ == "__main__": + try: + import nose2 + nose2.main() + except ImportError: + import nose + nose.runmodule() From 4178768599bab6f20292b87275d27c4b81ed2478 Mon Sep 17 00:00:00 2001 From: Thom Wiggers Date: Fri, 1 Mar 2019 12:22:33 +0100 Subject: [PATCH 2/2] Skip clang-tidy if not available --- test/test_linter.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test_linter.py b/test/test_linter.py index 7d550c87..8d6b6839 100644 --- a/test/test_linter.py +++ b/test/test_linter.py @@ -1,5 +1,7 @@ import os from glob import glob +import shutil +import unittest import pqclean from helpers import run_subprocess @@ -12,6 +14,8 @@ def test_clang_tidy(): def check_tidy(implementation: pqclean.Implementation): + if shutil.which('clang-tidy') is None: + raise unittest.SkipTest("clang-tidy unavailable in PATH") cfiles = glob(os.path.join(implementation.path(), '*.c')) common_files = glob(os.path.join('..', 'common', '*.c')) run_subprocess(['clang-tidy',