Configure revision 0c27b3fe77ac1d5094ba3521e8142d9e7973133f
21d2ebd23d1ff59d0c081baeab1a97aae1baf4a4Mark Andrews# Copyright (C) 2013-2016 Internet Systems Consortium, Inc. ("ISC")
9baab4b1a8a5a54c04e47742c7b48311d5575a87Mark Andrews# This Source Code Form is subject to the terms of the Mozilla Public
c5826852e6c789f59b301f8197e65a1dd4e09a44Mark Andrews# License, v. 2.0. If a copy of the MPL was not distributed with this
c5826852e6c789f59b301f8197e65a1dd4e09a44Mark Andrews# file, You can obtain one at http://mozilla.org/MPL/2.0/.
c426fddf168a3cdfc1c4c162365d440c89148ae4Mark Andrews# This script builds nmake and visual studio build files
1a6204b6f26677cad76ea5644dc0624aac49b451Mark Andrewsrequire 5.000;
d8c2b1787119de43dd6b7e3927ff193ed5df682fMark Andrews# files to configure
351696ef9e44e31e200afc0b019f24af6b597471Rob Austeinmy $platformfile = "..\\lib\\isc\\win32\\include\\isc\\platform.h";
e9f33cdca0565d049941117d30e4c37ab3c5e990Mark Andrewsmy @filelist = ("..\\bin\\check\\win32\\checktool.dsp",
23fdb6a5a3d3d0e427682b68eea9553d2d326ad4Mark Andrews "..\\bin\\tests\\resolver\\win32\\t_resolver.dsp",
b8694095f0109e23d9aaa3e84f840829b014c417Mark Andrews "..\\bin\\tests\\resolver\\win32\\t_resolver.mak",
23fdb6a5a3d3d0e427682b68eea9553d2d326ad4Mark Andrews "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.dsp",
b8694095f0109e23d9aaa3e84f840829b014c417Mark Andrews "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.mak",
50e45d74340656422b21a5513f2d7138dfe24b7aMark Andrews "..\\bin\\win32\\BINDInstall\\BINDInstall.dsp",
50e45d74340656422b21a5513f2d7138dfe24b7aMark Andrews "..\\bin\\win32\\BINDInstall\\BINDInstall.mak",
e0199985cfe68e8556cf0060ad8f7effbcdc5628Mark Andrewsmy @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj",
e0199985cfe68e8556cf0060ad8f7effbcdc5628Mark Andrews "..\\bin\\check\\win32\\checkconf.vcxproj.filters",
38e8022ace865803bdd609c9763cd7d7ba2818dcMark Andrews "..\\bin\\check\\win32\\checktool.vcxproj.filters",
8407fbc61d73caa766c0689558525d0a76296c86Mark Andrews "..\\bin\\check\\win32\\checkzone.vcxproj.filters",
8407fbc61d73caa766c0689558525d0a76296c86Mark Andrews "..\\bin\\confgen\\win32\\confgentool.vcxproj",
08b40678f36df355db8e7b84fa4e74f726dd2b3eMark Andrews "..\\bin\\confgen\\win32\\confgentool.vcxproj.filters",
08b40678f36df355db8e7b84fa4e74f726dd2b3eMark Andrews "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj",
08b40678f36df355db8e7b84fa4e74f726dd2b3eMark Andrews "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj.filters",
b9625d9be5d89015b75cc7c25088a8d1a3bb7655Mark Andrews "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj",
cc32d38366fa680fc29f9fb17bd3ebe515835445Mark Andrews "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj.filters",
267a22597fc1c5ffd81532ec1afad36b729f6cb4Tatuya JINMEI 神明達哉 "..\\bin\\delv\\win32\\delv.vcxproj.filters",
3dc3d557be91d59317b34fc5a9ae79b1925d5878Mark Andrews "..\\bin\\dig\\win32\\dighost.vcxproj.filters",
349f684cf175422918d10e91e7bee747c18ae840Mark Andrews "..\\bin\\dig\\win32\\nslookup.vcxproj.filters",
86548554f6180bbe051c8cd8f03c93fc9b6a7825Mark Andrews "..\\bin\\dnssec\\win32\\dnssectool.vcxproj.filters",
5ed76fa7ea83d3ce7a33d365aa3b84410c3b8773Mark Andrews "..\\bin\\dnssec\\win32\\dsfromkey.vcxproj.filters",
349f684cf175422918d10e91e7bee747c18ae840Mark Andrews "..\\bin\\dnssec\\win32\\importkey.vcxproj.filters",
349f684cf175422918d10e91e7bee747c18ae840Mark Andrews "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj",
ad3b537a241f40bbb3fdc4de252881c42645021bMark Andrews "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj.filters",
b21b49a1d43dbc44d2b15674ce03a13562165566Mark Andrews "..\\bin\\dnssec\\win32\\keygen.vcxproj.filters",
ea38808b7dc1b2e760f18f2cc3ae07deaf15ba1aMark Andrews "..\\bin\\dnssec\\win32\\revoke.vcxproj.filters",
349f684cf175422918d10e91e7bee747c18ae840Mark Andrews "..\\bin\\dnssec\\win32\\settime.vcxproj.filters",
349f684cf175422918d10e91e7bee747c18ae840Mark Andrews "..\\bin\\dnssec\\win32\\signzone.vcxproj.filters",
1cf54d1966b3de8f6593e9e80eae9a80a1c011adMark Andrews "..\\bin\\dnssec\\win32\\verify.vcxproj.filters",
c3c72c1033b9d085b1a1fe74a9e3efb6db724ce2Mark Andrews "..\\bin\\named\\win32\\named.vcxproj.filters",
b4fe7caac90b28629d207b40a77862e2535f925cMark Andrews "..\\bin\\nsupdate\\win32\\nsupdate.vcxproj.filters",
c2ec022f5784a2ff844f7d062c2022197dc4ad09Mark Andrews "..\\bin\\pkcs11\\win32\\pk11destroy.vcxproj.filters",
c2ec022f5784a2ff844f7d062c2022197dc4ad09Mark Andrews "..\\bin\\pkcs11\\win32\\pk11keygen.vcxproj.filters",
1ae75c1024eb0475c2be352b8707772e16332ad0Mark Andrews "..\\bin\\pkcs11\\win32\\pk11list.vcxproj.filters",
1ae75c1024eb0475c2be352b8707772e16332ad0Mark Andrews "..\\bin\\pkcs11\\win32\\pk11tokens.vcxproj.filters",
5eb0659963ec2aa5158425b39620ec1b30c83c7bMark Andrews "..\\bin\\rndc\\win32\\rndcutil.vcxproj.filters",
5eb0659963ec2aa5158425b39620ec1b30c83c7bMark Andrews "..\\bin\\tools\\win32\\arpaname.vcxproj.filters",
6fac7ff1f9ec9c3873d3b55c5079fa79aba1f146Mark Andrews "..\\bin\\tools\\win32\\genrandom.vcxproj.filters",
e1f638a7141a4c1364e4ca45025241c9e2fecf74Mark Andrews "..\\bin\\tools\\win32\\ischmacfixup.vcxproj.filters",
4995dba770c1f5f421cf22a2e9e138586a153765Mark Andrews "..\\bin\\tools\\win32\\journalprint.vcxproj.filters",
b39213ce599dc433c6f99144c97ca3d562f40344Mark Andrews "..\\bin\\tools\\win32\\nsec3hash.vcxproj.filters",
8862388bcb44f634cbfc3e69f11ff4cb76590a4bMark Andrews "..\\bin\\tools\\win32\\rrchecker.vcxproj.filters",
8862388bcb44f634cbfc3e69f11ff4cb76590a4bMark Andrews "..\\bin\\tests\\atomic\\win32\\t_atomic.vcxproj",
6ec0f98cf6e88aeba1615763fdec253bf391f22eMark Andrews "..\\bin\\tests\\atomic\\win32\\t_atomic.vcxproj.filters",
80cc19dc262cead5a8af41838ebfae5a6e587605Mark Andrews "..\\bin\\tests\\db\\win32\\t_db.vcxproj.filters",
d4e1933abc4bfa3d42dcc2f093c81816a317dde6Mark Andrews "..\\bin\\tests\\dst\\win32\\t_dst.vcxproj.filters",
8d414d155953f89a4eff40f16878438a8c9228f3Mark Andrews "..\\bin\\tests\\master\\win32\\t_master.vcxproj",
8d414d155953f89a4eff40f16878438a8c9228f3Mark Andrews "..\\bin\\tests\\master\\win32\\t_master.vcxproj.filters",
8d414d155953f89a4eff40f16878438a8c9228f3Mark Andrews "..\\bin\\tests\\mem\\win32\\t_mem.vcxproj.filters",
7c82b7ae3f3006e20d00529a15372d6cba133c20Mark Andrews "..\\bin\\tests\\hashes\\win32\\t_hashes.vcxproj",
8d414d155953f89a4eff40f16878438a8c9228f3Mark Andrews "..\\bin\\tests\\hashes\\win32\\t_hashes.vcxproj.filters",
8d414d155953f89a4eff40f16878438a8c9228f3Mark Andrews "..\\bin\\tests\\names\\win32\\t_names.vcxproj",
7c82b7ae3f3006e20d00529a15372d6cba133c20Mark Andrews "..\\bin\\tests\\names\\win32\\t_names.vcxproj.filters",
39e5cab80a2abc95ca034ac79ea3f973fc66f5b3Mark Andrews "..\\bin\\tests\\rbt\\win32\\t_rbt.vcxproj.filters",
0b9af9eb37f624033652f6cc463262474ee13344Mark Andrews "..\\bin\\tests\\resolver\\win32\\t_resolver.vcxproj",
85315eb5361d92ba034cecc26c3526e121392386Mark Andrews "..\\bin\\tests\\resolver\\win32\\t_resolver.vcxproj.filters",
3b1fce680f1dbe9467cd3b0ab3138ea52d5a976fMark Andrews "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.vcxproj",
3b1fce680f1dbe9467cd3b0ab3138ea52d5a976fMark Andrews "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.vcxproj.filters",
ead4d2d676b12a856769d3750861c6efbb95f709Mark Andrews "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj",
0822cc50657c972c6a5ee29cba9506847c7ea7c2Mark Andrews "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj.filters",
0822cc50657c972c6a5ee29cba9506847c7ea7c2Mark Andrews "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj",
bdb609f5874056f6f1cd212ebf8700132e683fe5Mark Andrews "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj.filters",
c5cde9d5a70c921da901a23845e740ccc7a8c4e4Mark Andrews "..\\bin\\tests\\win32\\backtrace_test.vcxproj",
c5cde9d5a70c921da901a23845e740ccc7a8c4e4Mark Andrews "..\\bin\\tests\\win32\\backtrace_test.vcxproj.filters",
321df4df1972da49223fc8ee1180f94b88295568Mark Andrews "..\\bin\\tests\\win32\\inter_test.vcxproj.filters",
7f5a3cea4e93ad683b13ebef8a6589afd97fb762Mark Andrews "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters",
7f5a3cea4e93ad683b13ebef8a6589afd97fb762Mark Andrews "..\\bin\\tests\\win32\\shutdown_test.vcxproj",
9c3df90dd3767bcc14c4028fb3d81b26d056e821Mark Andrews "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters",
50105afc551903541608b11851d73278b23579a3Mark Andrews "..\\bin\\tests\\win32\\sock_test.vcxproj.filters",
1285fa26e632e3b386435b730b47b5ff1a03e553Mark Andrews "..\\bin\\tests\\win32\\task_test.vcxproj.filters",
5a680f4170ba77be1e31cf1fc40ab43856919078Mark Andrews "..\\bin\\tests\\win32\\timer_test.vcxproj.filters",
ad35e0aec9dae18ee31e760beab1602f7eb4ef05Mark Andrews "..\\bin\\tests\\win32\\inter_test.vcxproj.filters",
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters",
8c5d451ea2898586c00932efeb5123b41afc9650Mark Andrews "..\\bin\\tests\\win32\\shutdown_test.vcxproj",
9c8fb5f756d99a4ecba95df9a00757384f3b71b7Mark Andrews "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters",
fa7ee558e0536a94bfdb154a7c7ba298535459c4Mark Andrews "..\\bin\\tests\\win32\\sock_test.vcxproj.filters",
1d7cbe71b99ea0e883a4cf8af8a91bba04a3597eMark Andrews "..\\bin\\tests\\win32\\task_test.vcxproj.filters",
7436bb66c610c039ca3dec12aac5024037898910Mark Andrews "..\\bin\\tests\\win32\\timer_test.vcxproj.filters",
c569a0e4d518bf30be1b2ba9cc3592fe470e9822Mark Andrews "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj",
c569a0e4d518bf30be1b2ba9cc3592fe470e9822Mark Andrews "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj.filters",
89783da064f4f9bf2e82d2b3941ddeffe2a8c30dMark Andrews "..\\lib\\bind9\\win32\\libbind9.vcxproj.filters",
3ad4e307b64bcf8baa984e10a4e7549dbeaea31dMark Andrews "..\\lib\\isccc\\win32\\libisccc.vcxproj.filters",
3f08fb69eb3b5f6eaa3c57160dff0998e1569283Mark Andrews "..\\lib\\isccfg\\win32\\libisccfg.vcxproj.filters",
91c79af4755df2d892511512e0fc886639518a92Mark Andrews "..\\lib\\lwres\\win32\\liblwres.vcxproj.filters",
bf74532c942054bccc3df5227009ce52063a9dafMark Andrews "..\\lib\\samples\\win32\\resolve.vcxproj.filters",
2558e3f25d4972a028c99141bd26d3f3087630d5Mark Andrews "..\\lib\\samples\\win32\\async.vcxproj.filters",
821644d49b73b49f2abc5463bc53a3132f612478Mark Andrews "..\\lib\\samples\\win32\\gai.vcxproj.filters",
74cb99072c4b0ebd2ccafcfa284288fa760f7a1aMark Andrews "..\\lib\\samples\\win32\\update.vcxproj.filters",
74cb99072c4b0ebd2ccafcfa284288fa760f7a1aMark Andrews "..\\lib\\samples\\win32\\request.vcxproj.filters",
22cd704fca51434f7aba193fd94d3291cc94ba2bMark Andrews "..\\lib\\samples\\win32\\nsprobe.vcxproj.filters",
0e4f7c9d4e1a4bb66f0702e9f9975c392a15918bMark Andrews "..\\lib\\tests\\win32\\libtests.vcxproj.filters",
a8fb98aff8a186bf80fa4e48cc3e99a42939dd0aMark Andrews "..\\lib\\win32\\bindevt\\bindevt.vcxproj.filters",
8d42bb315ce6745e5631eda4eac59d3b981e58c6Mark Andrewsmy @allcond = (@substcond, "NOTYET", "NOLONGER");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# general arguments
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsmy @optionlist = ("help", "verbose", "legacy", "win32", "x64", "clean");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews"'Configure' configures BIND9 build files.\n\n",
2f025ec6fe68421d942330afaf1980b7a4976e30Mark Andrews" legacy (options) process only files for legacy build\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" win32 (command) configure for Win32 platform\n",
f58233ec6c8b5866083bbaf5083ac9ade6bebe3aMark Andrews" <none> (command) print a summary of the configuration\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-intrinsics enable instrinsic/atomic functions [default=yes]\n",
c282d16311ce06b6bcb594be716cde4ad5c40af9Mark Andrews" enable-native-pkcs11 use native PKCS#11 for all crypto [default=no]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-openssl-hash use OpenSSL for hash functions [default=yes]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-isc-spnego use SPNEGO from lib/dns [default=yes]\n",
1b5a72829324a0d2fa327a270caea8fd02ae8779Mark Andrews" enable-filter-aaaa enable filtering of AAAA records [default=no]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-fixed-rrset enable fixed rrset ordering [default=no]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-developer enable developer build settings [default=no]\n",
5e9f6125246cec57771bcdeefed03153d41c23fdMark Andrews" enable-querytrace enable very verbose query trace [default=no]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" enable-rpz-nsip enable rpz-nsip rules [default=yes]\n",
0451757ad8f7c49a0d3dcdf7fbdd4ea64fcec298Mark Andrews" enable-rpz-nsdname enable rpz-nsdname rules [default=yes]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-extra-tests build with extra test suite\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-openssl[=PATH] build with OpenSSL yes|no|path\n",
cc6271e46c775592f39a1e8b4e2cb1ff457e2f89Mark Andrews" with-pkcs11[=PATH] build with PKCS#11 support yes|no|provider-path\n",
87c7b822b7bcdd8bec7ba1c01937286308b4847cMark Andrews" with-gost[=ENC] crypto GOST yes|no|raw|ans1\n",
17a14e451df80b3d82278e5c925682ade3263dbcMark Andrews" with-cc-alg choose the algorithm for cookies aes|sha1|sha256\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-gssapi[=PATH] build with MIT KfW GSSAPI yes|no|path\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-libxml2[=PATH] build with libxml2 library yes|no|path\n",
a4b3e51a8f1c9742c0f7d9f7d70f1ad926985145Mark Andrews" with-geoip[=PATH] build with GeoIP support yes|no|path\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-python[=COMMAND] specify python interpreter python|command\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-readline[=PATH] build with readline library support yes|no|path\n",
c282d16311ce06b6bcb594be716cde4ad5c40af9Mark Andrews" with-idn[=PATH] build with IDN kit support yes|no|path\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-iconv[=PATH] path of the iconv DLL [default=same than idn]\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-zlib[=PATH] build with zlib library yes|no|path\n",
f488b1c311f2fc09ae8e45f7893185e608b17edeMark Andrews" with-vcredist[=PATH] visual C++ redistributable package yes|path\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-tuning=OPTION tune for plaform size (large|default)\n",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews" with-cross-compile 32 / 64 bit build / host plaforms\n");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# Parse arguments
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsmy $gssapi_path = "C:\\Program\ Files\\MIT\\Kerberos\\";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# no arguments -> usage
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# parse arguments
8ca42f6318be756354b70260050132545aa680d3Mark Andrews# legacy default to win32
7ec0f55f1542d8bb9475bbe93e911d7520f043caMark Andrews# configure the platform
4cb69e7c919cc43b16852016588af714bc421da3Mark Andrewsif (($want_win32 eq "yes") && ($want_x64 eq "yes")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't ask for both Win32 and x64 platforms\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_BUSYWAITNOP"} = "__asm { rep nop }";
80b782f356f0692c11b4e52e8dd46ec41704e5a2Mark Andrews $configdefp{"ISC_PLATFORM_BUSYWAITNOP"} = "_mm_pause()";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# get the version information
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($name eq 'PRODUCT' || $name eq 'DESCRIPTION') {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $version = "$version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# append seen args to CONFIGARGS define
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewssub myenable {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($key =~ /^intrinsics$/i) {
c960dffe35970da729219b72f2e41350d3b64c35Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^native-pkcs11$/i) {
31b3dc1c6b4fe99a2af2ee63314e842af4a20070Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^openssl-hash$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val =~ /^no$/i) {
838d608e6f37038f2fb43980a7a9d6b6a490db36Mark Andrews } elsif ($key =~ /^isc-spnego$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^filter-aaaa$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
0f09ef5a50ef09eaed8e6630b4004d5143d6b52cMark Andrews } elsif ($key =~ /^fixed-rrset$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
9bd478a5e6df956a79bbdb5c182d5b44763786ceMark Andrews } elsif ($key =~ /^developer$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^querytrace$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^rpz-nsip$/i) {
b0c15bd9792112fb47f6d956e580e4369e92f4e7Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^rpz-nsdname$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
767fd19da4b699aae46959d834f53af0e1166e80Mark Andrews# enable-developer expansion now
5b76a09697bfc76f5acefd65d5b37b1214d271a8Mark Andrews # no atf on WIN32
6388dcf8e661687c30a5d52f149d193ce86748a8Mark Andrews # TODO: dlz filesystem
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($key =~ /^tests$/i) {
59ab128c972622f5aeafe3229966dcba73b62243Mark Andrews if ($val =~ /^yes$/i) {
90295f915c883d1aeeda856f518584d4219a704aMark Andrews } elsif ($key =~ /^extra-tests$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^samples$/i) {
142d155dd68fd601dc38c6b6f7c35f2798ec24caMark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^openssl$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val !~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^pkcs11$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val !~ /^no$/i) {
52fc1457e44c476a81ec9dee6a664958cb64b8e2Mark Andrews $pkcs11_path =~ s/\.dll$//i;
6526fd032fc418411da3af4201214e95c113d3e2Mark Andrews } elsif ($key =~ /^ecdsa$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val =~ /^yes$/i) {
be0e075ac2c10ade3e80edef7fa14ac0fda92690Mark Andrews } elsif ($key =~ /^gost$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
2a908588fbeacebc5f13b153b73c96e12dacaadcTatuya JINMEI 神明達哉 } elsif ($val =~ /^yes$/i) {
af2be1a46813e228cb9d71230d3f41222fdb69baTatuya JINMEI 神明達哉 } elsif ($key =~ /^aes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
2945ac15af547df0268e449252902ead599e2451Mark Andrews } elsif ($val =~ /^yes$/i) {
285761cf91626976e211f69d9678c138b25f8629Tatuya JINMEI 神明達哉 } elsif ($key =~ /^cc-alg$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^gssapi$/i) {
ca70688bf60b4f50c4e3ec7d40567341c9962fafMark Andrews if ($val !~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^yes$/i) {
aec2d57d5b9f5ca97763a1b49b76f0bcb5852e1aMark Andrews } elsif ($key =~ /^libxml2$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val !~ /^yes$/i) {
75ace6601e66840436f52e61353ee0d400577b55Mark Andrews } elsif ($key =~ /^geoip$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^no$/i) {
75ace6601e66840436f52e61353ee0d400577b55Mark Andrews if ($val !~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^readline$/i) {
75ace6601e66840436f52e61353ee0d400577b55Mark Andrews if ($val !~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^yes$/i) {
550085fed1d0af54ba5b2f588898afec158195deMark Andrews } elsif ($key =~ /^idn$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^no$/i) {
f411c2e81cbfcf89ee073a0e31ac902a42fc8f22Mark Andrews if ($val !~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^iconv$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
3bdf879a5301bce17e0a955585eb3decc541ba79Mark Andrews $unknown_value = "without-iconv doesn't make sense)";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val !~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $iconv_path = $val;
a8fb98aff8a186bf80fa4e48cc3e99a42939dd0aMark Andrews } elsif ($key =~ /^zlib$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^no$/i) {
1b5b46942d149f891bb91e90c6f52944b77c8a68Mark Andrews $use_zlib = "yes";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^yes$/i) {
6b25d2f7f7a1125508f8d225a8fef94e1db83555Mark Andrews $zlib_path = $val;
b6309ed962c4988a314d61742c4fbc4935467d68Mark Andrews } elsif ($key =~ /^python$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
39fe146f2ab82cb8e49caa319a3345174fa2d69aMark Andrews $use_python = "no";
bd3946db298667e769804b2e978df2d6dcd85e29Mark Andrews $use_python = "yes";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val !~ /^yes$/i) {
ab5d8edc1bd391a1b306db68114fac303484b30fMark Andrews $python_command = $val;
8689f943a4859a8f68344236a1dcb81299a98347Mark Andrews } elsif ($key =~ /^vcredist$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^no$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $want_unknown = "yes";
2434ccfde7efa30b6fedf4630e5036eeb5d647d0Mark Andrews $unknown_value = "without-vcredist (vcredist is required)";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($val !~ /^yes$/i) {
d8ec783e6dc0bd16a80b30d9888306b1faae6037Mark Andrews $vcredist_path = $val;
5bd76af084edfdcd1cb4db9453ac781d32dde6f7Mark Andrews } elsif ($key =~ /^cross-compile$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^yes$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $cross_compile = "yes";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($key =~ /^tuning$/i) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val =~ /^large$/i) {
7f32428506d55083fe5ac9aa515294bdef7c6e27Mark Andrews $tuning = "large";
5c10f54fe38795cbd3d5cf22e3fbd1d22b8226e4Mark Andrews $want_unknown = "yes";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($val eq "no") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $unknown_value = "without-" . $key;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $unknown_value = "with-" . $key;
e72d4d8929fec51153e4fd0d1cf632cd59335495Mark Andrews# resolve enable-openssl-hash
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($enable_openssl_hash eq "auto") {
0ae34c3f6222ece01e0f710c7c0311f5cf9d9c0fMark Andrews if ($use_openssl ne "no") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($enable_native_pkcs11 eq "yes") {
6c6673405c7e29c1d91d07b326d0fe1d7b52e478Mark Andrews $enable_openssl_hash="no";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $enable_openssl_hash="yes";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $enable_openssl_hash="no";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($want_help ne "no") {
7c5d5a7932b8ac27281eeff64506dff8220bb3eaMark Andrews foreach (@help) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# clean up and exit if requested
1a9c000f54e6204fb49d785fd0bbb7a8e590dc99Mark Andrewsif ($want_clean eq "yes") {
3cea35d9159b36eac43d32082a0b98f2cd82fc2eDanny Mayer foreach $file (@filelist) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews unlink($file);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews foreach $file (@projectlist) {
87f4715d6c0a22f3449eb3291c91aa45ba86c955Mark Andrews unlink($file);
1431917c7cddbac7442cb910e83cb058fea59fb5Mark Andrewsif ($want_unknown ne "no") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "gost private key encoding: $gost_encoding\n";
8f9664521724eefc39728c092d0bc6be527e1496Mark Andrews# Check environment
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# infer vcredist when not given
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "trying to infer vcredist path from build environment\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @vcpaths = {};
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews push(@vcpaths, $ENV{"VCRedistPath"}) if ($ENV{"VCRedistPath"} ne "");
bdb1394788a677d0b6e8499ba1ece17a73f476c7Mark Andrews push(@vcpaths, File::Spec->catfile( cwd(), "..", ".." ));
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($ENV{"FrameworkSDKDir"} ne "" && $want_win32 eq "yes") {
c8aa2c83113229a59069cbd05c735896f51b886bMark Andrews push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"},
a1edcd1b8d430650d85ec0962cd32efde76a71fbMark Andrews } elsif ($ENV{"FrameworkSDKDir"} ne "" && $want_x64 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"},
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($ENV{"WindowsSDKDir"} ne "" && $want_win32 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"},
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($ENV{"WindowsSDKDir"} ne "" && $want_x64 eq "yes") {
acc8b7ac3d16538bf223545bbf71899b9accaebbMark Andrews push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"},
a8fb98aff8a186bf80fa4e48cc3e99a42939dd0aMark Andrews if ($ENV{"WindowsSDKDir_old"} ne "" && $want_win32 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"},
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($ENV{"WindowsSDKDir_old"} ne "" && $want_x64 eq "yes") {
e396939d492e6afa8e31a8dc11d7317c9e62f15fMark Andrews push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"},
88aa68f478c1634f5f10034fb6ea4158efa20ff4Mark Andrews push(@vcpaths, File::Spec->catfile($ENV{"VCINSTALLDIR"},
26cf4737b3e84c3a686a5eacebf22ac39e57d4caMark Andrews foreach (@vcpaths) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $vp = File::Spec->catfile($_, $rfile);
29f5bb81e2d1d72fc6e44c87404bd4598a34df94Mark Andrews print "found vcredist at " . $vcredist_path . "\n";
bd6ad47c3dbc52a54f240432878b6832bd6dd6e2Mark Andrewsprint F << 'EOF';
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($verbose) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "_MSV_VER == $msc_ver\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($msc_ver < 1600) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR "warning: old version of C++ compiler/Visual Studio\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR "only the legacy (cf legacy\\win32-build.txt) will work\n";
a04a323f9a1ebd4766fc577e11bf3c22bdaf5516Mark Andrews# gen single threaded for < VS 2005
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($msc_ver < 1400) {
dd0228908543562781a4c0d8773ae87d4c530633Mark Andrews $configvar{"COPTML"} = "/ML";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"COPTMLD"} = "/MLD";
810e8d27763c5d8557239ab321eb125163af9236Mark Andrews# /GX deprecated in VS 2005
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($msc_ver < 1400) {
15f358ed4ea081793041bbfba70849be472236d3Mark Andrews $configvar{"COPTX"} = "/GX";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"COPTX"} = "/EHsc";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# /YX for < VS 2005
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($msc_ver < 1400) {
c311ed52d45334e182a093efad827fe4cbe7e686Mark Andrews $configvar{"COPTY"} = "/YX";
79a6a33184abff1999ba13b10922ccb34a2758a5Mark Andrews# backtrace for >= VS 2012
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsif ($msc_ver >= 1700) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_USEBACKTRACE"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# no version of MSVS supports strcasestr() yet
2b1c71b134eb92f2e297a56f778838e42f41c880Mark Andrews$configdefp{"ISC_PLATFORM_NEEDSTRCASESTR"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# warn when cross compiling
d6fbfd28ea82e425740de903ddc67f7d9e9f82e7Mark Andrewsif ($cross_compile eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($want_x64 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"BUILD_PLATFORM"} = "Win32";
7791dd06ea69d0fb2494788ad4c24d568f40bcdfMark Andrews $configvar{"BUILD_MACHINE"} = "/machine:X86";
091b098b49a4f84f459abd46451955a18abd6d40Mark Andrews if ($want_win32 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"BUILD_PLATFORM"} = "x64";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"BUILD_MACHINE"} = "/machine:X64";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews} elsif ($want_win32 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews open F, ">cross.c" || die $!;
7f20fd8ebb0cabc8f935381d958f8371990c9212Mark Andrews#ifdef _WIN64
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews fprintf(stderr, "compiling for x64 when win32 was asked?!\n");
b597abd9cc44c7b9ecd0ff67df59a21ff45e88d5Mark Andrews my $compret = `cl /nologo /MD cross.c`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (grep { -f and -x } ".\\cross.exe") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $cross = `.\\cross.exe`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($cross) {
81e302788a444b81231a7cda721548a020ae5660Brian Wellington print STDERR $cross;
c00a1eb423623442aff428336bb55590f79013bbMark Andrews print STDERR "can't check cross compile: $compret\n";
d972fa317829804a692e46a34b6f27a33f861d9dMark Andrews print F << 'EOF';
03fae7ef2173cdf32918853b047d95d9046574ccMark Andrews#ifndef _WIN64
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews fprintf(stderr, "compiling in 32 bits when x64 was asked?!\n");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR $cross;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR "can't check cross compile: $compret\n";
608c703d1231e0b1f291637ca5361b773afcdbf1Mark Andrews# Process arguments
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-intrinsics
feb8ae093115b36ac061e23d0227ea06f51950a3Mark Andrewsif ($enable_intrinsics eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configcond{"ATOMIC"} = 1;
27151990b2b48f027f7f01972fe8e0dfa1df52d3Mark Andrews $configvar{"INTRINSIC"} = "true";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"COPTI"} = "/Oi";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_HAVEXADD"} = 1;
95b604c5e972a5e9eb713bf45cf0b2d9b98da27eMark Andrews if ($want_x64 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_HAVEXADDQ"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_HAVEATOMICSTOREQ"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_HAVEATOMICSTORE"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefp{"ISC_PLATFORM_HAVECMPXCHG"} = 1;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"INTRINSIC"} = "false";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-native-pkcs11
b9c80c8bddbb88384d7baef297a873b5f8715e49Mark Andrewsif ($enable_native_pkcs11 eq "yes") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($use_openssl eq "auto") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $use_openssl = "no";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($use_openssl ne "no") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't have both OpenSSL and native PKCS#11\n";
f38c274c217d0a5b791786877422306a0e477e10Mark Andrews print "native PKCS#11 support: force with-pkcs11\n";
e53a5a116fc531f730df0adb091278ff8a941dffMark Andrews print "native PKCS#11 support: no PKCS#11 provider defined?\n";
c26c65b7a0d036e78bfc73f3e7e0817adb0365c0Mark Andrews print "enabled ECDSA support in native PKCS#11\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "enabled GOST support in native PKCS#11\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "enabled AES support in native PKCS#11\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-filter-aaaa
caa8797a00ccb1a02f1690dda5b4aeda9a1db5a7Mark Andrews# enable-fixed-rrset
f3222d48cc3d81706d198faa00dea9720eb0768dMark Andrews# enable-rpz-nsip
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-querytrace
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-rpz-nsdname
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-extra-tests
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-samples
5da1e589c2288dbe87002f771005a78d80a2e258Mark Andrews# with-openssl
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for an OpenSSL built directory at sibling root\n";
8569ab045a4cf6ecd1b5a3354ddb1c93ef34ea57Brian Wellington opendir DIR, $openssl_path || die "No Directory: $!\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @dirlist = grep (/^openssl-[0-9]+\.[0-9]+\.[0-9]+[a-z]{0,1}$/i,
2ca556300b09a94f0937b303386d29b95ef057ddBrian Wellington die "can't find an OpenSSL at sibling root\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews # Now see if we have a directory or just a file.
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews foreach $file (sort {uc($b) cmp uc($a)} @dirlist) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $openssl_path = File::Spec->catdir($openssl_path, $file);
e9472e9f18f1c4f1279be2b3147be13a2bb731d0Mark Andrews # If we have one use it otherwise report the error
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find an OpenSSL built directory at sibling root\n";
d073663cb45bef2fff5f9a43b9b6006edfc52483Mark Andrews# falls into (so no else)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $openssl_path = File::Spec->rel2abs($openssl_path);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for OpenSSL built directory at \"$openssl_path\"\n";
90e303b114e56db5809fdd19805243457fa43cd9Olafur Gudmundsson die "can't find OpenSSL opensslv.h include\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($openssl_path, "out32dll", "libeay32.lib")) {
adbb11147cd5d97d140485fa37e85e66e15cf594Mark Andrews die "can't find OpenSSL libeay32.lib library\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($openssl_path, "out32dll", "libeay32.dll")) {
77467267d97c781f3f3d050e229a874831e59c3dMark Andrews my $openssl_inc = File::Spec->catdir($openssl_path, "inc32");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $openssl_libdir = File::Spec->catdir($openssl_path, "out32dll");
13ba983cc86bc7d80d5f66ba09002f7d510a6631Mark Andrews my $openssl_lib = File::Spec->catfile($openssl_libdir, "libeay32.lib");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $openssl_dll = File::Spec->catfile($openssl_libdir, "libeay32.dll");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (-f File::Spec->catfile($openssl_inc, "openssl", "dsa.h")) {
9cec4ca6cac428a46c6d64197c64831dcc02f506Andreas Gustafsson print "OpenSSL DSA support is disabled\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# check OpenSSL
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking whether linking with OpenSSL works\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "Can't copy OpenSSL DLL to working directory: $ret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testossl.c "$library"`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# check OpenSSL version
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews printf("\n\nFound OPENSSL_VERSION_NUMBER %#010x\n",
06a949d2ce8d4b4cbfbf4e7a0335316520aafa46Andreas Gustafsson printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testosslv.c "$library"`;
8771fbe4a2cee7bebd785a486824833d741c7315Brian Wellington if (grep { -f and -x } ".\\testosslv.exe") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't compile OpenSSL version test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# check EVP_sha256 / EVP_sha384 / EVP_sha512
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD testsha256.c "$library"`;
eb2c518a3871932e86268e7c6ddae2b2a00d72fdMark Andrews print "EVP_sha256 test failed: disabling EVP_sha256\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "can't compile EVP_sha256 test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD testsha384.c "$library"`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "EVP_sha384 test failed: disabling EVP_sha384\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "can't compile EVP_sha384 test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD testsha512.c "$library"`;
ea01b618d981e58f85071a40550bc7f7565d4509Andreas Gustafsson print "EVP_sha512 test failed: disabling EVP_sha512\n";
78bf1ca89505820ed7b03be4bf0c0b53b557f3cdAndreas Gustafsson print "can't compile EVP_sha512 test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
72499be79fbb68140bd31e0e4ded18a70a5b523bMark Andrews ec384 = EC_KEY_new_by_curve_name(NID_secp384r1);
6fb633bc3fddba07fc9460ffd245b7ee2d459285Mark Andrews $compret = `cl /nologo /MD /I "$include" testecdsa.c "$library"`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testgost.c "$library"`;
b352902413608d0eb310c4bb45412fa45734afbcAndreas Gustafsson print "GOST test failed: disabling GOST\n";
3d38596530c389610494e6a6ba70d9f5dc9717c5Andreas Gustafsson die "Unrecognized GOST private key encoding: $gost_encoding\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for OpenSSL EVP AES support\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (aes128 == NULL || aes192 == NULL || aes256 == NULL)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testevpaes.c "$library"`;
9234d92d4e274791eff42cc4ea5766ed7a281b17Mark Andrews print "EVP AES test failed: disabling EVP AES\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "can't compile EVP AES test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for OpenSSL native AES support\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewsconst unsigned char bufin[16];
fa2fb620c7c0a907b220c257007d8fb6d38bb3a4Andreas Gustafssonunsigned char bufout[16];
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testaes.c "$library"`;
e69b9ffb0f8b4d1117a682908c9143ebe3efcd6bAndreas Gustafsson if (grep { -f and -x } ".\\testaes.exe") {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "native AES test failed: disabling AES\n";
ada9b8ab20b81716c7ff1f4f3365929b2f7c8ff8Mark Andrews print "can't compile native AES test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-cc-alg
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "Unrecognized cookie algorithm: $cookie_algorithm\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# enable-openssl-hash
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD /I "$include" testhmac.c "$library"`;
769ef0b7bdc9520dd62d2f440ea36bc020e88934Andreas Gustafsson if (grep { -f and -x } ".\\testhmac.exe") {
40dd9cb8cc240c33d820fe79f176ed51e4c06a1aMark Andrews# with-pkcs11
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefd{"PK11_LIB_LOCATION"} = "PK11_LIB_LOCATION=\"$pkcs11_path\"";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-gssapi
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $gssapi_path = File::Spec->rel2abs($gssapi_path);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for gssapi directory at \"$gssapi_path\"\n";
6859033d425170380bcfac4809257bc6e9b60383Andreas Gustafsson if (!-f File::Spec->catfile($gssapi_path, "include",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "include",
ff4322d44f8404683b6fb6c86a38a2bc14f6c083Andreas Gustafsson die "can't find gssapi_krb5.h include\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "include",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configinc{"GSSAPI_INC"} = File::Spec->catdir($gssapi_path, "include");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "lib", "i386",
d9e690eb71bde3c748208733ba40a34e9d0ba29dAndreas Gustafsson die "can't find gssapi${bits}.lib library\n";
1299e93989afbe1fee0739811b05fd1641ea14aeAndreas Gustafsson $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "i386",
640923da589bc5b8492ac407ef89ea1ee9a1c358Andreas Gustafsson if (!-f File::Spec->catfile($gssapi_path, "lib", "i386",
0bd1b2fbfed4aa489e9d5fcbc7f48acb96ba7248Mark Andrews $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "i386",
1de63e34f163b7a4708a6ad1779f93ae7636b92eAndreas Gustafsson if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64",
01446841be2b73f9a2ead74056df2d5342414041Andreas Gustafsson die "can't find gssapi${bits}.lib library\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "amd64",
28cf7340b9c82fc62ca1a1782cb1bd7b0de11aebAndreas Gustafsson if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "amd64",
d1a6976967d6cfd93f5a8d80878215691ac8fe74Mark Andrews die "can't happen: no choice between Win32 and x64\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "bin", "gssapi${bits}.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "bin", "krb5_${bits}.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "bin", "comerr${bits}.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "bin", "k5sprt${bits}.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($gssapi_path, "bin", "wshelp${bits}.dll")) {
98e231525fda817d393ef0c529b50bfc08cebe47Mark Andrews my $gssapi_dll = File::Spec->catfile($gssapi_path, "bin",
d4196128b31d511c8513edacc70dea7e8d0c053aMark Andrews my $krb5_dll = File::Spec->catfile($gssapi_path, "bin",
56d69016f4fae2eda4d39c92fe13595251aaadd3Mark Andrews my $comerr_dll = File::Spec->catfile($gssapi_path, "bin",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $k5sprt_dll = File::Spec->catfile($gssapi_path, "bin",
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $wshelp_dll = File::Spec->catfile($gssapi_path, "bin",
3426f7118c92cab8714a7fddc9e721ff09554447Andreas Gustafsson# enable-isc-spnego
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configdefd{"USE_ISC_SPNEGO"} = "USE_ISC_SPNEGO";
cab0ee644db604d56b45ec39429d505d635da347Andreas Gustafsson $geoip_path = File::Spec->rel2abs($geoip_path);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for geoip directory at \"$geoip_path\"\n";
7780a3e5a4659bb8fc44f8915d20a8d3ffa33e00Andreas Gustafsson if (!-f File::Spec->catfile($geoip_path, "GeoIP.h")) {
6dbc6fae496db1f584c055e63bcd7afd332fe8f6Andreas Gustafsson if (!-f File::Spec->catfile($geoip_path, "GeoIP.lib")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($geoip_path, "GeoIP.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $geoip_lib = File::Spec->catfile($geoip_path, "GeoIP.lib");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $geoip_dll = File::Spec->catfile($geoip_path, "GeoIP.dll");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "Can't copy GeoIP DLL to working directory: $ret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo /MD testgeoip.c "$geoip_lib"`;
06a960c681566a163af5b9a655cf36023075ddcbMark Andrews print "checking for GeoIP Country IPv6 support\n";
afeded2289de8d193b072da2b44a2d580cc235c1Danny Mayer return GeoIP_country_name_by_ipnum_v6(NULL, in6) != NULL;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo $geoip_inc /MD testgeoip1.c $geoip_libs`;
73ac1894ea64bc50aff7406872d0e9c5df6d9cf6Mark Andrews die "can't compile GeoIP Country IPv6 test: $compret\n";
e22dca2a9ad30d493a869586abed86f7268204f9Mark Andrews print "checking for GeoIP City IPv6 support\n";
a1898260ad19d02e88ab76c1855d33c67add9defMark Andrews return GeoIP_record_by_ipnum_v6(NULL, in6) != NULL;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $compret = `cl /nologo $geoip_inc /MD testgeoip2.c $geoip_libs`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't compile GeoIP City IPv6 test: $compret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-readline
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $readline_path = File::Spec->rel2abs($readline_path);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for readline directory at \"$readline_path\"\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($readline_path, "readline", "readline.h")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($readline_path, "readline", "readline.lib")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $readline_lib = File::Spec->catfile($readline_path,
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (-f File::Spec->catfile($readline_path, "readline", "readlineD.lib")) {
ab3eaa20e9a7e56208408563c79b4f8ac01d5e84Andreas Gustafsson my $readline_libd = File::Spec->catfile($readline_path,
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configlib{"READLINE_LIBD"} = "$readline_libd";
a5b9c2b208b51b039c8f4006cddf3d37dd781561Brian Wellington# with-idn (including with-iconv)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for IDN kit directory at \"$idn_path\"\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($idn_path, "idn", "api.h")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.lib")) {
a5b9c2b208b51b039c8f4006cddf3d37dd781561Brian Wellington if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $idn_lib = File::Spec->catfile($idn_path, "idn", "idnkit.lib");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $idn_dll = File::Spec->catfile($idn_path, "idn", "idnkit.dll");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $iconv_dll = File::Spec->catfile($idn_path, "idn", "iconv.dll");
e980502db40155234b4e8d320b748b34dbaba3a2Brian Wellington my $iconv_dll =File::Spec->catfile($iconv_path, "iconv.dll");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-libxml2
aa0dc8d920a1f79626c3564408db9c5c9a5319a7Andreas Gustafsson print "checking for a libxml2 built directory at sibling root\n";
aa0dc8d920a1f79626c3564408db9c5c9a5319a7Andreas Gustafsson opendir DIR, $libxml2_path || die "No Directory: $!\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @dirlist = grep (/^libxml2-[0-9]+\.[0-9]+\.[0-9]+[a-z]*/i,
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews # Now see if we have a directory or just a file.
22815444822da17fab82d4ab115da6e055ea1754Brian Wellington foreach $file (sort {uc($b) cmp uc($a)} @dirlist) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $libxml2_path = File::Spec->catdir($libxml2_path, $file);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews # If we have one use it otherwise report the error
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find a libxml2 built directory at sibling root\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# falls into (so no else)
c54210716ee55b55e22d8dad56fd696a641fc98dBob Halley $libxml2_path = File::Spec->rel2abs($libxml2_path);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for libxml2 built directory at \"$libxml2_path\"\n";
0a2d5c990559ce2b9f95df752db6e93024d9a250Brian Wellington die "can't find libxml2 xmlversion.h include\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find Libxml2 libxml2.lib library\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $libxml2_inc = File::Spec->catdir($libxml2_path, "include");
debff476ad3512687a354499c25d2793e2009acdBrian Wellington $configinc{"LIBXML2_INC"} = "$libxml2_inc";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $libxml2_libdir = File::Spec->catdir($libxml2_path, "win32\\bin.msvc");
eb6e3b04169a766d2b968bcc978191605c2ef24cAndreas Gustafsson my $libxml2_lib = File::Spec->catfile($libxml2_libdir, "libxml2.lib");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $libxml2_dll = File::Spec->catfile($libxml2_libdir, "libxml2.dll");
7d8c3693d0426b56750b14d80c47df5e42fc75e4Andreas Gustafsson $configdll{"LIBXML2_DLL"} = "$libxml2_dll";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for zlib directory at \"$zlib_path\"\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($zlib_path, "zlib.h")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($zlib_path, "zdll.lib")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (!-f File::Spec->catfile($zlib_path, "zlib1.dll")) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $zlib_lib = File::Spec->catfile($zlib_path, "zdll.lib");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $zlib_dll = File::Spec->catfile($zlib_path, "zlib1.dll");
6a7a69e9f764812872ec2db775be2ac8bb073102Andreas Gustafsson print STDERR "can't launch the python interpreter: $pythonret\n";
1d9ab721315555ac75e7d4f57585323909283688Andreas Gustafsson my $pythonret = `"$python_command" -c "quit()" 2>&1`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't launch $python_command: $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for python module 'argparse'\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my $pythonret = `"$python_command" -c "import argparse" 2>&1`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find python module 'argparse': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR "can't find python module 'argparse': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $pythonret = `"$python_command" -c "from ply import *" 2>&1`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find python module 'ply': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print STDERR "can't find python module 'ply': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for python module 'win32api'\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $pythonret = `"$python_command" -c "import win32api" 2>&1`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find python module 'win32api': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews "can't find python module 'win32api': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print "checking for python module 'win32con'\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $pythonret = `"$python_command" -c "import win32con" 2>&1`;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "can't find python module 'win32con': $pythonret\n";
6c6a6c9f5e2b3c6fd72263eac155e4feddb77316Brian Wellington "can't find python module 'win32con': $pythonret\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $configvar{"expanded_sysconfdir"} = "__prefix__\\etc";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# with-vcredist
5613bf7de9760875da9f5fbc6ffcd93e0af967ffMark Andrews$vcredist_path = File::Spec->rel2abs($vcredist_path);
5613bf7de9760875da9f5fbc6ffcd93e0af967ffMark Andrews $configvar{"VCREDIST_PATH"} = "$vcredist_path";
5613bf7de9760875da9f5fbc6ffcd93e0af967ffMark Andrews# setup config.h with %configdefh
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# setup platform.h with %configdefp
afb0a628efd8ecf40f66f6b8d0711bca62be2a9aMark Andrews# escape spaces
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# setup a file with %configcond stack and %config{var,defd,inc,lib,dll}
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews die "unknown condition \@IF $1 in $filename\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($1 ~~ @substdefd) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configdefd{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($1 ~~ @substinc) {
6060b0ac76667afae3c9132ab6e3568a7a693f5dAndreas Gustafsson if (defined($configinc{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($1 ~~ @substlib) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configlib{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $val = kw($configlib{$1});
8fbd23c0aaacdde1348b6457c5db14c433096fd2Andreas Gustafsson push @Linesout, $line;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews foreach $line (@Linesout) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# setup a project with %configcond stack and %config{var,defd,inc,lib,dll}
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrewssub setupproject {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @Linesin;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @Linesout;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews @Linesin = <F>;
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews foreach $line (@Linesin) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if ($line =~ /^\@IF (.*)$/) {
5e194abb5b548524e5c0fd2bb4627ec698b75e2bAndreas Gustafsson if (defined($cond)) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews unshift(@conds, $cond);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews unshift(@passes, $pass);
5e194abb5b548524e5c0fd2bb4627ec698b75e2bAndreas Gustafsson if ($1 ~~ @allcond) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configcond{$cond})) {
8c3989000a19f88415d094eb5984f7cf6ba2340cBrian Wellington die "unknown condition \@IF $1 in $projectname\n";
ac6afcd0caf72aaa2a537e0003de30b363b4a68bBrian Wellington } elsif ($line =~ /^\@ELSE (.*)$/) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configcond{$cond})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (scalar(@conds) > 0) {
aed6a8ed2e706404ccca0f31faf110fd6efd34e6Andreas Gustafsson } elsif ($line =~ /^\@END (.*)$/) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $cond = shift(@conds);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (scalar(@passes) > 0) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $pass = shift(@passes);
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews while ($line =~ /@([^@ ]*)@/) {
70d08aea0a693c6ca62c2f7bb33bfddf9e427601Brian Wellington if ($1 ~~ @substvar) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configvar{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($1 ~~ @substdefd) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configdefd{$1})) {
9027e1bcf1b245226e3053a75d16c5351d7e60caDavid Lawrence $val = kw($configdefd{$1});
c0968380c4fb0b8196aafb8de225531bd847bb6dBrian Wellington } elsif ($1 ~~ @substlib) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews if (defined($configlib{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews } elsif ($1 ~~ @substdll) {
b879ed05f4fb8209add6c19a509c984b6c8b3a98Andreas Gustafsson if (defined($configdll{$1})) {
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $val = kw($configdll{$1});
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @dirlist = ("isc", "dns", "isccc", "isccfg", "lwres", "bind9", "irs");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews my @VersionNames = ("LIBINTERFACE", "LIBREVISION", "LIBAGE");
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * Copyright (C) 2001 Internet Software Consortium.
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * Permission to use, copy, modify, and distribute this software for any
dc2e09d48b49d96a0572a971180718f680140cf0Andreas Gustafsson * purpose with or without fee is hereby granted, provided that the above
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * copyright notice and this permission notice appear in all copies.
dc2e09d48b49d96a0572a971180718f680140cf0Andreas Gustafsson * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
dc2e09d48b49d96a0572a971180718f680140cf0Andreas Gustafsson * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
90c099e88e9f16bfee9edee3ac1a51fc98843772Brian Wellington * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print O " Generated automatically by Configure.pl.\n";
d1cc210d2091916df6f9858fae20a1c760f3b257Andreas Gustafsson print O " * Date generated: $ThisDate\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews#ifndef VERSIONS_H
d1cc210d2091916df6f9858fae20a1c760f3b257Andreas Gustafsson#define VERSIONS_H 1
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $Version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews $Version = "$Version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews print O "#define PRODUCT \"$Versions{'PRODUCT'}\"\n\n";
3bb043a8b8b15eece3794ec31ad0ccab103a1c21Brian Wellington print O "#define DESCRIPTION \"$Versions{'DESCRIPTION'}\"\n\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews "#define MAJOR \"$Versions{'MAJORVER'}.$Versions{'MINORVER'}\"\n\n";
a012d6dbfb100390efa7d0d4be64ada0210b09ddBrian Wellington print O "#define $name\t$ApiVersions{$name}\n";
2cb74c5bc52ef415a771fafe0bf504eab609feadBrian Wellington open SOUT, ">..\\srcid.h" || die "cannot open srcid.h: $!\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * Copyright (C) 2012 Internet Software Consortium.
22457624d3e63e7cd255b4083cb435c16caea26dBob Halley * Permission to use, copy, modify, and distribute this software for any
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * purpose with or without fee is hereby granted, provided that the above
91425b5e7204b05165e2c5b244f3dad502f9627dBrian Wellington * copyright notice and this permission notice appear in all copies.
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
91425b5e7204b05165e2c5b244f3dad502f9627dBrian Wellington * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
b18a5b6730dcb062cf7f47c6b3cb909030b58f36Brian Wellington * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
7e361074bc8a2df7a0891a7040eea02ca3a5e286Andreas Gustafsson * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
9e560b59a722d06a62b5aed761e71fec72638a7cBrian Wellington print SOUT " * Generated automatically by Configure.pl.\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews#ifndef SRCID_H
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews#define SRCID_H 1
651421a5db8a9edf39c76fd8cf859409eb8c373bAndreas Gustafsson# Build install files
651421a5db8a9edf39c76fd8cf859409eb8c373bAndreas Gustafsson open FOUT, ">InstallFlags" || die "cannot open InstallFlags: $!\n";
dfa0badebe5a8260281228d94dbe28e4314a9df6Andreas Gustafsson open LOUT, ">InstallFiles" || die "cannot open InstallFiles: $!\n";
80ddc8b22bf2ede60038393be5cad9da99d3f03fAndreas Gustafsson } elsif (($msc_ver > 1200) && ($msc_ver < 1310)) {
2728a98ee4104b2fb30f273893a7f354e20002b5Mark Andrews print qq(\t\t$name defined to "$configdefh{$name}"\n);
a51f77a70bba62f227fb15fe72ecf959893e3f0fMark Andrews print qq(\t\t$name defined to "$configdefp{$name}"\n);
4817a0628785835abb57d06f2f616b4a6515ac2fAndreas Gustafssonif (($want_win32 eq "yes") || ($want_x64 eq "yes")) {
8dd5237a27e2e824d18f835dc711573aeb23a173Mark Andrews print "add win32 or x64 to commit configuration to build files\n";
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# Notes: Unix configure.in options
3b5102fc018a29e52befde5991844843c7b70786Michael Sawyer# --enable-developer partially supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-newstats (9.9/9.9sub only)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-native-pkcs11 supported
f7e900edbc368275aa7cec7ebec0986e45aeadd7Mark Andrews# --enable-openssl-version-check included without a way to disable it
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-openssl-hash supported
ec772e873bd7f24418049b5b1b5d7c44ff781356Brian Wellington# --enable-threads included without a way to disable it
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-backtrace backtrace included without a way to disable it
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-symtable incompatible with DLLs (or libtool)
abfbf760f3bc2a6744b0249a31ca5153234b49e8Brian Wellington# --enable-ipv6 included without a way to disable it
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-atomic supported (renamed to intrinsic)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-isc-spnego supported (part of GSSAPI)
75768d5fa2c6c5c441b849ca4efa649a7c2a9e88Bob Halley# --enable-fixed-rrset supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-querytrace supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --disable-rpz-nsip supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --disable-rpz-nsdname supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-filter-aaaa supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-full-report supported by verbose
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-dnstap not supported (requires libfstrm support on WIN32)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-seccomp not supported (Linux specific)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --enable-afl not supported (not yet considered on WIN32)
fa280ff02ad0c29616a0c3a22ef02cbb3f6db7efDavid Lawrence# --with-python supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-openssl supported
22dbaf9ad8065127fd93eff0f239fd9c548d18b6Andreas Gustafsson# --with-pkcs11 supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-ecdsa supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-gost supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-aes supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-cc-alg supported
184867e88b5a30bbc29f17edbc7b50a6c8a944e7David Lawrence# --with-geoip supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-gssapi supported with MIT (K)erberos (f)or (W)indows
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-libxml2 supported
fa280ff02ad0c29616a0c3a22ef02cbb3f6db7efDavid Lawrence# --with-libjson not supported on WIN32 (package not available on WIN32)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-zlib supported
046a9aca49bdc25bd57d75fd0dd34c021722f095Mark Andrews# --with-purify not supported (package available on WIN32 but for free?)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-gperftools-profiler not supported (package not available on WIN32)
f4e4111795ceb13066d09c38723afacb04e33ad4Mark Andrews# --with-libtool not supported on WIN32 (never)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-locktype not supported on WIN32 (not yet available on WIN32)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-readline supported
253ab81bf2760d3d7f68512b43710afc02d788daMark Andrews# --with-protobuf-c not supported (no reason to until libfstrm is ready)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-libfrtrm not supported (not yet available on WIN32)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-docbook-xsl not supported (?)
be171be1799e0ba8cdd35d4f67b772ff086d0d81Andreas Gustafsson# --with-idn[lib] supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-[lib]iconv supported (part of IDN)
a110543bb4d2e53caa40f83c2b45786a1efe63efAndreas Gustafsson# --with-atf not supported on WIN32 (package not available on WIN32)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-tuning supported
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# --with-dlopen included without a way to disable it
ef9f9001fca9445ef315b1e76a66fc84fef6fdc6Andreas Gustafsson# --with-dlz-* ?
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# Notes: MSVC versions
ee303f481dfefcd4e4994f8b8b17f2de32aa4d69Brian Wellington# MSVC 14.0 _MSC_VER == 1900 (VS 2015)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 12.0 _MSC_VER == 1800 (VS 2013)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 11.0 _MSC_VER == 1700 (VS 2012)
86b8c485762daa54a96d033110f6f41ea96e5213David Lawrence# MSVC 10.0 _MSC_VER == 1600 (VS 2010)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 9.0 _MSC_VER == 1500 (VS 2008)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 8.0 _MSC_VER == 1400 (VS 2005)
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 7.1 _MSC_VER == 1310 (VS .NET 2003)
125a916d1a0c01f139ced5736145703df28d07cfDavid Lawrence# MSVC 7.0 _MSC_VER == 1300 (VS .NET (2002))
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 6.0 _MSC_VER == 1200 (VS 6.0 (1998))
b39bfc630dc222fb73c21a00bcba47c4f9e38f20Mark Andrews# MSVC 5.0 _MSC_VER == 1100 (VS 97)