#!/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.
#
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 -dumpversion 2>&1 |
awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("GNU C\t\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

make --version 2>&1 |
awk '/GNU Make/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("GNU Make\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

ld -v 2>&1 |
awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Binutils\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

mount --version 2>&1 |
awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	$0 = substr($0,RSTART,RLENGTH)
	printf("Util-linux\t\t%s\nMount\t\t\t%s\n",$0,$0)
}'

depmod -V  2>&1 |
awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Module-init-tools\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

tune2fs 2>&1 |
awk '/^tune2fs/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("E2fsprogs\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

fsck.jfs -V 2>&1 |
awk '/version/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Jfsutils\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

reiserfsck -V 2>&1 |
awk '/^reiserfsck/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Reiserfsprogs\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

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

xfs_db -V 2>&1 |
awk '/version/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Xfsprogs\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

pccardctl -V 2>&1 |
awk '/pcmciautils/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Pcmciautils\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

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

quota -V 2>&1 |
awk '/version/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Quota-tools\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

pppd --version 2>&1 |
awk '/version/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("PPP\t\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

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}'

test -r /proc/self/maps &&
sed '
	/.*libc-\(.*\)\.so$/!d
	s//Linux C Library\t\t\1/
	q
' /proc/self/maps

ldd --version 2>&1 |
awk '/^ldd/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Dynamic linker (ldd)\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

libcpp=`ldconfig -p 2>/dev/null |
	awk '/(libg|stdc)[+]+\.so/ {
	print $NF
	exit
	}
'`
test -r "$libcpp" &&
ls -l $libcpp |
sed '
	s!.*so\.!!
	s!^!Linux C++ Library\t!
'
ps --version 2>&1 |
awk '/version/{
	match($0, /[0-9]+([.]?[0-9]+)+/)
	printf("Procps\t\t\t%s\n",
	substr($0,RSTART,RLENGTH))
}'

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}'

oprofiled --version 2>&1 | awk \
'(NR==1 && ($2 == "oprofile")) {print "oprofile              ", $3}'

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

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

iwconfig --version 2>&1 | awk \
'(NR==1 && ($3 == "version")) {print "wireless-tools        ",$4}'

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