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") {
21 if ($
3 !~
/^\.refptr\.
/ && $
3 in symtab
) {
22 printf "%s in %s is duplicated in %s\n", $
3, $
2, symtab
[$
3] >"/dev/stderr";
26 modtab
[$
2] =
"" modtab
[$
2]
27 } else if ($
1 ==
"undefined") {
29 modtab
[$
2] = modtab
[$
2] " " symtab
[$
3];
30 else if ($
3 != "__gnu_local_gp" && $
3 != "_gp_disp") {
31 printf "%s in %s is not defined\n", $
3, $
2 >"/dev/stderr";
36 printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
49 # Remove duplications.
50 split(modtab
[mod
], depmods
, " ");
51 for (depmod in uniqmods
) {
52 delete uniqmods
[depmod
];
56 # Ignore kernel, as always loaded.
57 if (depmod
!= "kernel" && depmod
!= mod
)
62 for (depmod in uniqmods
) {
63 modlist = modlist
" " depmod
;
64 inverse_dependencies
[depmod
] = inverse_dependencies
[depmod
] " " mod
68 if (mod ==
"all_video") {
71 printf "%s:%s\n", mod
, modlist
;
74 # Check that we have no dependency circles
75 while (total_depcount
!= 0) {
77 for (mod in depcount
) {
78 if (depcount
[mod
] ==
0) {
80 split(inverse_dependencies
[mod
], inv_depmods
, " ");
81 for (ctr in inv_depmods
) {
82 depcount
[inv_depmods
[ctr
]]--
85 delete inverse_dependencies
[mod
]
89 if (something_done ==
0) {
90 for (mod in depcount
) {
91 circle = circle
" " mod
93 printf "error: modules %s form a dependency circle\n", circle
>"/dev/stderr";
98 while (getline <"video.lst") {
99 modlist = modlist
" " $
1;
101 printf "all_video:%s\n", modlist
;