#!/usr/bin/perl -w ############################################################### # AutoDIA - Automatic Dia XML. (C)Copyright 2001 A Trevena # # # # AutoDIA comes with ABSOLUTELY NO WARRANTY; see COPYING file # # This is free software, and you are welcome to redistribute # # it under certain conditions; see COPYING file for details # ############################################################### use strict; use Getopt::Std; use Data::Dumper; use File::Find; use Autodia; my $handler; my $language_handlers = Autodia->getHandlers(); my %language_handlers = %$language_handlers; # get configuration from command line my %args=(); getopts("KkFCsSDOmMaArhHi:o:p:d:t:l:zZvVU:P:",\%args); my %config = %{get_config(\@ARGV,\%args)}; print "\n\nAutoDia - version ".$Autodia::VERSION."(c) Copyright 2003 A Trevena\n\n" unless ( $config{silent} ); # create new diagram print "using language : ", $config{language}, "\n" unless ( $config{silent} ); if (defined $language_handlers{lc($config{language})}) { my $handler_module = $language_handlers{lc($config{language})}; eval "require $handler_module" or die "can't run $handler_module : $! : $@\n"; print "\n..using $handler_module\n" unless ( $config{silent} ); $handler = "$handler_module"->new(\%config); } else { print "language " , $config{language} , "not supported!"; print " supported languages are : \n"; foreach my $language (keys %language_handlers) { print "\t$language\n"; } die "..quiting\n"; } $handler->process(); $handler->output() unless ($config{singlefile}); print "complete. (processed ", scalar(@{$config{filenames}}), " files)\n\n" unless ( $config{silent} ); #################################################################### sub get_config { my @ARGV = @{shift()}; my %args = %{shift()}; if (defined $args{'V'}) { print "\n\nAutoDia - version ".$Autodia::VERSION."(c) copyright 2003 A Trevena\n\n"; exit; } $args{'i'} =~ s/\"// if defined $args{'i'}; $args{'d'} =~ s/\"// if defined $args{'d'}; $args{'l'} ||= 'perl'; if ($args{'h'}) { print_instructions(); exit; } my %config = ( args => \%args); my @filenames = (); $config{skip_superclasses} = (defined $args{'k'}) ? 1 : 0; $config{skip_packages} = (defined $args{'K'}) ? 1 : 0; $config{graphviz} = (defined $args{'z'}) ? 1 : 0; $config{language} = $args{'l'}; $config{silent} = (defined $args{'S'}) ? 1 : 0; $config{springgraph} = (defined $args{'Z'}) ? 1 : 0; $config{vcg} = (defined $args{'v'}) ? 1 : 0; $config{singlefile} = (defined $args{'F'}) ? 1 : 0; $config{skipcvs} = (defined $args{'C'}) ? 1 : 0; $config{username} = (defined $args{'U'}) ? $args{'U'} : "root"; $config{password} = (defined $args{'P'}) ? $args{'P'} : ""; $config{name} = (defined $args{n}) ? 1 : 0; $config{methods} = 1; $config{attributes} = 1; $config{public} = (defined $args{'H'}) ? 1 : 0; if ( $args{'m'} || $args{'A'}) { $config{attributes} = 0; } if ( $args{'M'} || $args{'a'}) { $config{methods} = 0; } Autodia->setConfig(\%config); my %file_extensions = %{Autodia->getPattern()}; my $inputpath = ""; if (defined $args{'p'}) { $inputpath = $args{'p'}; unless ($inputpath =~ m/\/$/) { $inputpath .= "/"; } } if ($config{name}) { die "$config{language} does not support finding files by packagename" unless ($language_handlers{lc($config{language})}->can('find_files_by_packagename')); @filenames = find_files_by_packagename (\%config,\%args); } else { if (defined $args{'i'}) { my $last; if ($args{l} =~ /^dbi$/i) { $filenames[0] = $args{'i'}; warn "have file : $filenames[0]\n"; } else { foreach my $filename ( split(" ",$args{'i'}) ) { unless ( -f $filename ) { if ($last) { $filename = "$last $filename"; unless (-f $filename) { warn "cannot find $filename .. ignoring\n"; $last = $filename; next; } } else { $last = $filename; warn "cannot find $filename .. ignoring\n"; next; } } undef $last; push(@filenames,$filename); } } } if (defined $args{'d'}) { print "using directory : " , $args{'d'}, "\n" unless ( $config{silent} ); my @dirs = split(" ",$args{'d'}); if (defined $args{'r'}) { print "recursively searching files..\n" unless ( $config{silent} ); find ( { wanted => sub { unless (-d) { my $regex = $file_extensions{regex}; push @filenames, $File::Find::name if ($File::Find::name =~ m/$regex/); } }, preprocess => sub { my @return; foreach (@_) { push(@return,$_) unless (m/^.*\/?(CVS|RCS)$/ && $config{skipcvs}); } return @return; }, }, @dirs ); } else { my @wildcards = @{$file_extensions{wildcards}}; print "searching files using wildcards : @wildcards \n" unless ( $config{silent} ); foreach my $directory (@dirs) { if ($directory =~ m/^(CVS|RCS)/ and $config{skipcvs}) { warn "skipping $directory\n" unless ( $config{silent} ); next; } print "searching $directory\n" unless ( $config{silent} ); $directory =~ s|(.*)\/$|$1|; foreach my $wildcard (@wildcards) { print "$wildcard" unless ( $config{silent} ); print " .. " , <$directory/*.$wildcard>, " \n"; push @filenames, <$directory/*.$wildcard>; } } } } } $config{inputpath} = $inputpath; unless (defined $args{'d'} || $args{'i'} || $args{'p'}) { if (@ARGV) { @filenames = @ARGV; } else { print_instructions(); exit; } } $config{filenames} = \@filenames; $config{use_stdout} = (defined $args{'O'}) ? 1 : 0; $config{templatefile} = (defined $args{'t'}) ? $args{'t'} : undef; $config{outputfile} = (defined $args{'o'}) ? $args{'o'} : "autodia.out.xml"; $config{no_deps} = (defined $args{'D'}) ? 1 : 0; $config{sort} = (defined $args{'s'}) ? 1 : 0; return \%config; } sub print_instructions { print "AutoDia - Automatic Dia XML. Copyright 2001 A Trevena\n\n"; print < =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =item c =item C =item C =item C =item C =item C =item C =item C =item C =item C =item C =cut ############################################################################## ##############################################################################