diff options
Diffstat (limited to '')
-rw-r--r-- | win32utils/Configure | 2778 | ||||
-rw-r--r-- | win32utils/GeoIP.diff | 345 | ||||
-rw-r--r-- | win32utils/bind9.sln.in | 772 | ||||
-rw-r--r-- | win32utils/build.txt | 293 | ||||
-rw-r--r-- | win32utils/readme1st.txt | 158 |
5 files changed, 4346 insertions, 0 deletions
diff --git a/win32utils/Configure b/win32utils/Configure new file mode 100644 index 0000000..44afdae --- /dev/null +++ b/win32utils/Configure @@ -0,0 +1,2778 @@ +#!/usr/bin/perl +# +# Copyright (C) Internet Systems Consortium, Inc. ("ISC") +# +# SPDX-License-Identifier: MPL-2.0 +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, you can obtain one at https://mozilla.org/MPL/2.0/. +# +# See the COPYRIGHT file distributed with this work for additional +# information regarding copyright ownership. + +# Configure +# +# This script builds nmake and visual studio build files +# + +require 5.000; +use strict; +use File::Spec; +use Cwd; + +# files to configure + +my $configfile = "..\\config.h"; +my $platformfile = "..\\lib\\isc\\win32\\include\\isc\\platform.h"; +my $confshfile = "..\\bin\\tests\\system\\conf.sh"; + +my @filelist = ("..\\bin\\python\\dnssec-checkds.py", + "..\\bin\\python\\dnssec-coverage.py", + "..\\bin\\python\\dnssec-keymgr.py", + "..\\bin\\python\\isc\\__init__.py", + "..\\bin\\python\\isc\\checkds.py", + "..\\bin\\python\\isc\\coverage.py", + "..\\bin\\python\\isc\\dnskey.py", + "..\\bin\\python\\isc\\eventlist.py", + "..\\bin\\python\\isc\\keydict.py", + "..\\bin\\python\\isc\\keyevent.py", + "..\\bin\\python\\isc\\keymgr.py", + "..\\bin\\python\\isc\\keyseries.py", + "..\\bin\\python\\isc\\keyzone.py", + "..\\bin\\python\\isc\\policy.py", + "..\\bin\\python\\isc\\rndc.py", + "..\\bin\\python\\isc\\tests\\dnskey_test.py", + "..\\bin\\python\\isc\\tests\\policy_test.py", + "..\\bin\\python\\isc\\utils.py", + "..\\lib\\dns\\win32\\libdns.def", + "..\\lib\\isc\\win32\\libisc.def"); + +my @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj", + "..\\bin\\check\\win32\\checkconf.vcxproj.filters", + "..\\bin\\check\\win32\\checktool.vcxproj", + "..\\bin\\check\\win32\\checktool.vcxproj.filters", + "..\\bin\\check\\win32\\checkzone.vcxproj", + "..\\bin\\check\\win32\\checkzone.vcxproj.filters", + "..\\bin\\confgen\\win32\\confgentool.vcxproj", + "..\\bin\\confgen\\win32\\confgentool.vcxproj.filters", + "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj", + "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj.filters", + "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj", + "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj.filters", + "..\\bin\\delv\\win32\\delv.vcxproj", + "..\\bin\\delv\\win32\\delv.vcxproj.filters", + "..\\bin\\dig\\win32\\dig.vcxproj", + "..\\bin\\dig\\win32\\dig.vcxproj.filters", + "..\\bin\\dig\\win32\\dighost.vcxproj", + "..\\bin\\dig\\win32\\dighost.vcxproj.filters", + "..\\bin\\dig\\win32\\host.vcxproj", + "..\\bin\\dig\\win32\\host.vcxproj.filters", + "..\\bin\\dig\\win32\\nslookup.vcxproj", + "..\\bin\\dig\\win32\\nslookup.vcxproj.filters", + "..\\bin\\dnssec\\win32\\cds.vcxproj", + "..\\bin\\dnssec\\win32\\cds.vcxproj.filters", + "..\\bin\\dnssec\\win32\\dnssectool.vcxproj", + "..\\bin\\dnssec\\win32\\dnssectool.vcxproj.filters", + "..\\bin\\dnssec\\win32\\dsfromkey.vcxproj", + "..\\bin\\dnssec\\win32\\dsfromkey.vcxproj.filters", + "..\\bin\\dnssec\\win32\\importkey.vcxproj", + "..\\bin\\dnssec\\win32\\importkey.vcxproj.filters", + "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj", + "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj.filters", + "..\\bin\\dnssec\\win32\\keygen.vcxproj", + "..\\bin\\dnssec\\win32\\keygen.vcxproj.filters", + "..\\bin\\dnssec\\win32\\revoke.vcxproj", + "..\\bin\\dnssec\\win32\\revoke.vcxproj.filters", + "..\\bin\\dnssec\\win32\\settime.vcxproj", + "..\\bin\\dnssec\\win32\\settime.vcxproj.filters", + "..\\bin\\dnssec\\win32\\signzone.vcxproj", + "..\\bin\\dnssec\\win32\\signzone.vcxproj.filters", + "..\\bin\\dnssec\\win32\\verify.vcxproj", + "..\\bin\\dnssec\\win32\\verify.vcxproj.filters", + "..\\bin\\named\\win32\\named.vcxproj", + "..\\bin\\named\\win32\\named.vcxproj.filters", + "..\\bin\\nsupdate\\win32\\nsupdate.vcxproj", + "..\\bin\\nsupdate\\win32\\nsupdate.vcxproj.filters", + "..\\bin\\pkcs11\\win32\\pk11destroy.vcxproj", + "..\\bin\\pkcs11\\win32\\pk11destroy.vcxproj.filters", + "..\\bin\\pkcs11\\win32\\pk11keygen.vcxproj", + "..\\bin\\pkcs11\\win32\\pk11keygen.vcxproj.filters", + "..\\bin\\pkcs11\\win32\\pk11list.vcxproj", + "..\\bin\\pkcs11\\win32\\pk11list.vcxproj.filters", + "..\\bin\\pkcs11\\win32\\pk11tokens.vcxproj", + "..\\bin\\pkcs11\\win32\\pk11tokens.vcxproj.filters", + "..\\bin\\rndc\\win32\\rndc.vcxproj", + "..\\bin\\rndc\\win32\\rndc.vcxproj.filters", + "..\\bin\\rndc\\win32\\rndcutil.vcxproj", + "..\\bin\\rndc\\win32\\rndcutil.vcxproj.filters", + "..\\bin\\tools\\win32\\arpaname.vcxproj", + "..\\bin\\tools\\win32\\arpaname.vcxproj.filters", + "..\\bin\\tools\\win32\\journalprint.vcxproj", + "..\\bin\\tools\\win32\\journalprint.vcxproj.filters", + "..\\bin\\tools\\win32\\mdig.vcxproj", + "..\\bin\\tools\\win32\\mdig.vcxproj.filters", + "..\\bin\\tools\\win32\\nsec3hash.vcxproj", + "..\\bin\\tools\\win32\\nsec3hash.vcxproj.filters", + "..\\bin\\tools\\win32\\rrchecker.vcxproj", + "..\\bin\\tools\\win32\\rrchecker.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\bigkey.vcxproj", + "..\\bin\\tests\\system\\win32\\bigkey.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\feature-test.vcxproj", + "..\\bin\\tests\\system\\win32\\feature-test.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\gencheck.vcxproj", + "..\\bin\\tests\\system\\win32\\gencheck.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\keycreate.vcxproj", + "..\\bin\\tests\\system\\win32\\keycreate.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\keydelete.vcxproj", + "..\\bin\\tests\\system\\win32\\keydelete.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\pipequeries.vcxproj", + "..\\bin\\tests\\system\\win32\\pipequeries.vcxproj.filters", + "..\\bin\\tests\\system\\win32\\resolve.vcxproj", + "..\\bin\\tests\\system\\win32\\resolve.vcxproj.filters", + "..\\bin\\tests\\win32\\backtrace_test.vcxproj", + "..\\bin\\tests\\win32\\backtrace_test.vcxproj.filters", + "..\\bin\\tests\\win32\\inter_test.vcxproj", + "..\\bin\\tests\\win32\\inter_test.vcxproj.filters", + "..\\bin\\tests\\win32\\makejournal.vcxproj", + "..\\bin\\tests\\win32\\makejournal.vcxproj.filters", + "..\\bin\\tests\\win32\\rwlock_test.vcxproj", + "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters", + "..\\bin\\tests\\win32\\shutdown_test.vcxproj", + "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters", + "..\\bin\\tests\\win32\\sock_test.vcxproj", + "..\\bin\\tests\\win32\\sock_test.vcxproj.filters", + "..\\bin\\tests\\win32\\task_test.vcxproj", + "..\\bin\\tests\\win32\\task_test.vcxproj.filters", + "..\\bin\\tests\\win32\\timer_test.vcxproj", + "..\\bin\\tests\\win32\\timer_test.vcxproj.filters", + "..\\bin\\tests\\win32\\inter_test.vcxproj", + "..\\bin\\tests\\win32\\inter_test.vcxproj.filters", + "..\\bin\\tests\\win32\\rwlock_test.vcxproj", + "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters", + "..\\bin\\tests\\win32\\shutdown_test.vcxproj", + "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters", + "..\\bin\\tests\\win32\\sock_test.vcxproj", + "..\\bin\\tests\\win32\\sock_test.vcxproj.filters", + "..\\bin\\tests\\win32\\task_test.vcxproj", + "..\\bin\\tests\\win32\\task_test.vcxproj.filters", + "..\\bin\\tests\\win32\\timer_test.vcxproj", + "..\\bin\\tests\\win32\\timer_test.vcxproj.filters", + "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj", + "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj.filters", + "..\\lib\\bind9\\win32\\libbind9.vcxproj", + "..\\lib\\bind9\\win32\\libbind9.vcxproj.filters", + "..\\lib\\dns\\win32\\gen.vcxproj", + "..\\lib\\dns\\win32\\gen.vcxproj.filters", + "..\\lib\\dns\\win32\\libdns.vcxproj", + "..\\lib\\dns\\win32\\libdns.vcxproj.filters", + "..\\lib\\irs\\win32\\libirs.vcxproj", + "..\\lib\\irs\\win32\\libirs.vcxproj.filters", + "..\\lib\\isc\\win32\\libisc.vcxproj", + "..\\lib\\isc\\win32\\libisc.vcxproj.filters", + "..\\lib\\isccc\\win32\\libisccc.vcxproj", + "..\\lib\\isccc\\win32\\libisccc.vcxproj.filters", + "..\\lib\\isccfg\\win32\\libisccfg.vcxproj", + "..\\lib\\isccfg\\win32\\libisccfg.vcxproj.filters", + "..\\lib\\ns\\win32\\libns.vcxproj", + "..\\lib\\win32\\bindevt\\bindevt.vcxproj", + "..\\lib\\win32\\bindevt\\bindevt.vcxproj.filters", + "bind9.sln"); + +# for config.h + +my %configdefh; + +my @substdefh = ("CONFIGARGS", + "DNS_RDATASET_FIXED", + "HAVE_GEOIP2", + "HAVE_LIBXML2", + "USE_BACKTRACE", + "USE_OPENSSL", + "USE_PKCS11", + "HAVE_READLINE", + "HAVE_ZLIB", + "ISC_LIST_CHECKINIT", + "TUNE_LARGE", + "WANT_QUERYTRACE", + "WITH_IDN", + "CPU_RELAX", + "VALIDATION_DEFAULT", + ); + +# for platform.h + +my %configdefp; + +my @substdefp = (); + +# for conf.sh + +my %configtest; + +my @substtest = ("CHECKDS", + "COVERAGE", + "CRYPTO", + "DNSTAP", + "FSTRM_CAPTURE", + "JSONSTATS", + "KEYMGR", + "NZD_TOOLS", + "XMLSTATS", + "ZLIB"), + +# includes + +my %configinc; + +my @substinc = ("GSSAPI_INC", + "GEOIP_INC", + "IDN_INC", + "LIBXML2_INC", + "LIBUV_INC", + "OPENSSL_INC", + "READLINE_INC", + "ZLIB_INC"); + +# libraries + +my %configlib; + +my @substlib = ("GSSAPI_LIB", + "GEOIP_LIB", + "IDN_LIB", + "KRB5_LIB", + "LIBXML2_LIB", + "LIBUV_LIB", + "OPENSSL_LIBCRYPTO", + "OPENSSL_LIBSSL", + "READLINE_LIB", + "READLINE_LIBD", + "ZLIB_LIB"); + +# DLLs + +my %configdll; + +my @substdll = ("COMERR_DLL", + "GSSAPI_DLL", + "ICONV_DLL", + "IDN_DLL", + "KRB5_DLL", + "K5SPRT_DLL", + "LIBXML2_DLL", + "LIBUV_DLL", + "OPENSSL_DLLCRYPTO", + "OPENSSL_DLLSSL", + "WSHELP_DLL", + "ZLIB_DLL"); + +# variables + +my %configvar = ( + "TOOLS_VERSION" => "4.0", +); + +my @substvar = ("BIND9_VERSION", + "BUILD_MACHINE", + "BUILD_PLATFORM", + "COPTI", + "COPTML", + "COPTMLD", + "COPTX", + "COPTY", + "DLZ_SYSTEM_TEST", + "EXEEXT", + "expanded_sysconfdir", + "INTRINSIC", + "MACHINE", + "OPENSSL_PATH", + "PLATFORM", + "PKCS11_TOOLS", + "PLATFORM_TOOLSET", + "prefix", + "PSSUSPEND", + "PYTHON", + "PYTHON_INSTALL_DIR", + "TOOLS_VERSION", + "VCREDIST_PATH", + "WINDOWS_TARGET_PLATFORM_VERSION"), + +# defines + +my %configdefd; + +my @substdefd = ("PK11_LIB_LOCATION", + "USE_GSSAPI", + "USE_PYTHON"); + +# conditions + +my %configcond; + +my @substcond = ("ATOMIC", + "GSSAPI", + "GEOIP", + "IDNKIT", + "LIBXML2", + "OPENSSL", + "PKCS11", + "PYTHON", + "STESTS", + "TESTS", + "XTESTS", + "ZLIB"); + +my @allcond = (@substcond, "NOTYET", "NOLONGER"); + +# arguments + +# enable-xxx/disable-xxx + +my @enablelist = ("developer", + "fixed-rrset", + "intrinsics", + "native-pkcs11", + "openssl-hash", + "querytrace"); + +# with-xxx/without-xxx + +my @withlist = ("aes", + "cross-compile", + "extra-tests", + "gssapi", + "geoip2", + "iconv", + "idn", + "openssl", + "libxml2", + "pkcs11", + "pssuspend", + "python", + "readline", + "system-tests", + "tests", + "tuning", + "libuv", + "vcredist", + "zlib"); + +# general arguments + +my @optionlist = ("help", "verbose", "legacy", "win32", "x64", "clean"); + +# usage + +my @usage = ("Usage: perl Configure help\n", + " perl Configure options* win32|x64\n", + " perl Configure clean\n"); + +# help + +my @help = ( +"'Configure' configures BIND9 build files.\n\n", +@usage, +"\nGeneral Options and Commands:\n", +" verbose (options) print messages\n", +" help (command) print this help\n", +" win32 (command) configure for Win32 platform\n", +" x64 (command) configure for x64 platform\n", +" clean (command) clean up generated files\n", +" <none> (command) print a summary of the configuration\n", +"\nOptional Features:\n", +" enable-intrinsics enable intrinsic/atomic functions [default=yes]\n", +" enable-native-pkcs11 use native PKCS#11 for all crypto [default=no]\n", +" enable-openssl-hash use OpenSSL for hash functions [default=yes]\n", +" enable-fixed-rrset enable fixed rrset ordering [default=no]\n", +" enable-developer enable developer build settings [default=no]\n", +" enable-querytrace enable very verbose query trace [default=no]\n", +"\nOptional Packages:\n", +" with-tests build with test suite\n", +" with-extra-tests build with extra test suite\n", +" with-system-tests build with system test suite\n", +" with-openssl[=PATH] build with OpenSSL yes|path (mandatory)\n", +" with-libuv[=PATH] build with libuv yes|path (mandatory)\n", +" with-pkcs11[=PATH] build with PKCS#11 support yes|no|provider-path\n", +" with-gssapi[=PATH] build with MIT KfW GSSAPI yes|no|path\n", +" with-libxml2[=PATH] build with libxml2 library yes|no|path\n", +" with-geoip2[=PATH] build with GeoIP2 support yes|no|path\n", +" with-pssuspend[=COMMAND] specify pssuspend command\n", +" with-python[=COMMAND] specify python interpreter python|command\n", +" with-readline[=PATH] build with readline library support yes|no|path\n", +" with-idn[=PATH] build with IDN kit support yes|no|path\n", +" with-iconv[=PATH] path of the iconv DLL [default=same than idn]\n", +" with-zlib[=PATH] build with zlib library yes|no|path\n", +" with-vcredist[=PATH] visual C++ redistributable package yes|path\n", +" with-tuning=OPTION tune for platform size (small|default)\n", +" with-cross-compile 32 / 64 bit build / host platforms\n", +"\nOptional Visual Studio project parameters:\n", +" with-tools-version=VERSION set the ToolsVersion attribute to VERSION\n", +" with-platform-toolset=VERSION use supplied toolset VERSION for building\n", +" with-platform-version=VERSION use supplied Windows SDK VERSION for building\n"); + +# Parse arguments + +my $verbose = 0; +my $legacy_only = 0; +my $want_help = "no"; +my $want_win32 = "no"; +my $want_x64 = "no"; +my $want_clean = "no"; +my $want_unknown = "no"; +my $unknown_value; +my $enable_intrinsics = "yes"; +my $cryptolib = ""; +my $enable_native_pkcs11 = "no"; +my $enable_crypto_rand = "yes"; +my $enable_fixed_rrset = "no"; +my $enable_developer = "no"; +my $enable_querytrace = "no"; +my $enable_rpz_nsip = "yes"; +my $enable_rpz_nsdname = "yes"; +my $use_tests = "no"; +my $use_xtests = "no"; +my $use_stests = "no"; +my $use_libuv = "auto"; +my $libuv_path = "..\\..\\"; +my $use_openssl = "auto"; +my $openssl_path = "..\\..\\"; +my $use_pkcs11 = "no"; +my $pkcs11_path = "unknown"; +my $use_aes = "auto"; +my $use_gssapi = "no"; +my $validation_default = "auto"; +my $gssapi_path = "C:\\Program\ Files\\MIT\\Kerberos\\"; +my $use_geoip2 = "no"; +my $geoip2_path = ""; +my $use_libxml2 = "auto"; +my $libxml2_path = "..\\..\\"; +my $with_pssuspend = "no"; +my $pssuspend_command = "pssuspend.exe"; +my $use_python = "auto"; +my $python_command = "python.exe"; +my $use_readline = "no"; +my $readline_path = "..\\..\\"; +my $use_idn = "no"; +my $idn_path = "..\\..\\"; +my $iconv_path = " --idn-- "; +my $use_zlib = "no"; +my $zlib_path = "..\\..\\"; +my $use_vcredist = "yes"; +my $vcredist_path = " --infer-- "; +my $cross_compile = "no"; +my $tuning = "default"; +my $want_checkfiles = "no"; + +# no arguments -> usage + +if ($#ARGV < 0) { + foreach (@usage) { + print $_; + } + exit 1; +} + +# parse arguments + +foreach (@ARGV) { + if (/^verbose$/i) { + $verbose = 1; + } elsif (/^help$/i) { + $want_help = "yes"; + } elsif (/^disable-(.*)$/i) { + appargs($_); + myenable($1, "no"); + } elsif (/^enable-(.*)$/i) { + appargs($_); + myenable($1, "yes"); + } elsif (/^without-(.*)$/i) { + appargs($_); + mywith($1, "no"); + } elsif (/^with-(.*)=(.*)$/i) { + appargs($_); + mywith($1, $2); + } elsif (/^with-(.*)$/i) { + appargs($_); + mywith($1, "yes"); + } elsif (/^legacy$/i) { + $legacy_only = 1; + } elsif (/^win32$/i) { + $want_win32 = "yes"; + } elsif (/^x64$/i) { + appargs($_); + $want_x64 = "yes"; + } elsif (/^clean$/i) { + $want_clean = "yes"; + } elsif (/^checkfiles$/i) { + $want_checkfiles = "yes"; + } else { + $want_unknown = "yes"; + $unknown_value = $_; + } +} + +# old legacy mode + +if ($legacy_only) { + print "legacy mode is obsolete (so ignored)\n"; +} + +if ($want_checkfiles eq "yes") { + my $status=0; + foreach (@filelist) { + my $name = $_; + $name =~ s/\\/\\\\/g; + next if -r $_ . ".in"; + s/\\/\//g; + next if -r $_ . ".in"; + print "remove '$name' from filelist in win32utils/Configure or add to repository\n"; + $status = 1; + } + foreach (@projectlist) { + my $name = $_; + $name =~ s/\\/\\\\/g; + next if -r $_ . ".in"; + s/\\/\//g; + next if -r $_ . ".in"; + print "remove '$name' from projectlist in win32utils/Configure or add to repository\n"; + $status = 1; + } + exit($status); +} + +# configure the platform + +if (($want_win32 eq "yes") && ($want_x64 eq "yes")) { + die "can't ask for both Win32 and x64 platforms\n"; +} elsif ($want_win32 eq "yes") { + $configvar{"PLATFORM"} = "Win32"; + $configvar{"BUILD_PLATFORM"} = "Win32"; + $configvar{"MACHINE"} = "/machine:X86"; + $configvar{"BUILD_MACHINE"} = "/machine:X86"; +} elsif ($want_x64 eq "yes") { + $configvar{"PLATFORM"} = "x64"; + $configvar{"BUILD_PLATFORM"} = "x64"; + $configvar{"MACHINE"} = "/machine:X64"; + $configvar{"BUILD_MACHINE"} = "/machine:X64"; +} +# Standard configure variable +$configvar{"EXEEXT"} = ".exe"; + +# get the version information + +my %Versions; + +sub getversion { + my $data; + my $name; + my $value; + my $version; + + open V, "..\\version" || die $!; + while (<V>) { + chomp; + ($data) = split(/\#/); + if ($data) { + ($name, $value) = split(/=/, $data); + ($name) = split(/\s+/, $name); + if ($name eq 'PRODUCT' || $name eq 'DESCRIPTION') { + ($value) =~ s/^["\s]+//; + ($value) =~ s/["\s]+$//; + } else { + ($value) = split(/\s+/, $value); + } + $Versions{$name} = $value; + } + } + close V; + + $version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}"; + if ($Versions{'PATCHVER'} ne "") { + $version = "$version.$Versions{'PATCHVER'}"; + } + $version = "$version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}"; + $version = "$version$Versions{'EXTENSIONS'}"; + $configvar{"BIND9_VERSION"} = "$version"; +} + +getversion(); + +# append seen args to CONFIGARGS define + +sub appargs { + my $arg = $_[0]; + # escape backslashes and double quotes + $arg =~ s/([\\"])/\\$1/g; + $arg =~ s/([\s])/\\\\$1/g; + if (defined($configdefh{"CONFIGARGS"})) { + $configdefh{"CONFIGARGS"} .= " " . $arg; + } else { + $configdefh{"CONFIGARGS"} = $arg; + } +} + +if (!$configdefh{"CONFIGARGS"}) { + # CONFIGARGS default is "default" + $configdefh{"CONFIGARGS"} = "\"default\""; +} else { + my $val = $configdefh{"CONFIGARGS"}; + $configdefh{"CONFIGARGS"} = "\"'$val'\""; +} + +# parse enable/disable + +sub myenable { + my $key = $_[0]; + my $val = $_[1]; + + if ($key =~ /^intrinsics$/i) { + if ($val =~ /^no$/i) { + $enable_intrinsics = "no"; + } + } elsif ($key =~ /^native-pkcs11$/i) { + if ($val =~ /^yes$/i) { + $enable_native_pkcs11 = "yes"; + } + } elsif ($key =~ /^fixed-rrset$/i) { + if ($val =~ /^yes$/i) { + $enable_fixed_rrset = "yes"; + } + } elsif ($key =~ /^developer$/i) { + if ($val =~ /^yes$/i) { + $enable_developer = "yes"; + } + } elsif ($key =~ /^querytrace$/i) { + if ($val =~ /^yes$/i) { + $enable_querytrace = "yes"; + } + } elsif ($key =~ /^auto-validation$/i) { + if ($val =~ /^no$/i) { + $validation_default = "yes"; + } + } else { + $want_unknown = "yes"; + if ($val eq "no") { + $unknown_value = "disable-" . $key; + } else { + $unknown_value = "enable-". $key; + } + } +} + +# enable-developer expansion now + +if ($enable_developer eq "yes") { + $configdefh{"ISC_LIST_CHECKINIT"} = 1; + $enable_querytrace = "yes"; + # no atf on WIN32 + $enable_fixed_rrset = "yes"; + # TODO: dlz filesystem + $use_tests = "yes"; + $use_xtests = "yes"; + $use_stests = "yes"; +} + +# parse with/without + +sub mywith { + my $key = $_[0]; + my $val = $_[1]; + + if ($key =~ /^tests$/i) { + if ($val =~ /^yes$/i) { + $use_tests = "yes"; + } + } elsif ($key =~ /^extra-tests$/i) { + if ($val =~ /^yes$/i) { + $use_tests = "yes"; + $use_xtests = "yes"; + } + } elsif ($key =~ /^system-tests$/i) { + if ($val =~ /^yes$/i) { + $use_tests = "yes"; + $use_stests = "yes"; + } + } elsif ($key =~ /^openssl$/i) { + if ($val =~ /^no$/i) { + die "OpenSSL support is now mandatory\n"; + } elsif ($val !~ /^yes$/i) { + $use_openssl = "yes"; + $openssl_path = $val; + } + } elsif ($key =~ /^libuv$/i) { + if ($val =~ /^no$/i) { + die "libuv is required\n"; + } elsif ($val !~ /^yes$/i) { + $use_libuv = "yes"; + $libuv_path = $val; + } + } elsif ($key =~ /^pkcs11$/i) { + if ($val =~ /^yes$/i) { + $use_pkcs11 = "yes"; + } elsif ($val !~ /^no$/i) { + $use_pkcs11= "yes"; + $pkcs11_path = $val; + $pkcs11_path =~ s/\.dll$//i; + } + } elsif ($key =~ /^aes$/i) { + if ($val =~ /^no$/i) { + $use_aes = "no"; + } elsif ($val =~ /^yes$/i) { + $use_aes = "yes"; + } + } elsif ($key =~ /^gssapi$/i) { + if ($val !~ /^no$/i) { + $use_gssapi = "yes"; + if ($val !~ /^yes$/i) { + $gssapi_path = $val; + } + } + } elsif ($key =~ /^libxml2$/i) { + if ($val =~ /^no$/i) { + $use_libxml2 = "no"; + } elsif ($val !~ /^yes$/i) { + $use_libxml2 = "yes"; + $libxml2_path = $val; + } + } elsif ($key =~ /^geoip2$/i) { + if ($val !~ /^no$/i) { + $use_geoip2 = "yes"; + if ($val !~ /^yes$/i) { + $geoip2_path = $val; + } else { + $geoip2_path = "..\\..\\GeoIP2"; + } + } + } elsif ($key =~ /^readline$/i) { + if ($val !~ /^no$/i) { + $use_readline = "yes"; + if ($val !~ /^yes$/i) { + $readline_path = $val; + } + } + } elsif ($key =~ /^idn$/i) { + if ($val !~ /^no$/i) { + $use_idn = "yes"; + if ($val !~ /^yes$/i) { + $idn_path = $val; + } + } + } elsif ($key =~ /^iconv$/i) { + if ($val =~ /^no$/i) { + $want_unknown = "yes"; + $unknown_value = "without-iconv doesn't make sense)"; + } elsif ($val !~ /^yes$/i) { + $iconv_path = $val; + } + } elsif ($key =~ /^zlib$/i) { + if ($val !~ /^no$/i) { + $use_zlib = "yes"; + if ($val !~ /^yes$/i) { + $zlib_path = $val; + } + } + } elsif ($key =~ /^pssuspend$/i) { + if ($val =~ /^no$/i) { + $with_pssuspend = "no"; + } else { + if ($val !~ /^yes$/i) { + $pssuspend_command = $val; + } + } + } elsif ($key =~ /^python$/i) { + if ($val =~ /^no$/i) { + $use_python = "no"; + } else { + $use_python = "yes"; + if ($val !~ /^yes$/i) { + $python_command = $val; + } + } + } elsif ($key =~ /^vcredist$/i) { + if ($val =~ /^no$/i) { + $want_unknown = "yes"; + $unknown_value = "without-vcredist (vcredist is required)"; + } elsif ($val !~ /^yes$/i) { + $vcredist_path = $val; + } + } elsif ($key =~ /^cross-compile$/i) { + if ($val =~ /^yes$/i) { + $cross_compile = "yes"; + } + } elsif ($key =~ /^tuning$/i) { + if ($val =~ /^small$/i) { + $tuning = "small"; + } + } elsif ($key =~ /^tools-version$/i) { + $configvar{"TOOLS_VERSION"} = $val; + } elsif ($key =~ /^platform-version$/i) { + $configvar{"WINDOWS_TARGET_PLATFORM_VERSION"} = "<WindowsTargetPlatformVersion>$val</WindowsTargetPlatformVersion>"; + } elsif ($key =~ /^platform-toolset$/i) { + $configvar{"PLATFORM_TOOLSET"} = "<PlatformToolset>$val</PlatformToolset>"; + } else { + $want_unknown = "yes"; + if ($val eq "no") { + $unknown_value = "without-" . $key; + } else { + $unknown_value = "with-" . $key; + } + } +} + +if ($want_help ne "no") { + foreach (@help) { + print $_; + } + exit 1; +} + +# clean up and exit if requested +if ($want_clean eq "yes") { + my $file; + + unlink($configfile); + unlink($platformfile); + unlink($confshfile); + + foreach $file (@filelist) { + unlink($file); + } + + foreach $file (@projectlist) { + unlink($file); + } + + exit 0; +} + +if ($want_unknown ne "no") { + print STDERR "can't parse $unknown_value\n"; + exit 1; +} + +if ($verbose) { + if ($want_win32 eq "yes") { + print "configure for win32\n"; + } + if ($want_x64 eq "yes") { + print "configure for x64\n"; + } + if ($cross_compile eq "yes") { + print "cross compiling"; + if ($want_x64 eq "yes") { + print ": build on win32 for x64 host\n"; + } elsif ($want_win32 eq "yes") { + print ": build on x64 for win32 host\n"; + } else { + print "\n"; + } + } + if ($enable_intrinsics eq "yes") { + print "intrinsics: enabled\n"; + } else { + print "intrinsics: disabled\n"; + } + if ($enable_native_pkcs11 eq "yes") { + print "native-pkcs11: enabled\n"; + } else { + print "native-pkcs11: disabled\n"; + } + print "openssl-hash: enabled\n"; + if ($enable_fixed_rrset eq "yes") { + print "fixed-rrset: enabled\n"; + } else { + print "fixed-rrset: disabled\n"; + } + if ($enable_developer eq "yes") { + print "developer: enabled\n"; + } else { + print "developer: disabled\n"; + } + if ($enable_querytrace eq "yes") { + print "querytrace: enabled\n"; + } else { + print "querytrace: disabled\n"; + } + print "libuv-path: $libuv_path\n"; + print "openssl-path: $openssl_path\n"; + if ($use_tests eq "yes") { + print "tests: enabled\n"; + } + if ($use_xtests eq "yes") { + print "extra tests: enabled\n"; + } + if ($use_stests eq "yes") { + print "system tests: enabled\n"; + } + if ($use_pkcs11 eq "no") { + print "pkcs11: disabled\n"; + } else { + print "pkcs11-provider-path: $pkcs11_path\n"; + } + if ($use_aes eq "no") { + print "aes: disabled\n"; + } else { + print "aes: enabled\n"; + } + if ($use_gssapi eq "no") { + print "gssapi: disabled\n"; + } else { + print "gssapi-path: $gssapi_path\n"; + } + if ($use_libxml2 eq "no") { + print "libxml2: disabled\n"; + } else { + print "libxml2-path: $libxml2_path\n"; + } + if ($use_geoip2 eq "no") { + print "geoip2: disabled\n"; + } else { + print "geoip2-path: $geoip2_path\n"; + } + if ($use_readline eq "no") { + print "readline: disabled\n"; + } else { + print "readline-path: $readline_path\n"; + } + if ($use_idn eq "no") { + print "idn: disabled\n"; + } else { + print "idn-path: $idn_path\n"; + if ($iconv_path ne " --idn-- ") { + print "iconv-path: $iconv_path\n"; + } + } + if ($use_zlib eq "no") { + print "zlib: disabled\n"; + } else { + print "zlib-path: $zlib_path\n"; + } + if ($with_pssuspend eq "no") { + print "pssuspend: disabled\n"; + } else { + print "pssuspend-command: $pssuspend_command\n"; + } + if ($use_python eq "no") { + print "python: disabled\n"; + } else { + print "python-command: $python_command\n"; + } + print "vcredist-path: $vcredist_path\n"; +} + +# Check environment + +# infer vcredist when not given +if ($vcredist_path eq " --infer-- ") { + if ($verbose) { + print "trying to infer vcredist path from build environment\n"; + } + + my @vcpaths = {}; + push(@vcpaths, $ENV{"VCRedistPath"}) if ($ENV{"VCRedistPath"} ne ""); + push(@vcpaths, File::Spec->catfile( cwd(), "..", ".." )); + + if ($ENV{"FrameworkSDKDir"} ne "" && $want_win32 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"}, + "BootStrapper", "Packages", + "vcredist_x86")); + } elsif ($ENV{"FrameworkSDKDir"} ne "" && $want_x64 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"}, + "BootStrapper", "Packages", + "vcredist_x64")); + } + + if ($ENV{"WindowsSDKDir"} ne "" && $want_win32 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"}, + "BootStrapper", "Packages", + "vcredist_x86")); + } elsif ($ENV{"WindowsSDKDir"} ne "" && $want_x64 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"}, + "BootStrapper", "Packages", + "vcredist_x64")); + } + + if ($ENV{"WindowsSDKDir_old"} ne "" && $want_win32 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"}, + "BootStrapper", "Packages", + "vcredist_x86")); + } elsif ($ENV{"WindowsSDKDir_old"} ne "" && $want_x64 eq "yes") { + push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"}, + "BootStrapper", "Packages", + "vcredist_x64")); + } + + if ($ENV{"VCINSTALLDIR"}) { + push(@vcpaths, File::Spec->catfile($ENV{"VCINSTALLDIR"}, + "redist", "1033")); + } + + # 'VCToolsRedistDir' is available since Visual Studio 2017. + if ($ENV{"VCToolsRedistDir"}) { + push(@vcpaths, $ENV{"VCToolsRedistDir"}); + } + + my $rfile; + if ($want_win32 eq "yes") { + $rfile = "vcredist_x86.exe"; + } else { + $rfile = "vcredist_x64.exe"; + } + + foreach (@vcpaths) { + my $vp = File::Spec->catfile($_, $rfile); + if (-f $vp) { + $vcredist_path = $vp; + last; + } + } + + if ($vcredist_path eq " --infer-- ") { + die "with-vcredist is REQUIRED\n"; + } + + if ($verbose) { + print "found vcredist at " . $vcredist_path . "\n"; + } +} + +my $msc_ver = 0; + +open F, ">mscver.c" || die $!; +print F << 'EOF'; +#include <windows.h> +#include <stdio.h> + +int +main(void) +{ + printf("%d\n", _MSC_VER); + return(0); +} +EOF +close F; +my $compret = `cl /nologo /MD mscver.c`; +if (grep { -f and -x } ".\\mscver.exe") { + $msc_ver = `.\\mscver.exe`; +} else { + die "can't get _MSC_VER value: $compret\n"; +} +if ($verbose) { + print "_MSC_VER == $msc_ver\n"; +} +if ($msc_ver < 1600) { + print STDERR "too old version of C++ compiler/Visual Studio\n"; + exit 1; +} + +# gen single threaded for < VS 2005 + +if ($msc_ver < 1400) { + $configvar{"COPTML"} = "/ML"; + $configvar{"COPTMLD"} = "/MLD"; +} + +# /GX deprecated in VS 2005 + +if ($msc_ver < 1400) { + $configvar{"COPTX"} = "/GX"; +} else { + $configvar{"COPTX"} = "/EHsc"; +} + +# /YX for < VS 2005 + +if ($msc_ver < 1400) { + $configvar{"COPTY"} = "/YX"; +} + +# backtrace for >= VS 2012 + +if ($msc_ver >= 1700) { + $configdefh{"USE_BACKTRACE"} = 1; +} + +# warn when cross compiling + +if ($cross_compile eq "yes") { + if ($want_x64 eq "yes") { + $configvar{"BUILD_PLATFORM"} = "Win32"; + $configvar{"BUILD_MACHINE"} = "/machine:X86"; + } + if ($want_win32 eq "yes") { + $configvar{"BUILD_PLATFORM"} = "x64"; + $configvar{"BUILD_MACHINE"} = "/machine:X64"; + } +} elsif ($want_win32 eq "yes") { + open F, ">cross.c" || die $!; + print F << 'EOF'; +#include <windows.h> +#include <stdio.h> + +int +main(void) +{ +#ifdef _WIN64 + fprintf(stderr, "compiling for x64 when win32 was asked?!\n"); +#endif + return(0); +} +EOF + close F; + my $compret = `cl /nologo /MD cross.c`; + if (grep { -f and -x } ".\\cross.exe") { + my $cross = `.\\cross.exe`; + if ($cross) { + print STDERR $cross; + } + } else { + print STDERR "can't check cross compile: $compret\n"; + } +} else { + open F, ">cross.c" || die $!; + print F << 'EOF'; +#include <windows.h> +#include <stdio.h> + +int +main(void) +{ +#ifndef _WIN64 + fprintf(stderr, "compiling in 32 bits when x64 was asked?!\n"); +#endif + return(0); +} +EOF + close F; + my $compret = `cl /nologo /MD cross.c`; + if (grep { -f and -x } ".\\cross.exe") { + my $cross = `.\\cross.exe`; + if ($cross) { + print STDERR $cross; + } + } else { + print STDERR "can't check cross compile: $compret\n"; + } +} + +# Process arguments + +# enable-native-pkcs11 +if ($enable_native_pkcs11 eq "yes") { + $cryptolib = "pkcs11"; + if ($use_pkcs11 ne "yes") { + if ($verbose) { + print "native PKCS#11 support: force with-pkcs11\n"; + } + $use_pkcs11 = "yes"; + } + if ($pkcs11_path eq "unknown") { + if ($verbose) { + print "native PKCS#11 support: no PKCS#11 provider defined?\n"; + } + } +} + +# enable-fixed-rrset +if ($enable_fixed_rrset eq "yes") { + $configdefh{"DNS_RDATASET_FIXED"} = 1; +} + +# enable-querytrace +if ($enable_querytrace eq "yes") { + $configdefh{"WANT_QUERYTRACE"} = 1; +} + +# with-tests +if ($use_tests eq "yes") { + $configcond{"TESTS"} = 1; +} + +# with-extra-tests +if ($use_xtests eq "yes") { + $configcond{"XTESTS"} = 1; +} + +# with-system-tests +if ($use_stests eq "yes") { + $configcond{"STESTS"} = 1; +} + +# with-libuv +if ($use_libuv eq "auto") { + if ($verbose) { + print "checking for an libuv built directory at sibling root\n"; + } + opendir DIR, $libuv_path || die "No Directory: $!\n"; + my @dirlist = grep (/^libuv-v[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+){0,1}$/i, + readdir(DIR)); + closedir(DIR); + + # Make sure we have something + if (scalar(@dirlist) == 0) { + die "can't find an libuv at sibling root\n"; + } + # Now see if we have a directory or just a file. + # Make sure we are case insensitive + my $file; + foreach $file (sort {uc($b) cmp uc($a)} @dirlist) { + if (-f File::Spec->catfile($libuv_path, + $file, + "include\\uv.h")) { + $libuv_path = File::Spec->catdir($libuv_path, $file); + $use_libuv = "yes"; + last; + } + } + + # If we have one use it otherwise report the error + if ($use_libuv eq "auto") { + die "can't find an libuv built directory at sibling root\n"; + } +} +# falls into (so no else) +if ($use_libuv eq "yes") { + $libuv_path = File::Spec->rel2abs($libuv_path); + if ($verbose) { + print "checking for libuv built directory at \"$libuv_path\"\n"; + } + my $libuv_new = 0; + if (!-f File::Spec->catfile($libuv_path, + "include\\uv.h")) { + die "can't find libuv uv.h include\n"; + } + my $libuv_inc = File::Spec->catdir($libuv_path, "include"); + my $libuv_libdir = File::Spec->catdir($libuv_path, "build\\Release"); + my $libuv_lib = File::Spec->catfile($libuv_libdir, "uv.lib"); + my $libuv_dll = File::Spec->catfile($libuv_libdir, "uv.dll"); + if (!-f $libuv_lib) { + die "can't find uv.lib library\n"; + } + if (!-f $libuv_dll) { + die "can't find uv.dll library\n"; + } + $configvar{"LIBUV_PATH"} = "$libuv_path"; + $configinc{"LIBUV_INC"} = "$libuv_inc"; + $configlib{"LIBUV_LIB"} = "$libuv_lib"; + $configdll{"LIBUV_DLL"} = "$libuv_dll"; +} + +# with-openssl +if ($use_openssl eq "auto") { + if ($verbose) { + print "checking for an OpenSSL built directory at sibling root\n"; + } + opendir DIR, $openssl_path || die "No Directory: $!\n"; + my @dirlist = grep (/^openssl-[0-9]+\.[0-9]+\.[0-9]+[a-z]{0,1}$/i, + readdir(DIR)); + closedir(DIR); + + # Make sure we have something + if (scalar(@dirlist) == 0) { + die "can't find an OpenSSL at sibling root\n"; + } + # Now see if we have a directory or just a file. + # Make sure we are case insensitive + my $file; + foreach $file (sort {uc($b) cmp uc($a)} @dirlist) { + if (-f File::Spec->catfile($openssl_path, + $file, + "inc32\\openssl\\opensslv.h")) { + $openssl_path = File::Spec->catdir($openssl_path, $file); + $use_openssl = "yes"; + last; + } + if (-f File::Spec->catfile($openssl_path, + $file, + "include\\openssl\\opensslv.h")) { + $openssl_path = File::Spec->catdir($openssl_path, $file); + $use_openssl = "yes"; + last; + } + } + + # If we have one use it otherwise report the error + if ($use_openssl eq "auto") { + die "can't find an OpenSSL built directory at sibling root\n"; + } +} +# falls into (so no else) +if ($use_openssl eq "yes") { + my @dirlist; + $openssl_path = File::Spec->rel2abs($openssl_path); + if ($verbose) { + print "checking for OpenSSL built directory at \"$openssl_path\"\n"; + } + if (!-f File::Spec->catfile($openssl_path, + "include/openssl/opensslv.h")) { + die "can't find OpenSSL 1.1 opensslv.h include\n"; + } + my $openssl_inc = File::Spec->catdir($openssl_path, "include"); + my $openssl_libdir = $openssl_path; + my $openssl_libcrypto = File::Spec->catfile($openssl_path, "libcrypto.lib"); + my $openssl_libssl = File::Spec->catfile($openssl_libdir, "libssl.lib"); + my $openssl_dllcrypto = File::Spec->catfile($openssl_libdir, "libcrypto.dll"); + my $openssl_dllssl = File::Spec->catfile($openssl_libdir, "libssl.dll"); + + if (!-f $openssl_libcrypto) { + die "can't find OpenSSL libcrypto.lib library\n"; + } + opendir DIR, $openssl_path || die "No Directory: $!\n"; + @dirlist = grep (/^libcrypto-[^.]+\.dll$/i, readdir(DIR)); + closedir(DIR); + # We must get one file only + if (scalar(@dirlist) == 0) { + die "can't find OpenSSL libcrypto-*.dll DLL\n"; + } + if (scalar(@dirlist) != 1) { + die "found more than one OpenSSL libcrypto-*.dll DLL candidate\n"; + } + $openssl_dllcrypto = File::Spec->catdir($openssl_path, "$dirlist[0]"); + + if (!-f $openssl_libssl) { + die "can't find OpenSSL libssl.lib library\n"; + } + opendir DIR, $openssl_path || die "No Directory: $!\n"; + @dirlist = grep (/^libssl-[^.]+\.dll$/i, readdir(DIR)); + closedir(DIR); + # We must get one file only + if (scalar(@dirlist) == 0) { + die "can't find OpenSSL libssl-*.dll DLL\n"; + } + if (scalar(@dirlist) != 1) { + die "found more than one OpenSSL libssl-*.dll DLL candidate\n"; + } + $openssl_dllssl = File::Spec->catdir($openssl_path, "$dirlist[0]"); + + $cryptolib = "openssl"; + $configvar{"OPENSSL_PATH"} = "$openssl_path"; + $configinc{"OPENSSL_INC"} = "$openssl_inc"; + $configlib{"OPENSSL_LIBCRYPTO"} = "$openssl_libcrypto"; + $configdll{"OPENSSL_DLLCRYPTO"} = "$openssl_dllcrypto"; + $configlib{"OPENSSL_LIBSSL"} = "$openssl_libssl"; + $configdll{"OPENSSL_DLLSSL"} = "$openssl_dllssl"; +} + +if ($cryptolib eq "openssl") { + $configdefh{"USE_OPENSSL"} = 1; + $configtest{"CRYPTO"} = "OpenSSL"; +} else { + $configdefh{"USE_PKCS11"} = 1; + $configtest{"CRYPTO"} = "pkcs11"; +} + +# check OpenSSL +if ($use_openssl eq "yes") { +#prepare the environment + my $dll = $configdll{"OPENSSL_DLLCRYPTO"}; + my $ret = `copy "$dll" .`; + if ($? != 0) { + die "Can't copy OpenSSL DLL to working directory: $ret\n"; + } + + $dll = $configdll{"OPENSSL_DLLSSL"}; + $ret = `copy "$dll" .`; + if ($? != 0) { + die "Can't copy OpenSSL DLL to working directory: $ret\n"; + } + + my $include = $configinc{"OPENSSL_INC"}; + my $libcrypto = $configlib{"OPENSSL_LIBCRYPTO"}; + my $libssl = $configlib{"OPENSSL_LIBSSL"}; + +# check libcrypto + if ($verbose) { + print "checking whether linking with OpenSSL libcrypto works\n"; + } + + open F, ">testossl.c" || die $!; + print F << 'EOF'; +#include <openssl/err.h> + +int +main(void) +{ + ERR_clear_error(); + return(0); +} +EOF + close F; + + $compret = `cl /nologo /MD /I "$include" testossl.c "$libcrypto"`; + if (grep { -f and -x } "./testossl.exe") { + `./testossl.exe`; + if ($? != 0) { + die "OpenSSL libcrypto test failed\n"; + } + } else { + die "can't compile OpenSSL libcrypto test: $compret\n"; + } + + if ($verbose) { + print "checking whether linking with OpenSSL libssl works\n"; + } + + open F, ">testossl.c" || die $!; + print F << 'EOF'; +#include <openssl/ssl.h> + +int +main(void) +{ + SSL_CTX *ctx = SSL_CTX_new(SSLv23_method()); + SSL_CTX_free(ctx); + return(0); +} +EOF + close F; + $compret = `cl /nologo /MD /I "$include" testossl.c "$libcrypto" "$libssl"`; + if (grep { -f and -x } "./testossl.exe") { + `./testossl.exe`; + if ($? != 0) { + die "OpenSSL libssl test failed\n"; + } + } else { + die "can't compile OpenSSL libssl test: $compret\n"; + } + +# check OpenSSL version + if ($verbose) { + printf "checking OpenSSL library version\n"; + } + open F, ">testosslv.c" || die $!; + print F << 'EOF'; +#include <stdio.h> +#include <openssl/opensslv.h> + +int main() { + if (OPENSSL_VERSION_NUMBER >= 0x10101000L) { + return (0); + } + printf("\n\nFound OPENSSL_VERSION_NUMBER %#010x\n", + OPENSSL_VERSION_NUMBER); + printf("Require OPENSSL_VERSION_NUMBER 0x10101000L or greater (1.1.1)\n\n"); + return (1); +} +EOF + close F; + + $compret = `cl /nologo /MD /I "$include" testosslv.c "$libcrypto"`; + if (grep { -f and -x } "./testosslv.exe") { + `./testosslv.exe`; + if ($? != 0) { + die "OpenSSL version test failed\n"; + } + } else { + die "can't compile OpenSSL version test: $compret\n"; + } + + if ($verbose) { + print "checking for OpenSSL Ed25519 support\n"; + } + open F, ">tested25519.c" || die $!; + print F << 'EOF'; +#include <openssl/evp.h> +#include <openssl/objects.h> + +int +main(void) +{ + EVP_PKEY_CTX *ctx; + + ctx = EVP_PKEY_CTX_new_id(NID_ED25519, NULL); + if (ctx == NULL) + return (2); + return (0); +} +EOF + close F; + + $compret = `cl /nologo /MD /I "$include" tested25519.c "$libcrypto"`; + if (grep { -f and -x } "./tested25519.exe") { + `./tested25519.exe`; + if ($? == 0) { + $configdefh{"HAVE_OPENSSL_ED25519"} = 1; + } else { + if ($verbose) { + print "Ed25519 test failed: disabling Ed25519\n"; + } + } + } else { + if ($verbose) { + print "can't compile Ed25519 test: $compret\n"; + print "disabling Ed25519\n"; + } + } + + if ($verbose) { + print "checking for OpenSSL Ed448 support\n"; + } + open F, ">tested448.c" || die $!; + print F << 'EOF'; +#include <openssl/evp.h> +#include <openssl/objects.h> + +int +main(void) +{ + EVP_PKEY_CTX *ctx; + + ctx = EVP_PKEY_CTX_new_id(NID_ED448, NULL); + if (ctx == NULL) + return (2); + return (0); +} +EOF + close F; + + $compret = `cl /nologo /MD /I "$include" tested448.c "$libcrypto"`; + if (grep { -f and -x } "./tested448.exe") { + `./tested448.exe`; + if ($? == 0) { + $configdefh{"HAVE_OPENSSL_ED448"} = 1; + } else { + if ($verbose) { + print "Ed448 test failed: disabling Ed448\n"; + } + } + } else { + if ($verbose) { + print "can't compile Ed448 test: $compret\n"; + print "disabling Ed448\n"; + } + } +} + +# with-aes +if ($use_openssl eq "no") { + if ($use_aes ne "pkcs11") { + $use_aes = "no"; + } +} + +if ($cryptolib ne "") { + print "Cryptographic library for DNSSEC: $cryptolib\n"; +} else { + die "No cryptography library has been found or provided." +} + +# with-pkcs11 +if ($use_pkcs11 ne "no") { + $configcond{"PKCS11"} = 1; + $configvar{"PKCS11_TOOLS"} = "pkcs11"; + $configdefd{"PK11_LIB_LOCATION"} = "PK11_LIB_LOCATION=\"$pkcs11_path\""; +} + +# with-gssapi +if ($use_gssapi eq "no") { + if ($verbose) { + print "gssapi library is disabled\n"; + } +} else { + $gssapi_path = File::Spec->rel2abs($gssapi_path); + if ($verbose) { + print "checking for gssapi directory at \"$gssapi_path\"\n"; + } + $configcond{"GSSAPI"} = 1; + $configdefd{"USE_GSSAPI"} = "GSSAPI"; + if (!-f File::Spec->catfile($gssapi_path, "include", + "gssapi", "gssapi.h")) { + die "can't find gssapi.h include\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "include", + "gssapi", "gssapi_krb5.h")) { + die "can't find gssapi_krb5.h include\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "include", + "krb5", "krb5.h")) { + die "can't find krb5.h include\n"; + } + $configinc{"GSSAPI_INC"} = File::Spec->catdir($gssapi_path, "include"); + my $bits = "32"; + my $gssapi_lib; + my $krb5_lib; + if ($want_win32 eq "yes") { + $bits = "32"; + if (!-f File::Spec->catfile($gssapi_path, "lib", "i386", + "gssapi${bits}.lib")) { + die "can't find gssapi${bits}.lib library\n"; + } + $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "i386", + "gssapi${bits}.lib"); + if (!-f File::Spec->catfile($gssapi_path, "lib", "i386", + "krb5_${bits}.lib")) { + die "can't find krb5_${bits}.lib library\n"; + } + $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "i386", + "krb5_${bits}.lib"); + } elsif ($want_x64 eq "yes") { + $bits = "64"; + if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64", + "gssapi${bits}.lib")) { + die "can't find gssapi${bits}.lib library\n"; + } + $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "amd64", + "gssapi${bits}.lib"); + if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64", + "krb5_${bits}.lib")) { + die "can't find krb5_${bits}.lib library\n"; + } + $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "amd64", + "krb5_${bits}.lib"); + } else { + die "can't happen: no choice between Win32 and x64\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "bin", "gssapi${bits}.dll")) { + die "can't find gssapi${bits}.dll DLL\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "bin", "krb5_${bits}.dll")) { + die "can't find krb5_${bits}.dll DLL\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "bin", "comerr${bits}.dll")) { + die "can't find comerr${bits}.dll DLL\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "bin", "k5sprt${bits}.dll")) { + die "can't find k5sprt${bits}.dll DLL\n"; + } + if (!-f File::Spec->catfile($gssapi_path, "bin", "wshelp${bits}.dll")) { + die "can't find wshelp${bits}.dll DLL\n"; + } + $configlib{"GSSAPI_LIB"} = "$gssapi_lib"; + $configlib{"KRB5_LIB"} = "$krb5_lib"; + my $gssapi_dll = File::Spec->catfile($gssapi_path, "bin", + "gssapi${bits}.dll"); + $configdll{"GSSAPI_DLL"} = "$gssapi_dll"; + my $krb5_dll = File::Spec->catfile($gssapi_path, "bin", + "krb5_${bits}.dll"); + $configdll{"KRB5_DLL"} = "$krb5_dll"; + my $comerr_dll = File::Spec->catfile($gssapi_path, "bin", + "comerr${bits}.dll"); + $configdll{"COMERR_DLL"} = "$comerr_dll"; + my $k5sprt_dll = File::Spec->catfile($gssapi_path, "bin", + "k5sprt${bits}.dll"); + $configdll{"K5SPRT_DLL"} = "$k5sprt_dll"; + my $wshelp_dll = File::Spec->catfile($gssapi_path, "bin", + "wshelp${bits}.dll"); + $configdll{"WSHELP_DLL"} = "$wshelp_dll"; +} + +# disable-auto-validation +$configdefh{"VALIDATION_DEFAULT"} = "\"$validation_default\""; + +# with-geoip2 +if ($use_geoip2 eq "no") { + if ($verbose) { + print "geoip2 library is disabled\n"; + } +} else { + $configcond{"GEOIP"} = 1; + $geoip2_path = File::Spec->rel2abs($geoip2_path); + if ($verbose) { + print "checking for geoip2 directory at \"$geoip2_path\"\n"; + } + if (!-f File::Spec->catfile($geoip2_path, "maxminddb.h")) { + die "can't find maxminddb.h include\n"; + } + if (!-f File::Spec->catfile($geoip2_path, "maxminddb_config.h")) { + die "can't find maxminddb_config.h include\n"; + } + if (!-f File::Spec->catfile($geoip2_path, "libmaxminddb.lib")) { + die "can't find libmaxminddb.lib library\n"; + } + $configinc{"GEOIP_INC"} = "$geoip2_path"; + my $geoip2_lib = File::Spec->catfile($geoip2_path, "libmaxminddb.lib"); + $configlib{"GEOIP_LIB"} = "$geoip2_lib"; + my $geoip_inc = qq(/I "$geoip2_path"); + my $geoip2_libs = qq("$geoip2_lib" Ws2_32.Lib); + + if ($verbose) { + print "checking for GeoIP2 support\n"; + } + open F, ">testgeoip2.c" || die $!; + print F << 'EOF'; +#include <maxminddb.h> +int main(void) { + return MMDB_lib_version() != 0; +} +EOF + close F; + $compret = `cl /nologo $geoip_inc /MD testgeoip2.c $geoip2_libs`; + if (grep { -f and -x } ".\\testgeoip2.exe") { + `.\\testgeoip2.exe`; + if ($? == 0) { + die "GeoIP2 test failed\n"; + } + } else { + die "can't compile GeoIP2 test: $compret\n"; + } + $configdefh{"HAVE_GEOIP2"} = 1; +} + +# with-readline +if ($use_readline eq "no") { + if ($verbose) { + print "readline library is disabled\n"; + } +} else { + $readline_path = File::Spec->rel2abs($readline_path); + if ($verbose) { + print "checking for readline directory at \"$readline_path\"\n"; + } + if (!-f File::Spec->catfile($readline_path, "readline", "readline.h")) { + die "can't find readline.h include\n"; + } + if (!-f File::Spec->catfile($readline_path, "readline", "readline.lib")) { + die "can't find readline.lib library\n"; + } + $configdefh{"HAVE_READLINE"} = 1; + $configinc{"READLINE_INC"} = "$readline_path"; + my $readline_lib = File::Spec->catfile($readline_path, + "readline", "readline.lib"); + $configlib{"READLINE_LIB"} = "$readline_lib"; + if (-f File::Spec->catfile($readline_path, "readline", "readlineD.lib")) { + my $readline_libd = File::Spec->catfile($readline_path, + "readline", "readlineD.lib"); + $configlib{"READLINE_LIBD"} = "$readline_libd"; + } else { + $configlib{"READLINE_LIBD"} = "$readline_lib"; + } +} + +# with-idn (including with-iconv) +if ($use_idn eq "no") { + if ($verbose) { + print "IDN kit is disabled\n"; + } +} else { + $idn_path = File::Spec->rel2abs($idn_path); + if ($verbose) { + print "checking for IDN kit directory at \"$idn_path\"\n"; + } + if (!-f File::Spec->catfile($idn_path, "idn", "api.h")) { + die "can't find idn\\api.h include\n"; + } + if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.lib")) { + die "can't find idnkit.lib library\n"; + } + if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.dll")) { + die "can't find idnkit.dll DLL\n"; + } + $configcond{"IDNKIT"} = 1; + $configdefh{"WITH_IDN"} = 1; + $configinc{"IDN_INC"} = "$idn_path"; + my $idn_lib = File::Spec->catfile($idn_path, "idn", "idnkit.lib"); + $configlib{"IDN_LIB"} = "$idn_lib"; + my $idn_dll = File::Spec->catfile($idn_path, "idn", "idnkit.dll"); + $configdll{"IDN_DLL"} = "$idn_dll"; + if ($iconv_path eq " --idn-- ") { + my $iconv_dll = File::Spec->catfile($idn_path, "idn", "iconv.dll"); + $configdll{"ICONV_DLL"} = "$iconv_dll"; + } else { + my $iconv_dll =File::Spec->catfile($iconv_path, "iconv.dll"); + $configdll{"ICONV_DLL"} = "$iconv_dll"; + } +} + +# with-libxml2 +if ($use_libxml2 eq "no") { + if ($verbose) { + print "libxml2 library is disabled\n"; + } +} elsif ($use_libxml2 eq "auto") { + if ($verbose) { + print "checking for a libxml2 built directory at sibling root\n"; + } + opendir DIR, $libxml2_path || die "No Directory: $!\n"; + my @dirlist = grep (/^libxml2-[0-9]+\.[0-9]+\.[0-9]+[a-z]*/i, + readdir(DIR)); + closedir(DIR); + + # Make sure we have something + if (scalar(@dirlist) == 0) { + die "can't find a libxml2 at sibling root\n"; + } + # Now see if we have a directory or just a file. + # Make sure we are case insensitive + my $file; + foreach $file (sort {uc($b) cmp uc($a)} @dirlist) { + if (-f File::Spec->catfile($libxml2_path, + $file, + "include\\libxml", + "xmlversion.h")) { + $libxml2_path = File::Spec->catdir($libxml2_path, $file); + $use_libxml2 = "yes"; + last; + } + } + + # If we have one use it otherwise report the error + if ($use_libxml2 eq "auto") { + die "can't find a libxml2 built directory at sibling root\n"; + } +} +# falls into (so no else) +if ($use_libxml2 eq "yes") { + $libxml2_path = File::Spec->rel2abs($libxml2_path); + if ($verbose) { + print "checking for libxml2 built directory at \"$libxml2_path\"\n"; + } + if (!-f File::Spec->catfile($libxml2_path, + "include\\libxml", + "xmlversion.h")) { + die "can't find libxml2 xmlversion.h include\n"; + } + if (!-f File::Spec->catfile($libxml2_path, + "win32\\bin.msvc", + "libxml2.lib")) { + die "can't find Libxml2 libxml2.lib library\n"; + } + if (!-f File::Spec->catfile($libxml2_path, + "win32\\bin.msvc", + "libxml2.dll")) { + die "can't find Libxml2 DLL\n"; + } + $configcond{"LIBXML2"} = 1; + $configdefh{"HAVE_LIBXML2"} = 1; + $configtest{"XMLSTATS"} = 1; + my $libxml2_inc = File::Spec->catdir($libxml2_path, "include"); + $configinc{"LIBXML2_INC"} = "$libxml2_inc"; + my $libxml2_libdir = File::Spec->catdir($libxml2_path, "win32\\bin.msvc"); + my $libxml2_lib = File::Spec->catfile($libxml2_libdir, "libxml2.lib"); + $configlib{"LIBXML2_LIB"} = "$libxml2_lib"; + my $libxml2_dll = File::Spec->catfile($libxml2_libdir, "libxml2.dll"); + $configdll{"LIBXML2_DLL"} = "$libxml2_dll"; +} + +# with-zlib +if ($use_zlib eq "no") { + if ($verbose) { + print "zlib library is disabled\n"; + } +} else { + $configcond{"ZLIB"} = 1; + $configtest{"ZLIB"} = 1; + $zlib_path = File::Spec->rel2abs($zlib_path); + if ($verbose) { + print "checking for zlib directory at \"$zlib_path\"\n"; + } + if (!-f File::Spec->catfile($zlib_path, "zlib.h")) { + die "can't find zlib.h include\n"; + } + if (!-f File::Spec->catfile($zlib_path, "zdll.lib")) { + die "can't find zdll.lib library\n"; + } + if (!-f File::Spec->catfile($zlib_path, "zlib1.dll")) { + die "can't find zlib1.dll DLL\n"; + } + $configdefh{"HAVE_ZLIB"} = 1; + $configinc{"ZLIB_INC"} = "$zlib_path"; + my $zlib_lib = File::Spec->catfile($zlib_path, "zdll.lib"); + $configlib{"ZLIB_LIB"} = "$zlib_lib"; + my $zlib_dll = File::Spec->catfile($zlib_path, "zlib1.dll"); + $configdll{"ZLIB_DLL"} = "$zlib_dll"; +} + +if ($with_pssuspend ne "no") { + $configvar{"PSSUSPEND"} = "$pssuspend_command"; +} + +# with-python +if ($use_python eq "no") { + if ($verbose) { + print "python is disabled\n"; + } +} elsif ($use_python eq "auto") { + if ($verbose) { + print "checking for python in path\n"; + } + my $pythonret = `python.exe -c "quit()" 2>&1`; + if ($? != 0) { + print STDERR "can't launch the python interpreter: $pythonret\n"; + $use_python = "no"; + } +} +if ($use_python ne "no") { + if ($use_python ne "auto") { + if ($verbose) { + print "checking for $python_command\n"; + } + my $pythonret = `"$python_command" -c "quit()" 2>&1`; + if ($? != 0) { + die "can't launch $python_command: $pythonret\n"; + } + } + if ($python_command !~ /\.exe$/i) { + $python_command = $python_command . ".exe"; + } + # tried to use the full path without success here + if ($verbose) { + print "checking for python module 'argparse'\n"; + } + my $pythonret = `"$python_command" -c "import argparse" 2>&1`; + if ($? != 0) { + if ($use_python ne "auto") { + die "can't find python module 'argparse': $pythonret\n"; + } else { + print STDERR "can't find python module 'argparse': $pythonret\n"; + $use_python = "no"; + } + } + if ($use_python ne "no") { + if ($verbose) { + print "checking for python module 'ply'\n"; + } + $pythonret = `"$python_command" -c "from ply import *" 2>&1`; + if ($? != 0) { + if ($use_python ne "auto") { + die "can't find python module 'ply': $pythonret\n"; + } else { + print STDERR "can't find python module 'ply': $pythonret\n"; + $use_python = "no"; + } + } + } + if ($use_python ne "no") { + if ($verbose) { + print "checking for python module 'win32api'\n"; + } + $pythonret = `"$python_command" -c "import win32api" 2>&1`; + if ($? != 0) { + if ($use_python ne "auto") { + die "can't find python module 'win32api': $pythonret\n"; + } else { + print STDERR + "can't find python module 'win32api': $pythonret\n"; + $use_python = "no"; + } + } + } + if ($use_python ne "no") { + if ($verbose) { + print "checking for python module 'win32con'\n"; + } + $pythonret = `"$python_command" -c "import win32con" 2>&1`; + if ($? != 0) { + if ($use_python ne "auto") { + die "can't find python module 'win32con': $pythonret\n"; + } else { + print STDERR + "can't find python module 'win32con': $pythonret\n"; + $use_python = "no"; + } + } + } + if ($use_python ne "no") { + $configcond{"PYTHON"} = 1; + $configdefd{"USE_PYTHON"} = "USE_PYTHON"; + $configvar{"PYTHON"} = "$python_command"; + $configtest{"CHECKDS"} = "checkdstool"; + $configtest{"COVERAGE"} = "coverage"; + $configtest{"KEYMGR"} = "keymgr"; + # Doesn't matter + $configvar{"prefix"} = "__prefix__"; + $configvar{"expanded_sysconfdir"} = "__prefix__\\etc"; + } +} + +# with-vcredist +$vcredist_path = File::Spec->rel2abs($vcredist_path); +if (!grep { -f and -x } $vcredist_path) { + die "$vcredist_path is not correct\n"; +} else { + $configvar{"VCREDIST_PATH"} = "$vcredist_path"; +} + +# tuning +if ($tuning ne "small") { + $configdefh{"TUNE_LARGE"} = 1; +} + +# escape spaces + +sub kw { + if ($_[0] =~ / /) { + return "\"$_[0]\""; + } else { + return "$_[0]"; + } +} + +# setup config.h with %configdefh + +sub setupconfigh { + my $line; + my @Lines; + + open F, $configfile . ".win32" || die $!; + @Lines = <F>; + close F; + + foreach $line (@Lines) { + chomp $line; + if ($line =~ /^@([^@]+)\@$/) { + if (defined($configdefh{$1})) { + $line = "#define $1 $configdefh{$1}"; + } else { + $line = "/* #undef $1 */"; + } + } + } + + open F, ">" . $configfile || die $!; + if ($verbose) { + print "Setting up $configfile\n"; + } + foreach $line (@Lines) { + print F $line . "\n"; + } + close F; +} + +# setup platform.h with %configdefp + +sub setupplatformh { + my $line; + my @Lines; + + open F, $platformfile . ".in" || die $!; + @Lines = <F>; + close F; + + foreach $line (@Lines) { + chomp $line; + if ($line =~ /^@([^@]+)\@$/) { + if (defined($configdefp{$1})) { + $line = "#define $1 $configdefp{$1}"; + } else { + $line = "/* #undef $1 */"; + } + } + } + + open F, ">" . $platformfile || die $!; + if ($verbose) { + print "Setting up $platformfile\n"; + } + foreach $line (@Lines) { + print F $line . "\n"; + } + close F; +} + +# setup conf.sh with %configtest and %configvar + +sub setupconfsh { + my $line; + my @Lines; + my $val; + + open F, $confshfile . ".win32" || die $!; + @Lines = <F>; + close F; + + foreach $line (@Lines) { + chomp $line; + while ($line =~ /@([^@]+)\@/) { + if ($1 ~~ @substtest) { + if (defined($configtest{$1})) { + $val = kw($configtest{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substvar) { + if (defined($configvar{$1})) { + $val = kw($configvar{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } else { + die "unknown control $& in $confshfile.win32\n"; + } + } + } + + open F, ">" . $confshfile || die $!; + if ($verbose) { + print "Setting up $confshfile\n"; + } + binmode(F); + foreach $line (@Lines) { + print F $line . "\n"; + } + close F; +} + +# setup a file with %configcond stack and %config{var,defd,inc,lib,dll,test} + +sub setupfile { + my $line; + my @Linesin; + my @Linesout; + my $filename = $_[0]; + my $cond; + my @conds; + my $pass = 1; + my @passes; + my $val; + + open F, $filename . ".in" || die $!; + @Linesin = <F>; + close F; + + foreach $line (@Linesin) { + chomp $line; + if ($line =~ /^\@IF (.*)$/) { + if (defined($cond)) { + unshift(@conds, $cond); + unshift(@passes, $pass); + } + if ($1 ~~ @allcond) { + $cond = $1; + if (defined($configcond{$cond})) { + # do nothing + } else { + $pass = 0; + } + } else { + die "unknown condition \@IF $1 in $filename\n"; + } + next; + } elsif ($line =~ /^\@ELSE (.*)$/) { + if ($cond ne $1) { + die "\@ELSE $1 mismatch in $filename\n"; + } + if (defined($configcond{$cond})) { + $pass = 0; + } else { + if (scalar(@conds) > 0) { + $pass = $passes[0]; + } else { + $pass = 1; + } + } + next; + } elsif ($line =~ /^\@END (.*)$/) { + if ($cond ne $1) { + die "\@END $1 mismatch in $filename\n"; + } + $cond = shift(@conds); + if (scalar(@passes) > 0) { + $pass = shift(@passes); + } else { + $pass = 1; + } + next; + } + if ($pass == 0) { + next; + } + while ($line =~ /@([^@ ]*)@/) { + if ($1 ~~ @substvar) { + if (defined($configvar{$1})) { + $val = kw($configvar{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substdefd) { + if (defined($configdefd{$1})) { + my $def = $configdefd{$1}; + my $pre = "$`"; + my $post = "$'"; + $def =~ s/([\\ "])/\\$1/g; + $line = qq($pre/D "$def"$post); + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substinc) { + if (defined($configinc{$1})) { + $line = qq($`/I "$configinc{$1}"$'); + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substlib) { + if (defined($configlib{$1})) { + $val = kw($configlib{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substdll) { + if (defined($configdll{$1})) { + $val = kw($configdll{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } else { + die "unknown control $& in $filename\n"; + } + } + push @Linesout, $line; + } + + open F, ">" . $filename || die $!; + if ($verbose) { + print "Setting up $filename\n"; + } + binmode(F); + foreach $line (@Linesout) { + print F $line . "\n"; + } + close F; +} + +# setup a project with %configcond stack and %config{var,defd,inc,lib,dll} + +sub setupproject { + my $line; + my @Linesin; + my @Linesout; + my $projectname = $_[0]; + my $cond; + my @conds; + my $pass = 1; + my @passes; + my $val; + + open F, $projectname . ".in" || die $!; + @Linesin = <F>; + close F; + + foreach $line (@Linesin) { + chomp $line; + if ($line =~ /^\@IF (.*)$/) { + if (defined($cond)) { + unshift(@conds, $cond); + unshift(@passes, $pass); + } + if ($1 ~~ @allcond) { + $cond = $1; + if (defined($configcond{$cond})) { + # do nothing + } else { + $pass = 0; + } + } else { + die "unknown condition \@IF $1 in $projectname\n"; + } + next; + } elsif ($line =~ /^\@ELSE (.*)$/) { + if ($cond ne $1) { + die "\@ELSE $1 mismatch in $projectname\n"; + } + if (defined($configcond{$cond})) { + $pass = 0; + } else { + if (scalar(@conds) > 0) { + $pass = $passes[0]; + } else { + $pass = 1; + } + } + next; + } elsif ($line =~ /^\@END (.*)$/) { + if ($cond ne $1) { + die "\@END $1 mismatch in $projectname\n"; + } + $cond = shift(@conds); + if (scalar(@passes) > 0) { + $pass = shift(@passes); + } else { + $pass = 1; + } + next; + } + if ($pass == 0) { + next; + } + while ($line =~ /@([^@ ]*)@/) { + if ($1 ~~ @substvar) { + if (defined($configvar{$1})) { + $val = kw($configvar{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substdefd) { + if (defined($configdefd{$1})) { + $val = kw($configdefd{$1}); + $line = "$`$val;$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substinc) { + if (defined($configinc{$1})) { + $val = kw($configinc{$1}); + $line = "$`$val;$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substlib) { + if (defined($configlib{$1})) { + $val = kw($configlib{$1}); + $line = "$`$val;$'"; + } else { + $line = "$`$'"; + } + } elsif ($1 ~~ @substdll) { + if (defined($configdll{$1})) { + $val = kw($configdll{$1}); + $line = "$`$val$'"; + } else { + $line = "$`$'"; + } + } else { + die "unknown control $& in $projectname\n"; + } + } + push @Linesout, $line; + } + + open F, ">" . $projectname || die $!; + if ($verbose) { + print "Setting up $projectname\n"; + } + foreach $line (@Linesout) { + print F $line . "\n"; + } + close F; +} + +# make versions.h + +sub makeversion { + # List of directories with version files + + my $Version; + my $Mapapi; + my $versionfile = "versions.h"; + my $versionpath = "..\\$versionfile"; + + my $data; + my $name; + my $value; + + # And the mapapi one + + open M, "..\\lib\\dns\\mapapi" || die $!; + while (<M>) { + chomp; + ($data) = split(/\#/); + if ($data) { + ($name, $value) = split(/=/, $data); + ($name) = split(/\s+/, $name); + if ($name eq 'MAPAPI') { + ($value) =~ s/^["\s]+//; + ($value) =~ s/["\s]+$//; + } else { + ($value) = split(/\s+/, $value); + } + $Mapapi = $value; + } + } + close M; + + # Now set up the output version file + + my $ThisDate = scalar localtime(); + open O, ">$versionpath" || + die "Can't open output file $versionpath: $!\n"; + + # Standard Header + + print O '/* + * Copyright (C) 2001 Internet Systems Consortium, Inc. ("ISC") + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +'; + + print O "/*\n"; + print O " * $versionfile."; + print O " Generated automatically by Configure.pl.\n"; + print O " * Date generated: $ThisDate\n"; + print O " */\n\n"; + + print O ' +#ifndef VERSIONS_H +#define VERSIONS_H 1 + +'; + + $Version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}"; + if ($Versions{'PATCHVER'} ne "") { + $Version = "$Version.$Versions{'PATCHVER'}"; + } + $Version = "$Version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}"; + $Version = "$Version$Versions{'EXTENSIONS'}"; + if ($verbose) { + print "BIND Version: $Version\n"; + } + + print O "#define VERSION \"$Version\"\n"; + print O "#define PRODUCT \"$Versions{'PRODUCT'}\"\n\n"; + print O "#define DESCRIPTION \"$Versions{'DESCRIPTION'}\"\n\n"; + print O + "#define MAJOR \"$Versions{'MAJORVER'}.$Versions{'MINORVER'}\"\n\n"; + print O "#define MAPAPI \"$Mapapi\"\n\n"; + + print O "#endif /* VERSIONS_H */\n"; + close O; +} + +# make srcid.h + +sub makesrcid { + my $data; + my $name; + my $value; + my $srcid = "unset_id"; + + open SOUT, ">..\\srcid.h" || die "cannot open srcid.h: $!\n"; + if (open (SIN, "..\\srcid")) { + LOOP: while (<SIN>) { + chomp; + ($data) = split(/\#/); + if ($data) { + ($name, $value) = split(/=/, $data); + ($name) = split(/\s+/, $name); + ($value) = split(/\s+/, $value); + next LOOP if ($name != "SRCID"); + $srcid = $value; + } + } + close SIN; + } + + if ($srcid eq "unset_id" and -d "..\\.git") { + $data = `git rev-list --max-count=1 HEAD`; + if (length($data) > 0) { + $srcid = substr($data, 0, 7); + } + } + + # Now set up the output version file + + my $ThisDate = scalar localtime(); + + # Standard Header + + print SOUT '/* + * Copyright (C) 2012 Internet Systems Consortium, Inc. ("ISC") + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +'; + + print SOUT "/*\n"; + print SOUT " * srcid.h"; + print SOUT " * Generated automatically by Configure.pl.\n"; + print SOUT " * Date generated: $ThisDate\n"; + print SOUT " */\n\n"; + + print SOUT ' +#ifndef SRCID_H +#define SRCID_H 1 +'; + + if ($verbose) { + print "BIND SRCID: $srcid\n"; + } + + print SOUT "#define SRCID\t\"$srcid\"\n"; + print SOUT "#endif /* SRCID_H */\n"; + close SOUT; +} + +# Build install files + +sub makeinstallfile { + open FOUT, ">InstallFlags" || die "cannot open InstallFlags: $!\n"; + print FOUT "# Flags for BINDInstall\n"; + if ($msc_ver >= 1400) { + print FOUT "runvcredist\n"; + } + if ($want_x64 eq "yes") { + print FOUT "forwin64\n"; + } + close FOUT; + + open LOUT, ">InstallFiles" || die "cannot open InstallFiles: $!\n"; + print LOUT "# File list for BINDInstall\n"; + if ($msc_ver < 1400) { + if ($msc_ver >= 1310) { + print LOUT "mfc71.dll-WCTT\n"; + print LOUT "msvcr71.dll-WCTT\n"; + } elsif (($msc_ver > 1200) && ($msc_ver < 1310)) { + print LOUT "mfc70.dll-WCTT\n"; + print LOUT "msvcr70.dll-WCTT\n"; + } + } + print LOUT "bindevt.dll-BNFT\n"; + print LOUT "libbind9.dll-BCFT\n"; + print LOUT "libisc.dll-BCFT\n"; + print LOUT "libisccfg.dll-BCFT\n"; + print LOUT "libisccc.dll-BCFT\n"; + print LOUT "libdns.dll-BCFT\n"; + print LOUT "libirs.dll-BCFT\n"; + print LOUT "libns.dll-BCFT\n"; + print LOUT "uv.dll-BCFT\n"; + if ($use_openssl eq "yes") { + my $v; + my $d; + my $name; + ($v, $d, $name) =File::Spec->splitpath($configdll{"OPENSSL_DLLCRYPTO"}); + print LOUT "${name}-BCFT\n"; + ($v, $d, $name) =File::Spec->splitpath($configdll{"OPENSSL_DLLSSL"}); + print LOUT "${name}-BCFT\n"; + } + if ($use_libxml2 eq "yes") { + print LOUT "libxml2.dll-BCFT\n"; + } + if ($use_gssapi eq "yes") { + if ($want_x64 eq "yes") { + print LOUT "gssapi64.dll-BCFT\n"; + print LOUT "krb5_64.dll-BCFT\n"; + } else { + print LOUT "gssapi32.dll-BCFT\n"; + print LOUT "krb5_32.dll-BCFT\n"; + } + } + if ($use_idn eq "yes") { + print LOUT "idnkit.dll-BCFT\n"; + print LOUT "iconv.dll-BCFT\n"; + } + print LOUT "named.exe-BCFF\n"; + print LOUT "nsupdate.exe-BNFT\n"; + print LOUT "BINDInstall.exe-BNFT\n"; + print LOUT "InstallFlags-BNFT\n"; + print LOUT "InstallFiles-BNFT\n"; + print LOUT "rndc.exe-BNFF\n"; + print LOUT "dig.exe-BNFT\n"; + print LOUT "host.exe-BNFT\n"; + print LOUT "mdig.exe-BNFT\n"; + print LOUT "nslookup.exe-BNFT\n"; + print LOUT "delv.exe-BNFT\n"; + print LOUT "arpaname.exe-BNFT\n"; + print LOUT "nsec3hash.exe-BNFF\n"; + print LOUT "rndc-confgen.exe-BNFF\n"; + print LOUT "ddns-confgen.exe-BNFF\n"; + print LOUT "tsig-keygen.exe-BNFF\n"; + print LOUT "dnssec-keygen.exe-BNFF\n"; + print LOUT "dnssec-signzone.exe-BNFF\n"; + print LOUT "dnssec-dsfromkey.exe-BNFF\n"; + print LOUT "dnssec-importkey.exe-BNFF\n"; + print LOUT "dnssec-keyfromlabel.exe-BNFF\n"; + print LOUT "dnssec-revoke.exe-BNFF\n"; + print LOUT "dnssec-settime.exe-BNFF\n"; + print LOUT "dnssec-verify.exe-BNFF\n"; + print LOUT "named-checkconf.exe-BNFF\n"; + print LOUT "named-checkzone.exe-BNFF\n"; + print LOUT "named-compilezone.exe-BNFF\n"; + print LOUT "named-journalprint.exe-BNFF\n"; + print LOUT "named-rrchecker.exe-BNFF\n"; + if ($use_pkcs11 eq "yes") { + print LOUT "pkcs11-destroy.exe-BNFF\n"; + print LOUT "pkcs11-keygen.exe-BNFF\n"; + print LOUT "pkcs11-list.exe-BNFF\n"; + print LOUT "pkcs11-tokens.exe-BNFF\n"; + } + if ($use_python ne "no") { + print LOUT "dnssec-checkds.py-BNFF\n"; + print LOUT "dnssec-coverage.py-BNFF\n"; + print LOUT "dnssec-keymgr.py-BNFF\n"; + } + print LOUT "readme1st.txt-BTFT\n"; + close LOUT; +} + +# Adjust system tests + +# dnstap not supported +#$configtest{"DNSTAP"} = "dnstap"; +#$configtest{"FSTRM_CAPTURE"} = "fstrm_capture"; + +# no json-c library for WIN32 +#$configtest{"JSONSTATS"} = 1; + +# lmdb not supported +#$configtest{"NZD_TOOLS"} = "nzd"; + +# TODO check for pkcs11ssl and set PKCS11_TEST + +# Status + +if ($verbose) { + my $name; + + print "Configuration Status\n"; + + print "\tconfig.h:\n"; + foreach $name (@substdefh) { + if (defined($configdefh{$name})) { + print qq(\t\t$name defined to "$configdefh{$name}"\n); + } else { + printf qq(\t\t$name undefined\n); + } + } + + print "\tplatform.h:\n"; + foreach $name (@substdefp) { + if (defined($configdefp{$name})) { + print qq(\t\t$name defined to "$configdefp{$name}"\n); + } else { + printf qq(\t\t$name undefined\n); + } + } + + print "\tconf.sh:\n"; + foreach $name (@substtest) { + if (defined($configtest{$name})) { + print qq(\t\t$name defined to "$configtest{$name}"\n); + } else { + printf qq(\t\t$name undefined\n); + } + } + + print "\tconditions:\n"; + foreach $name (@substcond) { + if (defined($configcond{$name})) { + print "\t\t$name is true\n"; + } else { + print "\t\t$name is false\n"; + } + } + + print "\tsubstitutions:\n"; + foreach $name (@substvar) { + if (defined($configvar{$name})) { + print qq(\t\t$name -> "$configvar{$name}"\n); + } + } + + print "\tdefines:\n"; + foreach $name (@substdefd) { + if (defined($configdefd{$name})) { + print qq(\t\t/D "$configdefd{$name}"\n); + } + } + + print "\tincludes:\n"; + foreach $name (@substinc) { + if (defined($configinc{$name})) { + print qq(\t\t/I "$configinc{$name}"\n); + } + } + + print "\tlibraries:\n"; + foreach $name (@substlib) { + if (defined($configlib{$name})) { + print "\t\t$configlib{$name}\n"; + } + } + + print "\tDLLs:\n"; + foreach $name (@substdll) { + if (defined($configdll{$name})) { + print "\t\t$configdll{$name}\n"; + } + } + + print "\n"; +} + +# Setup +if (($want_win32 eq "yes") || ($want_x64 eq "yes")) { + setupconfigh(); + + setupplatformh(); + + setupconfsh(); + + my $file; + foreach $file (@filelist) { + setupfile($file); + } + + foreach $file (@projectlist) { + setupproject($file); + } + + makeversion(); + + makesrcid(); + + makeinstallfile(); + + print "Configured.\n"; +} else { + print "add win32 or x64 to commit configuration to build files\n"; +} + +exit 0; + +# Notes: Unix configure.in options +# --enable-developer partially supported +# --enable-newstats (9.9/9.9sub only) +# --enable-native-pkcs11 supported +# --enable-openssl-version-check included without a way to disable it +# --enable-openssl-hash supported +# --enable-threads included without a way to disable it +# --enable-backtrace backtrace included without a way to disable it +# --enable-symtable incompatible with DLLs (or libtool) +# --enable-ipv6 included without a way to disable it +# --enable-atomic supported (renamed to intrinsic) +# --enable-fixed-rrset supported +# --enable-querytrace supported +# --enable-full-report supported by verbose +# --enable-dnstap not supported (requires libfstrm support on WIN32) +# --enable-afl not supported (not yet available on Visual Studio C++) +# --disable-auto-validation supported +# --with-python supported +# --with-openssl supported +# --with-pkcs11 supported +# --with-aes supported +# --with-randomdev not supported on WIN32 (makes no sense) +# --with-geoip2 supported +# --with-gssapi supported with MIT (K)erberos (f)or (W)indows +# --with-lmdb no supported on WIN32 (port is not reliable) +# --with-libxml2 supported +# --with-json-c not supported on WIN32 (package not available on WIN32) +# --with-zlib supported +# --with-purify not supported (package available on WIN32 but for free?) +# --with-gperftools-profiler not supported (package not available on WIN32) +# --with-libtool not supported on WIN32 (never) +# --with-locktype not supported on WIN32 (not yet available on WIN32) +# --with-readline supported +# --with-protobuf-c not supported (no reason to until libfstrm is ready) +# --with-libfrtrm not supported (not yet available on WIN32) +# --with-docbook-xsl not supported (?) +# --with-idn[lib] supported +# --with-[lib]iconv supported (part of IDN) +# --with-atf not supported on WIN32 (package not available on WIN32) +# --with-tuning supported +# --with-dlopen included without a way to disable it +# --with-dlz-* ? +# +# Notes: MSVC versions +# MSVC 15.x _MSC_VER == 191y (VS 2017) +# MSVC 14.0 _MSC_VER == 1900 (VS 2015) +# MSVC 12.0 _MSC_VER == 1800 (VS 2013) +# MSVC 11.0 _MSC_VER == 1700 (VS 2012) +# MSVC 10.0 _MSC_VER == 1600 (VS 2010) +# MSVC 9.0 _MSC_VER == 1500 (VS 2008) +# MSVC 8.0 _MSC_VER == 1400 (VS 2005) +# MSVC 7.1 _MSC_VER == 1310 (VS .NET 2003) +# MSVC 7.0 _MSC_VER == 1300 (VS .NET (2002)) +# MSVC 6.0 _MSC_VER == 1200 (VS 6.0 (1998)) +# MSVC 5.0 _MSC_VER == 1100 (VS 97) diff --git a/win32utils/GeoIP.diff b/win32utils/GeoIP.diff new file mode 100644 index 0000000..bc9b6bc --- /dev/null +++ b/win32utils/GeoIP.diff @@ -0,0 +1,345 @@ +diff -ruN dists/GeoIP-1.5.1/libGeoIP/GeoIP.c dev/GeoIP-1.5.1/libGeoIP/GeoIP.c +--- dists/GeoIP-1.5.1/libGeoIP/GeoIP.c 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/GeoIP.c 2013-07-19 16:56:58.000000000 +0200 +@@ -19,6 +19,7 @@ + */ + + #include "GeoIP.h" ++#include "GeoIP_internal.h" + + static geoipv6_t IPV6_NULL; + +@@ -44,6 +45,10 @@ + #include <stdint.h> /* For uint32_t */ + #endif + ++#if defined(_WIN32) ++#include "pread.h" ++#endif ++ + #ifdef _UNUSED + #elif defined(__GNUC__) + #define _UNUSED __attribute__ ((unused)) +diff -ruN dists/GeoIP-1.5.1/libGeoIP/GeoIP.h dev/GeoIP-1.5.1/libGeoIP/GeoIP.h +--- dists/GeoIP-1.5.1/libGeoIP/GeoIP.h 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/GeoIP.h 2013-07-19 16:53:33.000000000 +0200 +@@ -154,31 +154,33 @@ + GEOIP_CORPORATE_SPEED = 3, + } GeoIPNetspeedValues; + ++#ifdef GEOIP_EXPORTS ++#define GEOIP_API __declspec(dllexport) ++#define GEOIP_DATA __declspec(dllexport) ++#else ++#define GEOIP_DATA __declspec(dllimport) ++#define GEOIP_API ++#endif /* GEOIP_EXPORTS */ ++ + extern char **GeoIPDBFileName; +-extern const char * GeoIPDBDescription[NUM_DB_TYPES]; +-extern const char *GeoIPCountryDBFileName; +-extern const char *GeoIPRegionDBFileName; +-extern const char *GeoIPCityDBFileName; +-extern const char *GeoIPOrgDBFileName; +-extern const char *GeoIPISPDBFileName; +-extern const char *GeoIPLocationADBFileName; +-extern const char *GeoIPAccuracyRadiusFileName; +-extern const char *GeoIPCityConfidenceFileName; ++extern GEOIP_DATA const char * GeoIPDBDescription[NUM_DB_TYPES]; ++extern GEOIP_DATA const char *GeoIPCountryDBFileName; ++extern GEOIP_DATA const char *GeoIPRegionDBFileName; ++extern GEOIP_DATA const char *GeoIPCityDBFileName; ++extern GEOIP_DATA const char *GeoIPOrgDBFileName; ++extern GEOIP_DATA const char *GeoIPISPDBFileName; ++extern GEOIP_DATA const char *GeoIPLocationADBFileName; ++extern GEOIP_DATA const char *GeoIPAccuracyRadiusFileName; ++extern GEOIP_DATA const char *GeoIPCityConfidenceFileName; + extern char * GeoIP_custom_directory; + + /* Warning: do not use those arrays as doing so may break your + * program with newer GeoIP versions */ +-extern const char GeoIP_country_code[255][3]; +-extern const char GeoIP_country_code3[255][4]; +-extern const char * GeoIP_country_name[255]; +-extern const char * GeoIP_utf8_country_name[255]; +-extern const char GeoIP_country_continent[255][3]; +- +-#ifdef DLL +-#define GEOIP_API __declspec(dllexport) +-#else +-#define GEOIP_API +-#endif /* DLL */ ++extern GEOIP_DATA const char GeoIP_country_code[255][3]; ++extern GEOIP_DATA const char GeoIP_country_code3[255][4]; ++extern GEOIP_DATA const char * GeoIP_country_name[255]; ++extern GEOIP_DATA const char * GeoIP_utf8_country_name[255]; ++extern GEOIP_DATA const char GeoIP_country_continent[255][3]; + + GEOIP_API void GeoIP_setup_custom_directory(char *dir); + GEOIP_API GeoIP* GeoIP_open_type (int type, int flags); +diff -ruN dists/GeoIP-1.5.1/libGeoIP/GeoIPCity.c dev/GeoIP-1.5.1/libGeoIP/GeoIPCity.c +--- dists/GeoIP-1.5.1/libGeoIP/GeoIPCity.c 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/GeoIPCity.c 2013-07-19 15:41:05.000000000 +0200 +@@ -35,6 +35,10 @@ + #include <stdint.h> /* For uint32_t */ + #endif + ++#if defined(_WIN32) ++#include "pread.h" ++#endif ++ + #ifndef HAVE_PREAD + #define pread(fd, buf, count, offset) \ + ( \ +diff -ruN dists/GeoIP-1.5.1/libGeoIP/GeoIPCity.h dev/GeoIP-1.5.1/libGeoIP/GeoIPCity.h +--- dists/GeoIP-1.5.1/libGeoIP/GeoIPCity.h 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/GeoIPCity.h 2013-07-19 16:23:58.000000000 +0200 +@@ -48,22 +48,22 @@ + int netmask; + } GeoIPRecord; + +-GeoIPRecord * GeoIP_record_by_ipnum (GeoIP* gi, unsigned long ipnum); +-GeoIPRecord * GeoIP_record_by_addr (GeoIP* gi, const char *addr); +-GeoIPRecord * GeoIP_record_by_name (GeoIP* gi, const char *host); +- +-GeoIPRecord * GeoIP_record_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum); +-GeoIPRecord * GeoIP_record_by_addr_v6 (GeoIP* gi, const char *addr); +-GeoIPRecord * GeoIP_record_by_name_v6 (GeoIP* gi, const char *host); ++GEOIP_API GeoIPRecord * GeoIP_record_by_ipnum (GeoIP* gi, unsigned long ipnum); ++GEOIP_API GeoIPRecord * GeoIP_record_by_addr (GeoIP* gi, const char *addr); ++GEOIP_API GeoIPRecord * GeoIP_record_by_name (GeoIP* gi, const char *host); ++ ++GEOIP_API GeoIPRecord * GeoIP_record_by_ipnum_v6 (GeoIP* gi, geoipv6_t ipnum); ++GEOIP_API GeoIPRecord * GeoIP_record_by_addr_v6 (GeoIP* gi, const char *addr); ++GEOIP_API GeoIPRecord * GeoIP_record_by_name_v6 (GeoIP* gi, const char *host); + +-int GeoIP_record_id_by_addr (GeoIP* gi, const char *addr); +-int GeoIP_record_id_by_addr_v6 (GeoIP* gi, const char *addr); ++GEOIP_API int GeoIP_record_id_by_addr (GeoIP* gi, const char *addr); ++GEOIP_API int GeoIP_record_id_by_addr_v6 (GeoIP* gi, const char *addr); + +-int GeoIP_init_record_iter (GeoIP* gi); ++GEOIP_API int GeoIP_init_record_iter (GeoIP* gi); + /* returns 0 on success, 1 on failure */ +-int GeoIP_next_record (GeoIP* gi, GeoIPRecord **gir, int *record_iter); ++GEOIP_API int GeoIP_next_record (GeoIP* gi, GeoIPRecord **gir, int *record_iter); + +-void GeoIPRecord_delete (GeoIPRecord *gir); ++GEOIP_API void GeoIPRecord_delete (GeoIPRecord *gir); + + /* NULL on failure otherwise a malloced string in utf8 */ + /* char * GeoIP_iso_8859_1__utf8(const char *); */ +diff -ruN dists/GeoIP-1.5.1/libGeoIP/Makefile.vc dev/GeoIP-1.5.1/libGeoIP/Makefile.vc +--- dists/GeoIP-1.5.1/libGeoIP/Makefile.vc 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/Makefile.vc 2013-07-19 16:47:45.000000000 +0200 +@@ -1,29 +1,42 @@ + #NMAKE makefile for Windows developers. +-#Produces a static library (GeoIP.lib). ++##Produces a static library (GeoIP.lib). ++#Produces a DLL (GeoIP.dll) and library (GeoIP.lib). + + COMPILER=cl + +-CFLAGS=-DWIN32 -MD -nologo ++CFLAGS=-DWIN32 -DGEOIP_EXPORTS -MD -nologo + + GEOIPINC = -I..\libGeoIP + +-CC1 = $(COMPILER) $(CFLAGS) $(GEOIPINC) -DGEOIPDATADIR=\"$(GEOIPDATADIR)\" ++CC1 = $(COMPILER) $(CFLAGS) $(GEOIPINC) -DGEOIPDATADIR=\"$(GEOIPDATADIR)\" -DPACKAGE_VERSION=\"1.5.1\" + +-OBJS=GeoIP.obj GeoIPCity.obj regionName.obj md5.obj timeZone.obj ++LINKER=link ++ ++LDFLAGS=/DLL /nologo /subsystem:console ++ ++LD1 = $(LINKER) $(LDFLAGS) ++ ++OBJS=GeoIP.obj GeoIPCity.obj GeoIP_depreciated.obj regionName.obj md5.obj timeZone.obj pread.obj + +-EXTRA_LIBS= advapi32.lib wsock32.lib ++EXTRA_LIBS= ws2_32.lib + + AR=lib + +-GeoIP.lib: GeoIP.obj GeoIPCity.obj regionName.obj md5.obj timeZone.obj +- $(AR) -nologo $(OBJS) $(EXTRA_LIBS) /OUT:GeoIP.lib ++#GeoIP.lib: GeoIP.obj GeoIPCity.obj regionName.obj md5.obj timeZone.obj pread.obj ++# $(AR) -nologo $(OBJS) $(EXTRA_LIBS) /OUT:GeoIP.lib + ++GeoIP.dll GeoIP.lib: $(OBJS) ++ $(LD1) $(OBJS) $(EXTRA_LIBS) /out:GeoIP.dll /implib:GeoIP.lib ++ + GeoIP.obj: GeoIP.c + $(CC1) -c GeoIP.c $(GEOIPINC) + + GeoIPCity.obj: GeoIPCity.c + $(CC1) -c GeoIPCity.c $(GEOIPINC) + ++GeoIP_depreciated.obj: GeoIP_depreciated.c ++ $(CC1) -c GeoIP_depreciated.c $(GEOIPINC) ++ + regionName.obj: regionName.c + $(CC1) -c regionName.c $(GEOIPINC) + +@@ -32,3 +45,6 @@ + + timeZone.obj: timeZone.c + $(CC1) -c timeZone.c $(GEOIPINC) ++ ++pread.obj: pread.c ++ $(CC1) -c pread.c $(GEOIPINC) +diff -ruN dists/GeoIP-1.5.1/libGeoIP/pread.c dev/GeoIP-1.5.1/libGeoIP/pread.c +--- dists/GeoIP-1.5.1/libGeoIP/pread.c 1970-01-01 01:00:00.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/pread.c 2013-07-19 15:37:44.000000000 +0200 +@@ -0,0 +1,73 @@ ++/* ++ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH ++ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ++ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, ++ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM ++ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE ++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ++ * PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#include <windows.h> ++#include <io.h> ++ ++#include "pread.h" ++ ++CRITICAL_SECTION preadsc; ++ ++#ifdef _WIN64 ++int pread(int fd, void *buf, unsigned int nbyte, __int64 offset) ++{ ++ int cc = -1; ++ __int64 prev = (__int64)-1L; ++ ++ EnterCriticalSection(&preadsc); ++ prev = _lseeki64(fd, 0L, SEEK_CUR); ++ if (prev == (__int64)-1L) ++ goto done; ++ if (_lseeki64(fd, offset, SEEK_SET) != offset) ++ goto done; ++ cc = _read(fd, buf, nbyte); ++ ++done: ++ if (prev != (__int64)-1L) ++ (void)_lseeki64(fd, prev, SEEK_SET); ++ LeaveCriticalSection(&preadsc); ++ ++ return cc; ++} ++#else ++int pread(int fd, void *buf, unsigned int nbyte, long offset) ++{ ++ int cc = -1; ++ long prev = -1L; ++ ++ EnterCriticalSection(&preadsc); ++ prev = _lseek(fd, 0L, SEEK_CUR); ++ if (prev == -1L) ++ goto done; ++ if (_lseek(fd, offset, SEEK_SET) != offset) ++ goto done; ++ cc = _read(fd, buf, nbyte); ++ ++done: ++ if (prev != -1L) ++ (void)_lseek(fd, prev, SEEK_SET); ++ LeaveCriticalSection(&preadsc); ++ ++ return cc; ++} ++#endif ++ ++BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) ++{ ++ if (fdwReason == DLL_PROCESS_ATTACH) ++ InitializeCriticalSection(&preadsc); ++ return TRUE; ++} +diff -ruN dists/GeoIP-1.5.1/libGeoIP/pread.h dev/GeoIP-1.5.1/libGeoIP/pread.h +--- dists/GeoIP-1.5.1/libGeoIP/pread.h 1970-01-01 01:00:00.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/pread.h 2013-07-19 15:39:01.000000000 +0200 +@@ -0,0 +1,29 @@ ++/* ++ * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH ++ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY ++ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, ++ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM ++ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE ++ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ++ * PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#ifdef _WIN64 ++typedef __int64 ssize_t; ++ ++int pread(int fd, void *buf, unsigned int nbyte, __int64 offset); ++#else ++typedef int ssize_t; ++ ++int pread(int fd, void *buf, unsigned int nbyte, long offset); ++#endif ++ ++#define HAVE_PREAD ++ ++extern CRITICAL_SECTION preadsc; +diff -ruN dists/GeoIP-1.5.1/libGeoIP/regionName.c dev/GeoIP-1.5.1/libGeoIP/regionName.c +--- dists/GeoIP-1.5.1/libGeoIP/regionName.c 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/regionName.c 2013-07-19 16:37:56.000000000 +0200 +@@ -1,3 +1,5 @@ ++#include "GeoIP.h" ++ + #include <string.h> + #include <stdio.h> + +diff -ruN dists/GeoIP-1.5.1/libGeoIP/timeZone.c dev/GeoIP-1.5.1/libGeoIP/timeZone.c +--- dists/GeoIP-1.5.1/libGeoIP/timeZone.c 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/libGeoIP/timeZone.c 2013-07-19 17:22:44.000000000 +0200 +@@ -1,4 +1,7 @@ ++#include "GeoIP.h" ++ + #include <string.h> ++ + const char* GeoIP_time_zone_by_country_and_region(const char * country,const char * region) { + const char* timezone = NULL; + if (country == NULL) { +diff -ruN dists/GeoIP-1.5.1/test/Makefile.vc dev/GeoIP-1.5.1/test/Makefile.vc +--- dists/GeoIP-1.5.1/test/Makefile.vc 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/test/Makefile.vc 2013-07-19 16:48:55.000000000 +0200 +@@ -9,7 +9,7 @@ + + GEOIPINC = -I..\libGeoIP + +-CC1 = $(COMPILER) $(CFLAGS) $(GEOIPINC) ++CC1 = $(COMPILER) $(CFLAGS) $(GEOIPINC) -DSRCDIR=\"../\" + + GEOIPLIB = ..\libGeoIP\GeoIP.lib + +diff -ruN dists/GeoIP-1.5.1/test/benchmark.c dev/GeoIP-1.5.1/test/benchmark.c +--- dists/GeoIP-1.5.1/test/benchmark.c 2013-03-23 03:26:09.000000000 +0100 ++++ dev/GeoIP-1.5.1/test/benchmark.c 2013-07-19 16:26:23.000000000 +0200 +@@ -81,7 +81,7 @@ + void testgeoiporg(int flags, const char *msg, int numlookups) + { + GeoIP *i = NULL; +- GeoIPRegion *i3 = NULL; ++ char *i3 = NULL; + int i4 = 0; + int i2 = 0; + double t = 0; diff --git a/win32utils/bind9.sln.in b/win32utils/bind9.sln.in new file mode 100644 index 0000000..001b56d --- /dev/null +++ b/win32utils/bind9.sln.in @@ -0,0 +1,772 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual C++ Express 2010 +# BINDInstall must be the first project +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BINDInstall", "..\bin\win32\BINDInstall\BINDInstall.vcxproj", "{190CC424-E8CC-46F2-9013-3152D6905118}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} = {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0} = {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0} + {723C65DA-A96C-4BA3-A34E-44F11CA346F9} = {723C65DA-A96C-4BA3-A34E-44F11CA346F9} + {7C8681A1-E3A8-470E-9EEF-16054D111A19} = {7C8681A1-E3A8-470E-9EEF-16054D111A19} + {39721F26-8B80-4AA9-9826-2AEF7322C3D5} = {39721F26-8B80-4AA9-9826-2AEF7322C3D5} + {140DE800-E552-43CC-B0C7-A33A92E368CA} = {140DE800-E552-43CC-B0C7-A33A92E368CA} + {F938F9B8-D395-4A40-BEC7-0122D289C692} = {F938F9B8-D395-4A40-BEC7-0122D289C692} + {BA1048A8-6961-4A20-BE12-08BE20611C9D} = {BA1048A8-6961-4A20-BE12-08BE20611C9D} + {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5} = {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5} + {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F} = {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + {0BF11E21-168C-4CAA-B784-429D126BBAE5} = {0BF11E21-168C-4CAA-B784-429D126BBAE5} + {205ED8A9-2E4C-41CC-9385-F3613402AA90} = {205ED8A9-2E4C-41CC-9385-F3613402AA90} + {17455DC6-5FBB-47C3-8F44-7DB574A188D3} = {17455DC6-5FBB-47C3-8F44-7DB574A188D3} + {6E6297F4-69D7-4533-85E1-BD17C30017C8} = {6E6297F4-69D7-4533-85E1-BD17C30017C8} + {D171F185-D3C2-4463-9CF3-ED1D0B1D6832} = {D171F185-D3C2-4463-9CF3-ED1D0B1D6832} + {03FB7588-C5A7-4572-968F-14F1206BC69C} = {03FB7588-C5A7-4572-968F-14F1206BC69C} + {FD653434-F1A8-44A9-85B2-A7468491DA6D} = {FD653434-F1A8-44A9-85B2-A7468491DA6D} + {AB6690A0-055E-458F-BAC5-BF38BCC5834F} = {AB6690A0-055E-458F-BAC5-BF38BCC5834F} + {91E60FDA-E48C-4DA0-92A2-97F963348E00} = {91E60FDA-E48C-4DA0-92A2-97F963348E00} + {B19042CE-D3D9-469B-BCD2-C3140150939A} = {B19042CE-D3D9-469B-BCD2-C3140150939A} + {4EE91023-94C3-48C0-B71C-5333B726C2EE} = {4EE91023-94C3-48C0-B71C-5333B726C2EE} + {98743A7C-6AF8-467F-9911-FA69C451AF2B} = {98743A7C-6AF8-467F-9911-FA69C451AF2B} + {3115091C-8135-481F-9757-F013A26255E0} = {3115091C-8135-481F-9757-F013A26255E0} + {C41266C7-E27E-4D60-9815-82D3B32BF82F} = {C41266C7-E27E-4D60-9815-82D3B32BF82F} + {2C1F7096-C5B5-48D4-846F-A7ACA454335D} = {2C1F7096-C5B5-48D4-846F-A7ACA454335D} + {03A96113-CB14-43AA-AEB2-48950E3915C5} = {03A96113-CB14-43AA-AEB2-48950E3915C5} + {66028555-7DD5-4016-B601-9EF9A1EE8BFA} = {66028555-7DD5-4016-B601-9EF9A1EE8BFA} + {64964B03-4815-41F0-9057-E766A94AF197} = {64964B03-4815-41F0-9057-E766A94AF197} + {1E2C1635-3093-4D59-80E7-4743AC10F22F} = {1E2C1635-3093-4D59-80E7-4743AC10F22F} + {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1} = {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1} +@IF PKCS11 + {5042D371-0402-4FA3-A52A-769708694422} = {5042D371-0402-4FA3-A52A-769708694422} + {C663B088-F7BC-4C8C-8D06-A76636EED651} = {C663B088-F7BC-4C8C-8D06-A76636EED651} + {5B3137E5-7E1F-49AA-8810-A09AA417D326} = {5B3137E5-7E1F-49AA-8810-A09AA417D326} + {403FD4B1-A4F9-4159-9013-5860E3A4417D} = {403FD4B1-A4F9-4159-9013-5860E3A4417D} +@END PKCS11 +@IF XTESTS + {14751171-C40E-40EE-A2F0-37FFC3CCD4A2} = {14751171-C40E-40EE-A2F0-37FFC3CCD4A2} + {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1} = {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1} + {7705EEF6-6980-48F9-A045-699DAFE860C9} = {7705EEF6-6980-48F9-A045-699DAFE860C9} + {551561F6-4A2A-4824-8A34-A4AF0EB7C179} = {551561F6-4A2A-4824-8A34-A4AF0EB7C179} + {6200ED9D-CAB1-4C00-8D79-478F64A19B8F} = {6200ED9D-CAB1-4C00-8D79-478F64A19B8F} + {CC7340C1-CBAF-4145-969A-73AE960401D6} = {CC7340C1-CBAF-4145-969A-73AE960401D6} + {E55653C8-5501-4871-A97C-C926631F40F9} = {E55653C8-5501-4871-A97C-C926631F40F9} +@END XTESTS +@IF STESTS + {31715139-2C27-47D2-8394-71B71A8AC3D5} = {31715139-2C27-47D2-8394-71B71A8AC3D5} + {764DBE24-C8B3-46E8-BE73-196431353A5D} = {764DBE24-C8B3-46E8-BE73-196431353A5D} + {61F9D673-EB5C-47A5-8907-24E034C75EF8} = {61F9D673-EB5C-47A5-8907-24E034C75EF8} + {E1478F40-786C-4738-8E99-E7A71DD98661} = {E1478F40-786C-4738-8E99-E7A71DD98661} + {4F9A0F6F-366D-4483-B131-793832840508} = {4F9A0F6F-366D-4483-B131-793832840508} + {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E} = {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E} + {63A921F6-1200-4723-828A-98960127B73D} = {63A921F6-1200-4723-828A-98960127B73D} + {F66D8B7E-721D-4602-99AD-820D19AD1313} = {F66D8B7E-721D-4602-99AD-820D19AD1313} +@END STESTS + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gen", "..\lib\dns\win32\gen.vcxproj", "{A3F71D12-F38A-4C77-8D87-8E8854CA74A1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libisc", "..\lib\isc\win32\libisc.vcxproj", "{3840E563-D180-4761-AA9C-E6155F02EAFF}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libisccc", "..\lib\isccc\win32\libisccc.vcxproj", "{B556705F-1920-4400-878A-B259D3556047}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdns", "..\lib\dns\win32\libdns.vcxproj", "{5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libns", "..\lib\ns\win32\libns.vcxproj", "{82ACD33C-E75F-45B8-BB6D-42643A10D7EE}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libisccfg", "..\lib\isccfg\win32\libisccfg.vcxproj", "{B2DFA58C-6347-478E-81E8-01E06999D4F1}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbind9", "..\lib\bind9\win32\libbind9.vcxproj", "{E741C10B-B075-4206-9596-46765B665E03}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libirs", "..\lib\irs\win32\libirs.vcxproj", "{A4F29CEB-7644-4A7F-BE9E-02B6A90E4919}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bindevt", "..\lib\win32\bindevt\bindevt.vcxproj", "{0D745CD9-FC3B-49DC-99BE-1E6DF85593F0}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "named", "..\bin\named\win32\named.vcxproj", "{723C65DA-A96C-4BA3-A34E-44F11CA346F9}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} = {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rndcutil", "..\bin\rndc\win32\rndcutil.vcxproj", "{7C8681A1-E3A8-470E-9EEF-16054D111A19}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rndc", "..\bin\rndc\win32\rndc.vcxproj", "{39721F26-8B80-4AA9-9826-2AEF7322C3D5}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {7C8681A1-E3A8-470E-9EEF-16054D111A19} = {7C8681A1-E3A8-470E-9EEF-16054D111A19} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dighost", "..\bin\dig\win32\dighost.vcxproj", "{140DE800-E552-43CC-B0C7-A33A92E368CA}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dig", "..\bin\dig\win32\dig.vcxproj", "{F938F9B8-D395-4A40-BEC7-0122D289C692}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {140DE800-E552-43CC-B0C7-A33A92E368CA} = {140DE800-E552-43CC-B0C7-A33A92E368CA} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "host", "..\bin\dig\win32\host.vcxproj", "{BA1048A8-6961-4A20-BE12-08BE20611C9D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {140DE800-E552-43CC-B0C7-A33A92E368CA} = {140DE800-E552-43CC-B0C7-A33A92E368CA} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nslookup", "..\bin\dig\win32\nslookup.vcxproj", "{C15A6E1A-94CE-4686-99F9-6BC5FD623EB5}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {140DE800-E552-43CC-B0C7-A33A92E368CA} = {140DE800-E552-43CC-B0C7-A33A92E368CA} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "delv", "..\bin\delv\win32\delv.vcxproj", "{BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dnssectool", "..\bin\dnssec\win32\dnssectool.vcxproj", "{2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keygen", "..\bin\dnssec\win32\keygen.vcxproj", "{0BF11E21-168C-4CAA-B784-429D126BBAE5}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "signzone", "..\bin\dnssec\win32\signzone.vcxproj", "{205ED8A9-2E4C-41CC-9385-F3613402AA90}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cds", "..\bin\dnssec\win32\cds.vcxproj", "{0EB1727E-2BBD-47A6-AD12-418F9DEB0531}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keyfromlabel", "..\bin\dnssec\win32\keyfromlabel.vcxproj", "{17455DC6-5FBB-47C3-8F44-7DB574A188D3}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dsfromkey", "..\bin\dnssec\win32\dsfromkey.vcxproj", "{6E6297F4-69D7-4533-85E1-BD17C30017C8}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "revoke", "..\bin\dnssec\win32\revoke.vcxproj", "{D171F185-D3C2-4463-9CF3-ED1D0B1D6832}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "settime", "..\bin\dnssec\win32\settime.vcxproj", "{03FB7588-C5A7-4572-968F-14F1206BC69C}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "verify", "..\bin\dnssec\win32\verify.vcxproj", "{FD653434-F1A8-44A9-85B2-A7468491DA6D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "importkey", "..\bin\dnssec\win32\importkey.vcxproj", "{AB6690A0-055E-458F-BAC5-BF38BCC5834F}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} = {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arpaname", "..\bin\tools\win32\arpaname.vcxproj", "{91E60FDA-E48C-4DA0-92A2-97F963348E00}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "journalprint", "..\bin\tools\win32\journalprint.vcxproj", "{B19042CE-D3D9-469B-BCD2-C3140150939A}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsec3hash", "..\bin\tools\win32\nsec3hash.vcxproj", "{4EE91023-94C3-48C0-B71C-5333B726C2EE}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rrchecker", "..\bin\tools\win32\rrchecker.vcxproj", "{98743A7C-6AF8-467F-9911-FA69C451AF2B}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mdig", "..\bin\tools\win32\mdig.vcxproj", "{3115091C-8135-481F-9757-F013A26255E0}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsupdate", "..\bin\nsupdate\win32\nsupdate.vcxproj", "{C41266C7-E27E-4D60-9815-82D3B32BF82F}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checktool", "..\bin\check\win32\checktool.vcxproj", "{2C1F7096-C5B5-48D4-846F-A7ACA454335D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} = {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checkconf", "..\bin\check\win32\checkconf.vcxproj", "{03A96113-CB14-43AA-AEB2-48950E3915C5}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {E741C10B-B075-4206-9596-46765B665E03} = {E741C10B-B075-4206-9596-46765B665E03} + {2C1F7096-C5B5-48D4-846F-A7ACA454335D} = {2C1F7096-C5B5-48D4-846F-A7ACA454335D} + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} = {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "checkzone", "..\bin\check\win32\checkzone.vcxproj", "{66028555-7DD5-4016-B601-9EF9A1EE8BFA}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {2C1F7096-C5B5-48D4-846F-A7ACA454335D} = {2C1F7096-C5B5-48D4-846F-A7ACA454335D} + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} = {82ACD33C-E75F-45B8-BB6D-42643A10D7EE} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "confgentool", "..\bin\confgen\win32\confgentool.vcxproj", "{64964B03-4815-41F0-9057-E766A94AF197}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rndcconfgen", "..\bin\confgen\win32\rndcconfgen.vcxproj", "{1E2C1635-3093-4D59-80E7-4743AC10F22F}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {64964B03-4815-41F0-9057-E766A94AF197} = {64964B03-4815-41F0-9057-E766A94AF197} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddnsconfgen", "..\bin\confgen\win32\ddnsconfgen.vcxproj", "{1EA4FC64-F33B-4A50-970A-EA052BBE9CF1}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {B556705F-1920-4400-878A-B259D3556047} = {B556705F-1920-4400-878A-B259D3556047} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {64964B03-4815-41F0-9057-E766A94AF197} = {64964B03-4815-41F0-9057-E766A94AF197} + EndProjectSection +EndProject +@IF PKCS11 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pk11keygen", "..\bin\pkcs11\win32\pk11keygen.vcxproj", "{5042D371-0402-4FA3-A52A-769708694422}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pk11list", "..\bin\pkcs11\win32\pk11list.vcxproj", "{C663B088-F7BC-4C8C-8D06-A76636EED651}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pk11destroy", "..\bin\pkcs11\win32\pk11destroy.vcxproj", "{5B3137E5-7E1F-49AA-8810-A09AA417D326}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pk11tokens", "..\bin\pkcs11\win32\pk11tokens.vcxproj", "{403FD4B1-A4F9-4159-9013-5860E3A4417D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +@END PKCS11 +@IF XTESTS +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "backtrace_test", "..\bin\tests\win32\backtrace_test.vcxproj", "{14751171-C40E-40EE-A2F0-37FFC3CCD4A2}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inter_test", "..\bin\tests\win32\inter_test.vcxproj", "{06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rwlock_test", "..\bin\tests\win32\rwlock_test.vcxproj", "{7705EEF6-6980-48F9-A045-699DAFE860C9}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shutdown_test", "..\bin\tests\win32\shutdown_test.vcxproj", "{551561F6-4A2A-4824-8A34-A4AF0EB7C179}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sock_test", "..\bin\tests\win32\sock_test.vcxproj", "{6200ED9D-CAB1-4C00-8D79-478F64A19B8F}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "task_test", "..\bin\tests\win32\task_test.vcxproj", "{CC7340C1-CBAF-4145-969A-73AE960401D6}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "timer_test", "..\bin\tests\win32\timer_test.vcxproj", "{E55653C8-5501-4871-A97C-C926631F40F9}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +@END XTESTS +@IF STESTS +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makejournal", "..\bin\tests\win32\makejournal.vcxproj", "{31715139-2C27-47D2-8394-71B71A8AC3D5}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencheck", "..\bin\tests\system\win32\gencheck.vcxproj", "{764DBE24-C8B3-46E8-BE73-196431353A5D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bigkey", "..\bin\tests\system\win32\bigkey.vcxproj", "{61F9D673-EB5C-47A5-8907-24E034C75EF8}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pipequeries", "..\bin\tests\system\win32\pipequeries.vcxproj", "{E1478F40-786C-4738-8E99-E7A71DD98661}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keycreate", "..\bin\tests\system\win32\keycreate.vcxproj", "{4F9A0F6F-366D-4483-B131-793832840508}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "keydelete", "..\bin\tests\system\win32\keydelete.vcxproj", "{85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "feature-test", "..\bin\tests\system\win32\feature-test.vcxproj", "{63A921F6-1200-4723-828A-98960127B73D}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "resolve", "..\bin\tests\system\win32\resolve.vcxproj", "{F66D8B7E-721D-4602-99AD-820D19AD1313}" + ProjectSection(ProjectDependencies) = postProject + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} = {A3F71D12-F38A-4C77-8D87-8E8854CA74A1} + {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} = {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A} + {B2DFA58C-6347-478E-81E8-01E06999D4F1} = {B2DFA58C-6347-478E-81E8-01E06999D4F1} + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} = {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919} + EndProjectSection +EndProject +@END STESTS +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|@PLATFORM@ = Debug|@PLATFORM@ + Release|@PLATFORM@ = Release|@PLATFORM@ + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {190CC424-E8CC-46F2-9013-3152D6905118}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {190CC424-E8CC-46F2-9013-3152D6905118}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {190CC424-E8CC-46F2-9013-3152D6905118}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {190CC424-E8CC-46F2-9013-3152D6905118}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}.Debug|@BUILD_PLATFORM@.ActiveCfg = Debug|@BUILD_PLATFORM@ + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}.Debug|@BUILD_PLATFORM@.Build.0 = Debug|@BUILD_PLATFORM@ + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}.Release|@BUILD_PLATFORM@.ActiveCfg = Release|@BUILD_PLATFORM@ + {A3F71D12-F38A-4C77-8D87-8E8854CA74A1}.Release|@BUILD_PLATFORM@.Build.0 = Release|@BUILD_PLATFORM@ + {3840E563-D180-4761-AA9C-E6155F02EAFF}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {3840E563-D180-4761-AA9C-E6155F02EAFF}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {3840E563-D180-4761-AA9C-E6155F02EAFF}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {3840E563-D180-4761-AA9C-E6155F02EAFF}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {B556705F-1920-4400-878A-B259D3556047}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {B556705F-1920-4400-878A-B259D3556047}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {B556705F-1920-4400-878A-B259D3556047}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {B556705F-1920-4400-878A-B259D3556047}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {5FEBFD4E-CCB0-48B9-B733-E15EEB85C16A}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {82ACD33C-E75F-45B8-BB6D-42643A10D7EE}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {B2DFA58C-6347-478E-81E8-01E06999D4F1}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {B2DFA58C-6347-478E-81E8-01E06999D4F1}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {B2DFA58C-6347-478E-81E8-01E06999D4F1}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {B2DFA58C-6347-478E-81E8-01E06999D4F1}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {E741C10B-B075-4206-9596-46765B665E03}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {E741C10B-B075-4206-9596-46765B665E03}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {E741C10B-B075-4206-9596-46765B665E03}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {E741C10B-B075-4206-9596-46765B665E03}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {A4F29CEB-7644-4A7F-BE9E-02B6A90E4919}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {0D745CD9-FC3B-49DC-99BE-1E6DF85593F0}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {723C65DA-A96C-4BA3-A34E-44F11CA346F9}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {723C65DA-A96C-4BA3-A34E-44F11CA346F9}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {723C65DA-A96C-4BA3-A34E-44F11CA346F9}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {723C65DA-A96C-4BA3-A34E-44F11CA346F9}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {7C8681A1-E3A8-470E-9EEF-16054D111A19}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {7C8681A1-E3A8-470E-9EEF-16054D111A19}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {7C8681A1-E3A8-470E-9EEF-16054D111A19}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {7C8681A1-E3A8-470E-9EEF-16054D111A19}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {39721F26-8B80-4AA9-9826-2AEF7322C3D5}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {39721F26-8B80-4AA9-9826-2AEF7322C3D5}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {39721F26-8B80-4AA9-9826-2AEF7322C3D5}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {39721F26-8B80-4AA9-9826-2AEF7322C3D5}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {140DE800-E552-43CC-B0C7-A33A92E368CA}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {140DE800-E552-43CC-B0C7-A33A92E368CA}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {140DE800-E552-43CC-B0C7-A33A92E368CA}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {140DE800-E552-43CC-B0C7-A33A92E368CA}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {F938F9B8-D395-4A40-BEC7-0122D289C692}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {F938F9B8-D395-4A40-BEC7-0122D289C692}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {F938F9B8-D395-4A40-BEC7-0122D289C692}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {F938F9B8-D395-4A40-BEC7-0122D289C692}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {BA1048A8-6961-4A20-BE12-08BE20611C9D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {BA1048A8-6961-4A20-BE12-08BE20611C9D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {BA1048A8-6961-4A20-BE12-08BE20611C9D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {BA1048A8-6961-4A20-BE12-08BE20611C9D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {C15A6E1A-94CE-4686-99F9-6BC5FD623EB5}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {BE172EFE-C1DC-4812-BFB9-8C5F8ADB7E9F}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {2CB7DC75-023B-4AA3-AF3A-AE5046A4EE70}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {0BF11E21-168C-4CAA-B784-429D126BBAE5}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {0BF11E21-168C-4CAA-B784-429D126BBAE5}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {0BF11E21-168C-4CAA-B784-429D126BBAE5}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {0BF11E21-168C-4CAA-B784-429D126BBAE5}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {205ED8A9-2E4C-41CC-9385-F3613402AA90}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {205ED8A9-2E4C-41CC-9385-F3613402AA90}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {205ED8A9-2E4C-41CC-9385-F3613402AA90}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {205ED8A9-2E4C-41CC-9385-F3613402AA90}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {0EB1727E-2BBD-47A6-AD12-418F9DEB0531}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {0EB1727E-2BBD-47A6-AD12-418F9DEB0531}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {0EB1727E-2BBD-47A6-AD12-418F9DEB0531}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {0EB1727E-2BBD-47A6-AD12-418F9DEB0531}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {17455DC6-5FBB-47C3-8F44-7DB574A188D3}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {17455DC6-5FBB-47C3-8F44-7DB574A188D3}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {17455DC6-5FBB-47C3-8F44-7DB574A188D3}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {17455DC6-5FBB-47C3-8F44-7DB574A188D3}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {6E6297F4-69D7-4533-85E1-BD17C30017C8}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {6E6297F4-69D7-4533-85E1-BD17C30017C8}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {6E6297F4-69D7-4533-85E1-BD17C30017C8}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {6E6297F4-69D7-4533-85E1-BD17C30017C8}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {D171F185-D3C2-4463-9CF3-ED1D0B1D6832}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {D171F185-D3C2-4463-9CF3-ED1D0B1D6832}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {D171F185-D3C2-4463-9CF3-ED1D0B1D6832}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {D171F185-D3C2-4463-9CF3-ED1D0B1D6832}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {03FB7588-C5A7-4572-968F-14F1206BC69C}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {03FB7588-C5A7-4572-968F-14F1206BC69C}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {03FB7588-C5A7-4572-968F-14F1206BC69C}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {03FB7588-C5A7-4572-968F-14F1206BC69C}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {FD653434-F1A8-44A9-85B2-A7468491DA6D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {FD653434-F1A8-44A9-85B2-A7468491DA6D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {FD653434-F1A8-44A9-85B2-A7468491DA6D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {FD653434-F1A8-44A9-85B2-A7468491DA6D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {AB6690A0-055E-458F-BAC5-BF38BCC5834F}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {AB6690A0-055E-458F-BAC5-BF38BCC5834F}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {AB6690A0-055E-458F-BAC5-BF38BCC5834F}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {AB6690A0-055E-458F-BAC5-BF38BCC5834F}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {91E60FDA-E48C-4DA0-92A2-97F963348E00}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {91E60FDA-E48C-4DA0-92A2-97F963348E00}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {91E60FDA-E48C-4DA0-92A2-97F963348E00}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {91E60FDA-E48C-4DA0-92A2-97F963348E00}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {B19042CE-D3D9-469B-BCD2-C3140150939A}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {B19042CE-D3D9-469B-BCD2-C3140150939A}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {B19042CE-D3D9-469B-BCD2-C3140150939A}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {B19042CE-D3D9-469B-BCD2-C3140150939A}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {4EE91023-94C3-48C0-B71C-5333B726C2EE}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {4EE91023-94C3-48C0-B71C-5333B726C2EE}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {4EE91023-94C3-48C0-B71C-5333B726C2EE}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {4EE91023-94C3-48C0-B71C-5333B726C2EE}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {98743A7C-6AF8-467F-9911-FA69C451AF2B}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {98743A7C-6AF8-467F-9911-FA69C451AF2B}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {98743A7C-6AF8-467F-9911-FA69C451AF2B}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {98743A7C-6AF8-467F-9911-FA69C451AF2B}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {3115091C-8135-481F-9757-F013A26255E0}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {3115091C-8135-481F-9757-F013A26255E0}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {3115091C-8135-481F-9757-F013A26255E0}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {3115091C-8135-481F-9757-F013A26255E0}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {C41266C7-E27E-4D60-9815-82D3B32BF82F}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {C41266C7-E27E-4D60-9815-82D3B32BF82F}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {C41266C7-E27E-4D60-9815-82D3B32BF82F}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {C41266C7-E27E-4D60-9815-82D3B32BF82F}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {2C1F7096-C5B5-48D4-846F-A7ACA454335D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {2C1F7096-C5B5-48D4-846F-A7ACA454335D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {2C1F7096-C5B5-48D4-846F-A7ACA454335D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {2C1F7096-C5B5-48D4-846F-A7ACA454335D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {03A96113-CB14-43AA-AEB2-48950E3915C5}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {03A96113-CB14-43AA-AEB2-48950E3915C5}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {03A96113-CB14-43AA-AEB2-48950E3915C5}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {03A96113-CB14-43AA-AEB2-48950E3915C5}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {66028555-7DD5-4016-B601-9EF9A1EE8BFA}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {66028555-7DD5-4016-B601-9EF9A1EE8BFA}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {66028555-7DD5-4016-B601-9EF9A1EE8BFA}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {66028555-7DD5-4016-B601-9EF9A1EE8BFA}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {64964B03-4815-41F0-9057-E766A94AF197}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {64964B03-4815-41F0-9057-E766A94AF197}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {64964B03-4815-41F0-9057-E766A94AF197}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {64964B03-4815-41F0-9057-E766A94AF197}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {1E2C1635-3093-4D59-80E7-4743AC10F22F}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {1E2C1635-3093-4D59-80E7-4743AC10F22F}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {1E2C1635-3093-4D59-80E7-4743AC10F22F}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {1E2C1635-3093-4D59-80E7-4743AC10F22F}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {1EA4FC64-F33B-4A50-970A-EA052BBE9CF1}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ +@IF PKCS11 + {5042D371-0402-4FA3-A52A-769708694422}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {5042D371-0402-4FA3-A52A-769708694422}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {5042D371-0402-4FA3-A52A-769708694422}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {5042D371-0402-4FA3-A52A-769708694422}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {C663B088-F7BC-4C8C-8D06-A76636EED651}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {C663B088-F7BC-4C8C-8D06-A76636EED651}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {C663B088-F7BC-4C8C-8D06-A76636EED651}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {C663B088-F7BC-4C8C-8D06-A76636EED651}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {5B3137E5-7E1F-49AA-8810-A09AA417D326}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {5B3137E5-7E1F-49AA-8810-A09AA417D326}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {5B3137E5-7E1F-49AA-8810-A09AA417D326}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {5B3137E5-7E1F-49AA-8810-A09AA417D326}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {403FD4B1-A4F9-4159-9013-5860E3A4417D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {403FD4B1-A4F9-4159-9013-5860E3A4417D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {403FD4B1-A4F9-4159-9013-5860E3A4417D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {403FD4B1-A4F9-4159-9013-5860E3A4417D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ +@END PKCS11 +@IF XTESTS + {14751171-C40E-40EE-A2F0-37FFC3CCD4A2}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {14751171-C40E-40EE-A2F0-37FFC3CCD4A2}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {14751171-C40E-40EE-A2F0-37FFC3CCD4A2}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {14751171-C40E-40EE-A2F0-37FFC3CCD4A2}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {06AA5F16-7121-4C3A-91EF-AFC3BF3B8CE1}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {7705EEF6-6980-48F9-A045-699DAFE860C9}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {7705EEF6-6980-48F9-A045-699DAFE860C9}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {7705EEF6-6980-48F9-A045-699DAFE860C9}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {7705EEF6-6980-48F9-A045-699DAFE860C9}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {551561F6-4A2A-4824-8A34-A4AF0EB7C179}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {551561F6-4A2A-4824-8A34-A4AF0EB7C179}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {551561F6-4A2A-4824-8A34-A4AF0EB7C179}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {551561F6-4A2A-4824-8A34-A4AF0EB7C179}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {6200ED9D-CAB1-4C00-8D79-478F64A19B8F}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {6200ED9D-CAB1-4C00-8D79-478F64A19B8F}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {6200ED9D-CAB1-4C00-8D79-478F64A19B8F}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {6200ED9D-CAB1-4C00-8D79-478F64A19B8F}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {CC7340C1-CBAF-4145-969A-73AE960401D6}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {CC7340C1-CBAF-4145-969A-73AE960401D6}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {CC7340C1-CBAF-4145-969A-73AE960401D6}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {CC7340C1-CBAF-4145-969A-73AE960401D6}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {E55653C8-5501-4871-A97C-C926631F40F9}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {E55653C8-5501-4871-A97C-C926631F40F9}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {E55653C8-5501-4871-A97C-C926631F40F9}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {E55653C8-5501-4871-A97C-C926631F40F9}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ +@END XTESTS +@IF STESTS + {31715139-2C27-47D2-8394-71B71A8AC3D5}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {31715139-2C27-47D2-8394-71B71A8AC3D5}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {31715139-2C27-47D2-8394-71B71A8AC3D5}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {31715139-2C27-47D2-8394-71B71A8AC3D5}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {764DBE24-C8B3-46E8-BE73-196431353A5D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {764DBE24-C8B3-46E8-BE73-196431353A5D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {764DBE24-C8B3-46E8-BE73-196431353A5D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {764DBE24-C8B3-46E8-BE73-196431353A5D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {61F9D673-EB5C-47A5-8907-24E034C75EF8}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {61F9D673-EB5C-47A5-8907-24E034C75EF8}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {61F9D673-EB5C-47A5-8907-24E034C75EF8}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {61F9D673-EB5C-47A5-8907-24E034C75EF8}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {E1478F40-786C-4738-8E99-E7A71DD98661}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {E1478F40-786C-4738-8E99-E7A71DD98661}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {E1478F40-786C-4738-8E99-E7A71DD98661}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {E1478F40-786C-4738-8E99-E7A71DD98661}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {4F9A0F6F-366D-4483-B131-793832840508}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {4F9A0F6F-366D-4483-B131-793832840508}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {4F9A0F6F-366D-4483-B131-793832840508}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {4F9A0F6F-366D-4483-B131-793832840508}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {85ADFF2A-BE31-4B8D-9089-9AD56CE78D7E}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {63A921F6-1200-4723-828A-98960127B73D}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {63A921F6-1200-4723-828A-98960127B73D}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {63A921F6-1200-4723-828A-98960127B73D}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {63A921F6-1200-4723-828A-98960127B73D}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ + {F66D8B7E-721D-4602-99AD-820D19AD1313}.Debug|@PLATFORM@.ActiveCfg = Debug|@PLATFORM@ + {F66D8B7E-721D-4602-99AD-820D19AD1313}.Debug|@PLATFORM@.Build.0 = Debug|@PLATFORM@ + {F66D8B7E-721D-4602-99AD-820D19AD1313}.Release|@PLATFORM@.ActiveCfg = Release|@PLATFORM@ + {F66D8B7E-721D-4602-99AD-820D19AD1313}.Release|@PLATFORM@.Build.0 = Release|@PLATFORM@ +@END STESTS + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/win32utils/build.txt b/win32utils/build.txt new file mode 100644 index 0000000..0f598f1 --- /dev/null +++ b/win32utils/build.txt @@ -0,0 +1,293 @@ +<!-- +Copyright (C) Internet Systems Consortium, Inc. ("ISC") + +SPDX-License-Identifier: MPL-2.0 + +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, you can obtain one at https://mozilla.org/MPL/2.0/. + +See the COPYRIGHT file distributed with this work for additional +information regarding copyright ownership. +--> + +Building BIND 9 on Windows has the following prerequisites: + +1) You need to install Perl for Windows. ActivePerl +(http://www.activestate.com/) and Strawberry Perl +(http://www.strawberryperl.com) have both been tested and found +to work. + +2) libuv (https://libuv.org/) must be downloaded and built on the +system on which you are building BIND 9. + +3) OpenSSL (https://www.openssl.org) must be downloaded and built on +the system on which you are building BIND 9. + +4) If you wish to use the statistics channel, LibXML2 +(ftp://xmlsoft.org/libxml2) must be downloaded and built on +the system on which you are building BIND 9. + +5) Optional external packages (not used by default) + +If you wish to use IP geolocation, GeoIP API and database must be +downloaded, patched and built on the system on which you are building +BIND 9. + +If you wish to use zlib/deflate on the statistics channel, zlib +must be downloaded and built on the system on which you are building +BIND 9. + +If you wish to use python tools, you need a python (version 2 or 3) +interpreter with its standard libraries. + +If you wish to use readline, the readline library must be downloaded +and built on the system on which you are building BIND 9. + +6) The BIND 9 Installer (BINDInstall) includes a copy of the +redistributable runtime object vcredist_x86.exe (or vcredist_x64.exe), +which is included with Visual Studio and can be downloaded from +Microsoft. This file must be in place prior to running Configure. + +Step 1: Download and build libuv + + Download and untar the libuv sources from https://libuv.org/ in the same + directory in which you extracted the BIND 9 source: if BIND 9 is in + \build\bind-9.16.9, for instance, libuv should be in \build\libuv-v1.40.0 + (subject to version number changes). + + As of this writing, a patch (win32utils/libuv.diff) needs to be applied + to the libuv source code in order for it to work with BIND on Windows. A + pull request including the changes from this patch has been submitted to + the libuv maintainers: + + https://github.com/libuv/libuv/pull/2653 + + Applying the win32utils/libuv.diff patch will no longer be necessary + for libuv versions released after this pull request has been merged. + + On Windows, libuv is built using CMake. Here is a sample sequence of + commands which builds a 64-bit shared libuv library: + + cd libuv-v1.40.0 + mkdir build + cd build + cmake -DCMAKE_GENERATOR_PLATFORM=x64 .. + cmake --build . --config Release + +Step 2: Download and build OpenSSL + + Download and untar the OpenSSL sources from https://www.openssl.org/ in + the same directory in which you extracted the BIND 9 source: if BIND 9 is + in \build\bind-9.16.0, for instance, OpenSSL should be in + \build\openssl-1.1.1d (subject to version number changes). + + Note: Building OpenSSL requires that you install Perl and NASM as it + uses these during its build process. The following commands work as of + openssl-1.1.1d, but you should check the OpenSSL distribution to see + if the build instructions in the INSTALL file have changed: + + (In an x64 Visual Studio Command Prompt window) + cd openssl-1.1.1d + perl Configure VC-WIN64A + nmake + +Step 3: Download and build LibXML2 + + LibXML2 is required to use the statistics channel. If you wish to + build BIND 9 without support for this feature, skip to step 4. + + Download and untar the libxml2 sources from ftp://xmlsoft.org/libxml2 in + the same directory in which you extracted the BIND 9 source: if BIND 9 is + in \build\bind-9.16.0, for instance, libxml2 should be in + \build\libxml2-2.9.2 (subject to version number changes). + + Now build libxml2: + + cd libxml2-2.9.2\win32 + cscript configure.js iconv=no + nmake /f Makefile.msvc + +Step 4: Download and build zlib + + The statistics channel (aka internal HTTP server) can support + zlib "deflate" compression method. If you don't want to this + feature, skip to step 5. + + Download and untar the zlib sources from https://www.zlib.net in the same + directory in which you extracted the BIND 9 source: if BIND 9 is in + \build\bind-9.16.0, for instance, zlib should be in \build\zlib-1.2.11 + (subject to version number changes). + + Read the win32\Makefile.msc for the Usage comment at the beginning of + this file, then build the zlib1.dll DLL for the intended processor (i.e., + win32 aka x86, or x64), e.g.: + + cd zlib-1.2.11 + nmake /f win32\Makefile.msc + +Step 5: Download and build GeoIP + + Geographic ("geoip") ACLs require libGeoIP. If you wish to build BIND 9 + without support for this feature, skip to step 6. + + The libGeoIP source code is available from: + + https://github.com/maxmind/geoip-api-c/releases. + + As of this writing, the current version of libGeoIP is 1.6.0. There + is a known bug in this and all prior versions which prevents it from + building a suitable DLL with thread support on Windows. You can apply + the patch file bind9/win32utils/GeoIP.diff to address the problem. + This patch has been submitted upstream, and will be included in + future versions of libGeoIP. + +Step 6: Enable python tools + + Some python packages are required: argparse, ply, win32con and win32api. + Last CPython's (version 2 or 3) from https://www.python.org include + the pip package manager which can install missing packages, for + instance for the 2 last packages 'pip install pypiwin32' downloads and + installs win32con and win32api. + + Note when the python interpreter is in the command path and + the required packages available the Configure script will detect + them and add python tools to the BIND 9 build. + + To be used a python tool must be invoked with python (e.g., + python dnssec-checkds.py <args>) as the shebang doesn't work + on Windows. The isc package should be installed too, cf step 12. + Unlike on Unix systems, this isc package uses the Registry to + learn where BIND 9 was installed in step 11. + +Step 7: Download and build Readline + + The readline library adds command-line editing in nslookup and nsupdate. + If you wish to build BIND 9 without support for this feature, skip to + step 8. + + Because the original GNU source for the readline library has no WIN32 + support, it will be necessary to download a version of the static + readline library source that is ready to be built by Visual Studio. One + such version is available at: + + http://gpsim.sourceforge.net/gpsimWin32/gpsimWin32.html#readline_lib + + Note: Windows command (cmd.exe) provides an integrated line editing + feature so it is not recommended to configure bind with readline. + +Step 8: Make the redistributable runtime object available + + Check that the Microsoft redistributable object (vcredist_x86.exe or + vcredist_x64.exe) is available to the build. The file may be placed + in the directory in which the BIND 9 source was extracted (for + instance, if BIND 9 is in \build\bind-9.16.0, the redistributable + may be placed in \build\vcredist_x86.exe). Or, the path to the file + can be specified via the VCREDIST_PATH environment variable, or via + the "with-vcredist=PATH" option to the configuration script (see + step 9). If none of these options is used, Configure will attempt to + find the redistributable based on clues in the build environment. + +Step 9: Configuring the BIND 9 build + + From the command prompt, cd to the win32utils directory under + the BIND 9 root: + + cd bind-9.16.0\win32utils + + In this directory, you can prepare the Windows build by running: + + perl Configure <options> x64 + + This will set up all the files needed for building BIND 9 according + to the given options. To see the available options, run: + + perl Configure help + + To remove all files generated by Configure, run: + + perl Configure clean + +Step 10: Building BIND 9 + + Building using 'nmake' or older versions of Visual Studio + (e.g. VS 2005 or VS 2008) is no longer supported. + + Building with a version of Visual Studio newer than VS 2010 + requires the solution to first be upgraded by running: + + devenv bind9.sln /upgrade + + If the build host only has Visual Studio Build Tools available + and not a full Visual Studio installation, devenv.exe will not + be present. In that case, the Configure invocation from step 9 + must be extended with the following parameters set to values + matching the Visual Studio Build Tools version used: + + with-tools-version + with-platform-version + with-platform-toolset + + Example use for a 64-bit Visual Studio 2017 build: + + perl Configure ^ + with-tools-version=15.0 ^ + with-platform-toolset=v141 ^ + with-platform-version=10.0.17763.0 ^ + ... + x64 + + To build using the Visual Studio GUI in VS 2010 or newer: + open the bind9.sln solution file; this will load the project + files for all of the BIND 9 libraries and applications. Select + "Build->Batch Build", click "Select All", then click "Build". + + To build using MSBuild in VS 2010 or newer: call MSBuild on + the bind9.sln solution file: + + msbuild /t:Build /p:Configuration=Release bind9.sln + msbuild /t:Build /p:Configuration=Debug bind9.sln + + Note: This mode does not support building for Windows XP. + + After this step this documentation applies to external or remote + builds, i.e., is common with installation. + +Step 11: Install + + Installation is accomplished by running the BINDInstall program. All + DLL's are copied to the Program Files area and all applications + (including BINDInstall which may be necessary for uninstalling BIND + 9) to the bin directory. If BIND 8 has previously been installed on + the system it must be uninstalled first by running it's own + BINDInstall program. The BIND 9 installer does not yet do this. + + Note: BINDInstall.exe requires the MFC (Microsoft Foundation Class). + This is only distributed with non-free (i.e., not "Express") versions of + Visual Studio. The other BIND 9 libraries and applications do not have + this dependency. + + The very last version of BINDInstall uses two files created by + the Configure perl script: + - InstallFlags: 32/64 bit build, and/or should the redistributable + object be run. + - InstallFiles: the list of files to install with for each files + 4 flags (destination, importance, check version and part of tools). + The idea is to be able to use any BINDInstall.exe binary so + a non-free version of Visual Studio is no longer required. + +Step 12: Python package install + + When BIND 9 was built with python support, the isc python package + must be installed locally by: + + cd <top-bind9-directory> + cd bin/python + python setup.py install + + (replace 'python' by the path of your python interpreter if needed.) + + BIND 9 python tools should work with version 2 or 3, 32 or 64 bits. + +Please report bugs, whether in the process of building the application +or in BIND 9 itself, at https://gitlab.isc.org/isc-projects/bind9. diff --git a/win32utils/readme1st.txt b/win32utils/readme1st.txt new file mode 100644 index 0000000..58cc36c --- /dev/null +++ b/win32utils/readme1st.txt @@ -0,0 +1,158 @@ +<!-- +Copyright (C) Internet Systems Consortium, Inc. ("ISC") + +SPDX-License-Identifier: MPL-2.0 + +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, you can obtain one at https://mozilla.org/MPL/2.0/. + +See the COPYRIGHT file distributed with this work for additional +information regarding copyright ownership. +--> + +KIT INSTALLATION: + +Unpack the kit into any convenient directory and run the BINDInstall +program. This will install the named and associated programs into +the correct directories and set up the required registry keys. + +Usually BINDInstall must be run by/as Administrator or it can fail +to operate on the filesystem or the registry or even return messages +like "A referral was returned from the server". The best way to +avoid this kind of problems on Windows 7 or newer is: + - open a "Windows Explorer" window + - go where the distribution was extracted + - click right on the BINDInstall application + - open "Properties" (last) menu + - open "Compatibility" (second) tab + - check the (last) "Run this program as an administrator" box +Unfortunately this is not saved by zip (or any archiver?) as +it is a property saved in the Registry. + +BINDInstall requires that you install it under an account with +restricted privileges. The installer will prompt you for an account +name (the default is "named") and a password for that account. It +will also check for the existence of that account. If it does not +exist is will create it with only the privileges required to run +BIND 9. If the account does exist it will check that it has only the +one privilege required: "Log on as a service". If it has too many +privileges it will prompt you if you want to continue. + +With BIND 9 running under an account name, it is necessary for all +files and directories that BIND 9 uses to have permissions set up for +the named account if the files are on an NTFS disk. BIND 9 requires +that the account have read and write access to the directory for +the pid file, any files that are maintained either for slave zones +or for master zones supporting dynamic updates. The account will +also need read access to the named.conf and any other file that it +needs to read. + +"NT AUTHORITY\LocalService" is also an acceptable account +(and the only acceptable on some recent versions of Windows). +This account is built into Windows and no password is required. +Appropriate file permissions will also need to be set for "NT +AUTHORITY\LocalService" similar to those that would have been +required for the "named" account. + +It is important that on Windows the directory directive is used in +the options section to tell BIND 9 where to find the files used in +named.conf (default "%ProgramFiles%\ISC BIND 9\etc\named.conf"). For +example: + + options { + directory "C:\Program Files (x86)\ISC BIND 9\etc"; + }; + +for a 32 bit BIND 9 on a 64 bit US Domestic Windows system. +Messages are logged to the Application log in the EventViewer. + +CONTROLLING BIND 9: + +Windows uses the same rndc program as is used on Unix systems. The +rndc.conf file must be configured for your system in order to work. +You will need to generate a key for this. To do this use the +rndc-confgen program. The program will be installed in the same +directory as named: "%ProgramFiles%\ISC BIND 9\bin". From the DOS +prompt, use the command this way: + +rndc-confgen -a + +which will create a rndc.key file in the "%ProgramFiles%\ISC BIND 9\etc" +directory. This will allow you to run rndc without an explicit +rndc.conf file or key and control entry in named.conf file. See +the ARM for details of this. An rndc.conf can also be generated by +running: + +rndc-confgen > rndc.conf + +which will create the rndc.conf file in the current directory, but +not copy it to the "%ProgramFiles%\ISC BIND 9\etc" directory where +it needs to reside. If you create rndc.conf this way you will need +to copy the same key statement into named.conf. + +The additions look like the following: + +key "rndc-key" { algorithm hmac-sha256; secret "xxxxxxxxx=="; }; + +controls { + inet 127.0.0.1 port 953 allow { localhost; } keys { "rndc-key"; }; +}; + +Note that the value of the secret must come from the key generated +above for rndc and must be the same key value for both. Details of +this may be found in the ARM. If you have rndc on a Unix box you can +use it to control BIND 9 on the Windows box as well as using the Windows +version of rndc to control a BIND 9 daemon on a Unix box. However you +must have key statements valid for the servers you wish to control, +specifically the IP address and key in both named.conf and rndc.conf. +Again see the ARM for details. + +In order to run rndc from a different system it is important to +ensure that the clocks are synchronized. The clocks must be kept +within 5 minutes of each other or the rndc commands will fail +authentication. Use NTP or other time synchronization software to +keep your clocks accurate. NTP can be found at http://www.ntp.org/. + +In addition BIND 9 is installed as a win32 system service, can be +started and stopped in the same way as any other service and +automatically starts whenever the system is booted. Signals are not +supported and are in fact ignored. + +Note: Unlike most Windows applications, named does not change its +working directory when started as a service. If you wish to use +relative files in named.conf you will need to specify a working +directory using the directory directive options. + +DOCUMENTATION: + +This kit includes Documentation in HTML format. The documentation +is not copied during the installation process so you should move +it to any convenient location for later reference. Of particular +importance is the BIND 9 Administrator's Reference Manual (Bv9ARM*.html) +which provides detailed information on BIND 9. In addition, there +are HTML pages for each of the BIND 9 applications. + +IMPORTANT NOTE ON USING BIND 9 TOOLS: + +It is no longer necessary to create a resolv.conf file on Windows +as BIND 9 tools will look in the registry for the required name server +information. However, if you do create a resolv.conf file as follows, +the tools will use it in preference to the registry name server +entries. + +Place resolv.conf the "%ProgramFiles%\ISC BIND 9\etc" directory. +It must contain a list of recursive server addresses. The format +of this file is: + +nameserver 1.2.3.4 +nameserver 5.6.7.8 + +Replace the above IP addresses with the real name server addresses. +127.0.0.1 is a valid address if you are running a recursive name +server on the localhost. + +PROBLEMS: + +Please report bugs at https://gitlab.isc.org/isc-projects/bind9. +Other questions can go to the bind-users@isc.org mailing list. |