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