Since meson 0.44 there is a new option type called `array`, which
allows to use an array with different values in those options.

These fits the needs of different options that are used to pass
binary paths, which have multiple paths as an alternate locations.

meson's version has been bumped to 0.44 and different options have
been changed to `array` type options.
---
 meson.build       | 220 +++++++++++++++++-------------------------------------
 meson_options.txt |  20 ++---
 src/meson.build   |  17 ++++-
 3 files changed, 91 insertions(+), 166 deletions(-)

diff --git a/meson.build b/meson.build
index a5f71b879..6d0b29592 100644
--- a/meson.build
+++ b/meson.build
@@ -6,7 +6,7 @@ project(
     'buildtype=debugoptimized',
     'c_std=gnu99'
   ],
-  meson_version: '>= 0.43.0'
+  meson_version: '>= 0.44.0'
 )
 
 nm_name = meson.project_name()
@@ -538,12 +538,9 @@ enable_ppp = get_option('ppp')
 if enable_ppp
   assert(cc.has_header('pppd/pppd.h'), 'couldn\'t find pppd.h. pppd 
development headers are required')
 
-  pppd_path = get_option('pppd')
-  if pppd_path == ''
-    pppd = find_program('pppd', '/sbin/pppd', '/usr/sbin/pppd', required: 
false)
-    assert(pppd.found(), 'pppd required but not found, please provide a valid 
pppd path or use -Dppp=false to disable it')
-    pppd_path = pppd.path()
-  endif
+  locations = get_option('pppd')
+  pppd = find_program(locations, required: false)
+  assert(pppd.found(), 'pppd required but not found, please provide a valid 
pppd path or use -Dppp=false to disable it')
 
   pppd_plugin_dir = get_option('pppd_plugin_dir')
   if pppd_plugin_dir == ''
@@ -571,104 +568,63 @@ enable_ofono = get_option('ofono')
 config_h.set10('WITH_OFONO', enable_ofono)
 
 # DHCP client support with dhcpcanon
-dhcpcanon_path = get_option('dhcpcanon')
-enable_dhcpcanon = (dhcpcanon_path != 'no')
+locations = get_option('dhcpcanon')
+enable_dhcpcanon = (locations != ['no'])
 if enable_dhcpcanon
-  if dhcpcanon_path == ''
-    name = 'dhcpcanon'
-    locations = [
-      name,
-      '/sbin/' + name,
-      '/usr/sbin/' + name,
-      '/usr/local/sbin/' + name,
-      '/usr/bin/' + name,
-      '/usr/local/bin/' + name
-    ]
-  else
-    locations = dhcpcanon_path
-  endif
-
   dhcpcanon = find_program(locations, required: false)
   enable_dhcpcanon = dhcpcanon.found()
-  dhcpcanon_path = (enable_dhcpcanon ? dhcpcanon.path() : '')
-endif
 
-if enable_dhcpcanon
-  config_h.set_quoted('DHCPCANON_PATH', dhcpcanon_path)
+  if enable_dhcpcanon
+    config_h.set_quoted('DHCPCANON_PATH', dhcpcanon.path())
+  endif
 endif
 config_h.set10('WITH_DHCPCANON', enable_dhcpcanon)
 
 # DHCP client support
-dhclient_path = get_option('dhclient')
-enable_dhclient = (dhclient_path != 'no')
+locations = get_option('dhclient')
+enable_dhclient = (locations != ['no'])
 if enable_dhclient
-  if dhclient_path == ''
-    name = 'dhclient'
-    locations = [
-      name,
-      '/sbin/' + name,
-      '/usr/sbin/' + name,
-      '/usr/local/sbin/' + name
-    ]
-  else
-    locations = dhclient_path
-  endif
-
   dhclient = find_program(locations, required: false)
   enable_dhclient = dhclient.found()
-  dhclient_path = (enable_dhclient ? dhclient.path() : '')
-endif
 
-if enable_dhclient
-  res = run_command(dhclient, '--version')
-  # FIXME: dhcp outputs the version string through stderr!?
-  if not res.stderr().strip().contains('isc-dhclient-4.')
-    message('Seems version of dhclient ' + dhclient_path + ' is too old, 
version 4.x or newer is required')
+  if enable_dhclient
+    res = run_command(dhclient, '--version')
+    # FIXME: dhcp outputs the version string through stderr!?
+    if not res.stderr().strip().contains('isc-dhclient-4.')
+      message('Seems version of dhclient ' + dhclient.path() + ' is too old, 
version 4.x or newer is required')
+    endif
+    config_h.set_quoted('DHCLIENT_PATH', dhclient.path())
   endif
-  config_h.set_quoted('DHCLIENT_PATH', dhclient_path)
 endif
 config_h.set10('WITH_DHCLIENT', enable_dhclient)
 
-dhcpcd_path = get_option('dhcpcd')
-enable_dhcpcd = (dhcpcd_path != 'no')
+locations = get_option('dhcpcd')
+enable_dhcpcd = (locations != ['no'])
+enable_dhcpcd_supports_ipv6 = false
 if enable_dhcpcd
-  if dhcpcd_path == ''
-    name = 'dhcpcd'
-    locations = [
-      name,
-      '/sbin/' + name,
-      '/usr/sbin/' + name,
-      '/usr/local/sbin/' + name
-    ]
-  else
-    locations = dhcpcd_path
-  endif
-
   dhcpcd = find_program(locations, required: false)
   enable_dhcpcd = dhcpcd.found()
-  dhcpcd_path = (enable_dhcpcd ? dhcpcd.path() : '')
-endif
 
-enable_dhcpcd_supports_ipv6 = false
-if enable_dhcpcd
-  res = run_command(dhcpcd, '--version').stdout().strip()
-  dhcpcd_version = res.split(' ')[1]
-  if not dhcpcd_version.version_compare('> 4')
-    message('Seems version of dhcpcd ' + dhcpcd_path + ' is too old, version 
4.x or newer is required')
-  endif
-
-  enable_dhcpcd_supports_ipv6 = get_option('dhcpcd_supports_ipv6')
-  if dhcpcd_version.version_compare('> 6')
-    if not enable_dhcpcd_supports_ipv6
-      message('Seems version of dhcpcd ' + dhcpcd_path + ' supports IPv6, but 
compiling without IPv6 support.')
+  if enable_dhcpcd
+    res = run_command(dhcpcd, '--version').stdout().strip()
+    dhcpcd_version = res.split(' ')[1]
+    if not dhcpcd_version.version_compare('> 4')
+      message('Seems version of dhcpcd ' + dhcpcd.path() + ' is too old, 
version 4.x or newer is required')
     endif
-  else
-    if enable_dhcpcd_supports_ipv6
-      message('Seems version of dhcpcd ' + dhcpcd_path +'  does not support 
IPv6, but compiling with IPv6 support.')
+
+    enable_dhcpcd_supports_ipv6 = get_option('dhcpcd_supports_ipv6')
+    if dhcpcd_version.version_compare('> 6')
+      if not enable_dhcpcd_supports_ipv6
+        message('Seems version of dhcpcd ' + dhcpcd.path() + ' supports IPv6, 
but compiling without IPv6 support.')
+      endif
+    else
+      if enable_dhcpcd_supports_ipv6
+        message('Seems version of dhcpcd ' + dhcpcd.path() +'  does not 
support IPv6, but compiling with IPv6 support.')
+      endif
     endif
+    config_h.set('DHCPCD_SUPPORTS_IPV6', enable_dhcpcd_supports_ipv6)
+    config_h.set_quoted('DHCPCD_PATH', dhcpcd.path())
   endif
-  config_h.set('DHCPCD_SUPPORTS_IPV6', enable_dhcpcd_supports_ipv6)
-  config_h.set_quoted('DHCPCD_PATH', dhcpcd_path)
 endif
 config_h.set10('WITH_DHCPCD', enable_dhcpcd)
 
@@ -694,48 +650,26 @@ if enable_ovs
 endif
 
 # resolvconf and netconfig support
-resolvconf_path = get_option('resolvconf')
-enable_resolvconf = (resolvconf_path != 'no')
+locations = get_option('resolvconf')
+enable_resolvconf = (locations != ['no'])
 if enable_resolvconf
-  if resolvconf_path == ''
-    name = 'resolvconf'
-    locations = [
-      name,
-      '/sbin/' + name,
-      '/usr/sbin/' + name,
-      '/usr/local/sbin/' + name
-    ]
-  else
-    locations = resolvconf_path
-  endif
-
   resolvconf = find_program(locations, required: false)
   enable_resolvconf = resolvconf.found()
-endif
-if enable_resolvconf
-  config_h.set_quoted('RESOLVCONF_PATH', resolvconf.path())
-endif
 
-netconfig_path = get_option('netconfig')
-enable_netconfig = (netconfig_path != 'no')
-if enable_netconfig
-  if netconfig_path == ''
-    name = 'netconfig'
-    locations = [
-      name,
-      '/sbin/' + name,
-      '/usr/sbin/' + name,
-      '/usr/local/sbin/' + name
-    ]
-  else
-    locations = netconfig_path
+  if enable_resolvconf
+    config_h.set_quoted('RESOLVCONF_PATH', resolvconf.path())
   endif
+endif
 
+locations = get_option('netconfig')
+enable_netconfig = (locations != ['no'])
+if enable_netconfig
   netconfig = find_program(locations, required: false)
   enable_netconfig = netconfig.found()
-endif
-if enable_netconfig
-  config_h.set_quoted('NETCONFIG_PATH', netconfig.path())
+
+  if enable_netconfig
+    config_h.set_quoted('NETCONFIG_PATH', netconfig.path())
+  endif
 endif
 
 config_dns_rc_manager_default = get_option('config_dns_rc_manager_default')
@@ -750,36 +684,14 @@ endif
 config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_RC_MANAGER', 
config_dns_rc_manager_default)
 
 # iptables path
-iptables_path = get_option('iptables')
-if iptables_path == ''
-  iptables_path = find_program('iptables', '/sbin/iptables', 
'/usr/sbin/iptables').path()
-endif
-config_h.set_quoted('IPTABLES_PATH', iptables_path)
+config_h.set_quoted('IPTABLES_PATH', 
find_program(get_option('iptables')).path())
 
 # dnsmasq path
-dnsmasq_path = get_option('dnsmasq')
-if dnsmasq_path == ''
-  dnsmasq_path = find_program('dnsmasq', '/sbin/dnsmasq', 
'/usr/sbin/dnsmasq').path()
-endif
-config_h.set_quoted('DNSMASQ_PATH', dnsmasq_path)
+config_h.set_quoted('DNSMASQ_PATH', find_program(get_option('dnsmasq')).path())
 
 # dnssec-trigger-script path
-dnssec_trigger_path = get_option('dnssec_trigger')
-if dnssec_trigger_path == ''
-  locations = [
-    'dnssec-trigger-script',
-    '/usr/local/libexec/dnssec-trigger-script',
-    '/usr/local/lib/dnssec-trigger-script',
-    '/usr/local/lib/dnssec-trigger/dnssec-trigger-script',
-    '/usr/libexec/dnssec-trigger-script',
-    '/usr/lib/dnssec-trigger-script',
-    '/usr/lib/dnssec-trigger/dnssec-trigger-script'
-  ]
-
-  dnssec_trigger_script = find_program(locations, required: false)
-  dnssec_trigger_path = (dnssec_trigger_script.found() ? 
dnssec_trigger_script.path() : '/usr/libexec/dnssec-trigger-script')
-endif
-config_h.set_quoted('DNSSEC_TRIGGER_SCRIPT', dnssec_trigger_path)
+dnssec_trigger_script = find_program(get_option('dnssec_trigger'), required: 
false)
+config_h.set_quoted('DNSSEC_TRIGGER_SCRIPT', (dnssec_trigger_script.found() ? 
dnssec_trigger_script.path() : '/usr/libexec/dnssec-trigger-script'))
 
 # system CA certificates path
 system_ca_path = get_option('system_ca_path')
@@ -861,13 +773,13 @@ enable_tests = (tests != 'no')
 require_root_tests = (tests == 'root')
 
 # valgrind
-valgrind_path = get_option('valgrind')
-if valgrind_path != 'no'
-  valgrind = find_program('valgrind', required: false)
-  valgrind_path = (valgrind.found() ? valgrind.path() : 'no')
+locations = get_option('valgrind')
+enable_valgrind = (locations != ['no'])
+if enable_valgrind
+  valgrind = find_program(locations, required: false)
+  enable_valgrind = valgrind.found()
 endif
 
-enable_valgrind = (valgrind_path != 'no')
 if enable_valgrind
   valgrind_suppressions_path = get_option('valgrind_suppressions')
   if valgrind_suppressions_path == ''
@@ -1051,7 +963,7 @@ output += '  wifi: ' + enable_wifi.to_string() + '\n'
 output += '  iwd:  ' + enable_iwd.to_string() + '\n'
 output += '  pppd: ' + enable_ppp.to_string()
 if enable_ppp
-  output += ' ' + pppd_path
+  output += ' ' + pppd.path()
 endif
 output += '\n'
 output += '  modemmanager-1: ' + enable_modem_manager.to_string() + '\n'
@@ -1082,17 +994,17 @@ output += '  config-dns-rc-manager-default: ' + 
config_dns_rc_manager_default +
 output += '\nDHCP clients (default ' + config_dhcp_default + '):\n'
 output += '  dhcpcanon: ' + enable_dhcpcanon.to_string()
 if enable_dhcpcd
-  output += ' ' + dhcpcanon_path
+  output += ' ' + dhcpcanon.path()
 endif
 output += '\n'
 output += '  dhclient: ' + enable_dhclient.to_string()
 if enable_dhclient
-  output += ' ' + dhclient_path
+  output += ' ' + dhclient.path()
 endif
 output += '\n'
 output += '  dhcpcd: ' + enable_dhcpcd.to_string()
 if enable_dhcpcd
-  output += ' ' + dhcpcd_path
+  output += ' ' + dhcpcd.path()
 endif
 output += '\n'
 output += '  dhcpcd-supports-ipv6: ' + enable_dhcpcd_supports_ipv6.to_string() 
+ '\n'
@@ -1105,7 +1017,11 @@ output += '  tests: ' + tests + '\n'
 output += '  more-asserts: @0@\n'.format(more_asserts)
 output += '  more-logging: ' + more_logging.to_string() + '\n'
 output += '  warning-level: ' + get_option('warning_level') + '\n'
-output += '  valgrind: ' + valgrind_path + '\n'
+output += '  valgrind: ' + enable_valgrind.to_string()
+if enable_valgrind
+  output += ' ' + valgrind.path()
+endif
+output += '\n'
 output += '  code coverage: ' + get_option('b_coverage').to_string() + '\n'
 output += '  LTO: ' + get_option('b_lto').to_string() + '\n'
 output += '  Linker garbage collection: ' + enable_ld_gc.to_string() + '\n'
diff --git a/meson_options.txt b/meson_options.txt
index 55f9ee703..578646211 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -7,9 +7,9 @@ option('dbus_ifaces_dir', type: 'string', value: '', 
description: 'where D-Bus i
 option('dbus_sys_dir', type: 'string', value: '', description: 'where D-Bus 
system service directory is')
 option('polkit_dir', type: 'string', value: '', description: 'where PolicyKit 
policy directory is')
 option('kernel_firmware_dir', type: 'string', value: '/lib/firmware', 
description: 'where kernel firmware directory is (default is /lib/firmware)')
-option('iptables', type: 'string', value: '', description: 'path to iptables')
-option('dnsmasq', type: 'string', value: '', description: 'path to dnsmasq')
-option('dnssec_trigger', type: 'string', value: '', description: 'path to 
unbound dnssec-trigger-script')
+option('iptables', type: 'array', value: ['iptables', '/sbin/iptables', 
'/usr/sbin/iptables'], description: 'path to iptables')
+option('dnsmasq', type: 'array', value: ['dnsmasq', '/sbin/dnsmasq', 
'/usr/sbin/dnsmasq'], description: 'path to dnsmasq')
+option('dnssec_trigger', type: 'array', value: ['dnssec-trigger-script', 
'/usr/local/libexec/dnssec-trigger-script', 
'/usr/local/lib/dnssec-trigger-script', 
'/usr/local/lib/dnssec-trigger/dnssec-trigger-script', 
'/usr/libexec/dnssec-trigger-script', '/usr/lib/dnssec-trigger-script', 
'/usr/lib/dnssec-trigger/dnssec-trigger-script'], description: 'path to unbound 
dnssec-trigger-script')
 
 # platform
 option('dist_version', type: 'string', value: '', description: 'Define the 
NM\'s distribution version string')
@@ -30,7 +30,7 @@ option('wext', type: 'boolean', value: true, description: 
'Enable or disable Lin
 option('wifi', type: 'boolean', value: true, description: 'enable Wi-Fi 
support')
 option('iwd', type: 'boolean', value: false, description: 'enable iwd support 
(experimental)')
 option('ppp', type: 'boolean', value: true, description: 'enable PPP/PPPoE 
support')
-option('pppd', type: 'string', value: '', description: 'path to pppd binary')
+option('pppd', type: 'array', value: ['pppd', '/sbin/pppd', '/usr/sbin/pppd'], 
description: 'path to pppd binary')
 option('pppd_plugin_dir', type: 'string', value: '', description: 'path to the 
pppd plugins directory')
 option('modem_manager', type: 'boolean', value: true, description: 'Enable new 
ModemManager1 interface support')
 option('ofono', type: 'boolean', value: false, description: 'Enable oFono 
support (experimental)')
@@ -51,14 +51,14 @@ option('ifupdown', type: 'boolean', value: false, 
description: 'enable ifupdown
 option('ifnet', type: 'boolean', value: false, description: 'enable ifnet 
configuration plugin (Gentoo)')
 
 # handlers for resolv.conf
-option('resolvconf', type: 'string', value: '', description: 'Enable 
resolvconf support')
-option('netconfig', type: 'string', value: '', description: 'Enable SUSE 
netconfig support')
+option('resolvconf', type: 'array', value: ['resolvconf', '/sbin/resolvconf', 
'/usr/sbin/resolvconf', '/usr/local/sbin/resolvconf'], description: 'Enable 
resolvconf support')
+option('netconfig', type: 'array', value: ['netconfig', '/sbin/netconfig', 
'/usr/sbin/netconfig', '/usr/local/sbin/netconfig'], description: 'Enable SUSE 
netconfig support')
 option('config_dns_rc_manager_default', type: 'combo', choices: ['symlink', 
'file', 'netconfig', 'resolvconf'], value: 'symlink', description: 'Configure 
default value for main.rc-manager setting')
 
 # dhcp clients
-option('dhcpcanon', type: 'string', value: '', description: 'Enable dhcpcanon 
support (experimental)')
-option('dhclient', type: 'string', value: '', description: 'Enable dhclient 
4.x support')
-option('dhcpcd', type: 'string', value: '', description: 'Enable dhcpcd 4.x 
support')
+option('dhcpcanon', type: 'array', value: ['dhcpcanon', '/sbin/dhcpcanon', 
'/usr/sbin/dhcpcanon', '/usr/local/sbin/dhcpcanon', '/usr/bin/dhcpcanon', 
'/usr/local/bin/dhcpcanon'], description: 'Enable dhcpcanon support 
(experimental)')
+option('dhclient', type: 'array', value: ['dhclient', '/sbin/dhclient', 
'/usr/sbin/dhclient', '/usr/local/sbin/dhclient'], description: 'Enable 
dhclient 4.x support')
+option('dhcpcd', type: 'array', value: ['dhcpcd', '/sbin/dhcpcd', 
'/usr/sbin/dhcpcd', '/usr/local/sbin/dhcpcd'], description: 'Enable dhcpcd 4.x 
support')
 option('config_dhcp_default', type: 'combo', choices: ['dhcpcanon', 
'dhclient', 'dhcpcd', 'internal'], value: 'internal', description: 'Default 
configuration option for main.dhcp setting, used as fallback if the 
configuration option is unset')
 option('dhcpcd_supports_ipv6', type: 'boolean', value: true, description: 
'Whether using dhcpcd >= 6.x which has IPv6 support')
 
@@ -69,7 +69,7 @@ option('docs', type: 'boolean', value: false, description: 
'use to build documen
 option('tests', type: 'combo', choices: ['yes', 'no', 'root'], value: 'yes', 
description: 'Build NetworkManager tests')
 option('more_asserts', type: 'string', value: 'all', description: 'Enable more 
assertions for debugging (0 = none, 100 = all, default: all)')
 option('more_logging', type: 'boolean', value: true, description: 'Enable more 
debug logging')
-option('valgrind', type: 'string', value: 'no', description: 'Use valgrind to 
memory-check the tests')
+option('valgrind', type: 'array', value: ['no'], description: 'Use valgrind to 
memory-check the tests')
 option('valgrind_suppressions', type: 'string', value: '', description: 'Use 
specific valgrind suppression file')
 option('ld_gc', type: 'boolean', value: true, description: 'Enable garbage 
collection of unused symbols on linking')
 option('libpsl', type: 'boolean', value: true, description: 'Link against 
libpsl')
diff --git a/src/meson.build b/src/meson.build
index a87c36e62..5335fdea0 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -43,12 +43,21 @@ common_cflags = [
   '-DNMPLUGINDIR="@0@"'.format(nm_pkglibdir),
   '-DNMRUNDIR="@0@"'.format(nm_pkgrundir),
   '-DNMSTATEDIR="@0@"'.format(nm_pkgstatedir),
-  '-DNMLIBDIR="@0@"'.format(nm_pkglibdir),
-  '-DDHCPCANON_PATH="@0@"'.format(dhcpcanon_path),
-  '-DDHCLIENT_PATH="@0@"'.format(dhclient_path),
-  '-DDHCPCD_PATH="@0@"'.format(dhcpcd_path)
+  '-DNMLIBDIR="@0@"'.format(nm_pkglibdir)
 ]
 
+if enable_dhcpcanon
+  common_cflags += '-DDHCPCANON_PATH="@0@"'.format(dhcpcanon.path())
+endif
+
+if enable_dhclient
+  common_cflags += '-DDHCLIENT_PATH="@0@"'.format(dhclient.path())
+endif
+
+if enable_dhcpcd
+  common_cflags += '-DDHCPCD_PATH="@0@"'.format(dhcpcd.path())
+endif
+
 sources = files(
   'dhcp/nm-dhcp-client.c',
   'dhcp/nm-dhcp-manager.c',
-- 
2.15.1

_______________________________________________
networkmanager-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to