[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC PATCH] xen/build: Add cppcheck and cppcheck-html make rules
On Thu, 24 Mar 2022, Bertrand Marquis wrote: > cppcheck can be used to check Xen code quality. > > To create a report do "make cppcheck" on a built tree adding any options > you added during the process you used to build xen (like CROSS_COMPILE > or XEN_TARGET_ARCH). This will generate an xml report xen-cppcheck.xml. > > To create a html report do "make cppcheck-html" in the same way and a > full report to be seen in a browser will be generated in > cppcheck-htmlreport/index.html. > > For better results it is recommended to build your own cppcheck from the > latest sources that you can find at [1]. > Development and result analysis has been done with cppcheck 2.7. > > The Makefile rule is searching for all C files which have been compiled > (ie which have a generated .o file) and is running cppcheck on all of > them using the current configuration of xen so only the code actually > compiled is checked. > > A new tool is introduced to merge all cppcheck reports into one global > report including all findings and removing duplicates. > > Some extra variables can be used to customize the report: > - CPPCHECK can be used to give the full path to the cppcheck binary to > use (default is to use the one from the standard path). > - CPPCHECK_HTMLREPORT can be used to give the full path to > cppcheck-htmlreport (default is to use the one from the standard path). > > This has been tested on several arm configurations (x86 should work but > has not been tested). > > [1] https://cppcheck.sourceforge.io/ > > Signed-off-by: Bertrand Marquis <bertrand.marquis@xxxxxxx> > Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx> Very cool, I was looking forward to this :-) > diff --git a/xen/tools/merge_cppcheck_reports.py > b/xen/tools/merge_cppcheck_reports.py > new file mode 100755 > index 0000000000..ef055f6925 > --- /dev/null > +++ b/xen/tools/merge_cppcheck_reports.py > @@ -0,0 +1,73 @@ > +#!/usr/bin/env python > + > +""" > +This script acts as a tool to merge XML files created by cppcheck. > +Usage: > + merge_cppcheck_reports.py [FILES] [OUTPUT] > + > + FILES - list of XML files with extension .cppcheck > + OUTPUT - file to store results (with .xml extension). > + If not specified, the script will print results to stdout. > +""" > + > +import sys > +from xml.etree import ElementTree > + > +def elements_equal(el1, el2): > + if type(el1) != type(el2): return False > + > + el1_location = str(el1.find('location').attrib) > + el2_location = str(el2.find('location').attrib) > + > + if el1_location != el2_location: return False > + > + return True > + > +def remove_duplicates(xml_root_element): > + elems_to_remove = [] > + index = 0 > + elems_list = list(xml_root_element.findall("errors")[0]) > + for elem1 in elems_list: > + index += 1 > + for elem2 in elems_list[index:]: > + if elements_equal(elem1, elem2) and elem2 not in elems_to_remove: > + elems_to_remove.append(elem2) > + continue > + > + for elem in elems_to_remove: > + xml_root_element.findall("errors")[0].remove(elem) > + > +def merge(files): > + result_xml_root = None > + for xml_file in files: > + xml_root = ElementTree.parse(xml_file).getroot() Traceback (most recent call last): File "/local/repos/xen-upstream/xen/tools/merge_cppcheck_reports.py", line 73, in <module> run() File "/local/repos/xen-upstream/xen/tools/merge_cppcheck_reports.py", line 60, in run result = merge(files) File "/local/repos/xen-upstream/xen/tools/merge_cppcheck_reports.py", line 43, in merge xml_root = ElementTree.parse(xml_file).getroot() File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1182, in parse tree.parse(source, parser) File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 657, in parse self._root = parser.close() File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1671, in close self._raiseerror(v) File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1523, in _raiseerror raise err xml.etree.ElementTree.ParseError: no element found: line 11, column 0 make: *** [Makefile:576: xen-cppcheck.xml] Error 1 I think we should catch the xml.etree.ElementTree.ParseError exception and continue?
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |