#! /usr/bin/env python3 # Invoke sparse based on the contents of compile_commands.json import json import subprocess import sys import shlex def extract_cflags(shcmd): cflags = shlex.split(shcmd) return [x for x in cflags if x.startswith('-D') or x.startswith('-I') or x.startswith('-W') or x.startswith('-std=')] cflags = sys.argv[1:-1] with open(sys.argv[-1], 'r') as fd: compile_commands = json.load(fd) for cmd in compile_commands: cmd = ['sparse'] + cflags + extract_cflags(cmd['command']) + [cmd['file']] print(' '.join((shlex.quote(x) for x in cmd))) r = subprocess.run(cmd) if r.returncode != 0: sys.exit(r.returncode)