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

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. sub InitMakeParams {
  9.     my $opts;
  10.     my %Params = (
  11.   'NAME' => 'NetSNMP::agent',
  12.   'VERSION_FROM' => 'agent.pm', # finds $VERSION
  13.   'XSPROTOARG'          => '-prototypes',
  14.   'PM'                => { 
  15.       'agent.pm' => '$(INST_LIBDIR)/agent.pm',
  16.       'netsnmp_request_infoPtr.pm' =>
  17.   '$(INST_LIBDIR)/agent/netsnmp_request_infoPtr.pm'
  18.   },
  19.   'PREREQ_PM'           => {},
  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.       $agent_link_lib = 'netsnmpagent';
  33.       $helpers_link_lib = 'netsnmphelpers';
  34.       $mibs_link_lib = 'netsnmpmibs';
  35.       if (lc($opts->{'debug'}) eq "true") {
  36.         $lib_dir = 'lib\debug';
  37.       }
  38.       else {
  39.         $lib_dir = 'lib\release';
  40.       }
  41.     
  42.       if (lc($opts->{'insource'}) eq "true") {
  43. $Params{'LIBS'} = "-L$basedir\win32\$lib_dir\ -l$snmp_link_lib -l$agent_link_lib -l$helpers_link_lib " .
  44.                 "-l$mibs_link_lib";
  45.       }
  46.       else {
  47. my @LibDirs = split (';',$ENV{LIB});
  48.         my $LibDir;
  49. if ($opts->{'prefix'}) {
  50.   push (@LibDirs,"$ENV{'NET-SNMP-PATH'}${sep}lib");
  51. }
  52. $noLibDir = 1;
  53. while ($noLibDir) {
  54.   $LibDir = find_files(["$snmp_lib_file"],@LibDirs);
  55.   if ($LibDir ne '') {
  56.     $noLibDir = 0;
  57.             # Put quotes around LibDir to allow spaces in paths
  58.             $LibDir = '"' . $LibDir . '"';          
  59.   }
  60.   else
  61.   {
  62.     @LibDirs = ();
  63.     @LibDirs[0] = prompt("The Net-SNMP library ($snmp_lib_file) could not be found.nPlease enter the directory where it is located:");
  64.     @LibDirs[0] =~ s/\$//;
  65.   }
  66. }
  67. $Params{LIBS} = "-L$LibDir -l$snmp_link_lib -l$agent_link_lib -l$helpers_link_lib -l$mibs_link_lib";
  68.       }
  69.       $Params{'INC'} = "-I$basedir\include\ -I$basedir\include\net-snmp\ -I$basedir\win32\ ";
  70.     }
  71.     else {
  72. $opts = NetSNMPGetOpts();
  73. $Params{'LIBS'}    = `$opts->{'nsconfig'} --agent-libs`;
  74. chomp($Params{'LIBS'});
  75. $Params{'CCFLAGS'} = `$opts->{'nsconfig'} --cflags`;
  76. chomp($Params{'CCFLAGS'});
  77. $Params{'CCFLAGS'} .= " " . $Config{'ccflags'};
  78. if (lc($opts->{'insource'}) eq "true") {
  79.     $Params{'LIBS'} = "-L../../snmplib/.libs -L../../snmplib/ -L../../agent/.libs -L../../agent/ -L../../agent/helpers/.libs -L../../agent/helpers/ " . $Params{'LIBS'};
  80.     $Params{'CCFLAGS'} = "-I../../include " . $Params{'CCFLAGS'};
  81. # } else {
  82. #     $Params{'PREREQ_PM'} = {'NetSNMP::OID' => '0.1'};
  83. }
  84. $Params{'CCFLAGS'} =~ s/ -W[-w]+//g; # ignore developer warnings
  85. if ($Params{'LIBS'} eq "" || $Params{'CCFLAGS'} eq "") {
  86.     die "You need to install net-snmp first (I can't find net-snmp-config)";
  87. }
  88.     }
  89.     return(%Params);
  90. }
  91. # common subroutines -- DO NOT EDIT.
  92. # They are imported from the Makefile.subs.pl file
  93. sub NetSNMPGetOpts {
  94.     my %ret;
  95.     my $rootpath = shift;
  96.     $rootpath = "../" if (!$rootpath);
  97.     $rootpath .= '/' if ($rootpath !~ //$/);
  98.     
  99.     if (($Config{'osname'} eq 'MSWin32' && $ENV{'OSTYPE'} ne 'msys')) {
  100.       # Grab command line options first.  Only used if environment variables are not set
  101.       GetOptions("NET-SNMP-IN-SOURCE=s" => $ret{'insource'},
  102.         "NET-SNMP-PATH=s"      => $ret{'prefix'},          
  103.         "NET-SNMP-DEBUG=s"     => $ret{'debug'});
  104.       if ($ENV{'NET-SNMP-IN-SOURCE'})
  105.       {
  106. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  107.         undef ($ret{'prefix'});
  108.       }
  109.       elsif ($ENV{'NET-SNMP-PATH'})
  110.       {
  111. $ret{'prefix'} = $ENV{'NET-SNMP-PATH'};
  112.       }
  113.       if ($ENV{'NET-SNMP-DEBUG'})
  114.       {
  115. $ret{'debug'} = $ENV{'NET-SNMP-DEBUG'};
  116.       }
  117.       # Update environment variables in case they are needed
  118.       $ENV{'NET-SNMP-IN-SOURCE'}    = $ret{'insource'};
  119.       $ENV{'NET-SNMP-PATH'}         = $ret{'prefix'};
  120.       $ENV{'NET-SNMP-DEBUG'}        = $ret{'debug'};        
  121.      
  122.       $basedir = `%COMSPEC% /c cd`;
  123.       chomp $basedir;
  124.       $basedir =~ /(.*?)\perl.*/;
  125.       $basedir = $1;
  126.       print "Net-SNMP base directory: $basedirn";
  127.       if ($basedir =~ / /) {
  128.         die "nA space has been detected in the base directory.  This is not " .
  129.             "supportednPlease rename the folder and try again.nn";
  130.       }
  131.     }
  132.     else
  133.     {
  134.       if ($ENV{'NET-SNMP-CONFIG'} && 
  135.         $ENV{'NET-SNMP-IN-SOURCE'}) {
  136. # have env vars, pull from there
  137. $ret{'nsconfig'} = $ENV{'NET-SNMP-CONFIG'};
  138. $ret{'insource'} = $ENV{'NET-SNMP-IN-SOURCE'};
  139.       } else {
  140. # don't have env vars, pull from command line and put there
  141. GetOptions("NET-SNMP-CONFIG=s" => $ret{'nsconfig'},
  142.            "NET-SNMP-IN-SOURCE=s" => $ret{'insource'});
  143. if (lc($ret{'insource'}) eq "true" && $ret{'nsconfig'} eq "") {
  144.     $ret{'nsconfig'}="sh ROOTPATH../net-snmp-config";
  145. } elsif ($ret{'nsconfig'} eq "") {
  146.     $ret{'nsconfig'}="net-snmp-config";
  147. }
  148. $ENV{'NET-SNMP-CONFIG'}    = $ret{'nsconfig'};
  149. $ENV{'NET-SNMP-IN-SOURCE'} = $ret{'insource'};
  150.       }
  151.     }
  152.     
  153.     $ret{'nsconfig'} =~ s/ROOTPATH/$rootpath/;
  154.     $ret{'rootpath'} = $rootpath;
  155.     %ret;
  156. }
  157. sub find_files {
  158.     my($f,$d) = @_;
  159.     my ($dir,$found,$file);
  160.     for $dir (@$d){
  161. $found = 0;
  162. for $file (@$f) {
  163.     $found++ if -f "$dir/$file";
  164. }
  165. if ($found == @$f) {
  166.     return $dir;
  167. }
  168.     }
  169. }