Makefile.in        |    3 ++
 bin/module-deps.pl |   59 +++++++++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 56 insertions(+), 6 deletions(-)

New commits:
commit a19440bee79f9458b3ddc072a02d848c77c52264
Author: Stephan Bergmann <sberg...@redhat.com>
Date:   Mon Feb 17 18:03:44 2014 +0100

    Add toposort feature to module-deps.pl
    
    Change-Id: Id839eae62ad53189c44f7ca5a498bf7113c2536a

diff --git a/Makefile.in b/Makefile.in
index 503f74a..a7a0965 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -328,6 +328,9 @@ dump-deps:
 dump-deps-png:
        @$(SRCDIR)/bin/module-deps.pl $(GNUMAKE) $(SRCDIR)/Makefile.gbuild | 
dot -Tpng -o lo.png
 
+dump-deps-sort:
+       @$(SRCDIR)/bin/module-deps.pl -t $(GNUMAKE) $(SRCDIR)/Makefile.gbuild
+
 define gb_Top_GbuildToIdeIntegration
 $(1)-ide-integration:
        cd $(SRCDIR) && (LC_MESSAGES=C $(GNUMAKE) cmd="$(GNUMAKE) -npf 
Makefile.gbuild all" cmd || true) | $(SRCDIR)/bin/gbuild-to-ide --ide $(1)
diff --git a/bin/module-deps.pl b/bin/module-deps.pl
index e77db25..0520eca 100755
--- a/bin/module-deps.pl
+++ b/bin/module-deps.pl
@@ -12,8 +12,9 @@ my $verbose = 0;
 my $no_leaf;
 my $from_file;
 my $to_file;
-my $graph_file;
+my $output_file;
 my $preserve_libs = 0;
+my $toposort = 0;
 
 sub logit($)
 {
@@ -283,7 +284,7 @@ sub dump_graphviz($)
 {
     my $tree = shift;
     my $to = \*STDOUT;
-    open($to, ">$graph_file") if defined($graph_file);
+    open($to, ">$output_file") if defined($output_file);
     print $to <<END;
 digraph LibreOffice {
 node [shape="Mrecord", color="#BBBBBB"]
@@ -301,6 +302,41 @@ END
     print $to "}\n";
 }
 
+sub toposort_visit($$$$);
+sub toposort_visit($$$$)
+{
+    my $tree = shift;
+    my $list = shift;
+    my $tags = shift;
+    my $name = shift;
+    die "dependencies don't form a DAG"
+        if (defined($tags->{$name}) && $tags->{$name} == 1);
+    if (!$tags->{$name}) {
+        $tags->{$name} = 1;
+        my $result = $tree->{$name};
+        for my $dep (@{$result->{deps}}) {
+            toposort_visit($tree, $list, $tags, $dep);
+        }
+        $tags->{$name} = 2;
+        push @{$list}, $name;
+    }
+}
+
+sub dump_toposort($)
+{
+    my $tree = shift;
+    my @list;
+    my %tags;
+    for my $name (sort keys %{$tree}) {
+        toposort_visit($tree, \@list, \%tags, $name);
+    }
+    my $to = \*STDOUT;
+    open($to, ">$output_file") if defined($output_file);
+    for (my $i = 0; $i <= $#list; ++$i) {
+        print $to "$list[$i]\n";
+    }
+}
+
 sub filter_targets($)
 {
     my $tree = shift;
@@ -326,10 +362,11 @@ sub parse_options()
             VersionMessage(-msg => "You are using: 1.0 of ");
         },
         'preserve-libs|p' => \$preserve_libs,
+        'toposort|t' => \$toposort,
         '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);
+        'output-file|o=s' => \$output_file);
     GetOptions(%h) or pod2usage(2);
     pod2usage(1) if $help;
     pod2usage(-exitstatus => 0, -verbose => 2) if $man;
@@ -352,7 +389,11 @@ sub main()
     if ($no_leaf) {
         $tree = prune_leaves($tree);
     }
-    dump_graphviz($tree);
+    if ($toposort) {
+        dump_toposort($tree);
+    } else {
+        dump_graphviz($tree);
+    }
 }
 
 main()
@@ -395,6 +436,12 @@ Prints the version and exits.
 
 Don't collapse libs to modules
 
+=item B<--toposort>
+
+=item B<-t>
+
+Output a topological sorting instead of a graph
+
 =item B<--read-dep-file file>
 
 =item B<-f>
@@ -407,11 +454,11 @@ Read dependency from file.
 
 Write dependency to file.
 
-=item B<--graph-file file>
+=item B<--output-file file>
 
 =item B<-o>
 
-Write output to graph file
+Write graph or sort output to file
 
 =back
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to