summaryrefslogtreecommitdiffstats
path: root/win32utils/Configure
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:37:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:37:14 +0000
commitea648e70a989cca190cd7403fe892fd2dcc290b4 (patch)
treee2b6b1c647da68b0d4d66082835e256eb30970e8 /win32utils/Configure
parentInitial commit. (diff)
downloadbind9-ea648e70a989cca190cd7403fe892fd2dcc290b4.tar.xz
bind9-ea648e70a989cca190cd7403fe892fd2dcc290b4.zip
Adding upstream version 1:9.11.5.P4+dfsg.upstream/1%9.11.5.P4+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'win32utils/Configure')
-rw-r--r--win32utils/Configure3596
1 files changed, 3596 insertions, 0 deletions
diff --git a/win32utils/Configure b/win32utils/Configure
new file mode 100644
index 0000000..ff596b7
--- /dev/null
+++ b/win32utils/Configure
@@ -0,0 +1,3596 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 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/.
+#
+# 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 $icshfile = "..\\isc-config.sh";
+
+my @filelist = ("..\\bin\\check\\win32\\checktool.dsp",
+ "..\\bin\\check\\win32\\checkconf.dsp",
+ "..\\bin\\check\\win32\\checkconf.mak",
+ "..\\bin\\check\\win32\\checkzone.dsp",
+ "..\\bin\\check\\win32\\checkzone.mak",
+ "..\\bin\\confgen\\win32\\confgentool.dsp",
+ "..\\bin\\confgen\\win32\\ddnsconfgen.dsp",
+ "..\\bin\\confgen\\win32\\ddnsconfgen.mak",
+ "..\\bin\\confgen\\win32\\rndcconfgen.dsp",
+ "..\\bin\\confgen\\win32\\rndcconfgen.mak",
+ "..\\bin\\delv\\win32\\delv.dsp",
+ "..\\bin\\delv\\win32\\delv.mak",
+ "..\\bin\\dig\\win32\\dig.dsp",
+ "..\\bin\\dig\\win32\\dig.mak",
+ "..\\bin\\dig\\win32\\dighost.dsp",
+ "..\\bin\\dig\\win32\\host.dsp",
+ "..\\bin\\dig\\win32\\host.mak",
+ "..\\bin\\dig\\win32\\nslookup.dsp",
+ "..\\bin\\dig\\win32\\nslookup.mak",
+ "..\\bin\\dnssec\\win32\\dnssectool.dsp",
+ "..\\bin\\dnssec\\win32\\dsfromkey.dsp",
+ "..\\bin\\dnssec\\win32\\dsfromkey.mak",
+ "..\\bin\\dnssec\\win32\\importkey.dsp",
+ "..\\bin\\dnssec\\win32\\importkey.mak",
+ "..\\bin\\dnssec\\win32\\keyfromlabel.dsp",
+ "..\\bin\\dnssec\\win32\\keyfromlabel.mak",
+ "..\\bin\\dnssec\\win32\\keygen.dsp",
+ "..\\bin\\dnssec\\win32\\keygen.mak",
+ "..\\bin\\dnssec\\win32\\revoke.dsp",
+ "..\\bin\\dnssec\\win32\\revoke.mak",
+ "..\\bin\\dnssec\\win32\\settime.dsp",
+ "..\\bin\\dnssec\\win32\\settime.mak",
+ "..\\bin\\dnssec\\win32\\signzone.dsp",
+ "..\\bin\\dnssec\\win32\\signzone.mak",
+ "..\\bin\\dnssec\\win32\\verify.dsp",
+ "..\\bin\\dnssec\\win32\\verify.mak",
+ "..\\bin\\named\\win32\\named.dsp",
+ "..\\bin\\named\\win32\\named.mak",
+ "..\\bin\\nsupdate\\win32\\nsupdate.dsp",
+ "..\\bin\\nsupdate\\win32\\nsupdate.mak",
+ "..\\bin\\pkcs11\\win32\\pk11destroy.dsp",
+ "..\\bin\\pkcs11\\win32\\pk11destroy.mak",
+ "..\\bin\\pkcs11\\win32\\pk11keygen.dsp",
+ "..\\bin\\pkcs11\\win32\\pk11keygen.mak",
+ "..\\bin\\pkcs11\\win32\\pk11list.dsp",
+ "..\\bin\\pkcs11\\win32\\pk11list.mak",
+ "..\\bin\\pkcs11\\win32\\pk11tokens.dsp",
+ "..\\bin\\pkcs11\\win32\\pk11tokens.mak",
+ "..\\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",
+ "..\\bin\\rndc\\win32\\rndc.dsp",
+ "..\\bin\\rndc\\win32\\rndc.mak",
+ "..\\bin\\rndc\\win32\\rndcutil.dsp",
+ "..\\bin\\tests\\system\\dlz\\prereq.sh",
+ "..\\bin\\tools\\win32\\arpaname.dsp",
+ "..\\bin\\tools\\win32\\arpaname.mak",
+ "..\\bin\\tools\\win32\\genrandom.dsp",
+ "..\\bin\\tools\\win32\\genrandom.mak",
+ "..\\bin\\tools\\win32\\ischmacfixup.dsp",
+ "..\\bin\\tools\\win32\\ischmacfixup.mak",
+ "..\\bin\\tools\\win32\\journalprint.dsp",
+ "..\\bin\\tools\\win32\\journalprint.mak",
+ "..\\bin\\tools\\win32\\mdig.dsp",
+ "..\\bin\\tools\\win32\\mdig.mak",
+ "..\\bin\\tools\\win32\\nsec3hash.dsp",
+ "..\\bin\\tools\\win32\\nsec3hash.mak",
+ "..\\bin\\tools\\win32\\rrchecker.dsp",
+ "..\\bin\\tools\\win32\\rrchecker.mak",
+ "..\\bin\\tests\\system\\win32\\bigkey.dsp",
+ "..\\bin\\tests\\system\\win32\\bigkey.mak",
+ "..\\bin\\tests\\system\\win32\\feature-test.dsp",
+ "..\\bin\\tests\\system\\win32\\feature-test.mak",
+ "..\\bin\\tests\\system\\win32\\gencheck.dsp",
+ "..\\bin\\tests\\system\\win32\\gencheck.mak",
+ "..\\bin\\tests\\system\\win32\\keycreate.dsp",
+ "..\\bin\\tests\\system\\win32\\keycreate.mak",
+ "..\\bin\\tests\\system\\win32\\keydelete.dsp",
+ "..\\bin\\tests\\system\\win32\\keydelete.mak",
+ "..\\bin\\tests\\system\\win32\\lwtest.dsp",
+ "..\\bin\\tests\\system\\win32\\lwtest.mak",
+ "..\\bin\\tests\\system\\win32\\pipequeries.dsp",
+ "..\\bin\\tests\\system\\win32\\pipequeries.mak",
+ "..\\bin\\tests\\win32\\backtrace_test.dsp",
+ "..\\bin\\tests\\win32\\backtrace_test.mak",
+ "..\\bin\\tests\\win32\\inter_test.dsp",
+ "..\\bin\\tests\\win32\\inter_test.mak",
+ "..\\bin\\tests\\win32\\makejournal.dsp",
+ "..\\bin\\tests\\win32\\makejournal.mak",
+ "..\\bin\\tests\\win32\\rwlock_test.dsp",
+ "..\\bin\\tests\\win32\\rwlock_test.mak",
+ "..\\bin\\tests\\win32\\shutdown_test.dsp",
+ "..\\bin\\tests\\win32\\shutdown_test.mak",
+ "..\\bin\\tests\\win32\\sock_test.dsp",
+ "..\\bin\\tests\\win32\\sock_test.mak",
+ "..\\bin\\tests\\win32\\task_test.dsp",
+ "..\\bin\\tests\\win32\\task_test.mak",
+ "..\\bin\\tests\\win32\\timer_test.dsp",
+ "..\\bin\\tests\\win32\\timer_test.mak",
+ "..\\bin\\tests\\win32\\inter_test.dsp",
+ "..\\bin\\tests\\win32\\inter_test.mak",
+ "..\\bin\\tests\\win32\\rwlock_test.dsp",
+ "..\\bin\\tests\\win32\\rwlock_test.mak",
+ "..\\bin\\tests\\win32\\shutdown_test.dsp",
+ "..\\bin\\tests\\win32\\shutdown_test.mak",
+ "..\\bin\\tests\\win32\\sock_test.dsp",
+ "..\\bin\\tests\\win32\\sock_test.mak",
+ "..\\bin\\tests\\win32\\task_test.dsp",
+ "..\\bin\\tests\\win32\\task_test.mak",
+ "..\\bin\\tests\\win32\\timer_test.dsp",
+ "..\\bin\\tests\\win32\\timer_test.mak",
+ "..\\bin\\win32\\BINDInstall\\BINDInstall.dsp",
+ "..\\bin\\win32\\BINDInstall\\BINDInstall.mak",
+ "..\\lib\\bind9\\win32\\libbind9.dsp",
+ "..\\lib\\bind9\\win32\\libbind9.mak",
+ "..\\lib\\dns\\win32\\gen.dsp",
+ "..\\lib\\dns\\win32\\gen.mak",
+ "..\\lib\\dns\\win32\\libdns.def",
+ "..\\lib\\dns\\win32\\libdns.dsp",
+ "..\\lib\\dns\\win32\\libdns.mak",
+ "..\\lib\\irs\\win32\\libirs.dsp",
+ "..\\lib\\irs\\win32\\libirs.mak",
+ "..\\lib\\isc\\win32\\libisc.def",
+ "..\\lib\\isc\\win32\\libisc.dsp",
+ "..\\lib\\isc\\win32\\libisc.mak",
+ "..\\lib\\isccc\\win32\\libisccc.dsp",
+ "..\\lib\\isccc\\win32\\libisccc.mak",
+ "..\\lib\\isccfg\\win32\\libisccfg.dsp",
+ "..\\lib\\isccfg\\win32\\libisccfg.mak",
+ "..\\lib\\lwres\\win32\\liblwres.dsp",
+ "..\\lib\\lwres\\win32\\liblwres.mak",
+ "..\\lib\\samples\\win32\\async.dsp",
+ "..\\lib\\samples\\win32\\async.mak",
+ "..\\lib\\samples\\win32\\gai.dsp",
+ "..\\lib\\samples\\win32\\gai.mak",
+ "..\\lib\\samples\\win32\\nsprobe.dsp",
+ "..\\lib\\samples\\win32\\nsprobe.mak",
+ "..\\lib\\samples\\win32\\request.dsp",
+ "..\\lib\\samples\\win32\\request.mak",
+ "..\\lib\\samples\\win32\\resolve.dsp",
+ "..\\lib\\samples\\win32\\resolve.mak",
+ "..\\lib\\samples\\win32\\update.dsp",
+ "..\\lib\\samples\\win32\\update.mak",
+ "..\\lib\\win32\\bindevt\\bindevt.dsp",
+ "..\\lib\\win32\\bindevt\\bindevt.mak",
+ "legacy\\BINDBuild.dsw",
+ "legacy\\BuildAll.bat",
+ "legacy\\BuildPost.bat",
+ "legacy\\BuildSetup.bat");
+
+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\\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\\genrandom.vcxproj",
+ "..\\bin\\tools\\win32\\genrandom.vcxproj.filters",
+ "..\\bin\\tools\\win32\\ischmacfixup.vcxproj",
+ "..\\bin\\tools\\win32\\ischmacfixup.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\\lwtest.vcxproj",
+ "..\\bin\\tests\\system\\win32\\lwtest.vcxproj.filters",
+ "..\\bin\\tests\\system\\win32\\pipequeries.vcxproj",
+ "..\\bin\\tests\\system\\win32\\pipequeries.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\\lwres\\win32\\liblwres.vcxproj",
+ "..\\lib\\lwres\\win32\\liblwres.vcxproj.filters",
+ "..\\lib\\samples\\win32\\resolve.vcxproj",
+ "..\\lib\\samples\\win32\\resolve.vcxproj.filters",
+ "..\\lib\\samples\\win32\\async.vcxproj",
+ "..\\lib\\samples\\win32\\async.vcxproj.filters",
+ "..\\lib\\samples\\win32\\gai.vcxproj",
+ "..\\lib\\samples\\win32\\gai.vcxproj.filters",
+ "..\\lib\\samples\\win32\\update.vcxproj",
+ "..\\lib\\samples\\win32\\update.vcxproj.filters",
+ "..\\lib\\samples\\win32\\request.vcxproj",
+ "..\\lib\\samples\\win32\\request.vcxproj.filters",
+ "..\\lib\\samples\\win32\\nsprobe.vcxproj",
+ "..\\lib\\samples\\win32\\nsprobe.vcxproj.filters",
+ "..\\lib\\win32\\bindevt\\bindevt.vcxproj",
+ "..\\lib\\win32\\bindevt\\bindevt.vcxproj.filters",
+ "bind9.sln");
+
+# for config.h
+
+my %configdefh;
+
+my @substdefh = ("AES_CC",
+ "ALLOW_FILTER_AAAA",
+ "CONFIGARGS",
+ "DNS_RDATASET_FIXED",
+ "ENABLE_RPZ_NSDNAME",
+ "ENABLE_RPZ_NSIP",
+ "HAVE_EVP_SHA256",
+ "HAVE_EVP_SHA384",
+ "HAVE_EVP_SHA512",
+ "HAVE_FIPS_MODE",
+ "HAVE_GEOIP",
+ "HAVE_GEOIP_CITY_V6",
+ "HAVE_GEOIP_V6",
+ "HAVE_LIBXML2",
+ "HAVE_OPENSSL_AES",
+ "HAVE_OPENSSL_DSA",
+ "HAVE_OPENSSL_ECDSA",
+ "HAVE_OPENSSL_ED25519",
+ "HAVE_OPENSSL_ED448",
+ "HAVE_OPENSSL_EVP_AES",
+ "HAVE_OPENSSL_GOST",
+ "HAVE_PKCS11_ECDSA",
+ "HAVE_PKCS11_ED25519",
+ "HAVE_PKCS11_ED448",
+ "HAVE_PKCS11_GOST",
+ "HAVE_READLINE",
+ "HAVE_ZLIB",
+ "HMAC_SHA1_CC",
+ "HMAC_SHA256_CC",
+ "ISC_LIST_CHECKINIT",
+ "PREFER_GOSTASN1",
+ "TUNE_LARGE",
+ "WANT_QUERYTRACE",
+ "WITH_IDN");
+
+# for platform.h
+
+my %configdefp;
+
+my @substdefp = ("ISC_PLATFORM_BUSYWAITNOP",
+ "ISC_PLATFORM_HAVEATOMICSTORE",
+ "ISC_PLATFORM_HAVEATOMICSTOREQ",
+ "ISC_PLATFORM_HAVECMPXCHG",
+ "ISC_PLATFORM_HAVEXADD",
+ "ISC_PLATFORM_HAVEXADDQ",
+ "ISC_PLATFORM_NEEDSTRCASESTR",
+ "ISC_PLATFORM_USEBACKTRACE",
+ "ISC_PLATFORM_WANTAES");
+
+# for conf.sh
+
+my %configtest;
+
+my @substtest = ("CHECK_DSA",
+ "CHECKDS",
+ "COVERAGE",
+ "DNSTAP",
+ "FSTRM_CAPTURE",
+ "JSONSTATS",
+ "KEYMGR",
+ "NZD_TOOLS",
+ "PKCS11_TEST",
+ "XMLSTATS",
+ "ZLIB"),
+
+# includes
+
+my %configinc;
+
+my @substinc = ("GSSAPI_INC",
+ "GEOIP_INC",
+ "IDN_INC",
+ "LIBXML2_INC",
+ "OPENSSL_INC",
+ "READLINE_INC",
+ "ZLIB_INC");
+
+# libraries
+
+my %configlib;
+
+my @substlib = ("GSSAPI_LIB",
+ "GEOIP_LIB",
+ "IDN_LIB",
+ "KRB5_LIB",
+ "LIBXML2_LIB",
+ "OPENSSL_LIB",
+ "READLINE_LIB",
+ "READLINE_LIBD",
+ "ZLIB_LIB");
+
+# DLLs
+
+my %configdll;
+
+my @substdll = ("COMERR_DLL",
+ "GSSAPI_DLL",
+ "GEOIP_DLL",
+ "ICONV_DLL",
+ "IDN_DLL",
+ "KRB5_DLL",
+ "K5SPRT_DLL",
+ "LIBXML2_DLL",
+ "OPENSSL_DLL",
+ "WSHELP_DLL",
+ "ZLIB_DLL");
+
+# variables
+
+my %configvar;
+
+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",
+ "prefix",
+ "PYTHON",
+ "PYTHON_INSTALL_DIR",
+ "VCREDIST_PATH"),
+
+# defines
+
+my %configdefd;
+
+my @substdefd = ("CRYPTO",
+ "PK11_LIB_LOCATION",
+ "USE_GSSAPI",
+ "USE_PKCS11",
+ "USE_PYTHON",
+ "USE_ISC_SPNEGO");
+
+# conditions
+
+my %configcond;
+
+my @substcond = ("AES",
+ "ATOMIC",
+ "GSSAPI",
+ "GEOIP",
+ "IDNKIT",
+ "LIBXML2",
+ "OPENSSL",
+ "PKCS11",
+ "PYTHON",
+ "SAMPLES",
+ "STESTS",
+ "TESTS",
+ "XTESTS",
+ "ZLIB");
+
+my @allcond = (@substcond, "NOTYET", "NOLONGER");
+
+# arguments
+
+# enable-xxx/disable-xxx
+
+my @enablelist = ("developer",
+ "fixed-rrset",
+ "intrinsics",
+ "isc-spnego",
+ "native-pkcs11",
+ "openssl-hash",
+ "filter-aaaa",
+ "querytrace",
+ "rpz-nsdname",
+ "rpz-nsip");
+
+# with-xxx/without-xxx
+
+my @withlist = ("aes",
+ "cc-alg",
+ "cross-compile",
+ "ecdsa",
+ "eddsa",
+ "extra-tests",
+ "gssapi",
+ "geoip",
+ "gost",
+ "iconv",
+ "idn",
+ "openssl",
+ "libxml2",
+ "pkcs11",
+ "python",
+ "readline",
+ "samples",
+ "system-tests",
+ "tests",
+ "tuning",
+ "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",
+" legacy (options) process only files for legacy build\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 instrinsic/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-isc-spnego use SPNEGO from lib/dns [default=yes]\n",
+" enable-filter-aaaa enable filtering of AAAA records [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",
+" enable-rpz-nsip enable rpz-nsip rules [default=yes]\n",
+" enable-rpz-nsdname enable rpz-nsdname rules [default=yes]\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-samples build with sample programs\n",
+" with-openssl[=PATH] build with OpenSSL yes|no|path\n",
+" with-pkcs11[=PATH] build with PKCS#11 support yes|no|provider-path\n",
+" with-ecdsa crypto ECDSA\n",
+" with-eddsa crypto EDDSA yes|all|no\n",
+" with-gost[=ENC] crypto GOST yes|no|raw|ans1\n",
+" with-aes crypto AES\n",
+" with-cc-alg choose the algorithm for cookies aes|sha1|sha256\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-geoip[=PATH] build with GeoIP support yes|no|path\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 plaform size (large|default)\n",
+" with-cross-compile 32 / 64 bit build / host plaforms\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 $enable_native_pkcs11 = "no";
+my $enable_openssl_hash = "auto";
+my $enable_filter_aaaa = "yes";
+my $enable_isc_spnego = "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_samples = "no";
+my $use_openssl = "auto";
+my $openssl_path = "..\\..\\";
+my $use_pkcs11 = "no";
+my $pkcs11_path = "unknown";
+my $use_ecdsa = "auto";
+my $use_eddsa = "auto";
+my $use_ed448 = "auto";
+my $use_gost = "auto";
+my $gost_encoding = "raw";
+my $use_aes = "auto";
+my $cookie_algorithm = "aes";
+my $use_gssapi = "no";
+my $gssapi_path = "C:\\Program\ Files\\MIT\\Kerberos\\";
+my $use_geoip = "no";
+my $geoip_path = "";
+my $use_libxml2 = "auto";
+my $libxml2_path = "..\\..\\";
+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 = $_;
+ }
+}
+
+# legacy default to win32
+
+if ($legacy_only && ($want_x64 ne "yes")) {
+ $want_win32 = "yes";
+}
+
+if ($want_checkfiles eq "yes") {
+ foreach (@filelist) {
+ next if -r $_ . ".in";
+ s/\\/\//g;
+ next if -r $_ . ".in";
+ print "missing $_.in from filelist\n";
+ }
+ foreach (@projectlist) {
+ next if -r $_ . ".in";
+ s/\\/\//g;
+ next if -r $_ . ".in";
+ print "missing $_.in from projectlist\n";
+ }
+ exit(0);
+}
+
+# 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";
+ $configdefp{"ISC_PLATFORM_BUSYWAITNOP"} = "__asm { rep nop }";
+} elsif ($want_x64 eq "yes") {
+ $configvar{"PLATFORM"} = "x64";
+ $configvar{"BUILD_PLATFORM"} = "x64";
+ $configvar{"MACHINE"} = "/machine:X64";
+ $configvar{"BUILD_MACHINE"} = "/machine:X64";
+ $configdefp{"ISC_PLATFORM_BUSYWAITNOP"} = "_mm_pause()";
+}
+# 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, spaces and double quotes
+ $arg =~ 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 =~ /^openssl-hash$/i) {
+ if ($val =~ /^yes$/i) {
+ $enable_openssl_hash = "yes";
+ } elsif ($val =~ /^no$/i) {
+ $enable_openssl_hash = "no";
+ }
+ } elsif ($key =~ /^isc-spnego$/i) {
+ if ($val =~ /^no$/i) {
+ $enable_isc_spnego = "no";
+ }
+ } elsif ($key =~ /^filter-aaaa$/i) {
+ if ($val =~ /^no$/i) {
+ $enable_filter_aaaa = "no";
+ }
+ } 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 =~ /^rpz-nsip$/i) {
+ if ($val =~ /^no$/i) {
+ $enable_rpz_nsip = "no";
+ }
+ } elsif ($key =~ /^rpz-nsdname$/i) {
+ if ($val =~ /^no$/i) {
+ $enable_rpz_nsdname = "no";
+ }
+ } 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_filter_aaaa = "yes";
+ $enable_querytrace = "yes";
+ # no atf on WIN32
+ $enable_fixed_rrset = "yes";
+ # TODO: dlz filesystem
+ $use_tests = "yes";
+ $use_xtests = "yes";
+ $use_stests = "yes";
+ $use_samples = "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 =~ /^samples$/i) {
+ if ($val =~ /^yes$/i) {
+ $use_samples = "yes";
+ }
+ } elsif ($key =~ /^openssl$/i) {
+ if ($val =~ /^no$/i) {
+ $use_openssl = "no";
+ } elsif ($val !~ /^yes$/i) {
+ $use_openssl = "yes";
+ $openssl_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 =~ /^ecdsa$/i) {
+ if ($val =~ /^no$/i) {
+ $use_ecdsa = "no";
+ } elsif ($val =~ /^yes$/i) {
+ $use_ecdsa = "yes";
+ }
+ } elsif ($key =~ /^eddsa$/i) {
+ if ($val =~ /^no$/i) {
+ $use_eddsa = "no";
+ } elsif ($val !~ /^no$/i) {
+ $use_eddsa = "yes";
+ if ($val =~ /^all$/i) {
+ $use_ed448 = "yes";
+ }
+ }
+ } elsif ($key =~ /^gost$/i) {
+ if ($val =~ /^no$/i) {
+ $use_gost = "no";
+ } elsif ($val !~ /^no$/i) {
+ $use_gost = "yes";
+ $gost_encoding = $val;
+ }
+ } elsif ($key =~ /^aes$/i) {
+ if ($val =~ /^no$/i) {
+ $use_aes = "no";
+ } elsif ($val =~ /^yes$/i) {
+ $use_aes = "yes";
+ }
+ } elsif ($key =~ /^cc-alg$/i) {
+ $cookie_algorithm = $val;
+ } 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 =~ /^geoip$/i) {
+ if ($val !~ /^no$/i) {
+ $use_geoip = "yes";
+ if ($val !~ /^yes$/i) {
+ $geoip_path = $val;
+ }
+ }
+ } 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 =~ /^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 =~ /^large$/i) {
+ $tuning = "large";
+ }
+ } else {
+ $want_unknown = "yes";
+ if ($val eq "no") {
+ $unknown_value = "without-" . $key;
+ } else {
+ $unknown_value = "with-" . $key;
+ }
+ }
+}
+
+# resolve enable-openssl-hash
+if ($enable_openssl_hash eq "auto") {
+ if ($use_openssl ne "no") {
+ if ($enable_native_pkcs11 eq "yes") {
+ $enable_openssl_hash="no";
+ } else {
+ $enable_openssl_hash="yes";
+ }
+ } else {
+ $enable_openssl_hash="no";
+ }
+}
+
+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);
+ unlink($icshfile);
+
+ 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";
+ }
+ if ($enable_openssl_hash eq "yes") {
+ print "openssl-hash: enabled\n";
+ } else {
+ print "openssl-hash: disabled\n";
+ }
+ if ($enable_isc_spnego eq "yes") {
+ print "isc-spnego: enabled\n";
+ } else {
+ print "isc-spnego: disabled\n";
+ }
+ if ($enable_filter_aaaa eq "yes") {
+ print "filter-aaaa: enabled\n";
+ } else {
+ print "filter-aaaa: disabled\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";
+ }
+ if ($enable_rpz_nsip eq "yes") {
+ print "rpz-nsip: enabled\n";
+ } else {
+ print "rpz-nsip: disabled\n";
+ }
+ if ($enable_rpz_nsdname eq "yes") {
+ print "rpz-nsdname: enabled\n";
+ } else {
+ print "rpz-nsdname: disabled\n";
+ }
+ print "cookie algorithm: $cookie_algorithm\n";
+ if ($use_openssl eq "no") {
+ print "openssl: disabled\n";
+ } else {
+ 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_samples eq "yes") {
+ print "sample programs: enabled\n";
+ }
+ if ($use_pkcs11 eq "no") {
+ print "pkcs11: disabled\n";
+ } else {
+ print "pkcs11-provider-path: $pkcs11_path\n";
+ }
+ if ($use_ecdsa eq "no") {
+ print "ecdsa: disabled\n";
+ } else {
+ print "ecdsa: enabled\n";
+ }
+ if ($use_eddsa eq "no") {
+ print "eddsa: disabled\n";
+ } else {
+ print "ed25519: enabled\n";
+ if ($use_ed448 eq "no") {
+ print "ed448: disabled\n";
+ } else {
+ print "ed448: enabled\n";
+ }
+ }
+ if ($use_gost eq "no") {
+ print "gost: disabled\n";
+ } else {
+ print "gost: enabled\n";
+ print "gost private key encoding: $gost_encoding\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_geoip eq "no") {
+ print "geoip: disabled\n";
+ } else {
+ print "geoip-path: $geoip_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 ($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 "warning: old version of C++ compiler/Visual Studio\n";
+ print STDERR "only the legacy (cf legacy\\win32-build.txt) will work\n";
+}
+
+# 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) {
+ $configdefp{"ISC_PLATFORM_USEBACKTRACE"} = 1;
+}
+
+# no version of MSVS supports strcasestr() yet
+$configdefp{"ISC_PLATFORM_NEEDSTRCASESTR"} = 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-intrinsics
+if ($enable_intrinsics eq "yes") {
+ $configcond{"ATOMIC"} = 1;
+ $configvar{"INTRINSIC"} = "true";
+ $configvar{"COPTI"} = "/Oi";
+ $configdefp{"ISC_PLATFORM_HAVEXADD"} = 1;
+ if ($want_x64 eq "yes") {
+ $configdefp{"ISC_PLATFORM_HAVEXADDQ"} = 1;
+ $configdefp{"ISC_PLATFORM_HAVEATOMICSTOREQ"} = 1;
+ }
+ $configdefp{"ISC_PLATFORM_HAVEATOMICSTORE"} = 1;
+ $configdefp{"ISC_PLATFORM_HAVECMPXCHG"} = 1;
+} else {
+ $configvar{"INTRINSIC"} = "false";
+}
+
+# enable-native-pkcs11
+if ($enable_native_pkcs11 eq "yes") {
+ if ($use_openssl eq "auto") {
+ $use_openssl = "no";
+ }
+ if ($use_openssl ne "no") {
+ die "can't have both OpenSSL and native PKCS#11\n";
+ }
+ 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";
+ }
+ }
+ $configdefd{"CRYPTO"} = "PKCS11CRYPTO";
+ if ($use_ecdsa eq "no") {
+ if ($verbose) {
+ print "no ECDSA support in native PKCS#11\n";
+ }
+ } else {
+ if ($verbose) {
+ print "enabled ECDSA support in native PKCS#11\n";
+ }
+ $configdefh{"HAVE_PKCS11_ECDSA"} = 1;
+ }
+ if ($use_eddsa eq "no") {
+ if ($verbose) {
+ print "no EDDSA support in native PKCS#11\n";
+ }
+ } else {
+ if ($verbose) {
+ print "enabled Ed25519 support in native PKCS#11\n";
+ }
+ $configdefh{"HAVE_PKCS11_ED25519"} = 1;
+ if ($use_ed448 eq "no") {
+ if ($verbose) {
+ print "no Ed448 support in native PKCS#11\n";
+ }
+ } else {
+ if ($verbose) {
+ print "enabled Ed448 support in native PKCS#11\n";
+ }
+ $configdefh{"HAVE_PKCS11_ED448"} = 1;
+ }
+ }
+ if ($use_gost eq "no") {
+ if ($verbose) {
+ print "no GOST support in native PKCS#11\n";
+ }
+ } else {
+ if ($verbose) {
+ print "enabled GOST support in native PKCS#11\n";
+ }
+ $configdefh{"HAVE_PKCS11_GOST"} = 1;
+ }
+ if ($use_aes eq "no") {
+ if ($verbose) {
+ print "no AES support in native PKCS#11\n";
+ }
+ } else {
+ if ($verbose) {
+ print "enabled AES support in native PKCS#11\n";
+ }
+ $use_aes = "pkcs11";
+ }
+}
+
+# enable-filter-aaaa
+if ($enable_filter_aaaa eq "yes") {
+ $configdefh{"ALLOW_FILTER_AAAA"} = 1;
+}
+
+# enable-fixed-rrset
+if ($enable_fixed_rrset eq "yes") {
+ $configdefh{"DNS_RDATASET_FIXED"} = 1;
+}
+
+# enable-rpz-nsip
+if ($enable_rpz_nsip ne "no") {
+ $configdefh{"ENABLE_RPZ_NSIP"} = 1;
+}
+
+# enable-querytrace
+if ($enable_querytrace eq "yes") {
+ $configdefh{"WANT_QUERYTRACE"} = 1;
+}
+
+# enable-rpz-nsdname
+if ($enable_rpz_nsdname ne "no") {
+ $configdefh{"ENABLE_RPZ_NSDNAME"} = 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-samples
+if ($use_samples eq "yes") {
+ $configcond{"SAMPLES"} = 1;
+}
+
+# with-openssl
+if ($use_openssl eq "no") {
+ if ($verbose) {
+ print "OpenSSL library is disabled\n";
+ }
+} elsif ($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") {
+ $openssl_path = File::Spec->rel2abs($openssl_path);
+ if ($verbose) {
+ print "checking for OpenSSL built directory at \"$openssl_path\"\n";
+ }
+ my $openssl_new = 0;
+ if (!-f File::Spec->catfile($openssl_path,
+ "inc32\\openssl\\opensslv.h")) {
+ $openssl_new = 1;
+ if (!-f File::Spec->catfile($openssl_path,
+ "include\\openssl\\opensslv.h")) {
+ die "can't find OpenSSL opensslv.h include\n";
+ }
+ }
+ my $openssl_inc = File::Spec->catdir($openssl_path, "inc32");
+ my $openssl_libdir = File::Spec->catdir($openssl_path, "out32dll");
+ my $openssl_lib = File::Spec->catfile($openssl_libdir, "libeay32.lib");
+ my $openssl_dll = File::Spec->catfile($openssl_libdir, "libeay32.dll");
+ if (!$openssl_new) {
+ # Check libraries are where we expect
+ if (!-f $openssl_lib) {
+ die "can't find OpenSSL libeay32.lib library\n";
+ }
+ if (!-f $openssl_dll) {
+ die "can't find OpenSSL libeay32.dll DLL\n";
+ }
+ } else {
+ # OpenSSL >= 1.1 is easier at the exception of the DLL
+ if ($verbose) {
+ print "new (>= 1.1) OpenSSL version\n";
+ }
+ $openssl_inc = File::Spec->catdir($openssl_path, "include");
+ $openssl_libdir = $openssl_path;
+ $openssl_lib = File::Spec->catfile($openssl_path, "libcrypto.lib");
+ if (!-f $openssl_lib) {
+ die "can't find OpenSSL libcrypto.lib library\n";
+ }
+ opendir DIR, $openssl_path || die "No Directory: $!\n";
+ my @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 "find more than one OpenSSL libcrypto-*.dll DLL candidate\n";
+ }
+ $openssl_dll = File::Spec->catdir($openssl_path, "@dirlist[0]");
+ }
+
+ $configcond{"OPENSSL"} = 1;
+ $configdefd{"CRYPTO"} = "OPENSSL";
+ $configvar{"OPENSSL_PATH"} = "$openssl_path";
+ $configinc{"OPENSSL_INC"} = "$openssl_inc";
+ $configlib{"OPENSSL_LIB"} = "$openssl_lib";
+ $configdll{"OPENSSL_DLL"} = "$openssl_dll";
+ if (-f File::Spec->catfile($openssl_inc, "openssl", "dsa.h")) {
+ $configdefh{"HAVE_OPENSSL_DSA"} = 1;
+ } elsif ($verbose) {
+ print "OpenSSL DSA support is disabled\n";
+ }
+}
+
+# check OpenSSL
+if ($use_openssl eq "yes") {
+ if ($verbose) {
+ print "checking whether linking with OpenSSL works\n";
+ }
+ my $dll = $configdll{"OPENSSL_DLL"};
+ my $ret = `copy "$dll" .`;
+ if ($? != 0) {
+ die "Can't copy OpenSSL DLL to working directory: $ret\n";
+ }
+ open F, ">testossl.c" || die $!;
+ print F << 'EOF';
+#include <openssl/err.h>
+
+int
+main(void)
+{
+ ERR_clear_error();
+ return(0);
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testossl.c "$library"`;
+ if (grep { -f and -x } ".\\testossl.exe") {
+ `.\\testossl.exe`;
+ if ($? != 0) {
+ die "OpenSSL test failed\n";
+ }
+ } else {
+ die "can't compile OpenSSL test: $compret\n";
+ }
+}
+
+# check OpenSSL version
+if ($use_openssl eq "yes") {
+ 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 >= 0x009070cfL &&
+ OPENSSL_VERSION_NUMBER < 0x00908000L) ||
+ OPENSSL_VERSION_NUMBER >= 0x0090804fL)
+ return (0);
+ printf("\n\nFound OPENSSL_VERSION_NUMBER %#010x\n",
+ OPENSSL_VERSION_NUMBER);
+ printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
+ "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
+ return (1);
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testosslv.c "$library"`;
+ 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";
+ }
+}
+
+# check FIPS_mode
+
+if ($use_openssl eq "yes") {
+ if ($verbose) {
+ printf "checking for FIPS_mode\n";
+ }
+ open F, ">testfips.c" || die $!;
+ print F << 'EOF';
+extern int FIPS_mode();
+
+int main() {
+ return FIPS_mode();
+}
+EOF
+ close F;
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD testfips.c "$library"`;
+ if (grep { -f and -x } ".\\testfips.exe") {
+ $configdefh{"HAVE_FIPS_MODE"} = 1;
+ } else {
+ if ($verbose) {
+ print "can't compile FIPS_mode test: $compret\n";
+ print "disabling FIPS_mode\n";
+ }
+ }
+}
+
+# check EVP_sha256 / EVP_sha384 / EVP_sha512
+
+if ($use_openssl eq "yes") {
+ if ($verbose) {
+ printf "checking for EVP_sha256\n";
+ }
+ open F, ">testsha256.c" || die $!;
+ print F << 'EOF';
+extern void *EVP_sha256();
+
+int main() {
+ return EVP_sha256() != 0;
+}
+EOF
+ close F;
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD testsha256.c "$library"`;
+ if (grep { -f and -x } ".\\testsha256.exe") {
+ `.\\testsha256.exe`;
+ if ($? == 0) {
+ if ($verbose) {
+ print "EVP_sha256 test failed: disabling EVP_sha256\n";
+ }
+ $use_ecdsa = "no";
+ $enable_openssl_hash = "no";
+ } else {
+ $configdefh{"HAVE_EVP_SHA256"} = 1;
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile EVP_sha256 test: $compret\n";
+ print "disabling EVP_sha256\n";
+ }
+ $use_ecdsa = "no";
+ $enable_openssl_hash = "no";
+ }
+
+ if ($verbose) {
+ printf "checking for EVP_sha384\n";
+ }
+ open F, ">testsha384.c" || die $!;
+ print F << 'EOF';
+extern void *EVP_sha384();
+
+int main() {
+ return EVP_sha384() != 0;
+}
+EOF
+ close F;
+ $compret = `cl /nologo /MD testsha384.c "$library"`;
+ if (grep { -f and -x } ".\\testsha384.exe") {
+ `.\\testsha384.exe`;
+ if ($? == 0) {
+ if ($verbose) {
+ print "EVP_sha384 test failed: disabling EVP_sha384\n";
+ }
+ $use_ecdsa = "no";
+ $enable_openssl_hash = "no";
+ } else {
+ $configdefh{"HAVE_EVP_SHA384"} = 1;
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile EVP_sha384 test: $compret\n";
+ print "disabling EVP_sha384\n";
+ }
+ $use_ecdsa = "no";
+ $enable_openssl_hash = "no";
+ }
+
+ if ($verbose) {
+ printf "checking for EVP_sha512\n";
+ }
+ open F, ">testsha512.c" || die $!;
+ print F << 'EOF';
+extern void *EVP_sha512();
+
+int main() {
+ return EVP_sha512() != 0;
+}
+EOF
+ close F;
+ $compret = `cl /nologo /MD testsha512.c "$library"`;
+ if (grep { -f and -x } ".\\testsha512.exe") {
+ `.\\testsha512.exe`;
+ if ($? == 0) {
+ if ($verbose) {
+ print "EVP_sha512 test failed: disabling EVP_sha512\n";
+ }
+ $use_eddsa = "no";
+ } else {
+ $configdefh{"HAVE_EVP_SHA512"} = 1;
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile EVP_sha512 test: $compret\n";
+ print "disabling EVP_sha512\n";
+ }
+ $use_eddsa = "no";
+ }
+}
+
+# with-ecdsa
+if ($use_openssl eq "no") {
+ $use_ecdsa = "no";
+}
+if ($use_ecdsa eq "auto") {
+ if ($verbose) {
+ print "checking for OpenSSL ECDSA support\n";
+ }
+ open F, ">testecdsa.c" || die $!;
+ print F << 'EOF';
+#include <openssl/ecdsa.h>
+#include <openssl/objects.h>
+
+int
+main(void)
+{
+ EC_KEY *ec256, *ec384;
+
+ ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+ ec384 = EC_KEY_new_by_curve_name(NID_secp384r1);
+ if (ec256 == NULL || ec384 == NULL)
+ return (2);
+ return (0);
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testecdsa.c "$library"`;
+ if (grep { -f and -x } ".\\testecdsa.exe") {
+ `.\\testecdsa.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "ECDSA test failed: disabling ECDSA\n";
+ }
+ $use_ecdsa = "no";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile ECDSA test: $compret\n";
+ print "disabling ECDSA\n";
+ }
+ $use_ecdsa = "no";
+ }
+}
+
+if ($use_ecdsa ne "no") {
+ $use_ecdsa = "yes";
+ $configdefh{"HAVE_OPENSSL_ECDSA"} = 1;
+}
+
+# with-eddsa
+if ($use_openssl eq "no") {
+ $use_eddsa = "no";
+}
+if ($use_eddsa eq "auto") {
+ 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;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" tested25519.c "$library"`;
+ if (grep { -f and -x } ".\\tested25519.exe") {
+ `.\\tested25519.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "EDDSA test failed: disabling EDDSA\n";
+ }
+ $use_eddsa = "no";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile EDDSA test: $compret\n";
+ print "disabling EDDSA\n";
+ }
+ $use_eddsa = "no";
+ }
+}
+
+if ($use_eddsa ne "no") {
+ $use_eddsa = "yes";
+ $configdefh{"HAVE_OPENSSL_ED25519"} = 1;
+} else {
+ $use_ed448 = "no";
+}
+
+if ($use_ed448 eq "auto") {
+ 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;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" tested448.c "$library"`;
+ if (grep { -f and -x } ".\\tested448.exe") {
+ `.\\tested448.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "ED448 test failed: disabling ED448\n";
+ }
+ $use_ed448 = "no";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile ED448 test: $compret\n";
+ print "disabling ED448\n";
+ }
+ $use_ed448 = "no";
+ }
+}
+
+if ($use_ed448 ne "no") {
+ $use_ed448 = "yes";
+ $configdefh{"HAVE_OPENSSL_ED448"} = 1;
+}
+
+# with-gost
+if ($use_openssl eq "no") {
+ $use_gost = "no";
+}
+if ($use_gost eq "auto") {
+ if ($verbose) {
+ print "checking for OpenSSL GOST support\n";
+ }
+ open F, ">testgost.c" || die $!;
+ print F << 'EOF';
+#include <openssl/conf.h>
+#include <openssl/engine.h>
+
+int
+main(void)
+{
+#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
+ ENGINE *e;
+ EC_KEY *ek;
+
+ ek = NULL;
+ OPENSSL_config(NULL);
+
+ e = ENGINE_by_id("gost");
+ if (e == NULL)
+ return (1);
+ if (ENGINE_init(e) <= 0)
+ return (1);
+ return (0);
+#else
+ return (1);
+#endif
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testgost.c "$library"`;
+ if (grep { -f and -x } ".\\testgost.exe") {
+ `.\\testgost.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "GOST test failed: disabling GOST\n";
+ }
+ $use_gost = "no";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile GOST test: $compret\n";
+ print "disabling GOST\n";
+ }
+ $use_gost = "no";
+ }
+}
+
+if ($use_gost ne "no") {
+ $use_gost = "yes";
+ $configdefh{"HAVE_OPENSSL_GOST"} = 1;
+}
+
+if ($gost_encoding eq "ans1") {
+ $configdefh{"PREFER_GOSTASN1"} = 1;
+} elsif ($gost_encoding ne "raw") {
+ die "Unrecognized GOST private key encoding: $gost_encoding\n";
+}
+
+# with-aes
+if ($use_openssl eq "no") {
+ if ($use_aes ne "pkcs11") {
+ $use_aes = "no";
+ }
+}
+if ($use_aes eq "auto") {
+ if ($verbose) {
+ print "checking for OpenSSL EVP AES support\n";
+ }
+ $use_aes = "evp";
+ open F, ">testevpaes.c" || die $!;
+ print F << 'EOF';
+#include <openssl/evp.h>
+
+int
+main(void)
+{
+ EVP_CIPHER *aes128, *aes192, *aes256;
+
+ aes128 = EVP_aes_128_ecb();
+ aes192 = EVP_aes_192_ecb();
+ aes256 = EVP_aes_256_ecb();
+ if (aes128 == NULL || aes192 == NULL || aes256 == NULL)
+ return (1);
+ return (0);
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testevpaes.c "$library"`;
+ if (grep { -f and -x } ".\\testevpaes.exe") {
+ `.\\testevpaes.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "EVP AES test failed: disabling EVP AES\n";
+ }
+ $use_aes = "auto";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile EVP AES test: $compret\n";
+ print "disabling EVP AES\n";
+ }
+ $use_aes = "auto";
+ }
+}
+
+if ($use_aes eq "auto") {
+ if ($verbose) {
+ print "checking for OpenSSL native AES support\n";
+ }
+ $use_aes = "native";
+ open F, ">testaes.c" || die $!;
+ print F << 'EOF';
+#include <openssl/aes.h>
+
+AES_KEY k;
+const unsigned char bufin[16];
+unsigned char bufout[16];
+
+int
+main(void)
+{
+ AES_encrypt(bufin, bufout, &k);
+ return (0);
+}
+EOF
+ close F;
+ my $include = $configinc{"OPENSSL_INC"};
+ my $library = $configlib{"OPENSSL_LIB"};
+ $compret = `cl /nologo /MD /I "$include" testaes.c "$library"`;
+ if (grep { -f and -x } ".\\testaes.exe") {
+ `.\\testaes.exe`;
+ if ($? != 0) {
+ if ($verbose) {
+ print "native AES test failed: disabling AES\n";
+ }
+ $use_aes = "no";
+ }
+ } else {
+ if ($verbose) {
+ print "can't compile native AES test: $compret\n";
+ print "disabling AES\n";
+ }
+ $use_aes = "no";
+ }
+}
+
+if ($use_aes eq "yes") {
+ $configdefh{"HAVE_OPENSSL_EVP_AES"} = 1;
+} elsif ($use_aes eq "evp") {
+ $configdefh{"HAVE_OPENSSL_EVP_AES"} = 1;
+ $use_aes = "yes";
+} elsif ($use_aes eq "native") {
+ $configdefh{"HAVE_OPENSSL_AES"} = 1;
+ $use_aes = "yes";
+} elsif ($use_aes eq "pkcs11") {
+ $use_aes = "yes";
+}
+
+if ($use_aes eq "yes") {
+ $configdefp{"ISC_PLATFORM_WANTAES"} = 1;
+ $configcond{"AES"} = 1;
+}
+
+# with-cc-alg
+if ($cookie_algorithm eq "aes") {
+ if ($use_aes ne "yes") {
+ $cookie_algorithm = "sha256";
+ } else {
+ $configdefh{"AES_CC"} = 1;
+ }
+}
+if ($cookie_algorithm eq "sha1") {
+ $configdefh{"HMAC_SHA1_CC"} = 1;
+} elsif ($cookie_algorithm eq "sha256") {
+ $configdefh{"HMAC_SHA256_CC"} = 1;
+} elsif ($cookie_algorithm ne "aes") {
+ die "Unrecognized cookie algorithm: $cookie_algorithm\n";
+}
+
+# enable-openssl-hash
+if ($enable_openssl_hash eq "yes") {
+ if ($use_openssl eq "no") {
+ die "No OpenSSL for hash functions\n";
+ }
+ $configdefp{"ISC_PLATFORM_OPENSSLHASH"} = 1;
+}
+
+# with-pkcs11
+if ($use_pkcs11 ne "no") {
+ $configcond{"PKCS11"} = 1;
+ $configdefd{"USE_PKCS11"} = "USE_PKCS11";
+ $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";
+}
+
+# enable-isc-spnego
+if ($use_gssapi ne "yes") {
+ $enable_isc_spnego = "no";
+} elsif ($enable_isc_spnego eq "yes") {
+ if ($use_gssapi eq "no") {
+ die "No GSSAPI for SPNEGO\n";
+ }
+ $configdefd{"USE_ISC_SPNEGO"} = "USE_ISC_SPNEGO";
+}
+
+# with-geoip
+if ($use_geoip eq "no") {
+ if ($verbose) {
+ print "geoip library is disabled\n";
+ }
+} else {
+ $configcond{"GEOIP"} = 1;
+ $geoip_path = File::Spec->rel2abs($geoip_path);
+ if ($verbose) {
+ print "checking for geoip directory at \"$geoip_path\"\n";
+ }
+ if (!-f File::Spec->catfile($geoip_path, "GeoIP.h")) {
+ die "can't find GeoIP.h include\n";
+ }
+ if (!-f File::Spec->catfile($geoip_path, "GeoIP.lib")) {
+ die "can't find Geoip.lib library\n";
+ }
+ if (!-f File::Spec->catfile($geoip_path, "GeoIP.dll")) {
+ die "can't find Geoip.dll DLL\n";
+ }
+ $configinc{"GEOIP_INC"} = "$geoip_path";
+ my $geoip_lib = File::Spec->catfile($geoip_path, "GeoIP.lib");
+ $configlib{"GEOIP_LIB"} = "$geoip_lib";
+ my $geoip_dll = File::Spec->catfile($geoip_path, "GeoIP.dll");
+ $configdll{"GEOIP_DLL"} = "$geoip_dll";
+
+ if ($verbose) {
+ print "checking for GeoIP support\n";
+ }
+ my $ret = `copy "$geoip_dll" .`;
+ if ($? != 0) {
+ die "Can't copy GeoIP DLL to working directory: $ret\n";
+ }
+ open F, ">testgeoip.c" || die $!;
+ print F << 'EOF';
+extern void *GeoIP_open();
+
+int main() {
+ return GeoIP_open != 0;
+}
+EOF
+ close F;
+ $compret = `cl /nologo /MD testgeoip.c "$geoip_lib"`;
+ if (grep { -f and -x } ".\\testgeoip.exe") {
+ `.\\testgeoip.exe`;
+ if ($? == 0) {
+ die "GeoIP test failed\n";
+ }
+ } else {
+ die "can't compile GeoIP test: $compret\n";
+ }
+ $configdefh{"HAVE_GEOIP"} = 1;
+
+ if ($verbose) {
+ print "checking for GeoIP Country IPv6 support\n";
+ }
+ my $geoip_inc = qq(/I "$geoip_path");
+ my $geoip_libs = qq("$geoip_lib" ws2_32.lib);
+ open F, ">testgeoip1.c" || die $!;
+ print F << 'EOF';
+#include <GeoIP.h>
+
+struct in6_addr in6;
+int flag = 1;
+
+int main() {
+ if (flag)
+ return 1;
+ return GeoIP_country_name_by_ipnum_v6(NULL, in6) != NULL;
+}
+EOF
+ close F;
+ $compret = `cl /nologo $geoip_inc /MD testgeoip1.c $geoip_libs`;
+ if (grep { -f and -x } ".\\testgeoip1.exe") {
+ `.\\testgeoip1.exe`;
+ if ($? == 0) {
+ die "GeoIP Country IPv6 test failed\n";
+ }
+ } else {
+ die "can't compile GeoIP Country IPv6 test: $compret\n";
+ }
+ $configdefh{"HAVE_GEOIP_V6"} = 1;
+
+ if ($verbose) {
+ print "checking for GeoIP City IPv6 support\n";
+ }
+ open F, ">testgeoip2.c" || die $!;
+ print F << 'EOF';
+#include <GeoIP.h>
+#include <GeoIPCity.h>
+
+struct in6_addr in6;
+int i = GEOIP_CITY_EDITION_REV0_V6;
+int flag = 1;
+
+int main() {
+ if (flag)
+ return 1;
+ return GeoIP_record_by_ipnum_v6(NULL, in6) != NULL;
+}
+EOF
+ close F;
+ $compret = `cl /nologo $geoip_inc /MD testgeoip2.c $geoip_libs`;
+ if (grep { -f and -x } ".\\testgeoip2.exe") {
+ `.\\testgeoip2.exe`;
+ if ($? == 0) {
+ die "GeoIP City IPv6 test failed\n";
+ }
+ } else {
+ die "can't compile GeoIP City IPv6 test: $compret\n";
+ }
+ $configdefh{"HAVE_GEOIP_CITY_V6"} = 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";
+}
+
+# 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"} = "checkds";
+ $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 eq "large") {
+ $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 isc-config.sh with %configvar accepting undefined
+
+sub setupicsh {
+ my $line;
+ my @Lines;
+ my $val;
+
+ open F, $icshfile . ".in" || die $!;
+ @Lines = <F>;
+ close F;
+
+ foreach $line (@Lines) {
+ chomp $line;
+ while ($line =~ /@([^@]+)\@/) {
+ if ($1 ~~ @substvar) {
+ if (defined($configvar{$1})) {
+ $val = kw($configvar{$1});
+ $line = "$`$val$'";
+ } else {
+ $line = "$`$'";
+ }
+ } else {
+ $line = "$`__$1__$'";
+ }
+ }
+ }
+
+ open F, ">" . $icshfile || die $!;
+ if ($verbose) {
+ print "Setting up $icshfile\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";
+ }
+ if (!$legacy_only) {
+ 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 @dirlist = ("isc", "dns", "isccc", "isccfg", "lwres", "bind9", "irs");
+ my %LibMacros = (
+ "bind9" => "LIBBIND9_EXPORTS",
+ "dns" => "LIBDNS_EXPORTS",
+ "irs" => "LIBIRS_EXPORTS",
+ "isc" => "LIBISC_EXPORTS",
+ "isccc" => "LIBISCCC_EXPORTS",
+ "isccfg" => "LIBISCCFG_EXPORTS",
+ "lwres" => "LIBLWRES_EXPORTS");
+ my @VersionNames = ("LIBINTERFACE", "LIBREVISION", "LIBAGE");
+ my $Version;
+ my %ApiVersions;
+ 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";
+
+ my $dir;
+ my $apifile;
+ foreach $dir (@dirlist) {
+ $apifile = "..\\lib\\$dir\\api";
+ open A, $apifile || die $!;
+ while (<A>) {
+ chomp;
+ ($data) = split(/\#/);
+ if ($data) {
+ ($name, $value) = split(/=/, $data);
+ $name =~ s/\s+//;
+ $value =~ s/\s+//;
+ $ApiVersions{$name} = $value;
+ }
+ }
+ close A;
+
+ print O "\n#ifdef $LibMacros{$dir}\n";
+ foreach $name (@VersionNames) {
+ print O "#define $name\t$ApiVersions{$name}\n";
+ }
+ print O "#endif\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;
+ }
+
+ # 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 "liblwres.dll-BCFT\n";
+ print LOUT "libirs.dll-BCFT\n";
+ if ($use_openssl eq "yes") {
+ my $v;
+ my $d;
+ my $name;
+ ($v, $d, $name) =File::Spec->splitpath($configdll{"OPENSSL_DLL"});
+ 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_geoip eq "yes") {
+ print LOUT "libgeoip.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 "genrandom.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";
+ print LOUT "isc-hmax-fixup.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
+
+# WIN32 not a BSD
+$configtest{"CHECK_DSA"} = 0;
+
+# 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();
+
+ setupicsh();
+
+ my $file;
+ foreach $file (@filelist) {
+ setupfile($file);
+ }
+
+ if (!$legacy_only) {
+ 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-isc-spnego supported (part of GSSAPI)
+# --enable-fixed-rrset supported
+# --enable-querytrace supported
+# --disable-rpz-nsip supported
+# --disable-rpz-nsdname supported
+# --enable-filter-aaaa supported
+# --enable-full-report supported by verbose
+# --enable-dnstap not supported (requires libfstrm support on WIN32)
+# --enable-seccomp not supported (Linux specific)
+# --enable-afl not supported (not yet available on Visual Studio C++)
+# --with-python supported
+# --with-openssl supported
+# --with-pkcs11 supported
+# --with-ecdsa supported
+# --with-eddsa supported
+# --with-gost supported
+# --with-aes supported
+# --with-cc-alg supported
+# --with-geoip 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-libjson 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)