#! /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 defined symbols from stdin. BEGIN { while (getline <"/dev/stdin") { symtab[$1] = $2 } } # The first line contains a module name. FNR == 1 { module = $1 next }; # The rest is undefined symbols. { if ($1 in symtab) { modtab[module] = modtab[module] " " symtab[$1]; } else if ($1 != "__gnu_local_gp") { printf "%s in %s is not defined\n", $1, module >"/dev/stderr"; error++; # exit; } } # Output the result. END { if (error != 0) 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; } }