| #!/usr/bin/perl |
| # |
| # Configure script for Net-SNMP and MSVC |
| # Written by Alex Burger |
| # March 5th, 2004 |
| # |
| use Getopt::Long; |
| use strict; |
| |
| my $config; |
| my $sdk = 0; |
| my $linktype; |
| my $prefix; |
| my $prefixdos; |
| my $openssl = 0; |
| my $b_ipv6 = 0; |
| my $b_winextdll = 0; |
| my $help = 0; |
| |
| GetOptions ('config=s' => \$config, |
| 'with-sdk' => \$sdk, |
| 'linktype=s' => \$linktype, |
| 'destdir=s' => \$prefix, |
| 'prefix=s' => \$prefix, |
| 'with-ssl' => \$openssl, |
| 'with-ipv6' => \$b_ipv6, |
| 'with-winextdll' => \$b_winextdll, |
| 'help' => \$help); |
| |
| if ($help == 1) |
| { |
| my $USAGE = qq/ |
| Usage: |
| perl Configure [<options>] |
| |
| Options: |
| |
| --config=[release | debug] Compile as release or with debug symbols |
| --with-sdk Link against MS Platform SDK |
| --linktype=[static | dynamic] Build static or dynamic (DLL) |
| --prefix=\"path\" Set INSTALL_BASE path (install path) |
| --destdir=\"path\" Same as --prefix |
| --with-ssl Link against OpenSSL |
| --with-ipv6 Build in IPv6 transports (enables SDK) |
| --with-winextdll Build winExtDLL agent (enables SDK, see README.win32) |
| --help This help screen |
| /; |
| |
| print $USAGE; |
| |
| exit(0); |
| |
| } |
| |
| $config = lc($config); |
| if (($config ne "debug") && ($config ne "release")) { |
| $config = "release"; |
| } |
| |
| $linktype = lc($linktype); |
| if (($linktype ne "static") && ($linktype ne "dynamic")) { |
| $linktype = "static"; |
| } |
| |
| if ($prefix eq "") { |
| $prefix = "c:/usr"; |
| } |
| |
| # Make sure prefix only contains forward slashes |
| $prefix =~ s/\\/\//g; |
| |
| $prefixdos = "\"$prefix\""; |
| # Make sure prefixdos only contains backward slashes |
| $prefixdos =~ s/\//\\/g; |
| |
| # Enable SDK for IPV6 and winExtDLL |
| if ($b_ipv6 == 1) { |
| $sdk = 1; |
| } |
| if ($b_winextdll == 1) { |
| $sdk = 1; |
| } |
| |
| print "\n\n"; |
| |
| ############################################### |
| # |
| # Create main Makefile |
| # |
| ############################################### |
| { |
| my $makefile_out = "Makefile"; |
| my $makefile_in = "Makefile.in"; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| if ($sdk == 1) { |
| s/^SDK=/SDK=true/; |
| } |
| else { |
| s/^SDK=/SDK=false/; |
| } |
| |
| s/^LINKTYPE=/LINKTYPE=$linktype/; |
| s/^CFG=/CFG=$config/; |
| s/^PREFIX=/PREFIX=$prefix/; |
| s/^PREFIX_DOS=/PREFIX_DOS=$prefixdos/; |
| s/^SSL=.*/SSL=$openssl/; |
| |
| print MAKE_OUT $_ . "\n"; |
| } |
| } |
| |
| ############################################### |
| # |
| # Create Makefiles for applications from |
| # Makefile-apps.in |
| # (except for snmpnetstat) |
| # |
| ############################################### |
| my @programs = qw |
| /encode_keychange |
| snmpbulkget |
| snmpbulkwalk |
| snmpdelta |
| snmpdf |
| snmpget |
| snmpgetnext |
| snmpset |
| snmpstatus |
| snmptable |
| snmptest |
| snmptranslate |
| snmptrap |
| snmpusm |
| snmpvacm |
| snmpwalk |
| /; |
| |
| foreach my $progName (@programs) { |
| |
| my $makefile_out = "$progName\\Makefile"; |
| my $makefile_in = "Makefile-apps.in"; |
| |
| my $outdir = $config; |
| my $intdir = $config; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| |
| s/^LINKTYPE=/LINKTYPE=$linktype/; |
| s/^PROGNAME=/PROGNAME=$progName/; |
| s/^CFG=/CFG=$config/; |
| s/^OUTDIR=/OUTDIR=.\\$outdir/; |
| s/^INTDIR=/INTDIR=.\\$intdir/; |
| s/^SSL=.*/SSL=$openssl/; |
| |
| print MAKE_OUT $_ . "\n"; |
| } |
| } |
| |
| ############################################### |
| # |
| # Create Makefiles for snmpnetstat from |
| # snmpnetstat\Makefile.in |
| # |
| ############################################### |
| my @programs = qw |
| /snmpnetstat |
| /; |
| |
| foreach my $progName (@programs) { |
| |
| my $makefile_out = "$progName\\Makefile"; |
| my $makefile_in = "$progName\\Makefile.in"; |
| |
| my $outdir = $config; |
| my $intdir = $config; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| |
| s/^LINKTYPE=/LINKTYPE=$linktype/; |
| s/^PROGNAME=/PROGNAME=$progName/; |
| s/^CFG=/CFG=$config/; |
| s/^OUTDIR=/OUTDIR=.\\$outdir/; |
| s/^INTDIR=/INTDIR=.\\$intdir/; |
| s/^SSL=.*/SSL=$openssl/; |
| |
| print MAKE_OUT $_ . "\n"; |
| } |
| } |
| |
| |
| ############################################### |
| # |
| # Create Makefiles for libraries |
| # from name\Makefile.in |
| # |
| ############################################### |
| my @programs = qw |
| /libagent |
| libhelpers |
| libnetsnmptrapd |
| /; |
| |
| if ($sdk == 1) { |
| push (@programs, "netsnmpmibssdk"); |
| } |
| else { |
| push (@programs, "netsnmpmibs"); |
| } |
| |
| if ($linktype eq "dynamic") { |
| push (@programs, "libsnmp_dll"); |
| } |
| else { |
| push (@programs, "libsnmp"); |
| } |
| |
| foreach my $progName (@programs) { |
| |
| my $makefile_out = "$progName\\Makefile"; |
| my $makefile_in = "$progName\\Makefile.in"; |
| |
| my $outdir = $config; |
| my $intdir = $config; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| |
| s/^PROGNAME=/PROGNAME=$progName/; |
| s/^CFG=/CFG=$config/; |
| s/^OUTDIR=/OUTDIR=.\\$outdir/; |
| s/^INTDIR=/INTDIR=.\\$intdir/; |
| s/^SSL=.*/SSL=$openssl/; |
| if ($b_winextdll == 1) { |
| s/#(.*?)\s+# uncomment for winExtDLL.*/$1/; |
| s/^LIB32_FLAGS=(.*)/LIB32_FLAGS=MgmtAPI.lib snmpapi.lib $1/; |
| } |
| print MAKE_OUT $_ . "\n"; |
| } |
| } |
| |
| ############################################### |
| # |
| # Create Makefiles for daemons |
| # from name\Makefile.in |
| # |
| ############################################### |
| my @programs = qw |
| /snmptrapd |
| /; |
| |
| if ($sdk == 1) { |
| push (@programs, "snmpdsdk"); |
| } |
| else { |
| push (@programs, "snmpd"); |
| } |
| |
| foreach my $progName (@programs) { |
| |
| my $makefile_out = "$progName\\Makefile"; |
| my $makefile_in = "$progName\\Makefile.in"; |
| |
| my $outdir = $config; |
| my $intdir = $config; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| |
| s/^LINKTYPE=/LINKTYPE=$linktype/; |
| s/^PROGNAME=/PROGNAME=$progName/; |
| s/^CFG=/CFG=$config/; |
| s/^OUTDIR=/OUTDIR=.\\$outdir/; |
| s/^INTDIR=/INTDIR=.\\$intdir/; |
| s/^SSL=.*/SSL=$openssl/; |
| |
| print MAKE_OUT $_ . "\n"; |
| } |
| } |
| |
| ############################################### |
| # |
| # Create Makefile for Perl scripts in local |
| # from local\Makefile.in |
| # |
| ############################################### |
| |
| my $makefile_out = "local\\Makefile"; |
| my $makefile_in = "local\\Makefile.in"; |
| |
| my $outdir = $config; |
| |
| open (MAKE_OUT, ">$makefile_out") || die "Can't Open $makefile_out\n"; |
| open (MAKE_IN, "<$makefile_in") || die "Can't Open $makefile_in\n"; |
| |
| print "creating $makefile_out\n"; |
| |
| while (<MAKE_IN>) |
| { |
| chomp; |
| |
| s/^OUTDIR=/OUTDIR=.\\$outdir/; |
| s/^PREFIX=/PREFIX=$prefix/; |
| s/^PREFIX_DOS=/PREFIX_DOS=$prefixdos/; |
| |
| print MAKE_OUT $_ . "\n"; |
| } |
| |
| |
| ############################################### |
| # |
| # Create net-snmp-config.h |
| # |
| ############################################### |
| { |
| my $file_out = "net-snmp\\net-snmp-config.h"; |
| my $file_in = "net-snmp\\net-snmp-config.h.in"; |
| |
| open (FILE_OUT, ">$file_out") || die "Can't Open $file_out\n"; |
| open (FILE_IN, "<$file_in") || die "Can't Open $file_in\n"; |
| |
| print "creating $file_out\n"; |
| |
| while (<FILE_IN>) |
| { |
| chomp; |
| |
| if ($prefix ne "") { |
| s/^#define INSTALL_BASE.*/#define INSTALL_BASE \"$prefix\"/; |
| } |
| if ($linktype eq "dynamic") { |
| s/^.*#undef NETSNMP_USE_DLL.*/#define NETSNMP_USE_DLL 1/; |
| } |
| if ($sdk == 1) { |
| s/^.*#undef HAVE_WIN32_PLATFORM_SDK.*/#define HAVE_WIN32_PLATFORM_SDK 1/; |
| } |
| if ($openssl == 1) { |
| s/^.*#undef NETSNMP_USE_OPENSSL.*/#define NETSNMP_USE_OPENSSL 1/; |
| } |
| if ($b_ipv6 == 1) { |
| s/^.*#undef NETSNMP_ENABLE_IPV6.*/#define NETSNMP_ENABLE_IPV6 1/; |
| } |
| if ($b_winextdll == 1) { |
| s/^.*#undef USING_WINEXTDLL_MODULE.*/#define USING_WINEXTDLL_MODULE 1/; |
| } |
| |
| print FILE_OUT $_ . "\n"; |
| } |
| } |
| |
| ############################################### |
| # |
| # Create libsnmp.def file for libsnmp_dll |
| # |
| ############################################### |
| if ($linktype eq "dynamic") |
| { |
| my $file_out = "libsnmp_dll\\libsnmp.def"; |
| my $file_in = "libsnmp_dll\\libsnmp.def.in"; |
| |
| open (FILE_OUT, ">$file_out") || die "Can't Open $file_out\n"; |
| open (FILE_IN, "<$file_in") || die "Can't Open $file_in\n"; |
| |
| print "creating $file_out\n"; |
| |
| while (<FILE_IN>) |
| { |
| chomp; |
| |
| if ($b_ipv6 == "1") { |
| s/^;ipv6//i; |
| } |
| |
| print FILE_OUT $_ . "\n"; |
| } |
| } |
| |
| |
| print qq/ |
| --------------------------------------------------------- |
| Net-SNMP configuration summary: |
| --------------------------------------------------------- |
| |
| /; |
| |
| print " Config type: $config\n"; |
| print " SDK: " . ($sdk == 1 ? "enabled" : "disabled") . "\n"; |
| print " Link type: $linktype\n"; |
| print " Prefix / Destdir: " . ($prefix ne "" ? $prefix : "(default)") . "\n"; |
| print " OpenSSL: " . ($openssl == 1 ? "enabled" : "disabled") . "\n"; |
| print " IPv6 transport: " . ($b_ipv6 == 1 ? "enabled" : "disabled") . "\n"; |
| print " winExtDLL agent: " . ($b_winextdll == 1 ? "enabled" : "disabled") . "\n"; |
| |
| if ($ENV{INCLUDE} eq "") { |
| print "\n\nVisual Studio environment not detected. Please run VCVARS32.BAT before\n"; |
| print "running nmake\n\n"; |
| } |
| |