📄 makefile.pl
字号:
use ExtUtils::MakeMaker;require 5;use Config;use Getopt::Long;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);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(); 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'}; } 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[-\w]+//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+USE_OPENSSL/; } close C; return $has_ssl;}# common subroutines -- DO NOT EDIT.# They are imported from the Makefile.subs.pl filesub 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"; } 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; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -