blob: c191f28abc0f0ae1a3aaa773673ccfc8d94d3d81 [file] [log] [blame]
#!/usr/bin/perl
#
# Build script for Net-SNMP and MSVC
# Written by Alex Burger - alex_b@users.sourceforge.net
# March 12th, 2004
#
use strict;
my $openssl = "disabled";
my $b_ipv6 = "disabled";
my $b_winextdll = "disabled";
my $sdk = "disabled";
my $default_install_base = "c:/usr";
my $install_base = $default_install_base;
my $install = "enabled";
my $install_devel = "disabled";
my $perl = "disabled";
my $perl_install = "disabled";
my $logging = "enabled";
my $debug = "disabled";
my $configOpts = "";
my $linktype = "static";
my $option;
# Prepend win32\ if running from main directory
my $current_pwd = `%COMSPEC% /c cd`;
chomp $current_pwd;
if (! ($current_pwd =~ /\\win32$/)) {
chdir ("win32");
$current_pwd = `%COMSPEC% /c cd`;
chomp $current_pwd;
}
if ( -d $ENV{MSVCDir} || -d $ENV{VCINSTALLDIR}) {
}
else {
print "\nPlease run VCVARS32.BAT first to set up the Visual Studio build\n" .
"environment.\n\n";
system("pause");
exit;
}
while (1) {
print "\n\nNet-SNMP build and install options\n";
print "==================================\n\n";
print "1. OpenSSL support: " . $openssl. "\n";
print "2. Platform SDK support: " . $sdk . "\n";
print "\n";
print "3. Install path: " . $install_base . "\n";
print "4. Install after build: " . $install . "\n";
print "\n";
print "5. Perl modules: " . $perl . "\n";
print "6. Install perl modules: " . $perl_install . "\n";
print "\n";
print "7. Quiet build (logged): " . $logging . "\n";
print "8. Debug mode: " . $debug . "\n";
print "\n";
print "9. IPv6 transports (requires SDK): " . $b_ipv6 . "\n";
print "10. winExtDLL agent (requires SDK): " . $b_winextdll . "\n";
print "\n";
print "11. Link type: " . $linktype . "\n";
print "\n";
print "12. Install development files " . $install_devel . "\n";
print "\nF. Finished - start build\n";
print "Q. Quit - abort build\n\n";
print "Select option to set / toggle: ";
chomp ($option = <>);
if ($option eq "1") {
if ($openssl eq "enabled") {
$openssl = "disabled";
}
else {
$openssl = "enabled";
}
}
elsif ($option eq "2") {
if ($sdk eq "enabled") {
$sdk = "disabled";
}
else {
$sdk = "enabled";
}
}
elsif ($option eq "9") {
if ($b_ipv6 eq "enabled") {
$b_ipv6 = "disabled";
}
else {
$b_ipv6 = "enabled";
if ($sdk = "disabled") {
print "\n\n* SDK required for IPv6 and has been automatically enabled";
$sdk = "enabled";
}
}
}
elsif ($option eq "10") {
if ($b_winextdll eq "enabled") {
$b_winextdll = "disabled";
}
else {
$b_winextdll = "enabled";
if ($sdk = "disabled") {
print "\n\n* SDK required for IPv6 and has been automatically enabled";
$sdk = "enabled";
}
}
}
elsif ($option eq "3") {
print "Please enter the new install path [$default_install_base]: ";
chomp ($install_base = <>);
if ($install_base eq "") {
$install_base = $default_install_base;
}
$install_base =~ s/\\/\//g;
}
elsif ($option eq "4") {
if ($install eq "enabled") {
$install = "disabled";
}
else {
$install = "enabled";
}
}
elsif ($option eq "12") {
if ($install_devel eq "enabled") {
$install_devel = "disabled";
}
else {
$install_devel = "enabled";
}
}
elsif ($option eq "5") {
if ($perl eq "enabled") {
$perl = "disabled";
}
else {
$perl = "enabled";
}
}
elsif ($option eq "6") {
if ($perl_install eq "enabled") {
$perl_install = "disabled";
}
else {
$perl_install = "enabled";
}
}
elsif ($option eq "7") {
if ($logging eq "enabled") {
$logging = "disabled";
}
else {
$logging = "enabled";
}
}
elsif ($option eq "8") {
if ($debug eq "enabled") {
$debug = "disabled";
}
else {
$debug = "enabled";
}
}
elsif ($option eq "11") {
if ($linktype eq "static") {
$linktype = "dynamic";
}
else {
$linktype = "static";
}
}
elsif (lc($option) eq "f") {
last;
}
elsif (lc($option) eq "q") {
exit;
}
}
$configOpts .= $openssl eq "enabled" ? "--with-ssl" : "";
$configOpts .= " ";
$configOpts .= $sdk eq "enabled" ? "--with-sdk" : "";
$configOpts .= " ";
$configOpts .= $b_ipv6 eq "enabled" ? "--with-ipv6" : "";
$configOpts .= " ";
$configOpts .= $b_winextdll eq "enabled" ? "--with-winextdll" : "";
$configOpts .= " ";
$configOpts .= $debug eq "enabled" ? "--config=debug" : "--config=release";
# Set environment variables
# Set to not search for non-existent ".dep" files
$ENV{NO_EXTERNAL_DEPS}="1";
# Set PATH environment variable so Perl make tests can locate the DLL
$ENV{PATH} = "$current_pwd\\bin\\" . ($debug eq "enabled" ? "debug" : "release" ) . ";$ENV{PATH}";
# Set MIBDIRS environment variable so Perl make tests can locate the mibs
my $temp_mibdir = "$current_pwd/../mibs";
$temp_mibdir =~ s/\\/\//g;
$ENV{MIBDIRS}=$temp_mibdir;
# Set SNMPCONFPATH environment variable so Perl conf.t test can locate
# the configuration files.
# See the note about environment variables in the Win32 section of
# perl/SNMP/README for details on why this is needed.
$ENV{SNMPCONFPATH}="t";$ENV{SNMPCONFPATH};
print "\nBuilding...\n";
if ($logging eq "enabled") {
print "\nCreating *.out log files.\n\n";
}
if ($logging eq "enabled") {
print "Deleting old log files...\n";
system("del *.out > NUL: 2>&1");
# Delete net-snmp-config.h from main include folder just in case it was created by a Cygwin or MinGW build
system("del ..\\include\\net-snmp\\net-snmp-config.h > NUL: 2>&1");
unlink "../snmplib/transports/snmp_transport_inits.h";
print "Running Configure...\n";
system("perl Configure $configOpts --linktype=$linktype --prefix=\"$install_base\" > configure.out 2>&1") == 0 || die "Build error (see configure.out)";
print "Cleaning...\n";
system("nmake /nologo clean > clean.out 2>&1") == 0 || die "Build error (see clean.out)";
print "Building main package...\n";
system("nmake /nologo > make.out 2>&1") == 0 || die "Build error (see make.out)";
if ($perl eq "enabled") {
if ($linktype eq "static") {
print "Running Configure for DLL...\n";
system("perl Configure $configOpts --linktype=dynamic --prefix=\"$install_base\" > perlconfigure.out 2>&1") == 0 || die "Build error (see perlconfigure.out)";
print "Cleaning libraries...\n";
system("nmake /nologo libs_clean >> clean.out 2>&1") == 0 || die "Build error (see clean.out)";
print "Building DLL libraries...\n";
system("nmake /nologo libs > dll.out 2>&1") == 0 || die "Build error (see dll.out)";
}
print "Cleaning Perl....\n";
system("nmake /nologo perl_clean >> clean.out 2>&1"); # If already cleaned, Makefile is gone so don't worry about errors!
print "Building Perl modules...\n";
system("nmake /nologo perl > perlmake.out 2>&1") == 0 || die "Build error (see perlmake.out)";
print "Testing Perl modules...\n";
system("nmake /nologo perl_test > perltest.out 2>&1"); # Don't die if all the tests don't pass..
if ($perl_install eq "enabled") {
print "Installing Perl modules...\n";
system("nmake /nologo perl_install > perlinstall.out 2>&1") == 0 || die "Build error (see perlinstall.out)";
}
print "\nSee perltest.out for Perl test results\n";
}
print "\n";
if ($install eq "enabled") {
print "Installing main package...\n";
system("nmake /nologo install > install.out 2>&1") == 0 || die "Build error (see install.out)";
}
else {
print "Type nmake install to install the package to $install_base\n";
}
if ($install_devel eq "enabled") {
print "Installing development files...\n";
system("nmake /nologo install_devel > install_devel.out 2>&1") == 0 || die "Build error (see install_devel.out)";
}
else {
print "Type nmake install_devel to install the development files to $install_base\n";
}
if ($perl_install eq "disabled" && $perl eq "enabled") {
print "Type nmake perl_install to install the Perl modules\n";
}
}
else {
system("del *.out");
# Delete net-snmp-config.h from main include folder just in case it was created by a Cygwin or MinGW build
system("del ..\\include\\net-snmp\\net-snmp-config.h > NUL: 2>&1");
system("perl Configure $configOpts --linktype=$linktype --prefix=\"$install_base\"") == 0 || die "Build error (see above)";
system("nmake /nologo clean") == 0 || die "Build error (see above)";
system("nmake /nologo") == 0 || die "Build error (see above)";
if ($perl eq "enabled") {
if ($linktype eq "static") {
system("perl Configure $configOpts --linktype=dynamic --prefix=\"$install_base\"") == 0 || die "Build error (see above)";
system("nmake /nologo libs_clean") == 0 || die "Build error (see above)";
system("nmake /nologo libs") == 0 || die "Build error (see above)";
}
system("nmake /nologo perl_clean"); # If already cleaned, Makefile is gone so don't worry about errors!
system("nmake /nologo perl") == 0 || die "Build error (see above)";
my $path_old = $ENV{PATH};
$ENV{PATH} = "$current_pwd\\bin\\" . ($debug eq "enabled" ? "debug" : "release" ) . ";$ENV{PATH}";
system("nmake /nologo perl_test"); # Don't die if all the tests don't pass..
$ENV{PATH} = $path_old;
if ($perl_install eq "enabled") {
print "Installing Perl modules...\n";
system("nmake /nologo perl_install") == 0 || die "Build error (see above)";
}
}
print "\n";
if ($install eq "enabled") {
print "Installing main package...\n";
system("nmake /nologo install") == 0 || die "Build error (see above)";
}
else {
print "Type nmake install to install the package to $install_base\n";
}
if ($install_devel eq "enabled") {
print "Installing development files...\n";
system("nmake /nologo install_devel > install_devel.out 2>&1") == 0 || die "Build error (see install_devel.out)";
}
else {
print "Type nmake install_devel to install the development files to $install_base\n";
}
if ($perl_install eq "disabled" && $perl eq "enabled") {
print "Type nmake perl_install to install the Perl modules\n";
}
}
print "\nDone!\n";