summaryrefslogtreecommitdiffstats
path: root/wscript
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2020-08-13 17:25:54 +0200
committerDavid Robillard <d@drobilla.net>2020-08-13 17:25:54 +0200
commit8e31bb8064f5e2b2e0bfb8e9e6e5f85091e3a8bc (patch)
tree1529f82948b49581ac06ba9d86c4b533fe69aa02 /wscript
parent741ea228737d4bc81e56312106702196b1fe5219 (diff)
downloadzix-8e31bb8064f5e2b2e0bfb8e9e6e5f85091e3a8bc.tar.gz
zix-8e31bb8064f5e2b2e0bfb8e9e6e5f85091e3a8bc.tar.bz2
zix-8e31bb8064f5e2b2e0bfb8e9e6e5f85091e3a8bc.zip
Improve lint target and add clang-tidy file
Diffstat (limited to 'wscript')
-rw-r--r--wscript66
1 files changed, 52 insertions, 14 deletions
diff --git a/wscript b/wscript
index f0eb85e..a69ffb8 100644
--- a/wscript
+++ b/wscript
@@ -4,7 +4,7 @@ import os
import subprocess
import sys
-from waflib import Logs, Options
+from waflib import Build, Logs, Options
from waflib.extras import autowaf
# Library and package version (UNIX style major, minor, micro)
@@ -39,6 +39,12 @@ def configure(conf):
'BUILD_BENCH': Options.options.bench,
'BUILD_STATIC': Options.options.static})
+ if Options.options.strict:
+ # Check for programs used by lint target
+ conf.find_program("flake8", var="FLAKE8", mandatory=False)
+ conf.find_program("clang-tidy", var="CLANG_TIDY", mandatory=False)
+ conf.find_program("iwyu_tool", var="IWYU_TOOL", mandatory=False)
+
if Options.options.ultra_strict:
autowaf.add_compiler_flags(conf.env, '*', {
'clang': [
@@ -234,23 +240,55 @@ def build(bld):
bld.add_post_fun(autowaf.run_ldconfig)
+class LintContext(Build.BuildContext):
+ fun = cmd = 'lint'
+
+
def lint(ctx):
"checks code for style issues"
- import subprocess
+
import glob
+ import subprocess
+
+ st = 0
+
+ if "FLAKE8" in ctx.env:
+ Logs.info("Running flake8")
+ st = subprocess.call([ctx.env.FLAKE8[0],
+ "wscript",
+ "--ignore",
+ "E101,E129,W191,E221,W504,E251,E241,E741"])
+ else:
+ Logs.warn("Not running flake8")
+
+ if "IWYU_TOOL" in ctx.env:
+ Logs.info("Running include-what-you-use")
+ cmd = [ctx.env.IWYU_TOOL[0], "-o", "clang", "-p", "build"]
+ output = subprocess.check_output(cmd).decode('utf-8')
+ if 'error: ' in output:
+ sys.stdout.write(output)
+ st += 1
+ else:
+ Logs.warn("Not running include-what-you-use")
+
+ if "CLANG_TIDY" in ctx.env and "clang" in ctx.env.CC[0]:
+ Logs.info("Running clang-tidy")
+ sources = glob.glob('zix/*.c') + glob.glob('test/*.c*')
+ sources = list(map(os.path.abspath, sources))
+ procs = []
+ for source in sources:
+ cmd = [ctx.env.CLANG_TIDY[0], "--quiet", "-p=.", source]
+ procs += [subprocess.Popen(cmd, cwd="build")]
+
+ for proc in procs:
+ stdout, stderr = proc.communicate()
+ st += proc.returncode
+ else:
+ Logs.warn("Not running clang-tidy")
+
+ if st != 0:
+ sys.exit(st)
- subprocess.call(
- ['flake8', '--ignore', 'E221,W504,E302,E305,E251', 'wscript'])
-
- files = ['../%s' % x for x in glob.glob('**/*.c')]
- checks = ['*',
- '-clang-analyzer-valist.Uninitialized',
- '-llvm-header-guard',
- '-misc-unused-parameters',
- '-readability-else-after-return']
- subprocess.call(['clang-tidy', '-p=.', '-header-filter=.*',
- '-checks="%s"' % ','.join(checks)] + files,
- cwd='build')
def build_dir(ctx, subdir):
if autowaf.is_child():