From: David Bremner <david@tethera.net>
To: Jani Nikula <jani@nikula.org>, David Bremner <david@tethera.net>,
notmuch@notmuchmail.org, notmuch@freelists.org
Subject: [Patch v2] build: add target to run cppcheck
Date: Tue, 29 Aug 2017 08:35:26 -0300 [thread overview]
Message-ID: <20170829113526.10435-1-david@tethera.net> (raw)
In-Reply-To: <87pobhl8wc.fsf@nikula.org>
The advantage of having a target as opposed to running cppcheck by
hand
- reuse list of source files
- output errors in a format parsable, e.g. by emacs
- returns exit code 1 on any error, for possibly use in other
targets.
For the moment, leave this as an optional target. If desired, it can
be added to e.g. the release targets in the same way as the test
target.
Using two levels of directory for the stamps is arguably
overengineering, but it doesn't really cost anything, and leaves open
the possibility of putting other kinds of stamp files there.
This only checks "new" source files (w.r.t. their last check). A future target
(cppcheck-all ?) could blow away the stamp files first.
---
Two notable changes from the first version: 1) support parallel build,
inspired by id:87pobhl8wc.fsf@nikula.org; 2) use the predefined 'gcc'
template. It's still an optional target, as that felt most comfortable
as a workflow to me.
Makefile.local | 18 ++++++++++++++++++
configure | 11 +++++++++++
2 files changed, 29 insertions(+)
diff --git a/Makefile.local b/Makefile.local
index af12ca7f..c6ad0047 100644
--- a/Makefile.local
+++ b/Makefile.local
@@ -199,6 +199,14 @@ quiet ?= $($(shell echo $1 | sed -e s'/ .*//'))
@mkdir -p $(patsubst %/.,%,.deps/$(@D))
$(call quiet,CC $(CPPFLAGS) $(CFLAGS)) -c $(FINAL_CFLAGS) $< -o $@ -MD -MP -MF .deps/$*.d
+CPPCHECK=cppcheck
+.stamps/cppcheck/%: %
+ @mkdir -p $(@D)
+ $(call quiet,CPPCHECK) --template=gcc --error-exitcode=1 --quiet $<
+ @touch $@
+
+CLEAN := $(CLEAN) .stamps
+
.PHONY : clean
clean:
rm -rf $(CLEAN); rm -rf .deps
@@ -283,6 +291,16 @@ CLEAN := $(CLEAN) version.stamp notmuch-*.tar.gz.tmp
DISTCLEAN := $(DISTCLEAN) .first-build-message Makefile.config sh.config
+CPPCHECK_STAMPS := $(SRCS:%=.stamps/cppcheck/%)
+.PHONY: cppcheck
+ifeq ($(HAVE_CPPCHECK),1)
+cppcheck: ${CPPCHECK_STAMPS}
+else
+cppcheck:
+ @echo "No cppcheck found during configure; skipping static checking"
+endif
+
+
DEPS := $(SRCS:%.c=.deps/%.d)
DEPS := $(DEPS:%.cc=.deps/%.d)
-include $(DEPS)
diff --git a/configure b/configure
index c5e2ffed..364854f3 100755
--- a/configure
+++ b/configure
@@ -646,6 +646,14 @@ if [ $WITH_DESKTOP = "1" ]; then
fi
fi
+printf "Checking for cppcheck... "
+if command -v cppcheck > /dev/null; then
+ have_cppcheck=1
+ printf "Yes.\n"
+else
+ printf "No.\n"
+fi
+
libdir_in_ldconfig=0
printf "Checking which platform we are on... "
@@ -1065,6 +1073,9 @@ zsh_completion_dir = ${ZSHCOMLETIONDIR:=\$(prefix)/share/zsh/functions/Completio
# build its own version)
HAVE_CANONICALIZE_FILE_NAME = ${have_canonicalize_file_name}
+# Whether the cppcheck static checker is available
+HAVE_CPPCHECK = ${have_cppcheck}
+
# Whether the getline function is available (if not, then notmuch will
# build its own version)
HAVE_GETLINE = ${have_getline}
--
2.14.1
next prev parent reply other threads:[~2017-08-29 11:35 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-26 14:41 make notmuch cppcheck clean David Bremner
2017-08-26 14:41 ` [PATCH 1/5] build: add target to run cppcheck David Bremner
2017-08-27 8:20 ` Jani Nikula
2017-08-29 11:35 ` David Bremner [this message]
2017-08-29 18:36 ` [Patch v2] " Jani Nikula
2017-08-29 18:47 ` Jani Nikula
2017-08-30 23:28 ` David Bremner
2017-08-26 14:41 ` [PATCH 2/5] cppcheck: close files during shutdown David Bremner
2017-08-26 14:41 ` [PATCH 3/5] cppcheck: call va_end in _internal_error David Bremner
2017-08-26 14:41 ` [PATCH 4/5] test/smtp-dummy: uncrustify David Bremner
2017-08-26 14:41 ` [PATCH 5/5] test/smtp-dummy: convert to 'goto DONE' style David Bremner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170829113526.10435-1-david@tethera.net \
--to=david@tethera.net \
--cc=jani@nikula.org \
--cc=notmuch@freelists.org \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).