Merge branch 'v4-0-test' of ssh://git.samba.org/data/git/samba into v4-0-gmake3
[bbaumbach/samba-autobuild/.git] / source4 / build / smb_build / dot.pl
1 #!/usr/bin/perl
2 # Samba4 Dependency Graph Generator
3 # (C) 2004-2005 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL
5
6 use strict;
7 use lib 'build';
8 use smb_build::config_mk;
9
10 my $subsys = shift @ARGV;
11
12 sub contains($$)
13 {
14         my ($haystack,$needle) = @_;
15         foreach (@$haystack) {
16                 return 1 if ($_ eq $needle);
17         }
18         return 0;
19 }
20
21 sub generate($$$)
22 {
23         my ($depend,$only,$name) = @_;
24         my $res = "digraph $name {\n";
25
26         foreach my $part (values %{$depend}) {
27                 next if (defined($only) and not contains($only,$part->{NAME}));
28                 foreach my $elem (@{$part->{PUBLIC_DEPENDENCIES}}) {
29                         $res .= "\t\"$part->{NAME}\" -> \"$elem\" [style=filled]; /* public */\n";
30                 }
31                 foreach my $elem (@{$part->{PRIVATE_DEPENDENCIES}}) {
32                         $res .= "\t\"$part->{NAME}\" -> \"$elem\" [style=dotted]; /* private */\n";
33                 }
34         }
35
36         return $res . "}\n";
37 }
38
39 my $INPUT = {};
40 smb_build::config_mk::run_config_mk($INPUT, '.', '.', "main.mk");
41
42 my $name = "samba4";
43
44 my $only;
45 if (defined($subsys)) {
46         my $DEPEND = smb_build::input::check($INPUT, \%config::enabled, 
47                 "MERGED_OBJ", "SHARED_LIBRARY", "SHARED_LIBRARY");
48
49         die("No such subsystem $subsys") unless (defined($DEPEND->{$subsys}));
50
51         $only = $DEPEND->{$subsys}->{UNIQUE_DEPENDENCIES_ALL};
52         push (@$only, "$subsys");
53
54         $name = $subsys;
55 }
56
57 my $fname = "$name-deps.dot";
58 print __FILE__.": creating $fname\n";
59 open DOTTY, ">$fname";
60 print DOTTY generate($INPUT, $only, $name);
61 close DOTTY;
62
63 1;