Use a single grep call with all gcc warning checks combined rather than
calling grep separately for each message being checked. Aside to being
faster, this also avoids outputting warnings in separate blocks.
---
 bin/install-qa-check.d/90gcc-warnings | 62 +++++++++++++++++++----------------
 1 file changed, 33 insertions(+), 29 deletions(-)

diff --git a/bin/install-qa-check.d/90gcc-warnings 
b/bin/install-qa-check.d/90gcc-warnings
index 812bf41..ad38754 100644
--- a/bin/install-qa-check.d/90gcc-warnings
+++ b/bin/install-qa-check.d/90gcc-warnings
@@ -68,39 +68,43 @@ gcc_warn_check() {
                        #': warning: missing sentinel in function call'
                        #': warning: not enough variable arguments to fit a 
sentinel'
                )
+
+               # join all messages into one grep-expression
+               local joined_msgs
+               printf -v joined_msgs '%s|' "${msgs[@]}"
+               joined_msgs=${joined_msgs%|}
+
                local abort="no"
-               local i=0
                local grep_cmd=grep
                [[ $PORTAGE_LOG_FILE = *.gz ]] && grep_cmd=zgrep
-               while [[ -n ${msgs[${i}]} ]] ; do
-                       m=${msgs[$((i++))]}
-                       # force C locale to work around slow unicode locales 
#160234
-                       f=$(LC_ALL=C $grep_cmd "${m}" "${PORTAGE_LOG_FILE}")
-                       if [[ -n ${f} ]] ; then
-                               abort="yes"
-                               # for now, don't make this fatal (see bug 
#337031)
-                               #case "$m" in
-                               #       ": warning: call to .* will always 
overflow destination buffer") always_overflow=yes ;;
-                               #esac
-                               if [[ $always_overflow = yes ]] ; then
-                                       eerror
-                                       eerror "QA Notice: Package triggers 
severe warnings which indicate that it"
-                                       eerror "           may exhibit random 
runtime failures."
-                                       eerror
-                                       eerror "${f}"
-                                       eerror
-                                       eerror " Please file a bug about this 
at http://bugs.gentoo.org/";
-                                       eerror " with the maintaining herd of 
the package."
-                                       eerror
-                               else
-                                       __vecho -ne '\n'
-                                       eqawarn "QA Notice: Package triggers 
severe warnings which indicate that it"
-                                       eqawarn "           may exhibit random 
runtime failures."
-                                       eqawarn "${f}"
-                                       __vecho -ne '\n'
-                               fi
+
+               # force C locale to work around slow unicode locales #160234
+               f=$(LC_CTYPE=C LC_COLLATE=C "${grep_cmd}" -E "${joined_msgs}" 
"${PORTAGE_LOG_FILE}")
+               if [[ -n ${f} ]] ; then
+                       abort="yes"
+                       # for now, don't make this fatal (see bug #337031)
+                       #if [[ ${f} == *'will always overflow destination 
buffer'* ]]; then
+                       #       always_overflow=yes
+                       #fi
+                       if [[ $always_overflow = yes ]] ; then
+                               eerror
+                               eerror "QA Notice: Package triggers severe 
warnings which indicate that it"
+                               eerror "           may exhibit random runtime 
failures."
+                               eerror
+                               eerror "${f}"
+                               eerror
+                               eerror " Please file a bug about this at 
http://bugs.gentoo.org/";
+                               eerror " with the maintaining herd of the 
package."
+                               eerror
+                       else
+                               __vecho -ne '\n'
+                               eqawarn "QA Notice: Package triggers severe 
warnings which indicate that it"
+                               eqawarn "           may exhibit random runtime 
failures."
+                               eqawarn "${f}"
+                               __vecho -ne '\n'
                        fi
-               done
+               fi
+
                local cat_cmd=cat
                [[ $PORTAGE_LOG_FILE = *.gz ]] && cat_cmd=zcat
                [[ $reset_debug = 1 ]] && set -x
-- 
2.1.0


Reply via email to