3 # Copyright (C) 2006 Free Software Foundation, Inc.
5 # This genmoddep.awk is free software; the author
6 # gives unlimited permission to copy and/or distribute it,
7 # with or without modifications, as long as this notice is preserved.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 # Read symbols' info from stdin.
20 if ($1 == "defined") {
22 modtab[$2] = "" modtab[$2]
23 } else if ($1 == "undefined") {
25 modtab[$2] = modtab[$2] " " symtab[$3];
26 else if ($3 != "__gnu_local_gp" && $3 != "_gp_disp") {
27 printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
32 printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
45 # Remove duplications.
46 split(modtab[mod], depmods, " ");
47 for (depmod in uniqmods) {
48 delete uniqmods[depmod];
52 # Ignore kernel, as always loaded.
53 if (depmod != "kernel" && depmod != mod)
58 for (depmod in uniqmods) {
59 modlist = modlist " " depmod;
60 inverse_dependencies[depmod] = inverse_dependencies[depmod] " " mod
64 if (mod == "all_video") {
67 printf "%s:%s\n", mod, modlist;
70 # Check that we have no dependency circles
71 while (total_depcount != 0) {
73 for (mod in depcount) {
74 if (depcount[mod] == 0) {
76 split(inverse_dependencies[mod], inv_depmods, " ");
77 for (ctr in inv_depmods) {
78 depcount[inv_depmods[ctr]]--
81 delete inverse_dependencies[mod]
85 if (something_done == 0) {
86 for (mod in depcount) {
87 circle = circle " " mod
89 printf "error: modules %s form a dependency circle\n", circle >"/dev/stderr";
94 while (getline <"video.lst") {
95 modlist = modlist " " $1;
97 printf "all_video:%s\n", modlist;