examples: Avoid bashism in perfcount.init.
[Samba/gbeck.git] / source4 / build / smb_build / dot.pl
blobb30c320c6e1fabdde929d74545cbd7d4d860d000
1 #!/usr/bin/perl
2 # Samba4 Dependency Graph Generator
3 # (C) 2004-2005 Jelmer Vernooij <jelmer@samba.org>
4 # Published under the GNU GPL
6 use strict;
7 use lib 'build';
8 use smb_build::config_mk;
10 my $subsys = shift @ARGV;
12 sub contains($$)
14 my ($haystack,$needle) = @_;
15 foreach (@$haystack) {
16 return 1 if ($_ eq $needle);
18 return 0;
21 sub generate($$$)
23 my ($depend,$only,$name) = @_;
24 my $res = "digraph $name {\n";
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";
31 foreach my $elem (@{$part->{PRIVATE_DEPENDENCIES}}) {
32 $res .= "\t\"$part->{NAME}\" -> \"$elem\" [style=dotted]; /* private */\n";
36 return $res . "}\n";
39 my $INPUT = {};
40 smb_build::config_mk::run_config_mk($INPUT, '.', '.', "main.mk");
42 my $name = "samba4";
44 my $only;
45 if (defined($subsys)) {
46 my $DEPEND = smb_build::input::check($INPUT, \%config::enabled,
47 "MERGED_OBJ", "SHARED_LIBRARY", "SHARED_LIBRARY");
49 die("No such subsystem $subsys") unless (defined($DEPEND->{$subsys}));
51 $only = $DEPEND->{$subsys}->{UNIQUE_DEPENDENCIES_ALL};
52 push (@$only, "$subsys");
54 $name = $subsys;
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;