summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Sherrill <joel@rtems.org>2017-11-09 15:24:38 -0600
committerJoel Sherrill <joel@rtems.org>2017-11-09 15:24:38 -0600
commit0af2b22cbe9831a019c807592bc65a4e07560c26 (patch)
treede71d5494e3e0ff708ffd753c801519f56a16cfe
parent.gitignore: Add erc32-tsim and m32r (diff)
downloadrtems-testing-0af2b22cbe9831a019c807592bc65a4e07560c26.tar.bz2
gen_warnings_report: New file
-rwxr-xr-xrtems/gen_warnings_report175
1 files changed, 175 insertions, 0 deletions
diff --git a/rtems/gen_warnings_report b/rtems/gen_warnings_report
new file mode 100755
index 0000000..9c456bc
--- /dev/null
+++ b/rtems/gen_warnings_report
@@ -0,0 +1,175 @@
+#! /bin/sh
+#
+# Generate a summary report
+
+if [ $# -eq 0 ] ; then
+ echo "Takes at least one argument (usually a date)"
+ exit 1
+fi
+
+handle=$1
+include_net="yes"
+
+# -e '/warning: .rtems_clock_get. is deprecated/d'
+# -e '/warning: .rtems_task_get_note. is deprecated/d'
+# -e '/warning: .rtems_task_set_note. is deprecated/d'
+# -e '/warning: .notepad. is deprecated/d'
+# -e '/warning: .Notepads. is deprecated/d'
+# -e '/warning: .rtems_task_variable_add. is deprecated/d'
+# -e '/warning: .rtems_task_variable_dtor. is deprecated/d'
+# -e '/warning: .rtems_task_variable_get. is deprecated/d'
+# -e '/warning: ._RTEMS_Tasks_Invoke_task_variable_dtor. is deprecated/d'
+
+# -e '/hexdump-conv.c:149:/d'
+# -e '/rtl-mdreloc-mips.c:/d'
+
+filter_net_warnings()
+{
+ if [ ${include_net} = "no" ] ; then
+ sed \
+ -e '/cpukit\/libnetworking.*warning: /d' \
+ -e '/cpukit\/librpc.*warning: /d' \
+ -e '/cpukit\/telnetd.*warning: /d' \
+ -e '/cpukit\/pppd.*warning: /d' \
+ -e '/cpukit\/libfs\/src\/nfs.*warning: /d' \
+ -e '/libchip\/network.*warning: /d' \
+ -e '/erc32\/erc32sonicn.*warning: /d' \
+ -e '/warning .implement a proper /d'
+ else
+ cat
+ fi
+}
+
+filter_warnings()
+{
+ # libtests/math/domath.h FP printf() warning with gcc 4.8.x not >= 4.9
+ # -e '/testsuites/libtests/math/domath.h:/d'
+ # -e '/testsuites/libtests/complex/docomplex.h:/d'
+ # known: m68k _CPU_Context_Restart_self restoring FPU context not implemented
+ # known: sparc/sparcv8-atomic.c:111:
+ # known: cc1plus command line options not valid for C
+ # known: notepads deprecated in confdefs.h
+ # known: task variables deprecated in confdefs.h
+ # known: Clock skew detected (issue in distributed builds)
+
+ # what was this pattern for?
+ # -e 's/^log.*\.\.\/rtems\///'
+
+ grep warning $* | sed \
+ -e '/Makefile:/d' \
+ -e '/libtests\/math\/domath.h/d' \
+ -e '/libtests\/complex\/docomplex.h/d' \
+ -e '/_CPU_Context_Restart_self restoring FPU context not implemented/d' \
+ -e '/sparc\/sparcv8-atomic.c:111:/d' \
+ -e '/cc1plus: warning: command line option.* is valid for C\/ObjC/d' \
+ -e '/Classic API Notepads are deprecated and will be removed/d' \
+ -e '/Per-Task Variables are deprecated and will be removed/d' \
+ -e '/is deprecated (declared at /d' \
+ -e '/warning: Clock skew detected./d' \
+ -e '/log\/avr-/d' \
+ -e '/log\/h8300-/d' \
+ -e '/log\/m32c-/d' \
+ | filter_net_warnings
+}
+
+summary()
+{
+ echo "Unique Warnings : " ${unique}
+ echo "BSPs : " ${bsps}
+ echo "BSPs with Zero : " ${no_warnings}
+ echo "BSPs with only in shared: " ${shared_only}
+
+ echo
+ echo "===================================="
+ echo " Warnings by Class"
+ echo "===================================="
+ cat ${wdir}/warnings-by-class-${handle}.txt
+
+ echo
+ echo "===================================="
+ echo " Top Ten BSPs with Warnings"
+ echo "===================================="
+
+ cat ${wdir}/warnings-per-bsp-${handle}.txt | \
+ grep -v "shared" | sort -n -k 2 -t '=' | tail -10
+}
+
+warnings_per_bsp()
+{
+ for i in $*
+ do
+ BSP=`echo $i | sed -e "s/^....//" -e "s/....$//"`
+
+ count=`filter_warnings ${i} | sed -e 's/^log.*\.\.\/rtems\///' | wc -l`
+ in_bsp=`filter_warnings ${i} | grep /libbsp/ | wc -l`
+ in_libcpu=`filter_warnings ${i} | grep /libcpu/ | wc -l`
+ #in_tests=`filter_warnings ${i} | grep /testsuites/ | wc -l`
+
+ # where="(inBSP=${in_bsp} inLibCPU=${in_libcpu} inTests=${in_tests})"
+ where="(inBSP=${in_bsp} inLibCPU=${in_libcpu})"
+ if [ ${in_bsp} -eq 0 -a ${in_libcpu} -eq 0 ] ; then
+ if [ ${count} -eq 0 ] ; then
+ where="(none)"
+ else
+ where="(only shared)"
+ fi
+ fi
+
+ echo ${count} ${BSP} " ${where}"
+
+ done | sort -n
+}
+
+if [ -r $1 ] ; then
+ filter_warnings $*
+ exit 0
+fi
+
+wdir=warnings/warnings-${handle}
+if [ ! -d warnings ] ; then
+ echo "warnings top directory does not exist"
+ exit 1
+fi
+
+if [ -d ${wdir} ] ; then
+ echo "${wdir} directory DOES exist."
+ echo "Remove it or pick another directory."
+ exit 1
+fi
+
+mkdir ${wdir}
+
+# -l and -v do not appear to work togheter. :(
+#logs=`grep -l -v ^ERROR log/*`
+
+logs=""
+for f in log/*
+do
+ grep ^ERROR ${f} >/dev/null
+ if [ $? -ne 0 ] ; then
+ logs="${logs} ${f}"
+ fi
+done
+
+
+filter_warnings ${logs} >${wdir}/warnings-all-${handle}.txt
+
+filter_warnings ${logs} | cut -d':' -f2- | sort | uniq -c | \
+ sort -n -r >${wdir}/warnings-${handle}.txt
+
+
+warnings_per_bsp ${logs} >${wdir}/warnings-per-bsp-${handle}.txt
+
+grep "\[-W" ${wdir}/warnings-${handle}.txt | \
+ sed -e 's/^.*\[-W//' -e 's/\]//' | sort | \
+ uniq -c >${wdir}/warnings-by-class-${handle}.txt
+
+bsps=`cat ${wdir}/warnings-per-bsp-${handle}.txt | wc -l`
+unique=`cat ${wdir}/warnings-${handle}.txt | wc -l`
+shared_only=`grep shared ${wdir}/warnings-per-bsp-${handle}.txt | wc -l`
+no_warnings=`grep none ${wdir}/warnings-per-bsp-${handle}.txt | wc -l`
+
+summary >${wdir}/warnings-summary-${handle}.txt
+cat ${wdir}/warnings-summary-${handle}.txt
+
+exit 0