1 sbinddir = join_paths(get_option('prefix'), get_option('sbindir'))
2 moduledir = join_paths(get_option('prefix'), get_option('moduledir'))
7 # '/opt/local/include',
11 '-D_FILE_OFFSET_BITS=64',
12 '-D_LARGEFILE_SOURCE',
18 if target_machine.system() == 'windows'
19 libws2_32 = [ compiler.find_library('ws2_32') ]
26 compiler = meson.get_compiler('c')
27 conf_data = configuration_data()
29 conf_data.set('HAVE_SYS_DEVPOLL_H', compiler.has_header('sys/devpoll.h'))
30 conf_data.set('HAVE_SYS_EPOLL_H', compiler.has_header('sys/epoll.h'))
31 conf_data.set('HAVE_SYS_EVENT_H', compiler.has_header('sys/event.h'))
32 conf_data.set('HAVE_SYS_MMAN_H', compiler.has_header('sys/mman.h'))
33 conf_data.set('HAVE_SYS_POLL_H', compiler.has_header('sys/poll.h'))
34 conf_data.set('HAVE_SYS_PORT_H', compiler.has_header('sys/port.h'))
35 conf_data.set('HAVE_SYS_PRCTL_H', compiler.has_header('sys/prctl.h'))
36 conf_data.set('HAVE_SYS_RESOURCE_H', compiler.has_header('sys/resource.h'))
37 conf_data.set('HAVE_SYS_SENDFILE_H', compiler.has_header('sys/sendfile.h'))
38 conf_data.set('HAVE_SYS_SELECT_H', compiler.has_header('sys/select.h'))
39 conf_data.set('HAVE_SYS_TYPES_H', compiler.has_header('sys/types.h'))
40 conf_data.set('HAVE_SYS_UIO_H', compiler.has_header('sys/uio.h'))
41 conf_data.set('HAVE_SYS_UN_H', compiler.has_header('sys/un.h'))
42 conf_data.set('HAVE_SYS_WAIT_H', compiler.has_header('sys/wait.h'))
43 conf_data.set('HAVE_SYS_TIME_H', compiler.has_header('sys/time.h'))
44 conf_data.set('HAVE_UNISTD_H', compiler.has_header('unistd.h'))
45 conf_data.set('HAVE_PTHREAD_H', compiler.has_header('pthread.h'))
46 conf_data.set('HAVE_GETOPT_H', compiler.has_header('getopt.h'))
47 conf_data.set('HAVE_INTTYPES_H', compiler.has_header('inttypes.h'))
48 conf_data.set('HAVE_POLL_H', compiler.has_header('poll.h'))
49 conf_data.set('HAVE_PWD_H', compiler.has_header('pwd.h'))
50 conf_data.set('HAVE_STDDEF_H', compiler.has_header('stddef.h'))
51 conf_data.set('HAVE_STDINT_H', compiler.has_header('stdint.h'))
52 conf_data.set('HAVE_STRINGS_H', compiler.has_header('strings.h'))
53 conf_data.set('HAVE_SYSLOG_H', compiler.has_header('syslog.h'))
55 # check for fastcgi lib, for the tests only
56 conf_data.set('HAVE_FASTCGI_H', compiler.has_header('fastcgi.h'))
57 if not(conf_data.get('HAVE_FASTCGI_H'))
58 conf_data.set('HAVE_FASTCGI_FASTCGI_H', compiler.has_header('fastcgi/fastcgi.h'))
61 # will be needed for auth
62 conf_data.set('HAVE_CRYPT_H', compiler.has_header('crypt.h'))
63 if conf_data.get('HAVE_CRYPT_H')
64 # check if we need libcrypt for crypt_r / crypt
66 # crypt_r in default libs?
67 if compiler.has_function('crypt_r', args: defs, prefix: '#include <crypt.h>')
69 conf_data.set('HAVE_CRYPT_R', 1)
70 # crypt_r in -lcrypt ?
71 elif compiler.has_function('crypt_r', args: defs + ['-lcrypt'], prefix: '#include <crypt.h>')
72 libcrypt = [ compiler.find_library('crypt') ]
73 conf_data.set('HAVE_CRYPT_R', 1)
74 # crypt in default libs?
75 elif compiler.has_function('crypt', args: defs, prefix: '#include <crypt.h>')
77 conf_data.set('HAVE_CRYPT', 1)
79 elif compiler.has_function('crypt', args: defs + ['-lcrypt'], prefix: '#include <crypt.h>')
80 libcrypt = [ compiler.find_library('crypt') ]
81 conf_data.set('HAVE_CRYPT', 1)
85 conf_data.set('HAVE_SYS_INOTIFY_H', compiler.has_header('sys/inotify.h'))
86 if conf_data.get('HAVE_SYS_INOTIFY_H')
87 conf_data.set('HAVE_INOTIFY_INIT', compiler.has_function('inotify_init', args: defs))
90 conf_data.set('HAVE_SOCKLEN_T', compiler.has_type('socklen_t', args: defs, prefix: '#include <sys/socket.h>'))
92 conf_data.set('HAVE_SYS_RANDOM_H', compiler.has_header('sys/random.h'))
93 if conf_data.get('HAVE_SYS_RANDOM_H')
94 conf_data.set('HAVE_GETENTROPY', compiler.has_function(
97 prefix: '#include <sys/random.h>'
101 conf_data.set('HAVE_LINUX_RANDOM_H', compiler.has_header('linux/random.h'))
102 if conf_data.get('HAVE_LINUX_RANDOM_H')
103 conf_data.set('HAVE_GETRANDOM', compiler.has_function(
106 prefix: '#include <linux/random.h>'
110 conf_data.set('SIZEOF_LONG', compiler.sizeof('long', args: defs))
111 conf_data.set('SIZEOF_OFF_T', compiler.sizeof('off_t', args: defs))
113 conf_data.set('HAVE_ARC4RANDOM_BUF', compiler.has_function('arc4random_buf', args: defs))
114 conf_data.set('HAVE_CHROOT', compiler.has_function('chroot', args: defs))
115 conf_data.set('HAVE_EPOLL_CTL', compiler.has_function('epoll_ctl', args: defs))
116 conf_data.set('HAVE_FORK', compiler.has_function('fork', args: defs))
117 conf_data.set('HAVE_GETLOADAVG', compiler.has_function('getloadavg', args: defs))
118 conf_data.set('HAVE_GETRLIMIT', compiler.has_function('getrlimit', args: defs))
119 conf_data.set('HAVE_GETUID', compiler.has_function('getuid', args: defs))
120 conf_data.set('HAVE_GMTIME_R', compiler.has_function('gmtime_r', args: defs))
121 conf_data.set('HAVE_INET_NTOP', compiler.has_function('inet_ntop', args: defs))
122 conf_data.set('HAVE_JRAND48', compiler.has_function('jrand48', args: defs))
123 conf_data.set('HAVE_KQUEUE', compiler.has_function('kqueue', args: defs))
124 conf_data.set('HAVE_LOCALTIME_R', compiler.has_function('localtime_r', args: defs))
125 conf_data.set('HAVE_LSTAT', compiler.has_function('lstat', args: defs))
126 conf_data.set('HAVE_MADVISE', compiler.has_function('madvise', args: defs))
127 conf_data.set('HAVE_MEMCPY', compiler.has_function('memcpy', args: defs))
128 conf_data.set('HAVE_MEMSET', compiler.has_function('memset', args: defs))
129 conf_data.set('HAVE_MMAP', compiler.has_function('mmap', args: defs))
130 conf_data.set('HAVE_PATHCONF', compiler.has_function('pathconf', args: defs))
131 conf_data.set('HAVE_PIPE2', compiler.has_function('pipe2', args: defs))
132 conf_data.set('HAVE_POLL', compiler.has_function('poll', args: defs))
133 conf_data.set('HAVE_PORT_CREATE', compiler.has_function('port_create', args: defs))
134 conf_data.set('HAVE_PRCTL', compiler.has_function('prctl', args: defs))
135 conf_data.set('HAVE_PREAD', compiler.has_function('pread', args: defs))
136 conf_data.set('HAVE_POSIX_FADVISE', compiler.has_function('posix_fadvise', args: defs))
137 conf_data.set('HAVE_SELECT', compiler.has_function('select', args: defs))
138 conf_data.set('HAVE_SENDFILE', compiler.has_function('sendfile', args: defs))
139 conf_data.set('HAVE_SEND_FILE', compiler.has_function('send_file', args: defs))
140 conf_data.set('HAVE_SENDFILE64', compiler.has_function('sendfile64', args: defs))
141 conf_data.set('HAVE_SENDFILEV', compiler.has_function('sendfilev', args: defs))
142 conf_data.set('HAVE_SIGACTION', compiler.has_function('sigaction', args: defs))
143 conf_data.set('HAVE_SIGNAL', compiler.has_function('signal', args: defs))
144 conf_data.set('HAVE_SIGTIMEDWAIT', compiler.has_function('sigtimedwait', args: defs))
145 conf_data.set('HAVE_SRANDOM', compiler.has_function('srandom', args: defs))
146 conf_data.set('HAVE_STRPTIME', compiler.has_function('strptime', args: defs))
147 conf_data.set('HAVE_SYSLOG', compiler.has_function('syslog', args: defs))
148 conf_data.set('HAVE_WRITEV', compiler.has_function('writev', args: defs))
149 conf_data.set('HAVE_INET_ATON', compiler.has_function('inet_aton', args: defs))
150 conf_data.set('HAVE_ISSETUGID', compiler.has_function('issetugid', args: defs))
151 conf_data.set('HAVE_INET_PTON', compiler.has_function('inet_pton', args: defs))
152 conf_data.set('HAVE_MEMSET_S', compiler.has_function('memset_s', args: defs))
153 conf_data.set('HAVE_EXPLICIT_BZERO', compiler.has_function('explicit_bzero', args: defs))
155 conf_data.set('HAVE_CLOCK_GETTIME', compiler.has_header_symbol('time.h', 'clock_gettime'))
157 if not(conf_data.get('HAVE_CLOCK_GETTIME'))
158 if compiler.has_function('clock_gettime', args: defs + ['-lrt'], prefix: '#include <time.h>')
159 conf_data.set('HAVE_CLOCK_GETTIME', true)
160 clock_lib = [ compiler.find_library('rt') ]
164 conf_data.set('HAVE_IPV6', compiler.compiles('''
165 #include <sys/types.h>
166 #include <sys/socket.h>
167 #include <netinet/in.h>
170 struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;
174 name: 'IPv6 support',
178 conf_data.set('HAVE_WEAK_SYMBOLS', compiler.compiles('''
179 __attribute__((weak)) void __dummy(void *x) { }
185 name: 'weak symbols',
189 conf_data.set('HAVE_STRUCT_TM_GMTOFF', compiler.compiles('''
197 name: 'struct tm gmt offset',
201 conf_data.set('LIGHTTPD_VERSION_ID', 10400)
202 conf_data.set_quoted('PACKAGE_NAME', meson.project_name())
203 conf_data.set_quoted('PACKAGE_VERSION', meson.project_version())
204 conf_data.set_quoted('LIBRARY_DIR', moduledir)
206 conf_data.set('LIGHTTPD_STATIC', get_option('build_static'))
208 if not(get_option('build_static'))
209 if target_machine.system() != 'windows'
210 libdl = [ compiler.find_library('dl') ]
211 if not(compiler.has_function('dlopen', args: defs, dependencies: libdl, prefix: '#include <dlfcn.h>'))
212 error('Couldn\'t find dlfcn.h or dlopen in lib dl')
218 if get_option('with_bzip')
219 libbz2 = [ compiler.find_library('bz2') ]
220 if compiler.has_function('BZ2_bzCompress', args: defs, dependencies: libbz2, prefix: '#include <bzlib.h>')
221 conf_data.set('HAVE_BZLIB_H', true)
222 conf_data.set('HAVE_LIBBZ2', true)
224 error('Couldn\'t find bz2 header / library')
228 if get_option('with_dbi')
229 libdbi = dependency('dbi', required: false)
233 libdbi = [ compiler.find_library('dbi') ]
234 if not(compiler.has_function('dbi_conn_connect', args: defs, dependencies: libdbi, prefix: '#include <dbi/dbi.h>'))
235 error('Couldn\'t find dbi/dbi.h or dbi_conn_connect in lib dbi')
238 conf_data.set('HAVE_DBI', true)
242 if get_option('with_fam')
243 libfam = [ compiler.find_library('fam') ]
244 if not(compiler.has_function('FAMOpen2', args: defs, dependencies: libfam, prefix: '#include <fam.h>'))
245 error('Couldn\'t find fam.h or FAMOpen2 in lib fam')
247 conf_data.set('HAVE_FAM_H', true)
251 if get_option('with_geoip')
252 libgeoip = dependency('geoip', required: false)
254 libgeoip = [ libgeoip ]
256 libgeoip = [ compiler.find_library('GeoIP') ]
257 if not(compiler.has_function('GeoIP_country_name_by_addr', args: defs, dependencies: libgeoip))
258 error('Couldn\'t find GeoIP_country_name_by_addr in lib GeoIP')
264 if get_option('with_gdbm')
265 libgdbm = [ compiler.find_library('gdbm') ]
266 if not(compiler.has_function('gdbm_open', args: defs, dependencies: libgdbm, prefix: '#include <gdbm.h>'))
267 error('Couldn\'t find gdbm.h or gdbm_open in lib gdbm')
269 conf_data.set('HAVE_GDBM_H', true)
270 conf_data.set('HAVE_GDBM', true)
275 if get_option('with_krb5')
276 libkrb5 = dependency('krb5', required: false)
278 libkrb5 = [ libkrb5 ]
280 libkrb5 = [ compiler.find_library('krb5') ]
281 if not(compiler.has_function('krb5_init_context', args: defs, dependencies: libkrb5))
282 error('Couldn\'t find krb5_init_context in lib krb5')
286 libgssapi_krb5 = dependency('krb5-gssapi', required: false)
287 if libgssapi_krb5.found()
288 libgssapi_krb5 = [ libgssapi_krb5 ]
290 libgssapi_krb5 = [ compiler.find_library('gssapi_krb5') ]
293 conf_data.set('HAVE_KRB5', true)
298 if get_option('with_ldap')
299 libldap = [ compiler.find_library('ldap') ]
300 if not(compiler.has_function('ldap_sasl_bind_s',
302 dependencies: libldap,
307 error('Couldn\'t find ldap.h or ldap_bind in lib libldap')
309 conf_data.set('HAVE_LDAP_H', true)
310 conf_data.set('HAVE_LIBLDAP', true)
311 liblber = [ compiler.find_library('lber') ]
312 if not(compiler.has_function('ber_printf', args: defs, dependencies: liblber, prefix: '#include <lber.h>'))
313 error('Couldn\'t find lber.h or ber_printf in lib liblber')
315 conf_data.set('HAVE_LBER_H', true)
316 conf_data.set('HAVE_LIBLBER', true)
320 if get_option('with_pam')
321 libpam = [ compiler.find_library('pam') ]
322 if not(compiler.has_function('pam_start',
324 dependencies: libpam,
326 #include <security/pam_appl.h>
329 error('Couldn\'t find security/pam_appl.h or pam_start in lib libpam')
331 conf_data.set('HAVE_PAM', true)
335 if get_option('with_libev')
336 libev = dependency('ev', required: false)
339 elif compiler.has_header('ev.h') and compiler.has_function('ev_time', args: defs + ['-lev'])
340 libev = [ compiler.find_library('ev') ]
342 error('Couldn\'t find libev header / library')
344 conf_data.set('HAVE_LIBEV', true)
348 if get_option('with_libunwind')
349 libunwind = [ dependency('libunwind') ]
353 if get_option('with_lua')
355 foreach l: ['lua5.3', 'lua-5.3', 'lua5.2', 'lua-5.2', 'lua5.1', 'lua-5.1', 'lua']
357 liblua = dependency(l, required: false)
358 found_lua = liblua.found()
362 error('Couldn\'t find any lua library')
365 conf_data.set('HAVE_LUA_H', true)
369 if get_option('with_memcached')
371 # header: libmemcached/memcached.h
372 # function: memcached (-lmemcached)
373 libmemcached = [ dependency('libmemcached') ]
374 conf_data.set('USE_MEMCACHED', true)
378 if get_option('with_mysql')
379 # manual search: extend include path with 'mysql/'
381 # function: mysql_real_connect (-lmariadb)
382 libmysqlclient = [ dependency('mariadb') ]
383 #-# function: mysql_real_connect (-lmysqlclient)
384 #-libmysqlclient = [ dependency('mysqlclient') ]
385 conf_data.set('HAVE_MYSQL', true)
390 if get_option('with_openssl')
392 # header: openssl/ssl.h
393 # function: SSL_new (-lssl)
394 # function: BIO_f_base64 (-lcrypto)
395 libssl = [ dependency('libssl') ]
396 libcrypto = [ dependency('libcrypto') ]
397 conf_data.set('HAVE_OPENSSL_SSL_H', true)
398 conf_data.set('HAVE_LIBSSL', true)
400 if get_option('with_wolfssl') != 'false'
402 # header: wolfssl/ssl.h
403 # function: wolfSSL_Init (-lwolfssl)
404 p = get_option('with_wolfssl')
408 i = include_directories(p+'/include', p+'/include/wolfssl')
409 libwolfssl_includes_dep = [ declare_dependency(include_directories: i) ]
410 libcrypto = [ compiler.find_library('libwolfssl', dirs: [ p+'/lib', p+'/lib64' ]) ]
411 libcrypto += libwolfssl_includes_dep
412 conf_data.set('HAVE_WOLFSSL_SSL_H', true)
416 if get_option('with_pcre')
419 # function: pcre_exec (-lpcre)
420 libpcre = [ dependency('libpcre') ]
421 conf_data.set('HAVE_PCRE_H', true)
422 conf_data.set('HAVE_LIBPCRE', true)
426 if get_option('with_pgsql')
429 # function: PQsetdbLogin (-lpq)
430 libpq = [ dependency('libpq') ]
431 conf_data.set('HAVE_PGSQL', true)
434 if get_option('with_sasl')
435 libsasl = dependency('sasl2', required: false)
437 libsasl = [ libsasl2 ]
439 libsasl = [ compiler.find_library('sasl2') ]
440 if not(compiler.has_function('sasl_server_init', args: defs, dependencies: libsasl, prefix: '#include <sasl/sasl.h>'))
441 error('Couldn\'t find sasl/sasl.h or sasl_server_init in libsasl2')
444 conf_data.set('HAVE_SASL', true)
447 #if get_option('with_valgrind')
451 if get_option('with_webdav_locks')
452 libuuid = dependency('uuid', required: false)
454 libuuid = [ libuuid ]
455 elif compiler.has_function('uuid_generate', args: defs, prefix: '#include <uuid/uuid.h>')
456 # uuid_generate in libc, everything is fine, no lib needed
459 libuuid = compiler.find_library('uuid')
460 if not(compiler.has_function('uuid_generate',
462 dependencies: libuuid,
463 prefix: '#include <uuid/uuid.h>'
465 error('Couldn\'t find uuid/uuid.h or uuid_generate in lib c and uuid')
468 conf_data.set('HAVE_UUID', true)
469 conf_data.set('HAVE_UUID_UUID_H', true)
474 if get_option('with_webdav_props')
475 libxml2 = dependency('libxml-2.0', required: false)
477 libxml2 = [ libxml2 ]
479 libxml2_includes = []
480 libxml2_includes_dep = []
481 libxml2_found_header = compiler.has_header('libxml/tree.h')
482 foreach i: include_base_paths
483 if not(libxml2_found_header)
484 message('Searching in ' + join_paths(i, 'libxml2'))
485 i = include_directories(join_paths(i, 'libxml2'))
486 if compiler.has_header('libxml/tree.h', include_directories: i)
487 libxml2_found_header = true
488 libxml2_includes = [ i ]
489 libxml2_includes_dep = [ declare_dependency(include_directories: i) ]
493 if not(libxml2_found_header)
494 error('Couldn\'t find libxml/tree.h')
496 libxml2 = [ compiler.find_library('xml2') ]
497 if not(compiler.has_function('xmlParseChunk',
499 dependencies: libxml2,
500 include_directories: libxml2_includes,
502 #include <libxml/tree.h>
505 error('Couldn\'t find xmlParseChunk in lib xml2')
507 # has_function doesn't like "internal dependencies"
508 libxml2 += libxml2_includes_dep
510 conf_data.set('HAVE_LIBXML_H', true)
512 libsqlite3 = dependency('sqlite31', required: false)
513 if libsqlite3.found()
514 libsqlite3 = [ libsqlite3 ]
516 libsqlite3 = [ compiler.find_library('sqlite3') ]
517 if not(compiler.has_function('sqlite3_reset',
519 dependencies: libsqlite3,
524 error('Couldn\'t find sqlite3.h or sqlite3_reset in lib sqlite3')
527 conf_data.set('HAVE_SQLITE3_H', true)
531 if get_option('with_xattr')
532 libattr = [ compiler.find_library('attr') ]
533 if not(compiler.has_function('attr_get',
535 dependencies: libattr,
537 #include <sys/types.h>
538 #include <attr/attributes.h>
541 error('Couldn\'t find attr/attributes.h or attr_get in lib attr')
543 conf_data.set('HAVE_ATTR_ATTRIBUTES_H', true)
544 conf_data.set('HAVE_XATTR', true)
548 if get_option('with_zlib')
549 libz = dependency('zlib', required: false)
553 # windows alternative names? 'zlib', 'zdll'
554 libz = [ compiler.find_library('z') ]
555 if not(compiler.has_function('deflate', args: defs, dependencies: libz, prefix: '#include <zlib.h>'))
556 error('Couldn\'t find z header / library')
559 conf_data.set('HAVE_ZLIB_H', true)
560 conf_data.set('HAVE_LIBZ', true)
565 configuration : conf_data,
576 'connections-glue.c',
583 'fdevent_freebsd_kqueue.c',
585 'fdevent_linux_sysepoll.c',
588 'fdevent_solaris_devpoll.c',
589 'fdevent_solaris_port.c',
597 'http-header-glue.c',
612 if target_machine.system() == 'windows'
613 common_src += [ 'xgetopt.c' ]
625 lemon = executable('lemon',
629 # generator doesn't handle additional "input dependencies" like lempar.c
630 # => use custom_target
631 configparser = custom_target('configparser',
632 input: ['configparser.y', 'lempar.c'],
633 output: ['configparser.c', 'configparser.h'],
634 command: [lemon, '-q', 'o=@OUTDIR@', '@INPUT0@', '@INPUT1@'],
636 ssi_exprparser = custom_target('mod_ssi_exprparser',
637 input: ['mod_ssi_exprparser.y', 'lempar.c'],
638 output: ['mod_ssi_exprparser.c', 'mod_ssi_exprparser.h'],
639 command: [lemon, '-q', 'o=@OUTDIR@', '@INPUT0@', '@INPUT1@'],
642 common_cflags = defs + [
646 if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang'
654 if get_option('build_extra_warnings')
655 common_cflags += get_option('warn_cflags').split()
659 common_flags = [ declare_dependency(
660 compile_args: common_cflags,
661 # tests also use common_flags, and need this
662 include_directories: include_directories('.'),
666 lighttpd_angel_flags = []
667 if target_machine.system() == 'windows'
668 lighttpd_flags += [ declare_dependency(
670 '-DLI_DECLARE_EXPORTS',
673 if compiler.get_id() == 'gcc'
674 libmsvcr70 = [ compiler.find_library('msvcr70') ]
675 lighttpd_flags += libmsvcr70 + [ declare_dependency(
677 '-Wl,-subsystem,console',
680 lighttpd_angel_flags += libmsvcr70 + [ declare_dependency(
682 '-Wl,-subsystem,console',
688 if compiler.get_id() == 'gcc' or target_machine.system() != 'darwin'
689 lighttpd_flags += [ declare_dependency(
691 '-Wl,-export-dynamic',
696 executable('lighttpd-angel',
697 sources: 'lighttpd-angel.c',
698 dependencies: common_flags + lighttpd_angel_flags,
699 c_args: ['-DSBIN_DIR="' + sbinddir + '"'],
701 install_dir: sbinddir,
704 executable('lighttpd', configparser,
705 sources: common_src + main_src,
707 dependencies: [ common_flags, lighttpd_flags
718 install_dir: sbinddir,
721 test('test_array', executable('test_array',
722 sources: ['t/test_array.c', 'array.c', 'data_array.c', 'data_integer.c', 'data_string.c', 'buffer.c'],
723 dependencies: common_flags + libunwind,
724 build_by_default: false,
727 test('test_buffer', executable('test_buffer',
728 sources: ['t/test_buffer.c', 'buffer.c'],
729 dependencies: common_flags + libunwind,
730 build_by_default: false,
733 test('test_burl', executable('test_burl',
734 sources: ['t/test_burl.c', 'burl.c', 'buffer.c', 'base64.c'],
735 dependencies: common_flags + libunwind,
736 build_by_default: false,
739 test('test_base64', executable('test_base64',
740 sources: ['t/test_base64.c', 'buffer.c', 'base64.c'],
741 dependencies: common_flags + libunwind,
742 build_by_default: false,
745 test('test_configfile', executable('test_configfile',
747 't/test_configfile.c',
759 dependencies: common_flags + libpcre + libunwind,
760 build_by_default: false,
763 test('test_keyvalue', executable('test_keyvalue',
774 dependencies: common_flags + libpcre + libunwind,
775 build_by_default: false,
778 test('test_mod_access', executable('test_mod_access',
780 't/test_mod_access.c',
793 dependencies: common_flags + libpcre + libunwind,
794 build_by_default: false,
797 test('test_mod_evhost', executable('test_mod_evhost',
799 't/test_mod_evhost.c',
812 dependencies: common_flags + libpcre + libunwind,
813 build_by_default: false,
816 test('test_mod_simple_vhost', executable('test_mod_simple_vhost',
818 't/test_mod_simple_vhost.c',
831 dependencies: common_flags + libpcre + libunwind,
832 build_by_default: false,
835 test('test_request', executable('test_request',
848 dependencies: common_flags + libunwind,
849 build_by_default: false,
853 [ 'mod_access', [ 'mod_access.c' ] ],
854 [ 'mod_accesslog', [ 'mod_accesslog.c' ] ],
855 [ 'mod_alias', [ 'mod_alias.c' ] ],
856 [ 'mod_auth', [ 'mod_auth.c' ], [ libcrypto ] ],
857 [ 'mod_authn_file', [ 'mod_authn_file.c' ], [ libcrypt, libcrypto ] ],
858 [ 'mod_compress', [ 'mod_compress.c' ], libbz2 + libz ],
859 [ 'mod_deflate', [ 'mod_deflate.c' ], libbz2 + libz ],
860 [ 'mod_dirlisting', [ 'mod_dirlisting.c' ], libpcre ],
861 [ 'mod_evasive', [ 'mod_evasive.c' ] ],
862 [ 'mod_evhost', [ 'mod_evhost.c' ] ],
863 [ 'mod_expire', [ 'mod_expire.c' ] ],
864 [ 'mod_extforward', [ 'mod_extforward.c' ] ],
865 [ 'mod_fastcgi', [ 'mod_fastcgi.c' ], libws2_32 ],
866 [ 'mod_flv_streaming', [ 'mod_flv_streaming.c' ] ],
867 [ 'mod_indexfile', [ 'mod_indexfile.c' ] ],
868 [ 'mod_proxy', [ 'mod_proxy.c' ], libws2_32 ],
869 [ 'mod_redirect', [ 'mod_redirect.c' ], libpcre ],
870 [ 'mod_rewrite', [ 'mod_rewrite.c' ], libpcre ],
871 [ 'mod_rrdtool', [ 'mod_rrdtool.c' ] ],
872 [ 'mod_scgi', [ 'mod_scgi.c' ], libws2_32 ],
873 [ 'mod_secdownload', [ 'mod_secdownload.c' ], libcrypto ],
874 [ 'mod_setenv', [ 'mod_setenv.c' ] ],
875 [ 'mod_simple_vhost', [ 'mod_simple_vhost.c' ] ],
876 [ 'mod_sockproxy', [ 'mod_sockproxy.c' ] ],
877 [ 'mod_ssi', [ ssi_exprparser, 'mod_ssi_expr.c', 'mod_ssi.c' ], libws2_32 ],
878 [ 'mod_staticfile', [ 'mod_staticfile.c' ] ],
879 [ 'mod_status', [ 'mod_status.c' ] ],
880 [ 'mod_uploadprogress', [ 'mod_uploadprogress.c' ] ],
881 [ 'mod_userdir', [ 'mod_userdir.c' ] ],
882 [ 'mod_usertrack', [ 'mod_usertrack.c' ] ],
883 [ 'mod_vhostdb', [ 'mod_vhostdb.c' ] ],
884 [ 'mod_webdav', [ 'mod_webdav.c' ], libsqlite3 + libuuid + libxml2 ],
885 [ 'mod_wstunnel', [ 'mod_wstunnel.c' ], libcrypto ],
888 if target_machine.system() != 'windows'
890 [ 'mod_cgi', [ 'mod_cgi.c' ] ],
894 if get_option('with_pcre') and (get_option('with_memcached') or get_option('with_gdbm'))
896 [ 'mod_trigger_b4_dl', [ 'mod_trigger_b4_dl.c' ], libpcre + libmemcached + libgdbm ],
900 if get_option('with_lua')
902 [ 'mod_cml', [ 'mod_cml.c', 'mod_cml_lua.c', 'mod_cml_funcs.c' ], liblua + libmemcached ],
903 [ 'mod_magnet', [ 'mod_magnet.c', 'mod_magnet_cache.c' ], liblua ],
907 if get_option('with_geoip')
909 [ 'mod_geoip', [ 'mod_geoip.c' ], libgeoip ],
913 if get_option('with_mysql')
915 [ 'mod_authn_mysql', [ 'mod_authn_mysql.c' ], libcrypt + libmysqlclient ],
916 [ 'mod_mysql_vhost', [ 'mod_mysql_vhost.c' ], libmysqlclient ],
917 [ 'mod_vhostdb_mysql', [ 'mod_vhostdb_mysql.c' ], libmysqlclient ],
921 if get_option('with_pgsql')
923 [ 'mod_vhostdb_pgsql', [ 'mod_vhostdb_pgsql.c' ], libpq ],
927 if get_option('with_dbi')
929 [ 'mod_vhostdb_dbi', [ 'mod_vhostdb_dbi.c' ], libdbi ],
933 if get_option('with_krb5')
935 [ 'mod_authn_gssapi', [ 'mod_authn_gssapi.c' ], libkrb5 + libgssapi_krb5 ],
939 if get_option('with_ldap')
941 [ 'mod_authn_ldap', [ 'mod_authn_ldap.c' ], libldap + liblber ],
942 [ 'mod_vhostdb_ldap', [ 'mod_vhostdb_ldap.c' ], libldap + liblber ],
946 if get_option('with_openssl')
948 [ 'mod_openssl', [ 'mod_openssl.c' ], libssl + libcrypto ],
952 if get_option('with_wolfssl') != 'false'
954 [ 'mod_openssl', [ 'mod_openssl.c' ], libcrypto ],
958 if get_option('with_pam')
960 [ 'mod_authn_pam', [ 'mod_authn_pam.c' ], libpam ],
964 if get_option('with_sasl')
966 [ 'mod_authn_sasl', [ 'mod_authn_sasl.c' ], libsasl ],
971 mod_name = mod.get(0)
972 mod_sources = mod.get(1)
973 mod_deps = mod.length() > 2 ? mod.get(2) : []
974 shared_module(mod_name,
975 sources: mod_sources,
976 dependencies: [ common_flags, mod_deps ],
979 install_dir: moduledir,