genmoddep.awk: Add a test that we have no circular dependencies
This commit is contained in:
parent
7cc27aeda9
commit
db97faec91
1 changed files with 31 additions and 1 deletions
|
@ -29,7 +29,7 @@ BEGIN {
|
|||
}
|
||||
}
|
||||
else {
|
||||
printf "error: %u: unrecognized input format\n", NR;
|
||||
printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
|
||||
error++;
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ END {
|
|||
if (error >= 1)
|
||||
exit 1;
|
||||
|
||||
total_depcount = 0
|
||||
|
||||
for (mod in modtab) {
|
||||
# Remove duplications.
|
||||
split(modtab[mod], depmods, " ");
|
||||
|
@ -52,14 +54,42 @@ END {
|
|||
uniqmods[depmod] = 1;
|
||||
}
|
||||
modlist = ""
|
||||
depcount[mod] = 0
|
||||
for (depmod in uniqmods) {
|
||||
modlist = modlist " " depmod;
|
||||
inverse_dependencies[depmod] = inverse_dependencies[depmod] " " mod
|
||||
depcount[mod]++
|
||||
total_depcount++
|
||||
}
|
||||
if (mod == "all_video") {
|
||||
continue;
|
||||
}
|
||||
printf "%s:%s\n", mod, modlist;
|
||||
}
|
||||
|
||||
# Check that we have no dependency circles
|
||||
while (total_depcount != 0) {
|
||||
something_done = 0
|
||||
for (mod in depcount) {
|
||||
if (depcount[mod] == 0) {
|
||||
delete depcount[mod]
|
||||
split(inverse_dependencies[mod], inv_depmods, " ");
|
||||
for (ctr in inv_depmods) {
|
||||
depcount[inv_depmods[ctr]]--
|
||||
total_depcount--
|
||||
}
|
||||
delete inverse_dependencies[mod]
|
||||
something_done = 1
|
||||
}
|
||||
}
|
||||
if (something_done == 0) {
|
||||
for (mod in depcount) {
|
||||
circle = circle " " mod
|
||||
}
|
||||
printf "error: modules %s form a dependency circle\n", circle >"/dev/stderr";
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
modlist = ""
|
||||
while (getline <"video.lst") {
|
||||
modlist = modlist " " $1;
|
||||
|
|
Loading…
Reference in a new issue