xref: /minix3/external/bsd/bind/dist/win32utils/Configure (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek#!/usr/bin/perl
2*00b67f09SDavid van Moolenbroek#
3*00b67f09SDavid van Moolenbroek# Copyright (C) 2013-2015  Internet Systems Consortium, Inc. ("ISC")
4*00b67f09SDavid van Moolenbroek#
5*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any
6*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above
7*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies.
8*00b67f09SDavid van Moolenbroek#
9*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
10*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11*00b67f09SDavid van Moolenbroek# AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
12*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
14*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE.
16*00b67f09SDavid van Moolenbroek
17*00b67f09SDavid van Moolenbroek# Configure
18*00b67f09SDavid van Moolenbroek#
19*00b67f09SDavid van Moolenbroek# This script builds nmake and visual studio build files
20*00b67f09SDavid van Moolenbroek#
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van Moolenbroekrequire 5.000;
23*00b67f09SDavid van Moolenbroekuse strict;
24*00b67f09SDavid van Moolenbroekuse File::Spec;
25*00b67f09SDavid van Moolenbroekuse Cwd;
26*00b67f09SDavid van Moolenbroek
27*00b67f09SDavid van Moolenbroek# files to configure
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroekmy $configfilein = "..\\config.h.win32";
30*00b67f09SDavid van Moolenbroekmy $configfileout = ">..\\config.h";
31*00b67f09SDavid van Moolenbroekmy $platformfile = "..\\lib\\isc\\win32\\include\\isc\\platform.h";
32*00b67f09SDavid van Moolenbroek
33*00b67f09SDavid van Moolenbroekmy @filelist = ("..\\bin\\check\\win32\\checktool.dsp",
34*00b67f09SDavid van Moolenbroek                "..\\bin\\check\\win32\\checkconf.dsp",
35*00b67f09SDavid van Moolenbroek                "..\\bin\\check\\win32\\checkconf.mak",
36*00b67f09SDavid van Moolenbroek                "..\\bin\\check\\win32\\checkzone.dsp",
37*00b67f09SDavid van Moolenbroek                "..\\bin\\check\\win32\\checkzone.mak",
38*00b67f09SDavid van Moolenbroek                "..\\bin\\confgen\\win32\\confgentool.dsp",
39*00b67f09SDavid van Moolenbroek                "..\\bin\\confgen\\win32\\ddnsconfgen.dsp",
40*00b67f09SDavid van Moolenbroek                "..\\bin\\confgen\\win32\\ddnsconfgen.mak",
41*00b67f09SDavid van Moolenbroek                "..\\bin\\confgen\\win32\\rndcconfgen.dsp",
42*00b67f09SDavid van Moolenbroek                "..\\bin\\confgen\\win32\\rndcconfgen.mak",
43*00b67f09SDavid van Moolenbroek                "..\\bin\\delv\\win32\\delv.dsp",
44*00b67f09SDavid van Moolenbroek                "..\\bin\\delv\\win32\\delv.mak",
45*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\dig.dsp",
46*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\dig.mak",
47*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\dighost.dsp",
48*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\host.dsp",
49*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\host.mak",
50*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\nslookup.dsp",
51*00b67f09SDavid van Moolenbroek                "..\\bin\\dig\\win32\\nslookup.mak",
52*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\dnssectool.dsp",
53*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\dsfromkey.dsp",
54*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\dsfromkey.mak",
55*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\importkey.dsp",
56*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\importkey.mak",
57*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\keyfromlabel.dsp",
58*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\keyfromlabel.mak",
59*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\keygen.dsp",
60*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\keygen.mak",
61*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\revoke.dsp",
62*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\revoke.mak",
63*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\settime.dsp",
64*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\settime.mak",
65*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\signzone.dsp",
66*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\signzone.mak",
67*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\verify.dsp",
68*00b67f09SDavid van Moolenbroek                "..\\bin\\dnssec\\win32\\verify.mak",
69*00b67f09SDavid van Moolenbroek                "..\\bin\\named\\win32\\named.dsp",
70*00b67f09SDavid van Moolenbroek                "..\\bin\\named\\win32\\named.mak",
71*00b67f09SDavid van Moolenbroek                "..\\bin\\nsupdate\\win32\\nsupdate.dsp",
72*00b67f09SDavid van Moolenbroek                "..\\bin\\nsupdate\\win32\\nsupdate.mak",
73*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11destroy.dsp",
74*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11destroy.mak",
75*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11keygen.dsp",
76*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11keygen.mak",
77*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11list.dsp",
78*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11list.mak",
79*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11tokens.dsp",
80*00b67f09SDavid van Moolenbroek                "..\\bin\\pkcs11\\win32\\pk11tokens.mak",
81*00b67f09SDavid van Moolenbroek                "..\\bin\\python\\dnssec-checkds.py",
82*00b67f09SDavid van Moolenbroek                "..\\bin\\python\\dnssec-coverage.py",
83*00b67f09SDavid van Moolenbroek                "..\\bin\\rndc\\win32\\rndc.dsp",
84*00b67f09SDavid van Moolenbroek                "..\\bin\\rndc\\win32\\rndc.mak",
85*00b67f09SDavid van Moolenbroek                "..\\bin\\rndc\\win32\\rndcutil.dsp",
86*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\arpaname.dsp",
87*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\arpaname.mak",
88*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\genrandom.dsp",
89*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\genrandom.mak",
90*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\ischmacfixup.dsp",
91*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\ischmacfixup.mak",
92*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\journalprint.dsp",
93*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\journalprint.mak",
94*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\nsec3hash.dsp",
95*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\nsec3hash.mak",
96*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\rrchecker.dsp",
97*00b67f09SDavid van Moolenbroek                "..\\bin\\tools\\win32\\rrchecker.mak",
98*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\atomic\\win32\\t_atomic.dsp",
99*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\atomic\\win32\\t_atomic.mak",
100*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\db\\win32\\t_db.dsp",
101*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\db\\win32\\t_db.mak",
102*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\dst\\win32\\t_dst.dsp",
103*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\dst\\win32\\t_dst.mak",
104*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\master\\win32\\t_master.dsp",
105*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\master\\win32\\t_master.mak",
106*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\mem\\win32\\t_mem.dsp",
107*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\mem\\win32\\t_mem.mak",
108*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\hashes\\win32\\t_hashes.dsp",
109*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\hashes\\win32\\t_hashes.mak",
110*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\names\\win32\\t_names.dsp",
111*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\names\\win32\\t_names.mak",
112*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\rbt\\win32\\t_rbt.dsp",
113*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\rbt\\win32\\t_rbt.mak",
114*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\resolver\\win32\\t_resolver.dsp",
115*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\resolver\\win32\\t_resolver.mak",
116*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.dsp",
117*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.mak",
118*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\tasks\\win32\\t_tasks.dsp",
119*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\tasks\\win32\\t_tasks.mak",
120*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\timers\\win32\\t_timers.dsp",
121*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\timers\\win32\\t_timers.mak",
122*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\backtrace_test.dsp",
123*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\backtrace_test.mak",
124*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\inter_test.dsp",
125*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\inter_test.mak",
126*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\rwlock_test.dsp",
127*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\rwlock_test.mak",
128*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\shutdown_test.dsp",
129*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\shutdown_test.mak",
130*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\sock_test.dsp",
131*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\sock_test.mak",
132*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\task_test.dsp",
133*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\task_test.mak",
134*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\timer_test.dsp",
135*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\timer_test.mak",
136*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\inter_test.dsp",
137*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\inter_test.mak",
138*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\rwlock_test.dsp",
139*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\rwlock_test.mak",
140*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\shutdown_test.dsp",
141*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\shutdown_test.mak",
142*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\sock_test.dsp",
143*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\sock_test.mak",
144*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\task_test.dsp",
145*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\task_test.mak",
146*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\timer_test.dsp",
147*00b67f09SDavid van Moolenbroek                "..\\bin\\tests\\win32\\timer_test.mak",
148*00b67f09SDavid van Moolenbroek                "..\\bin\\win32\\BINDInstall\\BINDInstall.dsp",
149*00b67f09SDavid van Moolenbroek                "..\\bin\\win32\\BINDInstall\\BINDInstall.mak",
150*00b67f09SDavid van Moolenbroek                "..\\lib\\bind9\\win32\\libbind9.dsp",
151*00b67f09SDavid van Moolenbroek                "..\\lib\\bind9\\win32\\libbind9.mak",
152*00b67f09SDavid van Moolenbroek                "..\\lib\\dns\\win32\\gen.dsp",
153*00b67f09SDavid van Moolenbroek                "..\\lib\\dns\\win32\\gen.mak",
154*00b67f09SDavid van Moolenbroek                "..\\lib\\dns\\win32\\libdns.def",
155*00b67f09SDavid van Moolenbroek                "..\\lib\\dns\\win32\\libdns.dsp",
156*00b67f09SDavid van Moolenbroek                "..\\lib\\dns\\win32\\libdns.mak",
157*00b67f09SDavid van Moolenbroek                "..\\lib\\irs\\win32\\libirs.dsp",
158*00b67f09SDavid van Moolenbroek                "..\\lib\\irs\\win32\\libirs.mak",
159*00b67f09SDavid van Moolenbroek                "..\\lib\\isc\\win32\\libisc.def",
160*00b67f09SDavid van Moolenbroek                "..\\lib\\isc\\win32\\libisc.dsp",
161*00b67f09SDavid van Moolenbroek                "..\\lib\\isc\\win32\\libisc.mak",
162*00b67f09SDavid van Moolenbroek                "..\\lib\\isccc\\win32\\libisccc.dsp",
163*00b67f09SDavid van Moolenbroek                "..\\lib\\isccc\\win32\\libisccc.mak",
164*00b67f09SDavid van Moolenbroek                "..\\lib\\isccfg\\win32\\libisccfg.dsp",
165*00b67f09SDavid van Moolenbroek                "..\\lib\\isccfg\\win32\\libisccfg.mak",
166*00b67f09SDavid van Moolenbroek                "..\\lib\\lwres\\win32\\liblwres.dsp",
167*00b67f09SDavid van Moolenbroek                "..\\lib\\lwres\\win32\\liblwres.mak",
168*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\async.dsp",
169*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\async.mak",
170*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\gai.dsp",
171*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\gai.mak",
172*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\nsprobe.dsp",
173*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\nsprobe.mak",
174*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\request.dsp",
175*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\request.mak",
176*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\resolve.dsp",
177*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\resolve.mak",
178*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\update.dsp",
179*00b67f09SDavid van Moolenbroek                "..\\lib\\samples\\win32\\update.mak",
180*00b67f09SDavid van Moolenbroek                "..\\lib\\tests\\win32\\libtests.dsp",
181*00b67f09SDavid van Moolenbroek                "..\\lib\\tests\\win32\\libtests.mak",
182*00b67f09SDavid van Moolenbroek                "..\\lib\\win32\\bindevt\\bindevt.dsp",
183*00b67f09SDavid van Moolenbroek                "..\\lib\\win32\\bindevt\\bindevt.mak",
184*00b67f09SDavid van Moolenbroek                "legacy\\BINDBuild.dsw",
185*00b67f09SDavid van Moolenbroek                "legacy\\BuildAll.bat",
186*00b67f09SDavid van Moolenbroek                "legacy\\BuildPost.bat",
187*00b67f09SDavid van Moolenbroek                "legacy\\BuildSetup.bat");
188*00b67f09SDavid van Moolenbroek
189*00b67f09SDavid van Moolenbroekmy @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj",
190*00b67f09SDavid van Moolenbroek                   "..\\bin\\check\\win32\\checkconf.vcxproj.filters",
191*00b67f09SDavid van Moolenbroek                   "..\\bin\\check\\win32\\checktool.vcxproj",
192*00b67f09SDavid van Moolenbroek                   "..\\bin\\check\\win32\\checktool.vcxproj.filters",
193*00b67f09SDavid van Moolenbroek                   "..\\bin\\check\\win32\\checkzone.vcxproj",
194*00b67f09SDavid van Moolenbroek                   "..\\bin\\check\\win32\\checkzone.vcxproj.filters",
195*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\confgentool.vcxproj",
196*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\confgentool.vcxproj.filters",
197*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj",
198*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\ddnsconfgen.vcxproj.filters",
199*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj",
200*00b67f09SDavid van Moolenbroek                   "..\\bin\\confgen\\win32\\rndcconfgen.vcxproj.filters",
201*00b67f09SDavid van Moolenbroek                   "..\\bin\\delv\\win32\\delv.vcxproj",
202*00b67f09SDavid van Moolenbroek                   "..\\bin\\delv\\win32\\delv.vcxproj.filters",
203*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\dig.vcxproj",
204*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\dig.vcxproj.filters",
205*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\dighost.vcxproj",
206*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\dighost.vcxproj.filters",
207*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\host.vcxproj",
208*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\host.vcxproj.filters",
209*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\nslookup.vcxproj",
210*00b67f09SDavid van Moolenbroek                   "..\\bin\\dig\\win32\\nslookup.vcxproj.filters",
211*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\dnssectool.vcxproj",
212*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\dnssectool.vcxproj.filters",
213*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\dsfromkey.vcxproj",
214*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\dsfromkey.vcxproj.filters",
215*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\importkey.vcxproj",
216*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\importkey.vcxproj.filters",
217*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj",
218*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\keyfromlabel.vcxproj.filters",
219*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\keygen.vcxproj",
220*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\keygen.vcxproj.filters",
221*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\revoke.vcxproj",
222*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\revoke.vcxproj.filters",
223*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\settime.vcxproj",
224*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\settime.vcxproj.filters",
225*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\signzone.vcxproj",
226*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\signzone.vcxproj.filters",
227*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\verify.vcxproj",
228*00b67f09SDavid van Moolenbroek                   "..\\bin\\dnssec\\win32\\verify.vcxproj.filters",
229*00b67f09SDavid van Moolenbroek                   "..\\bin\\named\\win32\\named.vcxproj",
230*00b67f09SDavid van Moolenbroek                   "..\\bin\\named\\win32\\named.vcxproj.filters",
231*00b67f09SDavid van Moolenbroek                   "..\\bin\\nsupdate\\win32\\nsupdate.vcxproj",
232*00b67f09SDavid van Moolenbroek                   "..\\bin\\nsupdate\\win32\\nsupdate.vcxproj.filters",
233*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11destroy.vcxproj",
234*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11destroy.vcxproj.filters",
235*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11keygen.vcxproj",
236*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11keygen.vcxproj.filters",
237*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11list.vcxproj",
238*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11list.vcxproj.filters",
239*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11tokens.vcxproj",
240*00b67f09SDavid van Moolenbroek                   "..\\bin\\pkcs11\\win32\\pk11tokens.vcxproj.filters",
241*00b67f09SDavid van Moolenbroek                   "..\\bin\\rndc\\win32\\rndc.vcxproj",
242*00b67f09SDavid van Moolenbroek                   "..\\bin\\rndc\\win32\\rndc.vcxproj.filters",
243*00b67f09SDavid van Moolenbroek                   "..\\bin\\rndc\\win32\\rndcutil.vcxproj",
244*00b67f09SDavid van Moolenbroek                   "..\\bin\\rndc\\win32\\rndcutil.vcxproj.filters",
245*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\arpaname.vcxproj",
246*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\arpaname.vcxproj.filters",
247*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\genrandom.vcxproj",
248*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\genrandom.vcxproj.filters",
249*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\ischmacfixup.vcxproj",
250*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\ischmacfixup.vcxproj.filters",
251*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\journalprint.vcxproj",
252*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\journalprint.vcxproj.filters",
253*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\nsec3hash.vcxproj",
254*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\nsec3hash.vcxproj.filters",
255*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\rrchecker.vcxproj",
256*00b67f09SDavid van Moolenbroek                   "..\\bin\\tools\\win32\\rrchecker.vcxproj.filters",
257*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\atomic\\win32\\t_atomic.vcxproj",
258*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\atomic\\win32\\t_atomic.vcxproj.filters",
259*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\db\\win32\\t_db.vcxproj",
260*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\db\\win32\\t_db.vcxproj.filters",
261*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\dst\\win32\\t_dst.vcxproj",
262*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\dst\\win32\\t_dst.vcxproj.filters",
263*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\master\\win32\\t_master.vcxproj",
264*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\master\\win32\\t_master.vcxproj.filters",
265*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\mem\\win32\\t_mem.vcxproj",
266*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\mem\\win32\\t_mem.vcxproj.filters",
267*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\hashes\\win32\\t_hashes.vcxproj",
268*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\hashes\\win32\\t_hashes.vcxproj.filters",
269*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\names\\win32\\t_names.vcxproj",
270*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\names\\win32\\t_names.vcxproj.filters",
271*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\rbt\\win32\\t_rbt.vcxproj",
272*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\rbt\\win32\\t_rbt.vcxproj.filters",
273*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\resolver\\win32\\t_resolver.vcxproj",
274*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\resolver\\win32\\t_resolver.vcxproj.filters",
275*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.vcxproj",
276*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\sockaddr\\win32\\t_sockaddr.vcxproj.filters",
277*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj",
278*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj.filters",
279*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj",
280*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj.filters",
281*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\backtrace_test.vcxproj",
282*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\backtrace_test.vcxproj.filters",
283*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\inter_test.vcxproj",
284*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\inter_test.vcxproj.filters",
285*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\rwlock_test.vcxproj",
286*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters",
287*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\shutdown_test.vcxproj",
288*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters",
289*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\sock_test.vcxproj",
290*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\sock_test.vcxproj.filters",
291*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\task_test.vcxproj",
292*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\task_test.vcxproj.filters",
293*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\timer_test.vcxproj",
294*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\timer_test.vcxproj.filters",
295*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\inter_test.vcxproj",
296*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\inter_test.vcxproj.filters",
297*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\rwlock_test.vcxproj",
298*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\rwlock_test.vcxproj.filters",
299*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\shutdown_test.vcxproj",
300*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\shutdown_test.vcxproj.filters",
301*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\sock_test.vcxproj",
302*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\sock_test.vcxproj.filters",
303*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\task_test.vcxproj",
304*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\task_test.vcxproj.filters",
305*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\timer_test.vcxproj",
306*00b67f09SDavid van Moolenbroek                   "..\\bin\\tests\\win32\\timer_test.vcxproj.filters",
307*00b67f09SDavid van Moolenbroek                   "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj",
308*00b67f09SDavid van Moolenbroek                   "..\\bin\\win32\\BINDInstall\\BINDInstall.vcxproj.filters",
309*00b67f09SDavid van Moolenbroek                   "..\\lib\\bind9\\win32\\libbind9.vcxproj",
310*00b67f09SDavid van Moolenbroek                   "..\\lib\\bind9\\win32\\libbind9.vcxproj.filters",
311*00b67f09SDavid van Moolenbroek                   "..\\lib\\dns\\win32\\gen.vcxproj",
312*00b67f09SDavid van Moolenbroek                   "..\\lib\\dns\\win32\\gen.vcxproj.filters",
313*00b67f09SDavid van Moolenbroek                   "..\\lib\\dns\\win32\\libdns.vcxproj",
314*00b67f09SDavid van Moolenbroek                   "..\\lib\\dns\\win32\\libdns.vcxproj.filters",
315*00b67f09SDavid van Moolenbroek                   "..\\lib\\irs\\win32\\libirs.vcxproj",
316*00b67f09SDavid van Moolenbroek                   "..\\lib\\irs\\win32\\libirs.vcxproj.filters",
317*00b67f09SDavid van Moolenbroek                   "..\\lib\\isc\\win32\\libisc.vcxproj",
318*00b67f09SDavid van Moolenbroek                   "..\\lib\\isc\\win32\\libisc.vcxproj.filters",
319*00b67f09SDavid van Moolenbroek                   "..\\lib\\isccc\\win32\\libisccc.vcxproj",
320*00b67f09SDavid van Moolenbroek                   "..\\lib\\isccc\\win32\\libisccc.vcxproj.filters",
321*00b67f09SDavid van Moolenbroek                   "..\\lib\\isccfg\\win32\\libisccfg.vcxproj",
322*00b67f09SDavid van Moolenbroek                   "..\\lib\\isccfg\\win32\\libisccfg.vcxproj.filters",
323*00b67f09SDavid van Moolenbroek                   "..\\lib\\lwres\\win32\\liblwres.vcxproj",
324*00b67f09SDavid van Moolenbroek                   "..\\lib\\lwres\\win32\\liblwres.vcxproj.filters",
325*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\resolve.vcxproj",
326*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\resolve.vcxproj.filters",
327*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\async.vcxproj",
328*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\async.vcxproj.filters",
329*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\gai.vcxproj",
330*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\gai.vcxproj.filters",
331*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\update.vcxproj",
332*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\update.vcxproj.filters",
333*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\request.vcxproj",
334*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\request.vcxproj.filters",
335*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\nsprobe.vcxproj",
336*00b67f09SDavid van Moolenbroek                   "..\\lib\\samples\\win32\\nsprobe.vcxproj.filters",
337*00b67f09SDavid van Moolenbroek                   "..\\lib\\tests\\win32\\libtests.vcxproj",
338*00b67f09SDavid van Moolenbroek                   "..\\lib\\tests\\win32\\libtests.vcxproj.filters",
339*00b67f09SDavid van Moolenbroek                   "..\\lib\\win32\\bindevt\\bindevt.vcxproj",
340*00b67f09SDavid van Moolenbroek                   "..\\lib\\win32\\bindevt\\bindevt.vcxproj.filters",
341*00b67f09SDavid van Moolenbroek                   "bind9.sln");
342*00b67f09SDavid van Moolenbroek
343*00b67f09SDavid van Moolenbroek# for config.h
344*00b67f09SDavid van Moolenbroek
345*00b67f09SDavid van Moolenbroekmy %configdefh;
346*00b67f09SDavid van Moolenbroek
347*00b67f09SDavid van Moolenbroekmy @substdefh = ("AES_SIT",
348*00b67f09SDavid van Moolenbroek                 "ALLOW_FILTER_AAAA",
349*00b67f09SDavid van Moolenbroek                 "CONFIGARGS",
350*00b67f09SDavid van Moolenbroek                 "DNS_RDATASET_FIXED",
351*00b67f09SDavid van Moolenbroek                 "ENABLE_RPZ_NSDNAME",
352*00b67f09SDavid van Moolenbroek                 "ENABLE_RPZ_NSIP",
353*00b67f09SDavid van Moolenbroek                 "HAVE_EVP_SHA256",
354*00b67f09SDavid van Moolenbroek                 "HAVE_EVP_SHA384",
355*00b67f09SDavid van Moolenbroek                 "HAVE_EVP_SHA512",
356*00b67f09SDavid van Moolenbroek                 "HAVE_GEOIP",
357*00b67f09SDavid van Moolenbroek                 "HAVE_GEOIP_CITY_V6",
358*00b67f09SDavid van Moolenbroek                 "HAVE_GEOIP_V6",
359*00b67f09SDavid van Moolenbroek                 "HAVE_LIBXML2",
360*00b67f09SDavid van Moolenbroek                 "HAVE_OPENSSL_AES",
361*00b67f09SDavid van Moolenbroek                 "HAVE_OPENSSL_DSA",
362*00b67f09SDavid van Moolenbroek                 "HAVE_OPENSSL_ECDSA",
363*00b67f09SDavid van Moolenbroek                 "HAVE_OPENSSL_EVP_AES",
364*00b67f09SDavid van Moolenbroek                 "HAVE_OPENSSL_GOST",
365*00b67f09SDavid van Moolenbroek                 "HAVE_PKCS11_ECDSA",
366*00b67f09SDavid van Moolenbroek                 "HAVE_PKCS11_GOST",
367*00b67f09SDavid van Moolenbroek                 "HAVE_READLINE",
368*00b67f09SDavid van Moolenbroek                 "HMAC_RETURN_INT",
369*00b67f09SDavid van Moolenbroek                 "HMAC_SHA1_SIT",
370*00b67f09SDavid van Moolenbroek                 "HMAC_SHA256_SIT",
371*00b67f09SDavid van Moolenbroek                 "ISC_LIST_CHECKINIT",
372*00b67f09SDavid van Moolenbroek                 "PREFER_GOSTASN1",
373*00b67f09SDavid van Moolenbroek                 "TUNE_LARGE",
374*00b67f09SDavid van Moolenbroek                 "WITH_IDN");
375*00b67f09SDavid van Moolenbroek
376*00b67f09SDavid van Moolenbroek# for platform.h
377*00b67f09SDavid van Moolenbroek
378*00b67f09SDavid van Moolenbroekmy %configdefp;
379*00b67f09SDavid van Moolenbroek
380*00b67f09SDavid van Moolenbroekmy @substdefp = ("ISC_PLATFORM_HAVEATOMICSTORE",
381*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_HAVECMPXCHG",
382*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_HAVEXADD",
383*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_HAVEXADDQ",
384*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_NEEDSTRCASESTR",
385*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_USEBACKTRACE",
386*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_USESIT",
387*00b67f09SDavid van Moolenbroek                 "ISC_PLATFORM_WANTAES");
388*00b67f09SDavid van Moolenbroek
389*00b67f09SDavid van Moolenbroek# includes
390*00b67f09SDavid van Moolenbroek
391*00b67f09SDavid van Moolenbroekmy %configinc;
392*00b67f09SDavid van Moolenbroek
393*00b67f09SDavid van Moolenbroekmy @substinc = ("GSSAPI_INC",
394*00b67f09SDavid van Moolenbroek                "GEOIP_INC",
395*00b67f09SDavid van Moolenbroek                "IDN_INC",
396*00b67f09SDavid van Moolenbroek                "LIBXML2_INC",
397*00b67f09SDavid van Moolenbroek                "OPENSSL_INC",
398*00b67f09SDavid van Moolenbroek                "READLINE_INC");
399*00b67f09SDavid van Moolenbroek
400*00b67f09SDavid van Moolenbroek# libraries
401*00b67f09SDavid van Moolenbroek
402*00b67f09SDavid van Moolenbroekmy %configlib;
403*00b67f09SDavid van Moolenbroek
404*00b67f09SDavid van Moolenbroekmy @substlib = ("GSSAPI_LIB",
405*00b67f09SDavid van Moolenbroek                "GEOIP_LIB",
406*00b67f09SDavid van Moolenbroek                "IDN_LIB",
407*00b67f09SDavid van Moolenbroek                "KRB5_LIB",
408*00b67f09SDavid van Moolenbroek                "LIBXML2_LIB",
409*00b67f09SDavid van Moolenbroek                "OPENSSL_LIB",
410*00b67f09SDavid van Moolenbroek                "READLINE_LIB",
411*00b67f09SDavid van Moolenbroek                "READLINE_LIBD");
412*00b67f09SDavid van Moolenbroek
413*00b67f09SDavid van Moolenbroek# DLLs
414*00b67f09SDavid van Moolenbroek
415*00b67f09SDavid van Moolenbroekmy %configdll;
416*00b67f09SDavid van Moolenbroek
417*00b67f09SDavid van Moolenbroekmy @substdll = ("COMERR_DLL",
418*00b67f09SDavid van Moolenbroek                "GSSAPI_DLL",
419*00b67f09SDavid van Moolenbroek                "GEOIP_DLL",
420*00b67f09SDavid van Moolenbroek                "ICONV_DLL",
421*00b67f09SDavid van Moolenbroek                "IDN_DLL",
422*00b67f09SDavid van Moolenbroek                "KRB5_DLL",
423*00b67f09SDavid van Moolenbroek                "K5SPRT_DLL",
424*00b67f09SDavid van Moolenbroek                "LIBXML2_DLL",
425*00b67f09SDavid van Moolenbroek                "OPENSSL_DLL",
426*00b67f09SDavid van Moolenbroek                "WSHELP_DLL");
427*00b67f09SDavid van Moolenbroek
428*00b67f09SDavid van Moolenbroek# variables
429*00b67f09SDavid van Moolenbroek
430*00b67f09SDavid van Moolenbroekmy %configvar;
431*00b67f09SDavid van Moolenbroek
432*00b67f09SDavid van Moolenbroekmy @substvar = ("BUILD_MACHINE",
433*00b67f09SDavid van Moolenbroek                "BUILD_PLATFORM",
434*00b67f09SDavid van Moolenbroek                "COPTI",
435*00b67f09SDavid van Moolenbroek                "COPTML",
436*00b67f09SDavid van Moolenbroek                "COPTMLD",
437*00b67f09SDavid van Moolenbroek                "COPTX",
438*00b67f09SDavid van Moolenbroek                "COPTY",
439*00b67f09SDavid van Moolenbroek                "INTRINSIC",
440*00b67f09SDavid van Moolenbroek                "MACHINE",
441*00b67f09SDavid van Moolenbroek                "OPENSSL_PATH",
442*00b67f09SDavid van Moolenbroek                "PLATFORM",
443*00b67f09SDavid van Moolenbroek                "PKCS11_TOOLS",
444*00b67f09SDavid van Moolenbroek                "prefix",
445*00b67f09SDavid van Moolenbroek                "PYTHON",
446*00b67f09SDavid van Moolenbroek                "VCREDIST_PATH"),
447*00b67f09SDavid van Moolenbroek
448*00b67f09SDavid van Moolenbroek# defines
449*00b67f09SDavid van Moolenbroek
450*00b67f09SDavid van Moolenbroekmy %configdefd;
451*00b67f09SDavid van Moolenbroek
452*00b67f09SDavid van Moolenbroekmy @substdefd = ("CRYPTO",
453*00b67f09SDavid van Moolenbroek                 "PK11_LIB_LOCATION",
454*00b67f09SDavid van Moolenbroek                 "USE_GSSAPI",
455*00b67f09SDavid van Moolenbroek                 "USE_PKCS11",
456*00b67f09SDavid van Moolenbroek                 "USE_PYTHON",
457*00b67f09SDavid van Moolenbroek                 "USE_ISC_SPNEGO");
458*00b67f09SDavid van Moolenbroek
459*00b67f09SDavid van Moolenbroek# conditions
460*00b67f09SDavid van Moolenbroek
461*00b67f09SDavid van Moolenbroekmy %configcond;
462*00b67f09SDavid van Moolenbroek
463*00b67f09SDavid van Moolenbroekmy @substcond = ("AES",
464*00b67f09SDavid van Moolenbroek                 "ATOMIC",
465*00b67f09SDavid van Moolenbroek                 "GSSAPI",
466*00b67f09SDavid van Moolenbroek                 "GEOIP",
467*00b67f09SDavid van Moolenbroek                 "IDNKIT",
468*00b67f09SDavid van Moolenbroek                 "LIBXML2",
469*00b67f09SDavid van Moolenbroek                 "OPENSSL",
470*00b67f09SDavid van Moolenbroek                 "PKCS11",
471*00b67f09SDavid van Moolenbroek                 "PYTHON",
472*00b67f09SDavid van Moolenbroek                 "SAMPLES",
473*00b67f09SDavid van Moolenbroek                 "TESTS",
474*00b67f09SDavid van Moolenbroek                 "XTESTS");
475*00b67f09SDavid van Moolenbroek
476*00b67f09SDavid van Moolenbroek# arguments
477*00b67f09SDavid van Moolenbroek
478*00b67f09SDavid van Moolenbroek# enable-xxx/disable-xxx
479*00b67f09SDavid van Moolenbroek
480*00b67f09SDavid van Moolenbroekmy @enablelist = ("developer",
481*00b67f09SDavid van Moolenbroek                  "fixed-rrset",
482*00b67f09SDavid van Moolenbroek                  "intrinsics",
483*00b67f09SDavid van Moolenbroek                  "isc-spnego",
484*00b67f09SDavid van Moolenbroek                  "native-pkcs11",
485*00b67f09SDavid van Moolenbroek                  "openssl-hash",
486*00b67f09SDavid van Moolenbroek                  "filter-aaaa",
487*00b67f09SDavid van Moolenbroek                  "rpz-nsdname",
488*00b67f09SDavid van Moolenbroek                  "rpz-nsip",
489*00b67f09SDavid van Moolenbroek                  "sit");
490*00b67f09SDavid van Moolenbroek
491*00b67f09SDavid van Moolenbroek# with-xxx/without-xxx
492*00b67f09SDavid van Moolenbroek
493*00b67f09SDavid van Moolenbroekmy @withlist = ("aes",
494*00b67f09SDavid van Moolenbroek                "cross-compile",
495*00b67f09SDavid van Moolenbroek                "ecdsa",
496*00b67f09SDavid van Moolenbroek                "extra-tests",
497*00b67f09SDavid van Moolenbroek                "gssapi",
498*00b67f09SDavid van Moolenbroek                "geoip",
499*00b67f09SDavid van Moolenbroek                "gost",
500*00b67f09SDavid van Moolenbroek                "iconv",
501*00b67f09SDavid van Moolenbroek                "idn",
502*00b67f09SDavid van Moolenbroek                "openssl",
503*00b67f09SDavid van Moolenbroek                "libxml2",
504*00b67f09SDavid van Moolenbroek                "pkcs11",
505*00b67f09SDavid van Moolenbroek                "python",
506*00b67f09SDavid van Moolenbroek                "readline",
507*00b67f09SDavid van Moolenbroek                "samples",
508*00b67f09SDavid van Moolenbroek                "sit-alg",
509*00b67f09SDavid van Moolenbroek                "tests",
510*00b67f09SDavid van Moolenbroek                "tuning",
511*00b67f09SDavid van Moolenbroek                "vcredist");
512*00b67f09SDavid van Moolenbroek
513*00b67f09SDavid van Moolenbroek# general arguments
514*00b67f09SDavid van Moolenbroek
515*00b67f09SDavid van Moolenbroekmy @optionlist = ("help", "verbose", "legacy", "win32", "x64", "clean");
516*00b67f09SDavid van Moolenbroek
517*00b67f09SDavid van Moolenbroek# usage
518*00b67f09SDavid van Moolenbroek
519*00b67f09SDavid van Moolenbroekmy @usage = ("Usage: perl Configure help\n",
520*00b67f09SDavid van Moolenbroek             "       perl Configure options* win32|x64\n",
521*00b67f09SDavid van Moolenbroek             "       perl Configure clean\n");
522*00b67f09SDavid van Moolenbroek
523*00b67f09SDavid van Moolenbroek# help
524*00b67f09SDavid van Moolenbroek
525*00b67f09SDavid van Moolenbroekmy @help = (
526*00b67f09SDavid van Moolenbroek"'Configure' configures BIND9 build files.\n\n",
527*00b67f09SDavid van Moolenbroek@usage,
528*00b67f09SDavid van Moolenbroek"\nGeneral Options and Commands:\n",
529*00b67f09SDavid van Moolenbroek"  verbose               (options) print messages\n",
530*00b67f09SDavid van Moolenbroek"  help                  (command) print this help\n",
531*00b67f09SDavid van Moolenbroek"  legacy                (options) process only files for legacy build\n",
532*00b67f09SDavid van Moolenbroek"  win32                 (command) configure for Win32 platform\n",
533*00b67f09SDavid van Moolenbroek"  x64                   (command) configure for x64 platform\n",
534*00b67f09SDavid van Moolenbroek"  clean                 (command) clean up generated files\n",
535*00b67f09SDavid van Moolenbroek"  <none>                (command) print a summary of the configuration\n",
536*00b67f09SDavid van Moolenbroek"\nOptional Features:\n",
537*00b67f09SDavid van Moolenbroek"  enable-intrinsics     enable instrinsic/atomic functions [default=yes]\n",
538*00b67f09SDavid van Moolenbroek"  enable-native-pkcs11  use native PKCS#11 for all crypto [default=no]\n",
539*00b67f09SDavid van Moolenbroek"  enable-openssl-hash   use OpenSSL for hash functions [default=yes]\n",
540*00b67f09SDavid van Moolenbroek"  enable-isc-spnego     use SPNEGO from lib/dns [default=yes]\n",
541*00b67f09SDavid van Moolenbroek"  enable-filter-aaaa    enable filtering of AAAA records [default=no]\n",
542*00b67f09SDavid van Moolenbroek"  enable-fixed-rrset    enable fixed rrset ordering [default=no]\n",
543*00b67f09SDavid van Moolenbroek"  enable-developer      enable developer build settings [default=no]\n",
544*00b67f09SDavid van Moolenbroek"  enable-rpz-nsip       enable rpz-nsip rules [default=yes]\n",
545*00b67f09SDavid van Moolenbroek"  enable-rpz-nsdname    enable rpz-nsdname rules [default=yes]\n",
546*00b67f09SDavid van Moolenbroek"  enable-sit            enable source identity token [default=yes]\n",
547*00b67f09SDavid van Moolenbroek"\nOptional Packages:\n",
548*00b67f09SDavid van Moolenbroek"  with-tests            build with test suite\n",
549*00b67f09SDavid van Moolenbroek"  with-extra-tests      build with extra test suite\n",
550*00b67f09SDavid van Moolenbroek"  with-samples          build with sample programs\n",
551*00b67f09SDavid van Moolenbroek"  with-openssl[=PATH]   build with OpenSSL yes|no|path\n",
552*00b67f09SDavid van Moolenbroek"  with-pkcs11[=PATH]    build with PKCS#11 support yes|no|provider-path\n",
553*00b67f09SDavid van Moolenbroek"  with-ecdsa            crypto ECDSA\n",
554*00b67f09SDavid van Moolenbroek"  with-gost[=ENC]       crypto GOST yes|no|raw|ans1\n",
555*00b67f09SDavid van Moolenbroek"  with-aes              crypto AES\n",
556*00b67f09SDavid van Moolenbroek"  with-sit-alg          choose the algorithm for SIT aes|sha1|sha256\n",
557*00b67f09SDavid van Moolenbroek"  with-gssapi[=PATH]    build with MIT KfW GSSAPI yes|no|path\n",
558*00b67f09SDavid van Moolenbroek"  with-libxml2[=PATH]   build with libxml2 library yes|no|path\n",
559*00b67f09SDavid van Moolenbroek"  with-geoip[=PATH]     build with GeoIP support yes|no|path\n",
560*00b67f09SDavid van Moolenbroek"  with-python[=COMMAND] specify python interpreter python|command\n",
561*00b67f09SDavid van Moolenbroek"  with-readline[=PATH]  build with readline library support yes|no|path\n",
562*00b67f09SDavid van Moolenbroek"  with-idn[=PATH]       build with IDN kit support yes|no|path\n",
563*00b67f09SDavid van Moolenbroek"  with-iconv[=PATH]     path of the iconv DLL [default=same than idn]\n",
564*00b67f09SDavid van Moolenbroek"  with-vcredist[=PATH]  visual C++ redistributable package yes|path\n",
565*00b67f09SDavid van Moolenbroek"  with-tuning=OPTION    tune for plaform size (large|default)\n",
566*00b67f09SDavid van Moolenbroek"  with-cross-compile    32 / 64 bit build / host plaforms\n");
567*00b67f09SDavid van Moolenbroek
568*00b67f09SDavid van Moolenbroek# Parse arguments
569*00b67f09SDavid van Moolenbroek
570*00b67f09SDavid van Moolenbroekmy $verbose = 0;
571*00b67f09SDavid van Moolenbroekmy $legacy_only = 0;
572*00b67f09SDavid van Moolenbroekmy $want_help = "no";
573*00b67f09SDavid van Moolenbroekmy $want_win32 = "no";
574*00b67f09SDavid van Moolenbroekmy $want_x64 = "no";
575*00b67f09SDavid van Moolenbroekmy $want_clean = "no";
576*00b67f09SDavid van Moolenbroekmy $want_unknown = "no";
577*00b67f09SDavid van Moolenbroekmy $unknown_value;
578*00b67f09SDavid van Moolenbroekmy $enable_intrinsics = "yes";
579*00b67f09SDavid van Moolenbroekmy $enable_native_pkcs11 = "no";
580*00b67f09SDavid van Moolenbroekmy $enable_openssl_hash = "auto";
581*00b67f09SDavid van Moolenbroekmy $enable_filter_aaaa = "no";
582*00b67f09SDavid van Moolenbroekmy $enable_isc_spnego = "yes";
583*00b67f09SDavid van Moolenbroekmy $enable_fixed_rrset = "no";
584*00b67f09SDavid van Moolenbroekmy $enable_developer = "no";
585*00b67f09SDavid van Moolenbroekmy $enable_rpz_nsip = "yes";
586*00b67f09SDavid van Moolenbroekmy $enable_rpz_nsdname = "yes";
587*00b67f09SDavid van Moolenbroekmy $enable_sit = "yes";
588*00b67f09SDavid van Moolenbroekmy $use_tests = "no";
589*00b67f09SDavid van Moolenbroekmy $use_xtests = "no";
590*00b67f09SDavid van Moolenbroekmy $use_samples = "no";
591*00b67f09SDavid van Moolenbroekmy $use_openssl = "auto";
592*00b67f09SDavid van Moolenbroekmy $openssl_path = "..\\..\\";
593*00b67f09SDavid van Moolenbroekmy $use_pkcs11 = "no";
594*00b67f09SDavid van Moolenbroekmy $pkcs11_path = "unknown";
595*00b67f09SDavid van Moolenbroekmy $use_ecdsa = "auto";
596*00b67f09SDavid van Moolenbroekmy $use_gost = "auto";
597*00b67f09SDavid van Moolenbroekmy $gost_encoding = "raw";
598*00b67f09SDavid van Moolenbroekmy $use_aes = "auto";
599*00b67f09SDavid van Moolenbroekmy $sit_algorithm = "aes";
600*00b67f09SDavid van Moolenbroekmy $use_gssapi = "no";
601*00b67f09SDavid van Moolenbroekmy $gssapi_path = "C:\\Program\ Files\\MIT\\Kerberos\\";
602*00b67f09SDavid van Moolenbroekmy $use_geoip = "no";
603*00b67f09SDavid van Moolenbroekmy $geoip_path = "";
604*00b67f09SDavid van Moolenbroekmy $use_libxml2 = "auto";
605*00b67f09SDavid van Moolenbroekmy $libxml2_path = "..\\..\\";
606*00b67f09SDavid van Moolenbroekmy $use_python = "auto";
607*00b67f09SDavid van Moolenbroekmy $python_command = "python";
608*00b67f09SDavid van Moolenbroekmy $use_readline = "no";
609*00b67f09SDavid van Moolenbroekmy $readline_path = "..\\..\\";
610*00b67f09SDavid van Moolenbroekmy $use_idn = "no";
611*00b67f09SDavid van Moolenbroekmy $idn_path = "..\\..\\";
612*00b67f09SDavid van Moolenbroekmy $iconv_path = " --idn-- ";
613*00b67f09SDavid van Moolenbroekmy $use_vcredist = "yes";
614*00b67f09SDavid van Moolenbroekmy $vcredist_path = " --infer-- ";
615*00b67f09SDavid van Moolenbroekmy $cross_compile = "no";
616*00b67f09SDavid van Moolenbroekmy $tuning = "default";
617*00b67f09SDavid van Moolenbroek
618*00b67f09SDavid van Moolenbroek# no arguments -> usage
619*00b67f09SDavid van Moolenbroek
620*00b67f09SDavid van Moolenbroekif ($#ARGV < 0) {
621*00b67f09SDavid van Moolenbroek    foreach (@usage) {
622*00b67f09SDavid van Moolenbroek        print $_;
623*00b67f09SDavid van Moolenbroek    }
624*00b67f09SDavid van Moolenbroek    exit 1;
625*00b67f09SDavid van Moolenbroek}
626*00b67f09SDavid van Moolenbroek
627*00b67f09SDavid van Moolenbroek# parse arguments
628*00b67f09SDavid van Moolenbroek
629*00b67f09SDavid van Moolenbroekforeach (@ARGV) {
630*00b67f09SDavid van Moolenbroek    if (/^verbose$/i) {
631*00b67f09SDavid van Moolenbroek        $verbose = 1;
632*00b67f09SDavid van Moolenbroek    } elsif (/^help$/i) {
633*00b67f09SDavid van Moolenbroek        $want_help = "yes";
634*00b67f09SDavid van Moolenbroek    } elsif (/^disable-(.*)$/i) {
635*00b67f09SDavid van Moolenbroek        appargs($_);
636*00b67f09SDavid van Moolenbroek        myenable($1, "no");
637*00b67f09SDavid van Moolenbroek    } elsif (/^enable-(.*)$/i) {
638*00b67f09SDavid van Moolenbroek        appargs($_);
639*00b67f09SDavid van Moolenbroek        myenable($1, "yes");
640*00b67f09SDavid van Moolenbroek    } elsif (/^without-(.*)$/i) {
641*00b67f09SDavid van Moolenbroek        appargs($_);
642*00b67f09SDavid van Moolenbroek        mywith($1, "no");
643*00b67f09SDavid van Moolenbroek    } elsif (/^with-(.*)=(.*)$/i) {
644*00b67f09SDavid van Moolenbroek        appargs($_);
645*00b67f09SDavid van Moolenbroek        mywith($1, $2);
646*00b67f09SDavid van Moolenbroek    } elsif (/^with-(.*)$/i) {
647*00b67f09SDavid van Moolenbroek        appargs($_);
648*00b67f09SDavid van Moolenbroek        mywith($1, "yes");
649*00b67f09SDavid van Moolenbroek    } elsif (/^legacy$/i) {
650*00b67f09SDavid van Moolenbroek        $legacy_only = 1;
651*00b67f09SDavid van Moolenbroek    } elsif (/^win32$/i) {
652*00b67f09SDavid van Moolenbroek        $want_win32 = "yes";
653*00b67f09SDavid van Moolenbroek    } elsif (/^x64$/i) {
654*00b67f09SDavid van Moolenbroek        appargs($_);
655*00b67f09SDavid van Moolenbroek        $want_x64 = "yes";
656*00b67f09SDavid van Moolenbroek    } elsif (/^clean$/i) {
657*00b67f09SDavid van Moolenbroek        $want_clean = "yes";
658*00b67f09SDavid van Moolenbroek    } else {
659*00b67f09SDavid van Moolenbroek        $want_unknown = "yes";
660*00b67f09SDavid van Moolenbroek        $unknown_value = $_;
661*00b67f09SDavid van Moolenbroek    }
662*00b67f09SDavid van Moolenbroek}
663*00b67f09SDavid van Moolenbroek
664*00b67f09SDavid van Moolenbroek# legacy default to win32
665*00b67f09SDavid van Moolenbroek
666*00b67f09SDavid van Moolenbroekif ($legacy_only && ($want_x64 ne "yes")) {
667*00b67f09SDavid van Moolenbroek    $want_win32 = "yes";
668*00b67f09SDavid van Moolenbroek}
669*00b67f09SDavid van Moolenbroek
670*00b67f09SDavid van Moolenbroek# configure the platform
671*00b67f09SDavid van Moolenbroek
672*00b67f09SDavid van Moolenbroekif (($want_win32 eq "yes") && ($want_x64 eq "yes")) {
673*00b67f09SDavid van Moolenbroek    die "can't ask for both Win32 and x64 platforms\n";
674*00b67f09SDavid van Moolenbroek} elsif ($want_win32 eq "yes") {
675*00b67f09SDavid van Moolenbroek    $configvar{"PLATFORM"} = "Win32";
676*00b67f09SDavid van Moolenbroek    $configvar{"BUILD_PLATFORM"} = "Win32";
677*00b67f09SDavid van Moolenbroek    $configvar{"MACHINE"} = "/machine:X86";
678*00b67f09SDavid van Moolenbroek    $configvar{"BUILD_MACHINE"} = "/machine:X86";
679*00b67f09SDavid van Moolenbroek} elsif ($want_x64 eq "yes") {
680*00b67f09SDavid van Moolenbroek    $configvar{"PLATFORM"} = "x64";
681*00b67f09SDavid van Moolenbroek    $configvar{"BUILD_PLATFORM"} = "x64";
682*00b67f09SDavid van Moolenbroek    $configvar{"MACHINE"} = "/machine:X64";
683*00b67f09SDavid van Moolenbroek    $configvar{"BUILD_MACHINE"} = "/machine:X64";
684*00b67f09SDavid van Moolenbroek}
685*00b67f09SDavid van Moolenbroek
686*00b67f09SDavid van Moolenbroek# append seen args to CONFIGARGS define
687*00b67f09SDavid van Moolenbroek
688*00b67f09SDavid van Moolenbroeksub appargs {
689*00b67f09SDavid van Moolenbroek    my $arg = $_[0];
690*00b67f09SDavid van Moolenbroek    # escape backslashes, spaces and double quotes
691*00b67f09SDavid van Moolenbroek    $arg =~ s/([\\ "])/\\$1/g;
692*00b67f09SDavid van Moolenbroek    if (defined($configdefh{"CONFIGARGS"})) {
693*00b67f09SDavid van Moolenbroek        $configdefh{"CONFIGARGS"} .= " " . $arg;
694*00b67f09SDavid van Moolenbroek    } else {
695*00b67f09SDavid van Moolenbroek        $configdefh{"CONFIGARGS"} = $arg;
696*00b67f09SDavid van Moolenbroek    }
697*00b67f09SDavid van Moolenbroek}
698*00b67f09SDavid van Moolenbroek
699*00b67f09SDavid van Moolenbroekif (!$configdefh{"CONFIGARGS"}) {
700*00b67f09SDavid van Moolenbroek    # CONFIGARGS default is "default"
701*00b67f09SDavid van Moolenbroek    $configdefh{"CONFIGARGS"} = "\"default\"";
702*00b67f09SDavid van Moolenbroek} else {
703*00b67f09SDavid van Moolenbroek    my $val = $configdefh{"CONFIGARGS"};
704*00b67f09SDavid van Moolenbroek    $configdefh{"CONFIGARGS"} = "\"'$val'\"";
705*00b67f09SDavid van Moolenbroek}
706*00b67f09SDavid van Moolenbroek
707*00b67f09SDavid van Moolenbroek# parse enable/disable
708*00b67f09SDavid van Moolenbroek
709*00b67f09SDavid van Moolenbroeksub myenable {
710*00b67f09SDavid van Moolenbroek    my $key = $_[0];
711*00b67f09SDavid van Moolenbroek    my $val = $_[1];
712*00b67f09SDavid van Moolenbroek
713*00b67f09SDavid van Moolenbroek    if ($key =~ /^intrinsics$/i) {
714*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
715*00b67f09SDavid van Moolenbroek            $enable_intrinsics = "no";
716*00b67f09SDavid van Moolenbroek        }
717*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^native-pkcs11$/i) {
718*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
719*00b67f09SDavid van Moolenbroek            $enable_native_pkcs11 = "yes";
720*00b67f09SDavid van Moolenbroek        }
721*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^openssl-hash$/i) {
722*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
723*00b67f09SDavid van Moolenbroek            $enable_openssl_hash = "yes";
724*00b67f09SDavid van Moolenbroek        } elsif ($val =~ /^no$/i) {
725*00b67f09SDavid van Moolenbroek            $enable_openssl_hash = "no";
726*00b67f09SDavid van Moolenbroek        }
727*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^isc-spnego$/i) {
728*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
729*00b67f09SDavid van Moolenbroek            $enable_isc_spnego = "no";
730*00b67f09SDavid van Moolenbroek        }
731*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^filter-aaaa$/i) {
732*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
733*00b67f09SDavid van Moolenbroek            $enable_filter_aaaa = "yes";
734*00b67f09SDavid van Moolenbroek        }
735*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^fixed-rrset$/i) {
736*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
737*00b67f09SDavid van Moolenbroek            $enable_fixed_rrset = "yes";
738*00b67f09SDavid van Moolenbroek        }
739*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^developer$/i) {
740*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
741*00b67f09SDavid van Moolenbroek            $enable_developer = "yes";
742*00b67f09SDavid van Moolenbroek        }
743*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^rpz-nsip$/i) {
744*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
745*00b67f09SDavid van Moolenbroek            $enable_rpz_nsip = "no";
746*00b67f09SDavid van Moolenbroek        }
747*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^rpz-nsdname$/i) {
748*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
749*00b67f09SDavid van Moolenbroek            $enable_rpz_nsdname = "no";
750*00b67f09SDavid van Moolenbroek        }
751*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^sit$/i) {
752*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
753*00b67f09SDavid van Moolenbroek            $enable_sit = "no";
754*00b67f09SDavid van Moolenbroek        }
755*00b67f09SDavid van Moolenbroek    } else {
756*00b67f09SDavid van Moolenbroek        $want_unknown = "yes";
757*00b67f09SDavid van Moolenbroek        if ($val eq "no") {
758*00b67f09SDavid van Moolenbroek            $unknown_value = "disable-" . $key;
759*00b67f09SDavid van Moolenbroek        } else {
760*00b67f09SDavid van Moolenbroek            $unknown_value = "enable-". $key;
761*00b67f09SDavid van Moolenbroek        }
762*00b67f09SDavid van Moolenbroek    }
763*00b67f09SDavid van Moolenbroek}
764*00b67f09SDavid van Moolenbroek
765*00b67f09SDavid van Moolenbroek# enable-developer expansion now
766*00b67f09SDavid van Moolenbroek
767*00b67f09SDavid van Moolenbroekif ($enable_developer eq "yes") {
768*00b67f09SDavid van Moolenbroek    $configdefh{"ISC_LIST_CHECKINIT"} = 1;
769*00b67f09SDavid van Moolenbroek    $enable_filter_aaaa = "yes";
770*00b67f09SDavid van Moolenbroek    # no atf on WIN32
771*00b67f09SDavid van Moolenbroek    $enable_fixed_rrset = "yes";
772*00b67f09SDavid van Moolenbroek    # TODO: dlz filesystem
773*00b67f09SDavid van Moolenbroek    $use_tests = "yes";
774*00b67f09SDavid van Moolenbroek    $use_samples = "yes";
775*00b67f09SDavid van Moolenbroek    $enable_sit = "yes";
776*00b67f09SDavid van Moolenbroek}
777*00b67f09SDavid van Moolenbroek
778*00b67f09SDavid van Moolenbroek# parse with/without
779*00b67f09SDavid van Moolenbroek
780*00b67f09SDavid van Moolenbroeksub mywith {
781*00b67f09SDavid van Moolenbroek    my $key = $_[0];
782*00b67f09SDavid van Moolenbroek    my $val = $_[1];
783*00b67f09SDavid van Moolenbroek
784*00b67f09SDavid van Moolenbroek    if ($key =~ /^tests$/i) {
785*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
786*00b67f09SDavid van Moolenbroek            $use_tests = "yes";
787*00b67f09SDavid van Moolenbroek        }
788*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^extra-tests$/i) {
789*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
790*00b67f09SDavid van Moolenbroek            $use_tests = "yes";
791*00b67f09SDavid van Moolenbroek            $use_xtests = "yes";
792*00b67f09SDavid van Moolenbroek        }
793*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^samples$/i) {
794*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
795*00b67f09SDavid van Moolenbroek            $use_samples = "yes";
796*00b67f09SDavid van Moolenbroek        }
797*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^openssl$/i) {
798*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
799*00b67f09SDavid van Moolenbroek            $use_openssl = "no";
800*00b67f09SDavid van Moolenbroek        } elsif ($val !~ /^yes$/i) {
801*00b67f09SDavid van Moolenbroek            $use_openssl = "yes";
802*00b67f09SDavid van Moolenbroek            $openssl_path = $val;
803*00b67f09SDavid van Moolenbroek        }
804*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^pkcs11$/i) {
805*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
806*00b67f09SDavid van Moolenbroek            $use_pkcs11 = "yes";
807*00b67f09SDavid van Moolenbroek        } elsif ($val !~ /^no$/i) {
808*00b67f09SDavid van Moolenbroek            $use_pkcs11= "yes";
809*00b67f09SDavid van Moolenbroek            $pkcs11_path = $val;
810*00b67f09SDavid van Moolenbroek            $pkcs11_path =~ s/\.dll$//i;
811*00b67f09SDavid van Moolenbroek        }
812*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^ecdsa$/i) {
813*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
814*00b67f09SDavid van Moolenbroek            $use_ecdsa = "no";
815*00b67f09SDavid van Moolenbroek        } elsif ($val =~ /^yes$/i) {
816*00b67f09SDavid van Moolenbroek            $use_ecdsa = "yes";
817*00b67f09SDavid van Moolenbroek        }
818*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^gost$/i) {
819*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
820*00b67f09SDavid van Moolenbroek            $use_gost = "no";
821*00b67f09SDavid van Moolenbroek        } elsif ($val =~ /^yes$/i) {
822*00b67f09SDavid van Moolenbroek            $use_gost = "yes";
823*00b67f09SDavid van Moolenbroek            $gost_encoding = $val;
824*00b67f09SDavid van Moolenbroek        }
825*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^aes$/i) {
826*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
827*00b67f09SDavid van Moolenbroek            $use_aes = "no";
828*00b67f09SDavid van Moolenbroek        } elsif ($val =~ /^yes$/i) {
829*00b67f09SDavid van Moolenbroek            $use_aes = "yes";
830*00b67f09SDavid van Moolenbroek        }
831*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^sit-alg$/i) {
832*00b67f09SDavid van Moolenbroek        $sit_algorithm = $val;
833*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^gssapi$/i) {
834*00b67f09SDavid van Moolenbroek        if ($val !~ /^no$/i) {
835*00b67f09SDavid van Moolenbroek            $use_gssapi = "yes";
836*00b67f09SDavid van Moolenbroek            if ($val !~ /^yes$/i) {
837*00b67f09SDavid van Moolenbroek                $gssapi_path = $val;
838*00b67f09SDavid van Moolenbroek            }
839*00b67f09SDavid van Moolenbroek        }
840*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^libxml2$/i) {
841*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
842*00b67f09SDavid van Moolenbroek            $use_libxml2 = "no";
843*00b67f09SDavid van Moolenbroek        } elsif ($val !~ /^yes$/i) {
844*00b67f09SDavid van Moolenbroek            $use_libxml2 = "yes";
845*00b67f09SDavid van Moolenbroek            $libxml2_path = $val;
846*00b67f09SDavid van Moolenbroek        }
847*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^geoip$/i) {
848*00b67f09SDavid van Moolenbroek        if ($val !~ /^no$/i) {
849*00b67f09SDavid van Moolenbroek            $use_geoip = "yes";
850*00b67f09SDavid van Moolenbroek            if ($val !~ /^yes$/i) {
851*00b67f09SDavid van Moolenbroek                $geoip_path = $val;
852*00b67f09SDavid van Moolenbroek            }
853*00b67f09SDavid van Moolenbroek        }
854*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^readline$/i) {
855*00b67f09SDavid van Moolenbroek        if ($val !~ /^no$/i) {
856*00b67f09SDavid van Moolenbroek            $use_readline = "yes";
857*00b67f09SDavid van Moolenbroek            if ($val !~ /^yes$/i) {
858*00b67f09SDavid van Moolenbroek                $readline_path = $val;
859*00b67f09SDavid van Moolenbroek            }
860*00b67f09SDavid van Moolenbroek        }
861*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^idn$/i) {
862*00b67f09SDavid van Moolenbroek        if ($val !~ /^no$/i) {
863*00b67f09SDavid van Moolenbroek            $use_idn = "yes";
864*00b67f09SDavid van Moolenbroek            if ($val !~ /^yes$/i) {
865*00b67f09SDavid van Moolenbroek                $idn_path = $val;
866*00b67f09SDavid van Moolenbroek            }
867*00b67f09SDavid van Moolenbroek        }
868*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^iconv$/i) {
869*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
870*00b67f09SDavid van Moolenbroek            $want_unknown = "yes";
871*00b67f09SDavid van Moolenbroek            $unknown_value = "without-iconv doesn't make sense)";
872*00b67f09SDavid van Moolenbroek        } elsif ($val !~ /^yes$/i) {
873*00b67f09SDavid van Moolenbroek            $iconv_path = $val;
874*00b67f09SDavid van Moolenbroek        }
875*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^python$/i) {
876*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
877*00b67f09SDavid van Moolenbroek            $use_python = "no";
878*00b67f09SDavid van Moolenbroek        } else {
879*00b67f09SDavid van Moolenbroek            $use_python = "yes";
880*00b67f09SDavid van Moolenbroek            if ($val !~ /^yes$/i) {
881*00b67f09SDavid van Moolenbroek                $python_command = $val;
882*00b67f09SDavid van Moolenbroek            }
883*00b67f09SDavid van Moolenbroek        }
884*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^vcredist$/i) {
885*00b67f09SDavid van Moolenbroek        if ($val =~ /^no$/i) {
886*00b67f09SDavid van Moolenbroek            $want_unknown = "yes";
887*00b67f09SDavid van Moolenbroek            $unknown_value = "without-vcredist (vcredist is required)";
888*00b67f09SDavid van Moolenbroek        } elsif ($val !~ /^yes$/i) {
889*00b67f09SDavid van Moolenbroek            $vcredist_path = $val;
890*00b67f09SDavid van Moolenbroek        }
891*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^cross-compile$/i) {
892*00b67f09SDavid van Moolenbroek        if ($val =~ /^yes$/i) {
893*00b67f09SDavid van Moolenbroek            $cross_compile = "yes";
894*00b67f09SDavid van Moolenbroek        }
895*00b67f09SDavid van Moolenbroek    } elsif ($key =~ /^tuning$/i) {
896*00b67f09SDavid van Moolenbroek        if ($val =~ /^large$/i) {
897*00b67f09SDavid van Moolenbroek            $tuning = "large";
898*00b67f09SDavid van Moolenbroek        }
899*00b67f09SDavid van Moolenbroek    } else {
900*00b67f09SDavid van Moolenbroek        $want_unknown = "yes";
901*00b67f09SDavid van Moolenbroek        if ($val eq "no") {
902*00b67f09SDavid van Moolenbroek            $unknown_value = "without-" . $key;
903*00b67f09SDavid van Moolenbroek        } else {
904*00b67f09SDavid van Moolenbroek            $unknown_value = "with-" . $key;
905*00b67f09SDavid van Moolenbroek        }
906*00b67f09SDavid van Moolenbroek    }
907*00b67f09SDavid van Moolenbroek}
908*00b67f09SDavid van Moolenbroek
909*00b67f09SDavid van Moolenbroek# resolve enable-openssl-hash
910*00b67f09SDavid van Moolenbroekif ($enable_openssl_hash eq "auto") {
911*00b67f09SDavid van Moolenbroek    if ($use_openssl ne "no") {
912*00b67f09SDavid van Moolenbroek        if ($enable_native_pkcs11 eq "yes") {
913*00b67f09SDavid van Moolenbroek            $enable_openssl_hash="no";
914*00b67f09SDavid van Moolenbroek        } else {
915*00b67f09SDavid van Moolenbroek            $enable_openssl_hash="yes";
916*00b67f09SDavid van Moolenbroek        }
917*00b67f09SDavid van Moolenbroek    } else {
918*00b67f09SDavid van Moolenbroek        $enable_openssl_hash="no";
919*00b67f09SDavid van Moolenbroek    }
920*00b67f09SDavid van Moolenbroek}
921*00b67f09SDavid van Moolenbroek
922*00b67f09SDavid van Moolenbroekif ($want_help ne "no") {
923*00b67f09SDavid van Moolenbroek    foreach (@help) {
924*00b67f09SDavid van Moolenbroek        print $_;
925*00b67f09SDavid van Moolenbroek    }
926*00b67f09SDavid van Moolenbroek    exit 1;
927*00b67f09SDavid van Moolenbroek}
928*00b67f09SDavid van Moolenbroek
929*00b67f09SDavid van Moolenbroek# clean up and exit if requested
930*00b67f09SDavid van Moolenbroekif ($want_clean eq "yes") {
931*00b67f09SDavid van Moolenbroek    my $file;
932*00b67f09SDavid van Moolenbroek    foreach $file (@filelist) {
933*00b67f09SDavid van Moolenbroek        unlink($file);
934*00b67f09SDavid van Moolenbroek    }
935*00b67f09SDavid van Moolenbroek
936*00b67f09SDavid van Moolenbroek    foreach $file (@projectlist) {
937*00b67f09SDavid van Moolenbroek        unlink($file);
938*00b67f09SDavid van Moolenbroek    }
939*00b67f09SDavid van Moolenbroek
940*00b67f09SDavid van Moolenbroek    exit 0;
941*00b67f09SDavid van Moolenbroek}
942*00b67f09SDavid van Moolenbroek
943*00b67f09SDavid van Moolenbroekif ($want_unknown ne "no") {
944*00b67f09SDavid van Moolenbroek    print STDERR "can't parse $unknown_value\n";
945*00b67f09SDavid van Moolenbroek    exit 1;
946*00b67f09SDavid van Moolenbroek}
947*00b67f09SDavid van Moolenbroek
948*00b67f09SDavid van Moolenbroekif ($verbose) {
949*00b67f09SDavid van Moolenbroek    if ($want_win32 eq "yes") {
950*00b67f09SDavid van Moolenbroek        print "configure for win32\n";
951*00b67f09SDavid van Moolenbroek    }
952*00b67f09SDavid van Moolenbroek    if ($want_x64 eq "yes") {
953*00b67f09SDavid van Moolenbroek        print "configure for x64\n";
954*00b67f09SDavid van Moolenbroek    }
955*00b67f09SDavid van Moolenbroek    if ($cross_compile eq "yes") {
956*00b67f09SDavid van Moolenbroek        print "cross compiling";
957*00b67f09SDavid van Moolenbroek        if ($want_x64 eq "yes") {
958*00b67f09SDavid van Moolenbroek            print ": build on win32 for x64 host\n";
959*00b67f09SDavid van Moolenbroek        } elsif ($want_win32 eq "yes") {
960*00b67f09SDavid van Moolenbroek            print ": build on x64 for win32 host\n";
961*00b67f09SDavid van Moolenbroek        } else {
962*00b67f09SDavid van Moolenbroek            print "\n";
963*00b67f09SDavid van Moolenbroek        }
964*00b67f09SDavid van Moolenbroek    }
965*00b67f09SDavid van Moolenbroek    if ($enable_intrinsics eq "yes") {
966*00b67f09SDavid van Moolenbroek        print "intrinsics: enabled\n";
967*00b67f09SDavid van Moolenbroek    } else {
968*00b67f09SDavid van Moolenbroek        print "intrinsics: disabled\n";
969*00b67f09SDavid van Moolenbroek    }
970*00b67f09SDavid van Moolenbroek    if ($enable_native_pkcs11 eq "yes") {
971*00b67f09SDavid van Moolenbroek        print "native-pkcs11: enabled\n";
972*00b67f09SDavid van Moolenbroek    } else {
973*00b67f09SDavid van Moolenbroek        print "native-pkcs11: disabled\n";
974*00b67f09SDavid van Moolenbroek    }
975*00b67f09SDavid van Moolenbroek    if ($enable_openssl_hash eq "yes") {
976*00b67f09SDavid van Moolenbroek        print "openssl-hash: enabled\n";
977*00b67f09SDavid van Moolenbroek    } else {
978*00b67f09SDavid van Moolenbroek        print "openssl-hash: disabled\n";
979*00b67f09SDavid van Moolenbroek    }
980*00b67f09SDavid van Moolenbroek    if ($enable_isc_spnego eq "yes") {
981*00b67f09SDavid van Moolenbroek        print "isc-spnego: enabled\n";
982*00b67f09SDavid van Moolenbroek    } else {
983*00b67f09SDavid van Moolenbroek        print "isc-spnego: disabled\n";
984*00b67f09SDavid van Moolenbroek    }
985*00b67f09SDavid van Moolenbroek    if ($enable_filter_aaaa eq "yes") {
986*00b67f09SDavid van Moolenbroek        print "filter-aaaa: enabled\n";
987*00b67f09SDavid van Moolenbroek    } else {
988*00b67f09SDavid van Moolenbroek        print "filter-aaaa: disabled\n";
989*00b67f09SDavid van Moolenbroek    }
990*00b67f09SDavid van Moolenbroek    if ($enable_fixed_rrset eq "yes") {
991*00b67f09SDavid van Moolenbroek        print "fixed-rrset: enabled\n";
992*00b67f09SDavid van Moolenbroek    } else {
993*00b67f09SDavid van Moolenbroek        print "fixed-rrset: disabled\n";
994*00b67f09SDavid van Moolenbroek    }
995*00b67f09SDavid van Moolenbroek    if ($enable_developer eq "yes") {
996*00b67f09SDavid van Moolenbroek        print "developer: enabled\n";
997*00b67f09SDavid van Moolenbroek    } else {
998*00b67f09SDavid van Moolenbroek        print "developer: disabled\n";
999*00b67f09SDavid van Moolenbroek    }
1000*00b67f09SDavid van Moolenbroek    if ($enable_rpz_nsip eq "yes") {
1001*00b67f09SDavid van Moolenbroek        print "rpz-nsip: enabled\n";
1002*00b67f09SDavid van Moolenbroek    } else {
1003*00b67f09SDavid van Moolenbroek        print "rpz-nsip: disabled\n";
1004*00b67f09SDavid van Moolenbroek    }
1005*00b67f09SDavid van Moolenbroek    if ($enable_rpz_nsdname eq "yes") {
1006*00b67f09SDavid van Moolenbroek        print "rpz-nsdname: enabled\n";
1007*00b67f09SDavid van Moolenbroek    } else {
1008*00b67f09SDavid van Moolenbroek        print "rpz-nsdname: disabled\n";
1009*00b67f09SDavid van Moolenbroek    }
1010*00b67f09SDavid van Moolenbroek    if ($enable_sit eq "yes") {
1011*00b67f09SDavid van Moolenbroek        print "sit: enabled\n";
1012*00b67f09SDavid van Moolenbroek        print "sit algorithm: $sit_algorithm\n";
1013*00b67f09SDavid van Moolenbroek    } else {
1014*00b67f09SDavid van Moolenbroek        print "sit: disabled\n";
1015*00b67f09SDavid van Moolenbroek    }
1016*00b67f09SDavid van Moolenbroek    if ($use_openssl eq "no") {
1017*00b67f09SDavid van Moolenbroek        print "openssl: disabled\n";
1018*00b67f09SDavid van Moolenbroek    } else {
1019*00b67f09SDavid van Moolenbroek        print "openssl-path: $openssl_path\n";
1020*00b67f09SDavid van Moolenbroek    }
1021*00b67f09SDavid van Moolenbroek    if ($use_tests eq "yes") {
1022*00b67f09SDavid van Moolenbroek        print "tests: enabled\n";
1023*00b67f09SDavid van Moolenbroek    }
1024*00b67f09SDavid van Moolenbroek    if ($use_xtests eq "yes") {
1025*00b67f09SDavid van Moolenbroek        print "extra tests: enabled\n";
1026*00b67f09SDavid van Moolenbroek    }
1027*00b67f09SDavid van Moolenbroek    if ($use_samples eq "yes") {
1028*00b67f09SDavid van Moolenbroek        print "sample programs: enabled\n";
1029*00b67f09SDavid van Moolenbroek    }
1030*00b67f09SDavid van Moolenbroek    if ($use_pkcs11 eq "no") {
1031*00b67f09SDavid van Moolenbroek        print "pkcs11: disabled\n";
1032*00b67f09SDavid van Moolenbroek    } else {
1033*00b67f09SDavid van Moolenbroek        print "pkcs11-provider-path: $pkcs11_path\n";
1034*00b67f09SDavid van Moolenbroek    }
1035*00b67f09SDavid van Moolenbroek    if ($use_ecdsa eq "no") {
1036*00b67f09SDavid van Moolenbroek        print "ecdsa: disabled\n";
1037*00b67f09SDavid van Moolenbroek    } else {
1038*00b67f09SDavid van Moolenbroek        print "ecdsa: enabled\n";
1039*00b67f09SDavid van Moolenbroek    }
1040*00b67f09SDavid van Moolenbroek    if ($use_gost eq "no") {
1041*00b67f09SDavid van Moolenbroek        print "gost: disabled\n";
1042*00b67f09SDavid van Moolenbroek    } else {
1043*00b67f09SDavid van Moolenbroek        print "gost: enabled\n";
1044*00b67f09SDavid van Moolenbroek        print "gost private key encoding: $gost_encoding\n";
1045*00b67f09SDavid van Moolenbroek    }
1046*00b67f09SDavid van Moolenbroek    if ($use_aes eq "no") {
1047*00b67f09SDavid van Moolenbroek        print "aes: disabled\n";
1048*00b67f09SDavid van Moolenbroek    } else {
1049*00b67f09SDavid van Moolenbroek        print "aes: enabled\n";
1050*00b67f09SDavid van Moolenbroek    }
1051*00b67f09SDavid van Moolenbroek    if ($use_gssapi eq "no") {
1052*00b67f09SDavid van Moolenbroek        print "gssapi: disabled\n";
1053*00b67f09SDavid van Moolenbroek    } else {
1054*00b67f09SDavid van Moolenbroek        print "gssapi-path: $gssapi_path\n";
1055*00b67f09SDavid van Moolenbroek    }
1056*00b67f09SDavid van Moolenbroek    if ($use_libxml2 eq "no") {
1057*00b67f09SDavid van Moolenbroek        print "libxml2: disabled\n";
1058*00b67f09SDavid van Moolenbroek    } else {
1059*00b67f09SDavid van Moolenbroek        print "libxml2-path: $libxml2_path\n";
1060*00b67f09SDavid van Moolenbroek    }
1061*00b67f09SDavid van Moolenbroek    if ($use_geoip eq "no") {
1062*00b67f09SDavid van Moolenbroek        print "geoip: disabled\n";
1063*00b67f09SDavid van Moolenbroek    } else {
1064*00b67f09SDavid van Moolenbroek        print "geoip-path: $geoip_path\n";
1065*00b67f09SDavid van Moolenbroek    }
1066*00b67f09SDavid van Moolenbroek    if ($use_readline eq "no") {
1067*00b67f09SDavid van Moolenbroek        print "readline: disabled\n";
1068*00b67f09SDavid van Moolenbroek    } else {
1069*00b67f09SDavid van Moolenbroek        print "readline-path: $readline_path\n";
1070*00b67f09SDavid van Moolenbroek    }
1071*00b67f09SDavid van Moolenbroek    if ($use_idn eq "no") {
1072*00b67f09SDavid van Moolenbroek        print "idn: disabled\n";
1073*00b67f09SDavid van Moolenbroek    } else {
1074*00b67f09SDavid van Moolenbroek        print "idn-path: $idn_path\n";
1075*00b67f09SDavid van Moolenbroek        if ($iconv_path ne " --idn-- ") {
1076*00b67f09SDavid van Moolenbroek            print "iconv-path: $iconv_path\n";
1077*00b67f09SDavid van Moolenbroek        }
1078*00b67f09SDavid van Moolenbroek    }
1079*00b67f09SDavid van Moolenbroek    if ($use_python eq "no") {
1080*00b67f09SDavid van Moolenbroek        print "python: disabled\n";
1081*00b67f09SDavid van Moolenbroek    } else {
1082*00b67f09SDavid van Moolenbroek        print "python-command: $python_command\n";
1083*00b67f09SDavid van Moolenbroek    }
1084*00b67f09SDavid van Moolenbroek    print "vcredist-path: $vcredist_path\n";
1085*00b67f09SDavid van Moolenbroek}
1086*00b67f09SDavid van Moolenbroek
1087*00b67f09SDavid van Moolenbroek# Check environment
1088*00b67f09SDavid van Moolenbroek
1089*00b67f09SDavid van Moolenbroek# infer vcredist when not given
1090*00b67f09SDavid van Moolenbroekif ($vcredist_path eq " --infer-- ") {
1091*00b67f09SDavid van Moolenbroek    if ($verbose) {
1092*00b67f09SDavid van Moolenbroek        print "trying to infer vcredist path from build environment\n";
1093*00b67f09SDavid van Moolenbroek    }
1094*00b67f09SDavid van Moolenbroek
1095*00b67f09SDavid van Moolenbroek    my @vcpaths = {};
1096*00b67f09SDavid van Moolenbroek    push(@vcpaths, $ENV{"VCRedistPath"}) if ($ENV{"VCRedistPath"} ne "");
1097*00b67f09SDavid van Moolenbroek    push(@vcpaths, File::Spec->catfile( cwd(), "..", ".." ));
1098*00b67f09SDavid van Moolenbroek
1099*00b67f09SDavid van Moolenbroek    if ($ENV{"FrameworkSDKDir"} ne "" && $want_win32 eq "yes") {
1100*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"},
1101*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1102*00b67f09SDavid van Moolenbroek                                           "vcredist_x86"));
1103*00b67f09SDavid van Moolenbroek    } elsif ($ENV{"FrameworkSDKDir"} ne "" && $want_x64 eq "yes") {
1104*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"FrameworkSDKDir"},
1105*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1106*00b67f09SDavid van Moolenbroek                                           "vcredist_x64"));
1107*00b67f09SDavid van Moolenbroek    }
1108*00b67f09SDavid van Moolenbroek
1109*00b67f09SDavid van Moolenbroek    if ($ENV{"WindowsSDKDir"} ne "" && $want_win32 eq "yes") {
1110*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"},
1111*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1112*00b67f09SDavid van Moolenbroek                                           "vcredist_x86"));
1113*00b67f09SDavid van Moolenbroek    } elsif ($ENV{"WindowsSDKDir"} ne "" && $want_x64 eq "yes") {
1114*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir"},
1115*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1116*00b67f09SDavid van Moolenbroek                                           "vcredist_x64"));
1117*00b67f09SDavid van Moolenbroek    }
1118*00b67f09SDavid van Moolenbroek
1119*00b67f09SDavid van Moolenbroek    if ($ENV{"WindowsSDKDir_old"} ne "" && $want_win32 eq "yes") {
1120*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"},
1121*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1122*00b67f09SDavid van Moolenbroek                                           "vcredist_x86"));
1123*00b67f09SDavid van Moolenbroek    } elsif ($ENV{"WindowsSDKDir_old"} ne "" && $want_x64 eq "yes") {
1124*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"WindowsSDKDir_old"},
1125*00b67f09SDavid van Moolenbroek                                           "BootStrapper", "Packages",
1126*00b67f09SDavid van Moolenbroek                                           "vcredist_x64"));
1127*00b67f09SDavid van Moolenbroek    }
1128*00b67f09SDavid van Moolenbroek
1129*00b67f09SDavid van Moolenbroek    if ($ENV{"VCINSTALLDIR"}) {
1130*00b67f09SDavid van Moolenbroek        push(@vcpaths, File::Spec->catfile($ENV{"VCINSTALLDIR"},
1131*00b67f09SDavid van Moolenbroek                                           "redist", "1033"));
1132*00b67f09SDavid van Moolenbroek    }
1133*00b67f09SDavid van Moolenbroek
1134*00b67f09SDavid van Moolenbroek    my $rfile;
1135*00b67f09SDavid van Moolenbroek    if ($want_win32 eq "yes") {
1136*00b67f09SDavid van Moolenbroek        $rfile = "vcredist_x86.exe";
1137*00b67f09SDavid van Moolenbroek    } else {
1138*00b67f09SDavid van Moolenbroek        $rfile = "vcredist_x64.exe";
1139*00b67f09SDavid van Moolenbroek    }
1140*00b67f09SDavid van Moolenbroek
1141*00b67f09SDavid van Moolenbroek    foreach (@vcpaths) {
1142*00b67f09SDavid van Moolenbroek        my $vp = File::Spec->catfile($_, $rfile);
1143*00b67f09SDavid van Moolenbroek        if (-f $vp) {
1144*00b67f09SDavid van Moolenbroek            $vcredist_path = $vp;
1145*00b67f09SDavid van Moolenbroek            last;
1146*00b67f09SDavid van Moolenbroek        }
1147*00b67f09SDavid van Moolenbroek    }
1148*00b67f09SDavid van Moolenbroek
1149*00b67f09SDavid van Moolenbroek    if ($vcredist_path eq " --infer-- ") {
1150*00b67f09SDavid van Moolenbroek        die "with-vcredist is REQUIRED\n";
1151*00b67f09SDavid van Moolenbroek    }
1152*00b67f09SDavid van Moolenbroek
1153*00b67f09SDavid van Moolenbroek    if ($verbose) {
1154*00b67f09SDavid van Moolenbroek        print "found vcredist at " . $vcredist_path . "\n";
1155*00b67f09SDavid van Moolenbroek    }
1156*00b67f09SDavid van Moolenbroek}
1157*00b67f09SDavid van Moolenbroek
1158*00b67f09SDavid van Moolenbroekmy $msc_ver = 0;
1159*00b67f09SDavid van Moolenbroek
1160*00b67f09SDavid van Moolenbroekopen F, ">mscver.c" || die $!;
1161*00b67f09SDavid van Moolenbroekprint F << 'EOF';
1162*00b67f09SDavid van Moolenbroek#include <windows.h>
1163*00b67f09SDavid van Moolenbroek#include <stdio.h>
1164*00b67f09SDavid van Moolenbroek
1165*00b67f09SDavid van Moolenbroekint
1166*00b67f09SDavid van Moolenbroekmain(void)
1167*00b67f09SDavid van Moolenbroek{
1168*00b67f09SDavid van Moolenbroek        printf("%d\n", _MSC_VER);
1169*00b67f09SDavid van Moolenbroek        return(0);
1170*00b67f09SDavid van Moolenbroek}
1171*00b67f09SDavid van MoolenbroekEOF
1172*00b67f09SDavid van Moolenbroekclose F;
1173*00b67f09SDavid van Moolenbroekmy $compret = `cl /nologo /MD mscver.c`;
1174*00b67f09SDavid van Moolenbroekif (grep { -f and -x } ".\\mscver.exe") {
1175*00b67f09SDavid van Moolenbroek    $msc_ver = `.\\mscver.exe`;
1176*00b67f09SDavid van Moolenbroek} else {
1177*00b67f09SDavid van Moolenbroek    die "can't get _MSC_VER value: $compret\n";
1178*00b67f09SDavid van Moolenbroek}
1179*00b67f09SDavid van Moolenbroekif ($verbose) {
1180*00b67f09SDavid van Moolenbroek    print "_MSV_VER == $msc_ver\n";
1181*00b67f09SDavid van Moolenbroek}
1182*00b67f09SDavid van Moolenbroekif ($msc_ver < 1600) {
1183*00b67f09SDavid van Moolenbroek    print STDERR "warning: old version of C++ compiler/Visual Studio\n";
1184*00b67f09SDavid van Moolenbroek    print STDERR "only the legacy (cf legacy\\win32-build.txt) will work\n";
1185*00b67f09SDavid van Moolenbroek}
1186*00b67f09SDavid van Moolenbroek
1187*00b67f09SDavid van Moolenbroek# gen single threaded for < VS 2005
1188*00b67f09SDavid van Moolenbroek
1189*00b67f09SDavid van Moolenbroekif ($msc_ver < 1400) {
1190*00b67f09SDavid van Moolenbroek    $configvar{"COPTML"} = "/ML";
1191*00b67f09SDavid van Moolenbroek    $configvar{"COPTMLD"} = "/MLD";
1192*00b67f09SDavid van Moolenbroek}
1193*00b67f09SDavid van Moolenbroek
1194*00b67f09SDavid van Moolenbroek# /GX deprecated in VS 2005
1195*00b67f09SDavid van Moolenbroek
1196*00b67f09SDavid van Moolenbroekif ($msc_ver < 1400) {
1197*00b67f09SDavid van Moolenbroek    $configvar{"COPTX"} = "/GX";
1198*00b67f09SDavid van Moolenbroek} else {
1199*00b67f09SDavid van Moolenbroek    $configvar{"COPTX"} = "/EHsc";
1200*00b67f09SDavid van Moolenbroek}
1201*00b67f09SDavid van Moolenbroek
1202*00b67f09SDavid van Moolenbroek# /YX for < VS 2005
1203*00b67f09SDavid van Moolenbroek
1204*00b67f09SDavid van Moolenbroekif ($msc_ver < 1400) {
1205*00b67f09SDavid van Moolenbroek    $configvar{"COPTY"} = "/YX";
1206*00b67f09SDavid van Moolenbroek}
1207*00b67f09SDavid van Moolenbroek
1208*00b67f09SDavid van Moolenbroek# backtrace for >= VS 2012
1209*00b67f09SDavid van Moolenbroek
1210*00b67f09SDavid van Moolenbroekif ($msc_ver >= 1700) {
1211*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_USEBACKTRACE"} = 1;
1212*00b67f09SDavid van Moolenbroek}
1213*00b67f09SDavid van Moolenbroek
1214*00b67f09SDavid van Moolenbroek# no version of MSVS supports strcasestr() yet
1215*00b67f09SDavid van Moolenbroek$configdefp{"ISC_PLATFORM_NEEDSTRCASESTR"} = 1;
1216*00b67f09SDavid van Moolenbroek
1217*00b67f09SDavid van Moolenbroek# warn when cross compiling
1218*00b67f09SDavid van Moolenbroek
1219*00b67f09SDavid van Moolenbroekif ($cross_compile eq "yes") {
1220*00b67f09SDavid van Moolenbroek    if ($want_x64 eq "yes") {
1221*00b67f09SDavid van Moolenbroek        $configvar{"BUILD_PLATFORM"} = "Win32";
1222*00b67f09SDavid van Moolenbroek        $configvar{"BUILD_MACHINE"} = "/machine:X86";
1223*00b67f09SDavid van Moolenbroek    }
1224*00b67f09SDavid van Moolenbroek    if ($want_win32 eq "yes") {
1225*00b67f09SDavid van Moolenbroek        $configvar{"BUILD_PLATFORM"} = "x64";
1226*00b67f09SDavid van Moolenbroek        $configvar{"BUILD_MACHINE"} = "/machine:X64";
1227*00b67f09SDavid van Moolenbroek    }
1228*00b67f09SDavid van Moolenbroek} elsif ($want_win32 eq "yes") {
1229*00b67f09SDavid van Moolenbroek    open F, ">cross.c" || die $!;
1230*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1231*00b67f09SDavid van Moolenbroek#include <windows.h>
1232*00b67f09SDavid van Moolenbroek#include <stdio.h>
1233*00b67f09SDavid van Moolenbroek
1234*00b67f09SDavid van Moolenbroekint
1235*00b67f09SDavid van Moolenbroekmain(void)
1236*00b67f09SDavid van Moolenbroek{
1237*00b67f09SDavid van Moolenbroek#ifdef _WIN64
1238*00b67f09SDavid van Moolenbroek        fprintf(stderr, "compiling for x64 when win32 was asked?!\n");
1239*00b67f09SDavid van Moolenbroek#endif
1240*00b67f09SDavid van Moolenbroek        return(0);
1241*00b67f09SDavid van Moolenbroek}
1242*00b67f09SDavid van MoolenbroekEOF
1243*00b67f09SDavid van Moolenbroek    close F;
1244*00b67f09SDavid van Moolenbroek    my $compret = `cl /nologo /MD cross.c`;
1245*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\cross.exe") {
1246*00b67f09SDavid van Moolenbroek        my $cross = `.\\cross.exe`;
1247*00b67f09SDavid van Moolenbroek        if ($cross) {
1248*00b67f09SDavid van Moolenbroek            print STDERR $cross;
1249*00b67f09SDavid van Moolenbroek        }
1250*00b67f09SDavid van Moolenbroek    } else {
1251*00b67f09SDavid van Moolenbroek        print STDERR "can't check cross compile: $compret\n";
1252*00b67f09SDavid van Moolenbroek    }
1253*00b67f09SDavid van Moolenbroek} else {
1254*00b67f09SDavid van Moolenbroek    open F, ">cross.c" || die $!;
1255*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1256*00b67f09SDavid van Moolenbroek#include <windows.h>
1257*00b67f09SDavid van Moolenbroek#include <stdio.h>
1258*00b67f09SDavid van Moolenbroek
1259*00b67f09SDavid van Moolenbroekint
1260*00b67f09SDavid van Moolenbroekmain(void)
1261*00b67f09SDavid van Moolenbroek{
1262*00b67f09SDavid van Moolenbroek#ifndef _WIN64
1263*00b67f09SDavid van Moolenbroek        fprintf(stderr, "compiling in 32 bits when x64 was asked?!\n");
1264*00b67f09SDavid van Moolenbroek#endif
1265*00b67f09SDavid van Moolenbroek        return(0);
1266*00b67f09SDavid van Moolenbroek}
1267*00b67f09SDavid van MoolenbroekEOF
1268*00b67f09SDavid van Moolenbroek    close F;
1269*00b67f09SDavid van Moolenbroek    my $compret = `cl /nologo /MD cross.c`;
1270*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\cross.exe") {
1271*00b67f09SDavid van Moolenbroek        my $cross = `.\\cross.exe`;
1272*00b67f09SDavid van Moolenbroek        if ($cross) {
1273*00b67f09SDavid van Moolenbroek            print STDERR $cross;
1274*00b67f09SDavid van Moolenbroek        }
1275*00b67f09SDavid van Moolenbroek    } else {
1276*00b67f09SDavid van Moolenbroek        print STDERR "can't check cross compile: $compret\n";
1277*00b67f09SDavid van Moolenbroek    }
1278*00b67f09SDavid van Moolenbroek}
1279*00b67f09SDavid van Moolenbroek
1280*00b67f09SDavid van Moolenbroek# Process arguments
1281*00b67f09SDavid van Moolenbroek
1282*00b67f09SDavid van Moolenbroek# enable-intrinsics
1283*00b67f09SDavid van Moolenbroekif ($enable_intrinsics eq "yes") {
1284*00b67f09SDavid van Moolenbroek    $configcond{"ATOMIC"} = 1;
1285*00b67f09SDavid van Moolenbroek    $configvar{"INTRINSIC"} = "true";
1286*00b67f09SDavid van Moolenbroek    $configvar{"COPTI"} = "/Oi";
1287*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_HAVEXADD"} = 1;
1288*00b67f09SDavid van Moolenbroek    if ($want_x64 eq "yes") {
1289*00b67f09SDavid van Moolenbroek        $configdefp{"ISC_PLATFORM_HAVEXADDQ"} = 1;
1290*00b67f09SDavid van Moolenbroek    }
1291*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_HAVEATOMICSTORE"} = 1;
1292*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_HAVECMPXCHG"} = 1;
1293*00b67f09SDavid van Moolenbroek} else {
1294*00b67f09SDavid van Moolenbroek    $configvar{"INTRINSIC"} = "false";
1295*00b67f09SDavid van Moolenbroek}
1296*00b67f09SDavid van Moolenbroek
1297*00b67f09SDavid van Moolenbroek# enable-native-pkcs11
1298*00b67f09SDavid van Moolenbroekif ($enable_native_pkcs11 eq "yes") {
1299*00b67f09SDavid van Moolenbroek    if ($use_openssl eq "auto") {
1300*00b67f09SDavid van Moolenbroek        $use_openssl = "no";
1301*00b67f09SDavid van Moolenbroek    }
1302*00b67f09SDavid van Moolenbroek    if ($use_openssl ne "no") {
1303*00b67f09SDavid van Moolenbroek        die "can't have both OpenSSL and native PKCS#11\n";
1304*00b67f09SDavid van Moolenbroek    }
1305*00b67f09SDavid van Moolenbroek    if ($use_pkcs11 ne "yes") {
1306*00b67f09SDavid van Moolenbroek        if ($verbose) {
1307*00b67f09SDavid van Moolenbroek            print "native PKCS#11 support: force with-pkcs11\n";
1308*00b67f09SDavid van Moolenbroek        }
1309*00b67f09SDavid van Moolenbroek        $use_pkcs11 = "yes";
1310*00b67f09SDavid van Moolenbroek    }
1311*00b67f09SDavid van Moolenbroek    if ($pkcs11_path eq "unknown") {
1312*00b67f09SDavid van Moolenbroek        if ($verbose) {
1313*00b67f09SDavid van Moolenbroek            print "native PKCS#11 support: no PKCS#11 provider defined?\n";
1314*00b67f09SDavid van Moolenbroek        }
1315*00b67f09SDavid van Moolenbroek    }
1316*00b67f09SDavid van Moolenbroek    $configdefd{"CRYPTO"} = "PKCS11CRYPTO";
1317*00b67f09SDavid van Moolenbroek    if ($use_ecdsa eq "no") {
1318*00b67f09SDavid van Moolenbroek        if ($verbose) {
1319*00b67f09SDavid van Moolenbroek            print "no ECDSA support in native PKCS#11\n";
1320*00b67f09SDavid van Moolenbroek        }
1321*00b67f09SDavid van Moolenbroek    } else {
1322*00b67f09SDavid van Moolenbroek        if ($verbose) {
1323*00b67f09SDavid van Moolenbroek            print "enabled ECDSA support in native PKCS#11\n";
1324*00b67f09SDavid van Moolenbroek        }
1325*00b67f09SDavid van Moolenbroek        $configdefh{"HAVE_PKCS11_ECDSA"} = 1;
1326*00b67f09SDavid van Moolenbroek    }
1327*00b67f09SDavid van Moolenbroek    if ($use_gost eq "no") {
1328*00b67f09SDavid van Moolenbroek        if ($verbose) {
1329*00b67f09SDavid van Moolenbroek            print "no GOST support in native PKCS#11\n";
1330*00b67f09SDavid van Moolenbroek        }
1331*00b67f09SDavid van Moolenbroek    } else {
1332*00b67f09SDavid van Moolenbroek        if ($verbose) {
1333*00b67f09SDavid van Moolenbroek            print "enabled GOST support in native PKCS#11\n";
1334*00b67f09SDavid van Moolenbroek        }
1335*00b67f09SDavid van Moolenbroek        $configdefh{"HAVE_PKCS11_GOST"} = 1;
1336*00b67f09SDavid van Moolenbroek    }
1337*00b67f09SDavid van Moolenbroek    if ($use_aes eq "no") {
1338*00b67f09SDavid van Moolenbroek        if ($verbose) {
1339*00b67f09SDavid van Moolenbroek            print "no AES support in native PKCS#11\n";
1340*00b67f09SDavid van Moolenbroek        }
1341*00b67f09SDavid van Moolenbroek    } else {
1342*00b67f09SDavid van Moolenbroek        if ($verbose) {
1343*00b67f09SDavid van Moolenbroek            print "enabled AES support in native PKCS#11\n";
1344*00b67f09SDavid van Moolenbroek        }
1345*00b67f09SDavid van Moolenbroek        $use_aes = "pkcs11";
1346*00b67f09SDavid van Moolenbroek    }
1347*00b67f09SDavid van Moolenbroek}
1348*00b67f09SDavid van Moolenbroek
1349*00b67f09SDavid van Moolenbroek# enable-filter-aaaa
1350*00b67f09SDavid van Moolenbroekif ($enable_filter_aaaa eq "yes") {
1351*00b67f09SDavid van Moolenbroek    $configdefh{"ALLOW_FILTER_AAAA"} = 1;
1352*00b67f09SDavid van Moolenbroek}
1353*00b67f09SDavid van Moolenbroek
1354*00b67f09SDavid van Moolenbroek# enable-fixed-rrset
1355*00b67f09SDavid van Moolenbroekif ($enable_fixed_rrset eq "yes") {
1356*00b67f09SDavid van Moolenbroek    $configdefh{"DNS_RDATASET_FIXED"} = 1;
1357*00b67f09SDavid van Moolenbroek}
1358*00b67f09SDavid van Moolenbroek
1359*00b67f09SDavid van Moolenbroek# enable-rpz-nsip
1360*00b67f09SDavid van Moolenbroekif ($enable_rpz_nsip ne "no") {
1361*00b67f09SDavid van Moolenbroek    $configdefh{"ENABLE_RPZ_NSIP"} = 1;
1362*00b67f09SDavid van Moolenbroek}
1363*00b67f09SDavid van Moolenbroek
1364*00b67f09SDavid van Moolenbroek# enable-rpz-nsdname
1365*00b67f09SDavid van Moolenbroekif ($enable_rpz_nsdname ne "no") {
1366*00b67f09SDavid van Moolenbroek    $configdefh{"ENABLE_RPZ_NSDNAME"} = 1;
1367*00b67f09SDavid van Moolenbroek}
1368*00b67f09SDavid van Moolenbroek
1369*00b67f09SDavid van Moolenbroek# enable-sit
1370*00b67f09SDavid van Moolenbroekif ($enable_sit ne "no") {
1371*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_USESIT"} = 1;
1372*00b67f09SDavid van Moolenbroek}
1373*00b67f09SDavid van Moolenbroek
1374*00b67f09SDavid van Moolenbroek# with-tests
1375*00b67f09SDavid van Moolenbroekif ($use_tests eq "yes") {
1376*00b67f09SDavid van Moolenbroek    $configcond{"TESTS"} = 1;
1377*00b67f09SDavid van Moolenbroek}
1378*00b67f09SDavid van Moolenbroek
1379*00b67f09SDavid van Moolenbroek# with-extra-tests
1380*00b67f09SDavid van Moolenbroekif ($use_xtests eq "yes") {
1381*00b67f09SDavid van Moolenbroek    $configcond{"XTESTS"} = 1;
1382*00b67f09SDavid van Moolenbroek}
1383*00b67f09SDavid van Moolenbroek
1384*00b67f09SDavid van Moolenbroek# with-samples
1385*00b67f09SDavid van Moolenbroekif ($use_samples eq "yes") {
1386*00b67f09SDavid van Moolenbroek    $configcond{"SAMPLES"} = 1;
1387*00b67f09SDavid van Moolenbroek}
1388*00b67f09SDavid van Moolenbroek
1389*00b67f09SDavid van Moolenbroek# with-openssl
1390*00b67f09SDavid van Moolenbroekif ($use_openssl eq "no") {
1391*00b67f09SDavid van Moolenbroek    if ($verbose) {
1392*00b67f09SDavid van Moolenbroek        print "OpenSSL library is disabled\n";
1393*00b67f09SDavid van Moolenbroek    }
1394*00b67f09SDavid van Moolenbroek} elsif ($use_openssl eq "auto") {
1395*00b67f09SDavid van Moolenbroek    if ($verbose) {
1396*00b67f09SDavid van Moolenbroek        print "checking for an OpenSSL built directory at sibling root\n";
1397*00b67f09SDavid van Moolenbroek    }
1398*00b67f09SDavid van Moolenbroek    opendir DIR, $openssl_path || die "No Directory: $!\n";
1399*00b67f09SDavid van Moolenbroek    my @dirlist = grep (/^openssl-[0-9]+\.[0-9]+\.[0-9]+[a-z]{0,1}$/i,
1400*00b67f09SDavid van Moolenbroek                        readdir(DIR));
1401*00b67f09SDavid van Moolenbroek    closedir(DIR);
1402*00b67f09SDavid van Moolenbroek
1403*00b67f09SDavid van Moolenbroek    # Make sure we have something
1404*00b67f09SDavid van Moolenbroek    if (scalar(@dirlist) == 0) {
1405*00b67f09SDavid van Moolenbroek        die "can't find an OpenSSL at sibling root\n";
1406*00b67f09SDavid van Moolenbroek    }
1407*00b67f09SDavid van Moolenbroek    # Now see if we have a directory or just a file.
1408*00b67f09SDavid van Moolenbroek    # Make sure we are case insensitive
1409*00b67f09SDavid van Moolenbroek    my $file;
1410*00b67f09SDavid van Moolenbroek    foreach $file (sort {uc($b) cmp uc($a)} @dirlist) {
1411*00b67f09SDavid van Moolenbroek        if (-f File::Spec->catfile($openssl_path,
1412*00b67f09SDavid van Moolenbroek                                   $file,
1413*00b67f09SDavid van Moolenbroek                                   "inc32\\openssl",
1414*00b67f09SDavid van Moolenbroek                                   "opensslv.h")) {
1415*00b67f09SDavid van Moolenbroek            $openssl_path = File::Spec->catdir($openssl_path, $file);
1416*00b67f09SDavid van Moolenbroek            $use_openssl = "yes";
1417*00b67f09SDavid van Moolenbroek            last;
1418*00b67f09SDavid van Moolenbroek        }
1419*00b67f09SDavid van Moolenbroek    }
1420*00b67f09SDavid van Moolenbroek
1421*00b67f09SDavid van Moolenbroek    # If we have one use it otherwise report the error
1422*00b67f09SDavid van Moolenbroek    if ($use_openssl eq "auto") {
1423*00b67f09SDavid van Moolenbroek        die "can't find an OpenSSL built directory at sibling root\n";
1424*00b67f09SDavid van Moolenbroek    }
1425*00b67f09SDavid van Moolenbroek}
1426*00b67f09SDavid van Moolenbroek# falls into (so no else)
1427*00b67f09SDavid van Moolenbroekif ($use_openssl eq "yes") {
1428*00b67f09SDavid van Moolenbroek    $openssl_path = File::Spec->rel2abs($openssl_path);
1429*00b67f09SDavid van Moolenbroek    if ($verbose) {
1430*00b67f09SDavid van Moolenbroek        print "checking for OpenSSL built directory at \"$openssl_path\"\n";
1431*00b67f09SDavid van Moolenbroek    }
1432*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($openssl_path,
1433*00b67f09SDavid van Moolenbroek                                "inc32\\openssl",
1434*00b67f09SDavid van Moolenbroek                                "opensslv.h")) {
1435*00b67f09SDavid van Moolenbroek        die "can't find OpenSSL opensslv.h include\n";
1436*00b67f09SDavid van Moolenbroek    }
1437*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($openssl_path, "out32dll", "libeay32.lib")) {
1438*00b67f09SDavid van Moolenbroek        die "can't find OpenSSL libeay32.lib library\n";
1439*00b67f09SDavid van Moolenbroek    }
1440*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($openssl_path, "out32dll", "libeay32.dll")) {
1441*00b67f09SDavid van Moolenbroek        die "can't find OpenSSL libeay32.dll DLL\n";
1442*00b67f09SDavid van Moolenbroek    }
1443*00b67f09SDavid van Moolenbroek    my $openssl_inc = File::Spec->catdir($openssl_path, "inc32");
1444*00b67f09SDavid van Moolenbroek    my $openssl_libdir = File::Spec->catdir($openssl_path, "out32dll");
1445*00b67f09SDavid van Moolenbroek    my $openssl_lib = File::Spec->catfile($openssl_libdir, "libeay32.lib");
1446*00b67f09SDavid van Moolenbroek    my $openssl_dll = File::Spec->catfile($openssl_libdir, "libeay32.dll");
1447*00b67f09SDavid van Moolenbroek
1448*00b67f09SDavid van Moolenbroek    $configcond{"OPENSSL"} = 1;
1449*00b67f09SDavid van Moolenbroek    $configdefd{"CRYPTO"} = "OPENSSL";
1450*00b67f09SDavid van Moolenbroek    $configvar{"OPENSSL_PATH"} = "$openssl_path";
1451*00b67f09SDavid van Moolenbroek    $configinc{"OPENSSL_INC"} = "$openssl_inc";
1452*00b67f09SDavid van Moolenbroek    $configlib{"OPENSSL_LIB"} = "$openssl_lib";
1453*00b67f09SDavid van Moolenbroek    $configdll{"OPENSSL_DLL"} = "$openssl_dll";
1454*00b67f09SDavid van Moolenbroek    if (-f File::Spec->catfile($openssl_inc, "openssl", "dsa.h")) {
1455*00b67f09SDavid van Moolenbroek        $configdefh{"HAVE_OPENSSL_DSA"} = 1;
1456*00b67f09SDavid van Moolenbroek    } elsif ($verbose) {
1457*00b67f09SDavid van Moolenbroek        print "OpenSSL DSA support is disabled\n";
1458*00b67f09SDavid van Moolenbroek    }
1459*00b67f09SDavid van Moolenbroek}
1460*00b67f09SDavid van Moolenbroek
1461*00b67f09SDavid van Moolenbroek# check OpenSSL
1462*00b67f09SDavid van Moolenbroekif ($use_openssl eq "yes") {
1463*00b67f09SDavid van Moolenbroek    if ($verbose) {
1464*00b67f09SDavid van Moolenbroek        print "checking whether linking with OpenSSL works\n";
1465*00b67f09SDavid van Moolenbroek    }
1466*00b67f09SDavid van Moolenbroek    my $dll = $configdll{"OPENSSL_DLL"};
1467*00b67f09SDavid van Moolenbroek    my $ret = `copy "$dll" .`;
1468*00b67f09SDavid van Moolenbroek    if ($? != 0) {
1469*00b67f09SDavid van Moolenbroek        die "Can't copy OpenSSL DLL to working directory: $ret\n";
1470*00b67f09SDavid van Moolenbroek    }
1471*00b67f09SDavid van Moolenbroek    open F, ">testossl.c" || die $!;
1472*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1473*00b67f09SDavid van Moolenbroek#include <openssl/err.h>
1474*00b67f09SDavid van Moolenbroek
1475*00b67f09SDavid van Moolenbroekint
1476*00b67f09SDavid van Moolenbroekmain(void)
1477*00b67f09SDavid van Moolenbroek{
1478*00b67f09SDavid van Moolenbroek        ERR_clear_error();
1479*00b67f09SDavid van Moolenbroek        return(0);
1480*00b67f09SDavid van Moolenbroek}
1481*00b67f09SDavid van MoolenbroekEOF
1482*00b67f09SDavid van Moolenbroek    close F;
1483*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1484*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1485*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testossl.c "$library"`;
1486*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testossl.exe") {
1487*00b67f09SDavid van Moolenbroek        `.\\testossl.exe`;
1488*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1489*00b67f09SDavid van Moolenbroek            die "OpenSSL test failed\n";
1490*00b67f09SDavid van Moolenbroek        }
1491*00b67f09SDavid van Moolenbroek    } else {
1492*00b67f09SDavid van Moolenbroek        die "can't compile OpenSSL test: $compret\n";
1493*00b67f09SDavid van Moolenbroek    }
1494*00b67f09SDavid van Moolenbroek}
1495*00b67f09SDavid van Moolenbroek
1496*00b67f09SDavid van Moolenbroek# check OpenSSL version
1497*00b67f09SDavid van Moolenbroekif ($use_openssl eq "yes") {
1498*00b67f09SDavid van Moolenbroek    if ($verbose) {
1499*00b67f09SDavid van Moolenbroek        printf "checking OpenSSL library version\n";
1500*00b67f09SDavid van Moolenbroek    }
1501*00b67f09SDavid van Moolenbroek    open F, ">testosslv.c" || die $!;
1502*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1503*00b67f09SDavid van Moolenbroek#include <stdio.h>
1504*00b67f09SDavid van Moolenbroek#include <openssl/opensslv.h>
1505*00b67f09SDavid van Moolenbroek
1506*00b67f09SDavid van Moolenbroekint main() {
1507*00b67f09SDavid van Moolenbroek        if ((OPENSSL_VERSION_NUMBER >= 0x009070cfL &&
1508*00b67f09SDavid van Moolenbroek             OPENSSL_VERSION_NUMBER < 0x00908000L) ||
1509*00b67f09SDavid van Moolenbroek             OPENSSL_VERSION_NUMBER >= 0x0090804fL)
1510*00b67f09SDavid van Moolenbroek                return (0);
1511*00b67f09SDavid van Moolenbroek        printf("\n\nFound   OPENSSL_VERSION_NUMBER %#010x\n",
1512*00b67f09SDavid van Moolenbroek               OPENSSL_VERSION_NUMBER);
1513*00b67f09SDavid van Moolenbroek        printf("Require OPENSSL_VERSION_NUMBER 0x009070cf or greater (0.9.7l)\n"
1514*00b67f09SDavid van Moolenbroek               "Require OPENSSL_VERSION_NUMBER 0x0090804f or greater (0.9.8d)\n\n");
1515*00b67f09SDavid van Moolenbroek        return (1);
1516*00b67f09SDavid van Moolenbroek}
1517*00b67f09SDavid van MoolenbroekEOF
1518*00b67f09SDavid van Moolenbroek    close F;
1519*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1520*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1521*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testosslv.c "$library"`;
1522*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testosslv.exe") {
1523*00b67f09SDavid van Moolenbroek        `.\\testosslv.exe`;
1524*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1525*00b67f09SDavid van Moolenbroek            die "OpenSSL version test failed\n";
1526*00b67f09SDavid van Moolenbroek        }
1527*00b67f09SDavid van Moolenbroek    } else {
1528*00b67f09SDavid van Moolenbroek        die "can't compile OpenSSL version test: $compret\n";
1529*00b67f09SDavid van Moolenbroek    }
1530*00b67f09SDavid van Moolenbroek}
1531*00b67f09SDavid van Moolenbroek
1532*00b67f09SDavid van Moolenbroek# check EVP_sha256 / EVP_sha384 / EVP_sha512
1533*00b67f09SDavid van Moolenbroek
1534*00b67f09SDavid van Moolenbroekif ($use_openssl eq "yes") {
1535*00b67f09SDavid van Moolenbroek    if ($verbose) {
1536*00b67f09SDavid van Moolenbroek        printf "checking for EVP_sha256\n";
1537*00b67f09SDavid van Moolenbroek    }
1538*00b67f09SDavid van Moolenbroek    open F, ">testsha256.c" || die $!;
1539*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1540*00b67f09SDavid van Moolenbroekextern void *EVP_sha256();
1541*00b67f09SDavid van Moolenbroek
1542*00b67f09SDavid van Moolenbroekint main() {
1543*00b67f09SDavid van Moolenbroek        return EVP_sha256() != 0;
1544*00b67f09SDavid van Moolenbroek}
1545*00b67f09SDavid van MoolenbroekEOF
1546*00b67f09SDavid van Moolenbroek    close F;
1547*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1548*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD testsha256.c "$library"`;
1549*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testsha256.exe") {
1550*00b67f09SDavid van Moolenbroek        `.\\testsha256.exe`;
1551*00b67f09SDavid van Moolenbroek        if ($? == 0) {
1552*00b67f09SDavid van Moolenbroek            if ($verbose) {
1553*00b67f09SDavid van Moolenbroek                print "EVP_sha256 test failed: disabling EVP_sha256\n";
1554*00b67f09SDavid van Moolenbroek            }
1555*00b67f09SDavid van Moolenbroek            $use_ecdsa = "no";
1556*00b67f09SDavid van Moolenbroek            $enable_openssl_hash = "no";
1557*00b67f09SDavid van Moolenbroek        } else {
1558*00b67f09SDavid van Moolenbroek            $configdefh{"HAVE_EVP_SHA256"} = 1;
1559*00b67f09SDavid van Moolenbroek        }
1560*00b67f09SDavid van Moolenbroek    } else {
1561*00b67f09SDavid van Moolenbroek        if ($verbose) {
1562*00b67f09SDavid van Moolenbroek            print "can't compile EVP_sha256 test: $compret\n";
1563*00b67f09SDavid van Moolenbroek            print "disabling EVP_sha256\n";
1564*00b67f09SDavid van Moolenbroek        }
1565*00b67f09SDavid van Moolenbroek        $use_ecdsa = "no";
1566*00b67f09SDavid van Moolenbroek        $enable_openssl_hash = "no";
1567*00b67f09SDavid van Moolenbroek    }
1568*00b67f09SDavid van Moolenbroek
1569*00b67f09SDavid van Moolenbroek    if ($verbose) {
1570*00b67f09SDavid van Moolenbroek        printf "checking for EVP_sha384\n";
1571*00b67f09SDavid van Moolenbroek    }
1572*00b67f09SDavid van Moolenbroek    open F, ">testsha384.c" || die $!;
1573*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1574*00b67f09SDavid van Moolenbroekextern void *EVP_sha384();
1575*00b67f09SDavid van Moolenbroek
1576*00b67f09SDavid van Moolenbroekint main() {
1577*00b67f09SDavid van Moolenbroek        return EVP_sha384() != 0;
1578*00b67f09SDavid van Moolenbroek}
1579*00b67f09SDavid van MoolenbroekEOF
1580*00b67f09SDavid van Moolenbroek    close F;
1581*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD testsha384.c "$library"`;
1582*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testsha384.exe") {
1583*00b67f09SDavid van Moolenbroek        `.\\testsha384.exe`;
1584*00b67f09SDavid van Moolenbroek        if ($? == 0) {
1585*00b67f09SDavid van Moolenbroek            if ($verbose) {
1586*00b67f09SDavid van Moolenbroek                print "EVP_sha384 test failed: disabling EVP_sha384\n";
1587*00b67f09SDavid van Moolenbroek            }
1588*00b67f09SDavid van Moolenbroek            $use_ecdsa = "no";
1589*00b67f09SDavid van Moolenbroek            $enable_openssl_hash = "no";
1590*00b67f09SDavid van Moolenbroek        } else {
1591*00b67f09SDavid van Moolenbroek            $configdefh{"HAVE_EVP_SHA384"} = 1;
1592*00b67f09SDavid van Moolenbroek        }
1593*00b67f09SDavid van Moolenbroek    } else {
1594*00b67f09SDavid van Moolenbroek        if ($verbose) {
1595*00b67f09SDavid van Moolenbroek            print "can't compile EVP_sha384 test: $compret\n";
1596*00b67f09SDavid van Moolenbroek            print "disabling EVP_sha384\n";
1597*00b67f09SDavid van Moolenbroek        }
1598*00b67f09SDavid van Moolenbroek        $use_ecdsa = "no";
1599*00b67f09SDavid van Moolenbroek        $enable_openssl_hash = "no";
1600*00b67f09SDavid van Moolenbroek    }
1601*00b67f09SDavid van Moolenbroek
1602*00b67f09SDavid van Moolenbroek    if ($verbose) {
1603*00b67f09SDavid van Moolenbroek        printf "checking for EVP_sha512\n";
1604*00b67f09SDavid van Moolenbroek    }
1605*00b67f09SDavid van Moolenbroek    open F, ">testsha512.c" || die $!;
1606*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1607*00b67f09SDavid van Moolenbroekextern void *EVP_sha512();
1608*00b67f09SDavid van Moolenbroek
1609*00b67f09SDavid van Moolenbroekint main() {
1610*00b67f09SDavid van Moolenbroek        return EVP_sha512() != 0;
1611*00b67f09SDavid van Moolenbroek}
1612*00b67f09SDavid van MoolenbroekEOF
1613*00b67f09SDavid van Moolenbroek    close F;
1614*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD testsha512.c "$library"`;
1615*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testsha512.exe") {
1616*00b67f09SDavid van Moolenbroek        `.\\testsha512.exe`;
1617*00b67f09SDavid van Moolenbroek        if ($? == 0) {
1618*00b67f09SDavid van Moolenbroek            if ($verbose) {
1619*00b67f09SDavid van Moolenbroek                print "EVP_sha512 test failed: disabling EVP_sha512\n";
1620*00b67f09SDavid van Moolenbroek            }
1621*00b67f09SDavid van Moolenbroek        } else {
1622*00b67f09SDavid van Moolenbroek            $configdefh{"HAVE_EVP_SHA512"} = 1;
1623*00b67f09SDavid van Moolenbroek        }
1624*00b67f09SDavid van Moolenbroek    } else {
1625*00b67f09SDavid van Moolenbroek        if ($verbose) {
1626*00b67f09SDavid van Moolenbroek            print "can't compile EVP_sha512 test: $compret\n";
1627*00b67f09SDavid van Moolenbroek            print "disabling EVP_sha512\n";
1628*00b67f09SDavid van Moolenbroek        }
1629*00b67f09SDavid van Moolenbroek    }
1630*00b67f09SDavid van Moolenbroek}
1631*00b67f09SDavid van Moolenbroek
1632*00b67f09SDavid van Moolenbroek# with-ecdsa
1633*00b67f09SDavid van Moolenbroekif ($use_openssl eq "no") {
1634*00b67f09SDavid van Moolenbroek    $use_ecdsa = "no";
1635*00b67f09SDavid van Moolenbroek}
1636*00b67f09SDavid van Moolenbroekif ($use_ecdsa eq "auto") {
1637*00b67f09SDavid van Moolenbroek    if ($verbose) {
1638*00b67f09SDavid van Moolenbroek        print "checking for OpenSSL ECDSA support\n";
1639*00b67f09SDavid van Moolenbroek    }
1640*00b67f09SDavid van Moolenbroek    open F, ">testecdsa.c" || die $!;
1641*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1642*00b67f09SDavid van Moolenbroek#include <openssl/ecdsa.h>
1643*00b67f09SDavid van Moolenbroek#include <openssl/objects.h>
1644*00b67f09SDavid van Moolenbroek
1645*00b67f09SDavid van Moolenbroekint
1646*00b67f09SDavid van Moolenbroekmain(void)
1647*00b67f09SDavid van Moolenbroek{
1648*00b67f09SDavid van Moolenbroek        EC_KEY *ec256, *ec384;
1649*00b67f09SDavid van Moolenbroek
1650*00b67f09SDavid van Moolenbroek        ec256 = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
1651*00b67f09SDavid van Moolenbroek        ec384 = EC_KEY_new_by_curve_name(NID_secp384r1);
1652*00b67f09SDavid van Moolenbroek        if (ec256 == NULL || ec384 == NULL)
1653*00b67f09SDavid van Moolenbroek                return (2);
1654*00b67f09SDavid van Moolenbroek        return (0);
1655*00b67f09SDavid van Moolenbroek}
1656*00b67f09SDavid van MoolenbroekEOF
1657*00b67f09SDavid van Moolenbroek    close F;
1658*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1659*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1660*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testecdsa.c "$library"`;
1661*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testecdsa.exe") {
1662*00b67f09SDavid van Moolenbroek        `.\\testecdsa.exe`;
1663*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1664*00b67f09SDavid van Moolenbroek            if ($verbose) {
1665*00b67f09SDavid van Moolenbroek                print "ECDSA test failed: disabling ECDSA\n";
1666*00b67f09SDavid van Moolenbroek            }
1667*00b67f09SDavid van Moolenbroek            $use_ecdsa = "no";
1668*00b67f09SDavid van Moolenbroek        }
1669*00b67f09SDavid van Moolenbroek    } else {
1670*00b67f09SDavid van Moolenbroek        if ($verbose) {
1671*00b67f09SDavid van Moolenbroek            print "can't compile ECDSA test: $compret\n";
1672*00b67f09SDavid van Moolenbroek            print "disabling ECDSA\n";
1673*00b67f09SDavid van Moolenbroek        }
1674*00b67f09SDavid van Moolenbroek    $use_ecdsa = "no";
1675*00b67f09SDavid van Moolenbroek    }
1676*00b67f09SDavid van Moolenbroek}
1677*00b67f09SDavid van Moolenbroek
1678*00b67f09SDavid van Moolenbroekif ($use_ecdsa ne "no") {
1679*00b67f09SDavid van Moolenbroek    $use_ecdsa = "yes";
1680*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_OPENSSL_ECDSA"} = 1;
1681*00b67f09SDavid van Moolenbroek}
1682*00b67f09SDavid van Moolenbroek
1683*00b67f09SDavid van Moolenbroek# with-gost
1684*00b67f09SDavid van Moolenbroekif ($use_openssl eq "no") {
1685*00b67f09SDavid van Moolenbroek    $use_gost = "no";
1686*00b67f09SDavid van Moolenbroek}
1687*00b67f09SDavid van Moolenbroekif ($use_gost eq "auto") {
1688*00b67f09SDavid van Moolenbroek    if ($verbose) {
1689*00b67f09SDavid van Moolenbroek        print "checking for OpenSSL GOST support\n";
1690*00b67f09SDavid van Moolenbroek    }
1691*00b67f09SDavid van Moolenbroek    open F, ">testgost.c" || die $!;
1692*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1693*00b67f09SDavid van Moolenbroek#include <openssl/conf.h>
1694*00b67f09SDavid van Moolenbroek#include <openssl/engine.h>
1695*00b67f09SDavid van Moolenbroek
1696*00b67f09SDavid van Moolenbroekint
1697*00b67f09SDavid van Moolenbroekmain(void)
1698*00b67f09SDavid van Moolenbroek{
1699*00b67f09SDavid van Moolenbroek#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
1700*00b67f09SDavid van Moolenbroek        ENGINE *e;
1701*00b67f09SDavid van Moolenbroek        EC_KEY *ek;
1702*00b67f09SDavid van Moolenbroek
1703*00b67f09SDavid van Moolenbroek        ek = NULL;
1704*00b67f09SDavid van Moolenbroek        OPENSSL_config(NULL);
1705*00b67f09SDavid van Moolenbroek
1706*00b67f09SDavid van Moolenbroek        e = ENGINE_by_id("gost");
1707*00b67f09SDavid van Moolenbroek        if (e == NULL)
1708*00b67f09SDavid van Moolenbroek                return (1);
1709*00b67f09SDavid van Moolenbroek        if (ENGINE_init(e) <= 0)
1710*00b67f09SDavid van Moolenbroek                return (1);
1711*00b67f09SDavid van Moolenbroek        return (0);
1712*00b67f09SDavid van Moolenbroek#else
1713*00b67f09SDavid van Moolenbroek        return (1);
1714*00b67f09SDavid van Moolenbroek#endif
1715*00b67f09SDavid van Moolenbroek}
1716*00b67f09SDavid van MoolenbroekEOF
1717*00b67f09SDavid van Moolenbroek    close F;
1718*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1719*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1720*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testgost.c "$library"`;
1721*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testgost.exe") {
1722*00b67f09SDavid van Moolenbroek        `.\\testgost.exe`;
1723*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1724*00b67f09SDavid van Moolenbroek            if ($verbose) {
1725*00b67f09SDavid van Moolenbroek                print "GOST test failed: disabling GOST\n";
1726*00b67f09SDavid van Moolenbroek            }
1727*00b67f09SDavid van Moolenbroek            $use_gost = "no";
1728*00b67f09SDavid van Moolenbroek        }
1729*00b67f09SDavid van Moolenbroek    } else {
1730*00b67f09SDavid van Moolenbroek        if ($verbose) {
1731*00b67f09SDavid van Moolenbroek            print "can't compile GOST test: $compret\n";
1732*00b67f09SDavid van Moolenbroek            print "disabling GOST\n";
1733*00b67f09SDavid van Moolenbroek        }
1734*00b67f09SDavid van Moolenbroek    $use_gost = "no";
1735*00b67f09SDavid van Moolenbroek    }
1736*00b67f09SDavid van Moolenbroek}
1737*00b67f09SDavid van Moolenbroek
1738*00b67f09SDavid van Moolenbroekif ($use_gost ne "no") {
1739*00b67f09SDavid van Moolenbroek    $use_gost = "yes";
1740*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_OPENSSL_GOST"} = 1;
1741*00b67f09SDavid van Moolenbroek}
1742*00b67f09SDavid van Moolenbroek
1743*00b67f09SDavid van Moolenbroekif ($gost_encoding eq "ans1") {
1744*00b67f09SDavid van Moolenbroek    $configdefh{"PREFER_GOSTASN1"} = 1;
1745*00b67f09SDavid van Moolenbroek} elsif ($gost_encoding ne "raw") {
1746*00b67f09SDavid van Moolenbroek    die "Unrecognized GOST private key encoding: $gost_encoding\n";
1747*00b67f09SDavid van Moolenbroek}
1748*00b67f09SDavid van Moolenbroek
1749*00b67f09SDavid van Moolenbroek# with-aes
1750*00b67f09SDavid van Moolenbroekif ($use_openssl eq "no") {
1751*00b67f09SDavid van Moolenbroek    if ($use_aes ne "pkcs11") {
1752*00b67f09SDavid van Moolenbroek        $use_aes = "no";
1753*00b67f09SDavid van Moolenbroek    }
1754*00b67f09SDavid van Moolenbroek}
1755*00b67f09SDavid van Moolenbroekif ($use_aes eq "auto") {
1756*00b67f09SDavid van Moolenbroek    if ($verbose) {
1757*00b67f09SDavid van Moolenbroek        print "checking for OpenSSL EVP AES support\n";
1758*00b67f09SDavid van Moolenbroek    }
1759*00b67f09SDavid van Moolenbroek    $use_aes = "evp";
1760*00b67f09SDavid van Moolenbroek    open F, ">testevpaes.c" || die $!;
1761*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1762*00b67f09SDavid van Moolenbroek#include <openssl/evp.h>
1763*00b67f09SDavid van Moolenbroek
1764*00b67f09SDavid van Moolenbroekint
1765*00b67f09SDavid van Moolenbroekmain(void)
1766*00b67f09SDavid van Moolenbroek{
1767*00b67f09SDavid van Moolenbroek        EVP_CIPHER *aes128, *aes192, *aes256;
1768*00b67f09SDavid van Moolenbroek
1769*00b67f09SDavid van Moolenbroek        aes128 = EVP_aes_128_ecb();
1770*00b67f09SDavid van Moolenbroek        aes192 = EVP_aes_192_ecb();
1771*00b67f09SDavid van Moolenbroek        aes256 = EVP_aes_256_ecb();
1772*00b67f09SDavid van Moolenbroek        if (aes128 == NULL || aes192 == NULL || aes256 == NULL)
1773*00b67f09SDavid van Moolenbroek                return (1);
1774*00b67f09SDavid van Moolenbroek        return (0);
1775*00b67f09SDavid van Moolenbroek}
1776*00b67f09SDavid van MoolenbroekEOF
1777*00b67f09SDavid van Moolenbroek    close F;
1778*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1779*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1780*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testevpaes.c "$library"`;
1781*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testevpaes.exe") {
1782*00b67f09SDavid van Moolenbroek        `.\\testevpaes.exe`;
1783*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1784*00b67f09SDavid van Moolenbroek            if ($verbose) {
1785*00b67f09SDavid van Moolenbroek                print "EVP AES test failed: disabling EVP AES\n";
1786*00b67f09SDavid van Moolenbroek            }
1787*00b67f09SDavid van Moolenbroek            $use_aes = "auto";
1788*00b67f09SDavid van Moolenbroek        }
1789*00b67f09SDavid van Moolenbroek    } else {
1790*00b67f09SDavid van Moolenbroek        if ($verbose) {
1791*00b67f09SDavid van Moolenbroek            print "can't compile EVP AES test: $compret\n";
1792*00b67f09SDavid van Moolenbroek            print "disabling EVP AES\n";
1793*00b67f09SDavid van Moolenbroek        }
1794*00b67f09SDavid van Moolenbroek        $use_aes = "auto";
1795*00b67f09SDavid van Moolenbroek    }
1796*00b67f09SDavid van Moolenbroek}
1797*00b67f09SDavid van Moolenbroek
1798*00b67f09SDavid van Moolenbroekif ($use_aes eq "auto") {
1799*00b67f09SDavid van Moolenbroek    if ($verbose) {
1800*00b67f09SDavid van Moolenbroek        print "checking for OpenSSL native AES support\n";
1801*00b67f09SDavid van Moolenbroek    }
1802*00b67f09SDavid van Moolenbroek    $use_aes = "native";
1803*00b67f09SDavid van Moolenbroek    open F, ">testaes.c" || die $!;
1804*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1805*00b67f09SDavid van Moolenbroek#include <openssl/aes.h>
1806*00b67f09SDavid van Moolenbroek
1807*00b67f09SDavid van MoolenbroekAES_KEY k;
1808*00b67f09SDavid van Moolenbroekconst unsigned char bufin[16];
1809*00b67f09SDavid van Moolenbroekunsigned char bufout[16];
1810*00b67f09SDavid van Moolenbroek
1811*00b67f09SDavid van Moolenbroekint
1812*00b67f09SDavid van Moolenbroekmain(void)
1813*00b67f09SDavid van Moolenbroek{
1814*00b67f09SDavid van Moolenbroek        AES_encrypt(bufin, bufout, &k);
1815*00b67f09SDavid van Moolenbroek        return (0);
1816*00b67f09SDavid van Moolenbroek}
1817*00b67f09SDavid van MoolenbroekEOF
1818*00b67f09SDavid van Moolenbroek    close F;
1819*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1820*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1821*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testaes.c "$library"`;
1822*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testaes.exe") {
1823*00b67f09SDavid van Moolenbroek        `.\\testaes.exe`;
1824*00b67f09SDavid van Moolenbroek        if ($? != 0) {
1825*00b67f09SDavid van Moolenbroek            if ($verbose) {
1826*00b67f09SDavid van Moolenbroek                print "native AES test failed: disabling AES\n";
1827*00b67f09SDavid van Moolenbroek            }
1828*00b67f09SDavid van Moolenbroek            $use_aes = "no";
1829*00b67f09SDavid van Moolenbroek        }
1830*00b67f09SDavid van Moolenbroek    } else {
1831*00b67f09SDavid van Moolenbroek        if ($verbose) {
1832*00b67f09SDavid van Moolenbroek            print "can't compile native AES test: $compret\n";
1833*00b67f09SDavid van Moolenbroek            print "disabling AES\n";
1834*00b67f09SDavid van Moolenbroek        }
1835*00b67f09SDavid van Moolenbroek        $use_aes = "no";
1836*00b67f09SDavid van Moolenbroek    }
1837*00b67f09SDavid van Moolenbroek}
1838*00b67f09SDavid van Moolenbroek
1839*00b67f09SDavid van Moolenbroekif ($use_aes eq "yes") {
1840*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_OPENSSL_EVP_AES"} = 1;
1841*00b67f09SDavid van Moolenbroek} elsif ($use_aes eq "evp") {
1842*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_OPENSSL_EVP_AES"} = 1;
1843*00b67f09SDavid van Moolenbroek    $use_aes = "yes";
1844*00b67f09SDavid van Moolenbroek} elsif ($use_aes eq "native") {
1845*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_OPENSSL_AES"} = 1;
1846*00b67f09SDavid van Moolenbroek    $use_aes = "yes";
1847*00b67f09SDavid van Moolenbroek} elsif ($use_aes eq "pkcs11") {
1848*00b67f09SDavid van Moolenbroek    $use_aes = "yes";
1849*00b67f09SDavid van Moolenbroek}
1850*00b67f09SDavid van Moolenbroek
1851*00b67f09SDavid van Moolenbroekif ($use_aes eq "yes") {
1852*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_WANTAES"} = 1;
1853*00b67f09SDavid van Moolenbroek    $configcond{"AES"} = 1;
1854*00b67f09SDavid van Moolenbroek}
1855*00b67f09SDavid van Moolenbroek
1856*00b67f09SDavid van Moolenbroek# with-sit-alg
1857*00b67f09SDavid van Moolenbroekif ($enable_sit ne "no") {
1858*00b67f09SDavid van Moolenbroek    if ($sit_algorithm eq "aes") {
1859*00b67f09SDavid van Moolenbroek        if ($use_aes ne "yes") {
1860*00b67f09SDavid van Moolenbroek            $sit_algorithm = "sha256";
1861*00b67f09SDavid van Moolenbroek        } else {
1862*00b67f09SDavid van Moolenbroek            $configdefh{"AES_SIT"} = 1;
1863*00b67f09SDavid van Moolenbroek        }
1864*00b67f09SDavid van Moolenbroek    }
1865*00b67f09SDavid van Moolenbroek    if ($sit_algorithm eq "sha1") {
1866*00b67f09SDavid van Moolenbroek        $configdefh{"HMAC_SHA1_SIT"} = 1;
1867*00b67f09SDavid van Moolenbroek    } elsif ($sit_algorithm eq "sha256") {
1868*00b67f09SDavid van Moolenbroek        $configdefh{"HMAC_SHA256_SIT"} = 1;
1869*00b67f09SDavid van Moolenbroek    } elsif ($sit_algorithm ne "aes") {
1870*00b67f09SDavid van Moolenbroek        die "Unrecognized SIT algorithm: $sit_algorithm\n";
1871*00b67f09SDavid van Moolenbroek    }
1872*00b67f09SDavid van Moolenbroek}
1873*00b67f09SDavid van Moolenbroek
1874*00b67f09SDavid van Moolenbroek# enable-openssl-hash
1875*00b67f09SDavid van Moolenbroekif ($enable_openssl_hash eq "yes") {
1876*00b67f09SDavid van Moolenbroek    if ($use_openssl eq "no") {
1877*00b67f09SDavid van Moolenbroek        die "No OpenSSL for hash functions\n";
1878*00b67f09SDavid van Moolenbroek    }
1879*00b67f09SDavid van Moolenbroek    $configdefp{"ISC_PLATFORM_OPENSSLHASH"} = 1;
1880*00b67f09SDavid van Moolenbroek    if ($verbose) {
1881*00b67f09SDavid van Moolenbroek        print "checking HMAC_Init() return type\n";
1882*00b67f09SDavid van Moolenbroek    }
1883*00b67f09SDavid van Moolenbroek    open F, ">testhmac.c" || die $!;
1884*00b67f09SDavid van Moolenbroek    print F << 'EOF';
1885*00b67f09SDavid van Moolenbroek#include <openssl/hmac.h>
1886*00b67f09SDavid van Moolenbroek
1887*00b67f09SDavid van Moolenbroekint
1888*00b67f09SDavid van Moolenbroekmain(void)
1889*00b67f09SDavid van Moolenbroek{
1890*00b67f09SDavid van Moolenbroek        HMAC_CTX ctx;
1891*00b67f09SDavid van Moolenbroek        int n = HMAC_Init(&ctx, NULL, 0, NULL);
1892*00b67f09SDavid van Moolenbroek        n += HMAC_Update(&ctx, NULL, 0);
1893*00b67f09SDavid van Moolenbroek        n += HMAC_Final(&ctx, NULL, NULL);
1894*00b67f09SDavid van Moolenbroek        return(n);
1895*00b67f09SDavid van Moolenbroek}
1896*00b67f09SDavid van MoolenbroekEOF
1897*00b67f09SDavid van Moolenbroek    close F;
1898*00b67f09SDavid van Moolenbroek    my $include = $configinc{"OPENSSL_INC"};
1899*00b67f09SDavid van Moolenbroek    my $library = $configlib{"OPENSSL_LIB"};
1900*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD /I "$include" testhmac.c "$library"`;
1901*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testhmac.exe") {
1902*00b67f09SDavid van Moolenbroek        $configdefh{"HMAC_RETURN_INT"} = 1;
1903*00b67f09SDavid van Moolenbroek    }
1904*00b67f09SDavid van Moolenbroek}
1905*00b67f09SDavid van Moolenbroek
1906*00b67f09SDavid van Moolenbroek# with-pkcs11
1907*00b67f09SDavid van Moolenbroekif ($use_pkcs11 ne "no") {
1908*00b67f09SDavid van Moolenbroek    $configcond{"PKCS11"} = 1;
1909*00b67f09SDavid van Moolenbroek    $configdefd{"USE_PKCS11"} = "USE_PKCS11";
1910*00b67f09SDavid van Moolenbroek    $configvar{"PKCS11_TOOLS"} = "pkcs11";
1911*00b67f09SDavid van Moolenbroek    $configdefd{"PK11_LIB_LOCATION"} = "PK11_LIB_LOCATION=\"$pkcs11_path\"";
1912*00b67f09SDavid van Moolenbroek}
1913*00b67f09SDavid van Moolenbroek
1914*00b67f09SDavid van Moolenbroek# with-gssapi
1915*00b67f09SDavid van Moolenbroekif ($use_gssapi eq "no") {
1916*00b67f09SDavid van Moolenbroek    if ($verbose) {
1917*00b67f09SDavid van Moolenbroek        print "gssapi library is disabled\n";
1918*00b67f09SDavid van Moolenbroek    }
1919*00b67f09SDavid van Moolenbroek} else {
1920*00b67f09SDavid van Moolenbroek    $gssapi_path = File::Spec->rel2abs($gssapi_path);
1921*00b67f09SDavid van Moolenbroek    if ($verbose) {
1922*00b67f09SDavid van Moolenbroek        print "checking for gssapi directory at \"$gssapi_path\"\n";
1923*00b67f09SDavid van Moolenbroek    }
1924*00b67f09SDavid van Moolenbroek    $configcond{"GSSAPI"} = 1;
1925*00b67f09SDavid van Moolenbroek    $configdefd{"USE_GSSAPI"} = "GSSAPI";
1926*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "include",
1927*00b67f09SDavid van Moolenbroek                                "gssapi", "gssapi.h")) {
1928*00b67f09SDavid van Moolenbroek        die "can't find gssapi.h include\n";
1929*00b67f09SDavid van Moolenbroek    }
1930*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "include",
1931*00b67f09SDavid van Moolenbroek                                "gssapi", "gssapi_krb5.h")) {
1932*00b67f09SDavid van Moolenbroek        die "can't find gssapi_krb5.h include\n";
1933*00b67f09SDavid van Moolenbroek    }
1934*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "include",
1935*00b67f09SDavid van Moolenbroek                                "krb5", "krb5.h")) {
1936*00b67f09SDavid van Moolenbroek        die "can't find krb5.h include\n";
1937*00b67f09SDavid van Moolenbroek    }
1938*00b67f09SDavid van Moolenbroek    $configinc{"GSSAPI_INC"} = File::Spec->catdir($gssapi_path, "include");
1939*00b67f09SDavid van Moolenbroek    my $bits = "32";
1940*00b67f09SDavid van Moolenbroek    my $gssapi_lib;
1941*00b67f09SDavid van Moolenbroek    my $krb5_lib;
1942*00b67f09SDavid van Moolenbroek    if ($want_win32 eq "yes") {
1943*00b67f09SDavid van Moolenbroek        $bits = "32";
1944*00b67f09SDavid van Moolenbroek        if (!-f File::Spec->catfile($gssapi_path, "lib", "i386",
1945*00b67f09SDavid van Moolenbroek                                    "gssapi${bits}.lib")) {
1946*00b67f09SDavid van Moolenbroek            die "can't find gssapi${bits}.lib library\n";
1947*00b67f09SDavid van Moolenbroek        }
1948*00b67f09SDavid van Moolenbroek        $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "i386",
1949*00b67f09SDavid van Moolenbroek                                          "gssapi${bits}.lib");
1950*00b67f09SDavid van Moolenbroek        if (!-f File::Spec->catfile($gssapi_path, "lib", "i386",
1951*00b67f09SDavid van Moolenbroek                                    "krb5_${bits}.lib")) {
1952*00b67f09SDavid van Moolenbroek            die "can't find krb5_${bits}.lib library\n";
1953*00b67f09SDavid van Moolenbroek        }
1954*00b67f09SDavid van Moolenbroek        $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "i386",
1955*00b67f09SDavid van Moolenbroek                                             "krb5_${bits}.lib");
1956*00b67f09SDavid van Moolenbroek    } elsif ($want_x64 eq "yes") {
1957*00b67f09SDavid van Moolenbroek        $bits = "64";
1958*00b67f09SDavid van Moolenbroek        if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64",
1959*00b67f09SDavid van Moolenbroek                                    "gssapi${bits}.lib")) {
1960*00b67f09SDavid van Moolenbroek            die "can't find gssapi${bits}.lib library\n";
1961*00b67f09SDavid van Moolenbroek        }
1962*00b67f09SDavid van Moolenbroek        $gssapi_lib = File::Spec->catfile($gssapi_path, "lib", "amd64",
1963*00b67f09SDavid van Moolenbroek                                             "gssapi${bits}.lib");
1964*00b67f09SDavid van Moolenbroek        if (!-f File::Spec->catfile($gssapi_path, "lib", "amd64",
1965*00b67f09SDavid van Moolenbroek                                    "krb5_${bits}.lib")) {
1966*00b67f09SDavid van Moolenbroek            die "can't find krb5_${bits}.lib library\n";
1967*00b67f09SDavid van Moolenbroek        }
1968*00b67f09SDavid van Moolenbroek        $krb5_lib = File::Spec->catfile($gssapi_path, "lib", "amd64",
1969*00b67f09SDavid van Moolenbroek                                        "krb5_${bits}.lib");
1970*00b67f09SDavid van Moolenbroek    } else {
1971*00b67f09SDavid van Moolenbroek        die "can't happen: no choice between Win32 and x64\n";
1972*00b67f09SDavid van Moolenbroek    }
1973*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "bin", "gssapi${bits}.dll")) {
1974*00b67f09SDavid van Moolenbroek        die "can't find gssapi${bits}.dll DLL\n";
1975*00b67f09SDavid van Moolenbroek    }
1976*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "bin", "krb5_${bits}.dll")) {
1977*00b67f09SDavid van Moolenbroek        die "can't find krb5_${bits}.dll DLL\n";
1978*00b67f09SDavid van Moolenbroek    }
1979*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "bin", "comerr${bits}.dll")) {
1980*00b67f09SDavid van Moolenbroek        die "can't find comerr${bits}.dll DLL\n";
1981*00b67f09SDavid van Moolenbroek    }
1982*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "bin", "k5sprt${bits}.dll")) {
1983*00b67f09SDavid van Moolenbroek        die "can't find k5sprt${bits}.dll DLL\n";
1984*00b67f09SDavid van Moolenbroek    }
1985*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($gssapi_path, "bin", "wshelp${bits}.dll")) {
1986*00b67f09SDavid van Moolenbroek        die "can't find wshelp${bits}.dll DLL\n";
1987*00b67f09SDavid van Moolenbroek    }
1988*00b67f09SDavid van Moolenbroek    $configlib{"GSSAPI_LIB"} = "$gssapi_lib";
1989*00b67f09SDavid van Moolenbroek    $configlib{"KRB5_LIB"} = "$krb5_lib";
1990*00b67f09SDavid van Moolenbroek    my $gssapi_dll = File::Spec->catfile($gssapi_path, "bin",
1991*00b67f09SDavid van Moolenbroek                                         "gssapi${bits}.dll");
1992*00b67f09SDavid van Moolenbroek    $configdll{"GSSAPI_DLL"} = "$gssapi_dll";
1993*00b67f09SDavid van Moolenbroek    my $krb5_dll = File::Spec->catfile($gssapi_path, "bin",
1994*00b67f09SDavid van Moolenbroek                                         "krb5_${bits}.dll");
1995*00b67f09SDavid van Moolenbroek    $configdll{"KRB5_DLL"} = "$krb5_dll";
1996*00b67f09SDavid van Moolenbroek    my $comerr_dll = File::Spec->catfile($gssapi_path, "bin",
1997*00b67f09SDavid van Moolenbroek                                         "comerr${bits}.dll");
1998*00b67f09SDavid van Moolenbroek    $configdll{"COMERR_DLL"} = "$comerr_dll";
1999*00b67f09SDavid van Moolenbroek    my $k5sprt_dll = File::Spec->catfile($gssapi_path, "bin",
2000*00b67f09SDavid van Moolenbroek                                         "k5sprt${bits}.dll");
2001*00b67f09SDavid van Moolenbroek    $configdll{"K5SPRT_DLL"} = "$k5sprt_dll";
2002*00b67f09SDavid van Moolenbroek    my $wshelp_dll = File::Spec->catfile($gssapi_path, "bin",
2003*00b67f09SDavid van Moolenbroek                                         "wshelp${bits}.dll");
2004*00b67f09SDavid van Moolenbroek    $configdll{"WSHELP_DLL"} = "$wshelp_dll";
2005*00b67f09SDavid van Moolenbroek}
2006*00b67f09SDavid van Moolenbroek
2007*00b67f09SDavid van Moolenbroek# enable-isc-spnego
2008*00b67f09SDavid van Moolenbroekif ($use_gssapi ne "yes") {
2009*00b67f09SDavid van Moolenbroek    $enable_isc_spnego = "no";
2010*00b67f09SDavid van Moolenbroek} elsif ($enable_isc_spnego eq "yes") {
2011*00b67f09SDavid van Moolenbroek    if ($use_gssapi eq "no") {
2012*00b67f09SDavid van Moolenbroek        die "No GSSAPI for SPNEGO\n";
2013*00b67f09SDavid van Moolenbroek    }
2014*00b67f09SDavid van Moolenbroek    $configdefd{"USE_ISC_SPNEGO"} = "USE_ISC_SPNEGO";
2015*00b67f09SDavid van Moolenbroek}
2016*00b67f09SDavid van Moolenbroek
2017*00b67f09SDavid van Moolenbroek# with-geoip
2018*00b67f09SDavid van Moolenbroekif ($use_geoip eq "no") {
2019*00b67f09SDavid van Moolenbroek    if ($verbose) {
2020*00b67f09SDavid van Moolenbroek        print "geoip library is disabled\n";
2021*00b67f09SDavid van Moolenbroek    }
2022*00b67f09SDavid van Moolenbroek} else {
2023*00b67f09SDavid van Moolenbroek    $configcond{"GEOIP"} = 1;
2024*00b67f09SDavid van Moolenbroek    $geoip_path = File::Spec->rel2abs($geoip_path);
2025*00b67f09SDavid van Moolenbroek    if ($verbose) {
2026*00b67f09SDavid van Moolenbroek        print "checking for geoip directory at \"$geoip_path\"\n";
2027*00b67f09SDavid van Moolenbroek    }
2028*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($geoip_path, "GeoIP.h")) {
2029*00b67f09SDavid van Moolenbroek        die "can't find GeoIP.h include\n";
2030*00b67f09SDavid van Moolenbroek    }
2031*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($geoip_path, "GeoIP.lib")) {
2032*00b67f09SDavid van Moolenbroek        die "can't find Geoip.lib library\n";
2033*00b67f09SDavid van Moolenbroek    }
2034*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($geoip_path, "GeoIP.dll")) {
2035*00b67f09SDavid van Moolenbroek        die "can't find Geoip.dll DLL\n";
2036*00b67f09SDavid van Moolenbroek    }
2037*00b67f09SDavid van Moolenbroek    $configinc{"GEOIP_INC"} = "$geoip_path";
2038*00b67f09SDavid van Moolenbroek    my $geoip_lib = File::Spec->catfile($geoip_path, "GeoIP.lib");
2039*00b67f09SDavid van Moolenbroek    $configlib{"GEOIP_LIB"} = "$geoip_lib";
2040*00b67f09SDavid van Moolenbroek    my $geoip_dll = File::Spec->catfile($geoip_path, "GeoIP.dll");
2041*00b67f09SDavid van Moolenbroek    $configdll{"GEOIP_DLL"} = "$geoip_dll";
2042*00b67f09SDavid van Moolenbroek
2043*00b67f09SDavid van Moolenbroek    if ($verbose) {
2044*00b67f09SDavid van Moolenbroek        print "checking for GeoIP support\n";
2045*00b67f09SDavid van Moolenbroek    }
2046*00b67f09SDavid van Moolenbroek    my $ret = `copy "$geoip_dll" .`;
2047*00b67f09SDavid van Moolenbroek    if ($? != 0) {
2048*00b67f09SDavid van Moolenbroek        die "Can't copy GeoIP DLL to working directory: $ret\n";
2049*00b67f09SDavid van Moolenbroek    }
2050*00b67f09SDavid van Moolenbroek    open F, ">testgeoip.c" || die $!;
2051*00b67f09SDavid van Moolenbroek    print F << 'EOF';
2052*00b67f09SDavid van Moolenbroekextern void *GeoIP_open();
2053*00b67f09SDavid van Moolenbroek
2054*00b67f09SDavid van Moolenbroekint main() {
2055*00b67f09SDavid van Moolenbroek        return GeoIP_open != 0;
2056*00b67f09SDavid van Moolenbroek}
2057*00b67f09SDavid van MoolenbroekEOF
2058*00b67f09SDavid van Moolenbroek    close F;
2059*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo /MD testgeoip.c "$geoip_lib"`;
2060*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testgeoip.exe") {
2061*00b67f09SDavid van Moolenbroek        `.\\testgeoip.exe`;
2062*00b67f09SDavid van Moolenbroek        if ($? == 0) {
2063*00b67f09SDavid van Moolenbroek            die "GeoIP test failed\n";
2064*00b67f09SDavid van Moolenbroek        }
2065*00b67f09SDavid van Moolenbroek    } else {
2066*00b67f09SDavid van Moolenbroek        die "can't compile GeoIP test: $compret\n";
2067*00b67f09SDavid van Moolenbroek    }
2068*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_GEOIP"} = 1;
2069*00b67f09SDavid van Moolenbroek
2070*00b67f09SDavid van Moolenbroek    if ($verbose) {
2071*00b67f09SDavid van Moolenbroek        print "checking for GeoIP Country IPv6 support\n";
2072*00b67f09SDavid van Moolenbroek    }
2073*00b67f09SDavid van Moolenbroek    my $geoip_inc = qq(/I "$geoip_path");
2074*00b67f09SDavid van Moolenbroek    my $geoip_libs = qq("$geoip_lib" ws2_32.lib);
2075*00b67f09SDavid van Moolenbroek    open F, ">testgeoip1.c" || die $!;
2076*00b67f09SDavid van Moolenbroek    print F << 'EOF';
2077*00b67f09SDavid van Moolenbroek#include <GeoIP.h>
2078*00b67f09SDavid van Moolenbroek
2079*00b67f09SDavid van Moolenbroekstruct in6_addr in6;
2080*00b67f09SDavid van Moolenbroekint flag = 1;
2081*00b67f09SDavid van Moolenbroek
2082*00b67f09SDavid van Moolenbroekint main() {
2083*00b67f09SDavid van Moolenbroek        if (flag)
2084*00b67f09SDavid van Moolenbroek                return 1;
2085*00b67f09SDavid van Moolenbroek        return GeoIP_country_name_by_ipnum_v6(NULL, in6) != NULL;
2086*00b67f09SDavid van Moolenbroek}
2087*00b67f09SDavid van MoolenbroekEOF
2088*00b67f09SDavid van Moolenbroek    close F;
2089*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo $geoip_inc /MD testgeoip1.c $geoip_libs`;
2090*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testgeoip1.exe") {
2091*00b67f09SDavid van Moolenbroek        `.\\testgeoip1.exe`;
2092*00b67f09SDavid van Moolenbroek        if ($? == 0) {
2093*00b67f09SDavid van Moolenbroek            die "GeoIP Country IPv6 test failed\n";
2094*00b67f09SDavid van Moolenbroek        }
2095*00b67f09SDavid van Moolenbroek    } else {
2096*00b67f09SDavid van Moolenbroek        die "can't compile GeoIP Country IPv6 test: $compret\n";
2097*00b67f09SDavid van Moolenbroek    }
2098*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_GEOIP_V6"} = 1;
2099*00b67f09SDavid van Moolenbroek
2100*00b67f09SDavid van Moolenbroek    if ($verbose) {
2101*00b67f09SDavid van Moolenbroek        print "checking for GeoIP City IPv6 support\n";
2102*00b67f09SDavid van Moolenbroek    }
2103*00b67f09SDavid van Moolenbroek    open F, ">testgeoip2.c" || die $!;
2104*00b67f09SDavid van Moolenbroek    print F << 'EOF';
2105*00b67f09SDavid van Moolenbroek#include <GeoIP.h>
2106*00b67f09SDavid van Moolenbroek#include <GeoIPCity.h>
2107*00b67f09SDavid van Moolenbroek
2108*00b67f09SDavid van Moolenbroekstruct in6_addr in6;
2109*00b67f09SDavid van Moolenbroekint i = GEOIP_CITY_EDITION_REV0_V6;
2110*00b67f09SDavid van Moolenbroekint flag = 1;
2111*00b67f09SDavid van Moolenbroek
2112*00b67f09SDavid van Moolenbroekint main() {
2113*00b67f09SDavid van Moolenbroek        if (flag)
2114*00b67f09SDavid van Moolenbroek                return 1;
2115*00b67f09SDavid van Moolenbroek        return GeoIP_record_by_ipnum_v6(NULL, in6) != NULL;
2116*00b67f09SDavid van Moolenbroek}
2117*00b67f09SDavid van MoolenbroekEOF
2118*00b67f09SDavid van Moolenbroek    close F;
2119*00b67f09SDavid van Moolenbroek    $compret = `cl /nologo $geoip_inc /MD testgeoip2.c $geoip_libs`;
2120*00b67f09SDavid van Moolenbroek    if (grep { -f and -x } ".\\testgeoip2.exe") {
2121*00b67f09SDavid van Moolenbroek        `.\\testgeoip2.exe`;
2122*00b67f09SDavid van Moolenbroek        if ($? == 0) {
2123*00b67f09SDavid van Moolenbroek            die "GeoIP City IPv6 test failed\n";
2124*00b67f09SDavid van Moolenbroek        }
2125*00b67f09SDavid van Moolenbroek    } else {
2126*00b67f09SDavid van Moolenbroek        die "can't compile GeoIP City IPv6 test: $compret\n";
2127*00b67f09SDavid van Moolenbroek    }
2128*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_GEOIP_CITY_V6"} = 1;
2129*00b67f09SDavid van Moolenbroek}
2130*00b67f09SDavid van Moolenbroek
2131*00b67f09SDavid van Moolenbroek# with-readline
2132*00b67f09SDavid van Moolenbroekif ($use_readline eq "no") {
2133*00b67f09SDavid van Moolenbroek    if ($verbose) {
2134*00b67f09SDavid van Moolenbroek        print "readline library is disabled\n";
2135*00b67f09SDavid van Moolenbroek    }
2136*00b67f09SDavid van Moolenbroek} else {
2137*00b67f09SDavid van Moolenbroek    $readline_path = File::Spec->rel2abs($readline_path);
2138*00b67f09SDavid van Moolenbroek    if ($verbose) {
2139*00b67f09SDavid van Moolenbroek        print "checking for readline directory at \"$readline_path\"\n";
2140*00b67f09SDavid van Moolenbroek    }
2141*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($readline_path, "readline", "readline.h")) {
2142*00b67f09SDavid van Moolenbroek        die "can't find readline.h include\n";
2143*00b67f09SDavid van Moolenbroek    }
2144*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($readline_path, "readline", "readline.lib")) {
2145*00b67f09SDavid van Moolenbroek        die "can't find readline.lib library\n";
2146*00b67f09SDavid van Moolenbroek    }
2147*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_READLINE"} = 1;
2148*00b67f09SDavid van Moolenbroek    $configinc{"READLINE_INC"} = "$readline_path";
2149*00b67f09SDavid van Moolenbroek    my $readline_lib = File::Spec->catfile($readline_path,
2150*00b67f09SDavid van Moolenbroek                                           "readline", "readline.lib");
2151*00b67f09SDavid van Moolenbroek    $configlib{"READLINE_LIB"} = "$readline_lib";
2152*00b67f09SDavid van Moolenbroek    if (-f File::Spec->catfile($readline_path, "readline", "readlineD.lib")) {
2153*00b67f09SDavid van Moolenbroek        my $readline_libd = File::Spec->catfile($readline_path,
2154*00b67f09SDavid van Moolenbroek                                                "readline", "readlineD.lib");
2155*00b67f09SDavid van Moolenbroek        $configlib{"READLINE_LIBD"} = "$readline_libd";
2156*00b67f09SDavid van Moolenbroek    } else {
2157*00b67f09SDavid van Moolenbroek        $configlib{"READLINE_LIBD"} = "$readline_lib";
2158*00b67f09SDavid van Moolenbroek    }
2159*00b67f09SDavid van Moolenbroek}
2160*00b67f09SDavid van Moolenbroek
2161*00b67f09SDavid van Moolenbroek# with-idn (including with-iconv)
2162*00b67f09SDavid van Moolenbroekif ($use_idn eq "no") {
2163*00b67f09SDavid van Moolenbroek    if ($verbose) {
2164*00b67f09SDavid van Moolenbroek        print "IDN kit is disabled\n";
2165*00b67f09SDavid van Moolenbroek    }
2166*00b67f09SDavid van Moolenbroek} else {
2167*00b67f09SDavid van Moolenbroek    $idn_path = File::Spec->rel2abs($idn_path);
2168*00b67f09SDavid van Moolenbroek    if ($verbose) {
2169*00b67f09SDavid van Moolenbroek        print "checking for IDN kit directory at \"$idn_path\"\n";
2170*00b67f09SDavid van Moolenbroek    }
2171*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($idn_path, "idn", "api.h")) {
2172*00b67f09SDavid van Moolenbroek        die "can't find idn\\api.h include\n";
2173*00b67f09SDavid van Moolenbroek    }
2174*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.lib")) {
2175*00b67f09SDavid van Moolenbroek        die "can't find idnkit.lib library\n";
2176*00b67f09SDavid van Moolenbroek    }
2177*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($idn_path, "idn", "idnkit.dll")) {
2178*00b67f09SDavid van Moolenbroek        die "can't find idnkit.dll DLL\n";
2179*00b67f09SDavid van Moolenbroek    }
2180*00b67f09SDavid van Moolenbroek    $configcond{"IDNKIT"} = 1;
2181*00b67f09SDavid van Moolenbroek    $configdefh{"WITH_IDN"} = 1;
2182*00b67f09SDavid van Moolenbroek    $configinc{"IDN_INC"} = "$idn_path";
2183*00b67f09SDavid van Moolenbroek    my $idn_lib = File::Spec->catfile($idn_path, "idn", "idnkit.lib");
2184*00b67f09SDavid van Moolenbroek    $configlib{"IDN_LIB"} = "$idn_lib";
2185*00b67f09SDavid van Moolenbroek    my $idn_dll = File::Spec->catfile($idn_path, "idn", "idnkit.dll");
2186*00b67f09SDavid van Moolenbroek    $configdll{"IDN_DLL"} = "$idn_dll";
2187*00b67f09SDavid van Moolenbroek    if ($iconv_path eq " --idn-- ") {
2188*00b67f09SDavid van Moolenbroek        my $iconv_dll = File::Spec->catfile($idn_path, "idn", "iconv.dll");
2189*00b67f09SDavid van Moolenbroek        $configdll{"ICONV_DLL"} = "$iconv_dll";
2190*00b67f09SDavid van Moolenbroek    } else {
2191*00b67f09SDavid van Moolenbroek        my $iconv_dll =File::Spec->catfile($iconv_path, "iconv.dll");
2192*00b67f09SDavid van Moolenbroek        $configdll{"ICONV_DLL"} = "$iconv_dll";
2193*00b67f09SDavid van Moolenbroek    }
2194*00b67f09SDavid van Moolenbroek}
2195*00b67f09SDavid van Moolenbroek
2196*00b67f09SDavid van Moolenbroek# with-libxml2
2197*00b67f09SDavid van Moolenbroekif ($use_libxml2 eq "no") {
2198*00b67f09SDavid van Moolenbroek    if ($verbose) {
2199*00b67f09SDavid van Moolenbroek        print "libxml2 library is disabled\n";
2200*00b67f09SDavid van Moolenbroek    }
2201*00b67f09SDavid van Moolenbroek} elsif ($use_libxml2 eq "auto") {
2202*00b67f09SDavid van Moolenbroek    if ($verbose) {
2203*00b67f09SDavid van Moolenbroek        print "checking for a libxml2 built directory at sibling root\n";
2204*00b67f09SDavid van Moolenbroek    }
2205*00b67f09SDavid van Moolenbroek    opendir DIR, $libxml2_path || die "No Directory: $!\n";
2206*00b67f09SDavid van Moolenbroek    my @dirlist = grep (/^libxml2-[0-9]+\.[0-9]+\.[0-9]+[a-z]*/i,
2207*00b67f09SDavid van Moolenbroek                        readdir(DIR));
2208*00b67f09SDavid van Moolenbroek    closedir(DIR);
2209*00b67f09SDavid van Moolenbroek
2210*00b67f09SDavid van Moolenbroek    # Make sure we have something
2211*00b67f09SDavid van Moolenbroek    if (scalar(@dirlist) == 0) {
2212*00b67f09SDavid van Moolenbroek        die "can't find a libxml2 at sibling root\n";
2213*00b67f09SDavid van Moolenbroek    }
2214*00b67f09SDavid van Moolenbroek    # Now see if we have a directory or just a file.
2215*00b67f09SDavid van Moolenbroek    # Make sure we are case insensitive
2216*00b67f09SDavid van Moolenbroek    my $file;
2217*00b67f09SDavid van Moolenbroek    foreach $file (sort {uc($b) cmp uc($a)} @dirlist) {
2218*00b67f09SDavid van Moolenbroek        if (-f File::Spec->catfile($libxml2_path,
2219*00b67f09SDavid van Moolenbroek                                   $file,
2220*00b67f09SDavid van Moolenbroek                                   "include\\libxml",
2221*00b67f09SDavid van Moolenbroek                                   "xmlversion.h")) {
2222*00b67f09SDavid van Moolenbroek            $libxml2_path = File::Spec->catdir($libxml2_path, $file);
2223*00b67f09SDavid van Moolenbroek            $use_libxml2 = "yes";
2224*00b67f09SDavid van Moolenbroek            last;
2225*00b67f09SDavid van Moolenbroek        }
2226*00b67f09SDavid van Moolenbroek    }
2227*00b67f09SDavid van Moolenbroek
2228*00b67f09SDavid van Moolenbroek    # If we have one use it otherwise report the error
2229*00b67f09SDavid van Moolenbroek    if ($use_libxml2 eq "auto") {
2230*00b67f09SDavid van Moolenbroek        die "can't find a libxml2 built directory at sibling root\n";
2231*00b67f09SDavid van Moolenbroek    }
2232*00b67f09SDavid van Moolenbroek}
2233*00b67f09SDavid van Moolenbroek# falls into (so no else)
2234*00b67f09SDavid van Moolenbroekif ($use_libxml2 eq "yes") {
2235*00b67f09SDavid van Moolenbroek    $libxml2_path = File::Spec->rel2abs($libxml2_path);
2236*00b67f09SDavid van Moolenbroek    if ($verbose) {
2237*00b67f09SDavid van Moolenbroek        print "checking for libxml2 built directory at \"$libxml2_path\"\n";
2238*00b67f09SDavid van Moolenbroek    }
2239*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($libxml2_path,
2240*00b67f09SDavid van Moolenbroek                                "include\\libxml",
2241*00b67f09SDavid van Moolenbroek                                "xmlversion.h")) {
2242*00b67f09SDavid van Moolenbroek        die "can't find libxml2 xmlversion.h include\n";
2243*00b67f09SDavid van Moolenbroek    }
2244*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($libxml2_path,
2245*00b67f09SDavid van Moolenbroek                                "win32\\bin.msvc",
2246*00b67f09SDavid van Moolenbroek                                "libxml2.lib")) {
2247*00b67f09SDavid van Moolenbroek        die "can't find Libxml2 libxml2.lib library\n";
2248*00b67f09SDavid van Moolenbroek    }
2249*00b67f09SDavid van Moolenbroek    if (!-f File::Spec->catfile($libxml2_path,
2250*00b67f09SDavid van Moolenbroek                                "win32\\bin.msvc",
2251*00b67f09SDavid van Moolenbroek                                "libxml2.dll")) {
2252*00b67f09SDavid van Moolenbroek        die "can't find Libxml2 DLL\n";
2253*00b67f09SDavid van Moolenbroek    }
2254*00b67f09SDavid van Moolenbroek    $configcond{"LIBXML2"} = 1;
2255*00b67f09SDavid van Moolenbroek    $configdefh{"HAVE_LIBXML2"} = 1;
2256*00b67f09SDavid van Moolenbroek    my $libxml2_inc = File::Spec->catdir($libxml2_path, "include");
2257*00b67f09SDavid van Moolenbroek    $configinc{"LIBXML2_INC"} = "$libxml2_inc";
2258*00b67f09SDavid van Moolenbroek    my $libxml2_libdir = File::Spec->catdir($libxml2_path, "win32\\bin.msvc");
2259*00b67f09SDavid van Moolenbroek    my $libxml2_lib = File::Spec->catfile($libxml2_libdir, "libxml2.lib");
2260*00b67f09SDavid van Moolenbroek    $configlib{"LIBXML2_LIB"} = "$libxml2_lib";
2261*00b67f09SDavid van Moolenbroek    my $libxml2_dll = File::Spec->catfile($libxml2_libdir, "libxml2.dll");
2262*00b67f09SDavid van Moolenbroek    $configdll{"LIBXML2_DLL"} = "$libxml2_dll";
2263*00b67f09SDavid van Moolenbroek}
2264*00b67f09SDavid van Moolenbroek
2265*00b67f09SDavid van Moolenbroek# with-python
2266*00b67f09SDavid van Moolenbroekif ($use_python eq "no") {
2267*00b67f09SDavid van Moolenbroek    if ($verbose) {
2268*00b67f09SDavid van Moolenbroek        print "python is disabled\n";
2269*00b67f09SDavid van Moolenbroek    }
2270*00b67f09SDavid van Moolenbroek} elsif ($use_python eq "auto") {
2271*00b67f09SDavid van Moolenbroek    if ($verbose) {
2272*00b67f09SDavid van Moolenbroek        print "checking for python in path\n";
2273*00b67f09SDavid van Moolenbroek    }
2274*00b67f09SDavid van Moolenbroek    my $pythonret = `python -c "quit()" 2>&1`;
2275*00b67f09SDavid van Moolenbroek    if ($? != 0) {
2276*00b67f09SDavid van Moolenbroek        die "can't launch the python interpreter: $pythonret\n";
2277*00b67f09SDavid van Moolenbroek    }
2278*00b67f09SDavid van Moolenbroek    $use_python = "yes";
2279*00b67f09SDavid van Moolenbroek}
2280*00b67f09SDavid van Moolenbroekif ($use_python ne "no") {
2281*00b67f09SDavid van Moolenbroek    if ($verbose) {
2282*00b67f09SDavid van Moolenbroek        my $pythonret = `"$python_command" -c "quit()" 2>&1`;
2283*00b67f09SDavid van Moolenbroek        if ($? != 0) {
2284*00b67f09SDavid van Moolenbroek            print STDERR
2285*00b67f09SDavid van Moolenbroek                "can't lanch the local python interpreter: $pythonret\n";
2286*00b67f09SDavid van Moolenbroek        }
2287*00b67f09SDavid van Moolenbroek    }
2288*00b67f09SDavid van Moolenbroek    $configcond{"PYTHON"} = 1;
2289*00b67f09SDavid van Moolenbroek    $configdefd{"USE_PYTHON"} = "USE_PYTHON";
2290*00b67f09SDavid van Moolenbroek    $configvar{"PYTHON"} = "$python_command";
2291*00b67f09SDavid van Moolenbroek    # Only a default!
2292*00b67f09SDavid van Moolenbroek    $configvar{"prefix"} = "C:\\Program Files\ISC BIND 9";
2293*00b67f09SDavid van Moolenbroek}
2294*00b67f09SDavid van Moolenbroek
2295*00b67f09SDavid van Moolenbroek# with-vcredist
2296*00b67f09SDavid van Moolenbroek$vcredist_path = File::Spec->rel2abs($vcredist_path);
2297*00b67f09SDavid van Moolenbroekif (!grep { -f and -x } $vcredist_path) {
2298*00b67f09SDavid van Moolenbroek    die "$vcredist_path is not correct\n";
2299*00b67f09SDavid van Moolenbroek} else {
2300*00b67f09SDavid van Moolenbroek    $configvar{"VCREDIST_PATH"} = "$vcredist_path";
2301*00b67f09SDavid van Moolenbroek}
2302*00b67f09SDavid van Moolenbroek
2303*00b67f09SDavid van Moolenbroek# tuning
2304*00b67f09SDavid van Moolenbroekif ($tuning eq "large") {
2305*00b67f09SDavid van Moolenbroek    $configdefh{"TUNE_LARGE"} = 1;
2306*00b67f09SDavid van Moolenbroek}
2307*00b67f09SDavid van Moolenbroek
2308*00b67f09SDavid van Moolenbroek# setup config.h with %configdefh
2309*00b67f09SDavid van Moolenbroek
2310*00b67f09SDavid van Moolenbroeksub setupconfigh {
2311*00b67f09SDavid van Moolenbroek    my $line;
2312*00b67f09SDavid van Moolenbroek    my @Lines;
2313*00b67f09SDavid van Moolenbroek
2314*00b67f09SDavid van Moolenbroek    open F, $configfilein || die $!;
2315*00b67f09SDavid van Moolenbroek    @Lines = <F>;
2316*00b67f09SDavid van Moolenbroek    close F;
2317*00b67f09SDavid van Moolenbroek
2318*00b67f09SDavid van Moolenbroek    foreach $line (@Lines) {
2319*00b67f09SDavid van Moolenbroek        chomp $line;
2320*00b67f09SDavid van Moolenbroek        if ($line =~ /^@([^@]+)\@$/) {
2321*00b67f09SDavid van Moolenbroek            if (defined($configdefh{$1})) {
2322*00b67f09SDavid van Moolenbroek                $line = "#define $1 $configdefh{$1}";
2323*00b67f09SDavid van Moolenbroek            } else {
2324*00b67f09SDavid van Moolenbroek                $line = "/* #undef $1 */";
2325*00b67f09SDavid van Moolenbroek            }
2326*00b67f09SDavid van Moolenbroek        }
2327*00b67f09SDavid van Moolenbroek    }
2328*00b67f09SDavid van Moolenbroek
2329*00b67f09SDavid van Moolenbroek    open F, $configfileout || die $!;
2330*00b67f09SDavid van Moolenbroek    if ($verbose) {
2331*00b67f09SDavid van Moolenbroek        print "Setting up config.h\n";
2332*00b67f09SDavid van Moolenbroek    }
2333*00b67f09SDavid van Moolenbroek    foreach $line (@Lines) {
2334*00b67f09SDavid van Moolenbroek        print F $line . "\n";
2335*00b67f09SDavid van Moolenbroek    }
2336*00b67f09SDavid van Moolenbroek    close F;
2337*00b67f09SDavid van Moolenbroek}
2338*00b67f09SDavid van Moolenbroek
2339*00b67f09SDavid van Moolenbroek# setup platform.h with %configdefp
2340*00b67f09SDavid van Moolenbroek
2341*00b67f09SDavid van Moolenbroeksub setupplatformh {
2342*00b67f09SDavid van Moolenbroek    my $line;
2343*00b67f09SDavid van Moolenbroek    my @Lines;
2344*00b67f09SDavid van Moolenbroek
2345*00b67f09SDavid van Moolenbroek    open F, $platformfile . ".in" || die $!;
2346*00b67f09SDavid van Moolenbroek    @Lines = <F>;
2347*00b67f09SDavid van Moolenbroek    close F;
2348*00b67f09SDavid van Moolenbroek
2349*00b67f09SDavid van Moolenbroek    foreach $line (@Lines) {
2350*00b67f09SDavid van Moolenbroek        chomp $line;
2351*00b67f09SDavid van Moolenbroek        if ($line =~ /^@([^@]+)\@$/) {
2352*00b67f09SDavid van Moolenbroek            if (defined($configdefp{$1})) {
2353*00b67f09SDavid van Moolenbroek                $line = "#define $1 $configdefp{$1}";
2354*00b67f09SDavid van Moolenbroek            } else {
2355*00b67f09SDavid van Moolenbroek                $line = "/* #undef $1 */";
2356*00b67f09SDavid van Moolenbroek            }
2357*00b67f09SDavid van Moolenbroek        }
2358*00b67f09SDavid van Moolenbroek    }
2359*00b67f09SDavid van Moolenbroek
2360*00b67f09SDavid van Moolenbroek    open F, ">" . $platformfile || die $!;
2361*00b67f09SDavid van Moolenbroek    if ($verbose) {
2362*00b67f09SDavid van Moolenbroek        print "Setting up platform.h\n";
2363*00b67f09SDavid van Moolenbroek    }
2364*00b67f09SDavid van Moolenbroek    foreach $line (@Lines) {
2365*00b67f09SDavid van Moolenbroek        print F $line . "\n";
2366*00b67f09SDavid van Moolenbroek    }
2367*00b67f09SDavid van Moolenbroek    close F;
2368*00b67f09SDavid van Moolenbroek}
2369*00b67f09SDavid van Moolenbroek
2370*00b67f09SDavid van Moolenbroek# escape spaces
2371*00b67f09SDavid van Moolenbroek
2372*00b67f09SDavid van Moolenbroeksub kw {
2373*00b67f09SDavid van Moolenbroek    if ($_[0] =~ / /) {
2374*00b67f09SDavid van Moolenbroek        return "\"$_[0]\"";
2375*00b67f09SDavid van Moolenbroek    } else {
2376*00b67f09SDavid van Moolenbroek        return "$_[0]";
2377*00b67f09SDavid van Moolenbroek    }
2378*00b67f09SDavid van Moolenbroek}
2379*00b67f09SDavid van Moolenbroek
2380*00b67f09SDavid van Moolenbroek# setup a file with %configcond stack and %config{var,defd,inc,lib,dll}
2381*00b67f09SDavid van Moolenbroek
2382*00b67f09SDavid van Moolenbroeksub setupfile {
2383*00b67f09SDavid van Moolenbroek    my $line;
2384*00b67f09SDavid van Moolenbroek    my @Linesin;
2385*00b67f09SDavid van Moolenbroek    my @Linesout;
2386*00b67f09SDavid van Moolenbroek    my $filename = $_[0];
2387*00b67f09SDavid van Moolenbroek    my $cond;
2388*00b67f09SDavid van Moolenbroek    my @conds;
2389*00b67f09SDavid van Moolenbroek    my $pass = 1;
2390*00b67f09SDavid van Moolenbroek    my @passes;
2391*00b67f09SDavid van Moolenbroek    my $val;
2392*00b67f09SDavid van Moolenbroek
2393*00b67f09SDavid van Moolenbroek    open F, $filename . ".in" || die $!;
2394*00b67f09SDavid van Moolenbroek    @Linesin = <F>;
2395*00b67f09SDavid van Moolenbroek    close F;
2396*00b67f09SDavid van Moolenbroek
2397*00b67f09SDavid van Moolenbroek    foreach $line (@Linesin) {
2398*00b67f09SDavid van Moolenbroek        chomp $line;
2399*00b67f09SDavid van Moolenbroek        if ($line =~ /^\@IF (.*)$/) {
2400*00b67f09SDavid van Moolenbroek            if (defined($cond)) {
2401*00b67f09SDavid van Moolenbroek                unshift(@conds, $cond);
2402*00b67f09SDavid van Moolenbroek                unshift(@passes, $pass);
2403*00b67f09SDavid van Moolenbroek            }
2404*00b67f09SDavid van Moolenbroek            $cond = $1;
2405*00b67f09SDavid van Moolenbroek            if (defined($configcond{$cond})) {
2406*00b67f09SDavid van Moolenbroek                # do nothing
2407*00b67f09SDavid van Moolenbroek            } else {
2408*00b67f09SDavid van Moolenbroek                $pass = 0;
2409*00b67f09SDavid van Moolenbroek            }
2410*00b67f09SDavid van Moolenbroek            next;
2411*00b67f09SDavid van Moolenbroek        } elsif ($line =~ /^\@ELSE (.*)$/) {
2412*00b67f09SDavid van Moolenbroek            if ($cond ne $1) {
2413*00b67f09SDavid van Moolenbroek                die "\@ELSE $1 mismatch in $filename\n";
2414*00b67f09SDavid van Moolenbroek            }
2415*00b67f09SDavid van Moolenbroek            if (defined($configcond{$cond})) {
2416*00b67f09SDavid van Moolenbroek                $pass = 0;
2417*00b67f09SDavid van Moolenbroek            } else {
2418*00b67f09SDavid van Moolenbroek                if (scalar(@conds) > 0) {
2419*00b67f09SDavid van Moolenbroek                    $pass = $passes[0];
2420*00b67f09SDavid van Moolenbroek                } else {
2421*00b67f09SDavid van Moolenbroek                    $pass = 1;
2422*00b67f09SDavid van Moolenbroek                }
2423*00b67f09SDavid van Moolenbroek            }
2424*00b67f09SDavid van Moolenbroek            next;
2425*00b67f09SDavid van Moolenbroek        } elsif ($line =~ /^\@END (.*)$/) {
2426*00b67f09SDavid van Moolenbroek            if ($cond ne $1) {
2427*00b67f09SDavid van Moolenbroek                die "\@END $1 mismatch in $filename\n";
2428*00b67f09SDavid van Moolenbroek            }
2429*00b67f09SDavid van Moolenbroek            $cond = shift(@conds);
2430*00b67f09SDavid van Moolenbroek            if (scalar(@passes) > 0) {
2431*00b67f09SDavid van Moolenbroek                $pass = shift(@passes);
2432*00b67f09SDavid van Moolenbroek            } else {
2433*00b67f09SDavid van Moolenbroek                $pass = 1;
2434*00b67f09SDavid van Moolenbroek            }
2435*00b67f09SDavid van Moolenbroek            next;
2436*00b67f09SDavid van Moolenbroek        }
2437*00b67f09SDavid van Moolenbroek        if ($pass == 0) {
2438*00b67f09SDavid van Moolenbroek            next;
2439*00b67f09SDavid van Moolenbroek        }
2440*00b67f09SDavid van Moolenbroek        while ($line =~ /@([^@ ]*)@/) {
2441*00b67f09SDavid van Moolenbroek            if ($1 ~~ @substvar) {
2442*00b67f09SDavid van Moolenbroek                if (defined($configvar{$1})) {
2443*00b67f09SDavid van Moolenbroek                    $val = kw($configvar{$1});
2444*00b67f09SDavid van Moolenbroek                    $line = "$`$val$'";
2445*00b67f09SDavid van Moolenbroek                } else {
2446*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2447*00b67f09SDavid van Moolenbroek                }
2448*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substdefd) {
2449*00b67f09SDavid van Moolenbroek                if (defined($configdefd{$1})) {
2450*00b67f09SDavid van Moolenbroek                    my $def = $configdefd{$1};
2451*00b67f09SDavid van Moolenbroek                    my $pre = "$`";
2452*00b67f09SDavid van Moolenbroek                    my $post = "$'";
2453*00b67f09SDavid van Moolenbroek                    $def =~ s/([\\ "])/\\$1/g;
2454*00b67f09SDavid van Moolenbroek                    $line = qq($pre/D "$def"$post);
2455*00b67f09SDavid van Moolenbroek                } else {
2456*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2457*00b67f09SDavid van Moolenbroek                }
2458*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substinc) {
2459*00b67f09SDavid van Moolenbroek                if (defined($configinc{$1})) {
2460*00b67f09SDavid van Moolenbroek                    $line = qq($`/I "$configinc{$1}"$');
2461*00b67f09SDavid van Moolenbroek                } else {
2462*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2463*00b67f09SDavid van Moolenbroek                }
2464*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substlib) {
2465*00b67f09SDavid van Moolenbroek                if (defined($configlib{$1})) {
2466*00b67f09SDavid van Moolenbroek                    $val = kw($configlib{$1});
2467*00b67f09SDavid van Moolenbroek                    $line = "$`$val$'";
2468*00b67f09SDavid van Moolenbroek                } else {
2469*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2470*00b67f09SDavid van Moolenbroek                }
2471*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substdll) {
2472*00b67f09SDavid van Moolenbroek                if (defined($configdll{$1})) {
2473*00b67f09SDavid van Moolenbroek                    $val = kw($configdll{$1});
2474*00b67f09SDavid van Moolenbroek                    $line = "$`$val$'";
2475*00b67f09SDavid van Moolenbroek                } else {
2476*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2477*00b67f09SDavid van Moolenbroek                }
2478*00b67f09SDavid van Moolenbroek            } else {
2479*00b67f09SDavid van Moolenbroek                die "unknown control $& in $filename\n";
2480*00b67f09SDavid van Moolenbroek            }
2481*00b67f09SDavid van Moolenbroek        }
2482*00b67f09SDavid van Moolenbroek        push @Linesout, $line;
2483*00b67f09SDavid van Moolenbroek    }
2484*00b67f09SDavid van Moolenbroek
2485*00b67f09SDavid van Moolenbroek    open F, ">" . $filename || die $!;
2486*00b67f09SDavid van Moolenbroek    if ($verbose) {
2487*00b67f09SDavid van Moolenbroek        print "Setting up $filename\n";
2488*00b67f09SDavid van Moolenbroek    }
2489*00b67f09SDavid van Moolenbroek    foreach $line (@Linesout) {
2490*00b67f09SDavid van Moolenbroek        print F $line . "\n";
2491*00b67f09SDavid van Moolenbroek    }
2492*00b67f09SDavid van Moolenbroek    close F;
2493*00b67f09SDavid van Moolenbroek}
2494*00b67f09SDavid van Moolenbroek
2495*00b67f09SDavid van Moolenbroek# setup a project with %configcond stack and %config{var,defd,inc,lib,dll}
2496*00b67f09SDavid van Moolenbroek
2497*00b67f09SDavid van Moolenbroeksub setupproject {
2498*00b67f09SDavid van Moolenbroek    my $line;
2499*00b67f09SDavid van Moolenbroek    my @Linesin;
2500*00b67f09SDavid van Moolenbroek    my @Linesout;
2501*00b67f09SDavid van Moolenbroek    my $projectname = $_[0];
2502*00b67f09SDavid van Moolenbroek    my $cond;
2503*00b67f09SDavid van Moolenbroek    my @conds;
2504*00b67f09SDavid van Moolenbroek    my $pass = 1;
2505*00b67f09SDavid van Moolenbroek    my @passes;
2506*00b67f09SDavid van Moolenbroek    my $val;
2507*00b67f09SDavid van Moolenbroek
2508*00b67f09SDavid van Moolenbroek    open F, $projectname . ".in" || die $!;
2509*00b67f09SDavid van Moolenbroek    @Linesin = <F>;
2510*00b67f09SDavid van Moolenbroek    close F;
2511*00b67f09SDavid van Moolenbroek
2512*00b67f09SDavid van Moolenbroek    foreach $line (@Linesin) {
2513*00b67f09SDavid van Moolenbroek        chomp $line;
2514*00b67f09SDavid van Moolenbroek        if ($line =~ /^\@IF (.*)$/) {
2515*00b67f09SDavid van Moolenbroek            if (defined($cond)) {
2516*00b67f09SDavid van Moolenbroek                unshift(@conds, $cond);
2517*00b67f09SDavid van Moolenbroek                unshift(@passes, $pass);
2518*00b67f09SDavid van Moolenbroek            }
2519*00b67f09SDavid van Moolenbroek            $cond = $1;
2520*00b67f09SDavid van Moolenbroek            if (defined($configcond{$cond})) {
2521*00b67f09SDavid van Moolenbroek                # do nothing
2522*00b67f09SDavid van Moolenbroek            } else {
2523*00b67f09SDavid van Moolenbroek                $pass = 0;
2524*00b67f09SDavid van Moolenbroek            }
2525*00b67f09SDavid van Moolenbroek            next;
2526*00b67f09SDavid van Moolenbroek        } elsif ($line =~ /^\@ELSE (.*)$/) {
2527*00b67f09SDavid van Moolenbroek            if ($cond ne $1) {
2528*00b67f09SDavid van Moolenbroek                die "\@ELSE $1 mismatch in $projectname\n";
2529*00b67f09SDavid van Moolenbroek            }
2530*00b67f09SDavid van Moolenbroek            if (defined($configcond{$cond})) {
2531*00b67f09SDavid van Moolenbroek                $pass = 0;
2532*00b67f09SDavid van Moolenbroek            } else {
2533*00b67f09SDavid van Moolenbroek                if (scalar(@conds) > 0) {
2534*00b67f09SDavid van Moolenbroek                    $pass = $passes[0];
2535*00b67f09SDavid van Moolenbroek                } else {
2536*00b67f09SDavid van Moolenbroek                    $pass = 1;
2537*00b67f09SDavid van Moolenbroek                }
2538*00b67f09SDavid van Moolenbroek            }
2539*00b67f09SDavid van Moolenbroek            next;
2540*00b67f09SDavid van Moolenbroek        } elsif ($line =~ /^\@END (.*)$/) {
2541*00b67f09SDavid van Moolenbroek            if ($cond ne $1) {
2542*00b67f09SDavid van Moolenbroek                die "\@END $1 mismatch in $projectname\n";
2543*00b67f09SDavid van Moolenbroek            }
2544*00b67f09SDavid van Moolenbroek            $cond = shift(@conds);
2545*00b67f09SDavid van Moolenbroek            if (scalar(@passes) > 0) {
2546*00b67f09SDavid van Moolenbroek                $pass = shift(@passes);
2547*00b67f09SDavid van Moolenbroek            } else {
2548*00b67f09SDavid van Moolenbroek                $pass = 1;
2549*00b67f09SDavid van Moolenbroek            }
2550*00b67f09SDavid van Moolenbroek            next;
2551*00b67f09SDavid van Moolenbroek        }
2552*00b67f09SDavid van Moolenbroek        if ($pass == 0) {
2553*00b67f09SDavid van Moolenbroek            next;
2554*00b67f09SDavid van Moolenbroek        }
2555*00b67f09SDavid van Moolenbroek        while ($line =~ /@([^@ ]*)@/) {
2556*00b67f09SDavid van Moolenbroek            if ($1 ~~ @substvar) {
2557*00b67f09SDavid van Moolenbroek                if (defined($configvar{$1})) {
2558*00b67f09SDavid van Moolenbroek                    $val = kw($configvar{$1});
2559*00b67f09SDavid van Moolenbroek                    $line = "$`$val$'";
2560*00b67f09SDavid van Moolenbroek                } else {
2561*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2562*00b67f09SDavid van Moolenbroek                }
2563*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substdefd) {
2564*00b67f09SDavid van Moolenbroek                if (defined($configdefd{$1})) {
2565*00b67f09SDavid van Moolenbroek                    $val = kw($configdefd{$1});
2566*00b67f09SDavid van Moolenbroek                    $line = "$`$val;$'";
2567*00b67f09SDavid van Moolenbroek                } else {
2568*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2569*00b67f09SDavid van Moolenbroek                }
2570*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substinc) {
2571*00b67f09SDavid van Moolenbroek                if (defined($configinc{$1})) {
2572*00b67f09SDavid van Moolenbroek                    $val = kw($configinc{$1});
2573*00b67f09SDavid van Moolenbroek                    $line = "$`$val;$'";
2574*00b67f09SDavid van Moolenbroek                } else {
2575*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2576*00b67f09SDavid van Moolenbroek                }
2577*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substlib) {
2578*00b67f09SDavid van Moolenbroek                if (defined($configlib{$1})) {
2579*00b67f09SDavid van Moolenbroek                    $val = kw($configlib{$1});
2580*00b67f09SDavid van Moolenbroek                    $line = "$`$val;$'";
2581*00b67f09SDavid van Moolenbroek                } else {
2582*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2583*00b67f09SDavid van Moolenbroek                }
2584*00b67f09SDavid van Moolenbroek            } elsif ($1 ~~ @substdll) {
2585*00b67f09SDavid van Moolenbroek                if (defined($configdll{$1})) {
2586*00b67f09SDavid van Moolenbroek                    $val = kw($configdll{$1});
2587*00b67f09SDavid van Moolenbroek                    $line = "$`$val$'";
2588*00b67f09SDavid van Moolenbroek                } else {
2589*00b67f09SDavid van Moolenbroek                    $line = "$`$'";
2590*00b67f09SDavid van Moolenbroek                }
2591*00b67f09SDavid van Moolenbroek            } else {
2592*00b67f09SDavid van Moolenbroek                die "unknown control $& in $projectname\n";
2593*00b67f09SDavid van Moolenbroek            }
2594*00b67f09SDavid van Moolenbroek        }
2595*00b67f09SDavid van Moolenbroek        push @Linesout, $line;
2596*00b67f09SDavid van Moolenbroek    }
2597*00b67f09SDavid van Moolenbroek
2598*00b67f09SDavid van Moolenbroek    open F, ">" . $projectname || die $!;
2599*00b67f09SDavid van Moolenbroek    if ($verbose) {
2600*00b67f09SDavid van Moolenbroek        print "Setting up $projectname\n";
2601*00b67f09SDavid van Moolenbroek    }
2602*00b67f09SDavid van Moolenbroek    foreach $line (@Linesout) {
2603*00b67f09SDavid van Moolenbroek        print F $line . "\n";
2604*00b67f09SDavid van Moolenbroek    }
2605*00b67f09SDavid van Moolenbroek    close F;
2606*00b67f09SDavid van Moolenbroek}
2607*00b67f09SDavid van Moolenbroek
2608*00b67f09SDavid van Moolenbroek# make versions.h
2609*00b67f09SDavid van Moolenbroek
2610*00b67f09SDavid van Moolenbroeksub makeversion {
2611*00b67f09SDavid van Moolenbroek    # List of directories with version files
2612*00b67f09SDavid van Moolenbroek
2613*00b67f09SDavid van Moolenbroek    my @dirlist = ("isc", "dns", "isccc", "isccfg", "lwres", "bind9", "irs");
2614*00b67f09SDavid van Moolenbroek    my %LibMacros = (
2615*00b67f09SDavid van Moolenbroek        "bind9"   => "LIBBIND9_EXPORTS",
2616*00b67f09SDavid van Moolenbroek        "dns"     => "LIBDNS_EXPORTS",
2617*00b67f09SDavid van Moolenbroek        "irs"     => "LIBIRS_EXPORTS",
2618*00b67f09SDavid van Moolenbroek        "isc"     => "LIBISC_EXPORTS",
2619*00b67f09SDavid van Moolenbroek        "isccc"   => "LIBISCCC_EXPORTS",
2620*00b67f09SDavid van Moolenbroek        "isccfg"  => "LIBISCCFG_EXPORTS",
2621*00b67f09SDavid van Moolenbroek        "lwres"   => "LIBLWRES_EXPORTS");
2622*00b67f09SDavid van Moolenbroek    my @VersionNames = ("LIBINTERFACE", "LIBREVISION", "LIBAGE");
2623*00b67f09SDavid van Moolenbroek    my %Versions;
2624*00b67f09SDavid van Moolenbroek    my $Version;
2625*00b67f09SDavid van Moolenbroek    my %ApiVersions;
2626*00b67f09SDavid van Moolenbroek    my $Mapapi;
2627*00b67f09SDavid van Moolenbroek    my $versionfile = "versions.h";
2628*00b67f09SDavid van Moolenbroek    my $versionpath = "..\\$versionfile";
2629*00b67f09SDavid van Moolenbroek
2630*00b67f09SDavid van Moolenbroek    my $data;
2631*00b67f09SDavid van Moolenbroek    my $name;
2632*00b67f09SDavid van Moolenbroek    my $value;
2633*00b67f09SDavid van Moolenbroek
2634*00b67f09SDavid van Moolenbroek    # First get the version information
2635*00b67f09SDavid van Moolenbroek
2636*00b67f09SDavid van Moolenbroek    open V, "..\\version" || die $!;
2637*00b67f09SDavid van Moolenbroek    while (<V>) {
2638*00b67f09SDavid van Moolenbroek        chomp;
2639*00b67f09SDavid van Moolenbroek        ($data) = split(/\#/);
2640*00b67f09SDavid van Moolenbroek        if ($data) {
2641*00b67f09SDavid van Moolenbroek            ($name, $value) = split(/=/, $data);
2642*00b67f09SDavid van Moolenbroek            ($name) = split(/\s+/, $name);
2643*00b67f09SDavid van Moolenbroek            if ($name eq 'PRODUCT' || $name eq 'DESCRIPTION') {
2644*00b67f09SDavid van Moolenbroek                ($value) =~ s/^["\s]+//;
2645*00b67f09SDavid van Moolenbroek                ($value) =~ s/["\s]+$//;
2646*00b67f09SDavid van Moolenbroek            } else {
2647*00b67f09SDavid van Moolenbroek                ($value) = split(/\s+/, $value);
2648*00b67f09SDavid van Moolenbroek            }
2649*00b67f09SDavid van Moolenbroek            $Versions{$name} = $value;
2650*00b67f09SDavid van Moolenbroek        }
2651*00b67f09SDavid van Moolenbroek    }
2652*00b67f09SDavid van Moolenbroek    close V;
2653*00b67f09SDavid van Moolenbroek
2654*00b67f09SDavid van Moolenbroek    # And the mapapi one
2655*00b67f09SDavid van Moolenbroek
2656*00b67f09SDavid van Moolenbroek    open M, "..\\lib\\dns\\mapapi" || die $!;
2657*00b67f09SDavid van Moolenbroek    while (<M>) {
2658*00b67f09SDavid van Moolenbroek        chomp;
2659*00b67f09SDavid van Moolenbroek        ($data) = split(/\#/);
2660*00b67f09SDavid van Moolenbroek        if ($data) {
2661*00b67f09SDavid van Moolenbroek            ($name, $value) = split(/=/, $data);
2662*00b67f09SDavid van Moolenbroek            ($name) = split(/\s+/, $name);
2663*00b67f09SDavid van Moolenbroek            if ($name eq 'MAPAPI') {
2664*00b67f09SDavid van Moolenbroek                ($value) =~ s/^["\s]+//;
2665*00b67f09SDavid van Moolenbroek                ($value) =~ s/["\s]+$//;
2666*00b67f09SDavid van Moolenbroek            } else {
2667*00b67f09SDavid van Moolenbroek                ($value) = split(/\s+/, $value);
2668*00b67f09SDavid van Moolenbroek            }
2669*00b67f09SDavid van Moolenbroek            $Mapapi = $value;
2670*00b67f09SDavid van Moolenbroek        }
2671*00b67f09SDavid van Moolenbroek    }
2672*00b67f09SDavid van Moolenbroek    close M;
2673*00b67f09SDavid van Moolenbroek
2674*00b67f09SDavid van Moolenbroek    # Now set up the output version file
2675*00b67f09SDavid van Moolenbroek
2676*00b67f09SDavid van Moolenbroek    my $ThisDate = scalar localtime();
2677*00b67f09SDavid van Moolenbroek    open O, ">$versionpath" ||
2678*00b67f09SDavid van Moolenbroek        die "Can't open output file $versionpath: $!\n";
2679*00b67f09SDavid van Moolenbroek
2680*00b67f09SDavid van Moolenbroek    # Standard Header
2681*00b67f09SDavid van Moolenbroek
2682*00b67f09SDavid van Moolenbroek    print O '/*
2683*00b67f09SDavid van Moolenbroek * Copyright (C) 2001  Internet Software Consortium.
2684*00b67f09SDavid van Moolenbroek *
2685*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and distribute this software for any
2686*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
2687*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
2688*00b67f09SDavid van Moolenbroek *
2689*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
2690*00b67f09SDavid van Moolenbroek * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
2691*00b67f09SDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
2692*00b67f09SDavid van Moolenbroek * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
2693*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
2694*00b67f09SDavid van Moolenbroek * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
2695*00b67f09SDavid van Moolenbroek * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
2696*00b67f09SDavid van Moolenbroek * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2697*00b67f09SDavid van Moolenbroek */
2698*00b67f09SDavid van Moolenbroek
2699*00b67f09SDavid van Moolenbroek';
2700*00b67f09SDavid van Moolenbroek
2701*00b67f09SDavid van Moolenbroek    print O "/*\n";
2702*00b67f09SDavid van Moolenbroek    print O " * $versionfile.";
2703*00b67f09SDavid van Moolenbroek    print O "  Generated automatically by Configure.pl.\n";
2704*00b67f09SDavid van Moolenbroek    print O " * Date generated: $ThisDate\n";
2705*00b67f09SDavid van Moolenbroek    print O " */\n\n";
2706*00b67f09SDavid van Moolenbroek
2707*00b67f09SDavid van Moolenbroek    print O '
2708*00b67f09SDavid van Moolenbroek#ifndef  VERSIONS_H
2709*00b67f09SDavid van Moolenbroek#define VERSIONS_H 1
2710*00b67f09SDavid van Moolenbroek
2711*00b67f09SDavid van Moolenbroek';
2712*00b67f09SDavid van Moolenbroek
2713*00b67f09SDavid van Moolenbroek    $Version = "$Versions{'MAJORVER'}.$Versions{'MINORVER'}";
2714*00b67f09SDavid van Moolenbroek    if ($Versions{'PATCHVER'} != "") {
2715*00b67f09SDavid van Moolenbroek        $Version = "$Version.$Versions{'PATCHVER'}";
2716*00b67f09SDavid van Moolenbroek    }
2717*00b67f09SDavid van Moolenbroek    $Version = "$Version$Versions{'RELEASETYPE'}$Versions{'RELEASEVER'}";
2718*00b67f09SDavid van Moolenbroek    $Version = "$Version$Versions{'EXTENSIONS'}";
2719*00b67f09SDavid van Moolenbroek    if ($verbose) {
2720*00b67f09SDavid van Moolenbroek        print "BIND Version: $Version\n";
2721*00b67f09SDavid van Moolenbroek    }
2722*00b67f09SDavid van Moolenbroek
2723*00b67f09SDavid van Moolenbroek    print O "#define VERSION \"$Version\"\n";
2724*00b67f09SDavid van Moolenbroek    print O "#define PRODUCT \"$Versions{'PRODUCT'}\"\n\n";
2725*00b67f09SDavid van Moolenbroek    print O "#define DESCRIPTION \"$Versions{'DESCRIPTION'}\"\n\n";
2726*00b67f09SDavid van Moolenbroek    print O
2727*00b67f09SDavid van Moolenbroek        "#define MAJOR \"$Versions{'MAJORVER'}.$Versions{'MINORVER'}\"\n\n";
2728*00b67f09SDavid van Moolenbroek    print O "#define MAPAPI \"$Mapapi\"\n\n";
2729*00b67f09SDavid van Moolenbroek
2730*00b67f09SDavid van Moolenbroek    my $dir;
2731*00b67f09SDavid van Moolenbroek    my $apifile;
2732*00b67f09SDavid van Moolenbroek    foreach $dir (@dirlist) {
2733*00b67f09SDavid van Moolenbroek        $apifile = "..\\lib\\$dir\\api";
2734*00b67f09SDavid van Moolenbroek        open A, $apifile || die $!;
2735*00b67f09SDavid van Moolenbroek        while (<A>) {
2736*00b67f09SDavid van Moolenbroek            chomp;
2737*00b67f09SDavid van Moolenbroek            ($data) = split(/\#/);
2738*00b67f09SDavid van Moolenbroek            if ($data) {
2739*00b67f09SDavid van Moolenbroek                ($name, $value) = split(/=/, $data);
2740*00b67f09SDavid van Moolenbroek                $name =~ s/\s+//;
2741*00b67f09SDavid van Moolenbroek                $value =~ s/\s+//;
2742*00b67f09SDavid van Moolenbroek                $ApiVersions{$name} = $value;
2743*00b67f09SDavid van Moolenbroek            }
2744*00b67f09SDavid van Moolenbroek        }
2745*00b67f09SDavid van Moolenbroek        close A;
2746*00b67f09SDavid van Moolenbroek
2747*00b67f09SDavid van Moolenbroek        print O "\n#ifdef $LibMacros{$dir}\n";
2748*00b67f09SDavid van Moolenbroek        foreach $name (@VersionNames) {
2749*00b67f09SDavid van Moolenbroek            print O "#define $name\t$ApiVersions{$name}\n";
2750*00b67f09SDavid van Moolenbroek        }
2751*00b67f09SDavid van Moolenbroek        print O "#endif\n\n";
2752*00b67f09SDavid van Moolenbroek    }
2753*00b67f09SDavid van Moolenbroek
2754*00b67f09SDavid van Moolenbroek    print O "#endif /* VERSIONS_H */\n";
2755*00b67f09SDavid van Moolenbroek    close O;
2756*00b67f09SDavid van Moolenbroek}
2757*00b67f09SDavid van Moolenbroek
2758*00b67f09SDavid van Moolenbroek# make srcid.h
2759*00b67f09SDavid van Moolenbroek
2760*00b67f09SDavid van Moolenbroeksub makesrcid {
2761*00b67f09SDavid van Moolenbroek    my $data;
2762*00b67f09SDavid van Moolenbroek    my $name;
2763*00b67f09SDavid van Moolenbroek    my $value;
2764*00b67f09SDavid van Moolenbroek    my $srcid = "unset";
2765*00b67f09SDavid van Moolenbroek
2766*00b67f09SDavid van Moolenbroek    open SOUT, ">..\\srcid.h" || die "cannot open srcid.h: $!\n";
2767*00b67f09SDavid van Moolenbroek    if (open (SIN, "..\\srcid")) {
2768*00b67f09SDavid van Moolenbroek      LOOP: while (<SIN>) {
2769*00b67f09SDavid van Moolenbroek          chomp;
2770*00b67f09SDavid van Moolenbroek          ($data) = split(/\#/);
2771*00b67f09SDavid van Moolenbroek          if ($data) {
2772*00b67f09SDavid van Moolenbroek              ($name, $value) = split(/=/, $data);
2773*00b67f09SDavid van Moolenbroek              ($name) = split(/\s+/, $name);
2774*00b67f09SDavid van Moolenbroek              ($value) = split(/\s+/, $value);
2775*00b67f09SDavid van Moolenbroek              next LOOP if ($name != "SRCID");
2776*00b67f09SDavid van Moolenbroek              $srcid = $value;
2777*00b67f09SDavid van Moolenbroek          }
2778*00b67f09SDavid van Moolenbroek        }
2779*00b67f09SDavid van Moolenbroek        close SIN;
2780*00b67f09SDavid van Moolenbroek    }
2781*00b67f09SDavid van Moolenbroek
2782*00b67f09SDavid van Moolenbroek    # Now set up the output version file
2783*00b67f09SDavid van Moolenbroek
2784*00b67f09SDavid van Moolenbroek    my $ThisDate = scalar localtime();
2785*00b67f09SDavid van Moolenbroek
2786*00b67f09SDavid van Moolenbroek    # Standard Header
2787*00b67f09SDavid van Moolenbroek
2788*00b67f09SDavid van Moolenbroek    print SOUT '/*
2789*00b67f09SDavid van Moolenbroek * Copyright (C) 2012  Internet Software Consortium.
2790*00b67f09SDavid van Moolenbroek *
2791*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and distribute this software for any
2792*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
2793*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
2794*00b67f09SDavid van Moolenbroek *
2795*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
2796*00b67f09SDavid van Moolenbroek * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
2797*00b67f09SDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
2798*00b67f09SDavid van Moolenbroek * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
2799*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
2800*00b67f09SDavid van Moolenbroek * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
2801*00b67f09SDavid van Moolenbroek * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
2802*00b67f09SDavid van Moolenbroek * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
2803*00b67f09SDavid van Moolenbroek */
2804*00b67f09SDavid van Moolenbroek
2805*00b67f09SDavid van Moolenbroek';
2806*00b67f09SDavid van Moolenbroek
2807*00b67f09SDavid van Moolenbroek    print SOUT "/*\n";
2808*00b67f09SDavid van Moolenbroek    print SOUT " * srcid.h";
2809*00b67f09SDavid van Moolenbroek    print SOUT " * Generated automatically by Configure.pl.\n";
2810*00b67f09SDavid van Moolenbroek    print SOUT " * Date generated: $ThisDate\n";
2811*00b67f09SDavid van Moolenbroek    print SOUT " */\n\n";
2812*00b67f09SDavid van Moolenbroek
2813*00b67f09SDavid van Moolenbroek    print SOUT '
2814*00b67f09SDavid van Moolenbroek#ifndef  SRCID_H
2815*00b67f09SDavid van Moolenbroek#define SRCID_H 1
2816*00b67f09SDavid van Moolenbroek';
2817*00b67f09SDavid van Moolenbroek
2818*00b67f09SDavid van Moolenbroek    if ($verbose) {
2819*00b67f09SDavid van Moolenbroek        print "BIND SRCID: $srcid\n";
2820*00b67f09SDavid van Moolenbroek    }
2821*00b67f09SDavid van Moolenbroek
2822*00b67f09SDavid van Moolenbroek    print SOUT "#define SRCID\t\"$srcid\"\n";
2823*00b67f09SDavid van Moolenbroek    print SOUT "#endif /* SRCID_H */\n";
2824*00b67f09SDavid van Moolenbroek    close SOUT;
2825*00b67f09SDavid van Moolenbroek}
2826*00b67f09SDavid van Moolenbroek
2827*00b67f09SDavid van Moolenbroek# Status
2828*00b67f09SDavid van Moolenbroek
2829*00b67f09SDavid van Moolenbroekif ($verbose) {
2830*00b67f09SDavid van Moolenbroek    my $name;
2831*00b67f09SDavid van Moolenbroek
2832*00b67f09SDavid van Moolenbroek    print "Configuration Status\n";
2833*00b67f09SDavid van Moolenbroek
2834*00b67f09SDavid van Moolenbroek    print "\tconfig.h:\n";
2835*00b67f09SDavid van Moolenbroek    foreach $name (@substdefh) {
2836*00b67f09SDavid van Moolenbroek        if (defined($configdefh{$name})) {
2837*00b67f09SDavid van Moolenbroek            print qq(\t\t$name defined to "$configdefh{$name}"\n);
2838*00b67f09SDavid van Moolenbroek        } else {
2839*00b67f09SDavid van Moolenbroek            printf qq(\t\t$name undefined\n);
2840*00b67f09SDavid van Moolenbroek        }
2841*00b67f09SDavid van Moolenbroek    }
2842*00b67f09SDavid van Moolenbroek
2843*00b67f09SDavid van Moolenbroek    print "\tplatform.h:\n";
2844*00b67f09SDavid van Moolenbroek    foreach $name (@substdefp) {
2845*00b67f09SDavid van Moolenbroek        if (defined($configdefp{$name})) {
2846*00b67f09SDavid van Moolenbroek            print qq(\t\t$name defined to "$configdefp{$name}"\n);
2847*00b67f09SDavid van Moolenbroek        } else {
2848*00b67f09SDavid van Moolenbroek            printf qq(\t\t$name undefined\n);
2849*00b67f09SDavid van Moolenbroek        }
2850*00b67f09SDavid van Moolenbroek    }
2851*00b67f09SDavid van Moolenbroek
2852*00b67f09SDavid van Moolenbroek    print "\tconditions:\n";
2853*00b67f09SDavid van Moolenbroek    foreach $name (@substcond) {
2854*00b67f09SDavid van Moolenbroek        if (defined($configcond{$name})) {
2855*00b67f09SDavid van Moolenbroek            print "\t\t$name is true\n";
2856*00b67f09SDavid van Moolenbroek        } else {
2857*00b67f09SDavid van Moolenbroek            print "\t\t$name is false\n";
2858*00b67f09SDavid van Moolenbroek        }
2859*00b67f09SDavid van Moolenbroek    }
2860*00b67f09SDavid van Moolenbroek
2861*00b67f09SDavid van Moolenbroek    print "\tsubstitutions:\n";
2862*00b67f09SDavid van Moolenbroek    foreach $name (@substvar) {
2863*00b67f09SDavid van Moolenbroek        if (defined($configvar{$name})) {
2864*00b67f09SDavid van Moolenbroek            print qq(\t\t$name -> "$configvar{$name}"\n);
2865*00b67f09SDavid van Moolenbroek        }
2866*00b67f09SDavid van Moolenbroek    }
2867*00b67f09SDavid van Moolenbroek
2868*00b67f09SDavid van Moolenbroek    print "\tdefines:\n";
2869*00b67f09SDavid van Moolenbroek    foreach $name (@substdefd) {
2870*00b67f09SDavid van Moolenbroek        if (defined($configdefd{$name})) {
2871*00b67f09SDavid van Moolenbroek            print qq(\t\t/D "$configdefd{$name}"\n);
2872*00b67f09SDavid van Moolenbroek        }
2873*00b67f09SDavid van Moolenbroek    }
2874*00b67f09SDavid van Moolenbroek
2875*00b67f09SDavid van Moolenbroek    print "\tincludes:\n";
2876*00b67f09SDavid van Moolenbroek    foreach $name (@substinc) {
2877*00b67f09SDavid van Moolenbroek        if (defined($configinc{$name})) {
2878*00b67f09SDavid van Moolenbroek            print qq(\t\t/I "$configinc{$name}"\n);
2879*00b67f09SDavid van Moolenbroek        }
2880*00b67f09SDavid van Moolenbroek    }
2881*00b67f09SDavid van Moolenbroek
2882*00b67f09SDavid van Moolenbroek    print "\tlibraries:\n";
2883*00b67f09SDavid van Moolenbroek    foreach $name (@substlib) {
2884*00b67f09SDavid van Moolenbroek        if (defined($configlib{$name})) {
2885*00b67f09SDavid van Moolenbroek            print "\t\t$configlib{$name}\n";
2886*00b67f09SDavid van Moolenbroek        }
2887*00b67f09SDavid van Moolenbroek    }
2888*00b67f09SDavid van Moolenbroek
2889*00b67f09SDavid van Moolenbroek    print "\tDLLs:\n";
2890*00b67f09SDavid van Moolenbroek    foreach $name (@substdll) {
2891*00b67f09SDavid van Moolenbroek        if (defined($configdll{$name})) {
2892*00b67f09SDavid van Moolenbroek            print "\t\t$configdll{$name}\n";
2893*00b67f09SDavid van Moolenbroek        }
2894*00b67f09SDavid van Moolenbroek    }
2895*00b67f09SDavid van Moolenbroek
2896*00b67f09SDavid van Moolenbroek    print "\n";
2897*00b67f09SDavid van Moolenbroek}
2898*00b67f09SDavid van Moolenbroek
2899*00b67f09SDavid van Moolenbroek# Setup
2900*00b67f09SDavid van Moolenbroekif (($want_win32 eq "yes") || ($want_x64 eq "yes")) {
2901*00b67f09SDavid van Moolenbroek    setupconfigh();
2902*00b67f09SDavid van Moolenbroek
2903*00b67f09SDavid van Moolenbroek    setupplatformh();
2904*00b67f09SDavid van Moolenbroek
2905*00b67f09SDavid van Moolenbroek    my $file;
2906*00b67f09SDavid van Moolenbroek    foreach $file (@filelist) {
2907*00b67f09SDavid van Moolenbroek        setupfile($file);
2908*00b67f09SDavid van Moolenbroek    }
2909*00b67f09SDavid van Moolenbroek
2910*00b67f09SDavid van Moolenbroek    if (!$legacy_only) {
2911*00b67f09SDavid van Moolenbroek        foreach $file (@projectlist) {
2912*00b67f09SDavid van Moolenbroek            setupproject($file);
2913*00b67f09SDavid van Moolenbroek        }
2914*00b67f09SDavid van Moolenbroek    }
2915*00b67f09SDavid van Moolenbroek
2916*00b67f09SDavid van Moolenbroek    makeversion();
2917*00b67f09SDavid van Moolenbroek
2918*00b67f09SDavid van Moolenbroek    makesrcid();
2919*00b67f09SDavid van Moolenbroek
2920*00b67f09SDavid van Moolenbroek    print "Configured.\n";
2921*00b67f09SDavid van Moolenbroek} else {
2922*00b67f09SDavid van Moolenbroek    print "add win32 or x64 to commit configuration to build files\n";
2923*00b67f09SDavid van Moolenbroek}
2924*00b67f09SDavid van Moolenbroek
2925*00b67f09SDavid van Moolenbroekexit 0;
2926*00b67f09SDavid van Moolenbroek
2927*00b67f09SDavid van Moolenbroek# Notes: Unix configure.in options
2928*00b67f09SDavid van Moolenbroek#  --enable-developer partially supported
2929*00b67f09SDavid van Moolenbroek#  --enable-newstats (9.9/9.9sub only)
2930*00b67f09SDavid van Moolenbroek#  --enable-native-pkcs11 supported
2931*00b67f09SDavid van Moolenbroek#  --enable-openssl-version-check included without a way to disable it
2932*00b67f09SDavid van Moolenbroek#  --enable-openssl-hash supported
2933*00b67f09SDavid van Moolenbroek#  --enable-threads included without a way to disable it
2934*00b67f09SDavid van Moolenbroek#  --enable-backtrace backtrace included without a way to disable it
2935*00b67f09SDavid van Moolenbroek#  --enable-symtable incompatible with DLLs (or libtool)
2936*00b67f09SDavid van Moolenbroek#  --enable-exportlib TODO (obsolete)
2937*00b67f09SDavid van Moolenbroek#  --enable-ipv6 included without a way to disable it
2938*00b67f09SDavid van Moolenbroek#  --enable-atomic supported (renamed to intrinsic)
2939*00b67f09SDavid van Moolenbroek#  --enable-spnego support (part of GSSAPI)
2940*00b67f09SDavid van Moolenbroek#  --enable-fixed-rrset supported
2941*00b67f09SDavid van Moolenbroek#  --disable-rpz-nsip supported
2942*00b67f09SDavid van Moolenbroek#  --disable-rpz-nsdname supported
2943*00b67f09SDavid van Moolenbroek#  --enable-filter-aaaa supported
2944*00b67f09SDavid van Moolenbroek#  --enable-sit supported
2945*00b67f09SDavid van Moolenbroek#  --enable-full-report supported by verbose
2946*00b67f09SDavid van Moolenbroek#  --with-python supported
2947*00b67f09SDavid van Moolenbroek#  --with-openssl supported
2948*00b67f09SDavid van Moolenbroek#  --with-pkcs11 supported
2949*00b67f09SDavid van Moolenbroek#  --with-ecdsa supported
2950*00b67f09SDavid van Moolenbroek#  --with-gost supported
2951*00b67f09SDavid van Moolenbroek#  --with-aes supported
2952*00b67f09SDavid van Moolenbroek#  --with-sit-alg supported
2953*00b67f09SDavid van Moolenbroek#  --with-geoip supported
2954*00b67f09SDavid van Moolenbroek#  --with-gssapi supported with MIT (K)erberos (f)or (W)indows
2955*00b67f09SDavid van Moolenbroek#  --with-libxml2 supported
2956*00b67f09SDavid van Moolenbroek#  --with-libjson not supported on WIN32 (package not available on WIN32)
2957*00b67f09SDavid van Moolenbroek#  --with-purify ? (package available on WIN32 but for free?)
2958*00b67f09SDavid van Moolenbroek#  --with-gperftools-profiler (package not available on WIN32)
2959*00b67f09SDavid van Moolenbroek#  --with-libtool not supported on WIN32 (never)
2960*00b67f09SDavid van Moolenbroek#  --with-locktype not supported on WIN32 (not yet available on WIN32)
2961*00b67f09SDavid van Moolenbroek#  --with-readline supported
2962*00b67f09SDavid van Moolenbroek#  --with-idn support
2963*00b67f09SDavid van Moolenbroek#  --with-[lib]iconv (part of IDN)
2964*00b67f09SDavid van Moolenbroek#  --with-atf not supported on WIN32 (package not available on WIN32)
2965*00b67f09SDavid van Moolenbroek#  --with-tuning supported
2966*00b67f09SDavid van Moolenbroek#  --with-dlopen included without a way to disable it
2967*00b67f09SDavid van Moolenbroek#  --with-dlz-* ?
2968*00b67f09SDavid van Moolenbroek#
2969*00b67f09SDavid van Moolenbroek# Notes: MSVC versions
2970*00b67f09SDavid van Moolenbroek# MSVC 14.0 _MSC_VER == 1900 (VS 14 (2014))
2971*00b67f09SDavid van Moolenbroek# MSVC 12.0 _MSC_VER == 1800 (VS 2013)
2972*00b67f09SDavid van Moolenbroek# MSVC 11.0 _MSC_VER == 1700 (VS 2012)
2973*00b67f09SDavid van Moolenbroek# MSVC 10.0 _MSC_VER == 1600 (VS 2010)
2974*00b67f09SDavid van Moolenbroek# MSVC 9.0  _MSC_VER == 1500 (VS 2008)
2975*00b67f09SDavid van Moolenbroek# MSVC 8.0  _MSC_VER == 1400 (VS 2005)
2976*00b67f09SDavid van Moolenbroek# MSVC 7.1  _MSC_VER == 1310 (VS .NET 2003)
2977*00b67f09SDavid van Moolenbroek# MSVC 7.0  _MSC_VER == 1300 (VS .NET (2002))
2978*00b67f09SDavid van Moolenbroek# MSVC 6.0  _MSC_VER == 1200 (VS 6.0 (1998))
2979*00b67f09SDavid van Moolenbroek# MSVC 5.0  _MSC_VER == 1100 (VS 97)
2980