#!/bin/sh
# Before running this script please ensure that your PATH is
# typical as you use for compilation/istallation. I use
# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may
# differ on your system.
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:$PATH
echo 'If some fields are empty or look unusual you may have an old version.'
echo 'Compare to the current minimal requirements in Documentation/Changes.'
echo ' '

uname -a
echo ' '

gcc --version 2>&1| head -n 1 | grep -v gcc | awk \
'NR==1{print "Gnu C                 ", $1}'

gcc --version 2>&1| grep gcc | awk \
'NR==1{print "Gnu C                 ", $3}'

make --version 2>&1 | awk -F, '{print $1}' | awk \
      '/GNU Make/{print "Gnu make              ",$NF}'

ld -v | awk -F\) '{print $1}' | awk \
'/BFD/{print "binutils              ",$NF} \
/^GNU/{print "binutils              ",$4}'

echo -n "util-linux             "
fdformat --version | awk '{print $NF}' | sed -e s/^util-linux-// -e s/\)$//

echo -n "mount                  "
mount --version | awk '{print $NF}' | sed -e s/^mount-// -e s/\)$//

depmod -V  2>&1 | awk 'NR==1 {print "module-init-tools     ",$NF}'

tune2fs 2>&1 | grep "^tune2fs" | sed 's/,//' |  awk \
'NR==1 {print "e2fsprogs             ", $2}'

fsck.jfs -V 2>&1 | grep version | sed 's/,//' |  awk \
'NR==1 {print "jfsutils              ", $3}'

reiserfsck -V 2>&1 | grep reiserfsck | awk \
'NR==1{print "reiserfsprogs         ", $2}'

fsck.reiser4 -V 2>&1 | grep fsck.reiser4 | awk \
'NR==1{print "reiser4progs          ", $2}'

xfs_db -V 2>&1 | grep version | awk \
'NR==1{print "xfsprogs              ", $3}'

cardmgr -V 2>&1| grep version | awk \
'NR==1{print "pcmcia-cs             ", $3}'

quota -V 2>&1 | grep version | awk \
'NR==1{print "quota-tools           ", $NF}'

pppd --version 2>&1| grep version | awk \
'NR==1{print "PPP                   ", $3}'

isdnctrl 2>&1 | grep version | awk \
'NR==1{print "isdn4k-utils          ", $NF}'

showmount --version 2>&1 | grep nfs-utils | awk \
'NR==1{print "nfs-utils             ", $NF}'

ls -l `ldd /bin/sh | awk '/libc/{print $3}'` | sed \
-e 's/\.so$//' | awk -F'[.-]'   '{print "Linux C Library        " \
$(NF-2)"."$(NF-1)"."$NF}'

ldd -v > /dev/null 2>&1 && ldd -v || ldd --version |head -n 1 | awk \
'NR==1{print "Dynamic linker (ldd)  ", $NF}'

ls -l /usr/lib/lib{g,stdc}++.so  2>/dev/null | awk -F. \
       '{print "Linux C++ Library      " $4"."$5"."$6}'

ps --version 2>&1 | grep version | awk \
'NR==1{print "Procps                ", $NF}'

ifconfig --version 2>&1 | grep tools | awk \
'NR==1{print "Net-tools             ", $NF}'

# Kbd needs 'loadkeys -h',
loadkeys -h 2>&1 | awk \
'(NR==1 && ($3 !~ /option/)) {print "Kbd                   ", $3}'

# while console-tools needs 'loadkeys -V'.
loadkeys -V 2>&1 | awk \
'(NR==1 && ($2 ~ /console-tools/)) {print "Console-tools         ", $3}'

expr --v 2>&1 | awk 'NR==1{print "Sh-utils              ", $NF}'

udevinfo -V 2>&1 | grep version | awk '{print "udev                  ", $3}'

if [ -e /proc/modules ]; then
    X=`cat /proc/modules | sed -e "s/ .*$//"`
    echo "Modules Loaded         "$X
fi
