diff options
Diffstat (limited to 'win32/build.pl')
-rw-r--r-- | win32/build.pl | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/win32/build.pl b/win32/build.pl new file mode 100644 index 0000000..196b779 --- /dev/null +++ b/win32/build.pl @@ -0,0 +1,338 @@ +#!/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 $cTmp = ""; +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; + } +} + +$cTmp = ($openssl eq "enabled" ? "--with-ssl" : "" ); +$configOpts = "$cTmp"; +$cTmp = ($sdk eq "enabled" ? "--with-sdk" : "" ); +$configOpts = "$configOpts $cTmp"; +$cTmp = ($b_ipv6 eq "enabled" ? "--with-ipv6" : "" ); +$configOpts = "$configOpts $cTmp"; +$cTmp = ($b_winextdll eq "enabled" ? "--with-winextdll" : "" ); +$configOpts = "$configOpts $cTmp"; +$cTmp = ($debug eq "enabled" ? "--config=debug" : "--config=release" ); +$configOpts = "$configOpts $cTmp"; + +# 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"; + |