
# ------------------------------------------------------------------------------
# Define the PCLINT strings
# ------------------------------------------------------------------------------
PCLINT_NAME_AND_VAR    = $(TYP_NAME)
PCLINT_PLATFORM        = Cln1

PATH_TOOLS_PCLINT_BASE                 = $(PATH_TOOLS_STATIC_ANALYSIS)/Lint_2013
PATH_TOOLS_PCLINT                      = $(PATH_TOOLS_PCLINT_BASE)

QAC_INC_NAKED                          = $(C_INCLUDES)                                                  \
                                         $(C_INCLUDES_TOOL_INTERNAL)

QAC_INCLUDES                           = $(addprefix -i,$(QAC_INC_NAKED))

QAC_DEFINES                            = $(subst -d,\n-d,$(addprefix -d, $(C_DEFINES) $(C_DEFINES_TOOL_INTERNAL)))

PERCENT = %%
PPERCENT = $(PERCENT)$(PERCENT)

PCLINT_FLAGS                           = -b                                                             \
                                         -zero                                                          \
                                         -u                                                             \
                                         -h1                                                            \
                                         -width(0,0)                                                    \
                                         -e830                                                          \
                                         -e831                                                          \
                                         -w2                                                            \
                                         -$(DQUOTE)format=..\\\\$(PPERCENT)f($(PPERCENT)l) : LINT $(PPERCENT)t $(PPERCENT)n: $(PPERCENT)m$(DQUOTE)


# ------------------------------------------------------------------------------
# PCLINT/MISRA prepare specific rules
# ------------------------------------------------------------------------------
DoMisraPrepareSpecific : MisraPcLintConfig
	@$(GNUECHO) +++ PCLINT prepare specific (do nothing) +++
	@$(GNUECHO)

# ------------------------------------------------------------------------------
# PCLINT/MISRA finalize specific rules
# ------------------------------------------------------------------------------
DoMisraFinalizeSpecific : MisraPcLintProject
	@$(GNUECHO) +++ PCLINT finalize specific (do nothing) +++
	@$(GNUECHO)

QAC_CFG_FILE                           = $(PATH_TMP_NAME_QAC)/lint-opt.lnt

PCLINT_BATCH_FILE_ANALYSIS             = $(PATH_TMP_NAME_QAC)/_pclint_analyze.bat
PCLINT_BATCH_FILE_ANALYSIS_RESULT_ALL  = $(PATH_BIN_NAME)/_pclint_analyze_all.txt

# ------------------------------------------------------------------------------
# QA-C/MISRA analysis configuration
# ------------------------------------------------------------------------------
MisraPcLintConfig:
	@$(GNUECHO) +++ PCLINT/MISRA analysis create $(subst \,/,$(QAC_CFG_FILE)) +++
	@$(GNUECHO)>                                                                      $(QAC_CFG_FILE)
	@$(GNUECHO)>>                                                                     $(QAC_CFG_FILE)
	@$(GNUECHO) $(PATH_TOOLS_PCLINT)/co-arm-gcc-ghs>>                                 $(QAC_CFG_FILE)
	@$(GNUECHO) $(PATH_TOOLS_PCLINT)/au-misra3_patch_v1_3>>                           $(QAC_CFG_FILE)
	@$(GNUECHO)>>                                                                     $(QAC_CFG_FILE)
	@$(GNUECHO) $(addsuffix \n,$(subst \,/,$(QAC_INCLUDES)))>>                        $(QAC_CFG_FILE)
	@$(GNUECHO) $(QAC_DEFINES)>>                                                      $(QAC_CFG_FILE)


RULE_CREATE_BATCH_FOR_SINGLE_FILE_MISRA_C_ANALYSIS = \
$(GNUECHO) \
$(subst /,\\,$(PATH_TOOLS_PCLINT)/LINT-NT.EXE) $(subst /,\\, $(PATH_TMP_NAME_QAC)/lint-opt) $(PCLINT_FLAGS) $(subst /,\\,$<) ^> $(notdir $<).txt \n\
> $(PATH_TMP_NAME_OBJ)/$(basename $(@F)).rule_misra_c.bat

MisraPcLintProject:
	@$(GNUECHO)
	@$(GNUECHO) +++ PCLINT/MISRA create analysis batch file $(subst \,/,$(PCLINT_BATCH_FILE_ANALYSIS)) +++
	@$(GNUECHO) echo off>                                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) -e "\n">>                                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo. >>                                                                                          $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) cd $(PATH_TMP_NAME_QAC)>>                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo Deleting previous temporary files>>                                                          $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) if exist *.lint del /Q *.lint>>                                                                   $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) -e "\n">>                                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) set cnt=^0>>                                                                                      $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) set TOTAL_COUNT=^$(words $(wildcard $(PATH_TMP_NAME_OBJ)/*.rule_misra_c.bat))>>                   $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo Analyzing %%TOTAL_COUNT%% files...>>                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) -e "\n">>                                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@-if exist $(PATH_TMP_NAME_OBJ)/*.rule_misra_c.bat $(CAT) $(PATH_TMP_NAME_OBJ)/*.rule_misra_c.bat>>           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) -e "\n">>                                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo finished all files>>                                                                         $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo concatenate all files to $(PCLINT_BATCH_FILE_ANALYSIS_RESULT_ALL)>>                          $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) type $(subst /,\\,$(PATH_TMP_NAME_QAC)/*.c.txt)^>$(PCLINT_BATCH_FILE_ANALYSIS_RESULT_ALL)>>       $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo.>>                                                                                           $(PCLINT_BATCH_FILE_ANALYSIS)
	@$(GNUECHO) echo Finished>>                                                                                   $(PCLINT_BATCH_FILE_ANALYSIS)
