#!@PERL@ # BEGIN LICENSE BLOCK # # Copyright (c) 1996-2003 Jesse Vincent # # (Except where explictly superceded by other copyright notices) # # This work is made available to you under the terms of Version 2 of # the GNU General Public License. A copy of that license should have # been provided with this software, but in any event can be snarfed # from www.gnu.org. # # This work is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # Unless otherwise specified, all modifications, corrections or # extensions to this work which alter its source code become the # property of Best Practical Solutions, LLC when submitted for # inclusion in the work. # # # END LICENSE BLOCK # # This is just a basic script that checks to make sure that all # the modules needed by RT before you can install it. # use strict; no warnings qw(numeric redefine); use Getopt::Long; use CPAN; my %args; my %deps; GetOptions(\%args,'install', 'with-MYSQL', 'with-POSTGRESQL|with-pg|with-pgsql', 'with-SQLITE', 'with-ORACLE', 'with-FASTCGI', 'with-SPEEDYCGI', 'with-MODPERL1', 'with-MODPERL2' ,'with-DEV'); if (!keys %args) { help(); exit(0); } $args{'with-MASON'} = 1; $args{'with-CORE'} = 1; $args{'with-DEV'} =1; $args{'with-CLI'} =1; $args{'with-MAILGATE'} =1; if ($] < 5.007) { $args{'with-I18N-COMPAT'} = 1; } sub help { print <<'.' By default, testdeps determine whether you have installed all the perl modules RT needs to run. --install Install missing modules The following switches will tell the tool to check for specific dependencies --with-mysql Database interface for MySQL --with-postgresql Database interface for PostgreSQL --with-sqlite Database interface and driver for SQLite (unsupported) --with-oracle Database interface for oracle (unsupported) --with-fastcgi Libraries needed to support the fastcgi handler --with-speedycgi Libraries needed to support the speedycgi handler --with-modperl1 Libraries needed to support the modperl 1 handler --with-modperl2 Libraries needed to support the modperl 2 handler --with-dev Tools needed for RT development . } sub _ { map { /(\S+)\s*(\S*)/; $1 => ($2 ? $2 :'') } split ( /\n/, $_[0] ); } $deps{'CORE'} = [ _( << '.') ]; Digest::MD5 DBI 1.18 Test::Inline Class::ReturnValue 0.40 DBIx::SearchBuilder 0.86 Text::Template File::Spec 0.8 HTML::Entities Net::Domain Log::Dispatch 2.0 Locale::Maketext 1.04 Locale::Maketext::Lexicon 0.25 Locale::Maketext::Fuzzy MIME::Entity 5.108 Mail::Mailer 1.57 Net::SMTP Text::Wrapper Time::ParseDate File::Temp Term::ReadKey Text::Autoformat Text::Quoted . $deps{'MASON'} = [ _( << '.') ]; Params::Validate 0.02 Cache::Cache Exception::Class HTML::Mason 1.16 MLDBM Errno FreezeThaw Digest::MD5 CGI::Cookie 1.20 Storable Apache::Session 1.53 . $deps{'MAILGATE'} = [ _( << '.') ]; HTML::TreeBuilder HTML::FormatText Getopt::Long LWP::UserAgent . $deps{'CLI'} = [ _( << '.') ]; Getopt::Long 2.24 . $deps{'DEV'} = [ _( << '.') ]; Regexp::Common Time::HiRes Test::Inline WWW::Mechanize . $deps{'FASTCGI'} = [ _( << '.') ]; CGI FCGI CGI::Fast . $deps{'SPEEDYCGI'} = [ _( << '.') ]; CGI CGI::SpeedyCGI . $deps{'MODPERL1'} = [ _( << '.') ]; CGI Apache::Request Apache::DBI . $deps{'MODPERL2'} = [ _( << '.') ]; CGI 2.89 Apache::DBI . $deps{'I18N-COMPAT'} = [ _( << '.') ]; Text::Iconv Encode::compat 0.04 . $deps{'MYSQL'} = [ _( << '.') ]; DBD::mysql 2.1018 . $deps{'ORACLE'} = [ _( << '.') ]; DBD::Oracle . $deps{'POSTGRESQL'} = [ _( << '.') ]; DBD::Pg . foreach my $type (keys %args) { next unless ($type =~ /^with-(.*?)$/); my $type = $1; print "$type dependencies:\n"; my @deps = (@{$deps{$type}}); while (@deps) { my $module = shift @deps; my $version = shift @deps; my $ret; $ret =test_dep($module, $version); if ($args{'install'} && !$ret) { resolve_dep($module); } } } sub test_dep { my $module = shift; my $version = shift; print "\t$module $version"; eval "use $module $version" ; if ($@) { my $error = $@; $error =~ s/\n(.*)$//s; print "...MISSING\n"; print "\t\t$error\n" if $error =~ /this is only/; return undef; } else { print "...found\n"; return 1; } } sub resolve_dep { my $module = shift; use CPAN; CPAN::Shell->install($module); } sub print_help { print << "EOF"; $0 FLAG DBTYPE $0 is a tool for RT that will tell you if you've got all the modules RT depends on properly installed. Flags: (only one flag is valid for a given run) -quiet will check to see if we've got everything we need and will exit with a return code of (1) if we don't. -warn will tell you what isn't properly installed -fix will use CPANPLUS.pm or CPAN.pm to magically make everything better DBTYPE is one of: oracle, pg, mysql EOF exit(0); }