#!/usr/bin/perl -w

# $Header: /raid/cvsroot/rt/tools/testdeps,v 1.4 2001/12/14 23:29:47 jesse Exp $

# Copyright 2000 Jesse Vincent <jesse@fsck.com>
# Distributed under the GNU General Public License
# 

#
# 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;

use vars qw($mode $dbd $module @modules);

$mode = shift || print_help();
$dbd = shift || print_help();

@modules = qw(
DBI 1.18
DBIx::DataSource 0.02
DBIx::SearchBuilder 0.48
HTML::Entities 
MLDBM
Net::Domain
Net::SMTP
Params::Validate 0.02
HTML::Mason 1.02
CGI::Cookie 1.20
Apache::Cookie
Apache::Session 1.53
Date::Parse
Date::Format 
MIME::Entity 5.108
Mail::Mailer 1.20
Getopt::Long 2.24
Tie::IxHash 
Text::Wrapper 
Text::Template
File::Spec 0.8
Errno
FreezeThaw
File::Temp 
Log::Dispatch 1.6
);


if ($dbd =~ /mysql/i) {
	push @modules, ('DBD::mysql','2.0416'); 
}
elsif ($dbd =~ /oracle/i) {
	push @modules, ('DBD::Oracle','');
}
elsif ($dbd =~ /pg/i) {
	push @modules, ('DBD::Pg','');
}
use CPAN;

while ($module= shift @modules) {
	my $version = "";
	$version = " ". shift (@modules) . " " if ($modules[0] =~ /^([\d\.]*)$/);
	print "Checking for $module$version";
	eval "use $module$version" ;
	if ($@) {
	&resolve_dependency($module, $version) 
	}
	else {
	print "...found\n";
	}
}

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 CPAN to magically make everything better

DBTYPE is one of:
	oracle, pg, mysql

EOF

exit(0);
}

sub resolve_dependency {
	my $module = shift;
	my $version = shift;
        print "....$module$version not installed.";
    if ($mode =~ /-f/) {
	$module = "DBD::mysql::Install" if ($module =~ /DBD::mysql/);
	
        print "Installing with CPAN...";
        CPAN::install($module);
     }
     print "\n";
	exit(1) if ($mode =~ /-q/);
}	
	
