depmod.pl: recurse through module dependencies
authorMike Frysinger <vapier@gentoo.org>
Thu, 9 Jul 2009 04:28:48 +0000 (00:28 -0400)
committerMike Frysinger <vapier@gentoo.org>
Thu, 9 Jul 2009 04:28:48 +0000 (00:28 -0400)
The previous fix up loaded dependencies two deep, but really that was an
incomplete fix as we need to load dependencies all the way down.  So change
the code to run recursively through all dependencies.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
examples/depmod.pl

index 6b47bad094c7665649c516e842c0b312cf4ce6df..8c6548d280c8dc9660a22a4e138948cc6f464e18 100755 (executable)
@@ -167,21 +167,32 @@ sub maybe_unshift
        }
        unshift (@{$array}, $ele);
 }
+sub add_mod_deps
+{
+       my ($depth, $mod, $mod2, $module, $this_module) = @_;
+
+       $depth .= " ";
+       warn "${depth}loading deps of module: $this_module\n" if $verbose;
+
+       foreach my $md (keys %{$mod->{$this_module}}) {
+               add_mod_deps ($depth, $mod, $mod2, $module, $md);
+               warn "${depth} outputting $md\n" if $verbose;
+               maybe_unshift (\@{$$mod2->{$module}}, $md);
+       }
+
+       if (!%{$mod->{$this_module}}) {
+               warn "${depth} no deps\n" if $verbose;
+       }
+}
 foreach my $module (keys %$mod) {
-    warn "filling out module: $module\n" if $verbose;
-    @{$mod2->{$module}} = ();
-    foreach my $md (keys %{$mod->{$module}}) {
-        foreach my $md2 (keys %{$mod->{$md}}) {
-            warn "outputting $md2\n" if $verbose;
-            maybe_unshift (\@{$mod2->{$module}}, $md2);
-        }
-        warn "outputting $md\n" if $verbose;
-        maybe_unshift (\@{$mod2->{$module}}, $md);
-    }
+       warn "filling out module: $module\n" if $verbose;
+       @{$mod2->{$module}} = ();
+       add_mod_deps ("", $mod, \$mod2, $module, $module);
 }
 
 # figure out where the output should go
 if ($stdout == 0) {
+       warn "writing $basedir/modules.dep\n" if $verbose;
     open(STDOUT, ">$basedir/modules.dep")
                              or die "cannot open $basedir/modules.dep: $!";
 }