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..8d6b6839 --- /dev/null +++ b/test/test_linter.py @@ -0,0 +1,38 @@ +import os +from glob import glob +import shutil +import unittest + +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): + 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', + '-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()