import of rt 3.0.4
[freeside.git] / rt / sbin / rt-test-dependencies
diff --git a/rt/sbin/rt-test-dependencies b/rt/sbin/rt-test-dependencies
new file mode 100644 (file)
index 0000000..637d33a
--- /dev/null
@@ -0,0 +1,246 @@
+#!/usr/bin/perl
+# BEGIN LICENSE BLOCK
+# 
+# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+# 
+# (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);
+}