summaryrefslogtreecommitdiff
path: root/source4/build/smb_build/dot.pl
blob: b30c320c6e1fabdde929d74545cbd7d4d860d000 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl
# Samba4 Dependency Graph Generator
# (C) 2004-2005 Jelmer Vernooij <jelmer@samba.org>
# Published under the GNU GPL

use strict;
use lib 'build';
use smb_build::config_mk;

my $subsys = shift @ARGV;

sub contains($$)
{
	my ($haystack,$needle) = @_;
	foreach (@$haystack) {
		return 1 if ($_ eq $needle);
	}
	return 0;
}

sub generate($$$)
{
	my ($depend,$only,$name) = @_;
	my $res = "digraph $name {\n";

	foreach my $part (values %{$depend}) {
		next if (defined($only) and not contains($only,$part->{NAME}));
		foreach my $elem (@{$part->{PUBLIC_DEPENDENCIES}}) {
			$res .= "\t\"$part->{NAME}\" -> \"$elem\" [style=filled]; /* public */\n";
		}
		foreach my $elem (@{$part->{PRIVATE_DEPENDENCIES}}) {
			$res .= "\t\"$part->{NAME}\" -> \"$elem\" [style=dotted]; /* private */\n";
		}
	}

	return $res . "}\n";
}

my $INPUT = {};
smb_build::config_mk::run_config_mk($INPUT, '.', '.', "main.mk");

my $name = "samba4";

my $only;
if (defined($subsys)) {
	my $DEPEND = smb_build::input::check($INPUT, \%config::enabled, 
		"MERGED_OBJ", "SHARED_LIBRARY", "SHARED_LIBRARY");

	die("No such subsystem $subsys") unless (defined($DEPEND->{$subsys}));

	$only = $DEPEND->{$subsys}->{UNIQUE_DEPENDENCIES_ALL};
	push (@$only, "$subsys");

	$name = $subsys;
}

my $fname = "$name-deps.dot";
print __FILE__.": creating $fname\n";
open DOTTY, ">$fname";
print DOTTY generate($INPUT, $only, $name);
close DOTTY;

1;