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