From: Fred Morcos Date: Mon, 21 Aug 2023 14:44:14 +0000 (+0200) Subject: Meson: Rework how modules are handled (again!) X-Git-Tag: rec-5.1.0-alpha1~80^2~170 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1186a19da7138d275d0c72d334d6b45a402a03f5;p=thirdparty%2Fpdns.git Meson: Rework how modules are handled (again!) --- diff --git a/meson.build b/meson.build index 47fb787f84..5b523a442f 100644 --- a/meson.build +++ b/meson.build @@ -128,12 +128,28 @@ dep_modules = [] foreach module_name, module_deps: all_modules module_backend_name = module_name + 'backend' module_opt = get_option('module-' + module_name) - module_opt_dyn = get_option('module-' + module_name + '-dyn') - selected_modules += module_opt ? module_name : [] - selected_dyn_modules += module_opt_dyn ? module_name : [] + if module_opt == 'disabled' + continue + elif module_opt == 'static' + selected_modules += module_name + else + selected_dyn_modules += module_name + endif foreach dep: module_deps + if module_name == 'remote' + if dep == 'prog-curl' + if not opt_unittests + continue # We only need cURL for unit tests. + endif + elif dep == 'zeromq' + if not get_option('module-remote-zeromq') + continue + endif + endif + endif + subdir('meson' / dep) endforeach @@ -191,6 +207,6 @@ pdns_server = executable( dependencies: [ libpdns, libpdns_auth, + dep_modules, ], - link_with: dep_modules, ) diff --git a/meson_options.txt b/meson_options.txt index 901ab2dce4..206fdcf970 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -18,30 +18,19 @@ option('verbose-logging', type: 'boolean', value: false, description: 'Enable ve option('experimental-pkcs11', type: 'feature', value: 'disabled', description: 'PKCS11 support') option('experimental-gss-tsig', type: 'feature', value: 'disabled', description: 'GSS-TSIG support') option('socket-dir', type: 'string', value: '/var/run', description: 'Where the control socket lives') -option('module-bind', type: 'boolean', value: true, description: 'Bind backend') -option('module-bind-dyn', type: 'boolean', value: false, description: 'Bind backend (dynamically loadable)') -option('module-pipe', type: 'boolean', value: false, description: 'Pipe backend') -option('module-pipe-dyn', type: 'boolean', value: true, description: 'Pipe backend (dynamically loadable)') -option('module-gmysql', type: 'boolean', value: true, description: 'Generic MySQL backend') -option('module-gmysql-dyn', type: 'boolean', value: false, description: 'Generic MySQL backend (dynamically loadable)') -option('module-godbc', type: 'boolean', value: false, description: 'Generic ODBC backend') -option('module-godbc-dyn', type: 'boolean', value: false, description: 'Generic ODBC backend (dynamically loadable)') -option('module-gpgsql', type: 'boolean', value: false, description: 'Generic PostgreSQL backend') -option('module-gpgsql-dyn', type: 'boolean', value: false, description: 'Generic PostgreSQL backend (dynamically loadable)') -option('module-gsqlite3', type: 'boolean', value: false, description: 'Generic SQLite3 backend') -option('module-gsqlite3-dyn', type: 'boolean', value: false, description: 'Generic SQLite3 backend (dynamically loadable)') -option('module-ldap', type: 'boolean', value: false, description: 'LDAP backend') -option('module-ldap-dyn', type: 'boolean', value: false, description: 'LDAP backend (dynamically loadable)') -option('module-remote', type: 'combo', choices: ['disabled', 'with-zeromq', 'without-zeromq'], value: 'with-zeromq', description: 'Remote backend') -option('module-remote-dyn', type: 'combo', choices: ['disabled', 'with-zeromq', 'without-zeromq'], value: 'disabled', description: 'Remote backend (dynamically loadable)') -option('module-tinydns', type: 'boolean', value: false, description: 'TinyDNS backend') -option('module-tinydns-dyn', type: 'boolean', value: false, description: 'TinyDNS backend (dynamically loadable)') -option('module-geoip', type: 'boolean', value: false, description: 'GeoIP backend') -option('module-geoip-dyn', type: 'boolean', value: false, description: 'GeoIP backend (dynamically loadable)') -option('module-lmdb', type: 'boolean', value: false, description: 'LMDB backend') -option('module-lmdb-dyn', type: 'boolean', value: false, description: 'LMDB backend (dynamically loadable)') -option('module-lua2', type: 'boolean', value: false, description: 'Lua2 backend') -option('module-lua2-dyn', type: 'boolean', value: false, description: 'Lua2 backend (dynamically loadable)') +option('module-bind', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'static', description: 'Bind backend') +option('module-pipe', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'dynamic', description: 'Pipe backend') +option('module-gmysql', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'static', description: 'Generic MySQL backend') +option('module-godbc', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'Generic ODBC backend') +option('module-gpgsql', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'Generic PostgreSQL backend') +option('module-gsqlite3', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'Generic SQLite3 backend') +option('module-ldap', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'LDAP backend') +option('module-remote', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'Remote backend') +option('module-remote-zeromq', type: 'boolean', value: false, description: 'Use ZeroMQ in the Remote backend') +option('module-tinydns', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'TinyDNS backend') +option('module-geoip', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'GeoIP backend') +option('module-lmdb', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'LMDB backend') +option('module-lua2', type: 'combo', choices: ['disabled', 'static', 'dynamic'], value: 'disabled', description: 'Lua2 backend') option('tools', type: 'boolean', value: false, description: 'Build extra tools') option('tools-ixfrdist', type: 'boolean', value: false, description: 'Build ixfrdist') option('lua-records', type: 'boolean', value: true, description: 'Support Lua records') diff --git a/modules/bindbackend/meson.build b/modules/bindbackend/meson.build index 4d1c33deae..e113ac2630 100644 --- a/modules/bindbackend/meson.build +++ b/modules/bindbackend/meson.build @@ -13,12 +13,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/gmysqlbackend/meson.build b/modules/gmysqlbackend/meson.build index 1e91f3684c..0b3132d595 100644 --- a/modules/gmysqlbackend/meson.build +++ b/modules/gmysqlbackend/meson.build @@ -19,12 +19,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto, dep_libssl, dep_mysql] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/godbcbackend/meson.build b/modules/godbcbackend/meson.build index b5ecf76d84..77e7ec1e1b 100644 --- a/modules/godbcbackend/meson.build +++ b/modules/godbcbackend/meson.build @@ -15,12 +15,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto, dep_odbc] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/gpgsqlbackend/meson.build b/modules/gpgsqlbackend/meson.build index de55386be5..6c560dc80c 100644 --- a/modules/gpgsqlbackend/meson.build +++ b/modules/gpgsqlbackend/meson.build @@ -18,12 +18,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto, dep_pgsql] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/gsqlite3backend/meson.build b/modules/gsqlite3backend/meson.build index c23a7562e6..d1b780250e 100644 --- a/modules/gsqlite3backend/meson.build +++ b/modules/gsqlite3backend/meson.build @@ -16,13 +16,18 @@ extras = [ ] deps = [dep_pdns, dep_libcrypto, dep_sqlite3] +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif - -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/ldapbackend/meson.build b/modules/ldapbackend/meson.build index d0d14069b6..8f1d7d22fc 100644 --- a/modules/ldapbackend/meson.build +++ b/modules/ldapbackend/meson.build @@ -22,12 +22,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto, dep_ldap] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/lua2backend/meson.build b/modules/lua2backend/meson.build index da1a28253c..62f35be054 100644 --- a/modules/lua2backend/meson.build +++ b/modules/lua2backend/meson.build @@ -3,20 +3,25 @@ sources = [ 'lua2backend.cc', ] -headers = [ +extras = [ 'lua2backend.hh', 'lua2api2.hh', ] -if get_variable(module_name + '_module') - static_library( - module_backend_name, - sources, - dependencies: [dep_pdns, dep_libcrypto, dep_lua], - extra_files: [headers], - ) -endif +deps = [dep_pdns, dep_libcrypto, dep_lua] -if get_variable(module_name + '_dyn_module') +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/pipebackend/meson.build b/modules/pipebackend/meson.build index 3fedfb5a47..264fb1cc48 100644 --- a/modules/pipebackend/meson.build +++ b/modules/pipebackend/meson.build @@ -12,12 +12,18 @@ extras = [ deps = [dep_pdns, dep_libcrypto] -set_variable('dep_' + module_backend_name, dependency('', required: false)) -if module_opt - lib = static_library(module_backend_name, sources, dependencies: deps, extra_files: extras) - set_variable('dep_' + module_backend_name, lib) -endif +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if module_opt_dyn - shared_module(module_backend_name, sources, dependencies: deps, extra_files: extras) +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif diff --git a/modules/remotebackend/meson.build b/modules/remotebackend/meson.build index bfb89f7695..fdc5ca1a0b 100644 --- a/modules/remotebackend/meson.build +++ b/modules/remotebackend/meson.build @@ -1,39 +1,5 @@ sources = [ # TODO Change this into a libpdns library - '../../pdns/arguments.cc', - '../../pdns/auth-packetcache.cc', - '../../pdns/auth-querycache.cc', - '../../pdns/auth-zonecache.cc', - '../../pdns/base32.cc', - '../../pdns/base64.cc', - '../../pdns/dns.cc', - '../../pdns/dns_random_urandom.cc', - '../../pdns/dnsbackend.cc', - '../../pdns/dnslabeltext.cc', - '../../pdns/dnsname.cc', - '../../pdns/dnspacket.cc', - '../../pdns/dnsparser.cc', - '../../pdns/dnsrecords.cc', - '../../pdns/dnssecinfra.cc', - '../../pdns/dnswriter.cc', - '../../pdns/ednscookies.cc', - '../../pdns/ednsoptions.cc', - '../../pdns/ednssubnet.cc', - '../../pdns/gss_context.cc', - '../../pdns/iputils.cc', - '../../pdns/json.cc', - '../../pdns/logger.cc', - '../../pdns/misc.cc', - '../../pdns/nameserver.cc', - '../../pdns/nsecrecords.cc', - '../../pdns/qtype.cc', - '../../pdns/rcpgenerator.cc', - '../../pdns/shuffle.cc', - '../../pdns/sillyrecords.cc', - '../../pdns/statbag.cc', - '../../pdns/svc-records.cc', - '../../pdns/ueberbackend.cc', - '../../pdns/unix_utility.cc', 'httpconnector.cc', 'pipeconnector.cc', 'remotebackend.cc', @@ -41,9 +7,48 @@ sources = [ 'zmqconnector.cc', ] -if remote_module - static_library('remotebackend', sources) -endif +extras = [ + 'testrunner.sh', + 'unittest_http.rb', + 'unittest_json.rb', + 'unittest_pipe.rb', + 'unittest_zeromq.rb', + 'unittest_post.rb', + 'unittest.rb', + 'Gemfile', + 'Gemfile.lock', + # 'remotebackend_pipe.test', + # 'remotebackend_unix.test', + # 'remotebackend_http.test', + # 'remotebackend_post.test', + # 'remotebackend_json.test', + # 'remotebackend_zeromq.test', + 'remotebackend.hh', +] + +deps = [ + dep_pdns, + dep_yahttp, + dep_json11, + dep_zeromq, + dep_lua, + dep_libsodium, + dep_threads, + dep_arc4random, +] + +lib = static_library( + module_backend_name, + sources, + dependencies: deps, + extra_files: extras, +) -if remote_dyn_module +dep_name = 'dep_' + module_backend_name +set_variable(dep_name, dependency('', required: false)) +if module_opt == 'static' + dep = declare_dependency(link_with: lib) + set_variable(dep_name, dep) +else + shared_module(module_backend_name, link_with: lib) endif