162306a36Sopenharmony_ci#!/usr/bin/awk -f
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci# Before running this script please ensure that your PATH is
462306a36Sopenharmony_ci# typical as you use for compilation/installation. I use
562306a36Sopenharmony_ci# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may
662306a36Sopenharmony_ci# differ on your system.
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciBEGIN {
962306a36Sopenharmony_ci	usage = "If some fields are empty or look unusual you may have an old version.\n"
1062306a36Sopenharmony_ci	usage = usage "Compare to the current minimal requirements in Documentation/Changes.\n"
1162306a36Sopenharmony_ci	print usage
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	system("uname -a")
1462306a36Sopenharmony_ci	printf("\n")
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	vernum = "[0-9]+([.]?[0-9]+)+"
1762306a36Sopenharmony_ci	libc = "libc[.]so[.][0-9]+$"
1862306a36Sopenharmony_ci	libcpp = "(libg|stdc)[+]+[.]so([.][0-9]+)+$"
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	printversion("GNU C", version("gcc -dumpversion"))
2162306a36Sopenharmony_ci	printversion("GNU Make", version("make --version"))
2262306a36Sopenharmony_ci	printversion("Binutils", version("ld -v"))
2362306a36Sopenharmony_ci	printversion("Util-linux", version("mount --version"))
2462306a36Sopenharmony_ci	printversion("Mount", version("mount --version"))
2562306a36Sopenharmony_ci	printversion("Module-init-tools", version("depmod -V"))
2662306a36Sopenharmony_ci	printversion("E2fsprogs", version("tune2fs"))
2762306a36Sopenharmony_ci	printversion("Jfsutils", version("fsck.jfs -V"))
2862306a36Sopenharmony_ci	printversion("Reiserfsprogs", version("reiserfsck -V"))
2962306a36Sopenharmony_ci	printversion("Reiser4fsprogs", version("fsck.reiser4 -V"))
3062306a36Sopenharmony_ci	printversion("Xfsprogs", version("xfs_db -V"))
3162306a36Sopenharmony_ci	printversion("Pcmciautils", version("pccardctl -V"))
3262306a36Sopenharmony_ci	printversion("Pcmcia-cs", version("cardmgr -V"))
3362306a36Sopenharmony_ci	printversion("Quota-tools", version("quota -V"))
3462306a36Sopenharmony_ci	printversion("PPP", version("pppd --version"))
3562306a36Sopenharmony_ci	printversion("Isdn4k-utils", version("isdnctrl"))
3662306a36Sopenharmony_ci	printversion("Nfs-utils", version("showmount --version"))
3762306a36Sopenharmony_ci	printversion("Bison", version("bison --version"))
3862306a36Sopenharmony_ci	printversion("Flex", version("flex --version"))
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci	while ("ldconfig -p 2>/dev/null" | getline > 0)
4162306a36Sopenharmony_ci		if ($NF ~ libc || $NF ~ libcpp)
4262306a36Sopenharmony_ci			if (!seen[ver = version("readlink " $NF)]++)
4362306a36Sopenharmony_ci				printversion("Linux C" ($NF ~ libcpp? "++" : "") " Library", ver)
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	printversion("Dynamic linker (ldd)", version("ldd --version"))
4662306a36Sopenharmony_ci	printversion("Procps", version("ps --version"))
4762306a36Sopenharmony_ci	printversion("Net-tools", version("ifconfig --version"))
4862306a36Sopenharmony_ci	printversion("Kbd", version("loadkeys -V"))
4962306a36Sopenharmony_ci	printversion("Console-tools", version("loadkeys -V"))
5062306a36Sopenharmony_ci	printversion("Sh-utils", version("expr --v"))
5162306a36Sopenharmony_ci	printversion("Udev", version("udevadm --version"))
5262306a36Sopenharmony_ci	printversion("Wireless-tools", version("iwconfig --version"))
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci	while ("sort /proc/modules" | getline > 0) {
5562306a36Sopenharmony_ci		mods = mods sep $1
5662306a36Sopenharmony_ci		sep = " "
5762306a36Sopenharmony_ci	}
5862306a36Sopenharmony_ci	printversion("Modules Loaded", mods)
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cifunction version(cmd,    ver) {
6262306a36Sopenharmony_ci	cmd = cmd " 2>&1"
6362306a36Sopenharmony_ci	while (cmd | getline > 0) {
6462306a36Sopenharmony_ci		if (match($0, vernum)) {
6562306a36Sopenharmony_ci			ver = substr($0, RSTART, RLENGTH)
6662306a36Sopenharmony_ci			break
6762306a36Sopenharmony_ci		}
6862306a36Sopenharmony_ci	}
6962306a36Sopenharmony_ci	close(cmd)
7062306a36Sopenharmony_ci	return ver
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cifunction printversion(name, value,  ofmt) {
7462306a36Sopenharmony_ci	if (value != "") {
7562306a36Sopenharmony_ci		ofmt = "%-20s\t%s\n"
7662306a36Sopenharmony_ci		printf(ofmt, name, value)
7762306a36Sopenharmony_ci	}
7862306a36Sopenharmony_ci}
79