#!/bin/sh progname=${0##*/} statusmsg() { echo " $@" } infomsg() { statusmsg "INFO: $@" } warningmsg() { statusmsg "WARNING: $@" } errormsg() { statusmsg "ERROR: $@" } 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 fi os_check() { OS=`uname -s 2>/dev/null` infomsg "OS : $OS" REL=`uname -r 2>/dev/null` infomsg "OS RELEASE : $REL" HW=`uname -m 2>/dev/null` infomsg "HARDWARE : $HW" } # We shouldn't use awk to test for awk... but if # awk isn't there it can't be found. awk_check() { if test -n "`awk 2>&1 | tail -1 | awk '{print $1}'`"; then infomsg "awk : Found" else warningmsg "awk : Not found!" fi } gcc_check() { TEST=`$WHICH gcc 2>/dev/null` if test -n "$TEST"; then VERS=`gcc --version 2>/dev/null | head -n 1` infomsg "gcc : $VERS" # The elif will work in bourne shells, no other shells tested. elif test -n "`gcc 2>&1 | tail -1 | awk '{print $1}'`"; then VERS=`gcc --version 2>/dev/null | head -n 1` infomsg "gcc : $VERS" else warningmsg "gcc : Not Found"; fi } cc_check() { TEST=`$WHICH cc 2>/dev/null` if test -n "$TEST"; then VERS=`cc --version 2>/dev/null | head -n 1` infomsg "cc : $VERS" else warningmsg "cc : Not Found"; fi } cplusplus_check() { TEST=`$WHICH c++ 2>/dev/null` if test -n "$TEST"; then VERS=`c++ --version 2>/dev/null | head -n 1` infomsg "c++ : $VERS" else warningmsg "c++ : Not Found"; fi } gmake_check() { TEST=`$WHICH gmake 2>/dev/null` if test -n "$TEST" ; then gmake --version 2>/dev/null |\ awk -F, '{print $1}' |\ awk '/GNU Make/{print "GNU gmake :",$NF}' else # FIX this test. TEST=`make --version 2>/dev/null` if test -n "$TEST"; then make --version 2>/dev/null |\ awk -F, '{print $1}' |\ awk '/GNU Make/{print "gmake :",$NF}' else warningmsg "gmake : Not Found" fi fi } # Applies for NetBSD make and possibly every make. make_check() { if test -n "`make 2>/dev/null`"; then infomsg "make : Found" else warningmsg "make : Not Found" fi } autoconf_check() { TEST=`$WHICH autoconf 2>/dev/null` if test -n "$TEST"; then autoconf --version |\ head -n 1 |\ awk '{\ if (length($4) == 0) {\ print "autoconf : "$3\ } else {\ print "autoconf : "$4\ }}' else warningmsg "autoconf : Not Found" fi } automake_check() { TEST=`$WHICH automake 2>/dev/null` if test -n "$TEST"; then automake --version 2>/dev/null |\ head -n 1 |\ awk '{print "automake : "$4}' else warningmsg "automake : Not Found" fi } # TODO: More libtool variants. libtool_check() { TEST=`$WHICH libtool 2>/dev/null` if test -n "$TEST"; then libtool --version 2>/dev/null |\ head -n 1 |\ awk '{print "libtool : "$4}' else warningmsg "libtool : Not Found" fi } libextractor_check() { TEST=`$WHICH extract 2>/dev/null` if test -n "$TEST"; then extract -v 2>/dev/null |\ head -n 1 |\ awk '{print "libextractor : "$2}' else warningmsg "libextractor : Not Found" fi } gnunet08_check() { if test -x gnunetd; then gnunetd -v | sed -e "s/v//" 2>/dev/null |\ awk '{print "GNUnet 0.8 : "$2 (may conflict!)}' else infomsg "GNUnet 0.8 : Not Found (good)" fi } gnunet09x_check() { TEST=`$WHICH gnunet-arm 2>/dev/null` if test -n "$TEST"; then gnunet-arm -v | sed -e "s/v//" 2>/dev/null |\ awk '{print "GNUnet 0.9 : "$2}' else infomsg "GNUnet 0.9 : Not Found (good)" fi } gnunet011x_check() { TEST=`$WHICH gnunet-arm 2>/dev/null` if test -n "$TEST"; then gnunet-arm -v | sed -e "s/v//" 2>/dev/null |\ awk '{print "GNUnet 0.11.x : "$2}' else warningmsg "GNUnet 0.11.x : Not Found" fi } gcrypt_check() { TEST=`$WHICH libgcrypt-config 2> /dev/null` if test -n "$TEST"; then libgcrypt-config --version 2> /dev/null | \ awk '{print "libgcrypt : "$1}' else warningmsg "libgcrypt : Not Found" fi } mysql_check() { TEST=`$WHICH mysql_config 2> /dev/null` if test -n "$TEST"; then mysql_config --version 2> /dev/null | \ awk '{print "mysql : "$1}' else infomsg "mysql : Not Found" fi } pkgconf_check() { TEST=`$WHICH pkgconf 2> /dev/null` if test -n "$TEST"; then pkgconf --version 2> /dev/null | awk '{print "pkgconf : "$1}' else infomsg "pkgconf : Not Found" fi } pkgconfig_check() { TEST=`$WHICH pkg-config 2> /dev/null` if test -n "$TEST"; then pkg-config --version 2> /dev/null | \ awk '{print "pkg-config : "$1}' else infomsg "pkg-config : Not Found" fi } glib2_check() { TEST=`$WHICH pkg-config 2> /dev/null` if test -n "$TEST"; then pkg-config --modversion glib-2.0 2> /dev/null | \ awk '{print "glib2 : "$1}' else infomsg "glib2 : Not Found" fi } gtk2_check() { TEST=`$WHICH pkg-config 2> /dev/null` if test -n "$TEST"; then pkg-config --modversion gtk+-2.0 2> /dev/null | \ awk '{print "gtk2+ : "$1}' else infomsg "gtk2+ : Not Found" fi } gmp_check() { TEST=`$WHICH dpkg 2> /dev/null` if test -n "$TEST"; then LINES=`dpkg -s libgmp-dev | grep Version | wc -l 2> /dev/null` if test "$LINES" = "1" then VERSION=`dpkg -s libgmp-dev | grep Version | awk '{print $2}'` infomsg "GMP : libgmp-dev-$VERSION.deb" else errormsg "GMP : dpkg: libgmp-dev not installed" fi fi TEST=`$WHICH rpm 2> /dev/null` if test -n "$TEST"; then rpm -q gmp | sed -e "s/gmp-//" 2> /dev/null | \ awk '{print "GMP : "$1.rpm}' else warningmsg "GMP : Test not available" fi } libunistring_check() { TEST=`$WHICH dpkg 2> /dev/null` if test -n "$TEST"; then LINES=`dpkg -s libunistring-dev | grep Version | wc -l` if test "$LINES" = "1" then VERSION=`dpkg -s libunistring-dev | grep Version | awk '{print $2}'` infomsg "libunistring : libunistring3-dev-$VERSION.deb" else errormsg "libunistring : dpkg: libunistring3-dev not installed" fi else TEST=`$WHICH rpm 2> /dev/null` if test -n "$TEST"; then rpm -q unistring | sed -e "s/unistring-//" 2> /dev/null | \ awk '{print "libunistring : "$1.rpm}' else infomsg "libunistring : Test not available" fi fi } pkgadd_check() { TEST=`$WHICH pkg_add 2> /dev/null` if test -n "$TEST"; then VERSION_UNISTRING=`pkg_info -Nb libunistring` VERSION_GMP=`pkg_info -Nb gmp` echo "libunistring :" echo "$VERSION_UNISTRING" echo "GMP :" echo "$VERSION_GMP" fi } gettext_check() { TEST=`$WHICH gettext 2> /dev/null` if test -n "$TEST"; then gettext --version | head -n1 2> /dev/null | \ awk '{print "GNU gettext : "$4}' else errormsg "GNU gettext : Not found" fi } # Merge curl_check + gnurl_check -> error if neither is # found (yes those systems exist) curl_check() { TEST=`$WHICH curl-config 2> /dev/null` if test -n "$TEST"; then curl-config --version | head -n1 2> /dev/null | \ awk '{print "libcurl : "$2}' else infomsg "libcurl : Not found" fi } gnurl_check() { TEST=`$WHICH gnurl-config 2> /dev/null` if test -n "$TEST"; then gnurl-config --version | head -n1 2> /dev/null | \ awk '{print "libgnurl : "$2}' else infomsg "libgnurl : Not found" fi } libmicrohttpd_check() { echo -n "libmicrohttpd : " TMPFILE=`mktemp /tmp/mhd-version-testXXXXXX` cat - >$TMPFILE.c < #include int main() { fprintf (stdout, "%X\n", MHD_VERSION); return 0; } EOF gcc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" cc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" rm -f $TMPFILE $TMPFILE.bin } glpk_check() { echo -n "GNU GLPK : " TMPFILE=`mktemp /tmp/glpk-version-testXXXXXX` cat - >$TMPFILE.c < #include int main() { fprintf (stdout, "%u.%u\n", GLP_MAJOR_VERSION, GLP_MINOR_VERSION); return 0; } EOF gcc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" cc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" rm -f $TMPFILE $TMPFILE.bin } gnutls_check() { echo -n "GnuTLS : " TMPFILE=`mktemp /tmp/gnutls-version-testXXXXXX` cat - >$TMPFILE.c < #include int main() { fprintf (stdout, "%s\n", GNUTLS_VERSION); return 0; } EOF gcc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" cc -o $TMPFILE $TMPFILE.c 2> /dev/null && $TMPFILE || echo "Not found" rm -f $TMPFILE $TMPFILE.bin } main() { infomsg "${progname} 0.11.0" infomsg infomsg "Please submit the following" infomsg "information with your bug report:" linemsg os_check awk_check gcc_check cc_check cplusplus_check gmake_check make_check autoconf_check automake_check libtool_check libextractor_check gnunet08_check gnunet09x_check gnunet011x_check gcrypt_check mysql_check pkgconf_check pkgconfig_check glib2_check gtk2_check gmp_check libunistring_check pkgadd_check gettext_check curl_check gnurl_check libmicrohttpd_check glpk_check gnutls_check linemsg infomsg "Bug report saved in ./my_gnunet_bugreport.log" } main "$@" 2>&1 | tee "my_gnunet_bugreport.log"