#
# 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 DESCRIPTION
-This is a packager and installer that uses
+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
=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',
'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,
'Lingua::Stem' => 0.82,
'List::Util' => 1.18,
'Locale::Language' => 2.07,
-'MARC::Charset' => 0.95,
-'MARC::File::XML' => 0.86,
-'MARC::Record' => 1.38,
+'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::Reuse' => 0.33,
'PDF::Reuse::Barcode' => 0.05,
'POSIX' => 1.09,
-'Schedule::At' => 1.06',
+'Schedule::At' => 1.06,
'Term::ANSIColor' => 1.10,
'Test' => 1.25,
'Test::Harness' => 2.56,
'Test::More' => 0.62,
-'Test::CSV' => 0.01,
+'Text::CSV' => 0.01,
+'Text::CSV_XS' => 0.32,
'Text::Wrap' => 2005.082401,
'Time::HiRes' => 1.86,
'Time::localtime' => 1.02,
},
# File tree mapping
- PM => map_tree(),
+# PM => map_tree(),
+ PM => unhashdir($dirtree),
# disable tests
'test' => {TESTS => 't/dummy.t'},
'rewrite-config.PL' => [
'$(PREFIX)/share/koha/etc/koha-conf.xml',
'$(PREFIX)/share/koha/etc/koha-httpd.conf',
- '$(PREFIX)/share/koha/etc/zebradb/tab/passwd',
+ '$(PREFIX)/share/koha/etc/zebradb/etc/passwd',
'$(PREFIX)/share/koha/etc/zebradb/zebra-biblios.cfg',
'$(PREFIX)/share/koha/etc/zebradb/zebra-authorities.cfg'
]
=head1 FUNCTIONS
-=head2 map_tree
+=head2 hashdir
-This function lists all files and where to install each one.
-It returns a hash reference suitable for the PM variable above.
+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 map_tree {
- my %result => ();
+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;
+}
-=pod
+=head2 unhashdir
-C4/*.pm is copied to perl's lib namespace.
+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
- foreach my $src (glob("C4/*.pm")) {
- $result{$src} = '$(INST_LIBDIR)/'.$src;
- }
-
-=pod
-CGIs are copied to $(PREFIX)/lib/cgi-bin/koha/
-and other scripts to koha/
-
-=cut
- foreach my $src ("mainpage.pl","help.pl",glob("*/*.pl"),glob("installer/*.pm"),glob("*/*/*.pl"),glob("*/*/*/*.pl")) {
- if ($src =~ /(misc|updater|rss)\//) {
- $result{$src} = '$(INST_LIBDIR)/koha/'.$src;
- } else {
- $result{$src} = '$(PREFIX)/lib/cgi-bin/koha/'.$src;
+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.
-=pod
+ 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.
-Templates are copied to koha/templates,
+ 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/
-=cut
- foreach my $src (glob("koha-tmpl/*"),glob("koha-tmpl/intranet-tmpl/*/*/*"),glob("koha-tmpl/intranet-tmpl/*/*/*/*"),glob("koha-tmpl/intranet-tmpl/*/*/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*/*"),glob("koha-tmpl/opac-tmpl/*/*/*/*/*")) {
+ 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/
-=pod
+ elsif ( $dirlevel =~ /(misc|rss)/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(INST_LIBDIR)/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # misc & rss are copied to koha,
-excluding non-files, CVS files and whitespace in filenames.
+# 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,
-=cut
- if ((-f $src) && ($src !~ /(\/CVS\/|\s)/)) {
- $result{$src} = '$(INST_LIBDIR)/koha/templates/'.$src;
- }
- }
-=pod
+ elsif ( $file !~ /\.pl/ && $dirlevel =~ /etc/ ) { $result{ ($dirlevel ? $dirlevel . '/' . $file : $file) } = '$(PREFIX)/share/koha/' . ($dirlevel ? $dirlevel . '/' . $file : $file); } # Misc etc to koha/etc
-etc files are copied to /usr/share/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";
-=cut
- # Misc etc to koha/etc
- foreach my $src (glob("etc/zebradb/*/*/*"),glob("etc/zebradb/*/*"),glob("etc/zebradb/*"),glob("etc/*")) {
- if (-f $src) {
- $result{$src} = '$(PREFIX)/share/koha/'.$src;
+ }
+ next;
}
}
-
-
return \%result;
}
ExtUtils::MakeMaker(3)
-=head1 AUTHOR
+=head1 AUTHORS
MJ Ray mjr at phonecoop.coop