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

SNMP编程

开发平台:

Unix_Linux

  1. use ExtUtils::MakeMaker;
  2. require 5;
  3. use Config;
  4. use Getopt::Long;
  5. my %MakeParams = ();
  6. %MakeParams = InitMakeParams();
  7. WriteMakefile(%MakeParams);
  8. if  (eval {require ExtUtils::Constant; 1}) {
  9.   # If you edit these definitions to change the constants used by this module,
  10.   # you will need to use the generated const-c.inc and const-xs.inc
  11.   # files to replace their "fallback" counterparts before distributing your
  12.   # changes.
  13.   my @names = (qw(NETSNMPTRAPD_AUTH_HANDLER NETSNMPTRAPD_HANDLER_BREAK
  14.  NETSNMPTRAPD_HANDLER_FAIL NETSNMPTRAPD_HANDLER_FINISH
  15.  NETSNMPTRAPD_HANDLER_OK NETSNMPTRAPD_POST_HANDLER
  16.  NETSNMPTRAPD_PRE_HANDLER));
  17.   ExtUtils::Constant::WriteConstants(
  18.                                      NAME         => 'NetSNMP::TrapReceiver',
  19.                                      NAMES        => @names,
  20.                                      DEFAULT_TYPE => 'IV',
  21.                                      C_FILE       => 'const-c.inc',
  22.                                      XS_FILE      => 'const-xs.inc',
  23.                                   );
  24. } else {
  25.   use File::Copy;
  26.   use File::Spec;
  27.   foreach my $file ('const-c.inc', 'const-xs.inc') {
  28.     my $fallback = File::Spec->catfile('fallback', $file);
  29.     copy ($fallback, $file) or die "Can't copy $fallback to $file: $!";
  30.   }
  31. }
  32. sub InitMakeParams {
  33.     my $opts;
  34.     my %Params = (
  35.   'NAME' => 'NetSNMP::TrapReceiver',
  36.   'VERSION_FROM' => 'TrapReceiver.pm', # finds $VERSION
  37.   'XSPROTOARG'          => '-prototypes',
  38.   'PREREQ_PM' => { NetSNMP::OID => 5.1 },
  39.   ($] >= 5.005 ? ## Add these new keywords supported since 5.005
  40.    (ABSTRACT_FROM => 'TrapReceiver.pm',
  41.     AUTHOR        =>
  42.     'W. Hardaker <hardaker@users.sourceforge.net>') : ()),
  43.   'INC' => '-I.', # e.g., '-I. -I/usr/include/other'
  44.  );
  45.     if ($ENV{'OSTYPE'} eq 'msys') {
  46.       $Params{'DEFINE'} = "-DMINGW_PERL";
  47.     }
  48.     my ($snmp_lib, $snmp_llib, $sep);
  49.     if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
  50.       $opts = NetSNMPGetOpts();
  51.       $Params{'DEFINE'} = "-DMSVC_PERL";
  52.       $sep = '\';
  53.       $snmp_lib_file = 'netsnmp.lib';
  54.       $snmp_link_lib = 'netsnmp';
  55.       $agent_link_lib = 'netsnmpagent';
  56.       $helpers_link_lib = 'netsnmphelpers';
  57.       $mibs_link_lib = 'netsnmpmibs';
  58.       $trapd_link_lib = 'netsnmptrapd';
  59.       if (lc($opts->{'debug'}) eq "true") {
  60.         $lib_dir = 'lib\debug';
  61.       }
  62.       else {
  63.         $lib_dir = 'lib\release';
  64.       }
  65.     
  66.       if (lc($opts->{'insource'}) eq "true") {
  67. $Params{'LIBS'} = "-L$basedir\win32\$lib_dir\ -l$snmp_link_lib -l$agent_link_lib -l$helpers_link_lib " .
  68.                 "-l$mibs_link_lib -l$trapd_link_lib ";
  69.       }
  70.       else {
  71. my @LibDirs = split (';',$ENV{LIB});
  72.         my $LibDir;
  73. if ($opts->{'prefix'}) {
  74.   push (@LibDirs,"$ENV{'NET-SNMP-PATH'}${sep}lib");
  75. }
  76. $noLibDir = 1;
  77. while ($noLibDir) {
  78.   $LibDir = find_files(["$snmp_lib_file"],@LibDirs);
  79.   if ($LibDir ne '') {
  80.     $noLibDir = 0;
  81.             # Put quotes around LibDir to allow spaces in paths
  82.             $LibDir = '"' . $LibDir . '"';          
  83.   }
  84.   else
  85.   {
  86.     @LibDirs = ();
  87.     @LibDirs[0] = prompt("The Net-SNMP library ($snmp_lib_file) could not be found.nPlease enter the directory where it is located:");
  88.     @LibDirs[0] =~ s/\$//;
  89.   }
  90. }
  91. $Params{LIBS} = "-L$LibDir -l$snmp_link_lib -l$agent_link_lib -l$helpers_link_lib -l$mibs_link_lib -l$trapd_link_lib ";
  92.       }
  93.       $Params{'INC'} = "-I$basedir\include\ -I$basedir\include\net-snmp\ -I$basedir\win32\ ";
  94.     }
  95.     else {
  96. $opts = NetSNMPGetOpts();
  97. if (!$ENV{'NETSNMP_CCFLAGS'}) {
  98.     $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`;
  99.     chomp($Params{'CCFLAGS'});
  100.     $Params{'CCFLAGS'} .= " " . $Config{'ccflags'};
  101. } else {
  102.     $Params{'CCFLAGS'} = $ENV{'NETSNMP_CCFLAGS'};
  103. }
  104. if (lc($opts->{'insource'}) eq "true") {
  105.     $Params{'CCFLAGS'} = "-I../../include " . $Params{'CCFLAGS'};
  106. }
  107. $Params{'CCFLAGS'} =~ s/ -W[-w]+//g; # ignore developer warnings
  108. if ($Params{'CCFLAGS'} eq "") {
  109.     die "You need to install net-snmp first (I can't find net-snmp-config)";
  110. }
  111.     }
  112.     return(%Params);
  113. }
  114. # common subroutines -- DO NOT EDIT.
  115. # They are imported from the Makefile.subs.pl file
  116. sub NetSNMPGetOpts {
  117.     my %ret;
  118.     my $rootpath = shift;
  119.     $rootpath = "../" if (!$rootpath);
  120.     $rootpath .= '/' if ($rootpath !~ //$/);
  121.     if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
  122.       # Grab command line options first.  Only used if environment variables are not set
  123.       GetOptions("NET-SNMP-IN-SOURCE=s" => $ret{'insource'},
  124.         "NET-SNMP-PATH=s"      => $ret{'prefix'},          
  125.         "NET-SNMP-DEBUG=s"     => $ret{'debug'});
  126.       if ($ENV{'NET-SNMP-IN-SOURCE'})
  127.       {
  128. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  129.         undef ($ret{'prefix'});
  130.       }
  131.       elsif ($ENV{'NET-SNMP-PATH'})
  132.       {
  133. $ret{'prefix'} = $ENV{'NET-SNMP-PATH'};
  134.       }
  135.       if ($ENV{'NET-SNMP-DEBUG'})
  136.       {
  137. $ret{'debug'} = $ENV{'NET-SNMP-DEBUG'};
  138.       }
  139.       # Update environment variables in case they are needed
  140.       $ENV{'NET-SNMP-IN-SOURCE'}    = $ret{'insource'};
  141.       $ENV{'NET-SNMP-PATH'}         = $ret{'prefix'};
  142.       $ENV{'NET-SNMP-DEBUG'}        = $ret{'debug'};
  143.      
  144.       $basedir = `%COMSPEC% /c cd`;
  145.       chomp $basedir;
  146.       $basedir =~ /(.*?)\perl.*/;
  147.       $basedir = $1;
  148.       print "Net-SNMP base directory: $basedirn";
  149.       if ($basedir =~ / /) {
  150.         die "nA space has been detected in the base directory.  This is not " .
  151.             "supportednPlease rename the folder and try again.nn";
  152.       }
  153.     }
  154.     else
  155.     {
  156.       if ($ENV{'NET-SNMP-CONFIG'} && 
  157.         $ENV{'NET-SNMP-IN-SOURCE'}) {
  158. # have env vars, pull from there
  159. $ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'};
  160. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  161.       } else {
  162. # don't have env vars, pull from command line and put there
  163. GetOptions("NET-SNMP-CONFIG=s" => $ret{'nsconfig'},
  164.            "NET-SNMP-IN-SOURCE=s" => $ret{'insource'});
  165. if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") {
  166.     $ret{'nsconfig'}="sh ROOTPATH../net-snmp-config";
  167. } elsif ($ret{'nsconfig'} eq "") {
  168.     $ret{'nsconfig'}="net-snmp-config";
  169. }
  170. $ENV{'NET-SNMP-CONFIG'}    = $ret{'nsconfig'};
  171. $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
  172.       }
  173.     }
  174.     
  175.     $ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/;
  176.     $ret{'rootpath'} = $rootpath;
  177.     %ret;
  178. }
  179. sub find_files {
  180.     my($f,$d) = @_;
  181.     my ($dir,$found,$file);
  182.     for $dir (@$d){
  183. $found = 0;
  184. for $file (@$f) {
  185.     $found++ if -f "$dir/$file";
  186. }
  187. if ($found == @$f) {
  188.     return $dir;
  189. }
  190.     }
  191. }