X-Git-Url: http://git.home-dn.net/?p=manu%2FRT-Extension-UserDetails.git;a=blobdiff_plain;f=inc%2FModule%2FInstall%2FRTx.pm;h=ac04c797688c9533929dc41e18460f86f39d667b;hp=20a354b32d15bb16923ec7b52be0b84155cbe337;hb=HEAD;hpb=d271ad465399447b7210831aced9a42f21df682c diff --git a/inc/Module/Install/RTx.pm b/inc/Module/Install/RTx.pm index 20a354b..ac04c79 100644 --- a/inc/Module/Install/RTx.pm +++ b/inc/Module/Install/RTx.pm @@ -8,13 +8,13 @@ no warnings 'once'; use Module::Install::Base; use base 'Module::Install::Base'; -our $VERSION = '0.24'; +our $VERSION = '0.32'; use FindBin; use File::Glob (); use File::Basename (); -my @DIRS = qw(etc lib html bin sbin po var); +my @DIRS = qw(etc lib html static bin sbin po var); my @INDEX_DIRS = qw(lib bin sbin); sub RTx { @@ -42,15 +42,16 @@ sub RTx { $INC{'RT.pm'} = "$RT::LocalPath/lib/RT.pm"; } else { local @INC = ( - @INC, $ENV{RTHOME} ? ( $ENV{RTHOME}, "$ENV{RTHOME}/lib" ) : (), - map { ( "$_/rt3/lib", "$_/lib/rt3", "$_/lib" ) } grep $_, - @prefixes + @INC, + map { ( "$_/rt4/lib", "$_/lib/rt4", "$_/rt3/lib", "$_/lib/rt3", "$_/lib" ) + } grep $_, @prefixes ); until ( eval { require RT; $RT::LocalPath } ) { warn "Cannot find the location of RT.pm that defines \$RT::LocalPath in: @INC\n"; - $_ = $self->prompt("Path to your RT.pm:") or exit; + $_ = $self->prompt("Path to directory containing your RT.pm:") or exit; + $_ =~ s/\/RT\.pm$//; push @INC, $_, "$_/rt3/lib", "$_/lib/rt3", "$_/lib"; } } @@ -59,11 +60,13 @@ sub RTx { my $local_lib_path = "$RT::LocalPath/lib"; print "Using RT configuration from $INC{'RT.pm'}:\n"; unshift @INC, "$RT::LocalPath/lib" if $RT::LocalPath; + unshift @INC, $lib_path; - $RT::LocalVarPath ||= $RT::VarPath; - $RT::LocalPoPath ||= $RT::LocalLexiconPath; - $RT::LocalHtmlPath ||= $RT::MasonComponentRoot; - $RT::LocalLibPath ||= "$RT::LocalPath/lib"; + $RT::LocalVarPath ||= $RT::VarPath; + $RT::LocalPoPath ||= $RT::LocalLexiconPath; + $RT::LocalHtmlPath ||= $RT::MasonComponentRoot; + $RT::LocalStaticPath ||= $RT::StaticPath; + $RT::LocalLibPath ||= "$RT::LocalPath/lib"; my $with_subdirs = $ENV{WITH_SUBDIRS}; @ARGV = grep { /WITH_SUBDIRS=(.*)/ ? ( ( $with_subdirs = $1 ), 0 ) : 1 } @@ -127,23 +130,13 @@ install :: my %has_etc; if ( File::Glob::bsd_glob("$FindBin::Bin/etc/schema.*") ) { - - # got schema, load factory module $has_etc{schema}++; - $self->load('RTxFactory'); - $self->postamble(<< "."); -factory :: -\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxFactory(qw($RTx $name))" - -dropdb :: -\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxFactory(qw($RTx $name drop))" - -. } if ( File::Glob::bsd_glob("$FindBin::Bin/etc/acl.*") ) { $has_etc{acl}++; } if ( -e 'etc/initialdata' ) { $has_etc{initialdata}++; } + if ( -d 'etc/upgrade/' ) { $has_etc{upgrade}++; } $self->postamble("$postamble\n"); unless ( $subdirs{'lib'} ) { @@ -162,30 +155,65 @@ dropdb :: print "For first-time installation, type 'make initdb'.\n"; my $initdb = ''; $initdb .= <<"." if $has_etc{schema}; -\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(schema))" +\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(schema \$(NAME) \$(VERSION)))" . $initdb .= <<"." if $has_etc{acl}; -\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(acl))" +\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(acl \$(NAME) \$(VERSION)))" . $initdb .= <<"." if $has_etc{initialdata}; -\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(insert))" +\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(insert \$(NAME) \$(VERSION)))" . $self->postamble("initdb ::\n$initdb\n"); $self->postamble("initialize-database ::\n$initdb\n"); + if ($has_etc{upgrade}) { + print "To upgrade from a previous version of this extension, use 'make upgrade-database'\n"; + my $upgradedb = qq|\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(upgrade \$(NAME) \$(VERSION)))"\n|; + $self->postamble("upgrade-database ::\n$upgradedb\n"); + $self->postamble("upgradedb ::\n$upgradedb\n"); + } } } -sub RTxInit { - unshift @INC, substr( delete( $INC{'RT.pm'} ), 0, -5 ) if $INC{'RT.pm'}; - require RT; - RT::LoadConfig(); - RT::ConnectToDatabase(); +# stolen from RT::Handle so we work on 3.6 (cmp_versions came in with 3.8) +{ my %word = ( + a => -4, + alpha => -4, + b => -3, + beta => -3, + pre => -2, + rc => -1, + head => 9999, +); +sub cmp_version($$) { + my ($a, $b) = (@_); + my @a = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef } + split /([^0-9]+)/, $a; + my @b = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef } + split /([^0-9]+)/, $b; + @a > @b + ? push @b, (0) x (@a-@b) + : push @a, (0) x (@b-@a); + for ( my $i = 0; $i < @a; $i++ ) { + return $a[$i] <=> $b[$i] if $a[$i] <=> $b[$i]; + } + return 0; +}} +sub requires_rt { + my ($self,$version) = @_; + + # if we're exactly the same version as what we want, silently return + return if ($version eq $RT::VERSION); - die "Cannot load RT" unless $RT::Handle and $RT::DatabaseType; + my @sorted = sort cmp_version $version,$RT::VERSION; + + if ($sorted[-1] eq $version) { + # should we die? + warn "\nWarning: prerequisite RT $version not found. Your installed version of RT ($RT::VERSION) is too old.\n\n"; + } } 1; __END__ -#line 302 +#line 336