[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/4] xen/scripts: add cppcheck tool to the xen-analysis.py script
> On 1 Dec 2022, at 20:23, Stefano Stabellini <sstabellini@xxxxxxxxxx> wrote: > > On Thu, 1 Dec 2022, Luca Fancellu wrote: >> Hi Stefano, >> >>>>> >>>>> >>>>>> + sm_tool_args="n" >>>>>> + ;; >>>>>> + --cppcheck-cmd=*) >>>>>> + CPPCHECK_TOOL="$(eval echo "${OPTION#*=}")" >>>>>> + sm_tool_args="y" >>>>>> + ;; >>>>>> + --cppcheck-html) >>>>>> + CPPCHECK_HTML="y" >>>>>> + sm_tool_args="n" >>>>>> + ;; >>>>>> + --cppcheck-plat=*) >>>>>> + CPPCHECK_PLAT_PATH="$(eval echo "${OPTION#*=}")" >>>>>> + sm_tool_args="n" >>>>>> + ;; >>>>>> + --ignore-path=*) >>>>>> + IGNORE_PATH_LIST="${IGNORE_PATH_LIST} $(eval echo >>>>>> "${OPTION#*=}")" >>>>>> + sm_tool_args="n" >>>>>> + ;; >>>>>> + --) >>>>>> + forward_to_cc="y" >>>>>> + sm_tool_args="n" >>>>>> + ;; >>>>>> + *) >>>>>> + if [ "${sm_tool_args}" = "y" ]; then >>>>>> + CPPCHECK_TOOL_ARGS="${CPPCHECK_TOOL_ARGS} ${OPTION}" >>>>>> + else >>>>>> + echo "Invalid option ${OPTION}" >>>>>> + exit 1 >>>>> >>>>> It doesn't look like sm_tool_args is really needed? It is only set to >>>>> 'y' in the case of --cppcheck-cmd, and in that case we also set >>>>> CPPCHECK_TOOL. CPPCHECK_TOOL is the variable used below. Am I missing >>>>> something? >>>> >>>> We use sm_tool_args to fill CPPCHECK_TOOL_ARGS, basically it’s a state >>>> machine where >>>> when we find --cppcheck-cmd=<xxx> we expect that every other space >>>> separated arguments >>>> passed afterwards are the args for cppcheck, so we append to >>>> CPPCHECK_TOOL_ARGS >>>> until we find an argument that is supposed to be only for this script. >>> >>> That seems a bit unnecessary: if the user wants to pass arguments to >>> cppcheck, the user would do --cppcheck-cmd="cppcheck arg1 arg2" with "" >>> quotes. Doing that should make --cppcheck-cmd="cppcheck arg1 arg2" be >>> seen as a single argument from this script point of view. CPPCHECK_TOOL >>> would end up being set to "cppcheck arg1 arg2" which is what we want >>> anyway? And if we need to distinguish between the cppcheck binary and >>> its argument we could use "cut" to extract "cppcheck", "arg1", and >>> "arg2" from CPPCHECK_TOOL. Would that work? >>> >> >> I gave a try for the quotes, the problem is that we need to have quotes in >> CC=“...”, so adding >> quotes also to --cppcheck-cmd= which is inside CC=“...” is preventing the >> Makefile to work, >> I tried escaping etc but I didn’t manage to have it working, so would you >> agree on keeping it >> like that? > > Is the problem coming from the following? > > cppcheck_cc_flags = """--compiler={} --cppcheck-cmd={} {} > --cppcheck-plat={}/cppcheck-plat --ignore-path=tools/ > """.format(xen_cc, settings.cppcheck_binpath, cppcheck_flags, > settings.tools_dir) > > if settings.cppcheck_html: > cppcheck_cc_flags = cppcheck_cc_flags + " --cppcheck-html" > > # Generate the extra make argument to pass the cppcheck-cc.sh wrapper as CC > cppcheck_extra_make_args = "CC=\"{}/cppcheck-cc.sh {} --\"".format( > settings.tools_dir, > cppcheck_cc_flags > ).replace("\n", "") > > > Wouldn't something like the following solve the issue? > > settings.cppcheck_binpath = settings.cppcheck_binpath + " " + > cppcheck_cc_flags > > cppcheck_cc_flags = """--compiler={} --cppcheck-cmd=\"{}\" > --cppcheck-plat={}/cppcheck-plat --ignore-path=tools/ > """.format(xen_cc, settings.cppcheck_binpath, settings.tools_dir) > > if settings.cppcheck_html: > cppcheck_cc_flags = cppcheck_cc_flags + " --cppcheck-html" > > # Generate the extra make argument to pass the cppcheck-cc.sh wrapper as CC > cppcheck_extra_make_args = "CC=\"{}/cppcheck-cc.sh {} --\"".format( > settings.tools_dir, > cppcheck_cc_flags > ).replace("\n", "") No unfortunately not, Makefile is very sensitive to quotes, I’ve tried with many combination of single/double quotes but nothing worked
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |