summaryrefslogtreecommitdiff
path: root/perl/SNMP/Makefile.PL
diff options
context:
space:
mode:
Diffstat (limited to 'perl/SNMP/Makefile.PL')
-rw-r--r--perl/SNMP/Makefile.PL363
1 files changed, 363 insertions, 0 deletions
diff --git a/perl/SNMP/Makefile.PL b/perl/SNMP/Makefile.PL
new file mode 100644
index 0000000..928cb67
--- /dev/null
+++ b/perl/SNMP/Makefile.PL
@@ -0,0 +1,363 @@
+use ExtUtils::MakeMaker;
+require 5;
+use Config;
+use Getopt::Long;
+my $lib_version;
+my %MakeParams = ();
+my $opts;
+
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+
+%MakeParams = InitMakeParams();
+
+WriteMakefile(%MakeParams);
+
+Check_Version();
+
+GetTestInfo();
+
+sub InitMakeParams {
+ my %Params = (
+ NAME => 'SNMP',
+ dist => { SUFFIX => "gz", COMPRESS => "gzip -9f"},
+ MAN3PODS => { 'SNMP.pm' => '$(INST_MAN3DIR)/SNMP.3' },
+ XSPROTOARG => '-noprototypes', # XXX remove later?
+ VERSION_FROM => 'SNMP.pm',
+ realclean => { FILES => 'host' },
+ );
+
+ if ($ENV{'OSTYPE'} eq 'msys') {
+ $Params{'DEFINE'} = "-DMINGW_PERL";
+ }
+
+ my ($snmp_lib, $snmp_llib, $sep);
+ if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
+ $opts = NetSNMPGetOpts();
+ $Params{'DEFINE'} = "-DMSVC_PERL";
+ $sep = '\\';
+ $snmp_lib_file = 'netsnmp.lib';
+ $snmp_link_lib = 'netsnmp';
+
+ if (lc($opts->{'debug'}) eq "true") {
+ $lib_dir = 'lib\\debug';
+ }
+ else {
+ $lib_dir = 'lib\\release';
+ }
+
+ if (lc($opts->{'insource'}) eq "true") {
+ $Params{'LIBS'} = "-L$basedir\\win32\\$lib_dir\\ -l$snmp_link_lib";
+ }
+ else {
+ my @LibDirs = split (';',$ENV{LIB});
+ my $LibDir;
+ if ($opts->{'prefix'}) {
+ push (@LibDirs,"$ENV{'NET-SNMP-PATH'}${sep}lib");
+ }
+ $noLibDir = 1;
+ while ($noLibDir) {
+ $LibDir = find_files(["$snmp_lib_file"],\@LibDirs);
+ if ($LibDir ne '') {
+ $noLibDir = 0;
+ # Put quotes around LibDir to allow spaces in paths
+ $LibDir = '"' . $LibDir . '"';
+ }
+ else
+ {
+ @LibDirs = ();
+ $LibDirs[0] = prompt("The Net-SNMP library ($snmp_lib_file) could not be found.\nPlease enter the directory where it is located:");
+ $LibDirs[0] =~ s/\\$//;
+ }
+ }
+ $Params{LIBS} = "-L$LibDir -l$snmp_link_lib";
+ }
+
+ $Params{'INC'} = "-I$basedir\\include\\ -I$basedir\\include\\net-snmp\\ -I$basedir\\win32\\ ";
+ }
+ else {
+ $opts = NetSNMPGetOpts();
+ $Params{'LDDLFLAGS'} = "$Config{lddlflags} " . `$opts->{'nsconfig'} --ldflags`;
+ if (!$ENV{'NETSNMP_LIBS'}) {
+ $Params{'LIBS'} = `$opts->{'nsconfig'} --libs`;
+ chomp($Params{'LIBS'});
+ } else {
+ $Params{'LIBS'} = $ENV{'NETSNMP_LIBS'};
+ }
+ if (!$ENV{'NETSNMP_CCFLAGS'}) {
+ $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`;
+ chomp($Params{'CCFLAGS'});
+ $Params{'CCFLAGS'} .= " " . $Config{'ccflags'};
+ } else {
+ $Params{'CCFLAGS'} = $ENV{'NETSNMP_CCFLAGS'};
+ }
+ $lib_version = `$opts->{'nsconfig'} --version`;
+ if (lc($opts->{'insource'}) eq "true") {
+ $Params{'LIBS'} = "-L../../snmplib/.libs -L../../snmplib/ " . $Params{'LIBS'};
+ $Params{'CCFLAGS'} = "-I../../include " . $Params{'CCFLAGS'};
+# } else {
+# $Params{'PREREQ_PM'} = { 'NetSNMP::default_store' => 0.01 };
+ }
+ $Params{'CCFLAGS'} =~ s/ -W(all|inline|strict-prototypes|write-strings|cast-qual|no-char-subscripts)//g; # ignore developer warnings
+ if (!$ENV{'NETSNMP_PREFIX'}) {
+ $prefix = `$opts->{'nsconfig'} --prefix`;
+ chomp($prefix);
+ $sep = '/';
+ } else {
+ $prefix = $ENV{'NETSNMP_PREFIX'};
+ }
+ if ($Params{'LIBS'} eq "" || $Params{'CCFLAGS'} eq "") {
+ die "You need to install net-snmp first (I can't find net-snmp-config)";
+ }
+ }
+
+ return(%Params);
+
+}
+
+sub GetTestInfo {
+ my $sep = ($^O =~ /win32/i ? '\\' : '/');
+ my $info_file = "t${sep}snmptest.cmd";
+ my $snmpd_path1 = "${prefix}${sep}sbin";
+ my $snmpd_path2 = "${sep}usr${sep}sbin";
+ my $snmpd_path3 = "${sep}usr${sep}bin";
+ my $win32_snmpd_path = $ENV{'NET-SNMP-PATH'} . $sep . "bin";
+
+ open(H, ">$info_file") || die "Error: could not open file '$info_file'($!)";
+
+ my ($mibdir, $snmpd, $snmptrapd);
+
+ # Windows
+ if ($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys') {
+ if (lc ($opts->{'insource'}) eq "true") {
+ $mibdir = "../../mibs";
+ if (lc($opts->{'debug'}) eq "true") {
+ $snmpd = "../../win32/bin/debug";
+ $snmptrapd = "../../win32/bin/debug";
+ }
+ else {
+ $snmpd = "../../win32/bin/release";
+ $snmptrapd = "../../win32/bin/release";
+ }
+ } else {
+ $mibdir = $ENV{'NET-SNMP-PATH'} . "${sep}share${sep}snmp${sep}mibs";
+ $snmpd = find_files(["snmpd.exe"], [$win32_snmpd_path]);
+ $snmptrapd = find_files(["snmptrapd.exe"], [$win32_snmpd_path]);
+ }
+ }
+
+ # Unix
+ else {
+ if (lc($opts->{'insource'}) eq "true") {
+ $mibdir = "../../mibs";
+ $snmpd = "../../agent/snmpd";
+ $snmptrapd = "../../apps/snmptrapd";
+ } else {
+ $mibdir = "${prefix}${sep}share${sep}snmp${sep}mibs";
+ $snmpd = find_files(["snmpd"], [$snmpd_path1, $snmpd_path2]);
+ $snmptrapd = find_files(["snmptrapd"], [$snmpd_path1, $snmpd_path2]);
+ }
+ }
+
+ $mibdir = find_files(["NET-SNMP-MIB.txt"],[$mibdir]);
+
+ $mibdir ||= prompt("Unable to locate the MIBs, Please enter the path: ",
+ $mibdir);
+ $snmpd ||= prompt("Unable to locate \"snmpd\". Please enter the path: ",
+ $snmpd_path1);
+ $snmptrapd ||=
+ prompt("Unable to locate \"snmptrapd\". Please enter the path: ",
+ $snmpd_path1);
+
+ if ($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys') {
+ $snmpd = $snmpd . $sep . "snmpd.exe";
+ $snmptrapd = $snmptrapd . $sep . "snmptrapd.exe";
+ }
+ else {
+ if ($ENV{'OSTYPE'} eq 'msys') {
+ $snmpd =~ s/snmpd$/snmpd.exe/;
+ $snmptrapd =~ s/snmptrapd$/snmptrapd.exe/;
+ }
+ else
+ {
+ $snmpd =~ s/($sep)?(snmpd)?$/${sep}snmpd/;
+ $snmptrapd =~ s/($sep)?(snmptrapd)?$/${sep}snmptrapd/;
+ }
+ }
+
+ print H "SNMPD => $snmpd\n";
+ print H "SNMPTRAPD => $snmptrapd\n";
+ print H "MIBDIR => $mibdir\n";
+
+ if (!(lc($opts->{'insource'}) eq "true")) {
+ if (-e $snmpd and -r $snmpd) {
+ if (not -x $snmpd) {
+ warn("Error: $snmpd not executable. 'make test' will not work.\n");
+ }
+ } else {
+ warn("Error: $snmpd does not exist or is unreadable. 'make test' will not work.\n");
+ }
+
+ if (-e $snmptrapd and -r $snmptrapd) {
+ if (not -x $snmptrapd) {
+ warn("Error: $snmptrapd not executable. 'make test' will not work.\n");
+ }
+ } else {
+ warn("Error: $snmptrapd does not exist or is unreadable. 'make test' will not work.\n");
+ }
+ }
+# end of else
+ close H;
+}
+
+sub HasSSL {
+ my $config_header = shift;
+ my $has_ssl;
+ unless (open(C,"<$config_header")) {
+ warn("Unable to open $config_header, assuming no SSL\n");
+ return undef;
+ }
+ while (<C>) {
+ $has_ssl++, last if /^\s*#define\s+NETSNMP_USE_OPENSSL/;
+ }
+ close C;
+ return $has_ssl;
+}
+# common subroutines -- DO NOT EDIT.
+# They are imported from the Makefile.subs.pl file
+sub NetSNMPGetOpts {
+ my %ret;
+ my $rootpath = shift;
+ $rootpath = "../" if (!$rootpath);
+ $rootpath .= '/' if ($rootpath !~ /\/$/);
+
+ if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
+
+ # Grab command line options first. Only used if environment variables are not set
+ GetOptions("NET-SNMP-IN-SOURCE=s" => \$ret{'insource'},
+ "NET-SNMP-PATH=s" => \$ret{'prefix'},
+ "NET-SNMP-DEBUG=s" => \$ret{'debug'});
+
+ if ($ENV{'NET-SNMP-IN-SOURCE'})
+ {
+ $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
+ undef ($ret{'prefix'});
+ }
+ elsif ($ENV{'NET-SNMP-PATH'})
+ {
+ $ret{'prefix'} = $ENV{'NET-SNMP-PATH'};
+ }
+
+ if ($ENV{'NET-SNMP-DEBUG'})
+ {
+ $ret{'debug'} = $ENV{'NET-SNMP-DEBUG'};
+ }
+
+ # Update environment variables in case they are needed
+ $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
+ $ENV{'NET-SNMP-PATH'} = $ret{'prefix'};
+ $ENV{'NET-SNMP-DEBUG'} = $ret{'debug'};
+
+ $basedir = `%COMSPEC% /c cd`;
+ chomp $basedir;
+ $basedir =~ /(.*?)\\perl.*/;
+ $basedir = $1;
+ print "Net-SNMP base directory: $basedir\n";
+ if ($basedir =~ / /) {
+ die "\nA space has been detected in the base directory. This is not " .
+ "supported\nPlease rename the folder and try again.\n\n";
+ }
+ }
+ else
+ {
+ if ($ENV{'NET-SNMP-CONFIG'} &&
+ $ENV{'NET-SNMP-IN-SOURCE'}) {
+ # have env vars, pull from there
+ $ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'};
+ $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
+ } else {
+ # don't have env vars, pull from command line and put there
+ GetOptions("NET-SNMP-CONFIG=s" => \$ret{'nsconfig'},
+ "NET-SNMP-IN-SOURCE=s" => \$ret{'insource'});
+
+ if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") {
+ $ret{'nsconfig'}="sh ROOTPATH../net-snmp-config";
+ } elsif ($ret{'nsconfig'} eq "") {
+ $ret{'nsconfig'}="net-snmp-config";
+ }
+
+ $ENV{'NET-SNMP-CONFIG'} = $ret{'nsconfig'};
+ $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
+ }
+ }
+
+ $ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/;
+
+ $ret{'rootpath'} = $rootpath;
+
+ \%ret;
+}
+
+sub find_files {
+ my($f,$d) = @_;
+ my ($dir,$found,$file);
+ for $dir (@$d){
+ $found = 0;
+ for $file (@$f) {
+ $found++ if -f "$dir/$file";
+ }
+ if ($found == @$f) {
+ return $dir;
+ }
+ }
+}
+
+
+sub Check_Version {
+ if (($Config{'osname'} ne 'MSWin32' || $ENV{'OSTYPE'} eq 'msys')) {
+ my $foundversion = 0;
+ return if ($ENV{'NETSNMP_DONT_CHECK_VERSION'});
+ open(I,"<Makefile");
+ while (<I>) {
+ if (/^VERSION = (.*)/) {
+ my $perlver = $1;
+ my $srcver = $lib_version;
+ chomp($srcver);
+ my $srcfloat = floatize_version($srcver);
+ $perlver =~ s/pre/0./;
+ # we allow for perl/CPAN-only revisions beyond the default
+ # version formatting of net-snmp itself.
+ $perlver =~ s/(\.\d{5}).*/\1/;
+ $perlver =~ s/0*$//;
+ if ($srcfloat ne $perlver) {
+ if (!$foundversion) {
+ print STDERR "ERROR:
+Net-SNMP installed version: $srcver => $srcfloat
+Perl Module Version: $perlver
+
+These versions must match for perfect support of the module. It is possible
+that different versions may work together, but it is strongly recommended
+that you make these two versions identical. You can get the Net-SNMP
+source code and the associated perl modules directly from
+
+ http://www.net-snmp.org/
+
+If you want to continue anyway please set the NETSNMP_DONT_CHECK_VERSION
+environmental variable to 1 and re-run the Makefile.PL script.\n";
+ exit(1);
+ }
+ }
+ $foundversion = 1;
+ last;
+ }
+ }
+ close(I);
+ die "ERROR: Couldn't find version number of this module\n"
+ if (!$foundversion);
+ }
+}
+
+sub floatize_version {
+ my ($major, $minor, $patch, $opps) = ($_[0] =~ /^(\d+)\.(\d+)\.?(\d*)\.?(\d*)/);
+ return $major + $minor/100 + $patch/10000 + $opps/100000;
+}