summaryrefslogtreecommitdiffstats
path: root/win32utils
diff options
context:
space:
mode:
Diffstat (limited to 'win32utils')
-rw-r--r--win32utils/Configure2778
-rw-r--r--win32utils/GeoIP.diff345
-rw-r--r--win32utils/bind9.sln.in772
-rw-r--r--win32utils/build.txt293
-rw-r--r--win32utils/readme1st.txt158
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.