xref: /lighttpd1.4/SConstruct (revision cd738d4d)
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