}
}
else {
- printf "error: %u: unrecognized input format\n", NR;
+ printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
error++;
}
}
if (error >= 1)
exit 1;
+ total_depcount = 0
+
for (mod in modtab) {
# Remove duplications.
split(modtab[mod], depmods, " ");
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;