diff options
author | Luis Fernandez <Luis.Fernandez@ibm.com> | 2019-09-18 10:34:25 -0500 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-09-18 23:14:10 -0500 |
commit | 08501bc6578ac2ba40cc803ac2449828ee6b1550 (patch) | |
tree | 5d668501903cf3de999c41b0ea7af817ecf95d6a | |
parent | bfe56382ff15dd94196a45f9619e8b629740d5fa (diff) | |
download | talos-hostboot-08501bc6578ac2ba40cc803ac2449828ee6b1550.tar.gz talos-hostboot-08501bc6578ac2ba40cc803ac2449828ee6b1550.zip |
Patch For: Implement Static Analysis with cppcheck
CPPCHECK commands fail in machines that do not use bin/sh.
Wrap commands inside an if-statement to only be read
when User explicitly run the tool.
Change-Id: Ifad56b0978c8190efa033203f661daf9259a4d43
RTC: 201451
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/83938
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
-rw-r--r-- | makefile | 1 | ||||
-rw-r--r-- | src/build/mkrules/cc.rules.mk | 71 |
2 files changed, 34 insertions, 38 deletions
@@ -92,6 +92,7 @@ cppcheck: ${BUILDCPPCHECK} export CXX_CHECK="$(CPPCHECK) $(filter -D%, $(CXXFLAGS)) $(INCFLAGS)" && \ export C_CHECK="$(CPPCHECK) $(filter -D%, $(CFLAGS)) $(INCFLAGS)" && \ + export DOCPPCHECK=1 && \ ${MAKE} .PHONY: gcda_clean diff --git a/src/build/mkrules/cc.rules.mk b/src/build/mkrules/cc.rules.mk index 2d465e2e3..409166e29 100644 --- a/src/build/mkrules/cc.rules.mk +++ b/src/build/mkrules/cc.rules.mk @@ -47,27 +47,44 @@ SOURCE_FILE=$< INCLUDE_DIRS=$(INCFLAGS) endif -$(OBJDIR)/%.o : %.C - @mkdir -p $(OBJDIR) - $(C2) " CXX $(notdir $<)" - $(C1)$(CXX) -c $(call FLAGS_FILTER, $(CXXFLAGS), $<) $(SOURCE_FILE) \ - -o $@.trace $(INCLUDE_DIRS) -iquote . - $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) - @rm $@.trace - $(C2) " CPPCHECK $(notdir $<)" # TODO RTC 215692 # The following script is used to run the cppcheck tool when enabled. If one # cppcheck error is found, the make process will stop here, the error will be # printed out to the terminal and stored in a file .`basename $<`.cppcheck in # the directory where the original file is located - $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ +ifdef DOCPPCHECK + CXX_PRINT=$(C2) " CPPCHECK $(notdir $<)" + # NoteL Error code 127 means that the command timed-out. We do not fail + # for timeouts + CXX_CPPCHECK_COMMAND=$(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ if [ "$$exit_code" -ne 1 ]; then \ rm -f .`basename $<`.cppcheck; \ if [ "$$exit_code" -eq 127 ]; then \ -# Error code 127 means that the command timed-out. We do not fail for timeouts.\ exit_code=0; \ fi; \ fi; exit "$$exit_code" + C_CPPCHECK_COMMAND=$(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(C_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ + if [ "$$exit_code" -ne 1 ]; then \ + rm -f .`basename $<`.cppcheck; \ + if [ "$$exit_code" -eq 127 ]; then \ + exit_code=0; \ + fi; \ + fi; exit "$$exit_code" +else + CXX_PRINT= + CXX_CPPCHECK_COMMAND= + C_CPPCHECK_COMMAND= +endif + +$(OBJDIR)/%.o : %.C + @mkdir -p $(OBJDIR) + $(C2) " CXX $(notdir $<)" + $(C1)$(CXX) -c $(call FLAGS_FILTER, $(CXXFLAGS), $<) $(SOURCE_FILE) \ + -o $@.trace $(INCLUDE_DIRS) -iquote . + $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) + @rm $@.trace + $(CXX_PRINT) + $(CXX_CPPCHECK_COMMAND) # Compiling *.cc files $(OBJDIR)/%.o : %.cc @@ -77,16 +94,8 @@ $(OBJDIR)/%.o : %.cc $(INCLUDE_DIRS) -iquote . $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) @rm $@.trace - $(C2) " CPPCHECK $(notdir $<)" -# TODO RTC 215692 - $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ - if [ "$$exit_code" -ne 1 ]; then \ - rm -f .`basename $<`.cppcheck; \ - if [ "$$exit_code" -eq 127 ]; then \ - exit_code=0; \ - fi; \ - fi; exit "$$exit_code" - + $(CXX_PRINT) + $(CXX_CPPCHECK_COMMAND) $(OBJDIR)/%.o : %.c @mkdir -p $(OBJDIR) @@ -96,28 +105,14 @@ ifndef CC_OVERRIDE $(C2) " CC $(notdir $<)" $(C1)$(CC) -c $(call FLAGS_FILTER, $(CFLAGS), $<) $(SOURCE_FILE) \ -o $@.trace $(INCLUDE_DIRS) -iquote . - $(C2) " CPPCHECK $(notdir $<)" -# TODO RTC 215692 - $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(C_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ - if [ "$$exit_code" -ne 1 ]; then \ - rm -f .`basename $<`.cppcheck; \ - if [ "$$exit_code" -eq 127 ]; then \ - exit_code=0; \ - fi; \ - fi; exit "$$exit_code" + $(CXX_PRINT) + $(C_CPPCHECK_COMMAND) else $(C2) " CXX $(notdir $<)" $(C1)$(CXX) -c $(call FLAGS_FILTER, $(CXXFLAGS), $<) $(SOURCE_FILE) \ -o $@.trace $(INCLUDE_DIRS) -iquote . - $(C2) " CPPCHECK $(notdir $<)" -# TODO RTC 215692 - $(C1) set -o pipefail && cd `dirname $<` && timeout 2m $(CXX_CHECK) `basename $<` 2>&1 | tee .`basename $<`.cppcheck; exit_code=$$? ; \ - if [ "$$exit_code" -ne 1 ]; then \ - rm -f .`basename $<`.cppcheck; \ - if [ "$$exit_code" -eq 127 ]; then \ - exit_code=0; \ - fi; \ - fi; exit "$$exit_code" + $(CXX_PRINT) + $(CXX_CPPCHECK_COMMAND) endif $(C1)$(TRACE_HASHER) $@ $(TRACE_FLAGS) @rm $@.trace |