"Richard W.M. Jones" <rjones@xxxxxxxxxx> wrote: > On Wed, Mar 19, 2008 at 02:08:44PM +0100, Jim Meyering wrote: >> I had a few in-progress changes from a week or two ago, >> and am clearing the decks. >> >> I added a new build-checking rule (coming separately) >> and it exposed an unnecessary include: > > +1 > > So we have a way to find header files which are unused? For some simple ones, yes. See the rules like sc_prohibit_assert_without_use in the existing Makefile.maint. Yesterday I factored out the core of those four rules and now have the following. (a patch to update this is coming up) The hard part is coming up with a regular expression to indicate whether a particular header is used. The following are simple-minded, but so far they seem to do the job... However, for a header with many functions and macros, the required regexp will be a lot more complicated. # To use this "command" macro, you must first define two shell variables: # h: the header, enclosed in <> or "" # re: a regular expression that matches IFF something provided by $h is used. define _header_without_use h_esc=`echo "$$h"|sed 's/\./\\./'`; \ if $(CVS_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \ files=$$(grep -l '^# *include '"$$h_esc" \ $$($(CVS_LIST_EXCEPT) | grep '\.c$$')) && \ grep -LE "$$re" $$files | grep . && \ { echo "$(ME): the above files include $$h but don't use it" \ 1>&2; exit 1; } || :; \ else :; \ fi endef # Prohibit the inclusion of assert.h without an actual use of assert. sc_prohibit_assert_without_use: @h='<assert.h>' re='\<assert *\(' $(_header_without_use) # Prohibit the inclusion of getopt.h without an actual use. sc_prohibit_getopt_without_use: @h='<getopt.h>' re='\<getopt(_long)? *\(' $(_header_without_use) # Don't include quotearg.h unless you use one of its functions. sc_prohibit_quotearg_without_use: @h='"quotearg.h"' re='\<quotearg(_[^ ]+)? *\(' $(_header_without_use) # Don't include quote.h unless you use one of its functions. sc_prohibit_quote_without_use: @h='"quote.h"' re='\<quote(_n)? *\(' $(_header_without_use) -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list