From 50d1acb3deb7d96978f9222b843621cac72a284b Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 17 Feb 2025 17:38:40 +0000 Subject: [PATCH] Bug 39149: Tidy .PL files This patch is the result of running: ```shell perl misc/devel/tidy.pl *.PL ``` Commiting raised an error about fix-perl-path.PL calling `warn` which I dismiss for the time being. Signed-off-by: Tomas Cohen Arazi Signed-off-by: Victor Grousset/tuxayo Signed-off-by: Katrin Fischer --- Makefile.PL | 1082 ++++++++++++++++++++++++--------------------- fix-perl-path.PL | 62 +-- rewrite-config.PL | 188 ++++---- 3 files changed, 710 insertions(+), 622 deletions(-) diff --git a/Makefile.PL b/Makefile.PL index a5002e0898..f5e0525d44 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -25,7 +25,7 @@ use ExtUtils::MakeMaker; use POSIX; use File::Spec; use Getopt::Long qw/HelpMessage/; -use FindBin; # we need to enforce which C4::Installer::PerlModule is used in case more than one is installed +use FindBin; # we need to enforce which C4::Installer::PerlModule is used in case more than one is installed use lib $FindBin::Bin; @@ -34,12 +34,12 @@ use C4::Installer::PerlModules; my $koha_pm = C4::Installer::PerlModules->new; my $DEBUG = 0; -die "perl 5.10 or later required" unless ($] >= 5.010000); +die "perl 5.10 or later required" unless ( $] >= 5.010000 ); # Hash up directory structure & files beginning with the directory we were called from (should be the base of koha)... my $dirtree = hashdir('.'); -my %result = (); +my %result = (); =head1 NAME @@ -392,20 +392,20 @@ my $target_map = { './virtualshelves' => 'INTRANET_CGI_DIR', # ignore files and directories created by the install itself - './pm_to_blib' => 'NONE', - './blib' => 'NONE', + './pm_to_blib' => 'NONE', + './blib' => 'NONE', '.git-blame-ignore-revs' => 'NONE', - '.prettierrc.js' => 'NONE', - '.sass-lint.yml' => 'NONE', - '.scss-lint.yml' => 'NONE', - 'gulpfile.js' => 'NONE', - 'package.json' => 'NONE', - 'yarn.lock' => 'NONE', - 'cypress.config.ts' => 'NONE', - 'tsconfig.json' => 'NONE', - 'webpack.config.js' => 'NONE', - 'rspack.config.js' => 'NONE', - 'eslint.config.mjs' => 'NONE', + '.prettierrc.js' => 'NONE', + '.sass-lint.yml' => 'NONE', + '.scss-lint.yml' => 'NONE', + 'gulpfile.js' => 'NONE', + 'package.json' => 'NONE', + 'yarn.lock' => 'NONE', + 'cypress.config.ts' => 'NONE', + 'tsconfig.json' => 'NONE', + 'webpack.config.js' => 'NONE', + 'rspack.config.js' => 'NONE', + 'eslint.config.mjs' => 'NONE', }; =head1 CONFIGURATION OPTIONS @@ -511,45 +511,45 @@ Enable debug mode for SMTP (default: no) # default configuration options my %config_defaults = ( - 'DB_TYPE' => 'mysql', - 'DB_HOST' => 'localhost', - 'DB_NAME' => 'koha', - 'DB_USER' => 'kohaadmin', - 'DB_PASS' => 'katikoan', - 'DB_USE_TLS' => 'no', - 'DB_TLS_CA_CERTIFICATE' => '/etc/mysql-ssl/server-ca.pem', - 'DB_TLS_CLIENT_CERTIFICATE' => '/etc/mysql-ssl/client-cert.pem', - 'DB_TLS_CLIENT_KEY' => '/etc/mysql-ssl/client-key.pem', - 'INSTALL_SRU' => 'yes', - 'ZEBRA_MARC_FORMAT' => 'marc21', - 'ZEBRA_LANGUAGE' => 'en', - 'ZEBRA_TOKENIZER' => 'chr', - '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', - 'MERGE_SERVER_HOST' => 'localhost', - 'MERGE_SERVER_PORT' => '11001', - 'RUN_DATABASE_TESTS' => 'no', - 'PATH_TO_ZEBRA' => '', - 'USE_MEMCACHED' => 'yes', - 'MEMCACHED_SERVERS' => '127.0.0.1:11211', - 'MEMCACHED_NAMESPACE' => 'KOHA', - 'TEMPLATE_CACHE_DIR' => '/tmp/koha', - 'USE_ELASTICSEARCH' => 'no', - 'ELASTICSEARCH_SERVERS' => 'localhost:9200', - 'ELASTICSEARCH_INDEX' => 'koha', - 'FONT_DIR' => '/usr/share/fonts/truetype/dejavu', - 'SMTP_HOST' => 'localhost', - 'SMTP_PORT' => '25', - 'SMTP_TIMEOUT' => '120', - 'SMTP_SSL_MODE' => 'disabled', - 'SMTP_USER_NAME' => '', - 'SMTP_PASSWORD' => '', - 'SMTP_DEBUG' => 'no', + 'DB_TYPE' => 'mysql', + 'DB_HOST' => 'localhost', + 'DB_NAME' => 'koha', + 'DB_USER' => 'kohaadmin', + 'DB_PASS' => 'katikoan', + 'DB_USE_TLS' => 'no', + 'DB_TLS_CA_CERTIFICATE' => '/etc/mysql-ssl/server-ca.pem', + 'DB_TLS_CLIENT_CERTIFICATE' => '/etc/mysql-ssl/client-cert.pem', + 'DB_TLS_CLIENT_KEY' => '/etc/mysql-ssl/client-key.pem', + 'INSTALL_SRU' => 'yes', + 'ZEBRA_MARC_FORMAT' => 'marc21', + 'ZEBRA_LANGUAGE' => 'en', + 'ZEBRA_TOKENIZER' => 'chr', + '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', + 'MERGE_SERVER_HOST' => 'localhost', + 'MERGE_SERVER_PORT' => '11001', + 'RUN_DATABASE_TESTS' => 'no', + 'PATH_TO_ZEBRA' => '', + 'USE_MEMCACHED' => 'yes', + 'MEMCACHED_SERVERS' => '127.0.0.1:11211', + 'MEMCACHED_NAMESPACE' => 'KOHA', + 'TEMPLATE_CACHE_DIR' => '/tmp/koha', + 'USE_ELASTICSEARCH' => 'no', + 'ELASTICSEARCH_SERVERS' => 'localhost:9200', + 'ELASTICSEARCH_INDEX' => 'koha', + 'FONT_DIR' => '/usr/share/fonts/truetype/dejavu', + 'SMTP_HOST' => 'localhost', + 'SMTP_PORT' => '25', + 'SMTP_TIMEOUT' => '120', + 'SMTP_SSL_MODE' => 'disabled', + 'SMTP_USER_NAME' => '', + 'SMTP_PASSWORD' => '', + 'SMTP_DEBUG' => 'no', ); # set some default configuration options based on OS @@ -558,64 +558,65 @@ my %config_defaults = ( warn "Your platform appears to be $^O.\n" if $DEBUG; if ( $^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'; + + # 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 }, - 'DB_USE_TLS' => {'yes', 'no'}, - 'INSTALL_SRU' => { 'yes' => 1, 'no' => 1 }, - 'ZEBRA_MARC_FORMAT' => { 'marc21' => 1, 'unimarc' => 1 }, # FIXME should generate from contents of distributation - 'ZEBRA_LANGUAGE' => { 'cs' => 1, 'el' => 1, 'en' => 1, 'es' => 1, 'fr' => 1, 'nb' => 1, 'ru' => 1, 'uk' => 1 }, # FIXME should generate from contents of distribution - 'ZEBRA_TOKENIZER' => { chr => 1, icu => 1 }, - 'RUN_DATABASE_TESTS' => { 'yes' => 1, 'no' => 1 }, - 'USE_MEMCACHED' => { 'yes' => 1, 'no' => 1 }, - 'USE_ELASTICSEARCH' => { 'yes' => 1, 'no' => 1 }, - 'SMTP_SSL_MODE' => { 'disabled' => 1, 'ssl' => 1, 'starttls' => 1 }, - 'SMTP_DEBUG' => { 'yes' => 1, 'no' => 1 }, + 'INSTALL_MODE' => { 'standard' => 1, 'single' => 1, 'dev' => 1 }, + 'DB_TYPE' => { 'mysql' => 1, 'Pg' => 1 }, + 'DB_USE_TLS' => { 'yes', 'no' }, + 'INSTALL_SRU' => { 'yes' => 1, 'no' => 1 }, + 'ZEBRA_MARC_FORMAT' => { 'marc21' => 1, 'unimarc' => 1 }, # FIXME should generate from contents of distributation + 'ZEBRA_LANGUAGE' => { 'cs' => 1, 'el' => 1, 'en' => 1, 'es' => 1, 'fr' => 1, 'nb' => 1, 'ru' => 1, 'uk' => 1 } + , # FIXME should generate from contents of distribution + 'ZEBRA_TOKENIZER' => { chr => 1, icu => 1 }, + 'RUN_DATABASE_TESTS' => { 'yes' => 1, 'no' => 1 }, + 'USE_MEMCACHED' => { 'yes' => 1, 'no' => 1 }, + 'USE_ELASTICSEARCH' => { 'yes' => 1, 'no' => 1 }, + 'SMTP_SSL_MODE' => { 'disabled' => 1, 'ssl' => 1, 'starttls' => 1 }, + 'SMTP_DEBUG' => { 'yes' => 1, 'no' => 1 }, ); # get settings from command-line -my $koha_install_log = ""; +my $koha_install_log = ""; my $cli_koha_install_mode = ""; -my $cli_koha_db_type = ""; -my $cli_koha_db_host = ""; -my $cli_koha_db_port = ""; -my $cli_koha_db_name = ""; -my $cli_koha_db_user = ""; -my $cli_koha_db_pass = ""; +my $cli_koha_db_type = ""; +my $cli_koha_db_host = ""; +my $cli_koha_db_port = ""; +my $cli_koha_db_name = ""; +my $cli_koha_db_user = ""; +my $cli_koha_db_pass = ""; my $cli_zebra_marc_format = ""; -my $cli_zebra_language = "", -my $cli_zebra_tokenizer = ""; -my $cli_zebra_user = ""; -my $cli_zebra_pass = ""; -my $cli_zebra_sru_host = ""; -my $cli_zebra_sru_bib_port = ""; -my $cli_zebra_sru_auth_port = ""; -my $cli_koha_user = ""; -my $cli_koha_group = ""; -my $cli_koha_install_sru = ""; -my $cli_koha_use_memcached = ""; -my $cli_koha_font_dir = ""; +my $cli_zebra_language = "", + my $cli_zebra_tokenizer = ""; +my $cli_zebra_user = ""; +my $cli_zebra_pass = ""; +my $cli_zebra_sru_host = ""; +my $cli_zebra_sru_bib_port = ""; +my $cli_zebra_sru_auth_port = ""; +my $cli_koha_user = ""; +my $cli_koha_group = ""; +my $cli_koha_install_sru = ""; +my $cli_koha_use_memcached = ""; +my $cli_koha_font_dir = ""; my $cli_koha_run_database_tests = ""; -my $cli_koha_install_base = ""; +my $cli_koha_install_base = ""; my $cli_koha_template_cache_dir = ""; -my $cli_smtp_host = ""; -my $cli_smtp_port = ""; -my $cli_smtp_timeout = ""; -my $cli_smtp_ssl_mode = ""; -my $cli_smtp_user_name = ""; -my $cli_smtp_password = ""; -my $cli_smtp_debug = ""; +my $cli_smtp_host = ""; +my $cli_smtp_port = ""; +my $cli_smtp_timeout = ""; +my $cli_smtp_ssl_mode = ""; +my $cli_smtp_user_name = ""; +my $cli_smtp_password = ""; +my $cli_smtp_debug = ""; Getopt::Long::Configure('pass_through'); my $results = GetOptions( @@ -654,51 +655,56 @@ my $results = GetOptions( ) or HelpMessage(1); my %install_log_values = (); -if ($koha_install_log ne "") { - get_install_log_values($koha_install_log, \%install_log_values); +if ( $koha_install_log ne "" ) { + get_install_log_values( $koha_install_log, \%install_log_values ); } else { + # Try to set install_log_values for provided values; - get_cli_values(\%install_log_values); + get_cli_values( \%install_log_values ); } -my %config = get_configuration(\%config_defaults, \%valid_config_values, \%install_log_values); -my ($target_directories, $skip_directories) = get_target_directories(\%config); -display_configuration(\%config, $target_directories); +my %config = get_configuration( \%config_defaults, \%valid_config_values, \%install_log_values ); +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); +get_file_map( $target_map, $dirtree, $file_map ); #NOTE: List files generated by build-resources.PL, so that they're copied into blib for installation #INTRANET_TMPL_DIR -$file_map->{'koha-tmpl/intranet-tmpl/prog/css/calendar.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/calendar.css'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/css/holds.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/holds.css'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/css/installer.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/installer.css'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/css/mainpage.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/mainpage.css'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/css/calendar.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/calendar.css'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/css/holds.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/holds.css'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/css/installer.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/installer.css'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/css/mainpage.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/mainpage.css'; $file_map->{'koha-tmpl/intranet-tmpl/prog/css/staff-global.css'} = 'blib/INTRANET_TMPL_DIR/prog/css/staff-global.css'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/erm.js'} = 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/erm.js'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/preservation.js'} = 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/preservation.js'; -$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/admin/record_sources.js'} = 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/admin/record_sources.js'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/erm.js'} = 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/erm.js'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/preservation.js'} = + 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/preservation.js'; +$file_map->{'koha-tmpl/intranet-tmpl/prog/js/vue/dist/admin/record_sources.js'} = + 'blib/INTRANET_TMPL_DIR/prog/js/vue/dist/admin/record_sources.js'; + #OPAC_TMPL_DIR -$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/opac.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/opac.css'; -$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/opac-rtl.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/opac-rtl.css'; -$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/print.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/print.css'; +$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/opac.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/opac.css'; +$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/opac-rtl.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/opac-rtl.css'; +$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/print.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/print.css'; $file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/print-rtl.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/print-rtl.css'; -$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/sco.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/sco.css'; -$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/sco-rtl.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/sco-rtl.css'; +$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/sco.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/sco.css'; +$file_map->{'koha-tmpl/opac-tmpl/bootstrap/css/sco-rtl.css'} = 'blib/OPAC_TMPL_DIR/bootstrap/css/sco-rtl.css'; + #API_CGI_DIR $file_map->{'api/v1/swagger/swagger_bundle.json'} = 'blib/API_CGI_DIR/v1/swagger/swagger_bundle.json'; my $pl_files = { - 'rewrite-config.PL' => [ - 'blib/KOHA_CONF_DIR/koha-conf.xml', - 'blib/KOHA_CONF_DIR/koha-httpd.conf', - 'blib/KOHA_CONF_DIR/log4perl.conf', - 'blib/KOHA_CONF_DIR/koha-worker.service', - 'blib/ZEBRA_CONF_DIR/etc/default.idx', - 'blib/MISC_DIR/koha-install-log' - ], - 'fix-perl-path.PL' => [ # this script ensures the correct shebang line for the platform installed on... - 'blib' - ], + 'rewrite-config.PL' => [ + 'blib/KOHA_CONF_DIR/koha-conf.xml', + 'blib/KOHA_CONF_DIR/koha-httpd.conf', + 'blib/KOHA_CONF_DIR/log4perl.conf', + 'blib/KOHA_CONF_DIR/koha-worker.service', + 'blib/ZEBRA_CONF_DIR/etc/default.idx', + 'blib/MISC_DIR/koha-install-log' + ], + 'fix-perl-path.PL' => [ # this script ensures the correct shebang line for the platform installed on... + 'blib' + ], }; push @{ $pl_files->{'rewrite-config.PL'} }, ( @@ -713,56 +719,59 @@ push @{ $pl_files->{'rewrite-config.PL'} }, ( push @{ $pl_files->{'rewrite-config.PL'} }, ( 'blib/SCRIPT_DIR/koha-zebra-ctl.sh', ); -$config{'ZEBRA_AUTH_CFG'} = 'zebra-authorities-dom.cfg'; -$config{'ZEBRA_BIB_CFG'} = 'zebra-biblios-dom.cfg'; +$config{'ZEBRA_AUTH_CFG'} = 'zebra-authorities-dom.cfg'; +$config{'ZEBRA_BIB_CFG'} = 'zebra-biblios-dom.cfg'; $config{'AUTH_RETRIEVAL_CFG'} = 'retrieval-info-auth-dom.xml'; $config{'BIB_RETRIEVAL_CFG'} = 'retrieval-info-bib-dom.xml'; -if ($config{'INSTALL_MODE'} ne "dev") { +if ( $config{'INSTALL_MODE'} ne "dev" ) { push @{ $pl_files->{'rewrite-config.PL'} }, ( 'blib/PERL_MODULE_DIR/C4/Context.pm', ); } -$config{ZEBRA_TOKENIZER_STMT} = $config{ZEBRA_TOKENIZER} eq 'icu' +$config{ZEBRA_TOKENIZER_STMT} = + $config{ZEBRA_TOKENIZER} eq 'icu' ? 'icuchain words-icu.xml' : 'charmap word-phrase-utf.chr'; -$config{ZEBRA_PTOKENIZER_STMT} = $config{ZEBRA_TOKENIZER} eq 'icu' +$config{ZEBRA_PTOKENIZER_STMT} = + $config{ZEBRA_TOKENIZER} eq 'icu' ? 'icuchain phrases-icu.xml' : 'charmap word-phrase-utf.chr'; my %test_suite_override_dirs = ( KOHA_CONF_DIR => ['etc'], - ZEBRA_CONF_DIR => ['etc', 'zebradb'], - Z3950_CONF_DIR => ['etc', 'z3950'], - LOCK_DIR => ['var', 'lock'], - LOG_DIR => ['var', 'log'], - BACKUP_DIR => ['var', 'spool'], + ZEBRA_CONF_DIR => [ 'etc', 'zebradb' ], + Z3950_CONF_DIR => [ 'etc', 'z3950' ], + LOCK_DIR => [ 'var', 'lock' ], + LOG_DIR => [ 'var', 'log' ], + BACKUP_DIR => [ 'var', 'spool' ], SCRIPT_DIR => ['bin'], - ZEBRA_LOCK_DIR => ['var', 'lock', 'zebradb'], - ZEBRA_DATA_DIR => ['var', 'lib', 'zebradb'], - ZEBRA_RUN_DIR => ['var', 'run', 'zebradb'], + ZEBRA_LOCK_DIR => [ 'var', 'lock', 'zebradb' ], + ZEBRA_DATA_DIR => [ 'var', 'lib', 'zebradb' ], + ZEBRA_RUN_DIR => [ 'var', 'run', 'zebradb' ], ); WriteMakefile( - NAME => 'koha', - #VERSION => strftime('2.9.%Y%m%d%H',gmtime), - VERSION_FROM => 'kohaversion.pl', - ABSTRACT => 'Award-winning integrated library system (ILS) and Web OPAC', - AUTHOR => 'Koha Contributors ', - NO_META => 1, - PREREQ_PM => $koha_pm->prereq_pm, + NAME => 'koha', - # File tree mapping - PM => $file_map, + #VERSION => strftime('2.9.%Y%m%d%H',gmtime), + VERSION_FROM => 'kohaversion.pl', + ABSTRACT => 'Award-winning integrated library system (ILS) and Web OPAC', + AUTHOR => 'Koha Contributors ', + NO_META => 1, + PREREQ_PM => $koha_pm->prereq_pm, - # Man pages generated from POD - # ExtUtils::MakeMaker already manage $(DESTDIR) - INSTALLMAN1DIR => File::Spec->catdir(_strip_destdir($target_directories->{'MAN_DIR'}), 'man1'), - INSTALLMAN3DIR => File::Spec->catdir(_strip_destdir($target_directories->{'MAN_DIR'}), 'man3'), + # File tree mapping + PM => $file_map, - PL_FILES => $pl_files, + # Man pages generated from POD + # ExtUtils::MakeMaker already manage $(DESTDIR) + INSTALLMAN1DIR => File::Spec->catdir( _strip_destdir( $target_directories->{'MAN_DIR'} ), 'man1' ), + INSTALLMAN3DIR => File::Spec->catdir( _strip_destdir( $target_directories->{'MAN_DIR'} ), 'man3' ), + + PL_FILES => $pl_files, ); =head1 FUNCTIONS @@ -775,15 +784,15 @@ This directory hashing routine was taken from BrowserUK @ http://www.perlmonks.o =cut -sub hashdir{ +sub hashdir { my $dir = shift; opendir my $dh, $dir or die $!; my $tree = {}->{$dir} = {}; - while( my $file = readdir($dh) ) { - next if $file =~ m/^\.{1,2}/ and $file !~ /^\.htaccess/; # .htaccess is a special case - my $path = $dir .'/' . $file; + while ( my $file = readdir($dh) ) { + next if $file =~ m/^\.{1,2}/ and $file !~ /^\.htaccess/; # .htaccess is a special case + my $path = $dir . '/' . $file; $tree->{$file} = hashdir($path), next if -d $path; - push @{$tree->{'.'}}, $file; + push @{ $tree->{'.'} }, $file; } return $tree; } @@ -803,60 +812,64 @@ to its destination value, like this: sub get_file_map { my $target_map = shift; - my $dirtree = shift; - my $file_map = shift; - my $curr_path = @_ ? shift : ['.']; + my $dirtree = shift; + my $file_map = shift; + my $curr_path = @_ ? shift : ['.']; # Traverse the directory tree. # For each file or directory, identify the # most specific match in the target_map - foreach my $dir (sort keys %{ $dirtree }) { - if ($dir eq '.') { + foreach my $dir ( sort keys %{$dirtree} ) { + if ( $dir eq '.' ) { + # deal with files in directory - foreach my $file (sort @{ $dirtree->{$dir} }) { - my $targetdir = undef; + foreach my $file ( sort @{ $dirtree->{$dir} } ) { + my $targetdir = undef; my $matchlevel = undef; + # first, see if there is a match on this specific # file in the target map - my $filepath = join("/", @$curr_path, $file); - if (exists $target_map->{$filepath}) { - $targetdir = $target_map->{$filepath}; + my $filepath = join( "/", @$curr_path, $file ); + if ( exists $target_map->{$filepath} ) { + $targetdir = $target_map->{$filepath}; $matchlevel = scalar(@$curr_path) + 1; } else { + # no match on the specific file; look for # a directory match - for (my $i = scalar(@$curr_path) - 1; $i >= 0; $i--) { - my $dirpath = join("/", @$curr_path[0..$i]); - if (exists $target_map->{$dirpath}) { - $targetdir = $target_map->{$dirpath}; + for ( my $i = scalar(@$curr_path) - 1 ; $i >= 0 ; $i-- ) { + my $dirpath = join( "/", @$curr_path[ 0 .. $i ] ); + if ( exists $target_map->{$dirpath} ) { + $targetdir = $target_map->{$dirpath}; $matchlevel = $i + 1; last; } } } - if (defined $targetdir) { - _add_to_file_map($file_map, $targetdir, $curr_path, $file, $matchlevel); + if ( defined $targetdir ) { + _add_to_file_map( $file_map, $targetdir, $curr_path, $file, $matchlevel ); } else { - my $path = join("/", @$curr_path); + my $path = join( "/", @$curr_path ); print "failed to map: $path/$file\n" if $DEBUG; } } } else { + # dealing with subdirectory push @$curr_path, $dir; - get_file_map($target_map, $dirtree->{$dir}, $file_map, $curr_path); + get_file_map( $target_map, $dirtree->{$dir}, $file_map, $curr_path ); pop @$curr_path; } } } sub _add_to_file_map { - my $file_map = shift; - my $targetdir = shift; - my $curr_path = shift; - my $file = shift; + my $file_map = shift; + my $targetdir = shift; + my $curr_path = shift; + my $file = shift; my $matchlevel = shift; - my $dest_path = @_ ? shift : $curr_path; + my $dest_path = @_ ? shift : $curr_path; # The target can be one of the following: # 1. scalar representing target symbol @@ -865,9 +878,10 @@ sub _add_to_file_map { # Consequently, this routine traverses this structure, # calling itself recursively, until it deals with # all of the scalar target symbols. - if (ref $targetdir eq 'HASH') { + if ( ref $targetdir eq 'HASH' ) { my $subtarget = $targetdir->{target}; - if (exists $targetdir->{trimdir}) { + if ( exists $targetdir->{trimdir} ) { + # if we get here, we've specified that # rather than installing the file to # $(TARGET)/matching/dirs/subdirs/file, @@ -877,28 +891,30 @@ sub _add_to_file_map { # Note that this the only place where # $matchlevel is used. my @new_dest_path = @$dest_path; - if ($targetdir->{trimdir} == -1) { + if ( $targetdir->{trimdir} == -1 ) { splice @new_dest_path, 0, $matchlevel; } else { splice @new_dest_path, 0, $targetdir->{trimdir}; } - _add_to_file_map($file_map, $subtarget, $curr_path, $file, $matchlevel, \@new_dest_path); + _add_to_file_map( $file_map, $subtarget, $curr_path, $file, $matchlevel, \@new_dest_path ); } else { + # actually getting here means that the # target was unnecessarily listed # as a hash, but we'll forgive that - _add_to_file_map($file_map, $subtarget, $curr_path, $file, $matchlevel); + _add_to_file_map( $file_map, $subtarget, $curr_path, $file, $matchlevel ); } - } elsif ($targetdir ne 'NONE' and $targetdir ne '') { - my $source = File::Spec->catfile(@$curr_path, $file); - my $destination = File::Spec->catfile('blib', $targetdir, @$dest_path, $file); + } elsif ( $targetdir ne 'NONE' and $targetdir ne '' ) { + my $source = File::Spec->catfile( @$curr_path, $file ); + my $destination = File::Spec->catfile( 'blib', $targetdir, @$dest_path, $file ); + #print "$source => $destination\n"; # DEBUG # quote spaces in file names # FIXME: this is of questionable portability and # probably depends on user's make recognizing this # quoting syntax -- probably better to remove # spaces and shell metacharacters from all file names - $source =~ s/ /\\ /g; + $source =~ s/ /\\ /g; $destination =~ s/ /\\ /g; $file_map->{$source} = $destination; @@ -913,7 +929,7 @@ Reads values provided on cli for configuration values sub get_cli_values { my $values = shift; - my $map = { + my $map = { INSTALL_MODE => $cli_koha_install_mode, DB_TYPE => $cli_koha_db_type, DB_HOST => $cli_koha_db_host, @@ -943,10 +959,10 @@ sub get_cli_values { SMTP_SSL_MODE => $cli_smtp_ssl_mode, SMTP_USER_NAME => $cli_smtp_user_name, SMTP_PASSWORD => $cli_smtp_password, - SMTP_DEBUG => (defined $cli_smtp_debug) ? ( $cli_smtp_debug ? 'yes' : 'no' ) : $values->{SMTP_DEBUG}, + SMTP_DEBUG => ( defined $cli_smtp_debug ) ? ( $cli_smtp_debug ? 'yes' : 'no' ) : $values->{SMTP_DEBUG}, }; - foreach my $key (keys %{$map}) { - $values->{$key} = $map->{$key} if ($map->{$key}); + foreach my $key ( keys %{$map} ) { + $values->{$key} = $map->{$key} if ( $map->{$key} ); } } @@ -959,7 +975,7 @@ Reads value from the Koha install log specified by sub get_install_log_values { my $install_log = shift; - my $values = shift; + my $values = shift; open my $log, '<', $install_log or die "Cannot open install log $install_log: $!\n"; while (<$log>) { @@ -968,7 +984,7 @@ sub get_install_log_values { next if /^=/; next unless m/=/; s/\s+$//g; - my ($key, $value) = split /=/, $_, 2; + my ( $key, $value ) = split /=/, $_, 2; $values->{$key} = $value; } close $log; @@ -989,12 +1005,12 @@ This prompts the user for various configuration options. =cut sub get_configuration { - my $defaults = shift; - my $valid_values = shift; - my $install_log_values = shift; - my %config = (); + my $defaults = shift; + my $valid_values = shift; + my $install_log_values = shift; + my %config = (); - my $msg = q( + my $msg = q( By default, Koha can be installed in one of three ways: standard: Install files in conformance with the Filesystem @@ -1015,13 +1031,14 @@ dev: Create a set of symbolic links and configuration files to Koha from a git clone. Installation mode); - $msg .= _add_valid_values_disp('INSTALL_MODE', $valid_values); - $config{'INSTALL_MODE'} = _get_value('INSTALL_MODE', $msg, $defaults->{'INSTALL_MODE'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'INSTALL_MODE', $valid_values ); + $config{'INSTALL_MODE'} = + _get_value( 'INSTALL_MODE', $msg, $defaults->{'INSTALL_MODE'}, $valid_values, $install_log_values ); # set message and default value for INSTALL_BASE # depending on value of INSTALL_MODE my $install_base_default = $defaults->{'INSTALL_BASE'}; - if ($config{'INSTALL_MODE'} eq 'dev') { + if ( $config{'INSTALL_MODE'} eq 'dev' ) { $msg = q( Please specify the directory in which to install Koha's active configuration files and (if applicable) the @@ -1029,22 +1046,23 @@ Zebra database. Koha's CGI scripts and templates will be run from the current directory. Configuration directory:); + # FIXME - home directory portability consideration apply - $install_base_default = - $ENV{DESTDIR} - || ( exists $ENV{HOME} ? "$ENV{HOME}/koha-dev" : "$defaults->{'INSTALL_BASE'}-dev" ) - ; - } elsif ($config{'INSTALL_MODE'} eq 'single') { + $install_base_default = $ENV{DESTDIR} + || ( 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 # that user will likely want to install under the home # directory. This is OK in and of itself, but we should # use File::HomeDir to locate the home directory portably. # This is deferred for now because File::HomeDir is not yet # core. - # --we must also keep this portable to the major OS's -fbcit - $install_base_default = (exists $ENV{'HOME'}) ? "$ENV{'HOME'}/koha" : $defaults->{'INSTALL_BASE'}; + # --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( Please specify the directory under which most Koha files @@ -1057,11 +1075,12 @@ as the package name in the FHS layout. Base installation directory); } - $config{'INSTALL_BASE'} = _get_value('INSTALL_BASE', $msg, $install_base_default, $valid_values, $install_log_values); + $config{'INSTALL_BASE'} = + _get_value( 'INSTALL_BASE', $msg, $install_base_default, $valid_values, $install_log_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") { + $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. @@ -1079,7 +1098,8 @@ 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, $install_log_values); + $config{'KOHA_USER'} = + _get_value( 'KOHA_USER', $msg, $defaults->{'KOHA_USER'}, $valid_values, $install_log_values ); $msg = q( Please specify the group that should own @@ -1088,7 +1108,8 @@ 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, $install_log_values); + $config{'KOHA_GROUP'} = + _get_value( 'KOHA_GROUP', $msg, $defaults->{'KOHA_GROUP'}, $valid_values, $install_log_values ); } $msg = q( @@ -1098,8 +1119,8 @@ PostgreSQL; please note that at the moment PostgreSQL support is highly experimental. DBMS to use); - $msg .= _add_valid_values_disp('DB_TYPE', $valid_values); - $config{'DB_TYPE'} = _get_value('DB_TYPE', $msg, $defaults->{'DB_TYPE'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'DB_TYPE', $valid_values ); + $config{'DB_TYPE'} = _get_value( 'DB_TYPE', $msg, $defaults->{'DB_TYPE'}, $valid_values, $install_log_values ); $msg = q( Please specify the name or address of your @@ -1109,49 +1130,59 @@ can be created after running 'make install' and before you try using Koha for the first time. Database server); - $config{'DB_HOST'} = _get_value('DB_HOST', $msg, $defaults->{'DB_HOST'}, $valid_values, $install_log_values); + $config{'DB_HOST'} = _get_value( 'DB_HOST', $msg, $defaults->{'DB_HOST'}, $valid_values, $install_log_values ); $msg = q( Please specify the port used to connect to the DMBS); my $db_port_default = $config{'DB_TYPE'} eq 'mysql' ? '3306' : '5432'; - $config{'DB_PORT'} = _get_value('DB_PORT', $msg, $db_port_default, $valid_values, $install_log_values); + $config{'DB_PORT'} = _get_value( 'DB_PORT', $msg, $db_port_default, $valid_values, $install_log_values ); $msg = q( Please specify the name of the database to be used by Koha); - $config{'DB_NAME'} = _get_value('DB_NAME', $msg, $defaults->{'DB_NAME'}, $valid_values, $install_log_values); - if ($config{'DB_TYPE'} eq 'mysql'){ + $config{'DB_NAME'} = _get_value( 'DB_NAME', $msg, $defaults->{'DB_NAME'}, $valid_values, $install_log_values ); + if ( $config{'DB_TYPE'} eq 'mysql' ) { $msg = q( Please specify whether the connection to MySQL will use TLS ); - $config{'DB_USE_TLS'} = _get_value('DB_USE_TLS', $msg, $defaults->{'DB_USE_TLS'}, $valid_values, $install_log_values); + $config{'DB_USE_TLS'} = + _get_value( 'DB_USE_TLS', $msg, $defaults->{'DB_USE_TLS'}, $valid_values, $install_log_values ); } - if ($config{'DB_USE_TLS'} eq 'yes'){ + if ( $config{'DB_USE_TLS'} eq 'yes' ) { $msg = q( Please enter the path to the CA certificate for TLS ); - $config{'DB_TLS_CA_CERTIFICATE'} = _get_value('DB_TLS_CA_CERTIFICATE', $msg, $defaults->{'DB_TLS_CA_CERTIFICATE'}, $valid_values, $install_log_values); + $config{'DB_TLS_CA_CERTIFICATE'} = _get_value( + 'DB_TLS_CA_CERTIFICATE', $msg, $defaults->{'DB_TLS_CA_CERTIFICATE'}, $valid_values, + $install_log_values + ); $msg = q( Please enter the path to the client certificate for TLS ); - $config{'DB_TLS_CLIENT_CERTIFICATE'} = _get_value('DB_TLS_CLIENT_CERTIFICATE', $msg, $defaults->{'DB_TLS_CLIENT_CERTIFICATE'}, $valid_values, $install_log_values); + $config{'DB_TLS_CLIENT_CERTIFICATE'} = _get_value( + 'DB_TLS_CLIENT_CERTIFICATE', $msg, $defaults->{'DB_TLS_CLIENT_CERTIFICATE'}, $valid_values, + $install_log_values + ); $msg = q( Please enter the path to the client key for TLS ); - $config{'DB_TLS_CLIENT_KEY'} = _get_value('DB_TLS_CLIENT_KEY', $msg, $defaults->{'DB_TLS_CLIENT_KEY'}, $valid_values, $install_log_values); + $config{'DB_TLS_CLIENT_KEY'} = _get_value( + 'DB_TLS_CLIENT_KEY', $msg, $defaults->{'DB_TLS_CLIENT_KEY'}, $valid_values, + $install_log_values + ); } $msg = q( Please specify the user that owns the database to be used by Koha); - $config{'DB_USER'} = _get_value('DB_USER', $msg, $defaults->{'DB_USER'}, $valid_values, $install_log_values); + $config{'DB_USER'} = _get_value( 'DB_USER', $msg, $defaults->{'DB_USER'}, $valid_values, $install_log_values ); $msg = q( Please specify the password of the user that owns the database to be used by Koha); - $config{'DB_PASS'} = _get_value('DB_PASS', $msg, $defaults->{'DB_PASS'}, $valid_values, $install_log_values); + $config{'DB_PASS'} = _get_value( 'DB_PASS', $msg, $defaults->{'DB_PASS'}, $valid_values, $install_log_values ); print q( Koha uses the Zebra search engine for high-performance @@ -1159,7 +1190,7 @@ searching of bibliographic and authority records. Checking to see if you have installed the Zebra software... ); - if (defined(my $zebra_path = find_zebra())) { + if ( defined( my $zebra_path = find_zebra() ) ) { $config{'PATH_TO_ZEBRA'} = $zebra_path; print qq( Found 'zebrasrv' and 'zebraidx' in $zebra_path. @@ -1181,16 +1212,18 @@ Koha provides Zebra configuration files for MARC21, and UNIMARC. MARC format for Zebra indexing); - $msg .= _add_valid_values_disp('ZEBRA_MARC_FORMAT', $valid_values); - $config{'ZEBRA_MARC_FORMAT'} = _get_value('ZEBRA_MARC_FORMAT', $msg, $defaults->{'ZEBRA_MARC_FORMAT'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'ZEBRA_MARC_FORMAT', $valid_values ); + $config{'ZEBRA_MARC_FORMAT'} = + _get_value( 'ZEBRA_MARC_FORMAT', $msg, $defaults->{'ZEBRA_MARC_FORMAT'}, $valid_values, $install_log_values ); $msg = q( Koha supplies Zebra configuration files tuned for searching either English (en) or French (fr) MARC records. Primary language for Zebra indexing); - $msg .= _add_valid_values_disp('ZEBRA_LANGUAGE', $valid_values); - $config{'ZEBRA_LANGUAGE'} = _get_value('ZEBRA_LANGUAGE', $msg, $defaults->{'ZEBRA_LANGUAGE'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'ZEBRA_LANGUAGE', $valid_values ); + $config{'ZEBRA_LANGUAGE'} = + _get_value( 'ZEBRA_LANGUAGE', $msg, $defaults->{'ZEBRA_LANGUAGE'}, $valid_values, $install_log_values ); $msg = q( Zebra has two methods to perform records tokenization @@ -1198,16 +1231,19 @@ and characters normalization: CHR and ICU. ICU is recommended for catalogs containing non-Latin characters.); - $msg .= _add_valid_values_disp('ZEBRA_TOKENIZER', $valid_values); - $config{'ZEBRA_TOKENIZER'} = _get_value('ZEBRA_TOKENIZER', $msg, $defaults->{'ZEBRA_TOKENIZER'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'ZEBRA_TOKENIZER', $valid_values ); + $config{'ZEBRA_TOKENIZER'} = + _get_value( 'ZEBRA_TOKENIZER', $msg, $defaults->{'ZEBRA_TOKENIZER'}, $valid_values, $install_log_values ); $msg = q( Please specify Zebra database user); - $config{'ZEBRA_USER'} = _get_value('ZEBRA_USER', $msg, $defaults->{'ZEBRA_USER'}, $valid_values, $install_log_values); + $config{'ZEBRA_USER'} = + _get_value( 'ZEBRA_USER', $msg, $defaults->{'ZEBRA_USER'}, $valid_values, $install_log_values ); $msg = q( Please specify the Zebra database password); - $config{'ZEBRA_PASS'} = _get_value('ZEBRA_PASS', $msg, $defaults->{'ZEBRA_PASS'}, $valid_values, $install_log_values); + $config{'ZEBRA_PASS'} = + _get_value( 'ZEBRA_PASS', $msg, $defaults->{'ZEBRA_PASS'}, $valid_values, $install_log_values ); $msg = q( Since you've chosen to use Zebra, you can enable the SRU/ @@ -1219,10 +1255,11 @@ 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, $install_log_values); + $msg .= _add_valid_values_disp( 'INSTALL_SRU', $valid_values ); + $config{'INSTALL_SRU'} = + _get_value( 'INSTALL_SRU', $msg, $defaults->{'INSTALL_SRU'}, $valid_values, $install_log_values ); - if ($config{'INSTALL_SRU'} eq 'yes') { + 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 @@ -1230,112 +1267,141 @@ 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, $install_log_values); + $config{'ZEBRA_SRU_HOST'} = + _get_value( 'ZEBRA_SRU_HOST', $msg, $defaults->{'ZEBRA_SRU_HOST'}, $valid_values, $install_log_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, $install_log_values); + $config{'ZEBRA_SRU_BIBLIOS_PORT'} = _get_value( + 'ZEBRA_SRU_BIBLIOS_PORT', $msg, $defaults->{'ZEBRA_SRU_BIBLIOS_PORT'}, $valid_values, + $install_log_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, $install_log_values); + $config{'ZEBRA_SRU_AUTHORITIES_PORT'} = _get_value( + 'ZEBRA_SRU_AUTHORITIES_PORT', $msg, $defaults->{'ZEBRA_SRU_AUTHORITIES_PORT'}, $valid_values, + $install_log_values + ); } - $msg = q( + $msg = q( Use memcached to cache the results of some function calls? This provides a significant performance improvement. You will need a Memcached server running.); - $msg .= _add_valid_values_disp('USE_MEMCACHED', $valid_values); - $config{'USE_MEMCACHED'} = _get_value('USE_MEMCACHED', $msg, $defaults->{'USE_MEMCACHED'}, $valid_values, $install_log_values); - if ($config{'USE_MEMCACHED'} eq 'yes'){ - $msg = q( + $msg .= _add_valid_values_disp( 'USE_MEMCACHED', $valid_values ); + $config{'USE_MEMCACHED'} = + _get_value( 'USE_MEMCACHED', $msg, $defaults->{'USE_MEMCACHED'}, $valid_values, $install_log_values ); + if ( $config{'USE_MEMCACHED'} eq 'yes' ) { + $msg = q( Since you've chosen to use caching, you must specify the memcached servers and the namespace to use: ); - $msg = q( + $msg = q( Memcached server address?); - $config{'MEMCACHED_SERVERS'} = _get_value('MEMCACHED_SERVERS', $msg, $defaults->{'MEMCACHED_SERVERS'}, $valid_values, $install_log_values); + $config{'MEMCACHED_SERVERS'} = _get_value( + 'MEMCACHED_SERVERS', $msg, $defaults->{'MEMCACHED_SERVERS'}, $valid_values, + $install_log_values + ); - $msg = q( + $msg = q( Memcached namespace?); - $config{'MEMCACHED_NAMESPACE'} = _get_value('MEMCACHED_NAMESPACE', $msg, $defaults->{'MEMCACHED_NAMESPACE'}, $valid_values, $install_log_values); - } + $config{'MEMCACHED_NAMESPACE'} = _get_value( + 'MEMCACHED_NAMESPACE', $msg, $defaults->{'MEMCACHED_NAMESPACE'}, $valid_values, + $install_log_values + ); + } - - $msg = q( + $msg = q( Use Elasticsearch to serve search results? You will need a Elasticsearch server running.); - $msg .= _add_valid_values_disp('USE_ELASTICSEARCH', $valid_values); - $config{'USE_ELASTICSEARCH'} = _get_value('USE_ELASTICSEARCH', $msg, $defaults->{'USE_ELASTICSEARCH'}, $valid_values, $install_log_values); - if ($config{'USE_ELASTICSEARCH'} eq 'yes'){ - $msg = q( + $msg .= _add_valid_values_disp( 'USE_ELASTICSEARCH', $valid_values ); + $config{'USE_ELASTICSEARCH'} = + _get_value( 'USE_ELASTICSEARCH', $msg, $defaults->{'USE_ELASTICSEARCH'}, $valid_values, $install_log_values ); + if ( $config{'USE_ELASTICSEARCH'} eq 'yes' ) { + $msg = q( Define the ELASTICSEARCH_SERVERS with a comma-separated list. Eg localhost:9200, 192.168.0.100:9200 ); - $msg = q( + $msg = q( Elasticsearch server addresses?); - $config{'ELASTICSEARCH_SERVERS'} = _get_value('ELASTICSEARCH_SERVERS', $msg, $defaults->{'ELASTICSEARCH_SERVERS'}, $valid_values, $install_log_values); + $config{'ELASTICSEARCH_SERVERS'} = _get_value( + 'ELASTICSEARCH_SERVERS', $msg, $defaults->{'ELASTICSEARCH_SERVERS'}, $valid_values, + $install_log_values + ); - $msg = q( + $msg = q( What index name to use for this Koha-instance? It must be unique for each Koha sharing the same Elasticsearch-cluster Elasticsearch index?); - $config{'ELASTICSEARCH_INDEX'} = _get_value('ELASTICSEARCH_INDEX', $msg, $defaults->{'ELASTICSEARCH_INDEX'}, $valid_values, $install_log_values); - } + $config{'ELASTICSEARCH_INDEX'} = _get_value( + 'ELASTICSEARCH_INDEX', $msg, $defaults->{'ELASTICSEARCH_INDEX'}, $valid_values, + $install_log_values + ); + } - $msg = q( + $msg = q( Template cache directory?); - $config{'TEMPLATE_CACHE_DIR'} = _get_value('TEMPLATE_CACHE_DIR', $msg, $defaults->{'TEMPLATE_CACHE_DIR'}, $valid_values, $install_log_values); + $config{'TEMPLATE_CACHE_DIR'} = + _get_value( 'TEMPLATE_CACHE_DIR', $msg, $defaults->{'TEMPLATE_CACHE_DIR'}, $valid_values, $install_log_values ); - $msg = q( + $msg = q( Path to DejaVu fonts?); - $config{'FONT_DIR'} = _get_value('FONT_DIR', $msg, $defaults->{'FONT_DIR'}, $valid_values, $install_log_values); + $config{'FONT_DIR'} = _get_value( 'FONT_DIR', $msg, $defaults->{'FONT_DIR'}, $valid_values, $install_log_values ); - $msg = q( + $msg = q( SMTP settings You will be able to set your default SMTP configuration.); - $msg .= q{ + $msg .= q{ SMTP host name?}; - $config{'SMTP_HOST'} = _get_value('SMTP_HOST', $msg, $defaults->{'SMTP_HOST'}, $valid_values, $install_log_values); + $config{'SMTP_HOST'} = + _get_value( 'SMTP_HOST', $msg, $defaults->{'SMTP_HOST'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP port?}; - $config{'SMTP_PORT'} = _get_value('SMTP_PORT', $msg, $defaults->{'SMTP_PORT'}, $valid_values, $install_log_values); + $config{'SMTP_PORT'} = + _get_value( 'SMTP_PORT', $msg, $defaults->{'SMTP_PORT'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP timeout (in seconds)?}; - $config{'SMTP_TIMEOUT'} = _get_value('SMTP_TIMEOUT', $msg, $defaults->{'SMTP_TIMEOUT'}, $valid_values, $install_log_values); + $config{'SMTP_TIMEOUT'} = + _get_value( 'SMTP_TIMEOUT', $msg, $defaults->{'SMTP_TIMEOUT'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP SSL mode?}; - $msg .= _add_valid_values_disp('SMTP_SSL_MODE', $valid_values); - $config{'SMTP_SSL_MODE'} = _get_value('SMTP_SSL_MODE', $msg, $defaults->{'SMTP_SSL_MODE'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'SMTP_SSL_MODE', $valid_values ); + $config{'SMTP_SSL_MODE'} = + _get_value( 'SMTP_SSL_MODE', $msg, $defaults->{'SMTP_SSL_MODE'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP user name?}; - $config{'SMTP_USER_NAME'} = _get_value('SMTP_USER_NAME', $msg, $defaults->{'SMTP_USER_NAME'}, $valid_values, $install_log_values); + $config{'SMTP_USER_NAME'} = + _get_value( 'SMTP_USER_NAME', $msg, $defaults->{'SMTP_USER_NAME'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP password?}; - $config{'SMTP_PASSWORD'} = _get_value('SMTP_PASSWORD', $msg, $defaults->{'SMTP_PASSWORD'}, $valid_values, $install_log_values); + $config{'SMTP_PASSWORD'} = + _get_value( 'SMTP_PASSWORD', $msg, $defaults->{'SMTP_PASSWORD'}, $valid_values, $install_log_values ); - $msg = q{ + $msg = q{ SMTP debug mode?}; - $msg .= _add_valid_values_disp('SMTP_DEBUG', $valid_values); - $config{'SMTP_DEBUG'} = _get_value('SMTP_DEBUG', $msg, $defaults->{'SMTP_DEBUG'}, $valid_values, $install_log_values); + $msg .= _add_valid_values_disp( 'SMTP_DEBUG', $valid_values ); + $config{'SMTP_DEBUG'} = + _get_value( 'SMTP_DEBUG', $msg, $defaults->{'SMTP_DEBUG'}, $valid_values, $install_log_values ); - $config{'SMTP_DEBUG'} = ( $config{'SMTP_DEBUG'} eq 'yes' ) ? 1 : 0; + $config{'SMTP_DEBUG'} = ( $config{'SMTP_DEBUG'} eq 'yes' ) ? 1 : 0; - $msg = q( + $msg = q( Would you like to run the database-dependent test suite?); - $msg .= _add_valid_values_disp( 'RUN_DATABASE_TESTS', $valid_values ); - $config{'RUN_DATABASE_TESTS'} = _get_value( 'RUN_DATABASE_TESTS', $msg, $defaults->{'RUN_DATABASE_TESTS'}, $valid_values, $install_log_values ); + $msg .= _add_valid_values_disp( 'RUN_DATABASE_TESTS', $valid_values ); + $config{'RUN_DATABASE_TESTS'} = + _get_value( 'RUN_DATABASE_TESTS', $msg, $defaults->{'RUN_DATABASE_TESTS'}, $valid_values, $install_log_values ); - if ( $config{'RUN_DATABASE_TESTS'} eq 'yes' ) { - $config{'TEST_DB_TYPE'} = $config{'DB_TYPE'}; - $config{'TEST_DB_HOST'} = $config{'DB_HOST'}; - $msg = q(TEST DATABASE + if ( $config{'RUN_DATABASE_TESTS'} eq 'yes' ) { + $config{'TEST_DB_TYPE'} = $config{'DB_TYPE'}; + $config{'TEST_DB_HOST'} = $config{'DB_HOST'}; + $msg = q(TEST DATABASE THE DATA IN THIS DATABASE WILL BE DESTROYED during the process of testing. Please don't do this on your production database. It is not @@ -1348,22 +1414,27 @@ doing it in a database that you don't want to lose. Please specify the name of the test database to be used by Koha); - $config{'TEST_DB_NAME'} = _get_value('TEST_DB_NAME', $msg, $defaults->{'TEST_DB_NAME'}, $valid_values, $install_log_values); - while ( $config{'TEST_DB_NAME'} eq $config{'DB_NAME'} ) { - $msg = q(Please do not use the same database for testing as you do for production. You run the severe risk of data loss.); - $config{'TEST_DB_NAME'} = _get_value('TEST_DB_NAME', $msg, $defaults->{'TEST_DB_NAME'}, $valid_values, $install_log_values); - } + $config{'TEST_DB_NAME'} = + _get_value( 'TEST_DB_NAME', $msg, $defaults->{'TEST_DB_NAME'}, $valid_values, $install_log_values ); + while ( $config{'TEST_DB_NAME'} eq $config{'DB_NAME'} ) { + $msg = + q(Please do not use the same database for testing as you do for production. You run the severe risk of data loss.); + $config{'TEST_DB_NAME'} = + _get_value( 'TEST_DB_NAME', $msg, $defaults->{'TEST_DB_NAME'}, $valid_values, $install_log_values ); + } - $msg = q( + $msg = q( Please specify the user that owns the database to be used by Koha); - $config{'TEST_DB_USER'} = _get_value('TEST_DB_USER', $msg, $defaults->{'TEST_DB_USER'}, $valid_values, $install_log_values); + $config{'TEST_DB_USER'} = + _get_value( 'TEST_DB_USER', $msg, $defaults->{'TEST_DB_USER'}, $valid_values, $install_log_values ); - $msg = q( + $msg = q( Please specify the password of the user that owns the database to be used by Koha); - $config{'TEST_DB_PASS'} = _get_value('TEST_DB_PASS', $msg, $defaults->{'TEST_DB_PASS'}, $valid_values, $install_log_values); - } + $config{'TEST_DB_PASS'} = + _get_value( 'TEST_DB_PASS', $msg, $defaults->{'TEST_DB_PASS'}, $valid_values, $install_log_values ); + } print "\n\n"; @@ -1379,44 +1450,45 @@ database to be used by Koha); } sub _add_valid_values_disp { - my $key = shift; + my $key = shift; my $valid_values = shift; my $disp = ""; - if (exists $valid_values->{$key}) { - $disp = " (" . join(", ", sort keys %{ $valid_values->{$key} }) . ")"; + if ( exists $valid_values->{$key} ) { + $disp = " (" . join( ", ", sort keys %{ $valid_values->{$key} } ) . ")"; } return $disp; } sub _get_value { - my $key = shift; - my $msg = shift; - my $default = shift; - my $valid_values = shift; + my $key = shift; + my $msg = shift; + my $default = shift; + my $valid_values = shift; my $install_log_values = shift; # take value from install log if present - if (exists $install_log_values{$key}) { + if ( exists $install_log_values{$key} ) { $install_log_values{$key} =~ s/\$/\$\$/g; return $install_log_values{$key}; } # override default value from environment - if (exists $ENV{$key}) { + if ( exists $ENV{$key} ) { $default = $ENV{$key}; $msg .= " (default from environment)"; } - my $val = prompt($msg, $default); + my $val = prompt( $msg, $default ); - while (exists $valid_values->{$key} and - $val ne $default 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); - $val = prompt($retry_msg, $default); + $retry_msg .= _add_valid_values_disp( $key, $valid_values ); + $val = prompt( $retry_msg, $default ); } $val =~ s/\$/\$\$/g; return $val; @@ -1441,112 +1513,117 @@ 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 ( $volume, $directories, $file ) = File::Spec->splitpath( $base, 1 ); my @basedir = File::Spec->splitdir($directories); - if ( $^O eq 'cygwin' ) { shift @basedir; unshift @basedir, 'c:'; } # in a cygwin environment, $volume is returned empty + if ( $^O eq 'cygwin' ) { + shift @basedir; + unshift @basedir, 'c:'; + } # in a cygwin environment, $volume is returned empty my $package = pop @basedir; - - my %dirmap = (); + my %dirmap = (); my %skipdirs = (); - if ($mode eq 'single') { - $dirmap{'API_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'api'); - $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'); - $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs'); - $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'cgi-bin'); - $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs', 'opac-tmpl'); - $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs'); - $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib'); - $dirmap{'PERL_MODULE_LIB_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{'Z3950_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'z3950'); - $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); - $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); - $dirmap{'SCRIPT_NONDEV_DIR'} = $dirmap{'SCRIPT_DIR'}; - $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'); - $dirmap{'LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock'); - $dirmap{'LOG_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'log'); - $dirmap{'BACKUP_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'spool'); - $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'koha', 'plugins'); - $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb'); - $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb'); - } elsif ($mode eq 'dev') { - my $curdir = File::Spec->rel2abs(File::Spec->curdir()); - $dirmap{'API_CGI_DIR'} = File::Spec->catdir($curdir, 'api'); - $skipdirs{'API_CGI_DIR'} = 1; - $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'); + if ( $mode eq 'single' ) { + $dirmap{'API_CGI_DIR'} = File::Spec->catdir( @basedir, $package, 'api' ); + $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' ); + $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir( @basedir, $package, 'intranet', 'htdocs' ); + $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'cgi-bin' ); + $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'htdocs', 'opac-tmpl' ); + $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'htdocs' ); + $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir( @basedir, $package, 'lib' ); + $dirmap{'PERL_MODULE_LIB_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{'Z3950_CONF_DIR'} = File::Spec->catdir( @basedir, $package, 'etc', 'z3950' ); + $dirmap{'MISC_DIR'} = File::Spec->catdir( @basedir, $package, 'misc' ); + $dirmap{'SCRIPT_DIR'} = File::Spec->catdir( @basedir, $package, 'bin' ); + $dirmap{'SCRIPT_NONDEV_DIR'} = $dirmap{'SCRIPT_DIR'}; + $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' ); + $dirmap{'LOCK_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lock' ); + $dirmap{'LOG_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'log' ); + $dirmap{'BACKUP_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'spool' ); + $dirmap{'PLUGINS_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lib', 'koha', 'plugins' ); + $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lib', 'zebradb' ); + $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'run', 'zebradb' ); + } elsif ( $mode eq 'dev' ) { + my $curdir = File::Spec->rel2abs( File::Spec->curdir() ); + $dirmap{'API_CGI_DIR'} = File::Spec->catdir( $curdir, 'api' ); + $skipdirs{'API_CGI_DIR'} = 1; + $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' ); $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'); - $skipdirs{'OPAC_TMPL_DIR'} = 1; - $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir($curdir, 'koha-tmpl'); - $skipdirs{'OPAC_WWW_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' ); + $skipdirs{'OPAC_TMPL_DIR'} = 1; + $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir( $curdir, 'koha-tmpl' ); + $skipdirs{'OPAC_WWW_DIR'} = 1; + #NOTE: We're hacking the dirmap here, so that PERL_MODULE_DIR tokens get rewritten correctly for git installs - $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir($curdir); - $skipdirs{'PERL_MODULE_DIR'} = 1; - $dirmap{'PERL_MODULE_LIB_DIR'} = File::Spec->catdir($curdir,'lib'); + $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir($curdir); + $skipdirs{'PERL_MODULE_DIR'} = 1; + $dirmap{'PERL_MODULE_LIB_DIR'} = File::Spec->catdir( $curdir, 'lib' ); $skipdirs{'PERL_MODULE_LIB_DIR'} = 1; - $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc'); - $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'zebradb'); - $dirmap{'Z3950_CONF_DIR'} = File::Spec->catdir(@basedir, $package, 'etc', 'z3950'); - $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); - $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); + $dirmap{'KOHA_CONF_DIR'} = File::Spec->catdir( @basedir, $package, 'etc' ); + $dirmap{'ZEBRA_CONF_DIR'} = File::Spec->catdir( @basedir, $package, 'etc', 'zebradb' ); + $dirmap{'Z3950_CONF_DIR'} = File::Spec->catdir( @basedir, $package, 'etc', 'z3950' ); + $dirmap{'MISC_DIR'} = File::Spec->catdir( @basedir, $package, 'misc' ); + $dirmap{'SCRIPT_DIR'} = File::Spec->catdir( @basedir, $package, 'bin' ); + #For dev install, point NONDEV_DIR to misc in current dir (not base) #Used by supportdir in koha-conf.xml (BZ 12031) - $dirmap{'SCRIPT_NONDEV_DIR'} = File::Spec->catdir($curdir, 'misc'); + $dirmap{'SCRIPT_NONDEV_DIR'} = File::Spec->catdir( $curdir, 'misc' ); $skipdirs{'SCRIPT_NONDEV_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'); - $dirmap{'LOCK_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lock'); - $dirmap{'LOG_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'log'); - $dirmap{'BACKUP_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'spool'); - $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'plugins'); - $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'lib', 'zebradb'); - $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(@basedir, $package, 'var', 'run', 'zebradb'); + $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' ); + $dirmap{'LOCK_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lock' ); + $dirmap{'LOG_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'log' ); + $dirmap{'BACKUP_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'spool' ); + $dirmap{'PLUGINS_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lib', 'plugins' ); + $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'lib', 'zebradb' ); + $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir( @basedir, $package, 'var', 'run', 'zebradb' ); } else { + # mode is standard, i.e., 'fhs' - $dirmap{'API_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'api'); - $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'); - $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'intranet', 'htdocs'); - $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'cgi-bin'); - $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs', 'opac-tmpl'); - $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir(@basedir, $package, 'opac', 'htdocs'); - $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir(@basedir, $package, 'lib'); - $dirmap{'PERL_MODULE_LIB_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{'Z3950_CONF_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'etc', $package, 'z3950'); - $dirmap{'MISC_DIR'} = File::Spec->catdir(@basedir, $package, 'misc'); - $dirmap{'SCRIPT_DIR'} = File::Spec->catdir(@basedir, $package, 'bin'); - $dirmap{'SCRIPT_NONDEV_DIR'} = $dirmap{'SCRIPT_DIR'}; - $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(File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb'); - $dirmap{'LOCK_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lock', $package); - $dirmap{'LOG_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'log', $package); - $dirmap{'BACKUP_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'spool', $package); - $dirmap{'PLUGINS_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'plugins'); - $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb'); - $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir(File::Spec->rootdir(), 'var', 'run', $package, 'zebradb'); + $dirmap{'API_CGI_DIR'} = File::Spec->catdir( @basedir, $package, 'api' ); + $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' ); + $dirmap{'INTRANET_WWW_DIR'} = File::Spec->catdir( @basedir, $package, 'intranet', 'htdocs' ); + $dirmap{'OPAC_CGI_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'cgi-bin' ); + $dirmap{'OPAC_TMPL_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'htdocs', 'opac-tmpl' ); + $dirmap{'OPAC_WWW_DIR'} = File::Spec->catdir( @basedir, $package, 'opac', 'htdocs' ); + $dirmap{'PERL_MODULE_DIR'} = File::Spec->catdir( @basedir, $package, 'lib' ); + $dirmap{'PERL_MODULE_LIB_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{'Z3950_CONF_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'etc', $package, 'z3950' ); + $dirmap{'MISC_DIR'} = File::Spec->catdir( @basedir, $package, 'misc' ); + $dirmap{'SCRIPT_DIR'} = File::Spec->catdir( @basedir, $package, 'bin' ); + $dirmap{'SCRIPT_NONDEV_DIR'} = $dirmap{'SCRIPT_DIR'}; + $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( File::Spec->rootdir(), 'var', 'lock', $package, 'zebradb' ); + $dirmap{'LOCK_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'lock', $package ); + $dirmap{'LOG_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'log', $package ); + $dirmap{'BACKUP_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'spool', $package ); + $dirmap{'PLUGINS_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'lib', $package, 'plugins' ); + $dirmap{'ZEBRA_DATA_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'lib', $package, 'zebradb' ); + $dirmap{'ZEBRA_RUN_DIR'} = File::Spec->catdir( File::Spec->rootdir(), 'var', 'run', $package, 'zebradb' ); } - _get_env_overrides(\%dirmap); - _get_argv_overrides(\%dirmap); - _add_destdir(\%dirmap); + _get_env_overrides( \%dirmap ); + _get_argv_overrides( \%dirmap ); + _add_destdir( \%dirmap ); return \%dirmap, \%skipdirs; } @@ -1561,9 +1638,9 @@ the test suite. sub get_test_dir { my ($dirname) = @_; - my @basedir = (File::Spec->rel2abs(File::Spec->curdir()), 't', 'run'); - if (exists $test_suite_override_dirs{$dirname}) { - return File::Spec->catdir(@basedir, @{ $test_suite_override_dirs{$dirname} }); + my @basedir = ( File::Spec->rel2abs( File::Spec->curdir() ), 't', 'run' ); + if ( exists $test_suite_override_dirs{$dirname} ) { + return File::Spec->catdir( @basedir, @{ $test_suite_override_dirs{$dirname} } ); } else { return; } @@ -1573,8 +1650,8 @@ sub get_test_dir { sub _get_env_overrides { my $dirmap = shift; - foreach my $key (keys %$dirmap) { - if (exists $ENV{$key}) { + foreach my $key ( keys %$dirmap ) { + if ( exists $ENV{$key} ) { $dirmap->{$key} = $ENV{$key}; print "Setting $key from environment\n"; } @@ -1585,8 +1662,8 @@ sub _get_argv_overrides { my $dirmap = shift; my @new_argv = (); - for (my $i = 0; $i <= $#ARGV; $i++) { - if ($ARGV[$i] =~ /^([^=]+)=([^=]+)$/ and exists $dirmap->{$1}) { + for ( my $i = 0 ; $i <= $#ARGV ; $i++ ) { + if ( $ARGV[$i] =~ /^([^=]+)=([^=]+)$/ and exists $dirmap->{$1} ) { $dirmap->{$1} = $2; } else { push @new_argv, $ARGV[$i]; @@ -1604,24 +1681,24 @@ sub _strip_destdir { sub _add_destdir { my $dirmap = shift; - foreach my $key (keys %$dirmap) { - $dirmap->{$key} = '$(DESTDIR)'.$dirmap->{$key}; + foreach my $key ( keys %$dirmap ) { + $dirmap->{$key} = '$(DESTDIR)' . $dirmap->{$key}; } } sub display_configuration { - my $config = shift; - my $dirmap = shift; + my $config = shift; + my $dirmap = shift; my @version = grep /\/usr\/share\/perl\//, @INC; push @version, ('/usr/share/perl/5.10') if !$version[0]; print "\n\nKoha will be installed with the following configuration parameters:\n\n"; - foreach my $key (sort keys %$config) { - print sprintf("%-25.25s%s\n", $key, $config->{$key}); + foreach my $key ( sort keys %$config ) { + print sprintf( "%-25.25s%s\n", $key, $config->{$key} ); } print "\nand in the following directories:\n\n"; - foreach my $key (sort keys %$dirmap) { - print sprintf("%-25.25s%s\n", $key, $dirmap->{$key}); + foreach my $key ( sort keys %$dirmap ) { + print sprintf( "%-25.25s%s\n", $key, $dirmap->{$key} ); } print "\n\nTo change any configuration setting, please run\n"; print "perl Makefile.PL again. To override one of the target\n"; @@ -1645,17 +1722,18 @@ a few other directories for zebrasrv and zebraidx. sub find_zebra { my @search_dirs = map { - my $abs = File::Spec->rel2abs($_); - my ($toss, $directories); - ($toss, $directories, $toss) = File::Spec->splitpath($abs, 1); - $directories; - } split /:/, $ENV{PATH}; + my $abs = File::Spec->rel2abs($_); + my ( $toss, $directories ); + ( $toss, $directories, $toss ) = File::Spec->splitpath( $abs, 1 ); + $directories; + } split /:/, $ENV{PATH}; push @search_dirs, qw(/usr/local/bin /opt/local/bin /usr/bin); - my @zebrasrv_dirs = grep { -x File::Spec->catpath('', $_, 'zebrasrv') } @search_dirs; + my @zebrasrv_dirs = grep { -x File::Spec->catpath( '', $_, 'zebrasrv' ) } @search_dirs; return unless @zebrasrv_dirs; + # verify that directory that contains zebrasrv also contains zebraidx foreach my $dir (@zebrasrv_dirs) { - return $dir if -x File::Spec->catpath('', $dir, 'zebraidx'); + return $dir if -x File::Spec->catpath( '', $dir, 'zebraidx' ); } return; } @@ -1673,59 +1751,64 @@ sub test { } sub install { - my $self = shift; + my $self = shift; my $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. - my $perl5lib_dirs = _build_perl5lib_string({ target_dirs => $target_directories }); + my $perl5lib_dirs = _build_perl5lib_string( { target_dirs => $target_directories } ); -# If installation is on Win32, we need to do permissions different from *nix - if ( $^O =~ /darwin|linux|cygwin|freebsd|solaris/ ) { # this value needs to be verified for each platform and modified accordingly - foreach my $key (sort keys %$target_directories) { - $install .= qq( + # If installation is on Win32, we need to do permissions different from *nix + if ( $^O =~ /darwin|linux|cygwin|freebsd|solaris/ ) + { # 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 exists $skip_directories->{$key}; - } - $install .= qq( + } + $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 exists $skip_directories->{$key}; - } - $install .= "\t\t\$(INST_MAN1DIR) \$(DESTINSTALLMAN1DIR) \\\n"; - $install .= "\t\t\$(INST_MAN3DIR) \$(DESTINSTALLMAN3DIR)\n"; + $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 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"; -# Do not try to change ownership if DESTDIR is set - if ($config{'INSTALL_MODE'} eq 'standard' and $config{'KOHA_USER'} ne "root") { - foreach my $key (sort keys %$target_directories) { - $install .= "\t\$(NOECHO) if test -z \"\$(DESTDIR)\"; then chown -R $config{'KOHA_USER'}:$config{'KOHA_GROUP'} \$(KOHA_DEST_$key); fi\n" - unless exists $skip_directories->{$key}; - } - } else { - $install .= "\t\t\$(NOECHO) \$(NOOP)\n\n"; - } + $install .= "\n"; + $install .= "set_koha_ownership ::\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 exists $skip_directories->{$key}; - } - } + # Do not try to change ownership if DESTDIR is set + if ( $config{'INSTALL_MODE'} eq 'standard' and $config{'KOHA_USER'} ne "root" ) { + foreach my $key ( sort keys %$target_directories ) { + $install .= + "\t\$(NOECHO) if test -z \"\$(DESTDIR)\"; then chown -R $config{'KOHA_USER'}:$config{'KOHA_GROUP'} \$(KOHA_DEST_$key); fi\n" + unless exists $skip_directories->{$key}; + } + } else { + $install .= "\t\t\$(NOECHO) \$(NOOP)\n\n"; + } - $install .= "\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 exists $skip_directories->{$key}; + } + } + + $install .= "\n"; $install .= "warn_koha_env_vars ::\n"; $install .= "\t\$(NOECHO) \$(ECHO)\n"; @@ -1769,7 +1852,7 @@ sub upgrade { my $upgrade = ""; my $backup_suffix; - if (exists $install_log_values{'KOHA_INSTALLED_VERSION'}) { + if ( exists $install_log_values{'KOHA_INSTALLED_VERSION'} ) { my $version = $install_log_values{'KOHA_INSTALLED_VERSION'}; $version =~ s/\./_/g; $backup_suffix = "_koha_$version"; @@ -1785,17 +1868,22 @@ upgrade :: make_upgrade_backup install make_upgrade_backup :: \t\$(NOECHO) umask 022; \$(MOD_BACKUP) \\ /; - foreach my $key (qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR - ZEBRA_CONF_DIR PLUGINS_DIR/) { - $upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n" - unless exists $skip_directories->{$key} or - not exists $target_directories->{$key}; + foreach my $key ( + qw/KOHA_CONF_DIR INTRANET_TMPL_DIR INTRANET_WWW_DIR OPAC_TMPL_DIR OPAC_WWW_DIR + ZEBRA_CONF_DIR PLUGINS_DIR/ + ) + { + $upgrade .= "\t\t\$(KOHA_INST_$key) \$(KOHA_DEST_$key) \\\n" + unless exists $skip_directories->{$key} + or not exists $target_directories->{$key}; } $upgrade =~ s/\\\n$/\n/; return $upgrade; } + sub postamble { + # put directory mappings into Makefile # so that Make will export as environment # variables -- this is for the use of @@ -1804,17 +1892,17 @@ sub postamble { my $env; #NOTE: Build __PERL5LIB_DIRS__ for rewrite-config.PL - my $perl5lib_dirs = _build_perl5lib_string({ target_dirs => $target_directories }); - if ($perl5lib_dirs){ - $env .= "export __PERL5LIB_DIRS__ := $perl5lib_dirs\n" + my $perl5lib_dirs = _build_perl5lib_string( { target_dirs => $target_directories } ); + if ($perl5lib_dirs) { + $env .= "export __PERL5LIB_DIRS__ := $perl5lib_dirs\n"; } - # Hereagain, we must alter syntax per platform... - { - $env .= join("\n", map { "export __${_}__ := $target_directories->{$_}" } keys %$target_directories); - $env .= "\n\n"; - $env .= join("\n", map { "export __${_}__ := $config{$_}" } keys %config); - } + # Hereagain, we must alter syntax per platform... + { + $env .= join( "\n", map { "export __${_}__ := $target_directories->{$_}" } keys %$target_directories ); + $env .= "\n\n"; + $env .= join( "\n", map { "export __${_}__ := $config{$_}" } keys %config ); + } return "$env\n"; } @@ -1836,17 +1924,17 @@ sub _build_perl5lib_string { my %unique_map = (); my $perl5lib_str; my $target_dirs = $args->{target_dirs}; - my @dir_codes = ("PERL_MODULE_DIR","PERL_MODULE_LIB_DIR"); - if ($target_dirs){ - foreach my $code (@dir_codes){ - my $path = $target_dirs->{ $code }; - if ($path){ + my @dir_codes = ( "PERL_MODULE_DIR", "PERL_MODULE_LIB_DIR" ); + if ($target_dirs) { + foreach my $code (@dir_codes) { + my $path = $target_dirs->{$code}; + if ($path) { $unique_map{$path} = 1 unless $unique_map{$path}; } } my @paths = sort keys %unique_map; - if (@paths){ - $perl5lib_str = join(':',@paths); + if (@paths) { + $perl5lib_str = join( ':', @paths ); } } return $perl5lib_str; diff --git a/fix-perl-path.PL b/fix-perl-path.PL index f9db358e5a..9a04a68987 100644 --- a/fix-perl-path.PL +++ b/fix-perl-path.PL @@ -20,15 +20,15 @@ use ExtUtils::MakeMaker::Config; use Tie::File; my $basedir = (shift); -my $DEBUG = 0; +my $DEBUG = 0; $DEBUG = 1 if $basedir eq 'test'; my $bindir = $Config{installbin}; -$bindir =~ s!\\!/!g; # make all directory separators uniform since Win32 does not care and *nix does... +$bindir =~ s!\\!/!g; # make all directory separators uniform since Win32 does not care and *nix does... my $shebang = "#!$bindir\/perl"; -warn "Perl binary located in $bindir on this system.\n" if $DEBUG; +warn "Perl binary located in $bindir on this system.\n" if $DEBUG; warn "The shebang line for this sytems should be $shebang\n\n" if $DEBUG; die if $basedir eq 'test'; @@ -59,25 +59,26 @@ in a manner similar to 'fixshebang (foodir)' but may be supplied with any direct =cut -sub fixshebang{ - my $dir = shift; +sub fixshebang { + my $dir = shift; opendir my $dh, $dir or die $!; - warn "Reading $dir contents.\n" if $DEBUG; - while( my $file = readdir($dh) ) { - # this may be used to exclude any desired files from the scan + warn "Reading $dir contents.\n" if $DEBUG; + while ( my $file = readdir($dh) ) { + + # this may be used to exclude any desired files from the scan # if ( $file =~ /foo/ ) { next; } - # handle files... other extensions could be substituted/added if needed - if ( $file =~ /\.pl$/ ) { + # handle files... other extensions could be substituted/added if needed + if ( $file =~ /\.pl$/ ) { my @filearray; - my $pathfile =$dir . '/' . $file; - warn "Found a perl script named $pathfile\n" if $DEBUG; + my $pathfile = $dir . '/' . $file; + warn "Found a perl script named $pathfile\n" if $DEBUG; # At this point, file is in 'blib' and by default # has mode a-w. Therefore, must change permission # to make it writable. Note that stat and chmod # (the Perl functions) should work on Win32 my $old_perm; - $old_perm = (stat $pathfile)[2] & oct(7777); + $old_perm = ( stat $pathfile )[2] & oct(7777); my $new_perm = $old_perm | oct(200); chmod $new_perm, $pathfile; @@ -88,30 +89,29 @@ sub fixshebang{ tie @filearray, 'Tie::File', $pathfile, recsep => "\x0a" or die $!; warn "First line of $file is $filearray[0]\n\n" if $DEBUG; - if ( ( $filearray[0] =~ /#!.*perl/ ) && ( $filearray[0] !~ /$shebang|"$shebang -w"/ ) ) { - warn "\n\tRe-writing shebang line for $pathfile\n" if $DEBUG; - warn "\tOriginal shebang line: $filearray[0]\n" if $DEBUG; + if ( ( $filearray[0] =~ /#!.*perl/ ) && ( $filearray[0] !~ /$shebang|"$shebang -w"/ ) ) { + warn "\n\tRe-writing shebang line for $pathfile\n" if $DEBUG; + warn "\tOriginal shebang line: $filearray[0]\n" if $DEBUG; $filearray[0] =~ /-w$/ ? $filearray[0] = "$shebang -w" : $filearray[0] = $shebang; warn "\tNew shebang line is: $filearray[0]\n\n" if $DEBUG; - } - elsif ( $filearray[0] =~ /$shebang|"$shebang -w"/ ) { + } elsif ( $filearray[0] =~ /$shebang|"$shebang -w"/ ) { warn "\n\tShebang line is correct.\n\n" if $DEBUG; - } - else { + } else { warn "\n\tNo shebang line found in $pathfile\n\n" if $DEBUG; - } + } untie @filearray; chmod $old_perm, $pathfile; - } - # handle directories - elsif ( -d ($dir . '/' . $file) && $file !~ /^\.{1,2}/ ) { - my $dirpath = $dir . '/' . $file; - warn "Found a subdir named $dirpath\n" if $DEBUG; - fixshebang ($dirpath); - } - } - closedir $dh; + } + + # handle directories + elsif ( -d ( $dir . '/' . $file ) && $file !~ /^\.{1,2}/ ) { + my $dirpath = $dir . '/' . $file; + warn "Found a subdir named $dirpath\n" if $DEBUG; + fixshebang($dirpath); + } + } + closedir $dh; } -fixshebang ($basedir); +fixshebang($basedir); diff --git a/rewrite-config.PL b/rewrite-config.PL index b0ecb8f80d..7bf7ca90d9 100644 --- a/rewrite-config.PL +++ b/rewrite-config.PL @@ -16,7 +16,7 @@ # along with Koha; if not, see . # # Current maintainer MJR http://mjr.towers.org.uk/ -# +# # 2007/11/12 Added DB_PORT and changed other keywords to reflect multi-dbms support. -fbcit use Modern::Perl; @@ -71,107 +71,107 @@ if ( $myhost = $ENV{WEBSERVER_HOST} || hostname ) { my $myip; unless ( $myip = $ENV{WEBSERVER_IP} ) { - my $byname = gethostbyname( $myhost ) - or die "Could not get the IP address of $myhost, DNS fault? ($!)"; + my $byname = gethostbyname($myhost) + or die "Could not get the IP address of $myhost, DNS fault? ($!)"; $myip = inet_ntoa $byname - or die "can't inet_ntoa ($!)"; + or die "can't inet_ntoa ($!)"; } - my $prefix = $ENV{'INSTALL_BASE'} || "/usr"; # These are our configuration guesses # Keys were extracted by # "",/' my %configuration = ( - "__KOHA_INSTALLED_VERSION__" => "no_version_found", - "__LOG_DIR__" => "/var/log", - "__PLUGINS_DIR__" => "/var/lib/koha/plugins", - "__DB_TYPE__" => "mysql", - "__DB_NAME__" => "koha", - "__DB_HOST__" => $myhost, - "__DB_PORT__" => "3306", - "__DB_USER__" => "kohaadmin", - "__DB_PASS__" => "katikoan", - "__DB_USE_TLS__" => "no", - "__DB_TLS_CA_CERTIFICATE__" => "", - "__DB_TLS_CLIENT_CERTIFICATE__" => "", - "__DB_TLS_CLIENT_KEY__"=>"", - "__WEBMASTER_EMAIL__" => 'webmaster@'.$mydomain, - "__WEBSERVER_DOMAIN__" => $mydomain, - "__WEBSERVER_HOST__" => $myhost, - "__WEBSERVER_IP__" => $myip, - "__WEBSERVER_PORT__" => "80", - "__WEBSERVER_PORT_LIBRARIAN__" => "8080", - "__ZEBRA_SRU_HOST__" => $myhost, - "__ZEBRA_SRU_BIBLIOS_PORT__" => "9998", - "__ZEBRA_SRU_AUTHORITIES_PORT__" => "9999", - "__KOHA_USER__" => "koha", - "__KOHA_GROUP__" => "koha", - "__ZEBRA_PASS__" => "zebrastripes", - "__ZEBRA_USER__" => "kohauser", - '__BACKUP_DIR__' => "$prefix/var/spool", - '__API_CGI_DIR__' => "$prefix/api", - '__INTRANET_CGI_DIR__' => "$prefix/intranet/cgi-bin", - '__INTRANET_TMPL_DIR__' => "$prefix/intranet/templates", - '__INTRANET_WWW_DIR__' => "$prefix/intranet/www", - '__OPAC_CGI_DIR__' => "$prefix/opac/cgi-bin", - '__OPAC_TMPL_DIR__' => "$prefix/opac/templates", - '__OPAC_WWW_DIR__' => "$prefix/opac/www", - '__PERL_MODULE_DIR__' => ($ENV{'INSTALLSITELIB'} || sprintf($prefix."/lib/perl5/site_perl/%vd",$^V))."/koha", - '__KOHA_CONF_DIR__' => "$prefix/etc/koha", - '__ZEBRA_CONF_DIR__' => "$prefix/etc/koha/zebradb", - '__MISC_DIR__' => "$prefix/misc", - '__SCRIPT_DIR__' => "$prefix/bin", - '__SCRIPT_NONDEV_DIR__' => "$prefix/bin", - '__MAN_DIR__' => "$prefix/man", - '__DOC_DIR__' => "$prefix/doc", - '__ZEBRA_LOCK_DIR__' => "$prefix/var/lock/zebradb", - '__ZEBRA_DATA_DIR__' => "$prefix/var/lib/zebradb", - '__ZEBRA_RUN_DIR__' => "$prefix/var/run/zebradb", - '__ZEBRA_MARC_FORMAT__' => 'marc21', - '__ZEBRA_LANGUAGE__' => 'en', - '__ZEBRA_TOKENIZER__' => 'chr', - '__ZEBRA_TOKENIZER_STMT__' => 'charmap word-phrase-utf.chr', - '__ZEBRA_PTOKENIZER_STMT__' => 'charmap word-phrase-utf.chr', - '__AUTH_RETRIEVAL_CFG__' => 'retrieval-info-auth-dom.xml', - '__BIB_RETRIEVAL_CFG__' => 'retrieval-info-bib-dom.xml', - '__ZEBRA_AUTH_CFG__' => 'zebra-authorities-dom.cfg', - '__ZEBRA_BIB_CFG__' => 'zebra-biblios-dom.cfg', - "__MERGE_SERVER_HOST__" => $myhost, - "__INSTALL_MODE__" => 'standard', - "__INSTALL_BASE__" => '/usr/share/koha', - "__INSTALL_SRU__" => 'yes', - "__RUN_DATABASE_TESTS__" => 'no', - "__PATH_TO_ZEBRA__" => "", - "__USE_MEMCACHED__" => 'yes', - "__MEMCACHED_SERVERS__" => "", - "__MEMCACHED_NAMESPACE__" => "", - "__USE_ELASTICSEARCH__" => 'no', - "__ELASTICSEARCH_SERVERS__" => "localhost:9200", - "__ELASTICSEARCH_INDEX__" => "koha", - "__FONT_DIR__" => "/usr/share/fonts/truetype/dejavu", - "__TEMPLATE_CACHE_DIR__" => "/tmp/koha", - '__SMTP_HOST__' => 'localhost', - '__SMTP_PORT__' => '25', - '__SMTP_TIMEOUT__' => '120', - '__SMTP_SSL_MODE__' => 'disabled', - '__SMTP_USER_NAME__' => '', - '__SMTP_PASSWORD__' => '', - '__SMTP_DEBUG__' => '0', - '__PERL_MODULE_LIB_DIR__' => "$prefix/lib", - '__PERL5LIB_DIRS__' => "$prefix/lib", + "__KOHA_INSTALLED_VERSION__" => "no_version_found", + "__LOG_DIR__" => "/var/log", + "__PLUGINS_DIR__" => "/var/lib/koha/plugins", + "__DB_TYPE__" => "mysql", + "__DB_NAME__" => "koha", + "__DB_HOST__" => $myhost, + "__DB_PORT__" => "3306", + "__DB_USER__" => "kohaadmin", + "__DB_PASS__" => "katikoan", + "__DB_USE_TLS__" => "no", + "__DB_TLS_CA_CERTIFICATE__" => "", + "__DB_TLS_CLIENT_CERTIFICATE__" => "", + "__DB_TLS_CLIENT_KEY__" => "", + "__WEBMASTER_EMAIL__" => 'webmaster@' . $mydomain, + "__WEBSERVER_DOMAIN__" => $mydomain, + "__WEBSERVER_HOST__" => $myhost, + "__WEBSERVER_IP__" => $myip, + "__WEBSERVER_PORT__" => "80", + "__WEBSERVER_PORT_LIBRARIAN__" => "8080", + "__ZEBRA_SRU_HOST__" => $myhost, + "__ZEBRA_SRU_BIBLIOS_PORT__" => "9998", + "__ZEBRA_SRU_AUTHORITIES_PORT__" => "9999", + "__KOHA_USER__" => "koha", + "__KOHA_GROUP__" => "koha", + "__ZEBRA_PASS__" => "zebrastripes", + "__ZEBRA_USER__" => "kohauser", + '__BACKUP_DIR__' => "$prefix/var/spool", + '__API_CGI_DIR__' => "$prefix/api", + '__INTRANET_CGI_DIR__' => "$prefix/intranet/cgi-bin", + '__INTRANET_TMPL_DIR__' => "$prefix/intranet/templates", + '__INTRANET_WWW_DIR__' => "$prefix/intranet/www", + '__OPAC_CGI_DIR__' => "$prefix/opac/cgi-bin", + '__OPAC_TMPL_DIR__' => "$prefix/opac/templates", + '__OPAC_WWW_DIR__' => "$prefix/opac/www", + '__PERL_MODULE_DIR__' => ( $ENV{'INSTALLSITELIB'} || sprintf( $prefix . "/lib/perl5/site_perl/%vd", $^V ) ) + . "/koha", + '__KOHA_CONF_DIR__' => "$prefix/etc/koha", + '__ZEBRA_CONF_DIR__' => "$prefix/etc/koha/zebradb", + '__MISC_DIR__' => "$prefix/misc", + '__SCRIPT_DIR__' => "$prefix/bin", + '__SCRIPT_NONDEV_DIR__' => "$prefix/bin", + '__MAN_DIR__' => "$prefix/man", + '__DOC_DIR__' => "$prefix/doc", + '__ZEBRA_LOCK_DIR__' => "$prefix/var/lock/zebradb", + '__ZEBRA_DATA_DIR__' => "$prefix/var/lib/zebradb", + '__ZEBRA_RUN_DIR__' => "$prefix/var/run/zebradb", + '__ZEBRA_MARC_FORMAT__' => 'marc21', + '__ZEBRA_LANGUAGE__' => 'en', + '__ZEBRA_TOKENIZER__' => 'chr', + '__ZEBRA_TOKENIZER_STMT__' => 'charmap word-phrase-utf.chr', + '__ZEBRA_PTOKENIZER_STMT__' => 'charmap word-phrase-utf.chr', + '__AUTH_RETRIEVAL_CFG__' => 'retrieval-info-auth-dom.xml', + '__BIB_RETRIEVAL_CFG__' => 'retrieval-info-bib-dom.xml', + '__ZEBRA_AUTH_CFG__' => 'zebra-authorities-dom.cfg', + '__ZEBRA_BIB_CFG__' => 'zebra-biblios-dom.cfg', + "__MERGE_SERVER_HOST__" => $myhost, + "__INSTALL_MODE__" => 'standard', + "__INSTALL_BASE__" => '/usr/share/koha', + "__INSTALL_SRU__" => 'yes', + "__RUN_DATABASE_TESTS__" => 'no', + "__PATH_TO_ZEBRA__" => "", + "__USE_MEMCACHED__" => 'yes', + "__MEMCACHED_SERVERS__" => "", + "__MEMCACHED_NAMESPACE__" => "", + "__USE_ELASTICSEARCH__" => 'no', + "__ELASTICSEARCH_SERVERS__" => "localhost:9200", + "__ELASTICSEARCH_INDEX__" => "koha", + "__FONT_DIR__" => "/usr/share/fonts/truetype/dejavu", + "__TEMPLATE_CACHE_DIR__" => "/tmp/koha", + '__SMTP_HOST__' => 'localhost', + '__SMTP_PORT__' => '25', + '__SMTP_TIMEOUT__' => '120', + '__SMTP_SSL_MODE__' => 'disabled', + '__SMTP_USER_NAME__' => '', + '__SMTP_PASSWORD__' => '', + '__SMTP_DEBUG__' => '0', + '__PERL_MODULE_LIB_DIR__' => "$prefix/lib", + '__PERL5LIB_DIRS__' => "$prefix/lib", ); # Override configuration from the environment -foreach my $key (keys %configuration) { - if (defined($ENV{$key})) { - $configuration{$key} = $ENV{$key}; - } +foreach my $key ( keys %configuration ) { + if ( defined( $ENV{$key} ) ) { + $configuration{$key} = $ENV{$key}; + } } my $fname = $ARGV[0]; -my $file = &read_file($fname); +my $file = &read_file($fname); $file =~ s/__.*?__/exists $configuration{$&} ? $configuration{$&} : $&/seg; # At this point, file is in 'blib' and by default @@ -179,11 +179,11 @@ $file =~ s/__.*?__/exists $configuration{$&} ? $configuration{$&} : $&/seg; # to make it writable. Note that stat and chmod # (the Perl functions) should work on Win32 my $old_perm; -$old_perm = (stat $fname)[2] & oct(7777); +$old_perm = ( stat $fname )[2] & oct(7777); my $new_perm = $old_perm | oct(200); chmod $new_perm, $fname; -open(my $output, ">", $fname) || die "Can't open $fname for write: $!"; +open( my $output, ">", $fname ) || die "Can't open $fname for write: $!"; print $output $file; close($output); @@ -191,11 +191,11 @@ chmod $old_perm, $fname; # Idea taken from perlfaq5 sub read_file { - local $/; - open(my $fh , '<', $_[0]) || die "Can't open $_[0] for read"; - my $file = <$fh>; - close $fh; - return $file; + local $/; + open( my $fh, '<', $_[0] ) || die "Can't open $_[0] for read"; + my $file = <$fh>; + close $fh; + return $file; } __END__