1d102a711SStefan Bühlerfrom __future__ import print_function 2e95ea21bSJan Kneschkeimport os 3e95ea21bSJan Kneschkeimport re 4809199f9SmOoimport string 52eb7287aSStefan Bühlerimport sys 62eb7287aSStefan Bühlerfrom copy import copy 7809199f9SmOofrom stat import * 8e95ea21bSJan Kneschke 9d102a711SStefan Bühlertry: 10d102a711SStefan Bühler string_types = basestring 11d102a711SStefan Bühlerexcept NameError: 12d102a711SStefan Bühler string_types = str 13d102a711SStefan Bühler 14e95ea21bSJan Kneschkepackage = 'lighttpd' 15*add03ac2SGlenn Straussversion = '1.4.70' 16e95ea21bSJan Kneschke 1742704e31SStefan Bühlerunderscorify_reg = re.compile('[^A-Z0-9]') 1842704e31SStefan Bühlerdef underscorify(id): 1942704e31SStefan Bühler return underscorify_reg.sub('_', id.upper()) 2042704e31SStefan Bühler 2166e0cd16SStefan Bühlerdef fail(*args, **kwargs): 2266e0cd16SStefan Bühler print(*args, file=sys.stderr, **kwargs) 23d102a711SStefan Bühler sys.exit(-1) 2466e0cd16SStefan Bühler 2542704e31SStefan Bühlerclass Autoconf: 2642704e31SStefan Bühler class RestoreEnvLibs: 2742704e31SStefan Bühler def __init__(self, env): 2842704e31SStefan Bühler self.env = env 2942704e31SStefan Bühler self.active = False 3042704e31SStefan Bühler 3142704e31SStefan Bühler def __enter__(self): 3242704e31SStefan Bühler if self.active: 3342704e31SStefan Bühler raise Exception('entered twice') 3442704e31SStefan Bühler self.active = True 3542704e31SStefan Bühler if 'LIBS' in self.env: 3642704e31SStefan Bühler #print("Backup LIBS: " + repr(self.env['LIBS'])) 3742704e31SStefan Bühler self.empty = False 3842704e31SStefan Bühler self.backup_libs = copy(self.env['LIBS']) 3942704e31SStefan Bühler else: 4042704e31SStefan Bühler #print("No LIBS to backup") 4142704e31SStefan Bühler self.empty = True 4242704e31SStefan Bühler 4342704e31SStefan Bühler def __exit__(self, type, value, traceback): 4442704e31SStefan Bühler if not self.active: 4542704e31SStefan Bühler raise Exception('exited twice') 4642704e31SStefan Bühler self.active = False 4742704e31SStefan Bühler if self.empty: 4842704e31SStefan Bühler if 'LIBS' in self.env: 4942704e31SStefan Bühler del self.env['LIBS'] 5042704e31SStefan Bühler else: 5142704e31SStefan Bühler #print("Restoring LIBS, now: " + repr(self.env['LIBS'])) 5242704e31SStefan Bühler self.env['LIBS'] = self.backup_libs 5342704e31SStefan Bühler #print("Restoring LIBS, to: " + repr(self.env['LIBS'])) 5442704e31SStefan Bühler 5542704e31SStefan Bühler def __init__(self, env): 5642704e31SStefan Bühler self.conf = Configure(env, custom_tests = { 5742704e31SStefan Bühler 'CheckGmtOffInStructTm': Autoconf.__checkGmtOffInStructTm, 5842704e31SStefan Bühler 'CheckIPv6': Autoconf.__checkIPv6, 5942704e31SStefan Bühler 'CheckWeakSymbols': Autoconf.__checkWeakSymbols, 6042704e31SStefan Bühler }) 6142704e31SStefan Bühler 6242704e31SStefan Bühler def append(self, *args, **kw): 6342704e31SStefan Bühler return self.conf.env.Append(*args, **kw) 6442704e31SStefan Bühler 6542704e31SStefan Bühler def Finish(self): 6642704e31SStefan Bühler return self.conf.Finish() 6742704e31SStefan Bühler 6842704e31SStefan Bühler @property 6942704e31SStefan Bühler def env(self): 7042704e31SStefan Bühler return self.conf.env 7142704e31SStefan Bühler 7242704e31SStefan Bühler def restoreEnvLibs(self): 7342704e31SStefan Bühler return Autoconf.RestoreEnvLibs(self.conf.env) 7442704e31SStefan Bühler 7542704e31SStefan Bühler def CheckType(self, *args, **kw): 7642704e31SStefan Bühler return self.conf.CheckType(*args, **kw) 7742704e31SStefan Bühler 7842704e31SStefan Bühler def CheckLib(self, *args, **kw): 7942704e31SStefan Bühler return self.conf.CheckLib(*args, autoadd = 0, **kw) 8042704e31SStefan Bühler 8142704e31SStefan Bühler def CheckLibWithHeader(self, *args, **kw): 8242704e31SStefan Bühler return self.conf.CheckLibWithHeader(*args, autoadd = 0, **kw) 8342704e31SStefan Bühler 8442704e31SStefan Bühler def CheckGmtOffInStructTm(self): 8542704e31SStefan Bühler return self.conf.CheckGmtOffInStructTm() 8642704e31SStefan Bühler 8742704e31SStefan Bühler def CheckIPv6(self): 8842704e31SStefan Bühler return self.conf.CheckIPv6() 8942704e31SStefan Bühler 9042704e31SStefan Bühler def CheckWeakSymbols(self): 9142704e31SStefan Bühler return self.conf.CheckWeakSymbols() 9242704e31SStefan Bühler 9342704e31SStefan Bühler def CheckCHeader(self, hdr): 9442704e31SStefan Bühler return self.conf.CheckCHeader(hdr) 9542704e31SStefan Bühler 9642704e31SStefan Bühler def haveCHeader(self, hdr): 9742704e31SStefan Bühler if self.CheckCHeader(hdr): 9842704e31SStefan Bühler # if we have a list of headers define HAVE_ only for last one 9942704e31SStefan Bühler target = hdr 100d102a711SStefan Bühler if not isinstance(target, string_types): 10142704e31SStefan Bühler target = target[-1] 10242704e31SStefan Bühler self.conf.env.Append(CPPFLAGS = [ '-DHAVE_' + underscorify(target) ]) 10342704e31SStefan Bühler return True 10442704e31SStefan Bühler return False 10542704e31SStefan Bühler 10642704e31SStefan Bühler def haveCHeaders(self, hdrs): 107e95ea21bSJan Kneschke for hdr in hdrs: 10842704e31SStefan Bühler self.haveCHeader(hdr) 109e95ea21bSJan Kneschke 11042704e31SStefan Bühler def CheckFunc(self, func, header = None, libs = []): 11142704e31SStefan Bühler with self.restoreEnvLibs(): 11242704e31SStefan Bühler self.env.Append(LIBS = libs) 11342704e31SStefan Bühler return self.conf.CheckFunc(func, header = header) 1143d0dcdf6SGlenn Strauss 11542704e31SStefan Bühler def CheckFuncInLib(self, func, lib): 11642704e31SStefan Bühler return self.CheckFunc(func, libs = [lib]) 11742704e31SStefan Bühler 11842704e31SStefan Bühler def haveFuncInLib(self, func, lib): 11942704e31SStefan Bühler if self.CheckFuncInLib(func, lib): 12042704e31SStefan Bühler self.conf.env.Append(CPPFLAGS = [ '-DHAVE_' + underscorify(func) ]) 12142704e31SStefan Bühler return True 12242704e31SStefan Bühler return False 12342704e31SStefan Bühler 12442704e31SStefan Bühler def haveFunc(self, func, header = None, libs = []): 12542704e31SStefan Bühler if self.CheckFunc(func, header = header, libs = libs): 12642704e31SStefan Bühler self.conf.env.Append(CPPFLAGS = [ '-DHAVE_' + underscorify(func) ]) 12742704e31SStefan Bühler return True 12842704e31SStefan Bühler return False 12942704e31SStefan Bühler 13042704e31SStefan Bühler def haveFuncs(self, funcs): 131e95ea21bSJan Kneschke for func in funcs: 13242704e31SStefan Bühler self.haveFunc(func) 133e95ea21bSJan Kneschke 13442704e31SStefan Bühler def haveTypes(self, types): 135e95ea21bSJan Kneschke for type in types: 13642704e31SStefan Bühler if self.conf.CheckType(type, '#include <sys/types.h>'): 13742704e31SStefan Bühler self.conf.env.Append(CPPFLAGS = [ '-DHAVE_' + underscorify(type) ]) 138e95ea21bSJan Kneschke 1393ba68b25SStefan Bühler def CheckParseConfig(self, *args, **kw): 1403ba68b25SStefan Bühler try: 1413ba68b25SStefan Bühler self.conf.env.ParseConfig(*args, **kw) 1423ba68b25SStefan Bühler return True 14316560049SGlenn Strauss except OSError: 14416560049SGlenn Strauss return False 1453ba68b25SStefan Bühler except Exception as e: 1463ba68b25SStefan Bühler print(e.message, file=sys.stderr) 1473ba68b25SStefan Bühler return False 1483ba68b25SStefan Bühler 1493ba68b25SStefan Bühler def CheckParseConfigForLib(self, lib, *args, **kw): 1503ba68b25SStefan Bühler with self.restoreEnvLibs(): 1513ba68b25SStefan Bühler self.env['LIBS'] = [] 1523ba68b25SStefan Bühler if not self.CheckParseConfig(*args, **kw): 1533ba68b25SStefan Bühler return False 1543ba68b25SStefan Bühler self.env.Append(**{lib: self.env['LIBS']}) 1553ba68b25SStefan Bühler return True 1563ba68b25SStefan Bühler 15742704e31SStefan Bühler @staticmethod 15842704e31SStefan Bühler def __checkGmtOffInStructTm(context): 159d7be04beSLoganaden Velvindron source = """ 160d7be04beSLoganaden Velvindron#include <time.h> 161d7be04beSLoganaden Velvindronint main() { 162d7be04beSLoganaden Velvindron struct tm a; 163d7be04beSLoganaden Velvindron a.tm_gmtoff = 0; 164d7be04beSLoganaden Velvindron return 0; 165d7be04beSLoganaden Velvindron} 166d7be04beSLoganaden Velvindron""" 167d7be04beSLoganaden Velvindron context.Message('Checking for tm_gmtoff in struct tm...') 168d7be04beSLoganaden Velvindron result = context.TryLink(source, '.c') 169d7be04beSLoganaden Velvindron context.Result(result) 170d7be04beSLoganaden Velvindron 171d7be04beSLoganaden Velvindron return result 172d7be04beSLoganaden Velvindron 17342704e31SStefan Bühler @staticmethod 17442704e31SStefan Bühler def __checkIPv6(context): 175d7be04beSLoganaden Velvindron source = """ 176d7be04beSLoganaden Velvindron#include <sys/types.h> 177d7be04beSLoganaden Velvindron#include <sys/socket.h> 178d7be04beSLoganaden Velvindron#include <netinet/in.h> 179d7be04beSLoganaden Velvindron 180d7be04beSLoganaden Velvindronint main() { 181d7be04beSLoganaden Velvindron struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; 182d7be04beSLoganaden Velvindron return 0; 183d7be04beSLoganaden Velvindron} 184d7be04beSLoganaden Velvindron""" 185d7be04beSLoganaden Velvindron context.Message('Checking for IPv6 support...') 186d7be04beSLoganaden Velvindron result = context.TryLink(source, '.c') 187d7be04beSLoganaden Velvindron context.Result(result) 188d7be04beSLoganaden Velvindron 189d7be04beSLoganaden Velvindron return result 190d7be04beSLoganaden Velvindron 19142704e31SStefan Bühler @staticmethod 19242704e31SStefan Bühler def __checkWeakSymbols(context): 193d7be04beSLoganaden Velvindron source = """ 194d7be04beSLoganaden Velvindron__attribute__((weak)) void __dummy(void *x) { } 195d7be04beSLoganaden Velvindronint main() { 196d7be04beSLoganaden Velvindron void *x; 197d7be04beSLoganaden Velvindron __dummy(x); 198d7be04beSLoganaden Velvindron} 199d7be04beSLoganaden Velvindron""" 200d7be04beSLoganaden Velvindron context.Message('Checking for weak symbol support...') 201d7be04beSLoganaden Velvindron result = context.TryLink(source, '.c') 202d7be04beSLoganaden Velvindron context.Result(result) 203d7be04beSLoganaden Velvindron 204d7be04beSLoganaden Velvindron return result 205d7be04beSLoganaden Velvindron 20642704e31SStefan Bühler def checkProgram(self, withname, progname): 207809199f9SmOo withname = 'with_' + withname 208809199f9SmOo binpath = None 209809199f9SmOo 21042704e31SStefan Bühler if self.env[withname] != 1: 21142704e31SStefan Bühler binpath = self.env[withname] 212809199f9SmOo else: 21342704e31SStefan Bühler prog = self.env.Detect(progname) 214809199f9SmOo if prog: 21542704e31SStefan Bühler binpath = self.env.WhereIs(prog) 216809199f9SmOo 217809199f9SmOo if binpath: 218809199f9SmOo mode = os.stat(binpath)[ST_MODE] 219809199f9SmOo if S_ISDIR(mode): 22066e0cd16SStefan Bühler fail("* error: path `%s' is a directory" % (binpath)) 221809199f9SmOo if not S_ISREG(mode): 22266e0cd16SStefan Bühler fail("* error: path `%s' is not a file or not exists" % (binpath)) 223809199f9SmOo 224809199f9SmOo if not binpath: 22566e0cd16SStefan Bühler fail("* error: can't find program `%s'" % (progname)) 226809199f9SmOo 227809199f9SmOo return binpath 228e95ea21bSJan Kneschke 22968284bd7SStefan BühlerVariantDir('sconsbuild/build', 'src', duplicate = 0) 23068284bd7SStefan BühlerVariantDir('sconsbuild/tests', 'tests', duplicate = 0) 231e95ea21bSJan Kneschke 23273ef60a5SStefan Bühlervars = Variables() 23368284bd7SStefan Bühlervars.AddVariables( 234e95ea21bSJan Kneschke ('prefix', 'prefix', '/usr/local'), 235e95ea21bSJan Kneschke ('bindir', 'binary directory', '${prefix}/bin'), 2365da35301SmOo ('sbindir', 'binary directory', '${prefix}/sbin'), 237e95ea21bSJan Kneschke ('libdir', 'library directory', '${prefix}/lib'), 23868284bd7SStefan Bühler PathVariable('CC', 'path to the c-compiler', None), 23968284bd7SStefan Bühler BoolVariable('build_dynamic', 'enable dynamic build', 'yes'), 24068284bd7SStefan Bühler BoolVariable('build_static', 'enable static build', 'no'), 24168284bd7SStefan Bühler BoolVariable('build_fullstatic', 'enable fullstatic build', 'no'), 242ccba074cSStefan Bühler 24368284bd7SStefan Bühler BoolVariable('with_bzip2', 'enable bzip2 compression', 'no'), 2448d5e237cSGlenn Strauss BoolVariable('with_brotli', 'enable brotli compression', 'no'), 245ccba074cSStefan Bühler PackageVariable('with_dbi', 'enable dbi support', 'no'), 246ccba074cSStefan Bühler BoolVariable('with_fam', 'enable FAM/gamin support', 'no'), 247d68fc639SGlenn Strauss BoolVariable('with_libdeflate', 'enable libdeflate compression', 'no'), 2484ac239c4SGlenn Strauss BoolVariable('with_maxminddb', 'enable MaxMind GeoIP2 support', 'no'), 249177f5509SGlenn Strauss BoolVariable('with_krb5', 'enable krb5 auth support', 'no'), 250ccba074cSStefan Bühler BoolVariable('with_ldap', 'enable ldap auth support', 'no'), 251ccba074cSStefan Bühler # with_libev not supported 252ccba074cSStefan Bühler # with_libunwind not supported 25386c2d309SGlenn Strauss BoolVariable('with_lua', 'enable lua support', 'no'), 254ccba074cSStefan Bühler PackageVariable('with_mysql', 'enable mysql support', 'no'), 255ccba074cSStefan Bühler BoolVariable('with_openssl', 'enable openssl support', 'no'), 256bf4054f8SGlenn Strauss PackageVariable('with_gnutls', 'enable GnuTLS support', 'no'), 257cb753ec5SGlenn Strauss PackageVariable('with_mbedtls', 'enable mbedTLS support', 'no'), 258e00deb55SGlenn Strauss PackageVariable('with_nss', 'enable NSS crypto support', 'no'), 259a950ae15SGlenn Strauss PackageVariable('with_wolfssl', 'enable wolfSSL support', 'no'), 260b28a3714SGlenn Strauss BoolVariable('with_nettle', 'enable Nettle support', 'no'), 2616edd040bSGlenn Strauss BoolVariable('with_pam', 'enable PAM auth support', 'no'), 262750414d3SGlenn Strauss PackageVariable('with_pcre2', 'enable pcre2 support', 'yes'), 263750414d3SGlenn Strauss PackageVariable('with_pcre', 'enable pcre support', 'no'), 264ccba074cSStefan Bühler PackageVariable('with_pgsql', 'enable pgsql support', 'no'), 265d61714ddSGlenn Strauss PackageVariable('with_sasl', 'enable SASL support', 'no'), 26608c8749bSStefan Bühler BoolVariable('with_sqlite3', 'enable sqlite3 support (required for webdav props)', 'no'), 26708c8749bSStefan Bühler BoolVariable('with_uuid', 'enable uuid support (required for webdav locks)', 'no'), 268ccba074cSStefan Bühler # with_valgrind not supported 269ccba074cSStefan Bühler # with_xattr not supported 27008c8749bSStefan Bühler PackageVariable('with_xml', 'enable xml support (required for webdav props)', 'no'), 27107622251SGlenn Strauss BoolVariable('with_xxhash', 'build with system-provided xxhash', 'no'), 272fff8e705SStefan Bühler BoolVariable('with_zlib', 'enable deflate/gzip compression', 'no'), 2739211fb3dSGlenn Strauss BoolVariable('with_zstd', 'enable zstd compression', 'no'), 2742506e21bSStefan Bühler 2752506e21bSStefan Bühler BoolVariable('with_all', 'enable all with_* features', 'no'), 276177f5509SGlenn Strauss) 277e95ea21bSJan Kneschke 278e95ea21bSJan Kneschkeenv = Environment( 2795515bb2aSStefan Bühler ENV = dict(os.environ), # make sure we have a dict here so .Clone() works properly 28068284bd7SStefan Bühler variables = vars, 28168284bd7SStefan Bühler CPPPATH = Split('#sconsbuild/build') 282e95ea21bSJan Kneschke) 283e95ea21bSJan Kneschke 28468284bd7SStefan Bühlerenv.Help(vars.GenerateHelpText(env)) 285649cc0b7SJan Kneschke 286f358f04bSGlenn Straussif env.subst('${CC}') != '': 287649cc0b7SJan Kneschke env['CC'] = env.subst('${CC}') 288649cc0b7SJan Kneschke 289e95ea21bSJan Kneschkeenv['package'] = package 290e95ea21bSJan Kneschkeenv['version'] = version 291230e6700SJan Kneschkeif env['CC'] == 'gcc': 2925872f766SJan Kneschke ## we need x-open 6 and bsd 4.3 features 293457d78c6SGlenn Strauss env.Append(CCFLAGS = Split('-pipe -Wall -O2 -g -W -pedantic -Wunused -Wshadow -std=gnu99')) 294e95ea21bSJan Kneschke 295706910acSStefan Bühlerenv.Append(CPPFLAGS = [ 29692576a2fSGlenn Strauss '-D_TIME_BITS=64', 297706910acSStefan Bühler '-D_FILE_OFFSET_BITS=64', 298706910acSStefan Bühler '-D_LARGEFILE_SOURCE', 299706910acSStefan Bühler '-D_LARGE_FILES', 3001bb0cbc7SGlenn Strauss '-D_DEFAULT_SOURCE', 301706910acSStefan Bühler '-D_GNU_SOURCE', 302706910acSStefan Bühler]) 303706910acSStefan Bühler 3042506e21bSStefan Bühlerif env['with_all']: 3052506e21bSStefan Bühler for feature in vars.keys(): 3062506e21bSStefan Bühler # only enable 'with_*' flags 3072506e21bSStefan Bühler if not feature.startswith('with_'): continue 3082506e21bSStefan Bühler # don't overwrite manual arguments 3092506e21bSStefan Bühler if feature in vars.args: continue 3102506e21bSStefan Bühler # now activate 3112506e21bSStefan Bühler env[feature] = True 3122506e21bSStefan Bühler 313e95ea21bSJan Kneschke# cache configure checks 314e95ea21bSJan Kneschkeif 1: 31542704e31SStefan Bühler autoconf = Autoconf(env) 31668284bd7SStefan Bühler 31768284bd7SStefan Bühler if 'CFLAGS' in os.environ: 31868284bd7SStefan Bühler autoconf.env.Append(CCFLAGS = os.environ['CFLAGS']) 31968284bd7SStefan Bühler print(">> Appending custom build flags : " + os.environ['CFLAGS']) 32068284bd7SStefan Bühler 32168284bd7SStefan Bühler if 'LDFLAGS' in os.environ: 32268284bd7SStefan Bühler autoconf.env.Append(LINKFLAGS = os.environ['LDFLAGS']) 32368284bd7SStefan Bühler print(">> Appending custom link flags : " + os.environ['LDFLAGS']) 32468284bd7SStefan Bühler 32568284bd7SStefan Bühler if 'LIBS' in os.environ: 32668284bd7SStefan Bühler autoconf.env.Append(APPEND_LIBS = os.environ['LIBS']) 32768284bd7SStefan Bühler print(">> Appending custom libraries : " + os.environ['LIBS']) 32852d72fe8SStefan Bühler else: 32952d72fe8SStefan Bühler autoconf.env.Append(APPEND_LIBS = '') 33068284bd7SStefan Bühler 331d57029c0SStefan Bühler autoconf.env.Append( 3328d5e237cSGlenn Strauss LIBBROTLI = '', 333d57029c0SStefan Bühler LIBBZ2 = '', 334d57029c0SStefan Bühler LIBCRYPT = '', 335d57029c0SStefan Bühler LIBCRYPTO = '', 336d57029c0SStefan Bühler LIBDBI = '', 337d68fc639SGlenn Strauss LIBDEFLATE = '', 338d57029c0SStefan Bühler LIBDL = '', 339bf4054f8SGlenn Strauss LIBGNUTLS = '', 340d57029c0SStefan Bühler LIBGSSAPI_KRB5 = '', 341d57029c0SStefan Bühler LIBKRB5 = '', 342d57029c0SStefan Bühler LIBLBER = '', 343d57029c0SStefan Bühler LIBLDAP = '', 344d57029c0SStefan Bühler LIBLUA = '', 345ce1d45edSGlenn Strauss LIBMBEDTLS = '', 346ce1d45edSGlenn Strauss LIBMBEDX509 = '', 347ce1d45edSGlenn Strauss LIBMBEDCRYPTO = '', 348d57029c0SStefan Bühler LIBMYSQL = '', 349e00deb55SGlenn Strauss LIBNSS = '', 350df4812ecSGlenn Strauss LIBPAM = '', 351d57029c0SStefan Bühler LIBPCRE = '', 352d57029c0SStefan Bühler LIBPGSQL = '', 353d61714ddSGlenn Strauss LIBSASL = '', 354d57029c0SStefan Bühler LIBSQLITE3 = '', 355d57029c0SStefan Bühler LIBSSL = '', 356ce1d45edSGlenn Strauss LIBSSLCRYPTO = '', 357d57029c0SStefan Bühler LIBUUID = '', 358ce1d45edSGlenn Strauss LIBWOLFSSL = '', 359cb753ec5SGlenn Strauss LIBX509 = '', 360d57029c0SStefan Bühler LIBXML2 = '', 36107622251SGlenn Strauss LIBXXHASH = '', 362d57029c0SStefan Bühler LIBZ = '', 3639211fb3dSGlenn Strauss LIBZSTD = '', 364d57029c0SStefan Bühler ) 365d57029c0SStefan Bühler 36642704e31SStefan Bühler autoconf.haveCHeaders([ 36742704e31SStefan Bühler 'arpa/inet.h', 36842704e31SStefan Bühler 'crypt.h', 369cd738d4dSGlenn Strauss 'dlfcn.h', 37042704e31SStefan Bühler 'fcntl.h', 37142704e31SStefan Bühler 'getopt.h', 37242704e31SStefan Bühler 'inttypes.h', 37342704e31SStefan Bühler 'linux/random.h', 37417835501SGlenn Strauss 'malloc.h', 37542704e31SStefan Bühler 'poll.h', 37642704e31SStefan Bühler 'pwd.h', 37742704e31SStefan Bühler 'stdint.h', 37842704e31SStefan Bühler 'stdlib.h', 37942704e31SStefan Bühler 'string.h', 38042704e31SStefan Bühler 'strings.h', 38142704e31SStefan Bühler 'sys/epoll.h', 3827ce8b22cSGlenn Strauss 'sys/inotify.h', 3838c9b5480SNiclas Rosenvik 'sys/loadavg.h', 38442704e31SStefan Bühler 'sys/poll.h', 38542704e31SStefan Bühler 'sys/prctl.h', 386f36908deSGlenn Strauss 'sys/procctl.h', 38742704e31SStefan Bühler 'sys/sendfile.h', 38842704e31SStefan Bühler 'sys/time.h', 38942704e31SStefan Bühler 'sys/wait.h', 39042704e31SStefan Bühler 'syslog.h', 39142704e31SStefan Bühler 'unistd.h', 39242704e31SStefan Bühler 'winsock2.h', 393e95ea21bSJan Kneschke 39442704e31SStefan Bühler # "have" the last header if we include others before? 395ec945945SGlenn Strauss ['sys/types.h', 'sys/time.h', 'sys/resource.h'], 39642704e31SStefan Bühler ['sys/types.h', 'netinet/in.h'], 39742704e31SStefan Bühler ['sys/types.h', 'sys/event.h'], 39842704e31SStefan Bühler ['sys/types.h', 'sys/mman.h'], 39942704e31SStefan Bühler ['sys/types.h', 'sys/select.h'], 40042704e31SStefan Bühler ['sys/types.h', 'sys/socket.h'], 40142704e31SStefan Bühler ['sys/types.h', 'sys/uio.h'], 40242704e31SStefan Bühler ['sys/types.h', 'sys/un.h'], 40342704e31SStefan Bühler ]) 40442704e31SStefan Bühler 4057733376bSStefan Bühler autoconf.haveFuncs([ 4067733376bSStefan Bühler 'arc4random_buf', 4077733376bSStefan Bühler 'chroot', 4087733376bSStefan Bühler 'clock_gettime', 4090d62b865SGlenn Strauss 'copy_file_range', 4107733376bSStefan Bühler 'epoll_ctl', 4117733376bSStefan Bühler 'explicit_bzero', 412d7c0fc29SStefan Bühler 'explicit_memset', 4137733376bSStefan Bühler 'fork', 4147733376bSStefan Bühler 'getloadavg', 4157733376bSStefan Bühler 'getrlimit', 4167733376bSStefan Bühler 'getuid', 4171b11cd7aSGlenn Strauss 'gmtime_r', 4183579c322SGlenn Strauss 'inet_aton', 4197733376bSStefan Bühler 'inet_pton', 4207733376bSStefan Bühler 'issetugid', 4217733376bSStefan Bühler 'jrand48', 4227733376bSStefan Bühler 'kqueue', 4237733376bSStefan Bühler 'localtime_r', 4247733376bSStefan Bühler 'lstat', 4257733376bSStefan Bühler 'madvise', 4261a8d8e0cSGlenn Strauss 'malloc_trim', 42717835501SGlenn Strauss 'mallopt', 42882fbfcbaSGlenn Strauss 'mempcpy', 4297733376bSStefan Bühler 'memset_s', 4309f62f1b1SGlenn Strauss 'mkostemp', 4317733376bSStefan Bühler 'mmap', 4327733376bSStefan Bühler 'pipe2', 4337733376bSStefan Bühler 'poll', 4345cab11b7SGlenn Strauss 'pread', 4355c18891aSGlenn Strauss 'preadv', 4365cab11b7SGlenn Strauss 'pwrite', 4375c18891aSGlenn Strauss 'pwritev', 4387733376bSStefan Bühler 'select', 4397733376bSStefan Bühler 'sendfile', 4407733376bSStefan Bühler 'sendfile64', 4417733376bSStefan Bühler 'sigaction', 4427733376bSStefan Bühler 'signal', 4435cab11b7SGlenn Strauss 'splice', 4447733376bSStefan Bühler 'srandom', 44586c39754SGlenn Strauss 'strerror_r', 446f8cc9fb9SGlenn Strauss 'timegm', 4477733376bSStefan Bühler 'writev', 4487733376bSStefan Bühler ]) 44942704e31SStefan Bühler autoconf.haveFunc('getentropy', 'sys/random.h') 45042704e31SStefan Bühler autoconf.haveFunc('getrandom', 'linux/random.h') 451b6bd11c1SDavid Carlier if re.compile("sunos|solaris").search(env['PLATFORM']): 452448621e0SGlenn Strauss autoconf.haveCHeaders([ 453448621e0SGlenn Strauss 'port.h', 454448621e0SGlenn Strauss 'priv.h', 455448621e0SGlenn Strauss 'sys/devpoll.h', 456448621e0SGlenn Strauss 'sys/filio.h', 457448621e0SGlenn Strauss ]) 458448621e0SGlenn Strauss autoconf.haveFunc('port_create', 'port.h') 459c0ced4e8SGlenn Strauss autoconf.haveFunc('sendfilev') 460b6bd11c1SDavid Carlier autoconf.haveFunc('setpflags', 'priv.h') 461e95ea21bSJan Kneschke 46242704e31SStefan Bühler autoconf.haveTypes(Split('pid_t size_t off_t')) 463e95ea21bSJan Kneschke 464505cc785SStefan Bühler # have crypt_r/crypt, and is -lcrypt needed? 46542704e31SStefan Bühler if autoconf.CheckLib('crypt'): 4662e797996SStefan Bühler autoconf.env.Append( 4672e797996SStefan Bühler LIBCRYPT = 'crypt', 4682e797996SStefan Bühler ) 46942704e31SStefan Bühler with autoconf.restoreEnvLibs(): 47042704e31SStefan Bühler autoconf.env['LIBS'] = ['crypt'] 47142704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 47252d72fe8SStefan Bühler else: 47342704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 474e95ea21bSJan Kneschke 475505cc785SStefan Bühler if autoconf.CheckType('socklen_t', '#include <unistd.h>\n#include <sys/socket.h>\n#include <sys/types.h>'): 476505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SOCKLEN_T' ]) 477505cc785SStefan Bühler 478505cc785SStefan Bühler if autoconf.CheckType('struct sockaddr_storage', '#include <sys/socket.h>\n'): 479505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_SOCKADDR_STORAGE' ]) 480505cc785SStefan Bühler 48152c48983SGlenn Strauss if autoconf.CheckLibWithHeader('elftc', 'libelftc.h', 'c', 'elftc_copyfile(0, 1);'): 48252c48983SGlenn Strauss autoconf.env.Append( 48352c48983SGlenn Strauss CPPFLAGS = [ '-DHAVE_ELFTC_COPYFILE' ], 48452c48983SGlenn Strauss LIBS = [ 'elftc' ], 48552c48983SGlenn Strauss ) 48652c48983SGlenn Strauss 48742704e31SStefan Bühler if autoconf.CheckLibWithHeader('rt', 'time.h', 'c', 'clock_gettime(CLOCK_MONOTONIC, (struct timespec*)0);'): 4882e797996SStefan Bühler autoconf.env.Append( 4892e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_CLOCK_GETTIME' ], 4902e797996SStefan Bühler LIBS = [ 'rt' ], 4912e797996SStefan Bühler ) 4921ebc83f1SGlenn Strauss 493505cc785SStefan Bühler if autoconf.CheckIPv6(): 494505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_IPV6' ]) 4950014a87dSJan Kneschke 496505cc785SStefan Bühler if autoconf.CheckWeakSymbols(): 497505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_WEAK_SYMBOLS' ]) 498e95ea21bSJan Kneschke 499505cc785SStefan Bühler if autoconf.CheckGmtOffInStructTm(): 500505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_TM_GMTOFF' ]) 501505cc785SStefan Bühler 50242704e31SStefan Bühler if autoconf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'): 503505cc785SStefan Bühler autoconf.env.Append(LIBDL = 'dl') 504505cc785SStefan Bühler 505505cc785SStefan Bühler if env['with_bzip2']: 50642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('bz2', 'bzlib.h', 'C'): 50766e0cd16SStefan Bühler fail("Couldn't find bz2") 5082e797996SStefan Bühler autoconf.env.Append( 5092e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_BZLIB_H', '-DHAVE_LIBBZ2' ], 5102e797996SStefan Bühler LIBBZ2 = 'bz2', 5112e797996SStefan Bühler ) 512505cc785SStefan Bühler 5138d5e237cSGlenn Strauss if env['with_brotli']: 514cea7e921SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBBROTLI', 'pkg-config --static --cflags --libs libbrotlienc'): 5158d5e237cSGlenn Strauss fail("Couldn't find libbrotlienc") 51617b378c0SGlenn Strauss autoconf.env.Append( 51717b378c0SGlenn Strauss CPPFLAGS = [ '-DHAVE_BROTLI_ENCODE_H', '-DHAVE_BROTLI' ], 51817b378c0SGlenn Strauss ) 5198d5e237cSGlenn Strauss 520505cc785SStefan Bühler if env['with_dbi']: 52142704e31SStefan Bühler if not autoconf.CheckLibWithHeader('dbi', 'dbi/dbi.h', 'C'): 52266e0cd16SStefan Bühler fail("Couldn't find dbi") 5232e797996SStefan Bühler autoconf.env.Append( 524c7c34201SGlenn Strauss CPPFLAGS = [ '-DHAVE_DBI' ], 5252e797996SStefan Bühler LIBDBI = 'dbi', 5262e797996SStefan Bühler ) 527505cc785SStefan Bühler 528f885498bSGlenn Strauss if env['with_fam'] and not autoconf.CheckCHeader('sys/inotify.h'): 52942704e31SStefan Bühler if not autoconf.CheckLibWithHeader('fam', 'fam.h', 'C'): 53066e0cd16SStefan Bühler fail("Couldn't find fam") 5312e797996SStefan Bühler autoconf.env.Append( 5322e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_FAM_H', '-DHAVE_LIBFAM' ], 5332e797996SStefan Bühler LIBS = [ 'fam' ], 5342e797996SStefan Bühler ) 53542704e31SStefan Bühler autoconf.haveFunc('FAMNoExists') 536505cc785SStefan Bühler 537d68fc639SGlenn Strauss if env['with_libdeflate']: 538d68fc639SGlenn Strauss if not autoconf.CheckLibWithHeader('deflate', 'libdeflate.h', 'C'): 539d68fc639SGlenn Strauss fail("Couldn't find libdeflate") 540d68fc639SGlenn Strauss autoconf.env.Append( 541d68fc639SGlenn Strauss CPPFLAGS = [ '-DHAVE_LIBDEFLATE' ], 542d68fc639SGlenn Strauss LIBDEFLATE = 'libdeflate', 543d68fc639SGlenn Strauss ) 544d68fc639SGlenn Strauss 5454ac239c4SGlenn Strauss if env['with_maxminddb']: 5464ac239c4SGlenn Strauss if not autoconf.CheckLibWithHeader('maxminddb', 'maxminddb.h', 'C'): 5474ac239c4SGlenn Strauss fail("Couldn't find maxminddb") 5484ac239c4SGlenn Strauss autoconf.env.Append( 5494ac239c4SGlenn Strauss CPPFLAGS = [ '-DHAVE_MAXMINDDB' ], 5504ac239c4SGlenn Strauss LIBMAXMINDDB = 'maxminddb', 5514ac239c4SGlenn Strauss ) 5524ac239c4SGlenn Strauss 5531c1a6378SGlenn Strauss if env['with_krb5']: 55442704e31SStefan Bühler if not autoconf.CheckLibWithHeader('krb5', 'krb5.h', 'C'): 55566e0cd16SStefan Bühler fail("Couldn't find krb5") 55642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('gssapi_krb5', 'gssapi/gssapi_krb5.h', 'C'): 55766e0cd16SStefan Bühler fail("Couldn't find gssapi_krb5") 5582e797996SStefan Bühler autoconf.env.Append( 5592e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_KRB5' ], 5602e797996SStefan Bühler LIBKRB5 = 'krb5', 5612e797996SStefan Bühler LIBGSSAPI_KRB5 = 'gssapi_krb5', 5622e797996SStefan Bühler ) 5631c1a6378SGlenn Strauss 56428729997SJan Kneschke if env['with_ldap']: 56542704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ldap', 'ldap.h', 'C'): 56666e0cd16SStefan Bühler fail("Couldn't find ldap") 56742704e31SStefan Bühler if not autoconf.CheckLibWithHeader('lber', 'lber.h', 'C'): 56866e0cd16SStefan Bühler fail("Couldn't find lber") 5692e797996SStefan Bühler autoconf.env.Append( 5702e797996SStefan Bühler CPPFLAGS = [ 5712e797996SStefan Bühler '-DHAVE_LDAP_H', '-DHAVE_LIBLDAP', 5722e797996SStefan Bühler '-DHAVE_LBER_H', '-DHAVE_LIBLBER', 5732e797996SStefan Bühler ], 5742e797996SStefan Bühler LIBLDAP = 'ldap', 5752e797996SStefan Bühler LIBLBER = 'lber', 5762e797996SStefan Bühler ) 57728729997SJan Kneschke 578505cc785SStefan Bühler if env['with_lua']: 57968284bd7SStefan Bühler found_lua = False 58064aff80dSGlenn Strauss for lua_name in ['lua5.4', 'lua-5.4', 'lua5.3', 'lua-5.3', 'lua5.2', 'lua-5.2', 'lua5.1', 'lua-5.1', 'lua']: 5813ba68b25SStefan Bühler print("Searching for lua: " + lua_name + " >= 5.0") 5823ba68b25SStefan Bühler if autoconf.CheckParseConfigForLib('LIBLUA', "pkg-config '" + lua_name + " >= 5.0' --cflags --libs"): 5833ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ]) 58468284bd7SStefan Bühler found_lua = True 58568284bd7SStefan Bühler break 58668284bd7SStefan Bühler if not found_lua: 58766e0cd16SStefan Bühler fail("Couldn't find any lua implementation") 5889b10531fSJan Kneschke 5896db887adSJan Kneschke if env['with_mysql']: 59042704e31SStefan Bühler mysql_config = autoconf.checkProgram('mysql', 'mysql_config') 5913ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBMYSQL', mysql_config + ' --cflags --libs'): 5923ba68b25SStefan Bühler fail("Couldn't find mysql") 593c7c34201SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MYSQL' ]) 5946db887adSJan Kneschke 595e00deb55SGlenn Strauss if env['with_nss']: 596e00deb55SGlenn Strauss nss_config = autoconf.checkProgram('nss', 'nss-config') 597e00deb55SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBNSS', nss_config + ' --cflags --libs'): 598e00deb55SGlenn Strauss fail("Couldn't find NSS") 599e00deb55SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_NSS3_NSS_H' ]) 600e00deb55SGlenn Strauss 601505cc785SStefan Bühler if env['with_openssl']: 60242704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'): 60366e0cd16SStefan Bühler fail("Couldn't find openssl") 6042e797996SStefan Bühler autoconf.env.Append( 6052e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_OPENSSL_SSL_H', '-DHAVE_LIBSSL'], 6062e797996SStefan Bühler LIBSSL = 'ssl', 607ce1d45edSGlenn Strauss LIBSSLCRYPTO = 'crypto', 6082e797996SStefan Bühler LIBCRYPTO = 'crypto', 6092e797996SStefan Bühler ) 610505cc785SStefan Bühler 611a950ae15SGlenn Strauss if env['with_wolfssl']: 612a950ae15SGlenn Strauss if type(env['with_wolfssl']) is str: 613a950ae15SGlenn Strauss autoconf.env.AppendUnique( 614a950ae15SGlenn Strauss CPPPATH = [ env['with_wolfssl'] + '/include', 615a950ae15SGlenn Strauss env['with_wolfssl'] + '/include/wolfssl' ], 616a950ae15SGlenn Strauss LIBPATH = [ env['with_wolfssl'] + '/lib' ], 617a950ae15SGlenn Strauss ) 618a950ae15SGlenn Strauss if not autoconf.CheckLibWithHeader('wolfssl', 'wolfssl/ssl.h', 'C'): 619a950ae15SGlenn Strauss fail("Couldn't find wolfssl") 620a950ae15SGlenn Strauss autoconf.env.Append( 621a950ae15SGlenn Strauss CPPFLAGS = [ '-DHAVE_WOLFSSL_SSL_H' ], 622ce1d45edSGlenn Strauss LIBWOLFSSL= 'wolfssl', 623a950ae15SGlenn Strauss LIBCRYPTO = 'wolfssl', 624a950ae15SGlenn Strauss ) 625a950ae15SGlenn Strauss 626cb753ec5SGlenn Strauss if env['with_mbedtls']: 627cb753ec5SGlenn Strauss if not autoconf.CheckLibWithHeader('mbedtls', 'mbedtls/ssl.h', 'C'): 628cb753ec5SGlenn Strauss fail("Couldn't find mbedtls") 629cb753ec5SGlenn Strauss autoconf.env.Append( 630cb753ec5SGlenn Strauss CPPFLAGS = [ '-DHAVE_LIBMBEDCRYPTO' ], 631ce1d45edSGlenn Strauss LIBMBEDTLS = 'mbedtls', 632ce1d45edSGlenn Strauss LIBMBEDX509 = 'mbedx509', 633ce1d45edSGlenn Strauss LIBMBEDCRYPTO = 'mbedcrypto', 634cb753ec5SGlenn Strauss LIBCRYPTO = 'mbedcrypto', 635cb753ec5SGlenn Strauss ) 636cb753ec5SGlenn Strauss 637b28a3714SGlenn Strauss if env['with_nettle']: 638b28a3714SGlenn Strauss if not autoconf.CheckLibWithHeader('nettle', 'nettle/nettle-types.h', 'C'): 639b28a3714SGlenn Strauss fail("Couldn't find Nettle") 640b28a3714SGlenn Strauss autoconf.env.Append( 641b28a3714SGlenn Strauss CPPFLAGS = [ '-DHAVE_NETTLE_NETTLE_TYPES_H' ], 642b28a3714SGlenn Strauss LIBCRYPTO = 'nettle', 643b28a3714SGlenn Strauss ) 644b28a3714SGlenn Strauss 645bf4054f8SGlenn Strauss if env['with_gnutls']: 646bf4054f8SGlenn Strauss if not autoconf.CheckLibWithHeader('gnutls', 'gnutls/crypto.h', 'C'): 647bf4054f8SGlenn Strauss fail("Couldn't find gnutls") 648bf4054f8SGlenn Strauss autoconf.env.Append( 649bf4054f8SGlenn Strauss CPPFLAGS = [ '-DHAVE_GNUTLS_CRYPTO_H' ], 650bf4054f8SGlenn Strauss LIBGNUTLS = 'gnutls', 651bf4054f8SGlenn Strauss ) 652bf4054f8SGlenn Strauss if not autoconf.env.exists('LIBCRYPTO'): 653bf4054f8SGlenn Strauss autoconf.env.Append( 654bf4054f8SGlenn Strauss LIBCRYPTO = 'gnutls', 655bf4054f8SGlenn Strauss ) 656bf4054f8SGlenn Strauss 657df4812ecSGlenn Strauss if env['with_pam']: 658df4812ecSGlenn Strauss if not autoconf.CheckLibWithHeader('pam', 'security/pam_appl.h', 'C'): 659df4812ecSGlenn Strauss fail("Couldn't find pam") 660df4812ecSGlenn Strauss autoconf.env.Append( 661df4812ecSGlenn Strauss CPPFLAGS = [ '-DHAVE_PAM' ], 662df4812ecSGlenn Strauss LIBPAM = 'pam', 663df4812ecSGlenn Strauss ) 664df4812ecSGlenn Strauss 665750414d3SGlenn Strauss if env['with_pcre2'] and not env['with_pcre']: 6667512d82cSGlenn Strauss pcre2_config = autoconf.checkProgram('pcre2', 'pcre2-config') 6677512d82cSGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre2_config + ' --cflags --libs8'): 6687512d82cSGlenn Strauss fail("Couldn't find pcre2") 6697512d82cSGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE2_H', '-DHAVE_PCRE' ]) 6707512d82cSGlenn Strauss elif env['with_pcre']: 67142704e31SStefan Bühler pcre_config = autoconf.checkProgram('pcre', 'pcre-config') 6723ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre_config + ' --cflags --libs'): 6733ba68b25SStefan Bühler fail("Couldn't find pcre") 6747512d82cSGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_PCRE' ]) 675505cc785SStefan Bühler 6762f83aac9SGlenn Strauss if env['with_pgsql']: 6773ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPGSQL', 'pkg-config libpq --cflags --libs'): 6783ba68b25SStefan Bühler fail("Couldn't find libpq") 679c7c34201SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PGSQL' ]) 6802f83aac9SGlenn Strauss 681d61714ddSGlenn Strauss if env['with_sasl']: 682d61714ddSGlenn Strauss if not autoconf.CheckLibWithHeader('sasl2', 'sasl/sasl.h', 'C'): 683d61714ddSGlenn Strauss fail("Couldn't find libsasl2") 684d61714ddSGlenn Strauss autoconf.env.Append( 685d61714ddSGlenn Strauss CPPFLAGS = [ '-DHAVE_SASL' ], 686d61714ddSGlenn Strauss LIBSASL = 'sasl2', 687d61714ddSGlenn Strauss ) 688d61714ddSGlenn Strauss 689505cc785SStefan Bühler if env['with_sqlite3']: 69042704e31SStefan Bühler if not autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'): 69166e0cd16SStefan Bühler fail("Couldn't find sqlite3") 6922e797996SStefan Bühler autoconf.env.Append( 6932e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_SQLITE3_H', '-DHAVE_LIBSQLITE3' ], 6942e797996SStefan Bühler LIBSQLITE3 = 'sqlite3', 6952e797996SStefan Bühler ) 696505cc785SStefan Bühler 697505cc785SStefan Bühler if env['with_uuid']: 69842704e31SStefan Bühler if not autoconf.CheckLibWithHeader('uuid', 'uuid/uuid.h', 'C'): 69966e0cd16SStefan Bühler fail("Couldn't find uuid") 7002e797996SStefan Bühler autoconf.env.Append( 7012e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_UUID_UUID_H', '-DHAVE_LIBUUID' ], 7022e797996SStefan Bühler LIBUUID = 'uuid', 7032e797996SStefan Bühler ) 704505cc785SStefan Bühler 705505cc785SStefan Bühler if env['with_xml']: 70642704e31SStefan Bühler xml2_config = autoconf.checkProgram('xml', 'xml2-config') 7073ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBXML2', xml2_config + ' --cflags --libs'): 7083ba68b25SStefan Bühler fail("Couldn't find xml2") 7093ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ]) 710505cc785SStefan Bühler 71107622251SGlenn Strauss if env['with_xxhash']: 71207622251SGlenn Strauss if not autoconf.CheckLibWithHeader('xxhash', 'xxhash.h', 'C'): 71307622251SGlenn Strauss fail("Couldn't find xxhash") 71407622251SGlenn Strauss autoconf.env.Append( 71507622251SGlenn Strauss CPPFLAGS = [ '-DHAVE_XXHASH_H' ], 71607622251SGlenn Strauss LIBXXHASH = 'xxhash', 71707622251SGlenn Strauss ) 71807622251SGlenn Strauss 719505cc785SStefan Bühler if env['with_zlib']: 72042704e31SStefan Bühler if not autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'): 72166e0cd16SStefan Bühler fail("Couldn't find zlib") 7222e797996SStefan Bühler autoconf.env.Append( 7232e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_ZLIB_H', '-DHAVE_LIBZ' ], 7242e797996SStefan Bühler LIBZ = 'z', 7252e797996SStefan Bühler ) 726505cc785SStefan Bühler 7279211fb3dSGlenn Strauss if env['with_zstd']: 7289211fb3dSGlenn Strauss if not autoconf.CheckLibWithHeader('zstd', 'zstd.h', 'C'): 7299211fb3dSGlenn Strauss fail("Couldn't find zstd") 7309211fb3dSGlenn Strauss autoconf.env.Append( 7319211fb3dSGlenn Strauss CPPFLAGS = [ '-DHAVE_ZSTD_H', '-DHAVE_ZSTD' ], 7329211fb3dSGlenn Strauss LIBZSTD = 'zstd', 7339211fb3dSGlenn Strauss ) 7349211fb3dSGlenn Strauss 735505cc785SStefan Bühler env = autoconf.Finish() 736505cc785SStefan Bühler 73786d03967SGlenn Straussif re.compile("cygwin|mingw|midipix").search(env['PLATFORM']): 738809199f9SmOo env.Append(COMMON_LIB = 'bin') 739809199f9SmOoelif re.compile("darwin|aix").search(env['PLATFORM']): 740809199f9SmOo env.Append(COMMON_LIB = 'lib') 741809199f9SmOoelse: 742809199f9SmOo env.Append(COMMON_LIB = False) 743809199f9SmOo 744d102a711SStefan Bühlerversions = version.split('.') 745809199f9SmOoversion_id = int(versions[0]) << 16 | int(versions[1]) << 8 | int(versions[2]) 746e95ea21bSJan Kneschkeenv.Append(CPPFLAGS = [ 74768284bd7SStefan Bühler '-DLIGHTTPD_VERSION_ID=' + hex(version_id), 748e95ea21bSJan Kneschke '-DPACKAGE_NAME=\\"' + package + '\\"', 749e95ea21bSJan Kneschke '-DPACKAGE_VERSION=\\"' + version + '\\"', 750e95ea21bSJan Kneschke '-DLIBRARY_DIR="\\"${libdir}\\""', 751e95ea21bSJan Kneschke ] ) 752e95ea21bSJan Kneschke 75368284bd7SStefan BühlerSConscript('src/SConscript', exports = 'env', variant_dir = 'sconsbuild/build', duplicate = 0) 75468284bd7SStefan BühlerSConscript('tests/SConscript', exports = 'env', variant_dir = 'sconsbuild/tests') 755