Makefile.PL
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:9k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. use ExtUtils::MakeMaker;
  2. require 5;
  3. use Config;
  4. use Getopt::Long;
  5. my %MakeParams = ();
  6. my $opts;
  7. # See lib/ExtUtils/MakeMaker.pm for details of how to influence
  8. # the contents of the Makefile that is written.
  9. %MakeParams = InitMakeParams();
  10. WriteMakefile(%MakeParams);
  11. GetTestInfo();
  12. sub InitMakeParams {
  13.     my %Params = (
  14.   NAME         => 'SNMP',
  15.   dist         => { SUFFIX => "gz", COMPRESS => "gzip -9f"},
  16.   MAN3PODS => { 'SNMP.pm' => '$(INST_MAN3DIR)/SNMP.3' },
  17.   XSPROTOARG   => '-noprototypes',  # XXX remove later?
  18.   VERSION_FROM => 'SNMP.pm',
  19.   realclean        => { FILES => 'host' },
  20.   );
  21.     if ($ENV{'OSTYPE'} eq 'msys') {
  22.       $Params{'DEFINE'} = "-DMINGW_PERL";
  23.     }
  24.                                     
  25.     my ($snmp_lib, $snmp_llib, $sep);
  26.     if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
  27.       $opts = NetSNMPGetOpts();
  28.       $Params{'DEFINE'} = "-DMSVC_PERL";
  29.       $sep = '\';
  30.       $snmp_lib_file = 'netsnmp.lib';
  31.       $snmp_link_lib = 'netsnmp';
  32.       if (lc($opts->{'debug'}) eq "true") {
  33.         $lib_dir = 'lib\debug';
  34.       }
  35.       else {
  36.         $lib_dir = 'lib\release';
  37.       }
  38.       
  39.       if (lc($opts->{'insource'}) eq "true") {
  40. $Params{'LIBS'} = "-L$basedir\win32\$lib_dir\ -l$snmp_link_lib";
  41.       }
  42.       else {
  43. my @LibDirs = split (';',$ENV{LIB});
  44.         my $LibDir;
  45. if ($opts->{'prefix'}) {
  46.   push (@LibDirs,"$ENV{'NET-SNMP-PATH'}${sep}lib");
  47. }
  48. $noLibDir = 1;
  49. while ($noLibDir) {
  50.   $LibDir = find_files(["$snmp_lib_file"],@LibDirs);
  51.   if ($LibDir ne '') {
  52.     $noLibDir = 0;
  53.             # Put quotes around LibDir to allow spaces in paths
  54.             $LibDir = '"' . $LibDir . '"';
  55.   }
  56.   else
  57.   {
  58.     @LibDirs = ();
  59.     @LibDirs[0] = prompt("The Net-SNMP library ($snmp_lib_file) could not be found.nPlease enter the directory where it is located:");
  60.     @LibDirs[0] =~ s/\$//;
  61.   }
  62. }
  63. $Params{LIBS} = "-L$LibDir -l$snmp_link_lib";
  64.       }
  65.       $Params{'INC'} = "-I$basedir\include\ -I$basedir\include\net-snmp\ -I$basedir\win32\ ";
  66.     }
  67.     else {
  68. $opts = NetSNMPGetOpts();
  69. if (!$ENV{'NETSNMP_LIBS'}) {
  70.     $Params{'LIBS'}    = `$opts->{'nsconfig'} --libs`;
  71.     chomp($Params{'LIBS'});
  72. } else {
  73.     $Params{'LIBS'} = $ENV{'NETSNMP_LIBS'};
  74. }
  75. if (!$ENV{'NETSNMP_CCFLAGS'}) {
  76.     $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`;
  77.     chomp($Params{'CCFLAGS'});
  78.     $Params{'CCFLAGS'} .= " " . $Config{'ccflags'};
  79. } else {
  80.     $Params{'CCFLAGS'} = $ENV{'NETSNMP_CCFLAGS'};
  81. }
  82. if (lc($opts->{'insource'}) eq "true") {
  83.     $Params{'LIBS'} = "-L../../snmplib/.libs -L../../snmplib/ " . $Params{'LIBS'};
  84.     $Params{'CCFLAGS'} = "-I../../include " . $Params{'CCFLAGS'};
  85. # } else {
  86. #     $Params{'PREREQ_PM'} = { 'NetSNMP::default_store' => 0.01 };
  87. }
  88. $Params{'CCFLAGS'} =~ s/ -W[-w]+//g; # ignore developer warnings
  89. if (!$ENV{'NETSNMP_PREFIX'}) {
  90.     $prefix            = `$opts->{'nsconfig'} --prefix`;
  91.     chomp($prefix);
  92.     $sep = '/';
  93. } else {
  94.     $prefix = $ENV{'NETSNMP_PREFIX'};
  95. }
  96. if ($Params{'LIBS'} eq "" || $Params{'CCFLAGS'} eq "") {
  97.     die "You need to install net-snmp first (I can't find net-snmp-config)";
  98. }
  99.     }
  100.     return(%Params);
  101. }
  102. sub GetTestInfo {
  103.     my $sep = ($^O =~ /win32/i ? '\' : '/');
  104.     my $info_file = "t${sep}snmptest.cmd";
  105.     my $snmpd_path1 = "${prefix}${sep}sbin";
  106.     my $snmpd_path2 = "${sep}usr${sep}sbin";
  107.     my $snmpd_path3 = "${sep}usr${sep}bin";
  108.     my $win32_snmpd_path = $ENV{'NET-SNMP-PATH'} . $sep . "bin";
  109.     open(H, ">$info_file") || die "Error: could not open file '$info_file'($!)";
  110.     my ($mibdir, $snmpd, $snmptrapd);
  111.         # Windows
  112.         if ($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys') {
  113.           if (lc ($opts->{'insource'}) eq "true") {
  114.             $mibdir = "../../mibs";
  115.             if (lc($opts->{'debug'}) eq "true") {
  116.               $snmpd = "../../win32/bin/debug";
  117.               $snmptrapd = "../../win32/bin/debug";
  118.             }
  119.             else {
  120.               $snmpd = "../../win32/bin/release";
  121.               $snmptrapd = "../../win32/bin/release";
  122.             }
  123.           } else {
  124.             $mibdir = $ENV{'NET-SNMP-PATH'} . "${sep}share${sep}snmp${sep}mibs";
  125.             $snmpd = find_files(["snmpd.exe"], [$win32_snmpd_path]);
  126.             $snmptrapd = find_files(["snmptrapd.exe"], [$win32_snmpd_path]);
  127.           }
  128.         }
  129.         # Unix
  130.         else {
  131.           if (lc($opts->{'insource'}) eq "true") {
  132.             $mibdir = "../../mibs";
  133.             $snmpd = "../../agent/snmpd";
  134.             $snmptrapd = "../../apps/snmptrapd";
  135.           } else {
  136.             $mibdir = "${prefix}${sep}share${sep}snmp${sep}mibs";
  137.             $snmpd = find_files(["snmpd"], [$snmpd_path1, $snmpd_path2]);
  138.             $snmptrapd = find_files(["snmptrapd"], [$snmpd_path1, $snmpd_path2]);
  139.           }
  140.         }
  141. $mibdir = find_files(["NET-SNMP-MIB.txt"],[$mibdir]);
  142. $mibdir ||= prompt("Unable to locate the MIBs, Please enter the path: ",
  143.    $mibdir);
  144. $snmpd ||= prompt("Unable to locate "snmpd". Please enter the path: ",
  145.   $snmpd_path1);
  146. $snmptrapd ||=
  147.     prompt("Unable to locate "snmptrapd". Please enter the path: ",
  148.    $snmpd_path1);
  149.         if ($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys') {
  150.           $snmpd = $snmpd . $sep . "snmpd.exe";
  151.           $snmptrapd = $snmptrapd . $sep . "snmptrapd.exe";
  152.         }
  153.         else {
  154.           if ($ENV{'OSTYPE'} eq 'msys') {
  155.             $snmpd =~ s/snmpd$/snmpd.exe/;
  156.             $snmptrapd =~ s/snmptrapd$/snmptrapd.exe/;
  157.           }
  158.           else
  159.           {
  160.             $snmpd =~ s/($sep)?(snmpd)?$/${sep}snmpd/;
  161.             $snmptrapd =~ s/($sep)?(snmptrapd)?$/${sep}snmptrapd/;
  162.           }
  163.         }
  164. print H "SNMPD => $snmpdn";
  165. print H "SNMPTRAPD => $snmptrapdn";
  166. print H "MIBDIR => $mibdirn";
  167. if (!(lc($opts->{'insource'}) eq "true")) {
  168.     if (-e $snmpd and -r $snmpd) {
  169. if (not -x $snmpd) {
  170.     warn("Error: $snmpd not executable. 'make test' will not work.n");
  171. }
  172.     } else {
  173. warn("Error: $snmpd does not exist or is unreadable. 'make test' will not work.n");
  174.     }
  175.     if (-e $snmptrapd and -r $snmptrapd) {
  176. if (not -x $snmptrapd) {
  177.     warn("Error: $snmptrapd not executable. 'make test' will not work.n");
  178. }
  179.     } else {
  180. warn("Error: $snmptrapd does not exist or is unreadable. 'make test' will not work.n");
  181.     }
  182. }
  183. # end of else
  184.     close H;
  185. }
  186. sub HasSSL {
  187.     my $config_header = shift;
  188.     my $has_ssl;
  189.     unless (open(C,"<$config_header")) {
  190. warn("Unable to open $config_header, assuming no SSLn");
  191. return undef;
  192.     }
  193.     while (<C>) {
  194. $has_ssl++, last if /^s*#defines+USE_OPENSSL/;
  195.     }
  196.     close C;
  197.     return $has_ssl;
  198. }
  199. # common subroutines -- DO NOT EDIT.
  200. # They are imported from the Makefile.subs.pl file
  201. sub NetSNMPGetOpts {
  202.     my %ret;
  203.     my $rootpath = shift;
  204.     $rootpath = "../" if (!$rootpath);
  205.     $rootpath .= '/' if ($rootpath !~ //$/);
  206.     
  207.     if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
  208.       # Grab command line options first.  Only used if environment variables are not set
  209.       GetOptions("NET-SNMP-IN-SOURCE=s" => $ret{'insource'},
  210.         "NET-SNMP-PATH=s"      => $ret{'prefix'},          
  211.         "NET-SNMP-DEBUG=s"     => $ret{'debug'});
  212.       if ($ENV{'NET-SNMP-IN-SOURCE'})
  213.       {
  214. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  215.         undef ($ret{'prefix'});
  216.       }
  217.       elsif ($ENV{'NET-SNMP-PATH'})
  218.       {
  219. $ret{'prefix'} = $ENV{'NET-SNMP-PATH'};
  220.       }
  221.       if ($ENV{'NET-SNMP-DEBUG'})
  222.       {
  223. $ret{'debug'} = $ENV{'NET-SNMP-DEBUG'};
  224.       }
  225.       # Update environment variables in case they are needed
  226.       $ENV{'NET-SNMP-IN-SOURCE'}    = $ret{'insource'};
  227.       $ENV{'NET-SNMP-PATH'}         = $ret{'prefix'};
  228.       $ENV{'NET-SNMP-DEBUG'}        = $ret{'debug'};        
  229.      
  230.       $basedir = `%COMSPEC% /c cd`;
  231.       chomp $basedir;
  232.       $basedir =~ /(.*?)\perl.*/;
  233.       $basedir = $1;
  234.       print "Net-SNMP base directory: $basedirn";
  235.       if ($basedir =~ / /) {
  236.         die "nA space has been detected in the base directory.  This is not " .
  237.             "supportednPlease rename the folder and try again.nn";
  238.       }
  239.     }
  240.     else
  241.     {
  242.       if ($ENV{'NET-SNMP-CONFIG'} && 
  243.         $ENV{'NET-SNMP-IN-SOURCE'}) {
  244. # have env vars, pull from there
  245. $ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'};
  246. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  247.       } else {
  248. # don't have env vars, pull from command line and put there
  249. GetOptions("NET-SNMP-CONFIG=s" => $ret{'nsconfig'},
  250.            "NET-SNMP-IN-SOURCE=s" => $ret{'insource'});
  251. if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") {
  252.     $ret{'nsconfig'}="sh ROOTPATH../net-snmp-config";
  253. } elsif ($ret{'nsconfig'} eq "") {
  254.     $ret{'nsconfig'}="net-snmp-config";
  255. }
  256. $ENV{'NET-SNMP-CONFIG'}    = $ret{'nsconfig'};
  257. $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
  258.       }
  259.     }
  260.     
  261.     $ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/;
  262.     $ret{'rootpath'} = $rootpath;
  263.     %ret;
  264. }
  265. sub find_files {
  266.     my($f,$d) = @_;
  267.     my ($dir,$found,$file);
  268.     for $dir (@$d){
  269. $found = 0;
  270. for $file (@$f) {
  271.     $found++ if -f "$dir/$file";
  272. }
  273. if ($found == @$f) {
  274.     return $dir;
  275. }
  276.     }
  277. }