squidanalyzer/Makefile.PL

197 lines
6.4 KiB
Perl

use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
use strict;
my @ALLOWED_ARGS = ('LOGFILE','BINDIR','ETCDIR', 'CONFDIR','HTMLDIR','BASEURL','DOCDIR','MANDIR','QUIET','INSTALLDIRS','DESTDIR');
# Parse command line arguments and store them as environment variables
while ($_ = shift) {
my ($k,$v) = split(/=/, $_, 2);
if (grep(/^$k$/, @ALLOWED_ARGS)) {
$ENV{$k} = $v;
}
}
$ENV{DESTDIR} =~ s/\/$//;
# Search for default log dir
my $default_log = '/var/log/squid/access.log';
if (! -d $default_log ) {
$default_log = '/var/log/squid3/access.log';
}
# Default install path
my $LOGFILE = $ENV{LOGFILE} || $default_log;
my $BINDIR = $ENV{BINDIR} || '/usr/local/bin';
my $CONFDIR = $ENV{CONFDIR} || '/etc/squidanalyzer';
my $ETCDIR = $ENV{ETCDIR} || $CONFDIR;
my $HTMLDIR = $ENV{HTMLDIR} || '/var/www/squidanalyzer';
my $BASEURL = $ENV{BASEURL} || '/squidreport';
my $DOCDIR = $ENV{DOCDIR} || '';
my $MANDIR = $ENV{MANDIR} || '/usr/local/man/man3';
my $DESTDIR = $ENV{DESTDIR} || '';
my $INSTALLDIRS = $ENV{INSTALLDIRS} ||= 'site';
unless(open(INST, ">install_all.sh")) {
print "\nError: can't write post install file install_all.sh, $!\n";
exit 0;
}
print INST qq{#!/bin/sh
test ! -d "$DESTDIR$BINDIR" && mkdir -p $DESTDIR$BINDIR
test ! -d "$DESTDIR$ETCDIR" && mkdir -p $DESTDIR$ETCDIR
test ! -d "$DESTDIR$ETCDIR/lang" && mkdir -p $DESTDIR$ETCDIR/lang
test ! -d "$DESTDIR$HTMLDIR" && mkdir -p $DESTDIR$HTMLDIR
test ! -d "$DESTDIR$HTMLDIR/images" && mkdir -p $DESTDIR$HTMLDIR/images
};
if ($DOCDIR ne '') {
print INST qq{
test ! -d "$DESTDIR$DOCDIR" && mkdir -p $DESTDIR$DOCDIR
};
}
print INST qq{
test ! -d "$DESTDIR$MANDIR" && mkdir -p $DESTDIR$MANDIR
# Copy files that must not be overriden
for file in squidanalyzer.conf network-aliases user-aliases url-aliases excluded included; do
if [ -r $DESTDIR$ETCDIR/\$file ]; then
install -m 644 etc/\$file $DESTDIR$ETCDIR/\$file.sample
else
install -m 644 etc/\$file $DESTDIR$ETCDIR/\$file
fi
done
install -m 755 squid-analyzer $DESTDIR$BINDIR/
install -m 644 resources/sorttable.js $DESTDIR$HTMLDIR/
install -m 644 resources/squidanalyzer.css $DESTDIR$HTMLDIR/
install -m 644 resources/flotr2.js $DESTDIR$HTMLDIR/
install -m 644 resources/images/logo-squidanalyzer.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/cursor.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/domain.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/back-arrow.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/info.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/network.png $DESTDIR$HTMLDIR/images/
install -m 644 resources/images/user.png $DESTDIR$HTMLDIR/images/
install -m 644 lang/* $DESTDIR$ETCDIR/lang/
pod2text doc/SquidAnalyzer.pod README
pod2man doc/SquidAnalyzer.pod squid-analyzer.3
};
if ($DOCDIR ne '') {
print INST qq{
install -m 644 README $DESTDIR$DOCDIR/
install -m 644 INSTALL $DESTDIR$DOCDIR/
install -m 644 ChangeLog $DESTDIR$DOCDIR/
};
}
if ($MANDIR ne '') {
print INST qq{
install -m 644 squid-analyzer.3 $DESTDIR$MANDIR/
};
}
if (!$ENV{QUIET}) {
print INST qq{
echo "
-----------------------------------------------------------------------------
1. Modify your httpd.conf to allow access to HTML output like follow:
Alias /squidreport $HTMLDIR
<Directory $HTMLDIR>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
2. If necessary, give additional host access to SquidAnalyzer in httpd.conf.
Restart and ensure that httpd is running.
3. Browse to http://my.host.dom/squidreport/ to ensure that things are working
properly.
4. Setup a cronjob to run squid-analyzer daily:
# SquidAnalyzer log reporting daily
0 2 * * * $BINDIR/squid-analyzer > /dev/null 2>&1
or run it manually. For more information, see $DOCDIR/README file.
-----------------------------------------------------------------------------
"
};
}
close(INST);
`chmod 755 install_all.sh`;
# Change path into the default configuration file
`perl -p -i -e 's#/.*/squidanalyzer.conf#$ETCDIR/squidanalyzer.conf#' etc/squidanalyzer.conf squid-analyzer`;
`perl -p -i -e 's#^Output.*#Output $HTMLDIR#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^LogFile.*#LogFile $LOGFILE#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^WebUrl.*#WebUrl $BASEURL#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^NetworkAlias.*#NetworkAlias $ETCDIR/network-aliases#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^UserAlias.*#UserAlias $ETCDIR/user-aliases#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^Exclude.*#Exclude $ETCDIR/excluded#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#^Include.*#Include $ETCDIR/included#' etc/squidanalyzer.conf`;
`perl -p -i -e 's#Lang.*\.txt#Lang $ETCDIR/lang/en_US.txt#' etc/squidanalyzer.conf`;
my $zcat = `which zcat`;
chomp($zcat);
`perl -p -i -e 's#^\\\$ZCAT_PROG.*#\\\$ZCAT_PROG = "$zcat";#' SquidAnalyzer.pm`;
my $bzcat = `which bzcat`;
chomp($bzcat);
`perl -p -i -e 's#^\\\$BZCAT_PROG.*#\\\$BZCAT_PROG = "$bzcat";#' SquidAnalyzer.pm`;
my $xzcat = `which xzcat`;
chomp($xzcat);
`perl -p -i -e 's#^\\\$XZCAT_PROG.*#\\\$XZCAT_PROG = "$xzcat";#' SquidAnalyzer.pm`;
WriteMakefile(
'DISTNAME' => 'SquidAnalyzer',
'NAME' => 'SquidAnalyzer',
'VERSION_FROM' => 'SquidAnalyzer.pm',
'dist' => {
'COMPRESS'=>'gzip -9f', 'SUFFIX' => 'gz',
'ZIP'=>'/usr/bin/zip','ZIPFLAGS'=>'-rl'
},
'AUTHOR' => 'Gilles Darold (gilles@darold.net)',
'ABSTRACT' => 'Squid log analyzer',
'EXE_FILES' => [ qw(squid-analyzer) ],
'MAN3PODS' => { 'doc/SquidAnalyzer.pod' => 'blib/man3/SquidAnalyzer.3pm' },
'DESTDIR' => $DESTDIR,
'INSTALLDIRS' => $INSTALLDIRS,
'clean' => { FILES => "install_all.sh lib/blib/ squid-analyzer.3" },
'META_MERGE' => {
resources => {
homepage => 'http://squidanalyzer.darold.net/',
repository => {
type => 'git',
git => 'git@github.com:darold/squidanalyzer.git',
web => 'https://github.com/darold/squidanalyzer',
},
},
}
);
sub MY::install {
my $self = shift;
my $string = $self->MM::install;
$string =~ s/(pure_install\s+)(.*)/$1 install_all $2/;
return $string;
}
sub MY::postamble {
my $postamble = <<'END';
install_all: install_all.sh
sh install_all.sh
END
return $postamble;
}
if (!$ENV{QUIET}) {
print "Done...\n\n";
print "Now type 'make && make install'\n\n";
}