[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH 1/4] xen/Makefile: add analysis-coverity and analysis-eclair
On 08.11.2022 11:59, Luca Fancellu wrote: >> On 07.11.2022 11:47, Luca Fancellu wrote: >>> +Here is an example to add a new justification in >>> false-positive-<tool>.json:: >> >> With <tool> already present in the name, ... >> >>> +|{ >>> +| "version": "1.0", >>> +| "content": [ >>> +| { >>> +| "id": "SAF-0-false-positive-<tool>", >>> +| "analyser": { >>> +| "<tool>": "<proprietary-id>" >> >> ... can we avoid the redundancy here? Perhaps ... >> >>> +| }, >>> +| "tool-version": "<version>", >> >> ... it could be >> >> "analyser": { >> "<version>": "<proprietary-id>" >> }, > > Yes it’s a bit redundant but it helps re-using the same tool we use for > safe.json I guess the tool could also be made cope without much effort. >>> @@ -757,6 +758,51 @@ cppcheck-version: >>> $(objtree)/include/generated/compiler-def.h: >>> $(Q)$(CC) -dM -E -o $@ - < /dev/null >>> >>> +JUSTIFICATION_FILES := $(XEN_ROOT)/docs/misra/safe.json \ >>> + $(XEN_ROOT)/docs/misra/false-positive-$$*.json >>> + >>> +# The following command is using grep to find all files that contains a >>> comment >>> +# containing "SAF-<anything>" on a single line. >>> +# %.safparse will be the original files saved from the build system, these >>> files >>> +# will be restored at the end of the analysis step >>> +PARSE_FILE_LIST := $(addsuffix .safparse,$(filter-out %.safparse,\ >>> +$(shell grep -ERl '^[[:blank:]]*\/\*[[:space:]]+SAF-.*\*\/$$' $(srctree)))) >> >> Please indent such line continuations. And then isn't this going to risk >> matching non-source files as well? Perhaps you want to restrict this to >> *.c and *.h? > > Yes, how about this, it will filter out *.safparse files while keeping in > only .h and .c: > > PARSE_FILE_LIST := $(addsuffix .safparse,$(filter %.c %.h,\ > $(shell grep -ERl '^[[:blank:]]*\/\*[[:space:]]+SAF-.*\*\/$$' > $(srctree)))) That's better, but still means touching all files by grep despite now only a subset really looked for. If I was to use the new goals on a more or less regular basis, I'd expect that this enumeration of files doesn't read _much_ more stuff from disk than is actually necessary. >> To limit work done, could this me "mv" instead of "cp -p", and then ... >> >>> +analysis-parse-tags-%: $(PARSE_FILE_LIST) $(objtree)/%.sed >>> + $(Q)for file in $(patsubst %.safparse,%,$(PARSE_FILE_LIST)); do \ >>> + sed -i -f "$(objtree)/$*.sed" "$${file}"; \ >> >> ... with then using >> >> sed -f "$(objtree)/$*.sed" "$${file}.safparse" >"$${file}" >> >> here? This would then also have source consistent between prereqs and >> rule. > > We saw that mv is not preserving the timestamp of the file, instead we would > like to preserve > it, for this reason we used cp -p Buggy mv? It certainly doesn't alter timestamps here, and I don't think the spec allows for it doing so (at least when it doesn't need to resort to copying to deal with cross-volume moves, but those can't happen here). >>> + done >>> + >>> +analysis-build-%: analysis-parse-tags-% >>> + $(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile build >> >> This rule doesn't use the stem, so I'm struggling to understand what >> this is about. > > Yes, here my aim was to catch analysis-build-{eclair,coverity}, here I see > that if the user has a typo > the rule will run anyway, but it will be stopped by the dependency chain > because at the end we have: > > JUSTIFICATION_FILES := $(XEN_ROOT)/docs/misra/safe.json \ > $(XEN_ROOT)/docs/misra/false-positive-$$*.json > > That will give an error because > $(XEN_ROOT)/docs/misra/false-positive-<typo>.json does not exists. > > If you think it is not enough, what if I reduce the scope of the rule like > this? > > _analysis-coverity _analysis-eclair: _analysis-%: analysis-build-% But then, without using the stem, how does it know whether to do an Eclair or a Coverity run? > Or, if you are still worried about “analysis-build-%: analysis-parse-tags-%”, > then I can do something > like this: > > analysis-supported-coverity analysis-supported-eclair: > @echo > /dev/null > > analysis-supported-%: > @error Unsupported analysis tool @* > > analysis-build-%: analysis-parse-tags-% | analysis-supported-% > $(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile build If I'm not mistaken support for | doesn't exist in make 3.80 (the minimum version we require to be used). >>> +analysis-clean: >>> +# Reverts the original file (-p preserves also timestamp) >>> + $(Q)find $(srctree) -type f -name "*.safparse" -print | \ >>> + while IFS= read file; do \ >>> + cp -p "$${file}" "$${file%.safparse}"; \ >>> + rm -f "$${file}"; \ >> >> Why not "mv"? >> >>> + done >>> + >>> +_analysis-%: analysis-build-% >>> + $(Q)$(MAKE) O=$(abs_objtree) -f $(srctree)/Makefile analysis-clean >> >> Again no use of the stem, plus here I wonder if this may not lead to >> people invoking "analysis-clean" without having said anything about >> cleaning on their command line. > > In any case, the cleaning process is very safe and does not clean anything > that was not dirty before, > so in case of typos, it’s just like a nop. People may put transient files in their trees. Of course they need to be aware that when they specify a "clean" target their files may be deleted. But without any "clean" target specified nothing should be removed. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |