Skip to content

Commit

Permalink
Patch For: Implement Static Analysis with cppcheck
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
LF-Luis authored and dcrowell77 committed Sep 19, 2019
1 parent bfe5638 commit 08501bc
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 38 deletions.
1 change: 1 addition & 0 deletions makefile
Expand Up @@ -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
Expand Down
71 changes: 33 additions & 38 deletions src/build/mkrules/cc.rules.mk
Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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
Expand Down

0 comments on commit 08501bc

Please sign in to comment.