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' 155921b2f4SGlenn Straussversion = '1.4.60' 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'), 247ccba074cSStefan Bühler BoolVariable('with_gdbm', 'enable gdbm support', 'no'), 248ccba074cSStefan Bühler BoolVariable('with_geoip', 'enable GeoIP support', 'no'), 2494ac239c4SGlenn Strauss BoolVariable('with_maxminddb', 'enable MaxMind GeoIP2 support', 'no'), 250177f5509SGlenn Strauss BoolVariable('with_krb5', 'enable krb5 auth support', 'no'), 251ccba074cSStefan Bühler BoolVariable('with_ldap', 'enable ldap auth support', 'no'), 252ccba074cSStefan Bühler # with_libev not supported 253ccba074cSStefan Bühler # with_libunwind not supported 254ccba074cSStefan Bühler BoolVariable('with_lua', 'enable lua support for mod_cml', 'no'), 255ccba074cSStefan Bühler BoolVariable('with_memcached', 'enable memcached support', 'no'), 256ccba074cSStefan Bühler PackageVariable('with_mysql', 'enable mysql support', 'no'), 257ccba074cSStefan Bühler BoolVariable('with_openssl', 'enable openssl support', 'no'), 258bf4054f8SGlenn Strauss PackageVariable('with_gnutls', 'enable GnuTLS support', 'no'), 259cb753ec5SGlenn Strauss PackageVariable('with_mbedtls', 'enable mbedTLS support', 'no'), 260e00deb55SGlenn Strauss PackageVariable('with_nss', 'enable NSS crypto support', 'no'), 261a950ae15SGlenn Strauss PackageVariable('with_wolfssl', 'enable wolfSSL support', 'no'), 262b28a3714SGlenn Strauss BoolVariable('with_nettle', 'enable Nettle support', 'no'), 2636edd040bSGlenn Strauss BoolVariable('with_pam', 'enable PAM auth support', 'no'), 264ccba074cSStefan Bühler PackageVariable('with_pcre', 'enable pcre support', 'yes'), 265ccba074cSStefan Bühler PackageVariable('with_pgsql', 'enable pgsql support', 'no'), 266d61714ddSGlenn Strauss PackageVariable('with_sasl', 'enable SASL support', 'no'), 26708c8749bSStefan Bühler BoolVariable('with_sqlite3', 'enable sqlite3 support (required for webdav props)', 'no'), 26808c8749bSStefan Bühler BoolVariable('with_uuid', 'enable uuid support (required for webdav locks)', 'no'), 269ccba074cSStefan Bühler # with_valgrind not supported 270ccba074cSStefan Bühler # with_xattr not supported 27108c8749bSStefan Bühler PackageVariable('with_xml', 'enable xml support (required for webdav props)', 'no'), 27207622251SGlenn Strauss BoolVariable('with_xxhash', 'build with system-provided xxhash', 'no'), 273fff8e705SStefan Bühler BoolVariable('with_zlib', 'enable deflate/gzip compression', 'no'), 2749211fb3dSGlenn Strauss BoolVariable('with_zstd', 'enable zstd compression', 'no'), 2752506e21bSStefan Bühler 2762506e21bSStefan Bühler BoolVariable('with_all', 'enable all with_* features', 'no'), 277177f5509SGlenn Strauss) 278e95ea21bSJan Kneschke 279e95ea21bSJan Kneschkeenv = Environment( 2805515bb2aSStefan Bühler ENV = dict(os.environ), # make sure we have a dict here so .Clone() works properly 28168284bd7SStefan Bühler variables = vars, 28268284bd7SStefan Bühler CPPPATH = Split('#sconsbuild/build') 283e95ea21bSJan Kneschke) 284e95ea21bSJan Kneschke 28568284bd7SStefan Bühlerenv.Help(vars.GenerateHelpText(env)) 286649cc0b7SJan Kneschke 287f358f04bSGlenn Straussif env.subst('${CC}') != '': 288649cc0b7SJan Kneschke env['CC'] = env.subst('${CC}') 289649cc0b7SJan Kneschke 290e95ea21bSJan Kneschkeenv['package'] = package 291e95ea21bSJan Kneschkeenv['version'] = version 292230e6700SJan Kneschkeif env['CC'] == 'gcc': 2935872f766SJan Kneschke ## we need x-open 6 and bsd 4.3 features 294457d78c6SGlenn Strauss env.Append(CCFLAGS = Split('-pipe -Wall -O2 -g -W -pedantic -Wunused -Wshadow -std=gnu99')) 295e95ea21bSJan Kneschke 296706910acSStefan Bühlerenv.Append(CPPFLAGS = [ 29792576a2fSGlenn Strauss '-D_TIME_BITS=64', 298706910acSStefan Bühler '-D_FILE_OFFSET_BITS=64', 299706910acSStefan Bühler '-D_LARGEFILE_SOURCE', 300706910acSStefan Bühler '-D_LARGE_FILES', 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 = '', 337d57029c0SStefan Bühler LIBDL = '', 338d57029c0SStefan Bühler LIBGDBM = '', 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 LIBMEMCACHED = '', 349d57029c0SStefan Bühler LIBMYSQL = '', 350e00deb55SGlenn Strauss LIBNSS = '', 351df4812ecSGlenn Strauss LIBPAM = '', 352d57029c0SStefan Bühler LIBPCRE = '', 353d57029c0SStefan Bühler LIBPGSQL = '', 354d61714ddSGlenn Strauss LIBSASL = '', 355d57029c0SStefan Bühler LIBSQLITE3 = '', 356d57029c0SStefan Bühler LIBSSL = '', 357ce1d45edSGlenn Strauss LIBSSLCRYPTO = '', 358d57029c0SStefan Bühler LIBUUID = '', 359ce1d45edSGlenn Strauss LIBWOLFSSL = '', 360cb753ec5SGlenn Strauss LIBX509 = '', 361d57029c0SStefan Bühler LIBXML2 = '', 36207622251SGlenn Strauss LIBXXHASH = '', 363d57029c0SStefan Bühler LIBZ = '', 3649211fb3dSGlenn Strauss LIBZSTD = '', 365d57029c0SStefan Bühler ) 366d57029c0SStefan Bühler 36742704e31SStefan Bühler autoconf.haveCHeaders([ 36842704e31SStefan Bühler 'arpa/inet.h', 36942704e31SStefan Bühler 'crypt.h', 370*cd738d4dSGlenn Strauss 'dlfcn.h', 37142704e31SStefan Bühler 'fcntl.h', 37242704e31SStefan Bühler 'getopt.h', 37342704e31SStefan Bühler 'inttypes.h', 37442704e31SStefan Bühler 'linux/random.h', 37517835501SGlenn Strauss 'malloc.h', 37642704e31SStefan Bühler 'poll.h', 377caff799cSGlenn Strauss 'port.h', 37842704e31SStefan Bühler 'pwd.h', 37942704e31SStefan Bühler 'stdint.h', 38042704e31SStefan Bühler 'stdlib.h', 38142704e31SStefan Bühler 'string.h', 38242704e31SStefan Bühler 'strings.h', 38342704e31SStefan Bühler 'sys/devpoll.h', 38442704e31SStefan Bühler 'sys/epoll.h', 38542704e31SStefan Bühler 'sys/filio.h', 3867ce8b22cSGlenn Strauss 'sys/inotify.h', 3878c9b5480SNiclas Rosenvik 'sys/loadavg.h', 38842704e31SStefan Bühler 'sys/poll.h', 38942704e31SStefan Bühler 'sys/prctl.h', 39042704e31SStefan Bühler 'sys/sendfile.h', 39142704e31SStefan Bühler 'sys/time.h', 39242704e31SStefan Bühler 'sys/wait.h', 39342704e31SStefan Bühler 'syslog.h', 39442704e31SStefan Bühler 'unistd.h', 39542704e31SStefan Bühler 'winsock2.h', 396e95ea21bSJan Kneschke 39742704e31SStefan Bühler # "have" the last header if we include others before? 398ec945945SGlenn Strauss ['sys/types.h', 'sys/time.h', 'sys/resource.h'], 39942704e31SStefan Bühler ['sys/types.h', 'netinet/in.h'], 40042704e31SStefan Bühler ['sys/types.h', 'sys/event.h'], 40142704e31SStefan Bühler ['sys/types.h', 'sys/mman.h'], 40242704e31SStefan Bühler ['sys/types.h', 'sys/select.h'], 40342704e31SStefan Bühler ['sys/types.h', 'sys/socket.h'], 40442704e31SStefan Bühler ['sys/types.h', 'sys/uio.h'], 40542704e31SStefan Bühler ['sys/types.h', 'sys/un.h'], 40642704e31SStefan Bühler ]) 40742704e31SStefan Bühler 4087733376bSStefan Bühler autoconf.haveFuncs([ 4097733376bSStefan Bühler 'arc4random_buf', 4107733376bSStefan Bühler 'chroot', 4117733376bSStefan Bühler 'clock_gettime', 4120d62b865SGlenn Strauss 'copy_file_range', 4137733376bSStefan Bühler 'dup2', 4147733376bSStefan Bühler 'epoll_ctl', 4157733376bSStefan Bühler 'explicit_bzero', 416d7c0fc29SStefan Bühler 'explicit_memset', 4177733376bSStefan Bühler 'fork', 4187733376bSStefan Bühler 'getcwd', 4197733376bSStefan Bühler 'gethostbyname', 4207733376bSStefan Bühler 'getloadavg', 4217733376bSStefan Bühler 'getopt', 4227733376bSStefan Bühler 'getrlimit', 4237733376bSStefan Bühler 'getuid', 4243579c322SGlenn Strauss 'inet_aton', 4257733376bSStefan Bühler 'inet_ntop', 4267733376bSStefan Bühler 'inet_pton', 4277733376bSStefan Bühler 'issetugid', 4287733376bSStefan Bühler 'jrand48', 4297733376bSStefan Bühler 'kqueue', 4307733376bSStefan Bühler 'localtime_r', 4317733376bSStefan Bühler 'lstat', 4327733376bSStefan Bühler 'madvise', 4331a8d8e0cSGlenn Strauss 'malloc_trim', 43417835501SGlenn Strauss 'mallopt', 4351f161bdaSGlenn Strauss 'memcpy', 43682fbfcbaSGlenn Strauss 'mempcpy', 4377733376bSStefan Bühler 'memset_s', 4387733376bSStefan Bühler 'memset', 4397733376bSStefan Bühler 'mmap', 4407733376bSStefan Bühler 'munmap', 4417733376bSStefan Bühler 'pathconf', 4427733376bSStefan Bühler 'pipe2', 4437733376bSStefan Bühler 'poll', 4447733376bSStefan Bühler 'port_create', 4457733376bSStefan Bühler 'posix_fadvise', 4467733376bSStefan Bühler 'prctl', 4477733376bSStefan Bühler 'select', 4487733376bSStefan Bühler 'send_file', 4497733376bSStefan Bühler 'sendfile', 4507733376bSStefan Bühler 'sendfile64', 4517733376bSStefan Bühler 'sigaction', 4527733376bSStefan Bühler 'signal', 4537733376bSStefan Bühler 'socket', 4547733376bSStefan Bühler 'srandom', 4557733376bSStefan Bühler 'stat', 4567733376bSStefan Bühler 'strchr', 4577733376bSStefan Bühler 'strdup', 4587733376bSStefan Bühler 'strerror', 45986c39754SGlenn Strauss 'strerror_r', 4607733376bSStefan Bühler 'strftime', 4617733376bSStefan Bühler 'strstr', 4627733376bSStefan Bühler 'strtol', 463f8cc9fb9SGlenn Strauss 'timegm', 4647733376bSStefan Bühler 'writev', 4657733376bSStefan Bühler ]) 46642704e31SStefan Bühler autoconf.haveFunc('getentropy', 'sys/random.h') 46742704e31SStefan Bühler autoconf.haveFunc('getrandom', 'linux/random.h') 468e95ea21bSJan Kneschke 46942704e31SStefan Bühler autoconf.haveTypes(Split('pid_t size_t off_t')) 470e95ea21bSJan Kneschke 471505cc785SStefan Bühler # have crypt_r/crypt, and is -lcrypt needed? 47242704e31SStefan Bühler if autoconf.CheckLib('crypt'): 4732e797996SStefan Bühler autoconf.env.Append( 4742e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_LIBCRYPT' ], 4752e797996SStefan Bühler LIBCRYPT = 'crypt', 4762e797996SStefan Bühler ) 47742704e31SStefan Bühler with autoconf.restoreEnvLibs(): 47842704e31SStefan Bühler autoconf.env['LIBS'] = ['crypt'] 47942704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 48052d72fe8SStefan Bühler else: 48142704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 482e95ea21bSJan Kneschke 483505cc785SStefan Bühler if autoconf.CheckType('socklen_t', '#include <unistd.h>\n#include <sys/socket.h>\n#include <sys/types.h>'): 484505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SOCKLEN_T' ]) 485505cc785SStefan Bühler 486505cc785SStefan Bühler if autoconf.CheckType('struct sockaddr_storage', '#include <sys/socket.h>\n'): 487505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_SOCKADDR_STORAGE' ]) 488505cc785SStefan Bühler 48952c48983SGlenn Strauss if autoconf.CheckLibWithHeader('elftc', 'libelftc.h', 'c', 'elftc_copyfile(0, 1);'): 49052c48983SGlenn Strauss autoconf.env.Append( 49152c48983SGlenn Strauss CPPFLAGS = [ '-DHAVE_ELFTC_COPYFILE' ], 49252c48983SGlenn Strauss LIBS = [ 'elftc' ], 49352c48983SGlenn Strauss ) 49452c48983SGlenn Strauss 49542704e31SStefan Bühler if autoconf.CheckLibWithHeader('rt', 'time.h', 'c', 'clock_gettime(CLOCK_MONOTONIC, (struct timespec*)0);'): 4962e797996SStefan Bühler autoconf.env.Append( 4972e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_CLOCK_GETTIME' ], 4982e797996SStefan Bühler LIBS = [ 'rt' ], 4992e797996SStefan Bühler ) 5001ebc83f1SGlenn Strauss 501505cc785SStefan Bühler if autoconf.CheckIPv6(): 502505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_IPV6' ]) 5030014a87dSJan Kneschke 504505cc785SStefan Bühler if autoconf.CheckWeakSymbols(): 505505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_WEAK_SYMBOLS' ]) 506e95ea21bSJan Kneschke 507505cc785SStefan Bühler if autoconf.CheckGmtOffInStructTm(): 508505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_TM_GMTOFF' ]) 509505cc785SStefan Bühler 51042704e31SStefan Bühler if autoconf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'): 511505cc785SStefan Bühler autoconf.env.Append(LIBDL = 'dl') 512505cc785SStefan Bühler 513505cc785SStefan Bühler if env['with_bzip2']: 51442704e31SStefan Bühler if not autoconf.CheckLibWithHeader('bz2', 'bzlib.h', 'C'): 51566e0cd16SStefan Bühler fail("Couldn't find bz2") 5162e797996SStefan Bühler autoconf.env.Append( 5172e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_BZLIB_H', '-DHAVE_LIBBZ2' ], 5182e797996SStefan Bühler LIBBZ2 = 'bz2', 5192e797996SStefan Bühler ) 520505cc785SStefan Bühler 5218d5e237cSGlenn Strauss if env['with_brotli']: 522cea7e921SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBBROTLI', 'pkg-config --static --cflags --libs libbrotlienc'): 5238d5e237cSGlenn Strauss fail("Couldn't find libbrotlienc") 52417b378c0SGlenn Strauss autoconf.env.Append( 52517b378c0SGlenn Strauss CPPFLAGS = [ '-DHAVE_BROTLI_ENCODE_H', '-DHAVE_BROTLI' ], 52617b378c0SGlenn Strauss ) 5278d5e237cSGlenn Strauss 528505cc785SStefan Bühler if env['with_dbi']: 52942704e31SStefan Bühler if not autoconf.CheckLibWithHeader('dbi', 'dbi/dbi.h', 'C'): 53066e0cd16SStefan Bühler fail("Couldn't find dbi") 5312e797996SStefan Bühler autoconf.env.Append( 5322e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_DBI_H', '-DHAVE_LIBDBI' ], 5332e797996SStefan Bühler LIBDBI = 'dbi', 5342e797996SStefan Bühler ) 535505cc785SStefan Bühler 536f885498bSGlenn Strauss if env['with_fam'] and not autoconf.CheckCHeader('sys/inotify.h'): 53742704e31SStefan Bühler if not autoconf.CheckLibWithHeader('fam', 'fam.h', 'C'): 53866e0cd16SStefan Bühler fail("Couldn't find fam") 5392e797996SStefan Bühler autoconf.env.Append( 5402e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_FAM_H', '-DHAVE_LIBFAM' ], 5412e797996SStefan Bühler LIBS = [ 'fam' ], 5422e797996SStefan Bühler ) 54342704e31SStefan Bühler autoconf.haveFunc('FAMNoExists') 544505cc785SStefan Bühler 545505cc785SStefan Bühler if env['with_gdbm']: 54642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('gdbm', 'gdbm.h', 'C'): 54766e0cd16SStefan Bühler fail("Couldn't find gdbm") 5482e797996SStefan Bühler autoconf.env.Append( 5492e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_GDBM_H', '-DHAVE_GDBM' ], 5502e797996SStefan Bühler LIBGDBM = 'gdbm', 5512e797996SStefan Bühler ) 552505cc785SStefan Bühler 553505cc785SStefan Bühler if env['with_geoip']: 55442704e31SStefan Bühler if not autoconf.CheckLibWithHeader('GeoIP', 'GeoIP.h', 'C'): 55566e0cd16SStefan Bühler fail("Couldn't find geoip") 5562e797996SStefan Bühler autoconf.env.Append( 5572e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_GEOIP' ], 5582e797996SStefan Bühler LIBGEOIP = 'GeoIP', 5592e797996SStefan Bühler ) 560e95ea21bSJan Kneschke 5614ac239c4SGlenn Strauss if env['with_maxminddb']: 5624ac239c4SGlenn Strauss if not autoconf.CheckLibWithHeader('maxminddb', 'maxminddb.h', 'C'): 5634ac239c4SGlenn Strauss fail("Couldn't find maxminddb") 5644ac239c4SGlenn Strauss autoconf.env.Append( 5654ac239c4SGlenn Strauss CPPFLAGS = [ '-DHAVE_MAXMINDDB' ], 5664ac239c4SGlenn Strauss LIBMAXMINDDB = 'maxminddb', 5674ac239c4SGlenn Strauss ) 5684ac239c4SGlenn Strauss 5691c1a6378SGlenn Strauss if env['with_krb5']: 57042704e31SStefan Bühler if not autoconf.CheckLibWithHeader('krb5', 'krb5.h', 'C'): 57166e0cd16SStefan Bühler fail("Couldn't find krb5") 57242704e31SStefan Bühler if not autoconf.CheckLibWithHeader('gssapi_krb5', 'gssapi/gssapi_krb5.h', 'C'): 57366e0cd16SStefan Bühler fail("Couldn't find gssapi_krb5") 5742e797996SStefan Bühler autoconf.env.Append( 5752e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_KRB5' ], 5762e797996SStefan Bühler LIBKRB5 = 'krb5', 5772e797996SStefan Bühler LIBGSSAPI_KRB5 = 'gssapi_krb5', 5782e797996SStefan Bühler ) 5791c1a6378SGlenn Strauss 58028729997SJan Kneschke if env['with_ldap']: 58142704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ldap', 'ldap.h', 'C'): 58266e0cd16SStefan Bühler fail("Couldn't find ldap") 58342704e31SStefan Bühler if not autoconf.CheckLibWithHeader('lber', 'lber.h', 'C'): 58466e0cd16SStefan Bühler fail("Couldn't find lber") 5852e797996SStefan Bühler autoconf.env.Append( 5862e797996SStefan Bühler CPPFLAGS = [ 5872e797996SStefan Bühler '-DHAVE_LDAP_H', '-DHAVE_LIBLDAP', 5882e797996SStefan Bühler '-DHAVE_LBER_H', '-DHAVE_LIBLBER', 5892e797996SStefan Bühler ], 5902e797996SStefan Bühler LIBLDAP = 'ldap', 5912e797996SStefan Bühler LIBLBER = 'lber', 5922e797996SStefan Bühler ) 59328729997SJan Kneschke 594505cc785SStefan Bühler if env['with_lua']: 59568284bd7SStefan Bühler found_lua = False 59664aff80dSGlenn 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']: 5973ba68b25SStefan Bühler print("Searching for lua: " + lua_name + " >= 5.0") 5983ba68b25SStefan Bühler if autoconf.CheckParseConfigForLib('LIBLUA', "pkg-config '" + lua_name + " >= 5.0' --cflags --libs"): 5993ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ]) 60068284bd7SStefan Bühler found_lua = True 60168284bd7SStefan Bühler break 60268284bd7SStefan Bühler if not found_lua: 60366e0cd16SStefan Bühler fail("Couldn't find any lua implementation") 6049b10531fSJan Kneschke 605505cc785SStefan Bühler if env['with_memcached']: 60642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('memcached', 'libmemcached/memcached.h', 'C'): 60766e0cd16SStefan Bühler fail("Couldn't find memcached") 6082e797996SStefan Bühler autoconf.env.Append( 6092e797996SStefan Bühler CPPFLAGS = [ '-DUSE_MEMCACHED' ], 6102e797996SStefan Bühler LIBMEMCACHED = 'memcached', 6112e797996SStefan Bühler ) 612e95ea21bSJan Kneschke 6136db887adSJan Kneschke if env['with_mysql']: 61442704e31SStefan Bühler mysql_config = autoconf.checkProgram('mysql', 'mysql_config') 6153ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBMYSQL', mysql_config + ' --cflags --libs'): 6163ba68b25SStefan Bühler fail("Couldn't find mysql") 6173ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MYSQL_H', '-DHAVE_LIBMYSQL' ]) 6186db887adSJan Kneschke 619e00deb55SGlenn Strauss if env['with_nss']: 620e00deb55SGlenn Strauss nss_config = autoconf.checkProgram('nss', 'nss-config') 621e00deb55SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBNSS', nss_config + ' --cflags --libs'): 622e00deb55SGlenn Strauss fail("Couldn't find NSS") 623e00deb55SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_NSS3_NSS_H' ]) 624e00deb55SGlenn Strauss 625505cc785SStefan Bühler if env['with_openssl']: 62642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'): 62766e0cd16SStefan Bühler fail("Couldn't find openssl") 6282e797996SStefan Bühler autoconf.env.Append( 6292e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_OPENSSL_SSL_H', '-DHAVE_LIBSSL'], 6302e797996SStefan Bühler LIBSSL = 'ssl', 631ce1d45edSGlenn Strauss LIBSSLCRYPTO = 'crypto', 6322e797996SStefan Bühler LIBCRYPTO = 'crypto', 6332e797996SStefan Bühler ) 634505cc785SStefan Bühler 635a950ae15SGlenn Strauss if env['with_wolfssl']: 636a950ae15SGlenn Strauss if type(env['with_wolfssl']) is str: 637a950ae15SGlenn Strauss autoconf.env.AppendUnique( 638a950ae15SGlenn Strauss CPPPATH = [ env['with_wolfssl'] + '/include', 639a950ae15SGlenn Strauss env['with_wolfssl'] + '/include/wolfssl' ], 640a950ae15SGlenn Strauss LIBPATH = [ env['with_wolfssl'] + '/lib' ], 641a950ae15SGlenn Strauss ) 642a950ae15SGlenn Strauss if not autoconf.CheckLibWithHeader('wolfssl', 'wolfssl/ssl.h', 'C'): 643a950ae15SGlenn Strauss fail("Couldn't find wolfssl") 644a950ae15SGlenn Strauss autoconf.env.Append( 645a950ae15SGlenn Strauss CPPFLAGS = [ '-DHAVE_WOLFSSL_SSL_H' ], 646ce1d45edSGlenn Strauss LIBWOLFSSL= 'wolfssl', 647a950ae15SGlenn Strauss LIBCRYPTO = 'wolfssl', 648a950ae15SGlenn Strauss ) 649a950ae15SGlenn Strauss 650cb753ec5SGlenn Strauss if env['with_mbedtls']: 651cb753ec5SGlenn Strauss if not autoconf.CheckLibWithHeader('mbedtls', 'mbedtls/ssl.h', 'C'): 652cb753ec5SGlenn Strauss fail("Couldn't find mbedtls") 653cb753ec5SGlenn Strauss autoconf.env.Append( 654cb753ec5SGlenn Strauss CPPFLAGS = [ '-DHAVE_LIBMBEDCRYPTO' ], 655ce1d45edSGlenn Strauss LIBMBEDTLS = 'mbedtls', 656ce1d45edSGlenn Strauss LIBMBEDX509 = 'mbedx509', 657ce1d45edSGlenn Strauss LIBMBEDCRYPTO = 'mbedcrypto', 658cb753ec5SGlenn Strauss LIBCRYPTO = 'mbedcrypto', 659cb753ec5SGlenn Strauss ) 660cb753ec5SGlenn Strauss 661b28a3714SGlenn Strauss if env['with_nettle']: 662b28a3714SGlenn Strauss if not autoconf.CheckLibWithHeader('nettle', 'nettle/nettle-types.h', 'C'): 663b28a3714SGlenn Strauss fail("Couldn't find Nettle") 664b28a3714SGlenn Strauss autoconf.env.Append( 665b28a3714SGlenn Strauss CPPFLAGS = [ '-DHAVE_NETTLE_NETTLE_TYPES_H' ], 666b28a3714SGlenn Strauss LIBCRYPTO = 'nettle', 667b28a3714SGlenn Strauss ) 668b28a3714SGlenn Strauss 669bf4054f8SGlenn Strauss if env['with_gnutls']: 670bf4054f8SGlenn Strauss if not autoconf.CheckLibWithHeader('gnutls', 'gnutls/crypto.h', 'C'): 671bf4054f8SGlenn Strauss fail("Couldn't find gnutls") 672bf4054f8SGlenn Strauss autoconf.env.Append( 673bf4054f8SGlenn Strauss CPPFLAGS = [ '-DHAVE_GNUTLS_CRYPTO_H' ], 674bf4054f8SGlenn Strauss LIBGNUTLS = 'gnutls', 675bf4054f8SGlenn Strauss ) 676bf4054f8SGlenn Strauss if not autoconf.env.exists('LIBCRYPTO'): 677bf4054f8SGlenn Strauss autoconf.env.Append( 678bf4054f8SGlenn Strauss LIBCRYPTO = 'gnutls', 679bf4054f8SGlenn Strauss ) 680bf4054f8SGlenn Strauss 681df4812ecSGlenn Strauss if env['with_pam']: 682df4812ecSGlenn Strauss if not autoconf.CheckLibWithHeader('pam', 'security/pam_appl.h', 'C'): 683df4812ecSGlenn Strauss fail("Couldn't find pam") 684df4812ecSGlenn Strauss autoconf.env.Append( 685df4812ecSGlenn Strauss CPPFLAGS = [ '-DHAVE_PAM' ], 686df4812ecSGlenn Strauss LIBPAM = 'pam', 687df4812ecSGlenn Strauss ) 688df4812ecSGlenn Strauss 689505cc785SStefan Bühler if env['with_pcre']: 69042704e31SStefan Bühler pcre_config = autoconf.checkProgram('pcre', 'pcre-config') 6913ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre_config + ' --cflags --libs'): 6923ba68b25SStefan Bühler fail("Couldn't find pcre") 6933ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_LIBPCRE' ]) 694505cc785SStefan Bühler 6952f83aac9SGlenn Strauss if env['with_pgsql']: 6963ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPGSQL', 'pkg-config libpq --cflags --libs'): 6973ba68b25SStefan Bühler fail("Couldn't find libpq") 6983ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PGSQL_H', '-DHAVE_LIBPGSQL' ]) 6992f83aac9SGlenn Strauss 700d61714ddSGlenn Strauss if env['with_sasl']: 701d61714ddSGlenn Strauss if not autoconf.CheckLibWithHeader('sasl2', 'sasl/sasl.h', 'C'): 702d61714ddSGlenn Strauss fail("Couldn't find libsasl2") 703d61714ddSGlenn Strauss autoconf.env.Append( 704d61714ddSGlenn Strauss CPPFLAGS = [ '-DHAVE_SASL' ], 705d61714ddSGlenn Strauss LIBSASL = 'sasl2', 706d61714ddSGlenn Strauss ) 707d61714ddSGlenn Strauss 708505cc785SStefan Bühler if env['with_sqlite3']: 70942704e31SStefan Bühler if not autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'): 71066e0cd16SStefan Bühler fail("Couldn't find sqlite3") 7112e797996SStefan Bühler autoconf.env.Append( 7122e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_SQLITE3_H', '-DHAVE_LIBSQLITE3' ], 7132e797996SStefan Bühler LIBSQLITE3 = 'sqlite3', 7142e797996SStefan Bühler ) 715505cc785SStefan Bühler 716505cc785SStefan Bühler if env['with_uuid']: 71742704e31SStefan Bühler if not autoconf.CheckLibWithHeader('uuid', 'uuid/uuid.h', 'C'): 71866e0cd16SStefan Bühler fail("Couldn't find uuid") 7192e797996SStefan Bühler autoconf.env.Append( 7202e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_UUID_UUID_H', '-DHAVE_LIBUUID' ], 7212e797996SStefan Bühler LIBUUID = 'uuid', 7222e797996SStefan Bühler ) 723505cc785SStefan Bühler 724505cc785SStefan Bühler if env['with_xml']: 72542704e31SStefan Bühler xml2_config = autoconf.checkProgram('xml', 'xml2-config') 7263ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBXML2', xml2_config + ' --cflags --libs'): 7273ba68b25SStefan Bühler fail("Couldn't find xml2") 7283ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ]) 729505cc785SStefan Bühler 73007622251SGlenn Strauss if env['with_xxhash']: 73107622251SGlenn Strauss if not autoconf.CheckLibWithHeader('xxhash', 'xxhash.h', 'C'): 73207622251SGlenn Strauss fail("Couldn't find xxhash") 73307622251SGlenn Strauss autoconf.env.Append( 73407622251SGlenn Strauss CPPFLAGS = [ '-DHAVE_XXHASH_H' ], 73507622251SGlenn Strauss LIBXXHASH = 'xxhash', 73607622251SGlenn Strauss ) 73707622251SGlenn Strauss 738505cc785SStefan Bühler if env['with_zlib']: 73942704e31SStefan Bühler if not autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'): 74066e0cd16SStefan Bühler fail("Couldn't find zlib") 7412e797996SStefan Bühler autoconf.env.Append( 7422e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_ZLIB_H', '-DHAVE_LIBZ' ], 7432e797996SStefan Bühler LIBZ = 'z', 7442e797996SStefan Bühler ) 745505cc785SStefan Bühler 7469211fb3dSGlenn Strauss if env['with_zstd']: 7479211fb3dSGlenn Strauss if not autoconf.CheckLibWithHeader('zstd', 'zstd.h', 'C'): 7489211fb3dSGlenn Strauss fail("Couldn't find zstd") 7499211fb3dSGlenn Strauss autoconf.env.Append( 7509211fb3dSGlenn Strauss CPPFLAGS = [ '-DHAVE_ZSTD_H', '-DHAVE_ZSTD' ], 7519211fb3dSGlenn Strauss LIBZSTD = 'zstd', 7529211fb3dSGlenn Strauss ) 7539211fb3dSGlenn Strauss 754505cc785SStefan Bühler env = autoconf.Finish() 755505cc785SStefan Bühler 75686d03967SGlenn Straussif re.compile("cygwin|mingw|midipix").search(env['PLATFORM']): 757809199f9SmOo env.Append(COMMON_LIB = 'bin') 758809199f9SmOoelif re.compile("darwin|aix").search(env['PLATFORM']): 759809199f9SmOo env.Append(COMMON_LIB = 'lib') 760809199f9SmOoelse: 761809199f9SmOo env.Append(COMMON_LIB = False) 762809199f9SmOo 763d102a711SStefan Bühlerversions = version.split('.') 764809199f9SmOoversion_id = int(versions[0]) << 16 | int(versions[1]) << 8 | int(versions[2]) 765e95ea21bSJan Kneschkeenv.Append(CPPFLAGS = [ 76668284bd7SStefan Bühler '-DLIGHTTPD_VERSION_ID=' + hex(version_id), 767e95ea21bSJan Kneschke '-DPACKAGE_NAME=\\"' + package + '\\"', 768e95ea21bSJan Kneschke '-DPACKAGE_VERSION=\\"' + version + '\\"', 769e95ea21bSJan Kneschke '-DLIBRARY_DIR="\\"${libdir}\\""', 770e95ea21bSJan Kneschke ] ) 771e95ea21bSJan Kneschke 77268284bd7SStefan BühlerSConscript('src/SConscript', exports = 'env', variant_dir = 'sconsbuild/build', duplicate = 0) 77368284bd7SStefan BühlerSConscript('tests/SConscript', exports = 'env', variant_dir = 'sconsbuild/tests') 774