16 changed files with 7888 additions and 0 deletions
@ -0,0 +1,285 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
|
|||
|
|||
#################### |
|||
# Variable Section # |
|||
#################### |
|||
|
|||
# Copyright 2000-2002 Katipo Communications |
|||
# |
|||
# 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 |
|||
|
|||
my $pretext='T '; |
|||
my $startnumber=1000; |
|||
my $pages=2; |
|||
my $libraryname='Copper Mountain Elementary'; |
|||
|
|||
# Shifts are given in millimeters. Positive numbers move up and to the right. |
|||
# These variables shift the whole page to account for printer differences. |
|||
my $shiftx=0; |
|||
my $shifty=0; |
|||
|
|||
#################### |
|||
|
|||
|
|||
|
|||
my $leftmargin=5; |
|||
my $rightmargin=3; |
|||
my $topmargin=18; |
|||
my $botmargin=10; |
|||
|
|||
|
|||
my $rightside=215; |
|||
my $topside=280; |
|||
|
|||
|
|||
my $barcodewidth=length("$pretext$startnumber")+2; |
|||
|
|||
my $bcwidthfactor=8-$barcodewidth/2; |
|||
print STDERR "$barcodewidth $bcwidthfactor\n"; |
|||
|
|||
my $width=$rightside-($leftmargin+$rightmargin); |
|||
my $height=$topside-$topmargin-$botmargin; |
|||
|
|||
print << "EOF"; |
|||
%!PS-Adobe-2.0 |
|||
%%Title: barcode.ps |
|||
%%Creator: Willem van Schaik |
|||
%%CreationDate: aug 1992 |
|||
%%Pages: 1 |
|||
%%DocumentFonts: Helvetica Code39 |
|||
%%BoundingBox: 0 0 595 842 |
|||
%%EndComments |
|||
|
|||
/newfont 10 dict def |
|||
newfont begin |
|||
/FontType 3 def |
|||
/FontMatrix [0.01 0 0 0.01 0 0] def |
|||
/FontBBox [0 0 100 100] def |
|||
|
|||
/Encoding 256 array def |
|||
0 1 255 {Encoding exch /.notdef put} for |
|||
Encoding 32 /barSpace put |
|||
Encoding 36 /barDollar put |
|||
Encoding 37 /barPercent put |
|||
Encoding 42 /barAsterisk put |
|||
Encoding 43 /barPlus put |
|||
Encoding 45 /barHyphen put |
|||
Encoding 46 /barPeriod put |
|||
Encoding 47 /barSlash put |
|||
Encoding 48 /bar0 put |
|||
Encoding 49 /bar1 put |
|||
Encoding 50 /bar2 put |
|||
Encoding 51 /bar3 put |
|||
Encoding 52 /bar4 put |
|||
Encoding 53 /bar5 put |
|||
Encoding 54 /bar6 put |
|||
Encoding 55 /bar7 put |
|||
Encoding 56 /bar8 put |
|||
Encoding 57 /bar9 put |
|||
Encoding 65 /barA put |
|||
Encoding 66 /barB put |
|||
Encoding 67 /barC put |
|||
Encoding 68 /barD put |
|||
Encoding 69 /barE put |
|||
Encoding 70 /barF put |
|||
Encoding 71 /barG put |
|||
Encoding 72 /barH put |
|||
Encoding 73 /barI put |
|||
Encoding 74 /barJ put |
|||
Encoding 75 /barK put |
|||
Encoding 76 /barL put |
|||
Encoding 77 /barM put |
|||
Encoding 78 /barN put |
|||
Encoding 79 /barO put |
|||
Encoding 80 /barP put |
|||
Encoding 81 /barQ put |
|||
Encoding 82 /barR put |
|||
Encoding 83 /barS put |
|||
Encoding 84 /barT put |
|||
Encoding 85 /barU put |
|||
Encoding 86 /barV put |
|||
Encoding 87 /barW put |
|||
Encoding 88 /barX put |
|||
Encoding 89 /barY put |
|||
Encoding 90 /barZ put |
|||
|
|||
/CharProcs 45 dict def |
|||
CharProcs begin |
|||
/.notdef {} def |
|||
/barSpace {0 7 17 17 7 7 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barDollar {0 7 17 7 17 7 17 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barPercent {0 7 7 7 17 7 17 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barAsterisk {0 7 17 7 7 17 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barPlus {0 7 17 7 7 7 17 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barHyphen {0 7 17 7 7 7 7 17 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barPeriod {0 17 17 7 7 7 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barSlash {0 7 17 7 17 7 7 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar0 {0 7 7 7 17 17 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar1 {0 17 7 7 17 7 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar2 {0 7 7 17 17 7 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar3 {0 17 7 17 17 7 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar4 {0 7 7 7 17 17 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar5 {0 17 7 7 17 17 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar6 {0 7 7 17 17 17 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar7 {0 7 7 7 17 7 7 17 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar8 {0 17 7 7 17 7 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/bar9 {0 7 7 17 17 7 7 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barA {0 17 7 7 7 7 17 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barB {0 7 7 17 7 7 17 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barC {0 17 7 17 7 7 17 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barD {0 7 7 7 7 17 17 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barE {0 17 7 7 7 17 17 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barF {0 7 7 17 7 17 17 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barG {0 7 7 7 7 7 17 17 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barH {0 17 7 7 7 7 17 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barI {0 7 7 17 7 7 17 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barJ {0 7 7 7 7 17 17 17 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barK {0 17 7 7 7 7 7 7 17 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barL {0 7 7 17 7 7 7 7 17 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barM {0 17 7 17 7 7 7 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barN {0 7 7 7 7 17 7 7 17 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barO {0 17 7 7 7 17 7 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barP {0 7 7 17 7 17 7 7 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barQ {0 7 7 7 7 7 7 17 17 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barR {0 17 7 7 7 7 7 17 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barS {0 7 7 17 7 7 7 17 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barT {0 7 7 7 7 17 7 17 17 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barU {0 17 17 7 7 7 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barV {0 7 17 17 7 7 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barW {0 17 17 17 7 7 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barX {0 7 17 7 7 17 7 7 7 17 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barY {0 17 17 7 7 17 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
/barZ {0 7 17 17 7 17 7 7 7 7 newpath 93 0 moveto 5 {dup 0 100 rlineto |
|||
neg 0 rlineto 0 -100 rlineto closepath add neg 0 rmoveto} repeat fill} def |
|||
end |
|||
|
|||
/BuildChar |
|||
{ 100 0 0 0 93 100 setcachedevice |
|||
exch |
|||
begin |
|||
Encoding exch get |
|||
CharProcs exch get |
|||
end |
|||
exec |
|||
} def |
|||
end |
|||
|
|||
/Code39 newfont definefont pop |
|||
|
|||
%%EndProlog |
|||
|
|||
EOF |
|||
|
|||
my $number=$startnumber; |
|||
while ($page<$pages) { |
|||
my $data=''; |
|||
for ($i=$leftmargin; $i<$rightside-$rightmargin; $i+=$width/4) { |
|||
for ($j=$botmargin; $j<$topside-$topmargin-$botmargin; $j+=$height/20) { |
|||
my $x=$i+$width/8; |
|||
my $y=$j+$height/40; |
|||
my $schooly=$y+5.8; |
|||
my $labely=$y-2.2; |
|||
my $lox=$x-2; |
|||
my $hix=$x+2; |
|||
my $loy=$y-2; |
|||
my $hiy=$y+2; |
|||
$data.=<<"EOF"; |
|||
$x $y moveto |
|||
/Code39 findfont [$bcwidthfactor 0 0 5 0 0] makefont setfont |
|||
(*$pretext$number*) dup stringwidth pop 2 div neg 0 rmoveto show |
|||
/Helvetica findfont 1.7 scalefont setfont |
|||
$x $schooly moveto |
|||
($schoolname) dup stringwidth pop 2 div neg 0 rmoveto show |
|||
/Helvetica findfont 2.3 scalefont setfont |
|||
$x $labely moveto |
|||
($pretext$number) dup stringwidth pop 2 div neg 0 rmoveto show |
|||
|
|||
|
|||
EOF |
|||
$number++; |
|||
} |
|||
} |
|||
|
|||
|
|||
$page++; |
|||
print << "EOF"; |
|||
%%Page: $page $page |
|||
%%PagerFonts: |
|||
|
|||
$shiftx $shifty translate |
|||
72 25.4 div dup scale |
|||
|
|||
/Code39 findfont [4 0 0 5 0 0] makefont setfont |
|||
/Times-Roman findfont |
|||
1 scalefont |
|||
setfont |
|||
$data |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
showpage |
|||
|
|||
|
|||
EOF |
|||
} |
|||
print "%%Trailer\n"; |
@ -0,0 +1,400 @@ |
|||
#!/usr/bin/perl |
|||
|
|||
sub guess_kohahtmldir ($;$); |
|||
#---------------------------------------------------------- |
|||
# DIRECTORIES where source code is located |
|||
#---------------------------------------------------------- |
|||
my $kohadir=`pwd`; |
|||
chomp $kohadir; |
|||
my $kohahtmldir=guess_kohahtmldir($kohadir, "/koha/koha/koha-html/"); |
|||
my $roothomedir=(getpwuid(0))[7]; # ~root is traditionally just / |
|||
$roothomedir='/root' unless defined $roothomedir; |
|||
|
|||
my $has_kohaautobuild_conf = 0; |
|||
|
|||
if (-e "$roothomedir/.kohaautobuild.conf") { |
|||
open C, "<$roothomedir/.kohaautobuild.conf"; |
|||
while (<C>) { |
|||
chomp; |
|||
if (/kohadir=(.*)/) { |
|||
$kohadir=$1; |
|||
} |
|||
if (/kohahtmldir=(.*)/) { |
|||
$kohahtmldir=$1; |
|||
} |
|||
} |
|||
$has_kohaautobuild_conf = 1; |
|||
} |
|||
|
|||
my $input; |
|||
|
|||
print qq | |
|||
*************************************** |
|||
* Welcome to the Koha Release Builder * |
|||
*************************************** |
|||
|
|||
This script will automatically build a release tarball. |
|||
|
|||
The script assumes that you already have the koha and koha-html modules checked |
|||
out for the release that you want to build, although it will update the modules |
|||
before building. |
|||
|
|||
|; |
|||
print "\nWhere is the 'koha' cvs module located [$kohadir]: "; |
|||
chomp($input = <STDIN>); |
|||
if ($input) { |
|||
$kohadir=$input; |
|||
$kohahtmldir=guess_kohahtmldir($kohadir, $kohahtmldir) unless $has_kohaautobuild_conf; |
|||
} |
|||
|
|||
|
|||
print "\nWhere is the 'koha-html' cvs module located [$kohahtmldir]: "; |
|||
chomp($input = <STDIN>); |
|||
if ($input) { |
|||
$kohahtmldir=$input; |
|||
} |
|||
|
|||
open (C, ">$roothomedir/.kohaautobuild.conf"); |
|||
print C qq| |
|||
kohadir=$kohadir |
|||
kohahtmldir=$kohahtmldir |
|||
|; |
|||
|
|||
#---------------------------------------------------------- |
|||
# which VERSION are we building ? |
|||
#---------------------------------------------------------- |
|||
print "\n\nGuessing at next release version. You may need to enter your SourceForge password...\n"; |
|||
open (CVSLOG, "cvs log buildrelease|"); |
|||
my $symbolicnamessection=0; |
|||
my $symbolicnames; |
|||
my $highestversion; |
|||
my $highestrc; |
|||
my $released; |
|||
my $majorversion; |
|||
my $majorversionrc; |
|||
while (<CVSLOG>) { |
|||
if (/^symbolic names:/) { |
|||
$symbolicnamessection=1; |
|||
} |
|||
if ($symbolicnamessection && (/^\s+([^:]*):/)) { |
|||
my $tag=$1; |
|||
if ($tag=~/R_(.*)/) { |
|||
my $version=''; |
|||
my $rc=0; |
|||
my $id=$1; |
|||
$id=~s/-/\./g; |
|||
if ($id =~/(.*)RC(.*)/) { |
|||
$version=$1; |
|||
$rc=$2; |
|||
$version=~m#(\d+\.\d+)\.#; |
|||
if (versioncompare($version, $majorversion->{$1})) { |
|||
$majorversion->{$1}=$version; |
|||
$majorversionrc->{$1}=$rc; |
|||
} |
|||
if (versioncompare($version, $highestversion)) { |
|||
$highestversion=$version; |
|||
$released=0; |
|||
$highestrc=$rc; |
|||
} |
|||
} else { |
|||
$version=$id; |
|||
$version=~m#(\d+\.\d+)\.#; |
|||
if (versioncompare($version, $majorversion->{$1})) { |
|||
$majorversion->{$1}=$version; |
|||
$majorversionrc->{$1}=0; |
|||
} |
|||
if (versioncompare($version, $highestversion)) { |
|||
$highestversion=$version; |
|||
$released=1; |
|||
$highestrc=0; |
|||
} |
|||
} |
|||
$symbolicnames->{$version}->{$rc}=1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
my $releaseversion=''; |
|||
my $currentversion=''; |
|||
|
|||
my $branchdata=`grep buildrelease CVS/Entries`; |
|||
chomp $branchdata; |
|||
my $branch=(split(m#/#, $branchdata))[5]; |
|||
|
|||
if ($branch eq 'Trel-1-2') { |
|||
$highestversion=$majorversion->{'1.2'}; |
|||
$highestrc=$majorversionrc->{'1.2'}; |
|||
($highestrc) ? ($released=0) : ($released=1); |
|||
} |
|||
|
|||
if ($released) { |
|||
my @components=split(/\./, $highestversion); |
|||
$components[$#components]++; |
|||
$nexthighestversion=join '.', @components; |
|||
my $minornumber=(split(/\./, $highestversion))[1]; |
|||
if ($minornumber/2 == int($minornumber/2)) { |
|||
$releaseversion=$nexthighestversion."RC1"; |
|||
} else { |
|||
$releaseversion=$nexthighestversion; |
|||
} |
|||
$currentversion=$highestversion; |
|||
} else { |
|||
$releaseversion=$highestversion."RC".($highestrc+1); |
|||
$currentversion=$highestversion."RC$highestrc"; |
|||
} |
|||
|
|||
|
|||
print "Current release tag is $currentversion.\n"; |
|||
print "\nWould you like to bump that up to $releaseversion (or manually enter version)? [Y]/N: "; |
|||
chomp($input = <STDIN>); |
|||
my $tagging_needs_confirmation = 0; |
|||
if ($input =~ /^n/i) { |
|||
print "\nWould you like to rebuild the $currentversion tarball? Y/[N]: "; |
|||
chomp($input = <STDIN>); |
|||
print STDERR "releaseversion=($releaseversion), currentversion=($currentversion)\n";#XXXZZZ |
|||
if ($input =~ /^y/i) { |
|||
$releaseversion=$currentversion; |
|||
$tagging_needs_confirmation = 1; |
|||
} else { |
|||
print "What should the new version be? [$releaseversion]: "; |
|||
chomp ($input=<STDIN>); |
|||
if ($input) { |
|||
$releaseversion=$input; |
|||
} |
|||
} |
|||
} else { |
|||
print "What should the new version be? [$releaseversion]: "; |
|||
chomp ($input=<STDIN>); |
|||
if ($input) { |
|||
$releaseversion=$input; |
|||
} |
|||
} |
|||
|
|||
|
|||
print "\nWould you like to tag the CVS repository?\n(answer yes if releasing tarball) Y/[N]: "; |
|||
chomp ($input=<STDIN>); |
|||
my $cvstag=0; |
|||
# FIXME: This means anything other than n will tag; too dangerous? |
|||
if ($input=~/^y/i) { |
|||
$cvstag=1; |
|||
} |
|||
|
|||
|
|||
if ($cvstag && $tagging_needs_confirmation) { |
|||
print "\n\n"; |
|||
print "Do not do this if you have released the tarball to anybody, as it will\n"; |
|||
print "overwrite the tag marking the files that were in the tarball:\n\n"; |
|||
print "Confirm that you want to overwrite the tag for $releaseversion? Y/[N]: "; |
|||
chomp($input = <STDIN>); |
|||
if ($input =~ /^n/i || $input !~ /\S/) { |
|||
print "\nStopping. Please re-run buildrelease now.\n"; |
|||
exit; |
|||
} |
|||
} |
|||
|
|||
|
|||
my $sfuserid=''; |
|||
if ($cvsroot=$ENV{'CVSROOT'}) { |
|||
$cvsroot=~m#(.*)\@cvs#; |
|||
$sfuserid=$1; |
|||
} else { |
|||
$ENV{'CVS_RSH'}='ssh'; |
|||
print "\nWhat is your userid at SourceForge: "; |
|||
chomp($input = <STDIN>); |
|||
if ($input) { |
|||
$sfuserid=$input; |
|||
} |
|||
$ENV{'CVSROOT'}="$sfuserid\@cvs.koha.sourceforge.net:/cvsroot/koha"; |
|||
} |
|||
my $tagname=$releaseversion; |
|||
$tagname=~s/\./-/g; |
|||
|
|||
print qq| |
|||
Updating your checked-out copy of the 'koha' CVS files. |
|||
You may need to enter your SourceForge password. |
|||
Using $kohadir. |
|||
|; |
|||
chdir($kohadir); |
|||
system("cvs update"); |
|||
if ($cvstag) { |
|||
print qq| |
|||
Tagging koha with tag R_$tagname |
|||
|; |
|||
system("cvs tag -F R_$tagname"); |
|||
} |
|||
print qq| |
|||
Updating your checked-out copy of the 'koha-html' CVS files. |
|||
You may need to enter your SourceForge password. |
|||
Using $kohahtmldir. |
|||
|; |
|||
chdir($kohahtmldir) || die "$kohahtmldir: $!\n"; |
|||
system("cvs update"); |
|||
|
|||
if ($cvstag) { |
|||
print qq| |
|||
Tagging koha-html with tag R_$tagname |
|||
|; |
|||
system("cvs tag -F R_$tagname"); |
|||
} |
|||
|
|||
#---------------------------------------------------------- |
|||
# MOVE files to /tmp and build tar.gz |
|||
#---------------------------------------------------------- |
|||
my $rootdir="/tmp/koha-".$releaseversion; |
|||
system("rm -rf $rootdir"); |
|||
mkdir ($rootdir, 0700); |
|||
chdir($rootdir) || die "$rootdir: $!\n"; |
|||
|
|||
mkdir("intranet-cgi", 0755); |
|||
mkdir("intranet-html", 0755); |
|||
mkdir("opac-cgi", 0755); |
|||
mkdir("opac-html", 0755); |
|||
mkdir("scripts", 0755); |
|||
mkdir("scripts/z3950daemon", 0755); |
|||
mkdir("modules", 0755); |
|||
mkdir("docs", 0755); |
|||
|
|||
# Create koha.version file |
|||
open (KV, ">$rootdir/koha.version"); |
|||
print KV "$releaseversion\n"; |
|||
close KV; |
|||
|
|||
# Copy all CVS files to intranet-cgi |
|||
system("cp -a $kohadir/* $rootdir/intranet-cgi"); |
|||
|
|||
# Move C4 to modules directory |
|||
system("mv $rootdir/intranet-cgi/C4 $rootdir/modules"); |
|||
|
|||
# Move files from intranet-cgi to root of tarball |
|||
system("mv $rootdir/intranet-cgi/INSTALL $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/ChangeLog* $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/Hints $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/LICENSE $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/News $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/README $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/TODO $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/installer.pl $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/koha.upgrade $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/Install.pm $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/kohareporter $rootdir"); |
|||
chmod 0770, "$rootdir/installer.pl"; |
|||
chmod 0770, "$rootdir/koha.upgrade"; |
|||
system("mv $rootdir/intranet-cgi/koha.conf $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/koha.mysql $rootdir"); |
|||
system("mv $rootdir/intranet-cgi/sampledata-1.2 $rootdir"); |
|||
system("gzip -9 $rootdir/sampledata-1.2"); |
|||
|
|||
# Copy files from intranet-cgi to opac-cgi |
|||
system("cp $rootdir/intranet-cgi/detail.pl $rootdir/opac-cgi"); |
|||
system("cp $rootdir/intranet-cgi/moredetail.pl $rootdir/opac-cgi"); |
|||
system("cp $rootdir/intranet-cgi/search.pl $rootdir/opac-cgi"); |
|||
system("cp $rootdir/intranet-cgi/subjectsearch.pl $rootdir/opac-cgi"); |
|||
system("cp $rootdir/intranet-cgi/logout.pl $rootdir/opac-cgi"); |
|||
system("mv $rootdir/intranet-cgi/opac/* $rootdir/opac-cgi"); |
|||
system("rmdir $rootdir/intranet-cgi/opac"); |
|||
|
|||
|
|||
# Move files from intranet-cgi to /scripts/ directory |
|||
system("mv $rootdir/intranet-cgi/telnet $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/tkperl $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/translator $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/updater $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/misc $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/marc $rootdir/scripts"); |
|||
system("mv $rootdir/intranet-cgi/acqui.simple/bulkmarcimport.pl $rootdir/scripts/z3950daemon/"); |
|||
system("mv $rootdir/intranet-cgi/acqui.simple/processz3950queue $rootdir/scripts/z3950daemon/"); |
|||
system("mv $rootdir/intranet-cgi/acqui.simple/z3950-daemon-launch.sh $rootdir/scripts/z3950daemon/"); |
|||
system("mv $rootdir/intranet-cgi/acqui.simple/z3950-daemon-shell.sh $rootdir/scripts/z3950daemon/"); |
|||
|
|||
|
|||
# Remove extraneous files from intranet-cgi |
|||
system("rm -f $rootdir/intranet-cgi/ChangeLog.bak"); |
|||
system("rm -f $rootdir/intranet-cgi/SendMessages"); |
|||
system("rm -f $rootdir/intranet-cgi/buildrelease"); |
|||
system("rm -f $rootdir/intranet-cgi/database.mysql"); |
|||
system("rm -f $rootdir/intranet-cgi/installer-lite.pl"); |
|||
# FIXME: The following two lines look suspicious |
|||
#system("rm -f $rootdir/intranet-cgi/koha-1.2.0.tar.gz"); |
|||
#system("rm -f $rootdir/intranet-cgi/rel-1-2"); |
|||
system("rm -f $rootdir/intranet-cgi/testKoha.pl"); |
|||
system("rm -rf $rootdir/intranet-cgi/html-template"); |
|||
system("rm -rf $rootdir/intranet-cgi/t"); |
|||
|
|||
# Set all .pl scripts executable |
|||
system("find $rootdir/intranet-cgi -name '*.pl' -exec chmod a+x \\{\\} \\;"); |
|||
# Copy all CVS files to intranet-html and opac-html |
|||
system("cp -a $kohahtmldir/intranet-html/* $rootdir/intranet-html"); |
|||
system("cp -a $kohahtmldir/opac-html/* $rootdir/opac-html"); |
|||
|
|||
# Move koha-tmpl files |
|||
system("mv $rootdir/intranet-cgi/koha-tmpl/opac-tmpl/* $rootdir/opac-html"); |
|||
system("mv $rootdir/intranet-cgi/koha-tmpl/intranet-tmpl/* $rootdir/intranet-html"); |
|||
system("rm -rf $rootdir/intranet-cgi/koha-tmpl"); |
|||
|
|||
# Remove extraneous files from opac-html |
|||
system("rm -f $rootdir/opac-html/koha.mo"); |
|||
system("rm -f $rootdir/opac-html/koha.pot"); |
|||
system("rm -f $rootdir/opac-html/test"); |
|||
|
|||
# Remove extraneous files from intranet-html |
|||
system("rm -f $rootdir/intranet-html/koha.pot"); |
|||
system("rm -f $rootdir/intranet-html/results.html"); |
|||
system("rm -f $rootdir/intranet-html/test"); |
|||
|
|||
# Remove junk from directory |
|||
system("find $rootdir -name CVS -exec rm -rf \\{\\} \\; 2>/dev/null"); |
|||
system("find $rootdir -name *~ -exec rm -rf \\{\\} \\; 2>/dev/null"); |
|||
system("find $rootdir -name .#* -exec rm -rf \\{\\} \\; 2>/dev/null"); |
|||
|
|||
|
|||
if (-e "$roothomedir/docs") { |
|||
print "Copying docs folder from $roothomedir/docs..."; |
|||
system("cp -r $roothomedir/docs/* $rootdir/docs/"); |
|||
} else { |
|||
print "I would have copied the docs from from $roothomedir/docs, but I couldn't find it.\n"; |
|||
print "Press <ENTER> to continue...\n"; |
|||
<STDIN>; |
|||
} |
|||
|
|||
chdir("/tmp"); |
|||
system("tar czf /tmp/koha-$releaseversion.tar.gz koha-".$releaseversion); |
|||
system("rm -rf $rootdir"); |
|||
|
|||
print qq| |
|||
============ |
|||
= ALL DONE = |
|||
============ |
|||
|
|||
Your new tarball is located in /tmp/koha-$releaseversion.tar.gz |
|||
|
|||
|; |
|||
|
|||
|
|||
sub versioncompare { |
|||
my $v1=shift; |
|||
my $v2=shift; |
|||
my @v1=split(/\./, $v1); |
|||
my @v2=split(/\./, $v2); |
|||
my $count=$#v1; |
|||
($#v2>$count) && ($count=$#v2); |
|||
for (my $index=0; $index<$count; $index++) { |
|||
if ($v1[$index]>$v2[$index]) { |
|||
return 1; |
|||
} |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
sub guess_kohahtmldir ($;$) { |
|||
my($kohadir, $default) = @_; |
|||
my $kohahtmldir; |
|||
# It probably makes sense to assume that the 'koha' and 'koha-html' |
|||
# modules are checked out within the same parent directory |
|||
if (-d $kohadir && $kohadir =~ /^(.*)\/[^\/]+$/) { |
|||
$kohahtmldir = "$1/koha-html" |
|||
} else { |
|||
$kohahtmldir = $default; |
|||
} |
|||
return $kohahtmldir; |
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,61 @@ |
|||
Manual Release Testing |
|||
|
|||
|
|||
The following document outlines some steps to follow to manually test |
|||
for bugs in a release candidate. |
|||
|
|||
When reporting bugs, please use <http://bugs.koha.org/>. Please |
|||
include information about: What OS, release, and distribution you're |
|||
using. Also, which webserver (including version number), which RDMS |
|||
(including version number), and the version of Perl you're running. |
|||
Do not be too suprised if a developer gets back to you with a request |
|||
for more information about your environment. |
|||
|
|||
|
|||
1) Installing Koha. |
|||
You should be able to install Koha using installer.pl. We're |
|||
hoping that this method works cleanly with RedHat and Debian Linux |
|||
(at least). We'd like to hear problem reports about any OS you're |
|||
using though. |
|||
|
|||
2) Setting things up. |
|||
Please try to perform the following tasks: |
|||
+ Add a couple of branches |
|||
+ Edit a branch |
|||
+ Add a printer |
|||
+ Edit a printer |
|||
+ Add some item types (make sure to create at least one |
|||
itemtype with charges, and one itemtype with a 0 day loan |
|||
length) |
|||
+ Edit an item type |
|||
|
|||
3) Cataloguing |
|||
Please try to perform the following tasks: |
|||
+ Add a book using simple acquisitions |
|||
+ Add a book by importing a marc record |
|||
+ Add a book by using the Z39.50 client |
|||
+ Reserve a book for a borrower (after adding members, of course) |
|||
+ Modify a book |
|||
|
|||
4) Members |
|||
Please try to perform the following tasks: |
|||
+ Add some members (test using the autoMemberNum system |
|||
preference as well) |
|||
+ Edit some members |
|||
|
|||
5) Circulation |
|||
Please try to perform the following tasks: |
|||
+ Issue some books to various patrons |
|||
+ Return books |
|||
+ Check for appropriate charges |
|||
+ Check for non-circulating books (ie reference materials) |
|||
+ Check for appropriate due dates |
|||
+ Reserve a book |
|||
+ Attempt to issue a reserved book |
|||
+ Issue a book to a patron who has a reserve waiting |
|||
|
|||
|
|||
If you find any bugs or problems, please report through http://bugs.koha.org/. |
|||
|
|||
Alternatively you can subscribe to the koha-devel mailing list. Information |
|||
about doing this can be found at http://www.koha.org/ |
@ -0,0 +1,99 @@ |
|||
Example /etc/koha.conf file entries |
|||
|
|||
database=Koha |
|||
hostname=localhost |
|||
user=Koha |
|||
pass=xxxxxx |
|||
includes=/usr/local/www/koha/htdocs/includes |
|||
|
|||
Please note the final line (includes=path) - The path entry can be |
|||
used as an alternative to manually editing the path in Output.pm file |
|||
(see INSTALL manual). |
|||
|
|||
|
|||
-------------------------------------------------------------------------------- |
|||
Example apache httpd.conf entries: |
|||
Koha makes extensive use of Server Side Includes (SSI): |
|||
|
|||
|
|||
http://httpd.apache.org/docs/mod/mod_include.html |
|||
|
|||
If your page headers and footers do not show, then you may need to |
|||
re-configure your web server. |
|||
|
|||
Here is an example of entries suitable for Apache httpd.conf: |
|||
|
|||
|
|||
<VirtualHost 111.222.333.1> |
|||
ServerName koha.example.com |
|||
ServerPath /var/www/library |
|||
DocumentRoot /var/www/library/koha/html |
|||
Alias /images/ "/var/www/library/koha/html/images/" |
|||
ScriptAlias /cgi-bin/koha/ "/var/www/library/koha/cgi-bin/" |
|||
SetEnv PERL5LIB "/var/www/library/modules" |
|||
ErrorLog /var/log/httpd/koha-error_log |
|||
# |
|||
# ======== koha uses Server Side Includes ========= |
|||
# Normally here, use the same path as "DocRoot" above |
|||
<Directory "/var/www/library/koha/html"> |
|||
# |
|||
AllowOverride None |
|||
# |
|||
# First, you MUST enable +Includes or +IncludesNoExec |
|||
# |
|||
Options +Includes -FollowSymlinks -Indexes |
|||
# |
|||
# Second, you must also configure one of following: |
|||
# |
|||
# 1. server-parsed content (SSI) for files ending in ".html" |
|||
# |
|||
AddHandler server-parsed .html |
|||
# |
|||
# ...OR... (not "AND" !!!!)... |
|||
# |
|||
# 2. Allow SSI if executable bit set using "XBitHack" |
|||
# XBitHack on|off|full |
|||
# |
|||
# XBitHack on - any file that has the user-execute bit |
|||
# - set will be treated as a server-parsed html doc. |
|||
# - The "full" = "on" but, in addition, will test the |
|||
# - group-execute bit. If the group execute bit is set |
|||
# - then the Last-modified date of the returned file |
|||
# - is sent. If group-execute bit is not set, then no |
|||
# - last-modified date is sent. |
|||
# - Setting this bit allows clients and proxies to |
|||
# - cache the result of the request! |
|||
# |
|||
# For example, enable XBitHack (on) if you want to |
|||
# - include non-executable content in documents like: |
|||
# <!--#include virtual="/includes/footer.inc" --> |
|||
# <!--#include virtual="/cgi-bin/counter.pl" --> |
|||
# |
|||
# XBitHack on |
|||
# |
|||
# Remember - do not use XBitHack if using AddHandler! |
|||
</Directory> |
|||
</VirtualHost> |
|||
|
|||
<VirtualHost 111.222.333.1> |
|||
ServerName opac.example.com |
|||
ServerPath /var/www/library |
|||
DocumentRoot /var/www/library/opac/html |
|||
Alias /images/ "/var/www/library/opac/html/images/" |
|||
ScriptAlias /cgi-bin/opac/ "/var/www/library/opac/cgi-bin/" |
|||
SetEnv PERL5LIB "/var/www/library/modules" |
|||
ErrorLog /var/log/httpd/opac-error_log |
|||
# |
|||
<Directory "/var/www/library/opac/html"> |
|||
AllowOverride None |
|||
Options +Includes -FollowSymLinks -Indexes |
|||
AddHandler server-parsed .html |
|||
</Directory> |
|||
</VirtualHost> |
|||
|
|||
|
|||
Read your web server docs for more information about how Server Side |
|||
Includes work. |
|||
|
|||
|
|||
|
@ -0,0 +1,340 @@ |
|||
GNU GENERAL PUBLIC LICENSE |
|||
Version 2, June 1991 |
|||
|
|||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
|||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
Everyone is permitted to copy and distribute verbatim copies |
|||
of this license document, but changing it is not allowed. |
|||
|
|||
Preamble |
|||
|
|||
The licenses for most software are designed to take away your |
|||
freedom to share and change it. By contrast, the GNU General Public |
|||
License is intended to guarantee your freedom to share and change free |
|||
software--to make sure the software is free for all its users. This |
|||
General Public License applies to most of the Free Software |
|||
Foundation's software and to any other program whose authors commit to |
|||
using it. (Some other Free Software Foundation software is covered by |
|||
the GNU Library General Public License instead.) You can apply it to |
|||
your programs, too. |
|||
|
|||
When we speak of free software, we are referring to freedom, not |
|||
price. Our General Public Licenses are designed to make sure that you |
|||
have the freedom to distribute copies of free software (and charge for |
|||
this service if you wish), that you receive source code or can get it |
|||
if you want it, that you can change the software or use pieces of it |
|||
in new free programs; and that you know you can do these things. |
|||
|
|||
To protect your rights, we need to make restrictions that forbid |
|||
anyone to deny you these rights or to ask you to surrender the rights. |
|||
These restrictions translate to certain responsibilities for you if you |
|||
distribute copies of the software, or if you modify it. |
|||
|
|||
For example, if you distribute copies of such a program, whether |
|||
gratis or for a fee, you must give the recipients all the rights that |
|||
you have. You must make sure that they, too, receive or can get the |
|||
source code. And you must show them these terms so they know their |
|||
rights. |
|||
|
|||
We protect your rights with two steps: (1) copyright the software, and |
|||
(2) offer you this license which gives you legal permission to copy, |
|||
distribute and/or modify the software. |
|||
|
|||
Also, for each author's protection and ours, we want to make certain |
|||
that everyone understands that there is no warranty for this free |
|||
software. If the software is modified by someone else and passed on, we |
|||
want its recipients to know that what they have is not the original, so |
|||
that any problems introduced by others will not reflect on the original |
|||
authors' reputations. |
|||
|
|||
Finally, any free program is threatened constantly by software |
|||
patents. We wish to avoid the danger that redistributors of a free |
|||
program will individually obtain patent licenses, in effect making the |
|||
program proprietary. To prevent this, we have made it clear that any |
|||
patent must be licensed for everyone's free use or not licensed at all. |
|||
|
|||
The precise terms and conditions for copying, distribution and |
|||
modification follow. |
|||
|
|||
GNU GENERAL PUBLIC LICENSE |
|||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
|||
|
|||
0. This License applies to any program or other work which contains |
|||
a notice placed by the copyright holder saying it may be distributed |
|||
under the terms of this General Public License. The "Program", below, |
|||
refers to any such program or work, and a "work based on the Program" |
|||
means either the Program or any derivative work under copyright law: |
|||
that is to say, a work containing the Program or a portion of it, |
|||
either verbatim or with modifications and/or translated into another |
|||
language. (Hereinafter, translation is included without limitation in |
|||
the term "modification".) Each licensee is addressed as "you". |
|||
|
|||
Activities other than copying, distribution and modification are not |
|||
covered by this License; they are outside its scope. The act of |
|||
running the Program is not restricted, and the output from the Program |
|||
is covered only if its contents constitute a work based on the |
|||
Program (independent of having been made by running the Program). |
|||
Whether that is true depends on what the Program does. |
|||
|
|||
1. You may copy and distribute verbatim copies of the Program's |
|||
source code as you receive it, in any medium, provided that you |
|||
conspicuously and appropriately publish on each copy an appropriate |
|||
copyright notice and disclaimer of warranty; keep intact all the |
|||
notices that refer to this License and to the absence of any warranty; |
|||
and give any other recipients of the Program a copy of this License |
|||
along with the Program. |
|||
|
|||
You may charge a fee for the physical act of transferring a copy, and |
|||
you may at your option offer warranty protection in exchange for a fee. |
|||
|
|||
2. You may modify your copy or copies of the Program or any portion |
|||
of it, thus forming a work based on the Program, and copy and |
|||
distribute such modifications or work under the terms of Section 1 |
|||
above, provided that you also meet all of these conditions: |
|||
|
|||
a) You must cause the modified files to carry prominent notices |
|||
stating that you changed the files and the date of any change. |
|||
|
|||
b) You must cause any work that you distribute or publish, that in |
|||
whole or in part contains or is derived from the Program or any |
|||
part thereof, to be licensed as a whole at no charge to all third |
|||
parties under the terms of this License. |
|||
|
|||
c) If the modified program normally reads commands interactively |
|||
when run, you must cause it, when started running for such |
|||
interactive use in the most ordinary way, to print or display an |
|||
announcement including an appropriate copyright notice and a |
|||
notice that there is no warranty (or else, saying that you provide |
|||
a warranty) and that users may redistribute the program under |
|||
these conditions, and telling the user how to view a copy of this |
|||
License. (Exception: if the Program itself is interactive but |
|||
does not normally print such an announcement, your work based on |
|||
the Program is not required to print an announcement.) |
|||
|
|||
These requirements apply to the modified work as a whole. If |
|||
identifiable sections of that work are not derived from the Program, |
|||
and can be reasonably considered independent and separate works in |
|||
themselves, then this License, and its terms, do not apply to those |
|||
sections when you distribute them as separate works. But when you |
|||
distribute the same sections as part of a whole which is a work based |
|||
on the Program, the distribution of the whole must be on the terms of |
|||
this License, whose permissions for other licensees extend to the |
|||
entire whole, and thus to each and every part regardless of who wrote it. |
|||
|
|||
Thus, it is not the intent of this section to claim rights or contest |
|||
your rights to work written entirely by you; rather, the intent is to |
|||
exercise the right to control the distribution of derivative or |
|||
collective works based on the Program. |
|||
|
|||
In addition, mere aggregation of another work not based on the Program |
|||
with the Program (or with a work based on the Program) on a volume of |
|||
a storage or distribution medium does not bring the other work under |
|||
the scope of this License. |
|||
|
|||
3. You may copy and distribute the Program (or a work based on it, |
|||
under Section 2) in object code or executable form under the terms of |
|||
Sections 1 and 2 above provided that you also do one of the following: |
|||
|
|||
a) Accompany it with the complete corresponding machine-readable |
|||
source code, which must be distributed under the terms of Sections |
|||
1 and 2 above on a medium customarily used for software interchange; or, |
|||
|
|||
b) Accompany it with a written offer, valid for at least three |
|||
years, to give any third party, for a charge no more than your |
|||
cost of physically performing source distribution, a complete |
|||
machine-readable copy of the corresponding source code, to be |
|||
distributed under the terms of Sections 1 and 2 above on a medium |
|||
customarily used for software interchange; or, |
|||
|
|||
c) Accompany it with the information you received as to the offer |
|||
to distribute corresponding source code. (This alternative is |
|||
allowed only for noncommercial distribution and only if you |
|||
received the program in object code or executable form with such |
|||
an offer, in accord with Subsection b above.) |
|||
|
|||
The source code for a work means the preferred form of the work for |
|||
making modifications to it. For an executable work, complete source |
|||
code means all the source code for all modules it contains, plus any |
|||
associated interface definition files, plus the scripts used to |
|||
control compilation and installation of the executable. However, as a |
|||
special exception, the source code distributed need not include |
|||
anything that is normally distributed (in either source or binary |
|||
form) with the major components (compiler, kernel, and so on) of the |
|||
operating system on which the executable runs, unless that component |
|||
itself accompanies the executable. |
|||
|
|||
If distribution of executable or object code is made by offering |
|||
access to copy from a designated place, then offering equivalent |
|||
access to copy the source code from the same place counts as |
|||
distribution of the source code, even though third parties are not |
|||
compelled to copy the source along with the object code. |
|||
|
|||
4. You may not copy, modify, sublicense, or distribute the Program |
|||
except as expressly provided under this License. Any attempt |
|||
otherwise to copy, modify, sublicense or distribute the Program is |
|||
void, and will automatically terminate your rights under this License. |
|||
However, parties who have received copies, or rights, from you under |
|||
this License will not have their licenses terminated so long as such |
|||
parties remain in full compliance. |
|||
|
|||
5. You are not required to accept this License, since you have not |
|||
signed it. However, nothing else grants you permission to modify or |
|||
distribute the Program or its derivative works. These actions are |
|||
prohibited by law if you do not accept this License. Therefore, by |
|||
modifying or distributing the Program (or any work based on the |
|||
Program), you indicate your acceptance of this License to do so, and |
|||
all its terms and conditions for copying, distributing or modifying |
|||
the Program or works based on it. |
|||
|
|||
6. Each time you redistribute the Program (or any work based on the |
|||
Program), the recipient automatically receives a license from the |
|||
original licensor to copy, distribute or modify the Program subject to |
|||
these terms and conditions. You may not impose any further |
|||
restrictions on the recipients' exercise of the rights granted herein. |
|||
You are not responsible for enforcing compliance by third parties to |
|||
this License. |
|||
|
|||
7. If, as a consequence of a court judgment or allegation of patent |
|||
infringement or for any other reason (not limited to patent issues), |
|||
conditions are imposed on you (whether by court order, agreement or |
|||
otherwise) that contradict the conditions of this License, they do not |
|||
excuse you from the conditions of this License. If you cannot |
|||
distribute so as to satisfy simultaneously your obligations under this |
|||
License and any other pertinent obligations, then as a consequence you |
|||
may not distribute the Program at all. For example, if a patent |
|||
license would not permit royalty-free redistribution of the Program by |
|||
all those who receive copies directly or indirectly through you, then |
|||
the only way you could satisfy both it and this License would be to |
|||
refrain entirely from distribution of the Program. |
|||
|
|||
If any portion of this section is held invalid or unenforceable under |
|||
any particular circumstance, the balance of the section is intended to |
|||
apply and the section as a whole is intended to apply in other |
|||
circumstances. |
|||
|
|||
It is not the purpose of this section to induce you to infringe any |
|||
patents or other property right claims or to contest validity of any |
|||
such claims; this section has the sole purpose of protecting the |
|||
integrity of the free software distribution system, which is |
|||
implemented by public license practices. Many people have made |
|||
generous contributions to the wide range of software distributed |
|||
through that system in reliance on consistent application of that |
|||
system; it is up to the author/donor to decide if he or she is willing |
|||
to distribute software through any other system and a licensee cannot |
|||
impose that choice. |
|||
|
|||
This section is intended to make thoroughly clear what is believed to |
|||
be a consequence of the rest of this License. |
|||
|
|||
8. If the distribution and/or use of the Program is restricted in |
|||
certain countries either by patents or by copyrighted interfaces, the |
|||
original copyright holder who places the Program under this License |
|||
may add an explicit geographical distribution limitation excluding |
|||
those countries, so that distribution is permitted only in or among |
|||
countries not thus excluded. In such case, this License incorporates |
|||
the limitation as if written in the body of this License. |
|||
|
|||
9. The Free Software Foundation may publish revised and/or new versions |
|||
of the General Public License from time to time. Such new versions will |
|||
be similar in spirit to the present version, but may differ in detail to |
|||
address new problems or concerns. |
|||
|
|||
Each version is given a distinguishing version number. If the Program |
|||
specifies a version number of this License which applies to it and "any |
|||
later version", you have the option of following the terms and conditions |
|||
either of that version or of any later version published by the Free |
|||
Software Foundation. If the Program does not specify a version number of |
|||
this License, you may choose any version ever published by the Free Software |
|||
Foundation. |
|||
|
|||
10. If you wish to incorporate parts of the Program into other free |
|||
programs whose distribution conditions are different, write to the author |
|||
to ask for permission. For software which is copyrighted by the Free |
|||
Software Foundation, write to the Free Software Foundation; we sometimes |
|||
make exceptions for this. Our decision will be guided by the two goals |
|||
of preserving the free status of all derivatives of our free software and |
|||
of promoting the sharing and reuse of software generally. |
|||
|
|||
NO WARRANTY |
|||
|
|||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
|||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
|||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
|||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
|||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
|||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
|||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
|||
REPAIR OR CORRECTION. |
|||
|
|||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
|||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
|||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
|||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
|||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
|||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
|||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
|||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
|||
POSSIBILITY OF SUCH DAMAGES. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
How to Apply These Terms to Your New Programs |
|||
|
|||
If you develop a new program, and you want it to be of the greatest |
|||
possible use to the public, the best way to achieve this is to make it |
|||
free software which everyone can redistribute and change under these terms. |
|||
|
|||
To do so, attach the following notices to the program. It is safest |
|||
to attach them to the start of each source file to most effectively |
|||
convey the exclusion of warranty; and each file should have at least |
|||
the "copyright" line and a pointer to where the full notice is found. |
|||
|
|||
<one line to give the program's name and a brief idea of what it does.> |
|||
Copyright (C) 19yy <name of author> |
|||
|
|||
This program 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. |
|||
|
|||
This program 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 this program; if not, write to the Free Software |
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
|
|||
|
|||
Also add information on how to contact you by electronic and paper mail. |
|||
|
|||
If the program is interactive, make it output a short notice like this |
|||
when it starts in an interactive mode: |
|||
|
|||
Gnomovision version 69, Copyright (C) 19yy name of author |
|||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
|||
This is free software, and you are welcome to redistribute it |
|||
under certain conditions; type `show c' for details. |
|||
|
|||
The hypothetical commands `show w' and `show c' should show the appropriate |
|||
parts of the General Public License. Of course, the commands you use may |
|||
be called something other than `show w' and `show c'; they could even be |
|||
mouse-clicks or menu items--whatever suits your program. |
|||
|
|||
You should also get your employer (if you work as a programmer) or your |
|||
school, if any, to sign a "copyright disclaimer" for the program, if |
|||
necessary. Here is a sample; alter the names: |
|||
|
|||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
|||
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
|||
|
|||
<signature of Ty Coon>, 1 April 1989 |
|||
Ty Coon, President of Vice |
|||
|
|||
This General Public License does not permit incorporating your program into |
|||
proprietary programs. If your program is a subroutine library, you may |
|||
consider it more useful to permit linking proprietary applications with the |
|||
library. If this is what you want to do, use the GNU Library General |
|||
Public License instead of this License. |
@ -0,0 +1,23 @@ |
|||
Here Ive tried to collect all the bugfixes and stable new features added |
|||
since 1.1.1 |
|||
|
|||
* Keyword, Title and Author searches sped up. |
|||
* Bugfix for borrower insert script. |
|||
* Bugfix for writing off fines. |
|||
* Budget breakdown in acquisitions is created on the fly (as opposed to written to an include) |
|||
* Lots of tidy ups in the search module |
|||
* Fixed display of reserves, on members and detail screens |
|||
* Bugfix for manual invoices |
|||
* Bugfix for catalogue maintenance |
|||
* Tidied up decimal places for item costs |
|||
* Bugfix to update group script |
|||
* New Feature - Can restrict a keyword search to a dewey number |
|||
* New Feature - Modify a borrower who is a guarantor causes relevant changes to be made to all their guarntees |
|||
* Bug fix for combined author and title search (wasnt picking up series title) |
|||
* Bugfix for reserve handling and charges |
|||
* New Feature - Class search |
|||
* New Feature - Dewey search |
|||
* New Feature - Deleting borrowers checks their accounts for reserves, issues and fines |
|||
* New Feature - translation script translator/ |
|||
* New Feature - Reading record, can be sorted by title or author, or date |
|||
* New Feature - Simple acquisitions module |
@ -0,0 +1,7 @@ |
|||
19/7/00 chris@katipo.co.nz |
|||
|
|||
Koha is distributed under the GPL license, please read the file LICENSE for |
|||
more details. |
|||
|
|||
To install the system please read INSTALL |
|||
|
@ -0,0 +1,72 @@ |
|||
Koha TODO File |
|||
============== |
|||
|
|||
There are many planned features and enhancements to be made to Koha. |
|||
If there are any items that you feel you can help with please subscribe |
|||
to the Koha mailling list. See http://www.koha.org/mailing_list.html |
|||
|
|||
|
|||
ITEMS TO BE DONE |
|||
================ |
|||
* Tidy Documentation, including INSTALL file. |
|||
* DatabaseOoptimisation. |
|||
* Installer and packaging. |
|||
* Tidy up HTML. |
|||
* Branch Transfers. |
|||
* Tidy Web Based Circulation. |
|||
* Make OPAC Customisable. |
|||
* Member Access |
|||
* Accession and Shelf Lists. |
|||
* Dewey Labels. |
|||
* MARC Support. |
|||
* Templating/"Skins". |
|||
* Translations. |
|||
* Z35.50 Support. |
|||
* Circulation Protocol. |
|||
|
|||
Below is a proposed roadmap of how new fetures will be implemented into |
|||
Koha. |
|||
|
|||
|
|||
PLANNED IMPLEMENTATION ROADMAP |
|||
============================== |
|||
1.2.x [stable] Planned Features |
|||
* Tweaking HTML to make Koha more generic. |
|||
* Installer + Packaging to incorporate updates as well as new installation. |
|||
* Branch transfers and tidying up web circulation. |
|||
* Customisable opac. |
|||
(so librarians can choose what to display to the public easily). |
|||
* Add websites, as both an item type, and as a biblio. |
|||
|
|||
== |
|||
1.3.x [devel] Planned Features |
|||
Targets include: |
|||
* Accession and shelf Lists. |
|||
* Dewey labels. |
|||
* MARC database changes "MARC invisible". |
|||
* Transition tools. |
|||
* Templating/"skins" feature. |
|||
* Ethnicity question. |
|||
* Ideas for member access. |
|||
* Z39.50 import. |
|||
|
|||
== |
|||
1.3.5 [devel] Planned Features: |
|||
* MARC front end changes "MARC visible". |
|||
* "beta" version of member access change (LDAP, etc). |
|||
* MARC import/export. |
|||
* Additional skins for language & look-n-feel. |
|||
* Z39.50 export (experimental). |
|||
|
|||
== |
|||
1.4.0 [stable] Planned Features: |
|||
* Additional templates (Skins and Languages/Translations). |
|||
* Ensure Koha mod_perl safe, test with persistent db connections. |
|||
|
|||
== |
|||
1.5.0 [devel] Planned Features: |
|||
* Z39.50 export. |
|||
* Accomodate batch imports/exports of biblio records in USMARC/UNIMARC format. |
|||
* Circulation protocol (NCIP). |
|||
* "Advanced" MARC features, XML |
|||
[OCLC, Library of Congress has early release version of these tools out) |
@ -0,0 +1,251 @@ |
|||
#!/bin/sh |
|||
# |
|||
# install - install a program, script, or datafile |
|||
# This comes from X11R5 (mit/util/scripts/install.sh). |
|||
# |
|||
# Copyright 1991 by the Massachusetts Institute of Technology |
|||
# |
|||
# Permission to use, copy, modify, distribute, and sell this software and its |
|||
# documentation for any purpose is hereby granted without fee, provided that |
|||
# the above copyright notice appear in all copies and that both that |
|||
# copyright notice and this permission notice appear in supporting |
|||
# documentation, and that the name of M.I.T. not be used in advertising or |
|||
# publicity pertaining to distribution of the software without specific, |
|||
# written prior permission. M.I.T. makes no representations about the |
|||
# suitability of this software for any purpose. It is provided "as is" |
|||
# without express or implied warranty. |
|||
# |
|||
# Calling this script install-sh is preferred over install.sh, to prevent |
|||
# `make' implicit rules from creating a file called install from it |
|||
# when there is no Makefile. |
|||
# |
|||
# This script is compatible with the BSD install script, but was written |
|||
# from scratch. It can only install one file at a time, a restriction |
|||
# shared with many OS's install programs. |
|||
|
|||
|
|||
# set DOITPROG to echo to test this script |
|||
|
|||
# Don't use :- since 4.3BSD and earlier shells don't like it. |
|||
doit="${DOITPROG-}" |
|||
|
|||
|
|||
# put in absolute paths if you don't have them in your path; or use env. vars. |
|||
|
|||
mvprog="${MVPROG-mv}" |
|||
cpprog="${CPPROG-cp}" |
|||
chmodprog="${CHMODPROG-chmod}" |
|||
chownprog="${CHOWNPROG-chown}" |
|||
chgrpprog="${CHGRPPROG-chgrp}" |
|||
stripprog="${STRIPPROG-strip}" |
|||
rmprog="${RMPROG-rm}" |
|||
mkdirprog="${MKDIRPROG-mkdir}" |
|||
|
|||
transformbasename="" |
|||
transform_arg="" |
|||
instcmd="$mvprog" |
|||
chmodcmd="$chmodprog 0755" |
|||
chowncmd="" |
|||
chgrpcmd="" |
|||
stripcmd="" |
|||
rmcmd="$rmprog -f" |
|||
mvcmd="$mvprog" |
|||
src="" |
|||
dst="" |
|||
dir_arg="" |
|||
|
|||
while [ x"$1" != x ]; do |
|||
case $1 in |
|||
-c) instcmd="$cpprog" |
|||
shift |
|||
continue;; |
|||
|
|||
-d) dir_arg=true |
|||
shift |
|||
continue;; |
|||
|
|||
-m) chmodcmd="$chmodprog $2" |
|||
shift |
|||
shift |
|||
continue;; |
|||
|
|||
-o) chowncmd="$chownprog $2" |
|||
shift |
|||
shift |
|||
continue;; |
|||
|
|||
-g) chgrpcmd="$chgrpprog $2" |
|||
shift |
|||
shift |
|||
continue;; |
|||
|
|||
-s) stripcmd="$stripprog" |
|||
shift |
|||
continue;; |
|||
|
|||
-t=*) transformarg=`echo $1 | sed 's/-t=//'` |
|||
shift |
|||
continue;; |
|||
|
|||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'` |
|||
shift |
|||
continue;; |
|||
|
|||
*) if [ x"$src" = x ] |
|||
then |
|||
src=$1 |
|||
else |
|||
# this colon is to work around a 386BSD /bin/sh bug |
|||
: |
|||
dst=$1 |
|||
fi |
|||
shift |
|||
continue;; |
|||
esac |
|||
done |
|||
|
|||
if [ x"$src" = x ] |
|||
then |
|||
echo "install: no input file specified" |
|||
exit 1 |
|||
else |
|||
true |
|||
fi |
|||
|
|||
if [ x"$dir_arg" != x ]; then |
|||
dst=$src |
|||
src="" |
|||
|
|||
if [ -d $dst ]; then |
|||
instcmd=: |
|||
chmodcmd="" |
|||
else |
|||
instcmd=mkdir |
|||
fi |
|||
else |
|||
|
|||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command |
|||
# might cause directories to be created, which would be especially bad |
|||
# if $src (and thus $dsttmp) contains '*'. |
|||
|
|||
if [ -f $src -o -d $src ] |
|||
then |
|||
true |
|||
else |
|||
echo "install: $src does not exist" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ x"$dst" = x ] |
|||
then |
|||
echo "install: no destination specified" |
|||
exit 1 |
|||
else |
|||
true |
|||
fi |
|||
|
|||
# If destination is a directory, append the input filename; if your system |
|||
# does not like double slashes in filenames, you may need to add some logic |
|||
|
|||
if [ -d $dst ] |
|||
then |
|||
dst="$dst"/`basename $src` |
|||
else |
|||
true |
|||
fi |
|||
fi |
|||
|
|||
## this sed command emulates the dirname command |
|||
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` |
|||
|
|||
# Make sure that the destination directory exists. |
|||
# this part is taken from Noah Friedman's mkinstalldirs script |
|||
|
|||
# Skip lots of stat calls in the usual case. |
|||
if [ ! -d "$dstdir" ]; then |
|||
defaultIFS=' |
|||
' |
|||
IFS="${IFS-${defaultIFS}}" |
|||
|
|||
oIFS="${IFS}" |
|||
# Some sh's can't handle IFS=/ for some reason. |
|||
IFS='%' |
|||
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` |
|||
IFS="${oIFS}" |
|||
|
|||
pathcomp='' |
|||
|
|||
while [ $# -ne 0 ] ; do |
|||
pathcomp="${pathcomp}${1}" |
|||
shift |
|||
|
|||
if [ ! -d "${pathcomp}" ] ; |
|||
then |
|||
$mkdirprog "${pathcomp}" |
|||
else |
|||
true |
|||
fi |
|||
|
|||
pathcomp="${pathcomp}/" |
|||
done |
|||
fi |
|||
|
|||
if [ x"$dir_arg" != x ] |
|||
then |
|||
$doit $instcmd $dst && |
|||
|
|||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && |
|||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && |
|||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && |
|||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi |
|||
else |
|||
|
|||
# If we're going to rename the final executable, determine the name now. |
|||
|
|||
if [ x"$transformarg" = x ] |
|||
then |
|||
dstfile=`basename $dst` |
|||
else |
|||
dstfile=`basename $dst $transformbasename | |
|||
sed $transformarg`$transformbasename |
|||
fi |
|||
|
|||
# don't allow the sed command to completely eliminate the filename |
|||
|
|||
if [ x"$dstfile" = x ] |
|||
then |
|||
dstfile=`basename $dst` |
|||
else |
|||
true |
|||
fi |
|||
|
|||
# Make a temp file name in the proper directory. |
|||
|
|||
dsttmp=$dstdir/#inst.$$# |
|||
|
|||
# Move or copy the file name to the temp name |
|||
|
|||
$doit $instcmd $src $dsttmp && |
|||
|
|||
trap "rm -f ${dsttmp}" 0 && |
|||
|
|||
# and set any options; do chmod last to preserve setuid bits |
|||
|
|||
# If any of these fail, we abort the whole thing. If we want to |
|||
# ignore errors from any of these, just make sure not to ignore |
|||
# errors from the above "$doit $instcmd $src $dsttmp" command. |
|||
|
|||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && |
|||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && |
|||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && |
|||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && |
|||
|
|||
# Now rename the file to the real destination. |
|||
|
|||
$doit $rmcmd -f $dstdir/$dstfile && |
|||
$doit $mvcmd $dsttmp $dstdir/$dstfile |
|||
|
|||
fi && |
|||
|
|||
|
|||
exit 0 |
@ -0,0 +1,362 @@ |
|||
#!/usr/bin/perl -w # please develop with -w |
|||
|
|||
# $Id$ |
|||
|
|||
# Copyright 2000-2002 Katipo Communications |
|||
# |
|||
# 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 |
|||
|
|||
use diagnostics; |
|||
use strict; # please develop with the strict pragma |
|||
|
|||
system('clear'); |
|||
print qq| |
|||
******************************************* |
|||
* Welcome to the Koha Installation Guide * |
|||
******************************************* |
|||
|
|||
This installer will guide you through the process of installing Koha. |
|||
It is not a completely automated installation, but a guide for further |
|||
information please read the documentation or visit the Koha website at |
|||
http://www.koha.org |
|||
|
|||
To successfully use Koha you need some additional software: |
|||
|
|||
* A webserver (It was built to work with Apache, but there is no reason |
|||
it should not work with any other webserver). |
|||
|
|||
* Mysql (You could intead use postgres, or another sql based database) |
|||
|
|||
* Perl |
|||
|
|||
Are you ready to go through the installation process now? (Y/[N]): |
|||
|; |
|||
|
|||
my $answer = <STDIN>; |
|||
chomp $answer; |
|||
|
|||
if ($answer eq "Y" || $answer eq "y") { |
|||
print "Beginning setup... \n"; |
|||
} else { |
|||
print qq| |
|||
When you are ready to complete the installation just run this installer again. |
|||
|; |
|||
exit; |
|||
}; |
|||
|
|||
print "\n"; |
|||
|
|||
|
|||
# |
|||
# Test for Perl - Do we need to explicity check versions? |
|||
# |
|||
print "\nChecking that perl and the required modules are installed ...\n"; |
|||
unless (eval "require 5.004") { |
|||
die "Sorry, you need at least Perl 5.004\n"; |
|||
} |
|||
|
|||
# |
|||
# Test for Perl Dependancies |
|||
# |
|||
my @missing = (); |
|||
unless (eval require DBI) { push @missing,"DBI" }; |
|||
unless (eval require Date::Manip) { push @missing,"Date::Manip" }; |
|||
unless (eval require DBD::mysql) { push @missing,"DBD::mysql" }; |
|||
|
|||
# |
|||
# Print out a list of any missing modules |
|||
# |
|||
if (@missing > 0) { |
|||
print "\n\n"; |
|||
print "You are missing some Perl modules which are required by Koha.\n"; |
|||
print "Once these modules have been installed, rerun this installery.\n"; |
|||
print "They can be installed by running (as root) the following:\n"; |
|||
foreach my $module (@missing) { |
|||
print " perl -MCPAN -e 'install \"$module\"'\n"; |
|||
exit(1); |
|||
}} else{ |
|||
print "Perl and required modules appear to be installed, continuing...\n"; |
|||
}; |
|||
|
|||
|
|||
print "\n"; |
|||
|
|||
# |
|||
#KOHA conf |
|||
# |
|||
print qq| |
|||
Koha uses a small configuration file that is usually placed in your |
|||
/etc/ files directory (note: if you wish to place the koha.conf in |
|||
another location you will need to manually edit additional files). |
|||
|
|||
We will help you to now create your koha.conf file, once this file |
|||
has been created, please copy it to your destination folder |
|||
(note: this may need to be done by your systems administrator). |
|||
|; |
|||
|
|||
my $dbname; |
|||
my $hostname; |
|||
my $user; |
|||
my $pass; |
|||
my $inc_path; |
|||
|
|||
print "\n"; |
|||
print "\n"; |
|||
print qq| |
|||
Please provide the name of the mysql database that you wish to use |
|||
for koha. This is normally "Koha". |
|||
|; |
|||
|
|||
#Get the database name |
|||
do { |
|||
print "Enter database name:"; |
|||
chomp($dbname = <STDIN>); |
|||
}; |
|||
|
|||
|
|||
print "\n"; |
|||
print "\n"; |
|||
print qq| |
|||
Please provide the hostname for mysql. Unless the database is located |
|||
on another machine this is likely to be "localhost". |
|||
|; |
|||
|
|||
#Get the hostname for the database |
|||
do { |
|||
print "Enter hostname:"; |
|||
chomp($hostname = <STDIN>); |
|||
}; |
|||
|
|||
|
|||
print "\n"; |
|||
print "\n"; |
|||
print qq| |
|||
Please provide the name of the mysql user, who will have full administrative |
|||
rights to the $dbname database, when authenicating from $hostname. |
|||
It is recommended that you do not use your "root" user. |
|||
|; |
|||
|
|||
#Set the username for the database |
|||
do { |
|||
print "Enter username:"; |
|||
chomp($user = <STDIN>); |
|||
}; |
|||
|
|||
|
|||
print "\n"; |
|||
print "\n"; |
|||
print qq| |
|||
Please provide a password for the mysql user $user. |
|||
|; |
|||
|
|||
#Set the password for the database user |
|||
do { |
|||
print "Enter password:"; |
|||
chomp($pass = <STDIN>); |
|||
}; |
|||
|
|||
print "\n"; |
|||
print "\n"; |
|||
print qq| |
|||
Please provide the full path to your Koha Intranet/Librarians installation. |
|||
Usually /usr/local/www/koha/htdocs |
|||
|; |
|||
|
|||
#Get the password for the database user |
|||
do { |
|||
print "Enter installation path:"; |
|||
chomp($inc_path = <STDIN>); |
|||
}; |
|||
|
|||
|
|||
#Create the configuration file |
|||
open(SITES,">koha.conf") or die "Couldn't create file. |
|||
Must have write capability.\n"; |
|||
print SITES <<EOP |
|||
database=$dbname |
|||
hostname=$hostname |
|||
user=$user |
|||
password=$pass |
|||
includes=$inc_path/includes |
|||
EOP |
|||
|