blob: 98fa3fd11853e959d7cb735254d8ff01bc8f51eb [file] [log] [blame]
#!/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";
}