diff options
Diffstat (limited to 'win32/Configure')
-rw-r--r-- | win32/Configure | 431 |
1 files changed, 431 insertions, 0 deletions
diff --git a/win32/Configure b/win32/Configure new file mode 100644 index 0000000..95e30b6 --- /dev/null +++ b/win32/Configure @@ -0,0 +1,431 @@ +#!/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"; +} + |