diff options
author | Michael Meeks <michael.meeks@suse.com> | 2013-07-15 13:32:49 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-07-15 13:47:43 +0100 |
commit | c5d0d5114e06705d43a9ef6a7dd58006bdd25b10 (patch) | |
tree | c679ef9222141ed726e36b84c63dfbce499d05a4 | |
parent | 8bcb9090efe5a8c08881d0a39f102c5f736f2da6 (diff) |
Prune some leaves for a cleaner top-to-bottom view of deps.
Change-Id: I98e803bee37359405f0e06a62c063fbe9da82ea0
-rwxr-xr-x | bin/module-deps.pl | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/bin/module-deps.pl b/bin/module-deps.pl index acf072aaf263..e77db2598191 100755 --- a/bin/module-deps.pl +++ b/bin/module-deps.pl @@ -9,6 +9,7 @@ my $gnumake; my $src_root; my $makefile_build; my $verbose = 0; +my $no_leaf; my $from_file; my $to_file; my $graph_file; @@ -251,6 +252,33 @@ sub collapse_lib_to_module($) return optimize_tree(\%digraph); } +sub prune_leaves($) +{ + my $tree = shift; + my %newtree; + my %name_has_deps; + + # we like a few leaves around: + for my $nonleaf ('desktop', 'sw', 'sc', 'sd', 'starmath') { + $name_has_deps{$nonleaf} = 1; + } + + # find which modules are depended on by others + for my $name (keys %{$tree}) { + for my $dep (@{$tree->{$name}->{deps}}) { + $name_has_deps{$dep} = 1; + } + } + + # prune modules with no deps + for my $name (keys %{$tree}) { + delete $tree->{$name} if (!defined $name_has_deps{$name}); + } + + return optimize_tree($tree); +} + + sub dump_graphviz($) { my $tree = shift; @@ -300,6 +328,7 @@ sub parse_options() 'preserve-libs|p' => \$preserve_libs, 'write-dep-file|w=s' => \$to_file, 'read-dep-file|f=s' => \$from_file, + 'no-leaf|l' => \$no_leaf, 'graph-file|o=s' => \$graph_file); GetOptions(%h) or pod2usage(2); pod2usage(1) if $help; @@ -320,6 +349,9 @@ sub main() if (!$preserve_libs && !defined($ENV{PRESERVE_LIBS})) { $tree = collapse_lib_to_module($tree); } + if ($no_leaf) { + $tree = prune_leaves($tree); + } dump_graphviz($tree); } |