This commit was manufactured by cvs2svn to create tag 'BEFORE_RT_3_2_2'. BEFORE_RT_3_2_2
authorcvs2git <cvs2git>
Thu, 2 Dec 2004 10:18:36 +0000 (10:18 +0000)
committercvs2git <cvs2git>
Thu, 2 Dec 2004 10:18:36 +0000 (10:18 +0000)
1  2 
rt/sbin/rt-setup-database
rt/sbin/rt-test-dependencies

diff --cc rt/sbin/rt-setup-database
index 58f882f,1781988..0000000
deleted file mode 100644,100644
+++ /dev/null
@@@ -1,619 -1,624 +1,0 @@@
--#!/usr/bin/perl -w
--# 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
--
--use strict;
--use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item);
--use vars
--  qw(@Groups @Users @ACL @Queues @ScripActions @ScripConditions @Templates @CustomFields @Scrips);
--
--use lib "/opt/rt3/lib";
--
--#This drags in  RT's config.pm
--# We do it in a begin block because RT::Handle needs to know the type to do its
--# inheritance
--use RT;
--use Carp;
--use RT::User;
--use RT::CurrentUser;
--use RT::Template;
--use RT::ScripAction;
--use RT::ACE;
--use RT::Group;
--use RT::User;
--use RT::Queue;
--use RT::ScripCondition;
--use RT::CustomField;
--use RT::Scrip;
--
--RT::LoadConfig();
--use Term::ReadKey;
--use Getopt::Long;
--
--my %args;
--
--GetOptions(
--    \%args,
--    'prompt-for-dba-password', 'force', 'debug',
--    'action=s',                'dba=s', 'dba-password=s', 'datafile=s',
--    'datadir=s'
--);
--
--$| = 1;    #unbuffer that output.
--
--require RT::Handle;
--my $Handle = RT::Handle->new($RT::DatabaseType);
--$Handle->BuildDSN;
--my $dbh;
--
--if ( $args{'prompt-for-dba-password'} ) {
--    $args{'dba-password'} = get_dba_password();
--    chomp( $args{'dba-password'} );
--}
--
--unless ( $args{'action'} ) {
--    help();
--    die;
--}
--if ( $args{'action'} eq 'init' ) {
--    $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} )
--      || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
--    print "Now creating a database for RT.\n";
--    if ($RT::DatabaseType ne 'Oracle' ||
--        $args{'dba'} ne $RT::DatabaseUser) {
--    create_db();
--    } else {
--        print "...skipped as ".$args{'dba'} ." is not " . $RT::DatabaseUser . " or we're working with Oracle.\n";
--    }
--
--    $dbh->disconnect;
--    $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
--      || die $DBI::errstr;
--
--    print "Now populating database schema.\n";
--    insert_schema();
--    print "Now inserting database ACLs\n";
--    insert_acl() unless ($RT::DatabaseType eq 'Oracle');
--    print "Now inserting RT core system objects\n";
--    insert_initial_data();
--    print "Now inserting RT data\n";
--    insert_data( $RT::EtcPath . "/initialdata" );
--}
--elsif ( $args{'action'} eq 'drop' ) {
--    unless ( $dbh =
--         DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) )
--    {
--        warn $DBI::errstr;
--        warn "Database doesn't appear to exist. Aborting database drop.";
--        exit(0);
--    }
--    drop_db();
 -}
 -elsif ( $args{'action'} eq 'insert_initial' ) {
 -    insert_initial_data();
--}
--elsif ( $args{'action'} eq 'insert' ) {
--    insert_data( $args{'datafile'} );
--}
--elsif ($args{'action'} eq 'acl') {
--    $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
--      || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
--     insert_acl($args{'datadir'});
--}
--elsif ($args{'action'} eq 'schema') {
--    $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} )
--      || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr";
--        insert_schema($args{'datadir'});
--}
--
--else {
--    print STDERR '$0 called with an invalid --action parameter';
--    exit(-1);
--}
--
--# {{{ sub insert_schema
--sub insert_schema {
--        my $base_path = (shift || $RT::EtcPath);
--    my (@schema);
--    print "Creating database schema.\n";
--
--    if ( -f $base_path . "/schema." . $RT::DatabaseType ) {
--      no warnings 'unopened';
--
--        open( SCHEMA, "<" . $base_path . "/schema." . $RT::DatabaseType );
--        open( SCHEMA_LOCAL, "<" . $RT::LocalEtcPath . "/schema." . $RT::DatabaseType );
--
--        my $statement = "";
--        foreach my $line (<SCHEMA>, ($_ = ';;'), <SCHEMA_LOCAL>) {
--            $line =~ s/\#.*//g;
--            $line =~ s/--.*//g;
--            $statement .= $line;
--            if ( $line =~ /;(\s*)$/ ) {
--                $statement =~ s/;(\s*)$//g;
--                push @schema, $statement;
--                $statement = "";
--            }
--        }
--
--      local $SIG{__WARN__} = sub {};
--      my $is_local = 0; # local/etc/schema needs to be nonfatal. 
--        foreach my $statement (@schema) {
--          if ($statement =~ /^\s*;$/) { $is_local = 1; next; }
--            print STDERR "SQL: $statement\n" if defined $args{'debug'};
--            my $sth = $dbh->prepare($statement) or die $dbh->errstr;
--            unless ( $sth->execute or $is_local ) {
--                die "Problem with statement:\n $statement\n" . $sth->errstr;
--            }
--        }
--
--    }
--    else {
--        die "Couldn't find schema file for " . $RT::DatabaseType . "\n";
--    }
--    print "schema sucessfully inserted\n";
--
--}
--
--# }}}
--
--# {{{ sub drop_db
--sub drop_db {
--    return if ( $RT::DatabaseType eq 'SQLite' );
--    if ( $RT::DatabaseType eq 'Oracle' ) {
--        print <<END;
--
--To delete the tables and sequences of the RT Oracle database by running 
--    \@etc/drop.Oracle 
--through SQLPlus.
--
--END
--        return;
--    } 
--    unless ( $args{'force'} ) {
--        print <<END;
--
--About to drop $RT::DatabaseType database $RT::DatabaseName on $RT::DatabaseHost.
--WARNING: This will erase all data in $RT::DatabaseName.
--
--END
--        exit unless _yesno();
--
--    }
--
--    print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n";
--
--    $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr;
--}
--
--# }}}
--
--# {{{ sub create_db
--sub create_db {
--    print "Creating $RT::DatabaseType database $RT::DatabaseName.\n";
--    if ( $RT::DatabaseType eq 'SQLite' ) {
--        return;
--    }
--    elsif ( $RT::DatabaseType eq 'Pg' ) {
--        $dbh->do("CREATE DATABASE $RT::DatabaseName WITH ENCODING='UNICODE'");
--        if ($DBI::errstr) {
--            $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr;
--        }
--    }
--    elsif ($RT::DatabaseType eq 'Oracle') {
--        insert_acl();
--    }
--    elsif ( $RT::DatabaseType eq 'Informix' ) {
--      $ENV{DB_LOCALE} = 'en_us.utf8';
--        $dbh->do("CREATE DATABASE $RT::DatabaseName WITH BUFFERED LOG");
--    }
--    else {
--        $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr;
--    }
--}
--
--# }}}
--
--sub get_dba_password {
--    print
--"In order to create a new database and grant RT access to that database,\n";
--    print "this script needs to connect to your "
--      . $RT::DatabaseType
--      . " instance on "
--      . $RT::DatabaseHost . " as "
--      . $args{'dba'} . ".\n";
--    print
--"Please specify that user's database password below. If the user has no database\n";
--    print "password, just press return.\n\n";
--    print "Password: ";
--    ReadMode('noecho');
--    my $password = ReadLine(0);
--    ReadMode('normal');
--    return ($password);
--}
--
--# {{{ sub _yesno
--sub _yesno {
--    print "Proceed [y/N]:";
--    my $x = scalar(<STDIN>);
--    $x =~ /^y/i;
--}
--
--# }}}
--
--# {{{ insert_acls
--sub insert_acl {
--
--        my $base_path = (shift || $RT::EtcPath);
--
--    if ( $RT::DatabaseType =~ /^oracle$/i ) {
--        do $base_path . "/acl.Oracle"
--          || die "Couldn't find ACLS for Oracle\n" . $@;
--    }
--    elsif ( $RT::DatabaseType =~ /^pg$/i ) {
--        do $base_path . "/acl.Pg" || die "Couldn't find ACLS for Pg\n" . $@;
--    }
--    elsif ( $RT::DatabaseType =~ /^mysql$/i ) {
--        do $base_path . "/acl.mysql"
--          || die "Couldn't find ACLS for mysql in " . $RT::EtcPath . "\n" . $@;
--    }
--    elsif ( $RT::DatabaseType =~ /^informix$/i ) {
--        do $base_path . "/acl.Informix"
--          || die "Couldn't find ACLS for Informix in " . $RT::EtcPath . "\n" . $@;
--    }
--    elsif ( $RT::DatabaseType =~ /^SQLite$/i ) {
--        return;
--    }
--    else {
--        die "Unknown RT database type";
--    }
--
--    my @acl = acl($dbh);
--    foreach my $statement (@acl) {
--        print STDERR $statement if $args{'debug'};
--        my $sth = $dbh->prepare($statement) or die $dbh->errstr;
--        unless ( $sth->execute ) {
--            die "Problem with statement:\n $statement\n" . $sth->errstr;
--        }
--    }
--}
--
--# }}}
--
--=head2 get_system_dsn
--
--Returns a dsn suitable for database creates and drops
--and user creates and drops
--
--=cut
--
--sub get_system_dsn {
--
--    my $dsn = $Handle->DSN;
--
--    #with mysql, you want to connect sans database to funge things
--    if ( $RT::DatabaseType eq 'mysql' ) {
--        $dsn =~ s/dbname=$RT::DatabaseName//;
--
--        # with postgres, you want to connect to database1
--    }
--    elsif ( $RT::DatabaseType eq 'Pg' ) {
--        $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/;
--    }
--    elsif ( $RT::DatabaseType eq 'Informix' ) {
--      # with Informix, you want to connect sans database:
--      $dsn =~ s/Informix:$RT::DatabaseName/Informix:/;
--    }
--    return $dsn;
--}
--
--sub insert_initial_data {
--
--    RT::InitLogging();
--
--    #connect to the db, for actual RT work
--    require RT::Handle;
--    $RT::Handle = RT::Handle->new();
--    $RT::Handle->Connect();
--
--    #Put together a current user object so we can create a User object
--    my $CurrentUser = new RT::CurrentUser();
--
--    print "Checking for existing system user ($CurrentUser)...";
--    my $test_user = RT::User->new($CurrentUser);
--    $test_user->Load('RT_System');
--    if ( $test_user->id ) {
--        print "found!\n\nYou appear to have a functional RT database.\n"
--          . "Exiting, so as not to clobber your existing data.\n";
--        exit(-1);
--
--    }
--    else {
--        print "not found.  This appears to be a new installation.\n";
--    }
--
--    print "Creating system user...";
--    my $RT_System = new RT::User($CurrentUser);
--
--    my ( $val, $msg ) = $RT_System->_BootstrapCreate(
--        Name     => 'RT_System',
--        RealName => 'The RT System itself',
--        Comments =>
--'Do not delete or modify this user. It is integral to RT\'s internal database structures',
--        Creator => '1' );
--
--    unless ($val) {
--        print "$msg\n";
--        exit(1);
--    }
--    print "done.\n";
--    $RT::Handle->Disconnect();
--
--}
--
--# load some sort of data into the database
--
--sub insert_data {
--    my $datafile = shift;
--
--    #Connect to the database and get RT::SystemUser and RT::Nobody loaded
--    RT::Init;
--
--    my $CurrentUser = RT::CurrentUser->new();
--    $CurrentUser->LoadByName('RT_System');
--
--    if ( $datafile eq $RT::EtcPath . "/initialdata" ) {
--
--        print "Creating Superuser  ACL...";
--
--        my $superuser_ace = RT::ACE->new($CurrentUser);
--        $superuser_ace->_BootstrapCreate(
--                             PrincipalId => ACLEquivGroupId( $CurrentUser->Id ),
--                             PrincipalType => 'Group',
--                             RightName     => 'SuperUser',
--                             ObjectType    => 'RT::System',
--                             ObjectId      => '1' );
--
--    }
--
--    # Slurp in stuff to insert from the datafile. Possible things to go in here:-
--    # @groups, @users, @acl, @queues, @ScripActions, @ScripConditions, @templates
--
--    require $datafile
--      || die "Couldn't find initial data for import\n" . $@;
--
--    if (@Groups) {
--        print "Creating groups...";
--        foreach $item (@Groups) {
--            my $new_entry = RT::Group->new($CurrentUser);
--            my ( $return, $msg ) = $new_entry->_Create(%$item);
--            print "(Error: $msg)" unless ($return);
--            print $return. ".";
--        }
--        print "done.\n";
--    }
--    if (@Users) {
--        print "Creating users...";
--        foreach $item (@Users) {
--            my $new_entry = new RT::User($CurrentUser);
--            my ( $return, $msg ) = $new_entry->Create(%$item);
--            print "(Error: $msg)" unless ($return);
--            print $return. ".";
--        }
--        print "done.\n";
--    }
--    if (@Queues) {
--        print "Creating queues...";
--        for $item (@Queues) {
--            my $new_entry = new RT::Queue($CurrentUser);
--            my ( $return, $msg ) = $new_entry->Create(%$item);
--            print "(Error: $msg)" unless ($return);
--            print $return. ".";
--        }
--        print "done.\n";
--    }
--    if (@ACL) {
--        print "Creating ACL...";
--        for my $item (@ACL) {
--
--          my ($princ, $object);
--
--          # Global rights or Queue rights?
--          if ($item->{'Queue'}) {
--                $object = RT::Queue->new($CurrentUser);
--                $object->Load( $item->{'Queue'} );
--          } else {
--              $object = $RT::System;
--          }
--
--          # Group rights or user rights?
--          if ($item->{'GroupDomain'}) {
--                $princ = RT::Group->new($CurrentUser);
--              if ($item->{'GroupDomain'} eq 'UserDefined') {
--                  $princ->LoadUserDefinedGroup( $item->{'GroupId'} );
--              } elsif ($item->{'GroupDomain'} eq 'SystemInternal') {
--                  $princ->LoadSystemInternalGroup( $item->{'GroupType'} );
--              } elsif ($item->{'GroupDomain'} eq 'RT::Queue-Role' &&
--                       $item->{'Queue'}) {
--                  $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'},
--                                            Queue => $object->id);
--              } else {
--                  $princ->Load( $item->{'GroupId'} );
--              }
--          } else {
--              $princ = RT::User->new($CurrentUser);
--              $princ->Load( $item->{'UserId'} );
--          }
--
--          # Grant it
--          my ( $return, $msg ) = $princ->PrincipalObj->GrantRight(
--                                                     Right => $item->{'Right'},
--                                                     Object => $object );
--
--            if ($return) {
--                print $return. ".";
--            }
--            else {
--                print $msg . ".";
--
--            }
--
--        }
--        print "done.\n";
--    }
--    if (@CustomFields) {
--        print "Creating custom fields...";
--        for $item (@CustomFields) {
--            my $new_entry = new RT::CustomField($CurrentUser);
--            my $values    = $item->{'Values'};
--            delete $item->{'Values'};
--            my $q     = $item->{'Queue'};
--            my $q_obj = RT::Queue->new($CurrentUser);
--            $q_obj->Load($q);
--            if ( $q_obj->Id ) {
--                $item->{'Queue'} = $q_obj->Id;
--            }
--            elsif ( $q == 0 ) {
--                $item->{'Queue'} = 0;
--            }
--            else {
--                print "(Error: Could not find queue " . $q . ")\n"
--                  unless ( $q_obj->Id );
--                next;
--            }
--            my ( $return, $msg ) = $new_entry->Create(%$item);
--
--            foreach my $value ( @{$values} ) {
--                my ( $eval, $emsg ) = $new_entry->AddValue(%$value);
--                print "(Error: $emsg)\n" unless ($eval);
--            }
--
--            print "(Error: $msg)\n" unless ($return);
--            print $return. ".";
--        }
--
--        print "done.\n";
--    }
--
--    if (@ScripActions) {
--        print "Creating ScripActions...";
--
--        for $item (@ScripActions) {
--            my $new_entry = RT::ScripAction->new($CurrentUser);
--            my $return    = $new_entry->Create(%$item);
--            print $return. ".";
--        }
--
--        print "done.\n";
--    }
--
--    if (@ScripConditions) {
--        print "Creating ScripConditions...";
--
--        for $item (@ScripConditions) {
--            my $new_entry = RT::ScripCondition->new($CurrentUser);
--            my $return    = $new_entry->Create(%$item);
--            print $return. ".";
--        }
--
--        print "done.\n";
--    }
--
--    if (@Templates) {
--        print "Creating templates...";
--
--        for $item (@Templates) {
--            my $new_entry = new RT::Template($CurrentUser);
--            my $return    = $new_entry->Create(%$item);
--            print $return. ".";
--        }
--        print "done.\n";
--    }
--    if (@Scrips) {
--        print "Creating scrips...";
--
--        for $item (@Scrips) {
--            my $new_entry = new RT::Scrip($CurrentUser);
--            my ( $return, $msg ) = $new_entry->Create(%$item);
--            if ($return) {
--                print $return. ".";
--            }
--            else {
--                print "(Error: $msg)\n";
--            }
--        }
--        print "done.\n";
--    }
--    $RT::Handle->Disconnect();
--
--}
--
--=head2 ACLEquivGroupId
--
--Given a userid, return that user's acl equivalence group
--
--=cut
--
--sub ACLEquivGroupId {
--    my $username = shift;
--    my $user     = RT::User->new($RT::SystemUser);
--    $user->Load($username);
--    my $equiv_group = RT::Group->new($RT::SystemUser);
--    $equiv_group->LoadACLEquivalenceGroup($user);
--    return ( $equiv_group->Id );
--}
--
--sub help {
--
--    print <<EOF;
--
--$0: Set up RT's database
--
----action        init    Initialize the database
--                drop    Drop the database. 
--                        This will ERASE ALL YOUR DATA
 -                insert_initial 
 -                        Insert RT's core system objects
--                insert  Insert data into RT's database. 
--                        By default, will use RT's installation data.
--                        To use a local or supplementary datafile, specify it
--                        using the '--datafile' option below.
--                        
--                acl     Initialize only the database ACLs
--                        To use a local or supplementary datafile, specify it
--                        using the '--datadir' option below.
--                        
--                schema  Initialize only the database schema
--                        To use a local or supplementary datafile, specify it
--                        using the '--datadir' option below.
--
----datafile /path/to/datafile
----datadir /path/to/              Used to specify a path to find the local
--                                database schema and acls to be installed.
--
--
----dba                           dba's username
----dba-password                  dba's password
----prompt-for-dba-password       Ask for the database administrator's password interactively
--
--
--EOF
--
--}
--
--1;
diff --cc rt/sbin/rt-test-dependencies
index c1591b1,c1591b1..0000000
deleted file mode 100644,100644
+++ /dev/null
@@@ -1,278 -1,278 +1,0 @@@
--#!/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);
--}
--if ($args{'with-MODPERL2'}) {
--    warn_modperl2();
--}
--
--$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 warn_modperl2 {
--    print <<'.';
--        NOTE: mod_perl 2.0 isn't quite ready for prime_time just yet;
--        Best Practical Solutions strongly recommends that sites use
--        Apache 1.3 or FastCGI. If you MUST use mod_perl 2.0 (or 1.99),
--        please read the mailing list archives before asking for help.
--.
--    sleep 5;
--}
--
--
--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 2.27
--DBI 1.37
--Test::Inline
--Class::ReturnValue 0.40
--DBIx::SearchBuilder 0.97
--Text::Template
--File::Spec 0.8
--HTML::Entities 
--Net::Domain
--Log::Dispatch 2.0
--Locale::Maketext 1.06
--Locale::Maketext::Lexicon 0.32
--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 1.3
--Scalar::Util
--.
--
--$deps{'MASON'} = [ _( << '.') ];
--Params::Validate 0.02
--Cache::Cache
--Exception::Class
--HTML::Mason 1.16
--MLDBM
--Errno
--FreezeThaw
--Digest::MD5 2.27
--CGI::Cookie 1.20
--Storable 2.08
--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 2.92
--FCGI
--CGI::Fast 
--.
--
--$deps{'SPEEDYCGI'} = [ _( << '.') ];
--CGI 2.92
--CGI::SpeedyCGI
--.
--
--
--$deps{'MODPERL1'} = [ _( << '.') ];
--CGI 2.92
--Apache::Request
--Apache::DBI 0.92
--.
--
--$deps{'MODPERL2'} = [ _( << '.') ];
--CGI 2.92
--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
--.
--
--print "perl:\n";
--print "\t5.8.0";
--eval {require 5.008};
--if ($@) {
--print "...missing.\n";
--        eval {require 5.006001};
--        if ($@) {
--            print " RT is known to be non-functional on versions of perl older than 5.6.1. Please upgrade to 5.8.0 or newer";
--            die;
--        } else {
--            print " RT is not supported on perl 5.6.1\n";
--        }
--} else {
--        print "...found\n";
--
--}
--
--
--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);
--}