gnunet-bugreport: rewrite large parts to make better use of awk,
authorng0 <ng0@n0.is>
Wed, 27 Nov 2019 21:18:50 +0000 (21:18 +0000)
committerng0 <ng0@n0.is>
Wed, 27 Nov 2019 21:32:59 +0000 (21:32 +0000)
replace grep with awk, require a shell which supports 'type' builtin,
combine a few tests, and more.

contrib/scripts/gnunet-bugreport

index 724c38e067918b404ea574d1d3352b8a52d9b21a..aaba452525efbd6411d4b90a046fe8798375c229 100755 (executable)
@@ -1,4 +1,10 @@
-#!/bin/sh
+#!/usr/bin/env sh
+
+# Caveats:
+# - checks with textprocessing assuming that system language is English.
+#   - maybe check last return status instead?
+# - Do we need to set awk to which awk becomes available or is awk
+#   always available as just awk?
 
 progname=${0##*/}
 
@@ -27,13 +33,15 @@ linemsg()
     statusmsg "========================================="
 }
 
-# It is okay to assume which(1) here because we provide
-# more than 1 fallback.
-TEST=`type type|grep not`
-if test -n "$TEST"; then
-  WHICH=which
-else
-  WHICH=type
+errmsg=''
+
+# Check if shell support builtin 'type'.
+if test -z "$errmsg"; then
+    if ! (eval 'type type') >/dev/null 2>&1
+    then
+        errmsg='Shell does not support type builtin'
+        exit 1
+    fi
 fi
 
 os_check()
