X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=Makefile.PL;h=353f3dcf11cfd33039b6f813a6eddb4ffe21fee3;hb=8892919aaa11e8f6681bd55e2e34e878e60c1732;hp=cc49680cdc3c5f37d7c41736f22d7b5acba46980;hpb=d7a09ca020175fa09dcc8ec1645c372872e879ce;p=koha_fer diff --git a/Makefile.PL b/Makefile.PL index cc49680cdc..353f3dcf11 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -178,12 +178,10 @@ Directory for Zebra's data files. Directory for Zebra's UNIX-domain sockets. -=item EXAMPLE_DIR +=item MISC_DIR -Directory for example configuration files. This directory -exists primarily to make it easier to change the -MARC format or language of the active Zebra -indexes. +Directory for for miscellaenous scripts, among other +things the translation toolkit and RSS feed tools. =item SCRIPT_DIR @@ -232,22 +230,22 @@ my $target_map = { './edithelp.pl' => 'INTRANET_CGI_DIR', './etc' => { target => 'KOHA_CONF_DIR', trimdir => -1 }, './etc/zebradb' => { target => 'ZEBRA_CONF_DIR', trimdir => -1 }, - './help.pl' => 'NONE', # FIXME + './help.pl' => 'INTRANET_CGI_DIR', './installer-CPAN.pl' => 'NONE', './installer' => 'INTRANET_CGI_DIR', './koha-tmpl/errors' => {target => 'INTRANET_CGI_DIR', trimdir => 2}, './koha-tmpl/intranet-tmpl' => {target => 'INTRANET_TMPL_DIR', trimdir => -1}, './koha-tmpl/opac-tmpl' => {target => 'OPAC_TMPL_DIR', trimdir => -1}, - './kohaversion.pl' => 'INTRANET_CGI_DIR', # FIXME this may need to be in OPAC_CGI_DIR as well, with an update to C4::Context + './kohaversion.pl' => 'INTRANET_CGI_DIR', './labels' => 'INTRANET_CGI_DIR', './mainpage.pl' => 'INTRANET_CGI_DIR', './Makefile.PL' => 'NONE', './MANIFEST.SKIP' => 'NONE', './members' => 'INTRANET_CGI_DIR', './misc' => { target => 'SCRIPT_DIR', trimdir => -1 }, - './misc/info' => { target => 'DOC_DIR', trimdir => 2 }, - './misc/release notes' => { target => 'DOC_DIR', trimdir => 2 }, - './misc/translator' => { target => 'EXAMPLE_DIR', trimdir => 2 }, + './misc/bin' => { target => 'SCRIPT_DIR', trimdir => -1 }, + './misc/release_notes' => { target => 'DOC_DIR', trimdir => 2 }, + './misc/translator' => { target => 'MISC_DIR', trimdir => 2 }, './misc/installer_devel_notes' => 'NONE', './opac' => 'OPAC_CGI_DIR', './README.txt' => 'NONE', @@ -256,9 +254,10 @@ my $target_map = { './reviews' => 'INTRANET_CGI_DIR', './rewrite-config.PL' => 'NONE', './reviews' => 'INTRANET_CGI_DIR', - './rss' => 'NONE', # FIXME deal with a little later + './rss' => 'MISC_DIR', './serials' => 'INTRANET_CGI_DIR', './skel' => 'NONE', + './skel/var/log/koha' => { target => 'LOG_DIR', trimdir => -1 }, './skel/var/run/koha/zebradb' => { target => 'ZEBRA_RUN_DIR', trimdir => -1 }, './skel/var/lock/koha/zebradb/authorities' => { target => 'ZEBRA_LOCK_DIR', trimdir => 6 }, './skel/var/lib/koha/zebradb/authorities/key' => { target => 'ZEBRA_DATA_DIR', trimdir => 6 }, @@ -274,7 +273,9 @@ my $target_map = { './suggestion' => 'INTRANET_CGI_DIR', './svc' => 'INTRANET_CGI_DIR', './t' => 'NONE', - './tmp' => 'NONE', # FIXME deal with later + './tmp' => 'NONE', # FIXME need to determine whether + # Koha generates any persistent temp files + # that should go in /var/tmp/koha './tools' => 'INTRANET_CGI_DIR', './virtualshelves' => 'INTRANET_CGI_DIR', # ignore files and directories created by the install itself @@ -302,6 +303,30 @@ Koha from a git clone with no fuss). Directory under which most components will go. Default value will vary depending on INSTALL_MODE. +=item DB_TYPE + +Type of DBMS (e.g., mysql or Pg). + +=item DB_HOST + +Name of DBMS server. + +=item DB_PORT + +Port that DBMS server is listening on. + +=item DB_NAME + +Name of the DBMS database for Koha. + +=item DB_USER + +Name of DBMS user account for Koha's database. + +=item DB_PASS + +Pasword of DMBS user account for Koha's database. + =item INSTALL_ZEBRA Whether to install Zebra configuration files and data @@ -316,73 +341,142 @@ Specifies format of MARC records to be indexed by Zebra. Specifies primary language of records that will be indexed by Zebra. +=item ZEBRA_USER + +Internal Zebra user account for the index. + +=item ZEBRA_PASS + +Internal Zebra user account's password. + +=item KOHA_USER + +System user account that will own Koha's files. + +=item KOHA_GROUP + +System group that will own Koha's files. + =back =cut # default configuration options my %config_defaults = ( - 'INSTALL_MODE' => 'standard', - 'INSTALL_BASE' => '/usr/share/koha', 'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'koha', 'DB_USER' => 'kohaadmin', 'DB_PASS' => 'katikoan', 'INSTALL_ZEBRA' => 'yes', + 'INSTALL_SRU' => 'yes', 'ZEBRA_MARC_FORMAT' => 'marc21', 'ZEBRA_LANGUAGE' => 'en', 'ZEBRA_USER' => 'kohauser', 'ZEBRA_PASS' => 'zebrastripes', + 'ZEBRA_SRU_HOST' => 'localhost', + 'ZEBRA_SRU_BIBLIOS_PORT' => '9998', + 'ZEBRA_SRU_AUTHORITIES_PORT' => '9999', + 'KOHA_USER' => 'koha', + 'KOHA_GROUP' => 'koha', ); +# set some default configuratio options based on OS +# more conditions need to be added for other OS's +# this should probably also incorporate usage of Win32::GetOSName() and/or Win32::GetOSVersion() +# to allow for more granular decisions based on which Win32 platform + +warn "Your platform appears to be $^O.\n" if $DEBUG; + +if ( $^O eq 'MSWin32' ) { + # Most Unix2Win32 ports seem to poke everything into the Program Files directory + # this could be changed to put some files (ie. libraries) into system32, etc. + $config_defaults{'INSTALL_MODE'} = 'single'; + $config_defaults{'INSTALL_BASE'} = 'c:/progra~1/koha'; # Use 8.3 names to be safe... +} +elsif ( $^O eq 'cygwin' ) { + # Most Unix2Win32 ports seem to poke everything into the Program Files directory + # this could be changed to put some files (ie. libraries) into system32, etc. + $config_defaults{'INSTALL_MODE'} = 'single'; + $config_defaults{'INSTALL_BASE'} = 'c:/progra~1/koha'; # Use 8.3 names to be safe... +} +else { + $config_defaults{'INSTALL_MODE'} = 'standard'; + $config_defaults{'INSTALL_BASE'} = '/usr/share/koha'; +} + # valid values for certain configuration options my %valid_config_values = ( 'INSTALL_MODE' => { 'standard' => 1, 'single' => 1, 'dev' => 1 }, 'DB_TYPE' => { 'mysql' => 1, 'Pg' => 1 }, 'INSTALL_ZEBRA' => { 'yes' => 1, 'no' => 1 }, + 'INSTALL_SRU' => { 'yes' => 1, 'no' => 1 }, 'ZEBRA_MARC_FORMAT' => { 'marc21' => 1, 'unimarc' => 1 }, # FIXME should generate from contents of distributation 'ZEBRA_LANGUAGE' => { 'en' => 1, 'fr' => 1 }, # FIXME should generate from contents of distribution ); my %config = get_configuration(\%config_defaults, \%valid_config_values); -my %target_directories = get_target_directories(\%config); -display_configuration(\%config, \%target_directories); +my ($target_directories, $skip_directories) = get_target_directories(\%config); +display_configuration(\%config, $target_directories); my $file_map = {}; get_file_map($target_map, $dirtree, $file_map, $config{'INSTALL_ZEBRA'} eq "yes" ? 1: 0); my $pl_files = { 'rewrite-config.PL' => [ 'blib/KOHA_CONF_DIR/koha-conf.xml', - 'blib/KOHA_CONF_DIR/koha-httpd.conf', - ] + 'blib/KOHA_CONF_DIR/koha-httpd.conf' + ], + 'fix-perl-path.PL' => [ # this script ensures the correct shebang line for the platform installed on... + 'blib' + ] }; if ($config{'INSTALL_ZEBRA'} eq "yes") { push @{ $pl_files->{'rewrite-config.PL'} }, ( - 'blib/ZEBRA_CONF_DIR/etc/passwd', - 'blib/ZEBRA_CONF_DIR/zebra-biblios.cfg', - 'blib/ZEBRA_CONF_DIR/zebra-authorities.cfg' + 'blib/ZEBRA_CONF_DIR/etc/passwd', + 'blib/ZEBRA_CONF_DIR/zebra-biblios.cfg', + 'blib/ZEBRA_CONF_DIR/zebra-authorities.cfg', + 'blib/ZEBRA_CONF_DIR/explain-authorities.xml', + 'blib/ZEBRA_CONF_DIR/explain-biblios.xml' + ); + if ($config{'INSTALL_MODE'} ne 'dev') { + push @{ $pl_files->{'rewrite-config.PL'} }, ( + 'blib/SCRIPT_DIR/koha-zebra-ctl.sh', + 'blib/SCRIPT_DIR/koha-zebraqueue-ctl.sh', + ); + } +} + +if ($config{'INSTALL_MODE'} ne "dev") { + push @{ $pl_files->{'rewrite-config.PL'} }, ( + 'blib/PERL_MODULE_DIR/C4/Context.pm', + 'blib/SCRIPT_DIR/kohalib.pl' ); } WriteMakefile( NAME => 'koha', #VERSION => strftime('2.9.%Y%m%d%H',gmtime), - VERSION_FROM => 'C4/Context.pm', + VERSION_FROM => 'kohaversion.pl', ABSTRACT => 'Award-winning integrated library system (ILS) and Web OPAC', AUTHOR => 'Koha Developers ', NO_META => 1, PREREQ_PM => { +# awaiting package maintainer's use of $VERSION +#'Algorithm::CheckDigits' => 0.48, +#'Algorithm::CheckDigits::M43_001' => 0.48, +'Biblio::EndnoteStyle' => 0.05, 'CGI' => 3.15, 'CGI::Carp' => 1.29, 'CGI::Session' => '4.10', -'Class::Factory::Util' => 1.7, +'Class::Factory::Util' => 1.6, 'Class::Accessor' => 0.30, -'DBD::mysql' => 3.0008, +'DBD::mysql' => 4.004, 'DBI' => 1.53, +'Data::ICal' => 0.13, 'Data::Dumper' => 2.121_08, 'Date::Calc' => 5.4, +'Date::ICal' => 1.72, 'Date::Manip' => 5.44, 'Digest::MD5' => 2.36, 'File::Temp' => 0.16, @@ -396,19 +490,24 @@ WriteMakefile( 'LWP::UserAgent' => 2.033, 'Lingua::Stem' => 0.82, 'List::Util' => 1.18, +'List::MoreUtils' => 0.21, 'Locale::Language' => 2.07, 'MARC::Charset' => 0.98, -'MARC::Crosswalk::DublinCore' => 0.03, +'MARC::Crosswalk::DublinCore' => 0.02, 'MARC::File::XML' => 0.88, 'MARC::Record' => 2.00, 'MIME::Base64' => 3.07, 'MIME::QuotedPrint' => 3.07, 'Mail::Sendmail' => 0.79, +'Net::LDAP' => 0.33, +'Net::LDAP::Filter' => 0.14, +'Net::Z3950::ZOOM' => 1.16, 'PDF::API2' => 2.000, 'PDF::API2::Page' => 2.000, 'PDF::API2::Util' => 2.000, 'PDF::Reuse' => 0.33, 'PDF::Reuse::Barcode' => 0.05, +'POE' => 0.9999, 'POSIX' => 1.09, 'Schedule::At' => 1.06, 'Term::ANSIColor' => 1.10, @@ -417,44 +516,29 @@ WriteMakefile( 'Test::More' => 0.62, 'Text::CSV' => 0.01, 'Text::CSV_XS' => 0.32, +'Text::Iconv' => 1.7, 'Text::Wrap' => 2005.082401, 'Time::HiRes' => 1.86, 'Time::localtime' => 1.02, 'Unicode::Normalize' => 0.32, 'XML::Dumper' => 0.81, 'XML::LibXML' => 1.59, +'XML::LibXSLT' => 1.59, 'XML::SAX::ParserFactory' => 1.01, 'XML::Simple' => 2.14, 'XML::RSS' => 1.31, -'ZOOM' => 1.16, +'YAML::Syck' => 0.71, }, # File tree mapping PM => $file_map, # Man pages generated from POD - INSTALLMAN1DIR => File::Spec->catdir($target_directories{'MAN_DIR'}, 'man1'), - INSTALLMAN3DIR => File::Spec->catdir($target_directories{'MAN_DIR'}, 'man3'), - -# CONFIGURE => sub { -# # Ask for options with prompt($question,$default) calls here? -# return { macro => { 'export TEST' => '755' } } -# }, - - PL_FILES => $pl_files, - -# 'opac/getfromintranet.PL' => ['$(INST_LIBDIR)/opac/cgi-bin/detail.pl','$(INST_LIBDIR)/opac/cgi-bin/moredetail.pl','$(INST_LIBDIR)/opac/cgi-bin/search.pl','$(INST_LIBDIR)/opac/cgi-bin/subjectsearch.pl','$(INST_LIBDIR)/opac/cgi-bin/logout.pl'], -# 'misc/koha.conf.PL' => '$(INST_LIBDIR)/../etc/koha.conf', -# 'misc/apache-koha.conf.PL' => '$(INST_LIBDIR)/../etc/apache-koha.conf', -# 'misc/koha.sql.PL' => '$(INST_LIBDIR)/intranet/scripts/koha.sql', -# 'z3950/z3950-daemon-options.PL' => '$(INST_LIBDIR)/intranet/scripts/z3950daemon/z3950-daemon-options', -# # fake target to check permissions -# 'misc/chmod.PL' => '$(INST_LIBDIR)/fake-target' -# } - # need to set ownerships - # need to load koha.sql - # need to link koha-httpd.conf - # need to start z3950-daemon + INSTALLMAN1DIR => File::Spec->catdir($target_directories->{'MAN_DIR'}, 'man1'), + INSTALLMAN3DIR => File::Spec->catdir($target_directories->{'MAN_DIR'}, 'man3'), + + PL_FILES => $pl_files, + ); =head1 FUNCTIONS @@ -646,7 +730,7 @@ be run from the current directory. Configuration directory:); # FIXME - home directory portability consideration apply - $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha-dev" : "/usr/share/koha-dev"; + $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha-dev" : "$defaults->{'INSTALL_BASE'}-dev"; } elsif ($config{'INSTALL_MODE'} eq 'single') { $msg = "\nPlease specify the directory in which to install Koha"; # FIXME -- we're assuming under a 'single' mode install @@ -655,7 +739,8 @@ Configuration directory:); # use File::HomeDir to locate the home directory portably. # This is deferred for now because File::HomeDir is not yet # core. - $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha" : "/usr/share/koha"; + # --we must also keep this portable to the major OS's -fbcit + $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha" : $defaults->{'INSTALL_BASE'}; } else { # must be standard $msg = q( @@ -670,7 +755,38 @@ as the package name in the FHS layout. Base installation directory); } $config{'INSTALL_BASE'} = _get_value('INSTALL_BASE', $msg, $install_base_default, $valid_values); + $config{'INSTALL_BASE'} = File::Spec->rel2abs($config{'INSTALL_BASE'}); + print "INSTALL_BASE=$config{'INSTALL_BASE'}\r\n" if $DEBUG; + if ($config{'INSTALL_MODE'} eq "standard") { + $msg = q( +Since you are using the 'standard' install +mode, you should run 'make install' as root. +However, it is recommended that a non-root +user (on Unix and Linux platforms) have +ownership of Koha's files, including the +Zebra indexes if applicable. + +Please specify a user account. This +user account does not need to exist +right now, but it needs to exist +before you run 'make install'. Please +note that for security reasons, this +user should not be the same as the user +account Apache runs under. + +User account); + $config{'KOHA_USER'} = _get_value('KOHA_USER', $msg, $defaults->{'KOHA_USER'}, $valid_values); + + $msg = q( +Please specify the group that should own +Koha's files. As above, this group need +not exist right now, but should be created +before you run 'make install'. + +Group); + $config{'KOHA_GROUP'} = _get_value('KOHA_GROUP', $msg, $defaults->{'KOHA_GROUP'}, $valid_values); + } $msg = q( Please specify which database engine you will use @@ -757,7 +873,41 @@ Please specify Zebra database user); Please specify the Zebra database password); $config{'ZEBRA_PASS'} = _get_value('ZEBRA_PASS', $msg, $defaults->{'ZEBRA_PASS'}, $valid_values); + $msg = q( +Since you've chosen to use Zebra, you can enable the SRU/ +Z39.50 Server if you so choose, but you must specify a +few configuration options for it. + +Please note that if you choose *NOT* to configure SRU, +koha-conf.xml will still contain some references to SRU +settings. Those references will be ignored by Koha. + +Install the SRU configuration files?); + $msg .= _add_valid_values_disp('INSTALL_SRU', $valid_values); + $config{'INSTALL_SRU'} = _get_value('INSTALL_SRU', $msg, $defaults->{'INSTALL_SRU'}, $valid_values); + + if ($config{'INSTALL_SRU'} eq 'yes') { + $msg = q( +Since you've chosen to configure SRU, you must +specify the host and port(s) that the SRU +Servers (bibliographic and authority) should run on. +); + $msg = q( +SRU Database host?); + $config{'ZEBRA_SRU_HOST'} = _get_value('ZEBRA_SRU_HOST', $msg, $defaults->{'ZEBRA_SRU_HOST'}, $valid_values); + + $msg = q( +SRU port for bibliographic data?); + $config{'ZEBRA_SRU_BIBLIOS_PORT'} = _get_value('ZEBRA_SRU_BIBLIOS_PORT', $msg, $defaults->{'ZEBRA_SRU_BIBLIOS_PORT'}, $valid_values); + + $msg = q( +SRU port for authority data?); + $config{'ZEBRA_SRU_AUTHORITIES_PORT'} = _get_value('ZEBRA_SRU_AUTHORITIES_PORT', $msg, $defaults->{'ZEBRA_SRU_AUTHORITIES_PORT'}, $valid_values); + + } } + + print "\n\n"; return %config; } @@ -778,8 +928,17 @@ sub _get_value { my $default = shift; my $valid_values = shift; + # override default value from environment + if (exists $ENV{$key}) { + $default = $ENV{$key}; + $msg .= " (default from environment)"; + } + my $val = prompt($msg, $default); - while (exists $valid_values->{$key} and not exists $valid_values->{$key}->{$val}) { + + while (exists $valid_values->{$key} and + $val ne $default and + not exists $valid_values->{$key}->{$val}) { my $retry_msg = "Value '$val' is not a valid option.\n"; $retry_msg .= "Please enter a value"; $retry_msg .= _add_valid_values_disp($key, $valid_values); @@ -793,6 +952,10 @@ sub _get_value { Creates a hash mapping from symbols for installation target directories to actual directory paths. +Also returns a hash indicating targets for which +files need not be copied -- this is used for the 'dev' +mode installation, where some files are installed in place. + =cut sub get_target_directories { @@ -804,10 +967,18 @@ sub get_target_directories { # get last component of install base directory # to treat as package name my ($volume, $directories, $file) = File::Spec->splitpath($base, 1); + my @basedir = File::Spec->splitdir($directories); + + # for Win32 we need to prepend the volume to the directory path + if ( $^O eq 'MSWin32' ) { shift @basedir; unshift @basedir, $volume; } + elsif ( $^O eq 'cygwin' ) { shift @basedir; unshift @basedir, 'c:'; } # in a cygwin environment, $volume is returned empty + my $package = pop @basedir; + my %dirmap = (); + my %skipdirs = (); if ($mode eq 'single') { $dirmap{'INTRANET_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'cgi-bin'); $dirmap{'INTRANET_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs', 'intranet-tmpl'); @@ -818,7 +989,7 @@ sub get_target_directories { $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib'); $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc'); $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'zebradb'); - $dirmap{'EXAMPLE_DIR'} = File::Spec->catdir(@basedir, $package, 'example'); + $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man'); $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc'); @@ -829,16 +1000,24 @@ sub get_target_directories { } elsif ($mode eq 'dev') { my $curdir = File::Spec->rel2abs(File::Spec->curdir()); $dirmap{'INTRANET_CGI_DIR'} = File::Spec->catdir($curdir); + $skipdirs{'INTRANET_CGI_DIR'} = 1; $dirmap{'INTRANET_TMPL_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'intranet-tmpl'); - $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'intranet-tmpl'); - $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir($curdir, 'opac'); + $skipdirs{'INTRANET_TMPL_DIR'} = 1; + $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl'); + $skipdirs{'INTRANET_WWW_DIR'} = 1; + $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir($curdir); + $skipdirs{'OPAC_CGI_DIR'} = 1; $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'opac-tmpl'); - $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl', 'opac-tmpl'); + $skipdirs{'OPAC_TMPL_DIR'} = 1; + $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl'); + $skipdirs{'OPAC_WWW_DIR'} = 1; $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir($curdir); + $skipdirs{'PERL_MODULE_DIR'} = 1; $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc'); $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'zebradb'); - $dirmap{'EXAMPLE_DIR'} = File::Spec->catdir(@basedir, $package, 'example'); + $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); + $skipdirs{'SCRIPT_DIR'} = 1; $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man'); $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc'); $dirmap{'ZEBRA_LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock', 'zebradb'); @@ -856,7 +1035,7 @@ sub get_target_directories { $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib'); $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'etc', $package); $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'etc', $package, 'zebradb'); - $dirmap{'EXAMPLE_DIR'} = File::Spec->catdir(@basedir, $package, 'example'); + $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); $dirmap{'MAN_DIR'} = File::Spec->catdir(@basedir, $package, 'man'); $dirmap{'DOC_DIR'} = File::Spec->catdir(@basedir, $package, 'doc'); @@ -866,9 +1045,21 @@ sub get_target_directories { $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb'); } + _get_env_overrides(\%dirmap); _get_argv_overrides(\%dirmap); - return %dirmap; + return \%dirmap, \%skipdirs; +} + +sub _get_env_overrides { + my $dirmap = shift; + + foreach my $key (keys %$dirmap) { + if (exists $ENV{$key}) { + $dirmap->{$key} = $ENV{$key}; + print "Setting $key from environment\n"; + } + } } sub _get_argv_overrides { @@ -901,14 +1092,26 @@ sub display_configuration { print "perl Makefile.PL again. To override one of the target\n"; print "directories, you can do so on the command line like this:\n"; print "\nperl Makefile.PL PERL_MODULE_DIR=/usr/share/perl/5.8\n\n"; + print "You can also set different default values for parameters\n"; + print "or override directory locations by using environment variables.\n"; + print "\nFor example:\n\n"; + print "export DB_USER=my_koha\n"; + print "perl Makefile.PL\n"; + print "\nor\n\n"; + print "DB_USER=my_koha DOC_DIR=/usr/local/info perl Makefile.PL\n\n"; } package MY; +# This will have to be reworked in order to accommodate Win32... + sub test { my $self = shift; my $test = $self->SUPER::test(@_); $test =~ s!\$\(INST_LIB\)!blib/PERL_MODULE_DIR!g; + + # set KOHA_CONF + $test =~ s!\$\(FULLPERLRUN\)!KOHA_CONF=blib/KOHA_CONF_DIR/koha-conf.xml \$(FULLPERLRUN)!g; return $test; } @@ -918,38 +1121,140 @@ sub install { # NOTE: we're *not* doing this: my $install = $self->SUPER::install(@_); # This means that we're completely overriding EU::MM's default # installation and uninstallation targets. - foreach my $key (sort keys %target_directories) { - $install .= qq( -KOHA_INST_$key = blib/$key -KOHA_DEST_$key = $target_directories{$key} -) unless $config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/; - } - $install .= qq( -install :: all install_koha +# If installation is on Win32, we need to do permissions different from *nix + if ( $^O =~ /darwin|linux|cygwin/ ) { # this value needs to be verified for each platform and modified accordingly + foreach my $key (sort keys %$target_directories) { + $install .= qq( +KOHA_INST_$key = blib/$key +KOHA_DEST_$key = $target_directories->{$key} +) unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + $install .= qq( +install :: all install_koha set_koha_ownership set_koha_permissions warn_koha_env_vars \t\$(NOECHO) \$(NOOP) ); - $install .= "install_koha ::\n"; - $install .= "\t\$(NOECHO) umask 022; \$(MOD_INSTALL) \\\n"; - foreach my $key (sort keys %target_directories) { - $install .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n" unless $config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/; + $install .= "install_koha ::\n"; + $install .= "\t\$(NOECHO) umask 022; \$(MOD_INSTALL) \\\n"; + foreach my $key (sort keys %$target_directories) { + $install .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n" + unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + $install .= "\t\t\$(INST_MAN1DIR) \$(DESTINSTALLMAN1DIR) \\\n"; + $install .= "\t\t\$(INST_MAN3DIR) \$(DESTINSTALLMAN3DIR)\n"; + + $install .= "\n"; + $install .= "set_koha_ownership ::\n"; + if ($config{'INSTALL_MODE'} eq 'standard' and $config{'KOHA_USER'} ne "root") { + foreach my $key (sort keys %$target_directories) { + $install .= "\t\$(NOECHO) chown -R $config{'KOHA_USER'}:$config{'KOHA_GROUP'} \$(KOHA_DEST_$key)\n" + unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + } else { + $install .= "\t\t\$(NOECHO) \$(NOOP)\n\n"; + } + + $install .= "\n"; + $install .= "set_koha_permissions ::\n"; + # This is necessary because EU::MM installs files + # as either 0444 or 0555, and we want the owner + # of Koha's files to have write permission by default. + foreach my $key (sort keys %$target_directories) { + $install .= "\t\$(NOECHO) chmod -R u+w \$(KOHA_DEST_$key)\n" + unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + } + elsif ($^O eq 'MSWin32' ) { # On Win32, the install probably needs to be done under the user account koha will be running as... + # We can attempt some creative things with command line utils such as CACLS which allows permission + # management from Win32 cmd.exe, but permissions really only apply to NTFS. + foreach my $key (sort keys %$target_directories) { + $install .= qq( +KOHA_INST_$key = blib/$key +KOHA_DEST_$key = $target_directories->{$key} +) unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + $install .= qq( +install :: all install_koha warn_koha_env_vars +\t\$(NOECHO) \$(NOOP) +); + $install .= "install_koha ::\n"; + $install .= "\t\$(MOD_INSTALL) \\\n"; + foreach my $key (sort keys %$target_directories) { + $install .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n" + unless ($config{'INSTALL_ZEBRA'} ne "yes" and $key =~ /ZEBRA/) or exists $skip_directories->{$key}; + } + } + $install .= "\n"; + + $install .= "warn_koha_env_vars ::\n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + $install .= "\t\$(NOECHO) \$(ECHO) Koha\\'s files have now been installed. \n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + $install .= "\t\$(NOECHO) \$(ECHO) In order to use Koha\\'s command-line batch jobs,\n"; + $install .= "\t\$(NOECHO) \$(ECHO) you should set the following environment variables:\n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + $install .= "\t\$(NOECHO) \$(ECHO) export KOHA_CONF=\$(KOHA_DEST_KOHA_CONF_DIR)/koha-conf.xml\n"; + $install .= "\t\$(NOECHO) \$(ECHO) export PERL5LIB=$target_directories->{'PERL_MODULE_DIR'}\n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + $install .= "\t\$(NOECHO) \$(ECHO) If installing on a Win32 platform, be sure to use:\n"; + $install .= "\t\$(NOECHO) \$(ECHO) 'dmake -x MAXLINELENGTH=300000'\n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + $install .= "\t\$(NOECHO) \$(ECHO) For other post-installation tasks, please consult the README.\n"; + $install .= "\t\$(NOECHO) \$(ECHO)\n"; + + if ($config{'INSTALL_ZEBRA'} eq "yes") { + $install .= _update_zebra_conf_target(); } - $install .= "\t\t\$(INST_MAN1DIR) \$(DESTINSTALLMAN1DIR) \\\n"; - $install .= "\t\t\$(INST_MAN3DIR) \$(DESTINSTALLMAN3DIR)\n"; + return $install; } +=head 2 _update_zebra_conf_target + +Add an installation target for updating +Zebra's configuration files. + +=cut + +sub _update_zebra_conf_target { + + my $target = "\nupdate_zebra_conf ::\n"; + $target .= "\tumask 022; \$(MOD_INSTALL) \\\n"; + $target .= "\t\t\$(KOHA_INST_ZEBRA_CONF_DIR) \$(KOHA_DEST_ZEBRA_CONF_DIR) \n"; + + return $target; +} + sub postamble { # put directory mappings into Makefile # so that Make will export as environment # variables -- this is for the use of # rewrite-confg.PL - my $env = join("\n", map { "export __${_}__ = $target_directories{$_}" } keys %target_directories); - $env .= "\n\n"; - $env .= join("\n", map { "export __${_}__ = $config{$_}" } keys %config); - return "$env\n"; + + # quote '$' in the two password parameters + my %config = %config; + $config{'DB_PASS'} =~ s/\$/\$\$/g; + if ($config{'INSTALL_ZEBRA'} eq "yes") { + $config{'ZEBRA_PASS'} =~ s/\$/\$\$/g; + } + + # Hereagain, we must alter syntax per platform... + if ( $^O eq 'MSWin32' ) { + # NOTE: it is imperative that there be no whitespaces in ENV=value... + my $env = join("\n", map { "__${_}__=$target_directories->{$_}" } keys %$target_directories); + $env .= "\n\n"; + $env .= join("\n", map { "__${_}__=$config{$_}" } keys %config); + return "$env\n"; + } + else { + my $env = join("\n", map { "export __${_}__ := $target_directories->{$_}" } keys %$target_directories); + $env .= "\n\n"; + $env .= join("\n", map { "export __${_}__ := $config{$_}" } keys %config); + return "$env\n"; + } } + __END__ @@ -960,7 +1265,7 @@ ExtUtils::MakeMaker(3) =head1 AUTHORS MJ Ray mjr at phonecoop.coop +Galen Charlton galen.charlton at liblime.com =cut -FIXME: Zebra lang/MARC mapping FIXME: deal with .htaccess