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' 1518370ed8SGlenn Straussversion = '1.4.64' 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'), 2474ac239c4SGlenn Strauss BoolVariable('with_maxminddb', 'enable MaxMind GeoIP2 support', 'no'), 248177f5509SGlenn Strauss BoolVariable('with_krb5', 'enable krb5 auth support', 'no'), 249ccba074cSStefan Bühler BoolVariable('with_ldap', 'enable ldap auth support', 'no'), 250ccba074cSStefan Bühler # with_libev not supported 251ccba074cSStefan Bühler # with_libunwind not supported 25286c2d309SGlenn Strauss BoolVariable('with_lua', 'enable lua support', 'no'), 253ccba074cSStefan Bühler PackageVariable('with_mysql', 'enable mysql support', 'no'), 254ccba074cSStefan Bühler BoolVariable('with_openssl', 'enable openssl support', 'no'), 255bf4054f8SGlenn Strauss PackageVariable('with_gnutls', 'enable GnuTLS support', 'no'), 256cb753ec5SGlenn Strauss PackageVariable('with_mbedtls', 'enable mbedTLS support', 'no'), 257e00deb55SGlenn Strauss PackageVariable('with_nss', 'enable NSS crypto support', 'no'), 258a950ae15SGlenn Strauss PackageVariable('with_wolfssl', 'enable wolfSSL support', 'no'), 259b28a3714SGlenn Strauss BoolVariable('with_nettle', 'enable Nettle support', 'no'), 2606edd040bSGlenn Strauss BoolVariable('with_pam', 'enable PAM auth support', 'no'), 261750414d3SGlenn Strauss PackageVariable('with_pcre2', 'enable pcre2 support', 'yes'), 262750414d3SGlenn Strauss PackageVariable('with_pcre', 'enable pcre support', 'no'), 263ccba074cSStefan Bühler PackageVariable('with_pgsql', 'enable pgsql support', 'no'), 264d61714ddSGlenn Strauss PackageVariable('with_sasl', 'enable SASL support', 'no'), 26508c8749bSStefan Bühler BoolVariable('with_sqlite3', 'enable sqlite3 support (required for webdav props)', 'no'), 26608c8749bSStefan Bühler BoolVariable('with_uuid', 'enable uuid support (required for webdav locks)', 'no'), 267ccba074cSStefan Bühler # with_valgrind not supported 268ccba074cSStefan Bühler # with_xattr not supported 26908c8749bSStefan Bühler PackageVariable('with_xml', 'enable xml support (required for webdav props)', 'no'), 27007622251SGlenn Strauss BoolVariable('with_xxhash', 'build with system-provided xxhash', 'no'), 271fff8e705SStefan Bühler BoolVariable('with_zlib', 'enable deflate/gzip compression', 'no'), 2729211fb3dSGlenn Strauss BoolVariable('with_zstd', 'enable zstd compression', 'no'), 2732506e21bSStefan Bühler 2742506e21bSStefan Bühler BoolVariable('with_all', 'enable all with_* features', 'no'), 275177f5509SGlenn Strauss) 276e95ea21bSJan Kneschke 277e95ea21bSJan Kneschkeenv = Environment( 2785515bb2aSStefan Bühler ENV = dict(os.environ), # make sure we have a dict here so .Clone() works properly 27968284bd7SStefan Bühler variables = vars, 28068284bd7SStefan Bühler CPPPATH = Split('#sconsbuild/build') 281e95ea21bSJan Kneschke) 282e95ea21bSJan Kneschke 28368284bd7SStefan Bühlerenv.Help(vars.GenerateHelpText(env)) 284649cc0b7SJan Kneschke 285f358f04bSGlenn Straussif env.subst('${CC}') != '': 286649cc0b7SJan Kneschke env['CC'] = env.subst('${CC}') 287649cc0b7SJan Kneschke 288e95ea21bSJan Kneschkeenv['package'] = package 289e95ea21bSJan Kneschkeenv['version'] = version 290230e6700SJan Kneschkeif env['CC'] == 'gcc': 2915872f766SJan Kneschke ## we need x-open 6 and bsd 4.3 features 292457d78c6SGlenn Strauss env.Append(CCFLAGS = Split('-pipe -Wall -O2 -g -W -pedantic -Wunused -Wshadow -std=gnu99')) 293e95ea21bSJan Kneschke 294706910acSStefan Bühlerenv.Append(CPPFLAGS = [ 29592576a2fSGlenn Strauss '-D_TIME_BITS=64', 296706910acSStefan Bühler '-D_FILE_OFFSET_BITS=64', 297706910acSStefan Bühler '-D_LARGEFILE_SOURCE', 298706910acSStefan Bühler '-D_LARGE_FILES', 299706910acSStefan Bühler '-D_GNU_SOURCE', 300706910acSStefan Bühler]) 301706910acSStefan Bühler 3022506e21bSStefan Bühlerif env['with_all']: 3032506e21bSStefan Bühler for feature in vars.keys(): 3042506e21bSStefan Bühler # only enable 'with_*' flags 3052506e21bSStefan Bühler if not feature.startswith('with_'): continue 3062506e21bSStefan Bühler # don't overwrite manual arguments 3072506e21bSStefan Bühler if feature in vars.args: continue 3082506e21bSStefan Bühler # now activate 3092506e21bSStefan Bühler env[feature] = True 3102506e21bSStefan Bühler 311e95ea21bSJan Kneschke# cache configure checks 312e95ea21bSJan Kneschkeif 1: 31342704e31SStefan Bühler autoconf = Autoconf(env) 31468284bd7SStefan Bühler 31568284bd7SStefan Bühler if 'CFLAGS' in os.environ: 31668284bd7SStefan Bühler autoconf.env.Append(CCFLAGS = os.environ['CFLAGS']) 31768284bd7SStefan Bühler print(">> Appending custom build flags : " + os.environ['CFLAGS']) 31868284bd7SStefan Bühler 31968284bd7SStefan Bühler if 'LDFLAGS' in os.environ: 32068284bd7SStefan Bühler autoconf.env.Append(LINKFLAGS = os.environ['LDFLAGS']) 32168284bd7SStefan Bühler print(">> Appending custom link flags : " + os.environ['LDFLAGS']) 32268284bd7SStefan Bühler 32368284bd7SStefan Bühler if 'LIBS' in os.environ: 32468284bd7SStefan Bühler autoconf.env.Append(APPEND_LIBS = os.environ['LIBS']) 32568284bd7SStefan Bühler print(">> Appending custom libraries : " + os.environ['LIBS']) 32652d72fe8SStefan Bühler else: 32752d72fe8SStefan Bühler autoconf.env.Append(APPEND_LIBS = '') 32868284bd7SStefan Bühler 329d57029c0SStefan Bühler autoconf.env.Append( 3308d5e237cSGlenn Strauss LIBBROTLI = '', 331d57029c0SStefan Bühler LIBBZ2 = '', 332d57029c0SStefan Bühler LIBCRYPT = '', 333d57029c0SStefan Bühler LIBCRYPTO = '', 334d57029c0SStefan Bühler LIBDBI = '', 335d57029c0SStefan Bühler LIBDL = '', 336bf4054f8SGlenn Strauss LIBGNUTLS = '', 337d57029c0SStefan Bühler LIBGSSAPI_KRB5 = '', 338d57029c0SStefan Bühler LIBKRB5 = '', 339d57029c0SStefan Bühler LIBLBER = '', 340d57029c0SStefan Bühler LIBLDAP = '', 341d57029c0SStefan Bühler LIBLUA = '', 342ce1d45edSGlenn Strauss LIBMBEDTLS = '', 343ce1d45edSGlenn Strauss LIBMBEDX509 = '', 344ce1d45edSGlenn Strauss LIBMBEDCRYPTO = '', 345d57029c0SStefan Bühler LIBMYSQL = '', 346e00deb55SGlenn Strauss LIBNSS = '', 347df4812ecSGlenn Strauss LIBPAM = '', 348d57029c0SStefan Bühler LIBPCRE = '', 349d57029c0SStefan Bühler LIBPGSQL = '', 350d61714ddSGlenn Strauss LIBSASL = '', 351d57029c0SStefan Bühler LIBSQLITE3 = '', 352d57029c0SStefan Bühler LIBSSL = '', 353ce1d45edSGlenn Strauss LIBSSLCRYPTO = '', 354d57029c0SStefan Bühler LIBUUID = '', 355ce1d45edSGlenn Strauss LIBWOLFSSL = '', 356cb753ec5SGlenn Strauss LIBX509 = '', 357d57029c0SStefan Bühler LIBXML2 = '', 35807622251SGlenn Strauss LIBXXHASH = '', 359d57029c0SStefan Bühler LIBZ = '', 3609211fb3dSGlenn Strauss LIBZSTD = '', 361d57029c0SStefan Bühler ) 362d57029c0SStefan Bühler 36342704e31SStefan Bühler autoconf.haveCHeaders([ 36442704e31SStefan Bühler 'arpa/inet.h', 36542704e31SStefan Bühler 'crypt.h', 366cd738d4dSGlenn Strauss 'dlfcn.h', 36742704e31SStefan Bühler 'fcntl.h', 36842704e31SStefan Bühler 'getopt.h', 36942704e31SStefan Bühler 'inttypes.h', 37042704e31SStefan Bühler 'linux/random.h', 37117835501SGlenn Strauss 'malloc.h', 37242704e31SStefan Bühler 'poll.h', 37342704e31SStefan Bühler 'pwd.h', 37442704e31SStefan Bühler 'stdint.h', 37542704e31SStefan Bühler 'stdlib.h', 37642704e31SStefan Bühler 'string.h', 37742704e31SStefan Bühler 'strings.h', 37842704e31SStefan Bühler 'sys/epoll.h', 3797ce8b22cSGlenn Strauss 'sys/inotify.h', 3808c9b5480SNiclas Rosenvik 'sys/loadavg.h', 38142704e31SStefan Bühler 'sys/poll.h', 38242704e31SStefan Bühler 'sys/prctl.h', 383f36908deSGlenn Strauss 'sys/procctl.h', 38442704e31SStefan Bühler 'sys/sendfile.h', 38542704e31SStefan Bühler 'sys/time.h', 38642704e31SStefan Bühler 'sys/wait.h', 38742704e31SStefan Bühler 'syslog.h', 38842704e31SStefan Bühler 'unistd.h', 38942704e31SStefan Bühler 'winsock2.h', 390e95ea21bSJan Kneschke 39142704e31SStefan Bühler # "have" the last header if we include others before? 392ec945945SGlenn Strauss ['sys/types.h', 'sys/time.h', 'sys/resource.h'], 39342704e31SStefan Bühler ['sys/types.h', 'netinet/in.h'], 39442704e31SStefan Bühler ['sys/types.h', 'sys/event.h'], 39542704e31SStefan Bühler ['sys/types.h', 'sys/mman.h'], 39642704e31SStefan Bühler ['sys/types.h', 'sys/select.h'], 39742704e31SStefan Bühler ['sys/types.h', 'sys/socket.h'], 39842704e31SStefan Bühler ['sys/types.h', 'sys/uio.h'], 39942704e31SStefan Bühler ['sys/types.h', 'sys/un.h'], 40042704e31SStefan Bühler ]) 40142704e31SStefan Bühler 4027733376bSStefan Bühler autoconf.haveFuncs([ 4037733376bSStefan Bühler 'arc4random_buf', 4047733376bSStefan Bühler 'chroot', 4057733376bSStefan Bühler 'clock_gettime', 4060d62b865SGlenn Strauss 'copy_file_range', 4077733376bSStefan Bühler 'epoll_ctl', 4087733376bSStefan Bühler 'explicit_bzero', 409d7c0fc29SStefan Bühler 'explicit_memset', 4107733376bSStefan Bühler 'fork', 4117733376bSStefan Bühler 'getloadavg', 4127733376bSStefan Bühler 'getrlimit', 4137733376bSStefan Bühler 'getuid', 4141b11cd7aSGlenn Strauss 'gmtime_r', 4153579c322SGlenn Strauss 'inet_aton', 4167733376bSStefan Bühler 'inet_pton', 4177733376bSStefan Bühler 'issetugid', 4187733376bSStefan Bühler 'jrand48', 4197733376bSStefan Bühler 'kqueue', 4207733376bSStefan Bühler 'localtime_r', 4217733376bSStefan Bühler 'lstat', 4227733376bSStefan Bühler 'madvise', 4231a8d8e0cSGlenn Strauss 'malloc_trim', 42417835501SGlenn Strauss 'mallopt', 42582fbfcbaSGlenn Strauss 'mempcpy', 4267733376bSStefan Bühler 'memset_s', 4279f62f1b1SGlenn Strauss 'mkostemp', 4287733376bSStefan Bühler 'mmap', 4297733376bSStefan Bühler 'pipe2', 4307733376bSStefan Bühler 'poll', 4315cab11b7SGlenn Strauss 'pread', 4325c18891aSGlenn Strauss 'preadv', 4335cab11b7SGlenn Strauss 'pwrite', 4345c18891aSGlenn Strauss 'pwritev', 4357733376bSStefan Bühler 'select', 4367733376bSStefan Bühler 'send_file', 4377733376bSStefan Bühler 'sendfile', 4387733376bSStefan Bühler 'sendfile64', 4397733376bSStefan Bühler 'sigaction', 4407733376bSStefan Bühler 'signal', 4415cab11b7SGlenn Strauss 'splice', 4427733376bSStefan Bühler 'srandom', 44386c39754SGlenn Strauss 'strerror_r', 444f8cc9fb9SGlenn Strauss 'timegm', 4457733376bSStefan Bühler 'writev', 4467733376bSStefan Bühler ]) 44742704e31SStefan Bühler autoconf.haveFunc('getentropy', 'sys/random.h') 44842704e31SStefan Bühler autoconf.haveFunc('getrandom', 'linux/random.h') 449b6bd11c1SDavid Carlier if re.compile("sunos|solaris").search(env['PLATFORM']): 450448621e0SGlenn Strauss autoconf.haveCHeaders([ 451448621e0SGlenn Strauss 'port.h', 452448621e0SGlenn Strauss 'priv.h', 453448621e0SGlenn Strauss 'sys/devpoll.h', 454448621e0SGlenn Strauss 'sys/filio.h', 455448621e0SGlenn Strauss ]) 456448621e0SGlenn Strauss autoconf.haveFunc('port_create', 'port.h') 457*c0ced4e8SGlenn Strauss autoconf.haveFunc('sendfilev') 458b6bd11c1SDavid Carlier autoconf.haveFunc('setpflags', 'priv.h') 459e95ea21bSJan Kneschke 46042704e31SStefan Bühler autoconf.haveTypes(Split('pid_t size_t off_t')) 461e95ea21bSJan Kneschke 462505cc785SStefan Bühler # have crypt_r/crypt, and is -lcrypt needed? 46342704e31SStefan Bühler if autoconf.CheckLib('crypt'): 4642e797996SStefan Bühler autoconf.env.Append( 4652e797996SStefan Bühler LIBCRYPT = 'crypt', 4662e797996SStefan Bühler ) 46742704e31SStefan Bühler with autoconf.restoreEnvLibs(): 46842704e31SStefan Bühler autoconf.env['LIBS'] = ['crypt'] 46942704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 47052d72fe8SStefan Bühler else: 47142704e31SStefan Bühler autoconf.haveFuncs(['crypt', 'crypt_r']) 472e95ea21bSJan Kneschke 473505cc785SStefan Bühler if autoconf.CheckType('socklen_t', '#include <unistd.h>\n#include <sys/socket.h>\n#include <sys/types.h>'): 474505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SOCKLEN_T' ]) 475505cc785SStefan Bühler 476505cc785SStefan Bühler if autoconf.CheckType('struct sockaddr_storage', '#include <sys/socket.h>\n'): 477505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_SOCKADDR_STORAGE' ]) 478505cc785SStefan Bühler 47952c48983SGlenn Strauss if autoconf.CheckLibWithHeader('elftc', 'libelftc.h', 'c', 'elftc_copyfile(0, 1);'): 48052c48983SGlenn Strauss autoconf.env.Append( 48152c48983SGlenn Strauss CPPFLAGS = [ '-DHAVE_ELFTC_COPYFILE' ], 48252c48983SGlenn Strauss LIBS = [ 'elftc' ], 48352c48983SGlenn Strauss ) 48452c48983SGlenn Strauss 48542704e31SStefan Bühler if autoconf.CheckLibWithHeader('rt', 'time.h', 'c', 'clock_gettime(CLOCK_MONOTONIC, (struct timespec*)0);'): 4862e797996SStefan Bühler autoconf.env.Append( 4872e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_CLOCK_GETTIME' ], 4882e797996SStefan Bühler LIBS = [ 'rt' ], 4892e797996SStefan Bühler ) 4901ebc83f1SGlenn Strauss 491505cc785SStefan Bühler if autoconf.CheckIPv6(): 492505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_IPV6' ]) 4930014a87dSJan Kneschke 494505cc785SStefan Bühler if autoconf.CheckWeakSymbols(): 495505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_WEAK_SYMBOLS' ]) 496e95ea21bSJan Kneschke 497505cc785SStefan Bühler if autoconf.CheckGmtOffInStructTm(): 498505cc785SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_TM_GMTOFF' ]) 499505cc785SStefan Bühler 50042704e31SStefan Bühler if autoconf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'): 501505cc785SStefan Bühler autoconf.env.Append(LIBDL = 'dl') 502505cc785SStefan Bühler 503505cc785SStefan Bühler if env['with_bzip2']: 50442704e31SStefan Bühler if not autoconf.CheckLibWithHeader('bz2', 'bzlib.h', 'C'): 50566e0cd16SStefan Bühler fail("Couldn't find bz2") 5062e797996SStefan Bühler autoconf.env.Append( 5072e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_BZLIB_H', '-DHAVE_LIBBZ2' ], 5082e797996SStefan Bühler LIBBZ2 = 'bz2', 5092e797996SStefan Bühler ) 510505cc785SStefan Bühler 5118d5e237cSGlenn Strauss if env['with_brotli']: 512cea7e921SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBBROTLI', 'pkg-config --static --cflags --libs libbrotlienc'): 5138d5e237cSGlenn Strauss fail("Couldn't find libbrotlienc") 51417b378c0SGlenn Strauss autoconf.env.Append( 51517b378c0SGlenn Strauss CPPFLAGS = [ '-DHAVE_BROTLI_ENCODE_H', '-DHAVE_BROTLI' ], 51617b378c0SGlenn Strauss ) 5178d5e237cSGlenn Strauss 518505cc785SStefan Bühler if env['with_dbi']: 51942704e31SStefan Bühler if not autoconf.CheckLibWithHeader('dbi', 'dbi/dbi.h', 'C'): 52066e0cd16SStefan Bühler fail("Couldn't find dbi") 5212e797996SStefan Bühler autoconf.env.Append( 522c7c34201SGlenn Strauss CPPFLAGS = [ '-DHAVE_DBI' ], 5232e797996SStefan Bühler LIBDBI = 'dbi', 5242e797996SStefan Bühler ) 525505cc785SStefan Bühler 526f885498bSGlenn Strauss if env['with_fam'] and not autoconf.CheckCHeader('sys/inotify.h'): 52742704e31SStefan Bühler if not autoconf.CheckLibWithHeader('fam', 'fam.h', 'C'): 52866e0cd16SStefan Bühler fail("Couldn't find fam") 5292e797996SStefan Bühler autoconf.env.Append( 5302e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_FAM_H', '-DHAVE_LIBFAM' ], 5312e797996SStefan Bühler LIBS = [ 'fam' ], 5322e797996SStefan Bühler ) 53342704e31SStefan Bühler autoconf.haveFunc('FAMNoExists') 534505cc785SStefan Bühler 5354ac239c4SGlenn Strauss if env['with_maxminddb']: 5364ac239c4SGlenn Strauss if not autoconf.CheckLibWithHeader('maxminddb', 'maxminddb.h', 'C'): 5374ac239c4SGlenn Strauss fail("Couldn't find maxminddb") 5384ac239c4SGlenn Strauss autoconf.env.Append( 5394ac239c4SGlenn Strauss CPPFLAGS = [ '-DHAVE_MAXMINDDB' ], 5404ac239c4SGlenn Strauss LIBMAXMINDDB = 'maxminddb', 5414ac239c4SGlenn Strauss ) 5424ac239c4SGlenn Strauss 5431c1a6378SGlenn Strauss if env['with_krb5']: 54442704e31SStefan Bühler if not autoconf.CheckLibWithHeader('krb5', 'krb5.h', 'C'): 54566e0cd16SStefan Bühler fail("Couldn't find krb5") 54642704e31SStefan Bühler if not autoconf.CheckLibWithHeader('gssapi_krb5', 'gssapi/gssapi_krb5.h', 'C'): 54766e0cd16SStefan Bühler fail("Couldn't find gssapi_krb5") 5482e797996SStefan Bühler autoconf.env.Append( 5492e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_KRB5' ], 5502e797996SStefan Bühler LIBKRB5 = 'krb5', 5512e797996SStefan Bühler LIBGSSAPI_KRB5 = 'gssapi_krb5', 5522e797996SStefan Bühler ) 5531c1a6378SGlenn Strauss 55428729997SJan Kneschke if env['with_ldap']: 55542704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ldap', 'ldap.h', 'C'): 55666e0cd16SStefan Bühler fail("Couldn't find ldap") 55742704e31SStefan Bühler if not autoconf.CheckLibWithHeader('lber', 'lber.h', 'C'): 55866e0cd16SStefan Bühler fail("Couldn't find lber") 5592e797996SStefan Bühler autoconf.env.Append( 5602e797996SStefan Bühler CPPFLAGS = [ 5612e797996SStefan Bühler '-DHAVE_LDAP_H', '-DHAVE_LIBLDAP', 5622e797996SStefan Bühler '-DHAVE_LBER_H', '-DHAVE_LIBLBER', 5632e797996SStefan Bühler ], 5642e797996SStefan Bühler LIBLDAP = 'ldap', 5652e797996SStefan Bühler LIBLBER = 'lber', 5662e797996SStefan Bühler ) 56728729997SJan Kneschke 568505cc785SStefan Bühler if env['with_lua']: 56968284bd7SStefan Bühler found_lua = False 57064aff80dSGlenn 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']: 5713ba68b25SStefan Bühler print("Searching for lua: " + lua_name + " >= 5.0") 5723ba68b25SStefan Bühler if autoconf.CheckParseConfigForLib('LIBLUA', "pkg-config '" + lua_name + " >= 5.0' --cflags --libs"): 5733ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ]) 57468284bd7SStefan Bühler found_lua = True 57568284bd7SStefan Bühler break 57668284bd7SStefan Bühler if not found_lua: 57766e0cd16SStefan Bühler fail("Couldn't find any lua implementation") 5789b10531fSJan Kneschke 5796db887adSJan Kneschke if env['with_mysql']: 58042704e31SStefan Bühler mysql_config = autoconf.checkProgram('mysql', 'mysql_config') 5813ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBMYSQL', mysql_config + ' --cflags --libs'): 5823ba68b25SStefan Bühler fail("Couldn't find mysql") 583c7c34201SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MYSQL' ]) 5846db887adSJan Kneschke 585e00deb55SGlenn Strauss if env['with_nss']: 586e00deb55SGlenn Strauss nss_config = autoconf.checkProgram('nss', 'nss-config') 587e00deb55SGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBNSS', nss_config + ' --cflags --libs'): 588e00deb55SGlenn Strauss fail("Couldn't find NSS") 589e00deb55SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_NSS3_NSS_H' ]) 590e00deb55SGlenn Strauss 591505cc785SStefan Bühler if env['with_openssl']: 59242704e31SStefan Bühler if not autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'): 59366e0cd16SStefan Bühler fail("Couldn't find openssl") 5942e797996SStefan Bühler autoconf.env.Append( 5952e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_OPENSSL_SSL_H', '-DHAVE_LIBSSL'], 5962e797996SStefan Bühler LIBSSL = 'ssl', 597ce1d45edSGlenn Strauss LIBSSLCRYPTO = 'crypto', 5982e797996SStefan Bühler LIBCRYPTO = 'crypto', 5992e797996SStefan Bühler ) 600505cc785SStefan Bühler 601a950ae15SGlenn Strauss if env['with_wolfssl']: 602a950ae15SGlenn Strauss if type(env['with_wolfssl']) is str: 603a950ae15SGlenn Strauss autoconf.env.AppendUnique( 604a950ae15SGlenn Strauss CPPPATH = [ env['with_wolfssl'] + '/include', 605a950ae15SGlenn Strauss env['with_wolfssl'] + '/include/wolfssl' ], 606a950ae15SGlenn Strauss LIBPATH = [ env['with_wolfssl'] + '/lib' ], 607a950ae15SGlenn Strauss ) 608a950ae15SGlenn Strauss if not autoconf.CheckLibWithHeader('wolfssl', 'wolfssl/ssl.h', 'C'): 609a950ae15SGlenn Strauss fail("Couldn't find wolfssl") 610a950ae15SGlenn Strauss autoconf.env.Append( 611a950ae15SGlenn Strauss CPPFLAGS = [ '-DHAVE_WOLFSSL_SSL_H' ], 612ce1d45edSGlenn Strauss LIBWOLFSSL= 'wolfssl', 613a950ae15SGlenn Strauss LIBCRYPTO = 'wolfssl', 614a950ae15SGlenn Strauss ) 615a950ae15SGlenn Strauss 616cb753ec5SGlenn Strauss if env['with_mbedtls']: 617cb753ec5SGlenn Strauss if not autoconf.CheckLibWithHeader('mbedtls', 'mbedtls/ssl.h', 'C'): 618cb753ec5SGlenn Strauss fail("Couldn't find mbedtls") 619cb753ec5SGlenn Strauss autoconf.env.Append( 620cb753ec5SGlenn Strauss CPPFLAGS = [ '-DHAVE_LIBMBEDCRYPTO' ], 621ce1d45edSGlenn Strauss LIBMBEDTLS = 'mbedtls', 622ce1d45edSGlenn Strauss LIBMBEDX509 = 'mbedx509', 623ce1d45edSGlenn Strauss LIBMBEDCRYPTO = 'mbedcrypto', 624cb753ec5SGlenn Strauss LIBCRYPTO = 'mbedcrypto', 625cb753ec5SGlenn Strauss ) 626cb753ec5SGlenn Strauss 627b28a3714SGlenn Strauss if env['with_nettle']: 628b28a3714SGlenn Strauss if not autoconf.CheckLibWithHeader('nettle', 'nettle/nettle-types.h', 'C'): 629b28a3714SGlenn Strauss fail("Couldn't find Nettle") 630b28a3714SGlenn Strauss autoconf.env.Append( 631b28a3714SGlenn Strauss CPPFLAGS = [ '-DHAVE_NETTLE_NETTLE_TYPES_H' ], 632b28a3714SGlenn Strauss LIBCRYPTO = 'nettle', 633b28a3714SGlenn Strauss ) 634b28a3714SGlenn Strauss 635bf4054f8SGlenn Strauss if env['with_gnutls']: 636bf4054f8SGlenn Strauss if not autoconf.CheckLibWithHeader('gnutls', 'gnutls/crypto.h', 'C'): 637bf4054f8SGlenn Strauss fail("Couldn't find gnutls") 638bf4054f8SGlenn Strauss autoconf.env.Append( 639bf4054f8SGlenn Strauss CPPFLAGS = [ '-DHAVE_GNUTLS_CRYPTO_H' ], 640bf4054f8SGlenn Strauss LIBGNUTLS = 'gnutls', 641bf4054f8SGlenn Strauss ) 642bf4054f8SGlenn Strauss if not autoconf.env.exists('LIBCRYPTO'): 643bf4054f8SGlenn Strauss autoconf.env.Append( 644bf4054f8SGlenn Strauss LIBCRYPTO = 'gnutls', 645bf4054f8SGlenn Strauss ) 646bf4054f8SGlenn Strauss 647df4812ecSGlenn Strauss if env['with_pam']: 648df4812ecSGlenn Strauss if not autoconf.CheckLibWithHeader('pam', 'security/pam_appl.h', 'C'): 649df4812ecSGlenn Strauss fail("Couldn't find pam") 650df4812ecSGlenn Strauss autoconf.env.Append( 651df4812ecSGlenn Strauss CPPFLAGS = [ '-DHAVE_PAM' ], 652df4812ecSGlenn Strauss LIBPAM = 'pam', 653df4812ecSGlenn Strauss ) 654df4812ecSGlenn Strauss 655750414d3SGlenn Strauss if env['with_pcre2'] and not env['with_pcre']: 6567512d82cSGlenn Strauss pcre2_config = autoconf.checkProgram('pcre2', 'pcre2-config') 6577512d82cSGlenn Strauss if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre2_config + ' --cflags --libs8'): 6587512d82cSGlenn Strauss fail("Couldn't find pcre2") 6597512d82cSGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE2_H', '-DHAVE_PCRE' ]) 6607512d82cSGlenn Strauss elif env['with_pcre']: 66142704e31SStefan Bühler pcre_config = autoconf.checkProgram('pcre', 'pcre-config') 6623ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPCRE', pcre_config + ' --cflags --libs'): 6633ba68b25SStefan Bühler fail("Couldn't find pcre") 6647512d82cSGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_PCRE' ]) 665505cc785SStefan Bühler 6662f83aac9SGlenn Strauss if env['with_pgsql']: 6673ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBPGSQL', 'pkg-config libpq --cflags --libs'): 6683ba68b25SStefan Bühler fail("Couldn't find libpq") 669c7c34201SGlenn Strauss autoconf.env.Append(CPPFLAGS = [ '-DHAVE_PGSQL' ]) 6702f83aac9SGlenn Strauss 671d61714ddSGlenn Strauss if env['with_sasl']: 672d61714ddSGlenn Strauss if not autoconf.CheckLibWithHeader('sasl2', 'sasl/sasl.h', 'C'): 673d61714ddSGlenn Strauss fail("Couldn't find libsasl2") 674d61714ddSGlenn Strauss autoconf.env.Append( 675d61714ddSGlenn Strauss CPPFLAGS = [ '-DHAVE_SASL' ], 676d61714ddSGlenn Strauss LIBSASL = 'sasl2', 677d61714ddSGlenn Strauss ) 678d61714ddSGlenn Strauss 679505cc785SStefan Bühler if env['with_sqlite3']: 68042704e31SStefan Bühler if not autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'): 68166e0cd16SStefan Bühler fail("Couldn't find sqlite3") 6822e797996SStefan Bühler autoconf.env.Append( 6832e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_SQLITE3_H', '-DHAVE_LIBSQLITE3' ], 6842e797996SStefan Bühler LIBSQLITE3 = 'sqlite3', 6852e797996SStefan Bühler ) 686505cc785SStefan Bühler 687505cc785SStefan Bühler if env['with_uuid']: 68842704e31SStefan Bühler if not autoconf.CheckLibWithHeader('uuid', 'uuid/uuid.h', 'C'): 68966e0cd16SStefan Bühler fail("Couldn't find uuid") 6902e797996SStefan Bühler autoconf.env.Append( 6912e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_UUID_UUID_H', '-DHAVE_LIBUUID' ], 6922e797996SStefan Bühler LIBUUID = 'uuid', 6932e797996SStefan Bühler ) 694505cc785SStefan Bühler 695505cc785SStefan Bühler if env['with_xml']: 69642704e31SStefan Bühler xml2_config = autoconf.checkProgram('xml', 'xml2-config') 6973ba68b25SStefan Bühler if not autoconf.CheckParseConfigForLib('LIBXML2', xml2_config + ' --cflags --libs'): 6983ba68b25SStefan Bühler fail("Couldn't find xml2") 6993ba68b25SStefan Bühler autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ]) 700505cc785SStefan Bühler 70107622251SGlenn Strauss if env['with_xxhash']: 70207622251SGlenn Strauss if not autoconf.CheckLibWithHeader('xxhash', 'xxhash.h', 'C'): 70307622251SGlenn Strauss fail("Couldn't find xxhash") 70407622251SGlenn Strauss autoconf.env.Append( 70507622251SGlenn Strauss CPPFLAGS = [ '-DHAVE_XXHASH_H' ], 70607622251SGlenn Strauss LIBXXHASH = 'xxhash', 70707622251SGlenn Strauss ) 70807622251SGlenn Strauss 709505cc785SStefan Bühler if env['with_zlib']: 71042704e31SStefan Bühler if not autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'): 71166e0cd16SStefan Bühler fail("Couldn't find zlib") 7122e797996SStefan Bühler autoconf.env.Append( 7132e797996SStefan Bühler CPPFLAGS = [ '-DHAVE_ZLIB_H', '-DHAVE_LIBZ' ], 7142e797996SStefan Bühler LIBZ = 'z', 7152e797996SStefan Bühler ) 716505cc785SStefan Bühler 7179211fb3dSGlenn Strauss if env['with_zstd']: 7189211fb3dSGlenn Strauss if not autoconf.CheckLibWithHeader('zstd', 'zstd.h', 'C'): 7199211fb3dSGlenn Strauss fail("Couldn't find zstd") 7209211fb3dSGlenn Strauss autoconf.env.Append( 7219211fb3dSGlenn Strauss CPPFLAGS = [ '-DHAVE_ZSTD_H', '-DHAVE_ZSTD' ], 7229211fb3dSGlenn Strauss LIBZSTD = 'zstd', 7239211fb3dSGlenn Strauss ) 7249211fb3dSGlenn Strauss 725505cc785SStefan Bühler env = autoconf.Finish() 726505cc785SStefan Bühler 72786d03967SGlenn Straussif re.compile("cygwin|mingw|midipix").search(env['PLATFORM']): 728809199f9SmOo env.Append(COMMON_LIB = 'bin') 729809199f9SmOoelif re.compile("darwin|aix").search(env['PLATFORM']): 730809199f9SmOo env.Append(COMMON_LIB = 'lib') 731809199f9SmOoelse: 732809199f9SmOo env.Append(COMMON_LIB = False) 733809199f9SmOo 734d102a711SStefan Bühlerversions = version.split('.') 735809199f9SmOoversion_id = int(versions[0]) << 16 | int(versions[1]) << 8 | int(versions[2]) 736e95ea21bSJan Kneschkeenv.Append(CPPFLAGS = [ 73768284bd7SStefan Bühler '-DLIGHTTPD_VERSION_ID=' + hex(version_id), 738e95ea21bSJan Kneschke '-DPACKAGE_NAME=\\"' + package + '\\"', 739e95ea21bSJan Kneschke '-DPACKAGE_VERSION=\\"' + version + '\\"', 740e95ea21bSJan Kneschke '-DLIBRARY_DIR="\\"${libdir}\\""', 741e95ea21bSJan Kneschke ] ) 742e95ea21bSJan Kneschke 74368284bd7SStefan BühlerSConscript('src/SConscript', exports = 'env', variant_dir = 'sconsbuild/build', duplicate = 0) 74468284bd7SStefan BühlerSConscript('tests/SConscript', exports = 'env', variant_dir = 'sconsbuild/tests') 745