|
Packit |
fcad23 |
package MakefileSubs;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
use strict;
|
|
Packit |
fcad23 |
use warnings;
|
|
Packit |
fcad23 |
use Config;
|
|
Packit |
fcad23 |
use Getopt::Long;
|
|
Packit |
fcad23 |
use Exporter;
|
|
Packit |
fcad23 |
use vars qw(@ISA @EXPORT_OK);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
our $VERSION = 1.00;
|
|
Packit |
fcad23 |
our @ISA = qw(Exporter);
|
|
Packit |
fcad23 |
our @EXPORT = qw(NetSNMPGetOpts find_files Check_Version floatize_version);
|
|
Packit |
fcad23 |
our $basedir;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub NetSNMPGetOpts {
|
|
Packit |
fcad23 |
my %ret;
|
|
Packit |
fcad23 |
my $rootpath = shift;
|
|
Packit |
fcad23 |
$rootpath = "../" if (!$rootpath);
|
|
Packit |
fcad23 |
$rootpath .= '/' if ($rootpath !~ /\/$/);
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} eq '')) {
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Grab command line options first. Only used if environment variables are not set
|
|
Packit |
fcad23 |
GetOptions("NET-SNMP-IN-SOURCE=s" => \$ret{'insource'},
|
|
Packit |
fcad23 |
"NET-SNMP-PATH=s" => \$ret{'prefix'},
|
|
Packit |
fcad23 |
"NET-SNMP-DEBUG=s" => \$ret{'debug'});
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($ENV{'NET-SNMP-IN-SOURCE'})
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
$ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
|
|
Packit |
fcad23 |
undef ($ret{'prefix'});
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
elsif ($ENV{'NET-SNMP-PATH'})
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
$ret{'prefix'} = $ENV{'NET-SNMP-PATH'};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if ($ENV{'NET-SNMP-DEBUG'})
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
$ret{'debug'} = $ENV{'NET-SNMP-DEBUG'};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
# Update environment variables in case they are needed
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-PATH'} = $ret{'prefix'};
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-DEBUG'} = $ret{'debug'};
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$basedir = abs_path($0);
|
|
Packit |
fcad23 |
while (1) {
|
|
Packit |
fcad23 |
my $basename = basename($basedir);
|
|
Packit |
fcad23 |
last if (length($basename) <= 2);
|
|
Packit |
fcad23 |
$basedir = dirname($basedir);
|
|
Packit |
fcad23 |
last if ($basename eq "perl");
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
print "Net-SNMP base directory: $basedir\n";
|
|
Packit |
fcad23 |
if ($basedir =~ / /) {
|
|
Packit |
fcad23 |
die "\nA space has been detected in the base directory. This is not " .
|
|
Packit |
fcad23 |
"supported\nPlease rename the folder and try again.\n\n";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
else
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
if ($ENV{'NET-SNMP-CONFIG'} &&
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-IN-SOURCE'}) {
|
|
Packit |
fcad23 |
# have env vars, pull from there
|
|
Packit |
fcad23 |
$ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'};
|
|
Packit |
fcad23 |
$ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
|
|
Packit |
fcad23 |
} else {
|
|
Packit |
fcad23 |
# don't have env vars, pull from command line and put there
|
|
Packit |
fcad23 |
GetOptions("NET-SNMP-CONFIG=s" => \$ret{'nsconfig'},
|
|
Packit |
fcad23 |
"NET-SNMP-IN-SOURCE=s" => \$ret{'insource'});
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") {
|
|
Packit |
fcad23 |
$ret{'nsconfig'}="sh ROOTPATH../net-snmp-config";
|
|
Packit |
fcad23 |
} elsif ($ret{'nsconfig'} eq "") {
|
|
Packit |
fcad23 |
$ret{'nsconfig'}="net-snmp-config";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-CONFIG'} = $ret{'nsconfig'};
|
|
Packit |
fcad23 |
$ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
$ret{'rootpath'} = $rootpath;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
\%ret;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub find_files {
|
|
Packit |
fcad23 |
my($f,$d) = @_;
|
|
Packit |
fcad23 |
my ($dir,$found,$file);
|
|
Packit |
fcad23 |
for $dir (@$d){
|
|
Packit |
fcad23 |
$found = 0;
|
|
Packit |
fcad23 |
for $file (@$f) {
|
|
Packit |
fcad23 |
$found++ if -f "$dir/$file";
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if ($found == @$f) {
|
|
Packit |
fcad23 |
return $dir;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub Check_Version
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
my $lib_version = shift;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
if (($Config{'osname'} ne 'MSWin32' || $ENV{'OSTYPE'} ne '')) {
|
|
Packit |
fcad23 |
my $foundversion = 0;
|
|
Packit |
fcad23 |
return if ($ENV{'NETSNMP_DONT_CHECK_VERSION'});
|
|
Packit |
fcad23 |
open(I,"
|
|
Packit |
fcad23 |
while () {
|
|
Packit |
fcad23 |
if (/^VERSION = (.*)/) {
|
|
Packit |
fcad23 |
my $perlver = $1;
|
|
Packit |
fcad23 |
my $srcver = $lib_version;
|
|
Packit |
fcad23 |
chomp($srcver);
|
|
Packit |
fcad23 |
my $srcfloat = floatize_version($srcver);
|
|
Packit |
fcad23 |
$perlver =~ s/pre/0./;
|
|
Packit |
fcad23 |
# we allow for perl/CPAN-only revisions beyond the default
|
|
Packit |
fcad23 |
# version formatting of net-snmp itself.
|
|
Packit |
fcad23 |
$perlver =~ s/(\.\d{5}).*/$1/;
|
|
Packit |
fcad23 |
$perlver =~ s/0*$//;
|
|
Packit |
fcad23 |
if ($srcfloat ne $perlver) {
|
|
Packit |
fcad23 |
if (!$foundversion) {
|
|
Packit |
fcad23 |
print STDERR "ERROR:
|
|
Packit |
fcad23 |
Net-SNMP installed version: $srcver => $srcfloat
|
|
Packit |
fcad23 |
Perl Module Version: $perlver
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
These versions must match for perfect support of the module. It is possible
|
|
Packit |
fcad23 |
that different versions may work together, but it is strongly recommended
|
|
Packit |
fcad23 |
that you make these two versions identical. You can get the Net-SNMP
|
|
Packit |
fcad23 |
source code and the associated perl modules directly from
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
http://www.net-snmp.org/
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
If you want to continue anyway please set the NETSNMP_DONT_CHECK_VERSION
|
|
Packit |
fcad23 |
environmental variable to 1 and re-run the Makefile.PL script.\n";
|
|
Packit |
fcad23 |
exit(1);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
$foundversion = 1;
|
|
Packit |
fcad23 |
last;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
close(I);
|
|
Packit |
fcad23 |
die "ERROR: Couldn't find version number of this module\n"
|
|
Packit |
fcad23 |
if (!$foundversion);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
sub floatize_version {
|
|
Packit |
fcad23 |
my ($major, $minor, $patch, $opps) = ($_[0] =~ /^(\d+)\.(\d+)\.?(\d*)\.?(\d*)/);
|
|
Packit |
fcad23 |
if (!$patch) {
|
|
Packit |
fcad23 |
$patch = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
if (!$opps) {
|
|
Packit |
fcad23 |
$opps = 0;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
return $major + $minor/100 + $patch/10000 + $opps/100000;
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
1;
|