nmi_backtrace: generate one-line reports for idle cpus
[cascardo/linux.git] / scripts / ver_linux
index 0d8bd29..430b201 100755 (executable)
-#!/bin/sh
+#!/bin/awk -f
 # Before running this script please ensure that your PATH is
 # typical as you use for compilation/installation. 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
+BEGIN {
+       usage = "If some fields are empty or look unusual you may have an old version.\n"
+       usage = usage "Compare to the current minimal requirements in Documentation/Changes.\n"
+       print usage
+
+       system("uname -a")
+       printf("\n")
+
+       printversion("GNU C", version("gcc -dumpversion 2>&1"))
+       printversion("GNU Make", version("make --version 2>&1"))
+       printversion("Binutils", version("ld -v 2>&1"))
+       printversion("Util-linux", version("mount --version 2>&1"))
+       printversion("Mount", version("mount --version 2>&1"))
+       printversion("Module-init-tools", version("depmod -V  2>&1"))
+       printversion("E2fsprogs", version("tune2fs 2>&1"))
+       printversion("Jfsutils", version("fsck.jfs -V 2>&1"))
+       printversion("Reiserfsprogs", version("reiserfsck -V 2>&1"))
+       printversion("Reiser4fsprogs", version("fsck.reiser4 -V 2>&1"))
+       printversion("Xfsprogs", version("xfs_db -V 2>&1"))
+       printversion("Pcmciautils", version("pccardctl -V 2>&1"))
+       printversion("Pcmcia-cs", version("cardmgr -V 2>&1"))
+       printversion("Quota-tools", version("quota -V 2>&1"))
+       printversion("PPP", version("pppd --version 2>&1"))
+       printversion("Isdn4k-utils", version("isdnctrl 2>&1"))
+       printversion("Nfs-utils", version("showmount --version 2>&1"))
+
+       if (system("test -r /proc/self/maps") == 0) {
+               while (getline <"/proc/self/maps" > 0) {
+                       n = split($0, procmaps, "/")
+                       if (/libc.*so$/ && match(procmaps[n], /[0-9]+([.]?[0-9]+)+/)) {
+                               ver = substr(procmaps[n], RSTART, RLENGTH)
+                               printversion("Linux C Library", ver)
+                               break
+                       }
+               }
        }
-'`
-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 |
-awk '/tools/{
-       match($0, /[0-9]+([.]?[0-9]+)+/)
-       printf("Net-tools\t\t%s\n",
-       substr($0,RSTART,RLENGTH))
-}'
-
-loadkeys -V 2>&1 |
-awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
-       match($0, /[0-9]+([.]?[0-9]+)+/)
-       $0 = substr($0,RSTART,RLENGTH)
-       printf("Kbd\t\t\t%s\nConsole-tools\t\t%s\n",$0,$0)
-}'
 
-oprofiled --version 2>&1 | awk \
-'(NR==1 && ($2 == "oprofile")) {print "oprofile              ", $3}'
+       printversion("Dynamic linker (ldd)", version("ldd --version 2>&1"))
 
-expr --v 2>&1 |
-awk '/^expr/{
-       match($0, /[0-9]+([.]?[0-9]+)+/)
-       printf("Sh-utils\t\t%s\n",
-       substr($0,RSTART,RLENGTH))
-}'
-
-udevadm --version 2>&1 |
-awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{
-       match($0, /[0-9]+([.]?[0-9]+)+/)
-       printf("Udev\t\t\t%s\n",
-       substr($0,RSTART,RLENGTH))
-}'
+       while ("ldconfig -p 2>/dev/null" | getline > 0) {
+               if (/(libg|stdc)[+]+\.so/) {
+                       libcpp = $NF
+                       break
+               }
+       }
+       if (system("test -r " libcpp) == 0)
+               printversion("Linux C++ Library", version("readlink " libcpp))
+
+       printversion("Procps", version("ps --version 2>&1"))
+       printversion("Net-tools", version("ifconfig --version 2>&1"))
+       printversion("Kbd", version("loadkeys -V 2>&1"))
+       printversion("Console-tools", version("loadkeys -V 2>&1"))
+       printversion("Oprofile", version("oprofiled --version 2>&1"))
+       printversion("Sh-utils", version("expr --v 2>&1"))
+       printversion("Udev", version("udevadm --version 2>&1"))
+       printversion("Wireless-tools", version("iwconfig --version 2>&1"))
+
+       if (system("test -r /proc/modules") == 0) {
+               while ("sort /proc/modules" | getline > 0) {
+                       mods = mods sep $1
+                       sep = " "
+               }
+               printversion("Modules Loaded", mods)
+       }
+}
 
-iwconfig --version 2>&1 |
-awk '/version/{
-       match($0, /[0-9]+([.]?[0-9]+)+/)
-       printf("Wireless-tools\t\t%s\n",
-       substr($0,RSTART,RLENGTH))
-}'
+function version(cmd,    ver) {
+       while (cmd | getline > 0) {
+               if (!/ver_linux/ && match($0, /[0-9]+([.]?[0-9]+)+/)) {
+                       ver = substr($0, RSTART, RLENGTH)
+                       break
+               }
+       }
+       close(cmd)
+       return ver
+}
 
-test -e /proc/modules &&
-sort /proc/modules |
-sed '
-       s/ .*//
-       H
-${
-       g
-       s/^\n/Modules Loaded\t\t/
-       y/\n/ /
-       q
+function printversion(name, value,  ofmt) {
+       if (value != "") {
+               ofmt = "%-20s\t%s\n"
+               printf(ofmt, name, value)
+       }
 }
-       d
-'