Makefile.PL
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:9k
- 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 => $snmpdn";
- print H "SNMPTRAPD => $snmptrapdn";
- print H "MIBDIR => $mibdirn";
- 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 SSLn");
- return undef;
- }
- while (<C>) {
- $has_ssl++, last if /^s*#defines+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: $basedirn";
- if ($basedir =~ / /) {
- die "nA space has been detected in the base directory. This is not " .
- "supportednPlease rename the folder and try again.nn";
- }
- }
- 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;
- }
- }
- }