Koha/Makefile.PL
Chris Nighswonger faaf13a6b3 Cleaned up recursion routine a bit
Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
2007-12-17 09:13:52 -06:00

287 lines
8.8 KiB
Perl

# Copyright 2007 MJ Ray
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
#
# Current maintainer MJR http://mjr.towers.org.uk/
# See http://www.koha.org/wiki/?page=KohaInstaller
#
use ExtUtils::MakeMaker;
use POSIX;
die "perl 5.6.1 or later required" unless ($] >= 5.006001);
# Hash up directory structure & files beginning with the directory we were called from (should be the base of koha)...
my $dirtree = hashdir('.');
my %result = ();
=head1 NAME
Makefile.PL - Koha packager and installer
=head1 SYNOPSIS
=head2 BASIC INSTALLATION
perl Makefile.PL
make
sudo make install
=head2 PACKAGING RELEASE TARBALLS
make manifest tardist
make manifest zipdist
=head2 CLEANING UP
make clean
=head1 DESCRIPTION
This is a Packager and installer that uses
ExtUtils::MakeMaker, which is fairly common
on perl systems.
As well as building tar or zip files
and installing with the above commands,
it allows us to check pre-requisites
and generate configuration files.
=head1 VARIABLES
=head2 NAME, VERSION_FROM, ABSTRACT, AUTHOR
Basic metadata about this software.
=head2 NO_META
Suppress generation of META.yml file.
=head2 PREREQ_PM
Hash of perl modules and versions required.
=head2 PM
Hash of file mappings
=head2 CONFIGURE
Maybe use prompt() here in future to get configuration values
interactively at installation time.
=head2 PL_FILES
This is a hash of PL scripts to run after installation and
the files to ask them to generate.
Maybe use the values from CONFIGURE
to generate initial configuration files in future.
=cut
my $marc_value;
my $lang_value;
while ($marc_value ne 'marc21' && $marc_value ne 'unimarc'){
my $message= "Chose your flavour of MARC, unimarc or marc21 [marc21]";
$marc_value=prompt($message) || 'marc21';
}
while ($lang_value ne 'en' && $lang_value ne 'fr'){
my $message= "Choose your language, en or fr [en]";
$lang_value=prompt($message) || 'en';
}
WriteMakefile(
NAME => 'koha',
#VERSION => strftime('2.9.%Y%m%d%H',gmtime),
VERSION_FROM => 'C4/Context.pm',
ABSTRACT => 'Award-winning integrated library system (ILS) and Web OPAC',
AUTHOR => 'Koha Developers <koha-devel@nongnu.org>',
NO_META => 1,
PREREQ_PM => {
'CGI' => 3.15,
'CGI::Carp' => 1.29,
'CGI::Session' => '4.10',
'Class::Factory::Util' => 1.7,
'Class::Accessor' => 0.30,
'DBD::mysql' => 3.0008,
'DBI' => 1.53,
'Data::Dumper' => 2.121_08,
'Date::Calc' => 5.4,
'Date::Manip' => 5.44,
'Digest::MD5' => 2.36,
'File::Temp' => 0.16,
'GD::Barcode::UPCE' => 1.1,
'Getopt::Long' => 2.35,
'Getopt::Std' => 1.05,
'HTML::Template::Pro' => 0.65,
'HTTP::Cookies' => 1.39,
'HTTP::Request::Common' => 1.26,
'LWP::Simple' => 1.41,
'LWP::UserAgent' => 2.033,
'Lingua::Stem' => 0.82,
'List::Util' => 1.18,
'Locale::Language' => 2.07,
'MARC::Charset' => 0.98,
'MARC::Crosswalk::DublinCore' => 0.03,
'MARC::File::XML' => 0.88,
'MARC::Record' => 2.00,
'MIME::Base64' => 3.07,
'MIME::QuotedPrint' => 3.07,
'Mail::Sendmail' => 0.79,
'PDF::API2' => 2.000,
'PDF::API2::Page' => 2.000,
'PDF::API2::Util' => 2.000,
'PDF::Reuse' => 0.33,
'PDF::Reuse::Barcode' => 0.05,
'POSIX' => 1.09,
'Schedule::At' => 1.06,
'Term::ANSIColor' => 1.10,
'Test' => 1.25,
'Test::Harness' => 2.56,
'Test::More' => 0.62,
'Text::CSV' => 0.01,
'Text::CSV_XS' => 0.32,
'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::SAX::ParserFactory' => 1.01,
'XML::Simple' => 2.14,
'XML::RSS' => 1.31,
'ZOOM' => 1.16,
},
# File tree mapping
# PM => map_tree(),
PM => unhashdir($dirtree),
# disable tests
'test' => {TESTS => 't/dummy.t'},
# CONFIGURE => sub {
# # Ask for options with prompt($question,$default) calls here?
# return { macro => { 'export TEST' => '755' } }
# },
PL_FILES => { # generator => target(s)
'rewrite-config.PL' => [
'$(PREFIX)/share/koha/etc/koha-conf.xml',
'$(PREFIX)/share/koha/etc/koha-httpd.conf',
'$(PREFIX)/share/koha/etc/zebradb/etc/passwd',
'$(PREFIX)/share/koha/etc/zebradb/zebra-biblios.cfg',
'$(PREFIX)/share/koha/etc/zebradb/zebra-authorities.cfg'
]
}
# '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
);
=head1 FUNCTIONS
=head2 hashdir
This function recurses through the directory structure and builds
a hash of hashes containing the structure with arrays holding filenames.
This directory hashing routine was taken from BrowserUK @ http://www.perlmonks.org/?node_id=219919
=cut
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}/;
my $path = $dir .'/' . $file;
$tree->{$file} = hashdir($path), next if -d $path;
push @{$tree->{'.'}}, $file;
}
return $tree;
}
=head2 unhashdir
This function unhashes the hash of hashes generated by hashdir().
This directory unhashing routine is the personal work of Chris Nighswonger (fbcit).
Modified here to build koha makefile. It lists all files and where to install each one.
It then returns a hash reference suitable for the PM variable above.
=cut
sub unhashdir{
my $dirhash = shift;
my $dirlevel = shift;
my $toplevel = $dirlevel;
for my $k1 ( sort keys %$dirhash ) {
if ($k1 ne '.' && $k1 ne '') {
$dirlevel = ( $dirlevel ? $dirlevel . '/' . $k1 : $k1 );
&unhashdir($dirhash->{ $k1 }, $dirlevel);
$dirlevel = $toplevel;
}
elsif ( $k1 eq '.' ) {
foreach $file ( @{$dirhash->{ $k1 }} ) {
# TODO: There are some hacks here that may be able to be improved... -fbcit
if ( $file =~ /^./ ) { next; } # skip hidden files and directories.
elsif ( $file =~ /\.pm/ && $dirlevel =~ /C4/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(INST_LIBDIR)/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # C4/*.pm is copied to perl's lib namespace.
elsif ( $dirlevel !~ /koha-tmpl/ && $dirlevel =~ /(installer|errors)/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(PREFIX)/lib/cgi-bin/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # error templates are copied to $(PREFIX)/lib/cgi-bin/koha/
elsif ( $dirlevel =~ /koha-tmpl/ && $dirlevel !~ /errors/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(INST_LIBDIR)/koha/templates/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # error templates are copied to $(INST_LIBDIR)/koha/templates/
elsif ( $dirlevel =~ /(misc|rss)/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(INST_LIBDIR)/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # misc & rss are copied to koha,
# elsif ( $dirlevel =~ /(intranet-tmpl|opac-tmpl)/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(INST_LIBDIR)/koha/templates/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # Templates are copied to koha/templates,
elsif ( $file !~ /\.pl/ && $dirlevel =~ /etc/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(PREFIX)/share/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # Misc etc to koha/etc
elsif ( $file =~ /\.pl/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(PREFIX)/lib/cgi-bin/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # CGIs are copied to $(PREFIX)/lib/cgi-bin/koha/ print $result{ ($dirlevel ? $dirlevel . '/' . $file : $file)},"\n\n";
}
next;
}
}
return \%result;
}
__END__
=head1 SEE ALSO
ExtUtils::MakeMaker(3)
=head1 AUTHORS
MJ Ray mjr at phonecoop.coop
=cut