]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Meson: Rework how modules are handled (again!)
authorFred Morcos <fred.morcos@open-xchange.com>
Mon, 21 Aug 2023 14:44:14 +0000 (16:44 +0200)
committerFred Morcos <fred.morcos@open-xchange.com>
Wed, 20 Mar 2024 12:28:44 +0000 (13:28 +0100)
meson.build
meson_options.txt
modules/bindbackend/meson.build
modules/gmysqlbackend/meson.build
modules/godbcbackend/meson.build
modules/gpgsqlbackend/meson.build
modules/gsqlite3backend/meson.build
modules/ldapbackend/meson.build
modules/lua2backend/meson.build
modules/pipebackend/meson.build
modules/remotebackend/meson.build

index 47fb787f84dd9375edebf87ef4f610396ab27280..5b523a442f3a4fa32e606dd3f385e638de684c24 100644 (file)
@@ -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,
 )
index 901ab2dce4d325a49f9ae58deec64a939bfaed44..206fdcf970be12fd7ab7a377854feb076d18ac62 100644 (file)
@@ -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')
index 4d1c33deae00ec377eb54b7feac0e14975d0d047..e113ac2630d31d81efe17e918565e277f276e580 100644 (file)
@@ -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
index 1e91f3684c336b629f19b7913489791b9b8a61a2..0b3132d595fdbe3ed2fcbe3c23b3a5a4fd4965db 100644 (file)
@@ -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
index b5ecf76d84b30e2026adc28d014105e0a0cae796..77e7ec1e1b2c041d7b8794377a5304179a58dc19 100644 (file)
@@ -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
index de55386be58aae28e0375cb161661410846dbfce..6c560dc80cbf686bb39742401cc2ef1993ef45e9 100644 (file)
@@ -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
index c23a7562e638605f9677fa2890fe3f83f22cead1..d1b780250e0002b5a4b8e177339edcace9e2ba93 100644 (file)
@@ -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
index d0d14069b64250274a7de5cde294e5019647add1..8f1d7d22fc072ae9883ef864f48e4557d13644f7 100644 (file)
@@ -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
index da1a28253cb8ef711727b0b8770e812277017515..62f35be0543d8ae5e3c5c0b900dc8b5c9840f695 100644 (file)
@@ -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
index 3fedfb5a47a37a97c88e7239a4cafa94fcd299c7..264fb1cc48cc9345da8e1b65d8ed73355c40eaf8 100644 (file)
@@ -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
index bfb89f76952bb2cb4b9833dd201383b461408614..fdc5ca1a0b913755b280f31fee462bfd2b7a0bd4 100644 (file)
@@ -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