On Thu, Oct 11, 2018 at 11:14:14AM -0500, Eric Sandeen wrote: > Enable "make C=2" sparse checking of all files without rebuilding them. > > 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 05fe609..9204bed 100644 > --- a/Makefile > +++ b/Makefile > @@ -21,14 +21,14 @@ CHECK_OPTS=-Wsparse-all -Wbitwise -Wno-transparent-union -Wno-return-void -Wno-u > -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 > + CHECK_CMD=$(CHECK) $(CHECK_OPTS) > + CHECKSRC=$(C) > +else > + CHECK_CMD=@true > + CHECKSRC=0 > endif Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > > -export CHECK_CMD > +export CHECK_CMD CHECKSRC > > MAKEOPTS = --no-print-directory Q=$(Q) > > diff --git a/doc/sparse.txt b/doc/sparse.txt > index c6d1fe7..75b24e0 100644 > --- a/doc/sparse.txt > +++ b/doc/sparse.txt > @@ -5,15 +5,12 @@ 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/. > > -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: > +Then, run make with "make C=1" to run sparse on all the C files that get > +recompiled, or use "make C=2" to run sparse on the files whether they need to > +be recompiled or not. The latter is a fast way to check the whole tree if you > +have already built it. > > - 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") > +See the top-level Makefile for a list of which sparse flags are enabled. > > 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: > diff --git a/include/buildrules b/include/buildrules > index 297e598..c207a16 100644 > --- a/include/buildrules > +++ b/include/buildrules > @@ -40,6 +40,21 @@ endif > # Standard targets > # > > +ifeq ($(CHECKSRC),2) > + > +# Check every .c file with sparse CHECK_CMD, do not call compiler > +$(LTCOMMAND) $(LTLIBRARY) : $(SUBDIRS) $(OBJECTS) > +.PHONY: $(LTCOMMAND) $(LTLIBRARY) > + > +%.lo %.o : %.c FORCE > + @echo " [CHECK] $<" > + $(Q)$(CHECK_CMD) $(CFLAGS) $< > + > +FORCE: > + > +else > +# Regular build, possibly calling sparse CHECK_CMD as well > + > ifdef LTCOMMAND > $(LTCOMMAND) : $(SUBDIRS) $(OBJECTS) $(LTDEPENDENCIES) > @echo " [LD] $@" > @@ -63,6 +78,7 @@ else > $(Q)$(CHECK_CMD) $(CFLAGS) $< > > endif > +endif > > ifdef POTHEAD > $(POTHEAD): $(XGETTEXTFILES) > -- Carlos