lighttpd 1.4.x
https://www.lighttpd.net/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
846 lines
21 KiB
846 lines
21 KiB
sbinddir = join_paths(get_option('prefix'), get_option('sbindir')) |
|
moduledir = join_paths(get_option('prefix'), get_option('moduledir')) |
|
# doesn't do much so far :( |
|
link_static = get_option('link_static') |
|
|
|
include_base_paths = [ |
|
'/usr/include', |
|
'/usr/local/include', |
|
# '/opt/local/include', |
|
] |
|
|
|
defs = [ |
|
'-D_FILE_OFFSET_BITS=64', |
|
'-D_LARGEFILE_SOURCE', |
|
'-D_LARGE_FILES', |
|
'-D_GNU_SOURCE', |
|
] |
|
|
|
libws2_32 = [] |
|
if target_machine.system() == 'windows' |
|
libws2_32 = [ compiler.find_library('ws2_32') ] |
|
defs += [ |
|
'-DNVALGRIND', |
|
] |
|
endif |
|
|
|
|
|
compiler = meson.get_compiler('c') |
|
conf_data = configuration_data() |
|
|
|
check_headers = [ |
|
'getopt.h', |
|
'poll.h', |
|
'port.h', |
|
'pwd.h', |
|
'stdlib.h', |
|
'string.h', |
|
'strings.h', |
|
'sys/devpoll.h', |
|
'sys/epoll.h', |
|
'sys/event.h', |
|
'sys/filio.h', |
|
'sys/mman.h', |
|
'sys/poll.h', |
|
'sys/prctl.h', |
|
'sys/resource.h', |
|
'sys/select.h', |
|
'sys/sendfile.h', |
|
'sys/time.h', |
|
'sys/uio.h', |
|
'sys/un.h', |
|
'syslog.h', |
|
] |
|
|
|
# headers checked in special autoconf macros |
|
check_headers += [ |
|
'inttypes.h', |
|
'stdint.h', |
|
'sys/wait.h', |
|
] |
|
|
|
foreach h: check_headers |
|
conf_data.set('HAVE_' + h.to_upper().underscorify(), compiler.has_header(h)) |
|
endforeach |
|
|
|
# will be needed for auth |
|
conf_data.set('HAVE_CRYPT_H', compiler.has_header('crypt.h')) |
|
if conf_data.get('HAVE_CRYPT_H') |
|
# check if we need libcrypt for crypt_r / crypt |
|
libcrypt = compiler.find_library('crypt', required: false) |
|
|
|
# crypt_r in default libs? |
|
if compiler.has_function('crypt_r', args: defs, prefix: '#include <crypt.h>') |
|
libcrypt = [] |
|
conf_data.set('HAVE_CRYPT_R', 1) |
|
# crypt_r in -lcrypt ? |
|
elif libcrypt.found() and compiler.has_function('crypt_r', args: defs, dependencies: libcrypt, prefix: '#include <crypt.h>') |
|
libcrypt = [ libcrypt ] |
|
conf_data.set('HAVE_CRYPT_R', 1) |
|
# crypt in default libs? |
|
elif compiler.has_function('crypt', args: defs, prefix: '#include <crypt.h>') |
|
libcrypt = [] |
|
conf_data.set('HAVE_CRYPT', 1) |
|
# crypt in -lcrypt ? |
|
elif libcrypt.found() and compiler.has_function('crypt', args: defs, dependencies: libcrypt, prefix: '#include <crypt.h>') |
|
libcrypt = [ libcrypt ] |
|
conf_data.set('HAVE_CRYPT', 1) |
|
endif |
|
endif |
|
|
|
conf_data.set('HAVE_SOCKLEN_T', compiler.has_type('socklen_t', |
|
args: defs, |
|
prefix: ''' |
|
#include <sys/types.h> |
|
#include <sys/socket.h> |
|
''' |
|
)) |
|
|
|
if compiler.has_header('sys/random.h') |
|
conf_data.set('HAVE_GETENTROPY', compiler.has_function( |
|
'getentropy', |
|
args: defs, |
|
prefix: '#include <sys/random.h>' |
|
)) |
|
endif |
|
|
|
conf_data.set('HAVE_LINUX_RANDOM_H', compiler.has_header('linux/random.h')) |
|
if conf_data.get('HAVE_LINUX_RANDOM_H') |
|
conf_data.set('HAVE_GETRANDOM', compiler.has_function( |
|
'getrandom', |
|
args: defs, |
|
prefix: '#include <linux/random.h>' |
|
)) |
|
endif |
|
|
|
check_funcs = [ |
|
'arc4random_buf', |
|
'chroot', |
|
'clock_gettime', |
|
'epoll_ctl', |
|
'explicit_bzero', |
|
'fork', |
|
'getloadavg', |
|
'getrlimit', |
|
'getuid', |
|
'gmtime_r', |
|
'inet_pton', |
|
'issetugid', |
|
'jrand48', |
|
'kqueue', |
|
'localtime_r', |
|
'lstat', |
|
'madvise', |
|
'memset_s', |
|
'mmap', |
|
'pathconf', |
|
'pipe2', |
|
'poll', |
|
'port_create', |
|
'select', |
|
'send_file', |
|
'sendfile', |
|
'sendfile64', |
|
'sigaction', |
|
'signal', |
|
'srandom', |
|
'writev', |
|
] |
|
|
|
foreach f: check_funcs |
|
conf_data.set('HAVE_' + f.to_upper(), compiler.has_function(f, args: defs)) |
|
endforeach |
|
|
|
# check whether clock_gettime needs -lrt |
|
clock_lib = [] |
|
if not(conf_data.get('HAVE_CLOCK_GETTIME')) |
|
if compiler.has_function('clock_gettime', args: defs + ['-lrt'], prefix: '#include <time.h>') |
|
conf_data.set('HAVE_CLOCK_GETTIME', true) |
|
clock_lib = [ compiler.find_library('rt') ] |
|
endif |
|
endif |
|
|
|
conf_data.set('HAVE_IPV6', compiler.compiles(''' |
|
#include <sys/types.h> |
|
#include <sys/socket.h> |
|
#include <netinet/in.h> |
|
|
|
int main() { |
|
struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; |
|
return 0; |
|
} |
|
''', |
|
name: 'IPv6 support', |
|
args: defs |
|
)) |
|
|
|
conf_data.set('HAVE_WEAK_SYMBOLS', compiler.compiles(''' |
|
__attribute__((weak)) void __dummy(void *x) { } |
|
int main() { |
|
void *x; |
|
__dummy(x); |
|
} |
|
''', |
|
name: 'weak symbols', |
|
args: defs |
|
)) |
|
|
|
conf_data.set('HAVE_STRUCT_TM_TM_GMTOFF', compiler.compiles(''' |
|
#include <time.h> |
|
int main(void) { |
|
struct tm t; |
|
t.tm_gmtoff = 0; |
|
return 0; |
|
} |
|
''', |
|
name: 'struct tm gmt offset', |
|
args: defs |
|
)) |
|
|
|
conf_data.set('LIGHTTPD_VERSION_ID', 10400) |
|
conf_data.set_quoted('PACKAGE_NAME', meson.project_name()) |
|
conf_data.set_quoted('PACKAGE_VERSION', meson.project_version()) |
|
conf_data.set_quoted('LIBRARY_DIR', moduledir) |
|
|
|
conf_data.set('LIGHTTPD_STATIC', get_option('build_static')) |
|
libdl = [] |
|
if not(get_option('build_static')) |
|
if target_machine.system() != 'windows' |
|
libdl = [ compiler.find_library('dl') ] |
|
if not(compiler.has_function('dlopen', args: defs, dependencies: libdl, prefix: '#include <dlfcn.h>')) |
|
error('Couldn\'t find dlfcn.h or dlopen in lib dl') |
|
endif |
|
endif |
|
endif |
|
|
|
libbz2 = [] |
|
if get_option('with_bzip') |
|
libbz2 = [ compiler.find_library('bz2') ] |
|
if compiler.has_function('BZ2_bzCompress', args: defs, dependencies: libbz2, prefix: '#include <bzlib.h>') |
|
conf_data.set('WITH_BZIP', true) |
|
else |
|
error('Couldn\'t find bz2 header / library') |
|
endif |
|
endif |
|
|
|
if get_option('with_dbi') |
|
libdbi = dependency('dbi', required: false, static: link_static) |
|
if libdbi.found() |
|
libdbi = [ libdbi ] |
|
else |
|
libdbi = [ compiler.find_library('dbi') ] |
|
if not(compiler.has_function('dbi_conn_connect', args: defs, dependencies: libdbi, prefix: '#include <dbi/dbi.h>')) |
|
error('Couldn\'t find dbi/dbi.h or dbi_conn_connect in lib dbi') |
|
endif |
|
endif |
|
conf_data.set('WITH_DBI', true) |
|
endif |
|
|
|
libfam = [] |
|
if get_option('with_fam') |
|
libfam = [ compiler.find_library('fam') ] |
|
if not(compiler.has_function('FAMOpen2', args: defs, dependencies: libfam, prefix: '#include <fam.h>')) |
|
error('Couldn\'t find fam.h or FAMOpen2 in lib fam') |
|
endif |
|
conf_data.set('HAVE_FAMNOEXISTS', compiler.has_function('FAMNoExists', args: defs, dependencies: libfam, prefix: '#include <fam.h>')) |
|
conf_data.set('WITH_FAM', true) |
|
endif |
|
|
|
libgeoip = [] |
|
if get_option('with_geoip') |
|
libgeoip = dependency('geoip', required: false, static: link_static) |
|
if libgeoip.found() |
|
libgeoip = [ libgeoip ] |
|
else |
|
libgeoip = [ compiler.find_library('GeoIP') ] |
|
if not(compiler.has_function('GeoIP_country_name_by_addr', args: defs, dependencies: libgeoip)) |
|
error('Couldn\'t find GeoIP_country_name_by_addr in lib GeoIP') |
|
endif |
|
endif |
|
conf_data.set('WITH_GEOIP', true) |
|
endif |
|
|
|
libgdbm = [] |
|
if get_option('with_gdbm') |
|
libgdbm = [ compiler.find_library('gdbm') ] |
|
if not(compiler.has_function('gdbm_open', args: defs, dependencies: libgdbm, prefix: '#include <gdbm.h>')) |
|
error('Couldn\'t find gdbm.h or gdbm_open in lib gdbm') |
|
endif |
|
conf_data.set('WITH_GDBM', true) |
|
endif |
|
|
|
libkrb5 = [] |
|
libgssapi_krb5 = [] |
|
if get_option('with_krb5') |
|
libkrb5 = dependency('krb5', required: false, static: link_static) |
|
if libkrb5.found() |
|
libkrb5 = [ libkrb5 ] |
|
else |
|
libkrb5 = [ compiler.find_library('krb5') ] |
|
if not(compiler.has_function('krb5_init_context', args: defs, dependencies: libkrb5)) |
|
error('Couldn\'t find krb5_init_context in lib krb5') |
|
endif |
|
endif |
|
|
|
libgssapi_krb5 = dependency('krb5-gssapi', required: false, static: link_static) |
|
if libgssapi_krb5.found() |
|
libgssapi_krb5 = [ libgssapi_krb5 ] |
|
else |
|
libgssapi_krb5 = [ compiler.find_library('gssapi_krb5') ] |
|
endif |
|
|
|
conf_data.set('WITH_KRB5', true) |
|
endif |
|
|
|
libldap = [] |
|
liblber = [] |
|
if get_option('with_ldap') |
|
libldap = [ compiler.find_library('ldap') ] |
|
if not(compiler.has_function('ldap_bind', |
|
args: defs, |
|
dependencies: libldap, |
|
prefix: ''' |
|
/* ldap_bind is part of the deprecated api */ |
|
#define LDAP_DEPRECATED 1 |
|
#include <ldap.h> |
|
''' |
|
)) |
|
error('Couldn\'t find ldap.h or ldap_bind in lib libldap') |
|
endif |
|
liblber = [ compiler.find_library('lber') ] |
|
if not(compiler.has_function('ber_printf', args: defs, dependencies: liblber, prefix: '#include <lber.h>')) |
|
error('Couldn\'t find lber.h or ber_printf in lib liblber') |
|
endif |
|
conf_data.set('WITH_LDAP', true) |
|
endif |
|
|
|
libev = [] |
|
if get_option('with_libev') |
|
libev = dependency('ev', required: false, static: link_static) |
|
if libev.found() |
|
libev = [ libev ] |
|
elif compiler.has_header('ev.h') and compiler.has_function('ev_time', args: defs + ['-lev']) |
|
libev = [ compiler.find_library('ev') ] |
|
else |
|
error('Couldn\'t find libev header / library') |
|
endif |
|
conf_data.set('WITH_LIBEV', true) |
|
endif |
|
|
|
libunwind = [] |
|
if get_option('with_libunwind') |
|
libunwind = [ dependency('libunwind', static: link_static) ] |
|
conf_data.set('WITH_LIBUNWIND', true) |
|
endif |
|
|
|
liblua = [] |
|
if get_option('with_lua') |
|
found_lua = false |
|
foreach l: ['lua5.3', 'lua-5.3', 'lua5.2', 'lua-5.2', 'lua5.1', 'lua-5.1', 'lua'] |
|
if not(found_lua) |
|
liblua = dependency(l, required: false, static: link_static) |
|
found_lua = liblua.found() |
|
endif |
|
endforeach |
|
if not(found_lua) |
|
error('Couldn\'t find any lua library') |
|
endif |
|
liblua = [ liblua ] |
|
conf_data.set('WITH_LUA', true) |
|
endif |
|
|
|
libmemcached = [] |
|
if get_option('with_memcached') |
|
# manual search: |
|
# header: libmemcached/memcached.h |
|
# function: memcached (-lmemcached) |
|
libmemcached = [ dependency('libmemcached', static: link_static) ] |
|
conf_data.set('WITH_MEMCACHED', true) |
|
endif |
|
|
|
libmysqlclient = [] |
|
if get_option('with_mysql') |
|
# manual search: extend include path with 'mysql/' |
|
# header: mysql.h |
|
# function: mysql_real_connect (-lmysqlclient) |
|
libmysqlclient = [ dependency('mysqlclient', static: link_static) ] |
|
conf_data.set('WITH_MYSQL', true) |
|
endif |
|
|
|
libssl = [] |
|
libcrypto = [] |
|
if get_option('with_openssl') |
|
# manual search: |
|
# header: openssl/ssl.h |
|
# function: SSL_new (-lssl) |
|
# function: BIO_f_base64 (-lcrypto) |
|
libssl = [ dependency('libssl', static: link_static) ] |
|
libcrypto = [ dependency('libcrypto', static: link_static) ] |
|
conf_data.set('WITH_OPENSSL', true) |
|
endif |
|
|
|
libpcre = [] |
|
if get_option('with_pcre') |
|
# manual search: |
|
# header: pcre.h |
|
# function: pcre_exec (-lpcre) |
|
libpcre = [ dependency('libpcre', static: link_static) ] |
|
conf_data.set('WITH_PCRE', true) |
|
endif |
|
|
|
libpq = [] |
|
if get_option('with_pgsql') |
|
# manual search: |
|
# header: libpq-fe.h |
|
# function: PQsetdbLogin (-lpq) |
|
libpq = [ dependency('libpq', static: link_static) ] |
|
conf_data.set('WITH_PGSQL', true) |
|
endif |
|
|
|
#if get_option('with_valgrind') |
|
#endif |
|
|
|
libuuid = [] |
|
if get_option('with_webdav_locks') |
|
if not(get_option('with_webdav_props')) |
|
error('webdav locks requires webdav props') |
|
endif |
|
|
|
libuuid = dependency('uuid', required: false, static: link_static) |
|
if libuuid.found() |
|
libuuid = [ libuuid ] |
|
elif compiler.has_function('uuid_generate', args: defs, prefix: '#include <uuid/uuid.h>') |
|
# uuid_generate in libc, everything is fine, no lib needed |
|
libuuid = [] |
|
else |
|
libuuid = compiler.find_library('uuid') |
|
if not(compiler.has_function('uuid_generate', |
|
args: defs, |
|
dependencies: libuuid, |
|
prefix: '#include <uuid/uuid.h>' |
|
)) |
|
error('Couldn\'t find uuid/uuid.h or uuid_generate in lib c and uuid') |
|
endif |
|
endif |
|
conf_data.set('WITH_UUID', true) |
|
endif |
|
|
|
libxml2 = [] |
|
libsqlite3 = [] |
|
if get_option('with_webdav_props') |
|
libxml2 = dependency('libxml-2.0', required: false, static: link_static) |
|
if libxml2.found() |
|
libxml2 = [ libxml2 ] |
|
else |
|
libxml2_includes = [] |
|
libxml2_includes_dep = [] |
|
libxml2_found_header = compiler.has_header('libxml/tree.h') |
|
foreach i: include_base_paths |
|
if not(libxml2_found_header) |
|
message('Searching in ' + join_paths(i, 'libxml2')) |
|
i = include_directories(join_paths(i, 'libxml2')) |
|
if compiler.has_header('libxml/tree.h', include_directories: i) |
|
libxml2_found_header = true |
|
libxml2_includes = [ i ] |
|
libxml2_includes_dep = [ declare_dependency(include_directories: i) ] |
|
endif |
|
endif |
|
endforeach |
|
if not(libxml2_found_header) |
|
error('Couldn\'t find libxml/tree.h') |
|
endif |
|
libxml2 = [ compiler.find_library('xml2') ] |
|
if not(compiler.has_function('xmlParseChunk', |
|
args: defs, |
|
dependencies: libxml2, |
|
include_directories: libxml2_includes, |
|
prefix: ''' |
|
#include <libxml/tree.h> |
|
''' |
|
)) |
|
error('Couldn\'t find xmlParseChunk in lib xml2') |
|
endif |
|
# has_function doesn't like "internal dependencies" |
|
libxml2 += libxml2_includes_dep |
|
endif |
|
conf_data.set('WITH_XML', true) |
|
|
|
libsqlite3 = dependency('sqlite31', required: false, static: link_static) |
|
if libsqlite3.found() |
|
libsqlite3 = [ libsqlite3 ] |
|
else |
|
libsqlite3 = [ compiler.find_library('sqlite3') ] |
|
if not(compiler.has_function('sqlite3_reset', |
|
args: defs, |
|
dependencies: libsqlite3, |
|
prefix: ''' |
|
#include <sqlite3.h> |
|
''' |
|
)) |
|
error('Couldn\'t find sqlite3.h or sqlite3_reset in lib sqlite3') |
|
endif |
|
endif |
|
conf_data.set('WITH_SQLITE3', true) |
|
endif |
|
|
|
libattr = [] |
|
if get_option('with_xattr') |
|
libattr = compiler.find_library('attr') |
|
if libattr.found() |
|
libattr = [ libattr ] |
|
if not(compiler.has_function('attr_get', |
|
args: defs, |
|
dependencies: libattr, |
|
prefix: ''' |
|
#include <sys/types.h> |
|
#include <attr/attributes.h> |
|
''' |
|
)) |
|
error('Couldn\'t find attr/attributes.h or attr_get in lib attr') |
|
endif |
|
conf_data.set('HAVE_LIBATTR', true) |
|
elif compiler.has_function('extattr_get_file', args: defs, prefix: '#include <sys/extattr.h>') |
|
# BSD extended attributes, no lib needed |
|
libattr = [] |
|
conf_data.set('HAVE_EXTATTR', true) |
|
endif |
|
conf_data.set('WITH_XATTR', true) |
|
endif |
|
|
|
libz = [] |
|
if get_option('with_zlib') |
|
libz = dependency('zlib', required: false, static: link_static) |
|
if libz.found() |
|
libz = [ libz ] |
|
else |
|
# windows alternative names? 'zlib', 'zdll' |
|
libz = [ compiler.find_library('z') ] |
|
if not(compiler.has_function('deflate', args: defs, dependencies: libz, prefix: '#include <zlib.h>')) |
|
error('Couldn\'t find z header / library') |
|
endif |
|
endif |
|
conf_data.set('WITH_ZLIB', true) |
|
endif |
|
|
|
configure_file( |
|
output : 'config.h', |
|
configuration : conf_data, |
|
) |
|
|
|
common_src = [ |
|
'algo_sha1.c', |
|
'array.c', |
|
'base64.c', |
|
'buffer.c', |
|
'chunk.c', |
|
'configfile-glue.c', |
|
'connections-glue.c', |
|
'crc32.c', |
|
'data_array.c', |
|
'data_config.c', |
|
'data_integer.c', |
|
'data_string.c', |
|
'etag.c', |
|
'fdevent_freebsd_kqueue.c', |
|
'fdevent_libev.c', |
|
'fdevent_linux_sysepoll.c', |
|
'fdevent_poll.c', |
|
'fdevent_select.c', |
|
'fdevent_solaris_devpoll.c', |
|
'fdevent_solaris_port.c', |
|
'fdevent.c', |
|
'gw_backend.c', |
|
'http_auth.c', |
|
'http_chunk.c', |
|
'http_vhostdb.c', |
|
'http-header-glue.c', |
|
'inet_ntop_cache.c', |
|
'joblist.c', |
|
'keyvalue.c', |
|
'log.c', |
|
'md5.c', |
|
'plugin.c', |
|
'rand.c', |
|
'safe_memclear.c', |
|
'splaytree.c', |
|
'stat_cache.c', |
|
'status_counter.c', |
|
'stream.c', |
|
'vector.c', |
|
] |
|
if target_machine.system() == 'windows' |
|
common_src += [ 'xgetopt.c' ] |
|
endif |
|
main_src = [ |
|
'configfile.c', |
|
'connections.c', |
|
'network_darwin_sendfile.c', |
|
'network_freebsd_sendfile.c', |
|
'network_linux_sendfile.c', |
|
'network_solaris_sendfilev.c', |
|
'network_write_mmap.c', |
|
'network_write_no_mmap.c', |
|
'network_write.c', |
|
'network_writev.c', |
|
'network.c', |
|
'proc_open.c', |
|
'request.c', |
|
'response.c', |
|
'server.c', |
|
] |
|
|
|
lemon = executable('lemon', |
|
sources: 'lemon.c', |
|
native: true, |
|
) |
|
# generator doesn't handle additional "input dependencies" like lempar.c |
|
# => use custom_target |
|
configparser = custom_target('configparser', |
|
input: ['configparser.y', 'lempar.c'], |
|
output: ['configparser.c', 'configparser.h'], |
|
command: [lemon, '-q', 'o=@OUTDIR@', '@INPUT0@', '@INPUT1@'], |
|
) |
|
ssi_exprparser = custom_target('mod_ssi_exprparser', |
|
input: ['mod_ssi_exprparser.y', 'lempar.c'], |
|
output: ['mod_ssi_exprparser.c', 'mod_ssi_exprparser.h'], |
|
command: [lemon, '-q', 'o=@OUTDIR@', '@INPUT0@', '@INPUT1@'], |
|
) |
|
|
|
common_cflags = defs + [ |
|
'-DHAVE_CONFIG_H', |
|
] |
|
|
|
if compiler.get_id() == 'gcc' or compiler.get_id() == 'clang' |
|
common_cflags += [ |
|
'-Wall', |
|
'-g', |
|
'-Wshadow', |
|
'-W', |
|
'-pedantic', |
|
] |
|
if get_option('build_extra_warnings') |
|
common_cflags += get_option('warn_cflags').split() |
|
endif |
|
endif |
|
|
|
common_flags = [ declare_dependency( |
|
compile_args: common_cflags, |
|
# tests also use common_flags, and need this |
|
include_directories: include_directories('.'), |
|
) ] |
|
lighttpd_flags = [] |
|
lighttpd_angel_flags = [] |
|
|
|
test('test_buffer', executable('test_buffer', |
|
sources: ['test_buffer.c', 'buffer.c'], |
|
dependencies: common_flags + libunwind, |
|
build_by_default: false, |
|
)) |
|
|
|
test('test_base64', executable('test_base64', |
|
sources: ['test_base64.c', 'buffer.c', 'base64.c'], |
|
dependencies: common_flags + libunwind, |
|
build_by_default: false, |
|
)) |
|
|
|
test('test_configfile', executable('test_configfile', |
|
sources: [ |
|
'test_configfile.c', |
|
'buffer.c', |
|
'array.c', |
|
'data_string.c', |
|
'keyvalue.c', |
|
'vector.c', |
|
'log.c', |
|
], |
|
dependencies: common_flags + libpcre + libunwind, |
|
build_by_default: false, |
|
)) |
|
|
|
modules = [ |
|
[ 'mod_access', [ 'mod_access.c' ] ], |
|
[ 'mod_accesslog', [ 'mod_accesslog.c' ] ], |
|
[ 'mod_alias', [ 'mod_alias.c' ] ], |
|
[ 'mod_auth', [ 'mod_auth.c' ] ], |
|
[ 'mod_authn_file', [ 'mod_authn_file.c' ], libcrypt + libcrypto ], |
|
[ 'mod_compress', [ 'mod_compress.c' ], libbz2 + libz ], |
|
[ 'mod_deflate', [ 'mod_deflate.c' ], libbz2 + libz ], |
|
[ 'mod_dirlisting', [ 'mod_dirlisting.c' ], libpcre ], |
|
[ 'mod_evasive', [ 'mod_evasive.c' ] ], |
|
[ 'mod_evhost', [ 'mod_evhost.c' ] ], |
|
[ 'mod_expire', [ 'mod_expire.c' ] ], |
|
[ 'mod_extforward', [ 'mod_extforward.c' ] ], |
|
[ 'mod_fastcgi', [ 'mod_fastcgi.c' ], libws2_32 ], |
|
[ 'mod_flv_streaming', [ 'mod_flv_streaming.c' ] ], |
|
[ 'mod_indexfile', [ 'mod_indexfile.c' ] ], |
|
[ 'mod_proxy', [ 'mod_proxy.c' ], libws2_32 ], |
|
[ 'mod_redirect', [ 'mod_redirect.c' ], libpcre ], |
|
[ 'mod_rewrite', [ 'mod_rewrite.c' ], libpcre ], |
|
[ 'mod_rrdtool', [ 'mod_rrdtool.c' ] ], |
|
[ 'mod_scgi', [ 'mod_scgi.c' ], libws2_32 ], |
|
[ 'mod_secdownload', [ 'mod_secdownload.c' ], libcrypto ], |
|
[ 'mod_setenv', [ 'mod_setenv.c' ] ], |
|
[ 'mod_simple_vhost', [ 'mod_simple_vhost.c' ] ], |
|
[ 'mod_ssi', [ ssi_exprparser, 'mod_ssi_expr.c', 'mod_ssi.c' ], libws2_32 ], |
|
[ 'mod_staticfile', [ 'mod_staticfile.c' ] ], |
|
[ 'mod_status', [ 'mod_status.c' ] ], |
|
[ 'mod_uploadprogress', [ 'mod_uploadprogress.c' ] ], |
|
[ 'mod_userdir', [ 'mod_userdir.c' ] ], |
|
[ 'mod_usertrack', [ 'mod_usertrack.c' ] ], |
|
[ 'mod_vhostdb', [ 'mod_vhostdb.c' ] ], |
|
[ 'mod_webdav', [ 'mod_webdav.c' ], libsqlite3 + libuuid + libxml2 ], |
|
[ 'mod_wstunnel', [ 'mod_wstunnel.c' ], libcrypto ], |
|
] |
|
|
|
if target_machine.system() != 'windows' |
|
modules += [ |
|
[ 'mod_cgi', [ 'mod_cgi.c' ] ], |
|
] |
|
endif |
|
|
|
if get_option('with_pcre') and (get_option('with_memcached') or get_option('with_gdbm')) |
|
modules += [ |
|
[ 'mod_trigger_b4_dl', [ 'mod_trigger_b4_dl.c' ], libpcre + libmemcached + libgdbm ], |
|
] |
|
endif |
|
|
|
if get_option('with_lua') |
|
modules += [ |
|
[ 'mod_cml', [ 'mod_cml.c', 'mod_cml_lua.c', 'mod_cml_funcs.c' ], liblua + libmemcached ], |
|
[ 'mod_magnet', [ 'mod_magnet.c', 'mod_magnet_cache.c' ], liblua ], |
|
] |
|
endif |
|
|
|
if get_option('with_geoip') |
|
modules += [ |
|
[ 'mod_geoip', [ 'mod_geoip.c' ], libgeoip ], |
|
] |
|
endif |
|
|
|
if get_option('with_mysql') |
|
modules += [ |
|
[ 'mod_authn_mysql', [ 'mod_authn_mysql.c' ], libcrypt + libmysqlclient ], |
|
[ 'mod_mysql_vhost', [ 'mod_mysql_vhost.c' ], libmysqlclient ], |
|
[ 'mod_vhostdb_mysql', [ 'mod_vhostdb_mysql.c' ], libmysqlclient ], |
|
] |
|
endif |
|
|
|
if get_option('with_pgsql') |
|
modules += [ |
|
[ 'mod_vhostdb_pgsql', [ 'mod_vhostdb_pgsql.c' ], libpq ], |
|
] |
|
endif |
|
|
|
if get_option('with_dbi') |
|
modules += [ |
|
[ 'mod_vhostdb_dbi', [ 'mod_vhostdb_dbi.c' ], libdbi ], |
|
] |
|
endif |
|
|
|
if get_option('with_krb5') |
|
modules += [ |
|
[ 'mod_authn_gssapi', [ 'mod_authn_gssapi.c' ], libkrb5 + libgssapi_krb5 ], |
|
] |
|
endif |
|
|
|
if get_option('with_ldap') |
|
modules += [ |
|
[ 'mod_authn_ldap', [ 'mod_authn_ldap.c' ], libldap + liblber ], |
|
[ 'mod_vhostdb_ldap', [ 'mod_vhostdb_ldap.c' ], libldap + liblber ], |
|
] |
|
endif |
|
|
|
if get_option('with_openssl') |
|
modules += [ |
|
[ 'mod_openssl', [ 'mod_openssl.c' ], libssl + libcrypto ], |
|
] |
|
endif |
|
|
|
if get_option('build_static') |
|
sh = find_program('sh') |
|
plugin_names = [] |
|
foreach mod: modules |
|
mod_name = mod.get(0) |
|
mod_sources = mod.get(1) |
|
mod_deps = mod.length() > 2 ? mod.get(2) : [] |
|
plugin_names += [ mod_name ] |
|
lighttpd_flags += mod_deps + [ declare_dependency( |
|
sources: mod_sources, |
|
) ] |
|
endforeach |
|
# printf repeats the format string until all arguments are handled; |
|
# the plugin names should be "sane" ([a-zA-Z0-9_]+) |
|
plugin_static_h = custom_target('plugin-static.h', |
|
command: [ sh, '-c', 'printf \'PLUGIN_INIT(%s)\n\' ' + ' '.join(plugin_names) ], |
|
capture: true, |
|
output: [ 'plugin-static.h' ], |
|
) |
|
main_src += [ plugin_static_h ] |
|
else |
|
foreach mod: modules |
|
mod_name = mod.get(0) |
|
mod_sources = mod.get(1) |
|
mod_deps = mod.length() > 2 ? mod.get(2) : [] |
|
shared_module(mod_name, |
|
sources: mod_sources, |
|
dependencies: common_flags + mod_deps, |
|
name_prefix: '', |
|
install: true, |
|
install_dir: moduledir, |
|
) |
|
endforeach |
|
endif |
|
|
|
if target_machine.system() == 'windows' |
|
lighttpd_flags += [ declare_dependency( |
|
compile_args: [ |
|
'-DLI_DECLARE_EXPORTS', |
|
], |
|
) ] |
|
if compiler.get_id() == 'gcc' |
|
libmsvcr70 = [ compiler.find_library('msvcr70') ] |
|
lighttpd_flags += libmsvcr70 + [ declare_dependency( |
|
link_args: [ |
|
'-Wl,-subsystem,console', |
|
], |
|
) ] |
|
lighttpd_angel_flags += libmsvcr70 + [ declare_dependency( |
|
link_args: [ |
|
'-Wl,-subsystem,console', |
|
], |
|
) ] |
|
endif |
|
endif |
|
|
|
if compiler.get_id() == 'gcc' or target_machine.system() != 'darwin' |
|
lighttpd_flags += [ declare_dependency( |
|
link_args: [ |
|
'-Wl,-export-dynamic', |
|
], |
|
) ] |
|
endif |
|
|
|
executable('lighttpd-angel', |
|
sources: 'lighttpd-angel.c', |
|
dependencies: common_flags + lighttpd_angel_flags, |
|
c_args: ['-DSBIN_DIR="' + sbinddir + '"'], |
|
install: true, |
|
install_dir: sbinddir, |
|
) |
|
|
|
executable('lighttpd', |
|
sources: common_src + main_src + [ configparser ], |
|
# libssl needed? |
|
dependencies: common_flags + lighttpd_flags |
|
+ libattr |
|
+ libcrypto |
|
+ libdl |
|
+ libev |
|
+ libfam |
|
+ libpcre |
|
+ libunwind |
|
+ libws2_32 |
|
, |
|
install: true, |
|
install_dir: sbinddir, |
|
)
|
|
|