From 8079f8bd5569eb7f5853f5a7cf1499403b2a463a Mon Sep 17 00:00:00 2001 From: ng0 Date: Wed, 27 Nov 2019 21:18:50 +0000 Subject: [PATCH] gnunet-bugreport: rewrite large parts to make better use of awk, replace grep with awk, require a shell which supports 'type' builtin, combine a few tests, and more. --- contrib/scripts/gnunet-bugreport | 287 ++++++++++++++----------------- 1 file changed, 127 insertions(+), 160 deletions(-) diff --git a/contrib/scripts/gnunet-bugreport b/contrib/scripts/gnunet-bugreport index 724c38e06..aaba45252 100755 --- a/contrib/scripts/gnunet-bugreport +++ b/contrib/scripts/gnunet-bugreport @@ -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 -- 2.25.1