blob: e2fde4aa78b74a8e805ec0e1e60b88cdafbd6fb9 [file] [log] [blame]
use ExtUtils::MakeMaker;
require 5;
use Config;
use Getopt::Long;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
%MakeParams = InitMakeParams();
WriteMakefile(%MakeParams);
GetTestInfo();
sub InitMakeParams {
my %Params = (
NAME => 'SNMP',
dist => { SUFFIX => "gz", COMPRESS => "gzip -9f"},
MAN3PODS => 'SNMP', # Pods will be built by installman.
XSPROTOARG => '-noprototypes', # XXX remove later?
VERSION_FROM => 'SNMP.pm',
realclean => { FILES => 'host' },
);
my $snmp_lib, $snmp_llib, $sep;
if ($Config{'osname'} eq 'MSWin32') {
$snmp_lib = 'libsnmp.lib';
$snmp_link_lib = 'libsnmp';
$sep = '\\';
} else {
$snmp_lib = 'libsnmp.a';
$snmp_link_lib = 'snmp';
$sep = '/';
}
$prefix="${sep}usr${sep}local";
GetOptions("NET-SNMP-PATH=s" => \$prefix);
my $inc_path1 = "${prefix}${sep}include";
my $inc_path2 = "${sep}usr${sep}include";
my $lib_path1 = "${prefix}${sep}lib";
my $lib_path2 = "${sep}usr${sep}lib";
my @IncludeFiles = qw[ucd-snmp/ucd-snmp-config.h
ucd-snmp/asn1.h ucd-snmp/mib.h ucd-snmp/parse.h
ucd-snmp/snmp.h ucd-snmp/snmp_api.h
ucd-snmp/snmp_client.h ucd-snmp/snmp_impl.h
ucd-snmp/scapi.h ucd-snmp/keytools.h
ucd-snmp/snmpv3.h ucd-snmp/transform_oids.h];
my @IncludeDirs = ($inc_path2, $inc_path1);
my $IncludeDir = find_files(\@IncludeFiles,\@IncludeDirs) ||
prompt("Where are the ucd-snmp include files?","$inc_path1");
my @LibDirs = ($lib_path1, $lib_path2);
my $LibDir = find_files(["$snmp_lib"],\@LibDirs) ||
prompt("Where is the ucd-snmp library installed?","$lib_path2");
@IncludeFiles = map {"$IncludeDir$sep$_";} @IncludeFiles;
$ssl_lib = ($^O =~ /win32/i ? 'libeay32.lib' : 'libcrypto.a');
$ssl_link_lib = ($^O =~ /win32/i ? 'libeay32' : 'crypto');
my $ssl_link_libs;
if (HasSSL("$IncludeDir${sep}ucd-snmp/ucd-snmp-config.h")) {
my @SSLLibDirs = ("/usr/local/lib", "/usr/local/ssl/lib", "/usr/lib");
my $SSLLibDir = find_files([$ssl_lib], \@SSLLibDirs) ||
prompt("Where is the SSL library installed?", $SSLLibDirs[1]);
$ssl_link = "-L$SSLLibDir -l$ssl_link_lib" if $SSLLibDir;
}
$Params{LIBS} = "-L$LibDir -l$snmp_link_lib $ssl_link";
$Params{INC} = "-I$IncludeDir";
$Params{H} = \@IncludeFiles;
$Params{LDFLAGS} = "-L$LibDir $Config{ldflags}";
$Params{LDDLFLAGS} = "-L$LibDir $Config{lddlflags}";
return(%Params);
}
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 GetTestInfo {
my $sep = ($^O =~ /win32/i ? '\\' : '/');
my $info_file = "t${sep}snmptest.cmd";
my $snmpd_path1 = "${prefix}${sep}sbin";
my $mibdir = "${prefix}${sep}share${sep}snmp${sep}mibs";
my $snmpd_path2 = "${sep}usr${sep}sbin";
my $snmpd_path3 = "${sep}usr${sep}bin";
open(H, ">$info_file") || die "Error: could not open file '$info_file'($!)";
if($^O =~ /win32/i) {
#you are using WIN 32
print <<WIN32
==================================================================
You are using Windows 32. The testing of Perl/SNMP API here would
require you to start an snmpd agent and a trap receiver using the
config file provided ( t\\snmptest.conf) manually.The
test scripts will not do this(as in unix testing). So, please
run those agents and enter the following information.If the data
about host, agent_port and trap_port are already present in your
snmptest.cmd file, make test will use those data for testing.
=================================================================
WIN32
;
$host = prompt("Please enter the host IP address/host name: ", "localhost");
print H "HOST => $host\n";
$agent_port = prompt("Please enter the agent port number: ", 161);
print H "AGENT_PORT => $agent_port\n";
$trap_port = prompt("Please enter the trap port number: ", 162);
print H "TRAP_PORT => $trap_port\n";
$mibdir = prompt("Please enter the MIB directory: ", "/usr/mibs");
print H "MIBDIR => $mibdir\n";
} else {
# you are using UNIX
my $mibdir = find_files(["UCD-SNMP-MIB.txt"],[$mibdir]);
my $snmpd = find_files(["snmpd"], [$snmpd_path1, $snmpd_path2]);
my $snmptrapd = find_files(["snmptrapd"], [$snmpd_path1, $snmpd_path2]);
$mibdir ||= prompt("Unable to locate the MIBs, Please enter the path: ",
$snmpd_path1);
$snmpd ||= prompt("Unable to locate \"snmpd\". Please enter the path: ",
$snmpd_path1);
$snmptrapd ||=
prompt("Unable to locate \"snmptrapd\". Please enter the path: ",
$snmpd_path1);
$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 (-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+USE_OPENSSL/;
}
close C;
return $has_ssl;
}