diff --git a/devel/Makefile.am b/devel/Makefile.am index bdfca76069..f51c8c2acb 100644 --- a/devel/Makefile.am +++ b/devel/Makefile.am @@ -1,68 +1,67 @@ # # Copyright 2020 the Pacemaker project contributors # # The version control history for this file may have further details. # # This source code is licensed under the GNU General Public License version 2 # or later (GPLv2+) WITHOUT ANY WARRANTY. # -EXTRA_SCRIPTS = coccinelle/test/testrunner.sh -EXTRA_DIST = $(EXTRA_SCRIPTS) \ - coccinelle/ref-passed-variables-inited.cocci \ - coccinelle/string-any-of.cocci \ - coccinelle/string-empty.cocci \ - coccinelle/string-null-matches.cocci \ - coccinelle/string-replacements.cocci \ - coccinelle/test/ref-passed-variables-inited.input.c \ - coccinelle/test/ref-passed-variables-inited.output - # Coccinelle is a tool that takes special patch-like files (called semantic patches) and # applies them throughout a source tree. This is useful when refactoring, changing APIs, # catching dangerous or incorrect code, and other similar tasks. It's not especially # easy to write a semantic patch but most users should only be concerned about running # the target and inspecting the results. # # Documentation (including examples, which are the most useful): # http://coccinelle.lip6.fr/documentation.php # # Run the "make cocci" target to just output what would be done, or "make cocci-inplace" # to apply the changes to the source tree. # # COCCI_FILES may be set on the command line, if you want to test just a single file # while it's under development. Otherwise, it is a list of all the files that are ready # to be run. # # ref-passed-variables-inited.cocci seems to be returning some false positives around # GHashTableIters, so it is disabled for the moment. -COCCI_FILES ?= coccinelle/string-any-of.cocci \ - coccinelle/string-empty.cocci \ - coccinelle/string-null-matches.cocci +COCCI_FILES ?= coccinelle/string-any-of.cocci \ + coccinelle/string-empty.cocci \ + coccinelle/string-null-matches.cocci \ + coccinelle/use-func.cocci + + +EXTRA_SCRIPTS = coccinelle/test/testrunner.sh +EXTRA_DIST = $(EXTRA_SCRIPTS) $(COCCI_FILES) \ + coccinelle/ref-passed-variables-inited.cocci \ + coccinelle/string-replacements.cocci \ + coccinelle/test/ref-passed-variables-inited.input.c \ + coccinelle/test/ref-passed-variables-inited.output # Any file in this list is allowed to use any of the pcmk__ internal functions. # Coccinelle can use any transformation that depends on "internal" to rewrite # code to use the internal functions. MAY_USE_INTERNAL_FILES = $(shell find .. -path "../lib/*.c" -o -path "../tools/*.c" -o -path "../daemons/*.c" -o -path '../include/pcmki/*h' -o -name '*internal.h') # And then any file in this list is public API, which may not use internal # functions. Thus, only those transformations that do not depend on "internal" # may be applied. OTHER_FILES = $(shell find ../include -name '*h' -a \! -name '*internal.h' -a \! -path '../include/pcmki/*') cocci: for cf in $(COCCI_FILES); do \ for f in $(MAY_USE_INTERNAL_FILES); do \ spatch $(_SPATCH_FLAGS) -D internal --very-quiet --local-includes --preprocess --sp-file $$cf $$f; \ done ; \ for f in $(OTHER_FILES); do \ spatch $(_SPATCH_FLAGS) --very-quiet --local-includes --preprocess --sp-file $$cf $$f; \ done ; \ done cocci-inplace: $(MAKE) $(AM_MAKEFLAGS) _SPATCH_FLAGS=--in-place cocci cocci-test: for f in coccinelle/test/*.c; do \ coccinelle/test/testrunner.sh $$f; \ done diff --git a/devel/coccinelle/use-func.cocci b/devel/coccinelle/use-func.cocci new file mode 100644 index 0000000000..bfca91985e --- /dev/null +++ b/devel/coccinelle/use-func.cocci @@ -0,0 +1,22 @@ +/* + * Copyright 2020 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. + */ + +/* + * Always use __func__ (which is in the C99 standard) instead of __FUNCTION__ + * (which is an older GNU C extension) + */ + +virtual internal + +@ use_func @ +@@ +( +- __FUNCTION__ ++ __func__ +)