Enable "make C=1" sparse checking when files get rebuilt. To check all files, run "make clean" first. This is a bit simpler than redefining CC for the whole build, which requires extra commandline definitions and apparently is enough of a barrier that nobody's doing sparse checking. Note, this requires unreleased sparse after v0.5, which enables the CHAR_BIT definition; otherwise it chokes. Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> --- diff --git a/Makefile b/Makefile index d031a60..05fe609 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,20 @@ else Q = @ endif +CHECK=sparse +CHECK_OPTS=-Wsparse-all -Wbitwise -Wno-transparent-union -Wno-return-void -Wno-undef \ + -Wno-non-pointer-null -D__CHECK_ENDIAN__ -D__linux__ + +ifeq ("$(origin C)", "command line") + ifeq ("$(C)", "1") + CHECK_CMD=$(CHECK) $(CHECK_OPTS) + else + CHECK_CMD=@true + endif +endif + +export CHECK_CMD + MAKEOPTS = --no-print-directory Q=$(Q) TOPDIR = . diff --git a/doc/sparse.txt b/doc/sparse.txt index 36a34a0..c6d1fe7 100644 --- a/doc/sparse.txt +++ b/doc/sparse.txt @@ -5,9 +5,18 @@ to check the source code of the open source XFS commands and utilites First you need to install sparse, either from your distribution or from source as provided at http://www.kernel.org/pub/software/devel/sparse/. -To simply build the xfsprogs source code while checking the source using -sparse just set the compiler to cgcc, which is a wrapper that calls both -sparse and gcc using: +The xfsprogs Makefile has a convenient shortcut to running sparse, by setting +the C ("check") variable on the make commandline. To perform these checks on +files when they get rebuilt, use: + + make C=1 + +(Note that xfsprogs does not yet support the kernel convention of checking +all C files without compilation via "make C=2", so to run sparse on all +C files, start with a "make clean") + +If you'd rather run sparse more manually, just set the compiler to cgcc, +which is a wrapper that calls both sparse and gcc using: CC=cgcc ./configure diff --git a/include/buildrules b/include/buildrules index c57fdfc..297e598 100644 --- a/include/buildrules +++ b/include/buildrules @@ -54,10 +54,13 @@ $(LTLIBRARY) : $(SUBDIRS) $(LTOBJECTS) %.lo: %.c @echo " [CC] $@" $(Q)$(LTCOMPILE) -c $< + $(Q)$(CHECK_CMD) $(CFLAGS) $< else + %.o: %.c @echo " [CC] $@" $(Q)$(CC) $(CFLAGS) -c $< + $(Q)$(CHECK_CMD) $(CFLAGS) $< endif