Blame perl/MakefileSubs.pm

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;