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 6use strict; 7use lib 'build'; 8use smb_build::config_mk; 9 10my $subsys = shift @ARGV; 11 12sub contains($$) 13{ 14 my ($haystack,$needle) = @_; 15 foreach (@$haystack) { 16 return 1 if ($_ eq $needle); 17 } 18 return 0; 19} 20 21sub 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 39my $INPUT = {}; 40smb_build::config_mk::run_config_mk($INPUT, '.', '.', "main.mk"); 41 42my $name = "samba4"; 43 44my $only; 45if (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 57my $fname = "$name-deps.dot"; 58print __FILE__.": creating $fname\n"; 59open DOTTY, ">$fname"; 60print DOTTY generate($INPUT, $only, $name); 61close DOTTY; 62 631; 64