#!/usr/bin/awk -f
# SPDX-License-Identifier: GPL-2.0
# 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.

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

	printversion("Dynamic linker (ldd)", version("ldd --version 2>&1"))

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

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
}

function printversion(name, value,  ofmt) {
	if (value != "") {
		ofmt = "%-20s\t%s\n"
		printf(ofmt, name, value)
	}
}
