aboutsummaryrefslogtreecommitdiffstats
path: root/grub-core/genmoddep.awk
diff options
context:
space:
mode:
authorJames <james.mckenzie@citrix.com>2012-11-16 10:41:01 +0000
committerJames <james.mckenzie@citrix.com>2012-11-16 10:41:01 +0000
commit041d1ea37802bf7178a31a53f96c26efa6b8fb7b (patch)
treec193e84ad1237f25a79d0f6a267722e44c73f56a /grub-core/genmoddep.awk
downloadgrub-1.99-041d1ea37802bf7178a31a53f96c26efa6b8fb7b.tar.gz
grub-1.99-041d1ea37802bf7178a31a53f96c26efa6b8fb7b.tar.bz2
grub-1.99-041d1ea37802bf7178a31a53f96c26efa6b8fb7b.zip
fish
Diffstat (limited to 'grub-core/genmoddep.awk')
-rw-r--r--grub-core/genmoddep.awk62
1 files changed, 62 insertions, 0 deletions
diff --git a/grub-core/genmoddep.awk b/grub-core/genmoddep.awk
new file mode 100644
index 0000000..e412d43
--- /dev/null
+++ b/grub-core/genmoddep.awk
@@ -0,0 +1,62 @@
+#! /usr/bin/awk -f
+#
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This genmoddep.awk is free software; the author
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Read symbols' info from stdin.
+BEGIN {
+ error = 0
+ lineno = 0;
+ while (getline <"/dev/stdin") {
+ lineno++;
+ if ($1 == "defined") {
+ symtab[$3] = $2;
+ modtab[$2] = "" modtab[$2]
+ } else if ($1 == "undefined") {
+ if ($3 in symtab)
+ modtab[$2] = modtab[$2] " " symtab[$3];
+ else if ($3 != "__gnu_local_gp") {
+ printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
+ error++;
+ }
+ }
+ else {
+ printf "error: %u: unrecognized input format\n", lineno;
+ error++;
+ break;
+ }
+ }
+}
+
+# Output the result.
+END {
+ if (error >= 1)
+ exit 1;
+
+ for (mod in modtab) {
+ # Remove duplications.
+ split(modtab[mod], depmods, " ");
+ for (depmod in uniqmods) {
+ delete uniqmods[depmod];
+ }
+ for (i in depmods) {
+ depmod = depmods[i];
+ # Ignore kernel, as always loaded.
+ if (depmod != "kernel" && depmod != mod)
+ uniqmods[depmod] = 1;
+ }
+ modlist = ""
+ for (depmod in uniqmods) {
+ modlist = modlist " " depmod;
+ }
+ printf "%s:%s\n", mod, modlist;
+ }
+}