X-Git-Url: http://git.home-dn.net/?p=manu%2FRT-Extension-WatchedQueues.git;a=blobdiff_plain;f=inc%2FModule%2FInstall%2FRTx.pm;fp=inc%2FModule%2FInstall%2FRTx.pm;h=20a354b32d15bb16923ec7b52be0b84155cbe337;hp=c087b12a58b809dccfd9e6909e6e7016bd5c5294;hb=48e8f74ef6190566955be7a09524b449e936680d;hpb=e1833069d86f0e670e7a4be1cd04a5daa97b2d92 diff --git a/inc/Module/Install/RTx.pm b/inc/Module/Install/RTx.pm index c087b12..20a354b 100644 --- a/inc/Module/Install/RTx.pm +++ b/inc/Module/Install/RTx.pm @@ -8,12 +8,15 @@ no warnings 'once'; use Module::Install::Base; use base 'Module::Install::Base'; -our $VERSION = '0.22'; +our $VERSION = '0.24'; use FindBin; use File::Glob (); use File::Basename (); +my @DIRS = qw(etc lib html bin sbin po var); +my @INDEX_DIRS = qw(lib bin sbin); + sub RTx { my ( $self, $name ) = @_; @@ -60,8 +63,8 @@ sub RTx { $RT::LocalVarPath ||= $RT::VarPath; $RT::LocalPoPath ||= $RT::LocalLexiconPath; $RT::LocalHtmlPath ||= $RT::MasonComponentRoot; + $RT::LocalLibPath ||= "$RT::LocalPath/lib"; - my %path; my $with_subdirs = $ENV{WITH_SUBDIRS}; @ARGV = grep { /WITH_SUBDIRS=(.*)/ ? ( ( $with_subdirs = $1 ), 0 ) : 1 } @ARGV; @@ -69,36 +72,40 @@ sub RTx { my %subdirs; %subdirs = map { $_ => 1 } split( /\s*,\s*/, $with_subdirs ) if defined $with_subdirs; - - foreach (qw(bin etc html po sbin var)) { - next unless -d "$FindBin::Bin/$_"; - next if keys %subdirs and !$subdirs{$_}; - $self->no_index( directory => $_ ); - - no strict 'refs'; - my $varname = "RT::Local" . ucfirst($_) . "Path"; - $path{$_} = ${$varname} || "$RT::LocalPath/$_"; + unless ( keys %subdirs ) { + $subdirs{$_} = 1 foreach grep -d "$FindBin::Bin/$_", @DIRS; } - $path{$_} .= "/$name" for grep $path{$_}, qw(etc po var); - $path{lib} = "$RT::LocalPath/lib" unless keys %subdirs and !$subdirs{'lib'}; - # If we're running on RT 3.8 with plugin support, we really wany # to install libs, mason templates and po files into plugin specific # directories - if ($RT::LocalPluginPath) { - foreach my $path (qw(lib po html etc bin sbin)) { - next unless -d "$FindBin::Bin/$path"; - next if %subdirs and !$subdirs{$path}; - $path{$path} = $RT::LocalPluginPath . "/$original_name/$path"; + my %path; + if ( $RT::LocalPluginPath ) { + die "Because of bugs in RT 3.8.0 this extension can not be installed.\n" + ."Upgrade to RT 3.8.1 or newer.\n" if $RT::VERSION =~ /^3\.8\.0/; + $path{$_} = $RT::LocalPluginPath . "/$original_name/$_" + foreach @DIRS; + } else { + foreach ( @DIRS ) { + no strict 'refs'; + my $varname = "RT::Local" . ucfirst($_) . "Path"; + $path{$_} = ${$varname} || "$RT::LocalPath/$_"; } + + $path{$_} .= "/$name" for grep $path{$_}, qw(etc po var); } - my $args = join( ', ', map "q($_)", %path ); - print "./$_\t=> $path{$_}\n" for sort keys %path; + my %index = map { $_ => 1 } @INDEX_DIRS; + $self->no_index( directory => $_ ) foreach grep !$index{$_}, @DIRS; + + my $args = join ', ', map "q($_)", map { ($_, $path{$_}) } + grep $subdirs{$_}, keys %path; - if ( my @dirs = map { ( -D => $_ ) } grep $path{$_}, qw(bin html sbin) ) { - my @po = map { ( -o => $_ ) } grep -f, + print "./$_\t=> $path{$_}\n" for sort keys %subdirs; + + if ( my @dirs = map { ( -D => $_ ) } grep $subdirs{$_}, qw(bin html sbin) ) { + my @po = map { ( -o => $_ ) } + grep -f, File::Glob::bsd_glob("po/*.po"); $self->postamble(<< ".") if @po; lexicons :: @@ -111,7 +118,7 @@ install :: \t\$(NOECHO) \$(PERL) -MExtUtils::Install -e \"install({$args})\" . - if ( $path{var} and -d $RT::MasonDataDir ) { + if ( $subdirs{var} and -d $RT::MasonDataDir ) { my ( $uid, $gid ) = ( stat($RT::MasonDataDir) )[ 4, 5 ]; $postamble .= << "."; \t\$(NOECHO) chown -R $uid:$gid $path{var} @@ -139,16 +146,17 @@ dropdb :: if ( -e 'etc/initialdata' ) { $has_etc{initialdata}++; } $self->postamble("$postamble\n"); - if ( %subdirs and !$subdirs{'lib'} ) { + unless ( $subdirs{'lib'} ) { $self->makemaker_args( PM => { "" => "" }, ); } else { - $self->makemaker_args( INSTALLSITELIB => "$RT::LocalPath/lib" ); + $self->makemaker_args( INSTALLSITELIB => $path{'lib'} ); + $self->makemaker_args( INSTALLARCHLIB => $path{'lib'} ); } - $self->makemaker_args( INSTALLSITEMAN1DIR => "$RT::LocalPath/man/man1" ); - $self->makemaker_args( INSTALLSITEMAN3DIR => "$RT::LocalPath/man/man3" ); - $self->makemaker_args( INSTALLSITEARCH => "$RT::LocalPath/man" ); - $self->makemaker_args( INSTALLARCHLIB => "$RT::LocalPath/lib" ); + $self->makemaker_args( INSTALLSITEMAN1DIR => "$RT::LocalPath/man/man1" ); + $self->makemaker_args( INSTALLSITEMAN3DIR => "$RT::LocalPath/man/man3" ); + $self->makemaker_args( INSTALLSITEARCH => "$RT::LocalPath/man" ); + if (%has_etc) { $self->load('RTxInitDB'); print "For first-time installation, type 'make initdb'.\n"; @@ -180,4 +188,4 @@ sub RTxInit { __END__ -#line 281 +#line 302