#!/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";