@@ -50,17 +58,17 @@ os_check()
 # awk isn't there it can't be found.
 awk_check()
 {
-    if test -n "`awk 2>&1 | tail -1 | awk '{print $1}'`"; then
+    if test -z "`type awk 2>&1 | awk '/not found/'`"; then
         infomsg    "awk            : Found"
     else
         warningmsg "awk            : Not found!"
+        exit 1
     fi
 }
 
 gcc_check()
 {
-    TEST=`$WHICH gcc | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    if test -z "`type gcc | awk '/not found/' 2>/dev/null`"; then
         VERS=`gcc --version 2>/dev/null | head -n 1`
         infomsg "gcc            : $VERS"
     elif test -n "`gcc 2>&1 | tail -1 | awk '{print $1}'`"; then
@@ -73,8 +81,7 @@ gcc_check()
 
 cc_check()
 {
-    TEST=`$WHICH cc | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    if test -z "`type cc | awk '/not found/' 2>/dev/null`"; then
         VERS=`cc --version 2>/dev/null | head -n 1`
         infomsg "cc             : $VERS"
     else
@@ -84,8 +91,7 @@ cc_check()
 
 cplusplus_check()
 {
-    TEST=`$WHICH c++ | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    if test -z "`type c++ | awk '/not found/' 2>/dev/null`"; then
         VERS=`c++ --version 2>/dev/null | head -n 1`
         infomsg "c++            : $VERS"
     else
@@ -95,8 +101,8 @@ cplusplus_check()
 
 clang_check()
 {
-    TEST=`$WHICH clang | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    TEST=`type clang | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
         VERS=`clang --version 2>/dev/null | head -n 1`
         infomsg "clang          : $VERS"
     elif test -n "`clang 2>&1 | tail -1 | awk '{print $1}'`"; then
@@ -109,7 +115,7 @@ clang_check()
 
 clangplusplus_check()
 {
-    TEST=`$WHICH clang++ | grep -v "not found" 2>/dev/null`
+    TEST=`type clang++ | awk '/not found/' 2>/dev/null`
     if test -n "$TEST"; then
         VERS=`clang++ --version 2>/dev/null | head -n 1`
         infomsg "clang++        : $VERS"
@@ -123,35 +129,41 @@ clangplusplus_check()
 
 gmake_check()
 {
-    TEST=`$WHICH gmake | grep -v "not found"  2>/dev/null`
-    if test -n "$TEST" ; then
+    TEST=`type gmake | awk '/not found/'  2>/dev/null`
+    if test -z "$TEST" ; then
         VER=$(gmake --version 2>/dev/null | awk '/GNU Make/ {print $3}')
         infomsg "gmake          : $VER"
     else
         TEST=`make --version 2>/dev/null`
         if test -n "$TEST"; then
-           VER=$(make --version 2>/dev/null | awk '/GNU Make/ {print $3}')
+               VER=$(make --version 2>/dev/null | awk '/GNU Make/ {print $3}')
             infomsg "gmake        : $VER"
         else
-           warningmsg "gmake         : Not Found"
+               warningmsg "gmake         : Not Found"
         fi
     fi
 }
 
-# Applies for NetBSD make and possibly every make.
+# Applies at least for NetBSD make. This test is a little awkward,
+# we should probably grep the output of 'make -dA'. nbmake identifies,
+# NetBSD make from NetBSD (nbmake is portable, external) does not identify.
 make_check()
 {
-    if test -n "`make 2>/dev/null`"; then
-        infomsg    "make           : Found"
-    else
-        warningmsg "make           : Not Found"
+    TEST=`type make | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
+        VER=$(make --version 2>/dev/null | awk '// {print $0}')
+        if test -z "$VER"; then
+            infomsg    "make           : Found"
+        else
+            warningmsg "make           : Not Found (unexpected result)"
+        fi
     fi
 }
 
 autoconf_check()
 {
-    TEST=`$WHICH autoconf | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    TEST=`type autoconf | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
         autoconf --version |\
             head -n 1 |\
             awk '{\
@@ -167,8 +179,8 @@ autoconf_check()
 
 automake_check()
 {
-    TEST=`$WHICH automake | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    TEST=`type automake | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
         VER=`automake --version 2>/dev/null | head -n 1 | awk '{print $4}'`
         infomsg "automake       : $VER"
     else
@@ -179,8 +191,8 @@ automake_check()
 # TODO: More libtool variants.
 libtool_check()
 {
-    TEST=`$WHICH libtoolize | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    TEST=`type libtoolize | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
         VER=`libtoolize --version 2>/dev/null | head -n 1 | awk '{print $4}'`
         infomsg "libtool        : $VER"
     else
@@ -190,8 +202,8 @@ libtool_check()
 
 libextractor_check()
 {
-    TEST=`$WHICH extract | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
+    TEST=`type extract | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
         VER=`extract -v 2>/dev/null | head -n 1 | awk '{print $2}'`
         infomsg "libextractor   : $VER"
     else
@@ -199,63 +211,36 @@ libextractor_check()
     fi
 }
 
-gnunet08_check()
+gnunet_version_check()
 {
-    if test -x gnunetd; then
-        VER=`gnunetd -v | sed -e "s/v//" 2>/dev/null`
-        warningmsg "GNUnet 0.8     : $VER (may conflict!)"
-    else
+    # historical, should not be matched
+    T08=`type gnunetd | awk '/not found/' 2>/dev/null`
+    if test -z "$T08"; then
+        VER08=`gnunetd -v | awk '{if(/0.8/) { gsub("v",""); print $2}}'`
         infomsg "GNUnet 0.8     : Not Found (good)"
+    # else
+    #    warningmsg "GNUnet 0.8     : $VER08 (may conflict!)"
     fi
-}
-
-gnunet09x_check()
-{
-    TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
-        VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
-        VER9=`echo $VER | grep ^0\.9\.`
-        if test -n "$VER9"; then
-            warningmsg "GNUnet 0.9     : $VER"
-        else
-            infomsg "GNUnet 0.9     : Not Found (good)"
-        fi
-    else
-        infomsg "GNUnet 0.9     : Not Found (good)"
-    fi
-}
-
-gnunet010x_check()
-{
-    TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
-        VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
-        VER10=`echo $VER | grep ^0\.10\.`
-        if test -n "$VER10"; then
-            warningmsg "GNUnet 0.10    : $VER"
-        else
-            infomsg "GNUnet 0.10    : Not Found (good)"
-        fi
-    else
-        infomsg "GNUnet 0.10    : Not Found (good)"
-    fi
-}
-
-gnunet011x_check()
-{
-    TEST=`$WHICH gnunet-arm | grep -v "not found" 2>/dev/null`
-    if test -n "$TEST"; then
-        VER=`gnunet-arm -v | sed -e "s/v//" 2>/dev/null | awk '{print $2}'`
-        infomsg "GNUnet 0.11    : $VER"
+    TEST=`type gnunet-arm | awk '/not found/' 2>/dev/null`
+    if test -z "$TEST"; then
+        gnunet-arm --version |\
+            awk '{\
+       if (/not found/) {\
+               print "    INFO:    GNUnet         : Not found"\
+    } else if (/[0-9]/) {\
+        gsub("v",""); print "    INFO:    GNUnet         : "$2\
+       } else {\
+               print "    INFO:    GNUnet         : Test failed"\
+       }}'
     else
-        warningmsg "GNUnet 0.11.x     : Not Found"
+        warningmsg "GNUnet         : Not Found"
     fi
 }
 
 gitcommit_check()
 {
-    TEST=$(git | grep -v "not found" 2> /dev/null)
-    if test -n "$TEST"; then
+    TEST=$(git | awk '/not found/' 2> /dev/null)
+    if test -z "$TEST"; then
         VER=$(git rev-parse HEAD)
         infomsg "git commit     : $VER"
     else
@@ -265,8 +250,8 @@ gitcommit_check()
 
 gcrypt_check()
 {
-    TEST=`$WHICH libgcrypt-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type libgcrypt-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         VER=`libgcrypt-config --version 2> /dev/null`
         infomsg "libgcrypt      : $VER"
     else
@@ -276,8 +261,8 @@ gcrypt_check()
 
 mysql_check()
 {
-    TEST=`$WHICH mysql_config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type mysql_config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         VER=`mysql_config --version 2> /dev/null`
         infomsg "mysql          : $VER"
     else
@@ -287,18 +272,14 @@ mysql_check()
 
 pkgconf_check()
 {
-    TEST=`$WHICH pkgconf | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type pkgconf | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         pkgconf --version 2> /dev/null | awk '{print "    INFO:    pkgconf        : "$1}'
     else
         infomsg "pkgconf        : Not Found"
     fi
-}
-
-pkgconfig_check()
-{
-    TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type pkg-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         VER=`pkg-config --version 2> /dev/null | awk '{print $1}'`
         infomsg "pkg-config     : $VER"
     else
@@ -308,8 +289,8 @@ pkgconfig_check()
 
 glib2_check()
 {
-    TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type pkg-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         VER=`pkg-config --modversion glib-2.0 2> /dev/null | awk '{print $1}'`
         infomsg "glib2          : $VER"
     else
@@ -317,55 +298,47 @@ glib2_check()
     fi
 }
 
-gtk2_check()
+gtk_check()
 {
-    TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type pkg-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         VER=`pkg-config --modversion gtk+-2.0 2> /dev/null | awk '{print $1}'`
         if test -n "$VER"; then
-            infomsg "gtk2+          : $VER"
+            infomsg "GTK2           : $VER"
         else
-            infomsg "gtk2+          : Not found"
+            infomsg "GTK2           : Not found"
         fi
     else
-        infomsg "gtk2+          : Not Found"
+        infomsg "GTK2           : Not Found"
     fi
-}
 
-gtk3_check()
-{
-    TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    if test -z "$TEST"; then
         VER=`pkg-config --modversion gtk+-3.0 2> /dev/null | awk '{print $1}'`
         if test -n "$VER"; then
-            infomsg "gtk3+          : $VER"
+            infomsg "GTK3           : $VER"
         else
-            infomsg "gtk3+          : Not found"
+            infomsg "GTK3           : Not found"
         fi
     else
-        infomsg "gtk3+          : Not Found"
+        infomsg "GTK3           : Not Found"
     fi
-}
 
-gtk4_check()
-{
-    TEST=`$WHICH pkg-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    if test -z "$TEST"; then
         VER=`pkg-config --modversion gtk+-4.0 2> /dev/null | awk '{print $1}'`
-        if test -n "$VER"; then
-            infomsg "gtk4+          : $VER"
+        if test -z "$VER"; then
+            infomsg "GTK4           : $VER"
         else
-            infomsg "gtk4+          : Not found"
+            infomsg "GTK4           : Not found"
         fi
     else
-        infomsg "gtk4+          : Not Found"
+        infomsg "GTK4           : Not Found"
     fi
 }
 
 gmp_check()
 {
-    TEST=`$WHICH dpkg | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type dpkg | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         LINES=`dpkg -s libgmp-dev | grep Version | wc -l 2> /dev/null`
         if test "$LINES" = "1"
         then
@@ -375,15 +348,15 @@ gmp_check()
             errormsg "GMP            : dpkg: libgmp-dev not installed"
         fi
     else
-        TEST=`$WHICH rpm | grep -v "not found" 2> /dev/null`
-        if test -n "$TEST"; then
+        TEST=`type rpm | awk '/not found/' 2> /dev/null`
+        if test -z "$TEST"; then
             rpm -q gmp | sed -e "s/gmp-//" 2> /dev/null | \
                 infomsg "GMP            : $1.rpm"
         else
             infomsg "GMP            : Test not available"
         fi
-        TEST=$($WHICH pkg_info | grep -v "not found" 2> /dev/null)
-        if test -n "$TEST"; then
+        TEST=$(type pkg_info | awk '/not found/' 2> /dev/null)
+        if test -z "$TEST"; then
             VER=$(pkg_info -e gmp)
             infomsg "GMP            : $VER"
         else
@@ -394,26 +367,26 @@ gmp_check()
 
 libunistring_check()
 {
-    TEST=`$WHICH dpkg | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
-        LINES=`dpkg -s libunistring-dev | grep Version | wc -l`
+    TEST=`type dpkg | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
+        LINES=`dpkg -s libunistring-dev | awk '/Version/' | wc -l`
         if test "$LINES" = "1"
         then
-            VERSION=`dpkg -s libunistring-dev | grep Version | awk '{print $2}'`
+            VERSION=`dpkg -s libunistring-dev | awk '/Version/ {print $2}'`
             infomsg "libunistring   : libunistring3-dev-$VERSION.deb"
         else
             errormsg "libunistring   : dpkg: libunistring3-dev not installed"
         fi
     else
-        TEST=`$WHICH rpm | grep -v "not found" 2> /dev/null`
-        if test -n "$TEST"; then
+        TEST=`type rpm | awk '/not found/' 2> /dev/null`
+        if test -z "$TEST"; then
             rpm -q unistring | sed -e "s/unistring-//" 2> /dev/null | \
                 awk '{print "libunistring   : "$1.rpm}'
         else
             infomsg "libunistring   : Test not available"
         fi
-        TEST=$($WHICH pkg_info | grep -v "not found" 2> /dev/null)
-        if test -n "$TEST"; then
+        TEST=$(type pkg_info | awk '/not found/' 2> /dev/null)
+        if test -z "$TEST"; then
             VER=$(pkg_info -e libunistring)
             infomsg "libunistring   : $VER"
         else
@@ -424,8 +397,8 @@ libunistring_check()
 
 gnugettext_check()
 {
-    TEST=`$WHICH gettext | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
+    TEST=`type gettext | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
         if test -n "$(gettext --version 2>&1 | awk '/unknown option/')"; then
             infomsg "GNU gettext    : Not found"
         else
@@ -437,7 +410,7 @@ gnugettext_check()
 
 gettext_check()
 {
-    if test -n "`$WHICH getext 2>/dev/null`"; then
+    if test -n "`type getext 2>/dev/null`"; then
         infomsg "gettext        : Found"
     else
         infomsg "gettext        : Not Found"
@@ -448,9 +421,9 @@ gettext_check()
 # found (yes those systems exist)
 curl_check()
 {
-    TEST=`$WHICH curl-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
-        VER=`curl-config --version | head -n1 2> /dev/null | awk '{print $2}'`
+    TEST=`type curl-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
+        VER=`curl-config --version 2> /dev/null | awk '{print $NF}'`
         infomsg "libcurl        : $VER"
     else
         infomsg "libcurl        : Not found"
@@ -459,9 +432,9 @@ curl_check()
 
 gnurl_check()
 {
-    TEST=`$WHICH gnurl-config | grep -v "not found" 2> /dev/null`
-    if test -n "$TEST"; then
-        VER=`gnurl-config --version | head -n1 2> /dev/null | awk '{print $2}'`
+    TEST=`type gnurl-config | awk '/not found/' 2> /dev/null`
+    if test -z "$TEST"; then
+        VER=`gnurl-config --version 2> /dev/null | awk '{print $NF}'`
         infomsg "libgnurl       : $VER"
     else
         infomsg "libgnurl       : Not found"
@@ -481,10 +454,10 @@ int main()
   return 0;
 }
 EOF
-    if test -x `$WHICH gcc | awk '{print $NF}'`; then
+    if test -x `type gcc | awk '{print $NF}'`; then
         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin "$TMPFILE"
         VER=`./"$TMPFILE".bin`
-    elif test -x `$WHICH cc | awk '{print $NF}'`; then
+    elif test -x `type cc | awk '{print $NF}'`; then
         cc $CPPFLAGS $CFLAGS -o $TMPFILE.bin $TMPFILE
         VER=`./$TMPFILE.bin`
     else
@@ -507,10 +480,10 @@ int main()
   return 0;
 }
 EOF
-    if test -x `$WHICH gcc | awk '{print $NF}'`; then
+    if test -x `type gcc | awk '{print $NF}'`; then
         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
         VER=`./$TMPFILE.bin`
-    elif test -x `$WHICH cc | awk '{print $NF}'`; then
+    elif test -x `type cc | awk '{print $NF}'`; then
         cc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
         VER=`./"$TMPFILE".bin`
     else
@@ -533,10 +506,10 @@ int main()
   return 0;
 }
 EOF
-    if test -x `$WHICH gcc | awk '{print $NF}'`; then
+    if test -x `type gcc | awk '{print $NF}'`; then
         gcc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
         VER=`./"$TMPFILE".bin`
-    elif test -x `$WHICH cc | awk '{print $NF}'`; then
+    elif test -x `type cc | awk '{print $NF}'`; then
         cc $CPPFLAGS $CFLAGS -o "$TMPFILE".bin $TMPFILE
         VER=`./"$TMPFILE".bin`
     else
@@ -554,8 +527,8 @@ main()
         echo "CPPFLAGS='-I/usr/pkg/include' LDFLAGS='-L/usr/pkg/lib' ${progname}"
         return 0
     fi
-    echo $LDFLAGS
-    echo $CPPFLAGS
+    #echo $LDFLAGS
+    #echo $CPPFLAGS
     infomsg "${progname} 0.11.0"
     infomsg
     infomsg "Please submit the following"
@@ -568,25 +541,19 @@ main()
     cplusplus_check
     clang_check
     clangplusplus_check
-    gmake_check
     make_check
+    gmake_check
     autoconf_check
     automake_check
     libtool_check
     libextractor_check
-    gnunet08_check
-    gnunet09x_check
-    gnunet010x_check
-    gnunet011x_check
+    gnunet_version_check
     gitcommit_check
     gcrypt_check
     mysql_check
     pkgconf_check
-    pkgconfig_check
     glib2_check
-    gtk2_check
-    gtk3_check
-    gtk4_check
+    gtk_check
     gmp_check
     libunistring_check
     gnugettext_check