Blame meson.build

Packit Service b23acc
# SPDX-License-Identifier: LGPL-2.1+
Packit Service b23acc
Packit Service b23acc
project(
Packit Service b23acc
  'NetworkManager', 'c',
Packit Service b23acc
# NOTE: When incrementing version also:
Packit Service b23acc
#  - add corresponding NM_VERSION_x_y_z macros in
Packit Service b23acc
#    "shared/nm-version-macros.h.in"
Packit Service b23acc
#  - update number in configure.ac
Packit Service b23acc
  version: '1.26.0',
Packit Service b23acc
  license: 'GPL2+',
Packit Service b23acc
  default_options: [
Packit Service b23acc
    'buildtype=debugoptimized',
Packit Service b23acc
    'c_std=gnu11',
Packit Service b23acc
  ],
Packit Service b23acc
  meson_version: '>= 0.47.2',
Packit Service b23acc
)
Packit Service b23acc
Packit Service b23acc
nm_name = meson.project_name()
Packit Service b23acc
Packit Service b23acc
nm_version = meson.project_version()
Packit Service b23acc
version_array = nm_version.split('.')
Packit Service b23acc
nm_major_version = version_array[0].to_int()
Packit Service b23acc
nm_minor_version = version_array[1].to_int()
Packit Service b23acc
nm_micro_version = version_array[2].to_int()
Packit Service b23acc
Packit Service b23acc
nm_id_prefix = 'NM'
Packit Service b23acc
Packit Service b23acc
nm_gir_version = '1.0'
Packit Service b23acc
Packit Service b23acc
# Distribution version string
Packit Service b23acc
dist_version = get_option('dist_version')
Packit Service b23acc
if dist_version == ''
Packit Service b23acc
  dist_version = nm_version
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
nm_prefix = get_option('prefix')
Packit Service b23acc
nm_bindir = join_paths(nm_prefix, get_option('bindir'))
Packit Service b23acc
nm_datadir = join_paths(nm_prefix, get_option('datadir'))
Packit Service b23acc
nm_includedir = join_paths(nm_prefix, get_option('includedir'))
Packit Service b23acc
nm_libdir = join_paths(nm_prefix, get_option('libdir'))
Packit Service b23acc
nm_libexecdir = join_paths(nm_prefix, get_option('libexecdir'))
Packit Service b23acc
nm_localedir = join_paths(nm_prefix, get_option('localedir'))
Packit Service b23acc
nm_localstatedir = join_paths(nm_prefix, get_option('localstatedir'))
Packit Service b23acc
nm_mandir = join_paths(nm_prefix, get_option('mandir'))
Packit Service b23acc
nm_runstatedir = join_paths(nm_localstatedir, 'run')
Packit Service b23acc
nm_sbindir = join_paths(nm_prefix, get_option('sbindir'))
Packit Service b23acc
nm_sysconfdir = join_paths(nm_prefix, get_option('sysconfdir'))
Packit Service b23acc
Packit Service b23acc
nm_pkgsbindir = join_paths(nm_sbindir, nm_name)
Packit Service b23acc
nm_pkgconfdir = join_paths(nm_sysconfdir, nm_name)
Packit Service b23acc
nm_pkgdatadir = join_paths(nm_datadir, nm_name)
Packit Service b23acc
nm_pkgincludedir = join_paths(nm_includedir, nm_name)
Packit Service b23acc
nm_pkglibdir = join_paths(nm_prefix, 'lib', nm_name)
Packit Service b23acc
nm_pkgrundir = join_paths(nm_runstatedir, nm_name)
Packit Service b23acc
nm_pkgstatedir = join_paths(nm_localstatedir, 'lib', nm_name)
Packit Service b23acc
nm_vpndir = join_paths(nm_libdir, nm_name)
Packit Service b23acc
nm_plugindir = join_paths(nm_libdir, nm_name, dist_version)
Packit Service b23acc
Packit Service b23acc
libnm_name = 'libnm'
Packit Service b23acc
Packit Service b23acc
current = 1
Packit Service b23acc
revision = 0
Packit Service b23acc
age = 1
Packit Service b23acc
libnm_version = '@0@.@1@.@2@'.format(current - age, age, revision)
Packit Service b23acc
Packit Service b23acc
libnm_pkgincludedir = join_paths(nm_includedir, libnm_name)
Packit Service b23acc
Packit Service b23acc
nm_debug = get_option('buildtype').contains('debug')
Packit Service b23acc
Packit Service b23acc
gnome = import('gnome')
Packit Service b23acc
i18n = import('i18n')
Packit Service b23acc
pkg = import('pkgconfig')
Packit Service b23acc
Packit Service b23acc
source_root = meson.current_source_dir()
Packit Service b23acc
build_root = meson.current_build_dir()
Packit Service b23acc
Packit Service b23acc
po_dir = join_paths(meson.source_root(), 'po')
Packit Service b23acc
Packit Service b23acc
intltool_merge = find_program('intltool-merge')
Packit Service b23acc
intltool_cache = join_paths(po_dir, '.intltool-merge-cache')
Packit Service b23acc
intltool_desktop_cmd = [intltool_merge, '-d', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
Packit Service b23acc
intltool_xml_cmd = [intltool_merge, '-x', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
Packit Service b23acc
Packit Service b23acc
top_inc = include_directories('.')
Packit Service b23acc
Packit Service b23acc
perl = find_program('perl')
Packit Service b23acc
xsltproc = find_program('xsltproc')
Packit Service b23acc
Packit Service b23acc
check_exports = find_program(join_paths(source_root, 'tools', 'check-exports.sh'))
Packit Service b23acc
Packit Service b23acc
cc = meson.get_compiler('c')
Packit Service b23acc
Packit Service b23acc
config_h = configuration_data()
Packit Service b23acc
Packit Service b23acc
# defines
Packit Service b23acc
set_defines = [
Packit Service b23acc
  ['GETTEXT_PACKAGE', nm_name],
Packit Service b23acc
  ['PACKAGE_STRING', '@0@ @1@'.format(nm_name, nm_version)],
Packit Service b23acc
  ['VERSION', nm_version],
Packit Service b23acc
]
Packit Service b23acc
Packit Service b23acc
default_test_timeout = 90
Packit Service b23acc
Packit Service b23acc
foreach define: set_defines
Packit Service b23acc
  config_h.set_quoted(define[0], define[1])
Packit Service b23acc
endforeach
Packit Service b23acc
Packit Service b23acc
# headers
Packit Service b23acc
config_h.set10('HAVE_SYS_AUXV_H', cc.has_header('sys/auxv.h'))
Packit Service b23acc
Packit Service b23acc
use_sys_random = cc.has_function('getrandom', prefix: '#include <sys/random.h>')
Packit Service b23acc
config_h.set10('USE_SYS_RANDOM_H', use_sys_random)
Packit Service b23acc
config_h.set10('HAVE_GETRANDOM', use_sys_random or cc.has_function('getrandom', prefix: '#include <linux/random.h>'))
Packit Service b23acc
Packit Service b23acc
config_h.set10('HAVE_PIDFD_OPEN', cc.has_function('pidfd_open', prefix: '''#include <stdlib.h>
Packit Service b23acc
                                                                           #include <unistd.h>
Packit Service b23acc
                                                                           #include <signal.h>
Packit Service b23acc
                                                                           #include <sys/wait.h>'''))
Packit Service b23acc
config_h.set10('HAVE_PIDFD_SEND_SIGNAL', cc.has_function('pidfd_send_signal', prefix: '''#include <stdlib.h>
Packit Service b23acc
                                                                                         #include <unistd.h>
Packit Service b23acc
                                                                                         #include <signal.h>
Packit Service b23acc
                                                                                         #include <sys/wait.h>'''))
Packit Service b23acc
config_h.set10('HAVE_RT_SIGQUEUEINFO', cc.has_function('rt_sigqueueinfo', prefix: '''#include <stdlib.h>
Packit Service b23acc
                                                                                     #include <unistd.h>
Packit Service b23acc
                                                                                     #include <signal.h>
Packit Service b23acc
                                                                                     #include <sys/wait.h>'''))
Packit Service b23acc
config_h.set('HAVE_SECURE_GETENV', cc.has_function('secure_getenv'))
Packit Service b23acc
config_h.set('HAVE___SECURE_GETENV', cc.has_function('__secure_getenv'))
Packit Service b23acc
config_h.set10('HAVE_DECL_REALLOCARRAY', cc.has_function('reallocarray', prefix: '#include <malloc.h>'))
Packit Service b23acc
config_h.set10('HAVE_DECL_EXPLICIT_BZERO', cc.has_function('explicit_bzero', prefix: '#include <string.h>'))
Packit Service b23acc
config_h.set10('HAVE_DECL_MEMFD_CREATE', cc.has_function('memfd_create', prefix: '#include <sys/mman.h>'))
Packit Service b23acc
Packit Service b23acc
# types
Packit Service b23acc
config_h.set('SIZEOF_PID_T', cc.sizeof('pid_t', prefix : '#include <sys/types.h>'))
Packit Service b23acc
config_h.set('SIZEOF_UID_T', cc.sizeof('uid_t', prefix : '#include <sys/types.h>'))
Packit Service b23acc
config_h.set('SIZEOF_GID_T', cc.sizeof('gid_t', prefix : '#include <sys/types.h>'))
Packit Service b23acc
config_h.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
Packit Service b23acc
config_h.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
Packit Service b23acc
config_h.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
Packit Service b23acc
config_h.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
Packit Service b23acc
Packit Service b23acc
# compiler flags
Packit Service b23acc
common_flags = []
Packit Service b23acc
common_ldflags = []
Packit Service b23acc
Packit Service b23acc
enable_ld_gc = get_option('ld_gc')
Packit Service b23acc
if enable_ld_gc
Packit Service b23acc
  test_c_flags = [
Packit Service b23acc
    '-fdata-sections',
Packit Service b23acc
    '-ffunction-sections',
Packit Service b23acc
  ]
Packit Service b23acc
Packit Service b23acc
  test_ldflags = ['-Wl,--gc-sections']
Packit Service b23acc
Packit Service b23acc
  foreach cflag: test_c_flags
Packit Service b23acc
    assert(cc.has_argument(cflag), 'Unused symbol eviction requested but not supported. Use -Dld_gc=false to build without it.')
Packit Service b23acc
  endforeach
Packit Service b23acc
Packit Service b23acc
  foreach ldflag: test_ldflags
Packit Service b23acc
    assert(cc.has_link_argument(ldflag), 'Linker garbage collection requested but not supported. Use -Dld_gc=false to build without it.')
Packit Service b23acc
  endforeach
Packit Service b23acc
Packit Service b23acc
  common_flags += test_c_flags
Packit Service b23acc
  common_ldflags += test_ldflags
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_lto = get_option('b_lto')
Packit Service b23acc
if enable_lto
Packit Service b23acc
  # meson already adds '-flto'
Packit Service b23acc
  lto_flag = '-flto-partition=none'
Packit Service b23acc
  assert(cc.has_argument(lto_flag), '-flto-partition=none not supported. Disable link-time optimization with -Db_lto=false.')
Packit Service b23acc
  common_flags += lto_flag
Packit Service b23acc
  common_ldflags += lto_flag
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
if nm_debug
Packit Service b23acc
  common_flags += cc.get_supported_arguments([
Packit Service b23acc
    '-Wall',
Packit Service b23acc
    '-Wextra',
Packit Service b23acc
    '-Wdeclaration-after-statement',
Packit Service b23acc
    '-Wfloat-equal',
Packit Service b23acc
    '-Wformat-nonliteral',
Packit Service b23acc
    '-Wformat-security',
Packit Service b23acc
    '-Wimplicit-function-declaration',
Packit Service b23acc
    '-Winit-self',
Packit Service b23acc
    '-Wlogical-op',
Packit Service b23acc
    '-Wmissing-declarations',
Packit Service b23acc
    '-Wmissing-include-dirs',
Packit Service b23acc
    '-Wmissing-prototypes',
Packit Service b23acc
    '-Wpointer-arith',
Packit Service b23acc
    '-Wshadow',
Packit Service b23acc
    '-Wshift-negative-value',
Packit Service b23acc
    '-Wstrict-prototypes',
Packit Service b23acc
    '-Wundef',
Packit Service b23acc
    '-Wvla',
Packit Service b23acc
    '-Wno-duplicate-decl-specifier',
Packit Service b23acc
    '-Wno-format-truncation',
Packit Service b23acc
    '-Wno-format-y2k',
Packit Service b23acc
    '-Wno-gnu-variable-sized-type-not-at-end',
Packit Service b23acc
    '-Wno-missing-field-initializers',
Packit Service b23acc
    '-Wno-pragmas',
Packit Service b23acc
    '-Wno-sign-compare',
Packit Service b23acc
    '-Wno-tautological-constant-out-of-range-compare',
Packit Service b23acc
    '-Wno-unknown-pragmas',
Packit Service b23acc
    '-Wno-unused-parameter',
Packit Service b23acc
    '-Wparentheses-equality',
Packit Service b23acc
    '-Wpointer-arith',
Packit Service b23acc
    '-Wshadow',
Packit Service b23acc
    '-Wstrict-prototypes',
Packit Service b23acc
    '-Wtypedef-redefinition',
Packit Service b23acc
    '-Wundef',
Packit Service b23acc
    '-Wunknown-attributes',
Packit Service b23acc
    '-fno-strict-aliasing',
Packit Service b23acc
  ])
Packit Service b23acc
Packit Service b23acc
  if cc.has_argument('-Wimplicit-fallthrough')
Packit Service b23acc
    if cc.compiles('''
Packit Service b23acc
                   int main(int argc, char **argv) {
Packit Service b23acc
                       int r = 0;
Packit Service b23acc
                       switch (argc) {
Packit Service b23acc
                       case 0:
Packit Service b23acc
                           r++;
Packit Service b23acc
                           /* fall-through */
Packit Service b23acc
                       case 1:
Packit Service b23acc
                           r++;
Packit Service b23acc
                           break;
Packit Service b23acc
                       }
Packit Service b23acc
                       return r;
Packit Service b23acc
                   }
Packit Service b23acc
                   ''',
Packit Service b23acc
                   args: '-Werror=implicit-fallthrough',
Packit Service b23acc
                   name: '-Werror=implicit-fallthrough')
Packit Service b23acc
      common_flags += '-Wimplicit-fallthrough'
Packit Service b23acc
    endif
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
add_project_arguments(common_flags, language: 'c')
Packit Service b23acc
add_project_link_arguments(common_ldflags, language: 'c')
Packit Service b23acc
Packit Service b23acc
linker_script_binary   = join_paths(source_root, 'linker-script-binary.ver')
Packit Service b23acc
linker_script_devices  = join_paths(source_root, 'linker-script-devices.ver')
Packit Service b23acc
linker_script_settings = join_paths(source_root, 'linker-script-settings.ver')
Packit Service b23acc
Packit Service b23acc
ldflags_linker_script_binary   = [ '-Wl,--version-script,@0@'.format(linker_script_binary) ]
Packit Service b23acc
ldflags_linker_script_devices  = [ '-Wl,--version-script,@0@'.format(linker_script_devices) ]
Packit Service b23acc
ldflags_linker_script_settings = [ '-Wl,--version-script,@0@'.format(linker_script_settings) ]
Packit Service b23acc
Packit Service b23acc
uuid_dep = dependency('uuid')
Packit Service b23acc
libelogind_dep = dependency('libelogind', version: '>= 219', required: false)
Packit Service b23acc
libudev_dep = dependency('libudev', version: '>= 175')
Packit Service b23acc
dbus_dep = dependency('dbus-1', version: '>= 1.1')
Packit Service b23acc
libndp_dep = dependency('libndp')
Packit Service b23acc
Packit Service b23acc
jansson_dep = dependency('jansson', version: '>= 2.5', required: false)
Packit Service b23acc
config_h.set10('WITH_JANSSON', jansson_dep.found())
Packit Service b23acc
Packit Service b23acc
if jansson_dep.found()
Packit Service b23acc
  jansson_libdir = jansson_dep.get_pkgconfig_variable('libdir')
Packit Service b23acc
  res = run_command(find_program('eu-readelf', 'readelf'), '-d', join_paths(jansson_libdir, 'libjansson.so'))
Packit Service b23acc
  jansson_soname = ''
Packit Service b23acc
  foreach line: res.stdout().split('\n')
Packit Service b23acc
    if line.strip().contains('SONAME')
Packit Service b23acc
       jansson_soname = line.split('[')[1].split(']')[0]
Packit Service b23acc
    endif
Packit Service b23acc
  endforeach
Packit Service b23acc
  assert(jansson_soname != '', 'Unable to determine Jansson SONAME')
Packit Service b23acc
  config_h.set_quoted('JANSSON_SONAME', jansson_soname)
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
libsystemd_dep = dependency('libsystemd', version: '>= 209', required: false)
Packit Service b23acc
libsystemd_login_dep = dependency('libsystemd-login', version: '>= 183', required: false)
Packit Service b23acc
Packit Service b23acc
config_h.set10('HAVE_LIBSYSTEMD', libsystemd_dep.found())
Packit Service b23acc
Packit Service b23acc
systemd_dep = dependency('systemd', required: false)
Packit Service b23acc
have_systemd_200 = systemd_dep.found() and systemd_dep.version().version_compare('>= 200')
Packit Service b23acc
Packit Service b23acc
gio_unix_dep = dependency('gio-unix-2.0', version: '>= 2.40')
Packit Service b23acc
Packit Service b23acc
glib_dep = declare_dependency(
Packit Service b23acc
  dependencies: [
Packit Service b23acc
    gio_unix_dep,
Packit Service b23acc
    dependency('gmodule-2.0'),
Packit Service b23acc
  ],
Packit Service b23acc
  compile_args: [
Packit Service b23acc
    '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40',
Packit Service b23acc
    '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40',
Packit Service b23acc
  ]
Packit Service b23acc
)
Packit Service b23acc
Packit Service b23acc
if run_command('test', '-e', '/etc/sysconfig/network-scripts').returncode() == 0
Packit Service b23acc
  distro = 'redhat'
Packit Service b23acc
elif run_command('test', '-e', '/etc/SuSE-release').returncode() == 0
Packit Service b23acc
  distro = 'suse'
Packit Service b23acc
elif run_command('test', '-e', '/etc/debian_version').returncode() == 0
Packit Service b23acc
  distro = 'debian'
Packit Service b23acc
elif run_command('test', '-e', '/etc/gentoo-release').returncode() == 0
Packit Service b23acc
  distro = 'gentoo'
Packit Service b23acc
else
Packit Service b23acc
  distro = 'unknown'
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_ifcfg_rh = get_option('ifcfg_rh') or (distro == 'redhat')
Packit Service b23acc
enable_ifupdown = get_option('ifupdown') or (distro == 'debian')
Packit Service b23acc
Packit Service b23acc
config_plugins_default = get_option('config_plugins_default')
Packit Service b23acc
if config_plugins_default == ''
Packit Service b23acc
  config_plugins = []
Packit Service b23acc
Packit Service b23acc
  if enable_ifcfg_rh
Packit Service b23acc
    config_plugins += ['ifcfg-rh']
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  if enable_ifupdown
Packit Service b23acc
    config_plugins += ['ifupdown']
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  config_plugins_default = ','.join(config_plugins)
Packit Service b23acc
endif
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_PLUGINS', config_plugins_default)
Packit Service b23acc
Packit Service b23acc
config_h.set_quoted('NM_DIST_VERSION', dist_version)
Packit Service b23acc
Packit Service b23acc
enable_wifi = get_option('wifi')
Packit Service b23acc
Packit Service b23acc
enable_iwd = get_option('iwd')
Packit Service b23acc
assert((not enable_iwd) or enable_wifi, 'Enabling iwd support requires Wi-Fi support as well')
Packit Service b23acc
config_h.set10('WITH_IWD', enable_iwd)
Packit Service b23acc
Packit Service b23acc
enable_wext = get_option('wext')
Packit Service b23acc
config_h.set10('HAVE_WEXT', enable_wext)
Packit Service b23acc
Packit Service b23acc
# Checks for libdl - on certain platforms its part of libc
Packit Service b23acc
dl_dep = cc.find_library('dl')
Packit Service b23acc
'''
Packit Service b23acc
dl_deps = []
Packit Service b23acc
Packit Service b23acc
dl_dep = cc.find_library('dl')
Packit Service b23acc
if dl_dep.found() and cc.has_function('dlopen')
Packit Service b23acc
  dl_deps += dl_dep
Packit Service b23acc
else
Packit Service b23acc
  dl_dep = dependency('dl', required: false)
Packit Service b23acc
  if dl_dep.found() and cc.has_function('dlopen', dependencies: dl_dep)
Packit Service b23acc
    dl_deps += dl_dep
Packit Service b23acc
  else
Packit Service b23acc
    dld_dep = dependency('dld', required: false)
Packit Service b23acc
    if dld_dep.found() and cc.has_function('dlopen', dependencies: dld_dep)
Packit Service b23acc
      dl_deps += dld_dep
Packit Service b23acc
    endif
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
'''
Packit Service b23acc
Packit Service b23acc
# introspection support
Packit Service b23acc
enable_introspection = get_option('introspection')
Packit Service b23acc
if enable_introspection
Packit Service b23acc
  gir_dep = dependency('gobject-introspection-1.0', version: '>= 0.9.6', required: false)
Packit Service b23acc
  assert(gir_dep.found(), 'introspection support was requested, but the gobject-introspection library is not available. Use -Dintrospection=false to build without it.')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
udev_udevdir = get_option('udev_dir')
Packit Service b23acc
install_udevdir = (udev_udevdir != 'no')
Packit Service b23acc
Packit Service b23acc
if install_udevdir and udev_udevdir == ''
Packit Service b23acc
  udev_udevdir = dependency('udev').get_pkgconfig_variable('udevdir')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
systemd_systemdsystemunitdir = get_option('systemdsystemunitdir')
Packit Service b23acc
install_systemdunitdir = (systemd_systemdsystemunitdir != 'no')
Packit Service b23acc
Packit Service b23acc
if install_systemdunitdir and systemd_systemdsystemunitdir == ''
Packit Service b23acc
  assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user unit dir or disable it')
Packit Service b23acc
  systemd_systemdsystemunitdir = systemd_dep.get_pkgconfig_variable('systemdsystemunitdir')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_systemd_journal = get_option('systemd_journal')
Packit Service b23acc
if enable_systemd_journal
Packit Service b23acc
  assert(libsystemd_dep.found(), 'Missing systemd-journald support')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('SYSTEMD_JOURNAL', enable_systemd_journal)
Packit Service b23acc
Packit Service b23acc
config_logging_backend_default = get_option('config_logging_backend_default')
Packit Service b23acc
if config_logging_backend_default == 'default'
Packit Service b23acc
  config_logging_backend_default = (enable_systemd_journal ? 'journal' : 'syslog')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_LOGGING_BACKEND', config_logging_backend_default)
Packit Service b23acc
Packit Service b23acc
session_tracking = get_option('session_tracking')
Packit Service b23acc
session_trackers = []
Packit Service b23acc
Packit Service b23acc
if session_tracking == 'systemd'
Packit Service b23acc
  logind_dep = libsystemd_dep
Packit Service b23acc
  if not logind_dep.found()
Packit Service b23acc
    logind_dep = dependency('libsystemd-login', required: false)
Packit Service b23acc
    assert(logind_dep.found(), 'You must have libsystemd or libsystemd-login installed to build with systemd-logind support')
Packit Service b23acc
  endif
Packit Service b23acc
  session_trackers += 'systemd-logind'
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_SYSTEMD', true)
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_ELOGIND', false)
Packit Service b23acc
elif session_tracking == 'elogind'
Packit Service b23acc
  logind_dep = libelogind_dep
Packit Service b23acc
  assert(logind_dep.found() and libelogind_dep.version().version_compare('>= 229'), 'You must have libelogind installed to build with elogind support.')
Packit Service b23acc
  session_trackers += 'elogind'
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_SYSTEMD', false)
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_ELOGIND', true)
Packit Service b23acc
else
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_SYSTEMD', false)
Packit Service b23acc
  config_h.set10('SESSION_TRACKING_ELOGIND', false)
Packit Service b23acc
  logind_dep = dependency('', required:false)
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
session_tracking_consolekit = get_option('session_tracking_consolekit')
Packit Service b23acc
if session_tracking_consolekit
Packit Service b23acc
  session_trackers += 'consolekit'
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('SESSION_TRACKING_CONSOLEKIT', session_tracking_consolekit)
Packit Service b23acc
Packit Service b23acc
hostname_persist = get_option('hostname_persist')
Packit Service b23acc
config_h.set('HOSTNAME_PERSIST_SUSE', (hostname_persist == 'suse'))
Packit Service b23acc
config_h.set('HOSTNAME_PERSIST_GENTOO', (hostname_persist == 'gentoo'))
Packit Service b23acc
config_h.set('HOSTNAME_PERSIST_SLACKWARE', (hostname_persist == 'slackware'))
Packit Service b23acc
Packit Service b23acc
suspend_resume = get_option('suspend_resume')
Packit Service b23acc
Packit Service b23acc
if suspend_resume == 'auto'
Packit Service b23acc
  if libsystemd_dep.found() or libsystemd_login_dep.found()
Packit Service b23acc
    suspend_resume = 'systemd'
Packit Service b23acc
  elif libelogind_dep.found()
Packit Service b23acc
    suspend_resume = 'elogind'
Packit Service b23acc
  elif session_tracking_consolekit
Packit Service b23acc
    suspend_resume = 'consolekit'
Packit Service b23acc
  else
Packit Service b23acc
    suspend_resume = 'upower'
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
if suspend_resume == 'systemd'
Packit Service b23acc
  if libsystemd_dep.found()
Packit Service b23acc
    system_inhibit_dep = libsystemd_dep
Packit Service b23acc
  elif libsystemd_login_dep.found()
Packit Service b23acc
    system_inhibit_dep = libsystemd_login_dep
Packit Service b23acc
  else
Packit Service b23acc
    error('Need libsystemd for suspend_resume=systemd')
Packit Service b23acc
  endif
Packit Service b23acc
  config_h.set('SUSPEND_RESUME_SYSTEMD', true)
Packit Service b23acc
elif suspend_resume == 'elogind'
Packit Service b23acc
  assert(libelogind_dep.found(), 'Need libelogind for suspend_resume=elogind')
Packit Service b23acc
  system_inhibit_dep = libelogind_dep
Packit Service b23acc
  config_h.set('SUSPEND_RESUME_ELOGIND', true)
Packit Service b23acc
elif suspend_resume == 'consolekit'
Packit Service b23acc
  config_h.set('SUSPEND_RESUME_CONSOLEKIT', true)
Packit Service b23acc
elif suspend_resume == 'upower'
Packit Service b23acc
  config_h.set('SUSPEND_RESUME_UPOWER', true)
Packit Service b23acc
else
Packit Service b23acc
  error('bug')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
# SELinux support
Packit Service b23acc
enable_selinux = get_option('selinux')
Packit Service b23acc
if enable_selinux
Packit Service b23acc
  selinux_dep = dependency('libselinux', required: false)
Packit Service b23acc
  assert(selinux_dep.found(), 'You must have libselinux installed to build. Use -Dselinux=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('HAVE_SELINUX', enable_selinux)
Packit Service b23acc
Packit Service b23acc
# eBPF support
Packit Service b23acc
ebpf_opt = get_option('ebpf')
Packit Service b23acc
# 'auto' means 'false', because there are still issues.
Packit Service b23acc
if ebpf_opt != 'true'
Packit Service b23acc
  enable_ebpf = false
Packit Service b23acc
else
Packit Service b23acc
  enable_ebpf = true
Packit Service b23acc
  if not cc.has_header('linux/bpf.h')
Packit Service b23acc
    assert(ebpf_opt != 'true', 'eBPF requires kernel support')
Packit Service b23acc
    enable_ebpf = false
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
# libaudit support
Packit Service b23acc
libaudit = get_option('libaudit')
Packit Service b23acc
enable_libaudit = libaudit.contains('yes')
Packit Service b23acc
if enable_libaudit
Packit Service b23acc
  libaudit_dep = dependency('audit', required: false)
Packit Service b23acc
  assert(libaudit_dep.found(), 'You must have libaudit installed to build. Use -Dlibaudit=no to disable it')
Packit Service b23acc
endif
Packit Service b23acc
config_default_logging_audit = (libaudit == 'yes').to_string()
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_LOGGING_AUDIT', config_default_logging_audit)
Packit Service b23acc
config_h.set10('HAVE_LIBAUDIT', enable_libaudit)
Packit Service b23acc
Packit Service b23acc
# Teamd control checks
Packit Service b23acc
enable_teamdctl = get_option('teamdctl')
Packit Service b23acc
if enable_teamdctl
Packit Service b23acc
  assert(jansson_dep.found(), 'You must have jansson installed to build. Use -Dteamdctl=false to disable it')
Packit Service b23acc
  libteamdctl_dep = dependency('libteamdctl', version: '>= 1.9')
Packit Service b23acc
  assert(libteamdctl_dep.found(), 'You must have libteamdctl installed to build. Use -Dteamdctl=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_json_validation = get_option('json_validation')
Packit Service b23acc
if enable_json_validation
Packit Service b23acc
  assert(jansson_dep.found(), 'jansson is needed for team configuration validation. Use -Djson_validation=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('WITH_JSON_VALIDATION', enable_json_validation)
Packit Service b23acc
Packit Service b23acc
# polkit
Packit Service b23acc
enable_polkit = get_option('polkit')
Packit Service b23acc
if enable_polkit
Packit Service b23acc
  # FIXME: policydir should be relative to `datadir`, not `prefix`. Fixed in https://gitlab.freedesktop.org/polkit/polkit/merge_requests/2
Packit Service b23acc
  polkit_gobject_policydir = dependency('polkit-gobject-1').get_pkgconfig_variable('policydir', define_variable: ['prefix', nm_prefix])
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
config_auth_polkit_default = get_option('config_auth_polkit_default')
Packit Service b23acc
if config_auth_polkit_default == 'default'
Packit Service b23acc
  config_auth_polkit_default = (enable_polkit ? 'true' : 'false')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_AUTH_POLKIT', config_auth_polkit_default)
Packit Service b23acc
Packit Service b23acc
enable_modify_system = get_option('modify_system')
Packit Service b23acc
Packit Service b23acc
polkit_agent_dep = dependency('polkit-agent-1', version: '>= 0.97', required : false)
Packit Service b23acc
if polkit_agent_dep.found()
Packit Service b23acc
	config_h.set_quoted('POLKIT_PACKAGE_PREFIX', polkit_agent_dep.get_pkgconfig_variable('prefix'))
Packit Service b23acc
else
Packit Service b23acc
	config_h.set_quoted('POLKIT_PACKAGE_PREFIX', '/usr')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
Packit Service b23acc
crypto = get_option('crypto')
Packit Service b23acc
if crypto == 'nss'
Packit Service b23acc
    crypto_dep = dependency('nss', required: false)
Packit Service b23acc
    assert(crypto_dep.found(), 'Requires nss crypto support')
Packit Service b23acc
elif crypto == 'gnutls'
Packit Service b23acc
    crypto_dep = dependency(
Packit Service b23acc
      'gnutls',
Packit Service b23acc
      version: '>= 2.12',
Packit Service b23acc
      required: false,
Packit Service b23acc
    )
Packit Service b23acc
    assert(crypto_dep.found(), 'Requires gnutls crypto support')
Packit Service b23acc
else
Packit Service b23acc
  error('bug')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
dbus_conf_dir = get_option('dbus_conf_dir')
Packit Service b23acc
if dbus_conf_dir == ''
Packit Service b23acc
  assert(dbus_dep.found(), 'D-Bus required but not found, please provide a valid system bus config dir')
Packit Service b23acc
  dbus_conf_dir = join_paths(dbus_dep.get_pkgconfig_variable('sysconfdir', define_variable: ['sysconfdir', nm_sysconfdir]), 'dbus-1', 'system.d')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
dbus_interfaces_dir = dbus_dep.get_pkgconfig_variable('interfaces_dir',  define_variable: ['datadir', nm_datadir])
Packit Service b23acc
dbus_system_bus_services_dir = dbus_dep.get_pkgconfig_variable('system_bus_services_dir', define_variable: ['datadir', nm_datadir])
Packit Service b23acc
Packit Service b23acc
enable_firewalld_zone = get_option('firewalld_zone')
Packit Service b23acc
config_h.set10('WITH_FIREWALLD_ZONE', enable_firewalld_zone)
Packit Service b23acc
Packit Service b23acc
# pppd
Packit Service b23acc
enable_ppp = get_option('ppp')
Packit Service b23acc
if enable_ppp
Packit Service b23acc
  assert(cc.has_header('pppd/pppd.h'), 'couldn\'t find pppd.h. pppd development headers are required')
Packit Service b23acc
Packit Service b23acc
  pppd_path = get_option('pppd')
Packit Service b23acc
  if pppd_path == ''
Packit Service b23acc
    pppd = find_program('pppd', '/sbin/pppd', '/usr/sbin/pppd', required: false)
Packit Service b23acc
    assert(pppd.found(), 'pppd required but not found, please provide a valid pppd path or use -Dppp=false to disable it')
Packit Service b23acc
    pppd_path = pppd.path()
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  config_h.set_quoted('PPPD_PATH', pppd_path)
Packit Service b23acc
Packit Service b23acc
  pppd_plugin_dir = get_option('pppd_plugin_dir')
Packit Service b23acc
  if pppd_plugin_dir == ''
Packit Service b23acc
    pppd_plugin_dir = join_paths(nm_libdir, 'pppd', '2.4.5')
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('WITH_PPP', enable_ppp)
Packit Service b23acc
Packit Service b23acc
# ModemManager1 with libmm-glib
Packit Service b23acc
enable_modem_manager = get_option('modem_manager')
Packit Service b23acc
if enable_modem_manager
Packit Service b23acc
  mm_glib_dep = dependency('mm-glib', version: '>= 0.7.991')
Packit Service b23acc
Packit Service b23acc
  mobile_broadband_provider_info_database = dependency('mobile-broadband-provider-info').get_pkgconfig_variable('database')
Packit Service b23acc
  config_h.set_quoted('MOBILE_BROADBAND_PROVIDER_INFO_DATABASE', mobile_broadband_provider_info_database)
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
# Bluez5 DUN support
Packit Service b23acc
enable_bluez5_dun = get_option('bluez5_dun')
Packit Service b23acc
if enable_bluez5_dun
Packit Service b23acc
  bluez5_dep = dependency('bluez', version: '>= 5', required: false)
Packit Service b23acc
  assert(bluez5_dep.found(), 'Bluez 5.x development headers are required')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('WITH_BLUEZ5_DUN', enable_bluez5_dun)
Packit Service b23acc
Packit Service b23acc
# OFONO
Packit Service b23acc
enable_ofono = get_option('ofono')
Packit Service b23acc
config_h.set10('WITH_OFONO', enable_ofono)
Packit Service b23acc
Packit Service b23acc
# DHCP client support
Packit Service b23acc
config_dhcp_default = get_option('config_dhcp_default')
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_DHCP', config_dhcp_default)
Packit Service b23acc
dhcp_summary = ''
Packit Service b23acc
foreach client : [ 'dhclient', 'dhcpcd', 'dhcpcanon' ]
Packit Service b23acc
  client_path = get_option(client)
Packit Service b23acc
  client_enable = (client_path != 'no')
Packit Service b23acc
  if client_enable
Packit Service b23acc
    if client_path == ''
Packit Service b23acc
      client_prog = find_program(client,
Packit Service b23acc
                                 '/sbin/' + client,
Packit Service b23acc
                                 '/usr/sbin/pppd/' + client,
Packit Service b23acc
                                 '/usr/local/sbin/' + client,
Packit Service b23acc
                                 required : false)
Packit Service b23acc
      if client_prog.found()
Packit Service b23acc
        client_path = client_prog.path()
Packit Service b23acc
      else
Packit Service b23acc
        client_path = '/usr/sbin/' + client
Packit Service b23acc
        message('@0@ not found, assume path @1@'.format(client, client_path))
Packit Service b23acc
      endif
Packit Service b23acc
    endif
Packit Service b23acc
    config_h.set_quoted(client.to_upper() + '_PATH', client_path)
Packit Service b23acc
  endif
Packit Service b23acc
  if config_dhcp_default == client and not client_enable
Packit Service b23acc
    error(client + ' has not been enabled. Please don\'t disable it or use another configuration option for main.dhcp setting')
Packit Service b23acc
  endif
Packit Service b23acc
  config_h.set10('WITH_' + client.to_upper(), client_enable)
Packit Service b23acc
  dhcp_summary += ('  ' + client + ': ' + client_enable.to_string())
Packit Service b23acc
  if (client_enable)
Packit Service b23acc
    dhcp_summary += (' ' + client_path)
Packit Service b23acc
  endif
Packit Service b23acc
  dhcp_summary += '\n'
Packit Service b23acc
endforeach
Packit Service b23acc
Packit Service b23acc
# Open vSwitch integration
Packit Service b23acc
enable_ovs = get_option('ovs')
Packit Service b23acc
if enable_ovs
Packit Service b23acc
  assert(jansson_dep.found(), 'jansson is needed for Open vSwitch integration. Use -Dovs=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
# DNS resolv.conf managers
Packit Service b23acc
config_dns_rc_manager_default = get_option('config_dns_rc_manager_default')
Packit Service b23acc
config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_RC_MANAGER', config_dns_rc_manager_default)
Packit Service b23acc
resolv_conf_summary = ''
Packit Service b23acc
foreach prog_name : ['resolvconf', 'netconfig']
Packit Service b23acc
  prog_path = get_option(prog_name)
Packit Service b23acc
  prog_enable = (prog_path != 'no')
Packit Service b23acc
Packit Service b23acc
  if prog_enable
Packit Service b23acc
    if prog_path == ''
Packit Service b23acc
      prog = find_program(prog_name,
Packit Service b23acc
                          '/usr/' + prog_name,
Packit Service b23acc
                          '/usr/sbin/' + prog_name,
Packit Service b23acc
                          '/usr/local/sbin/' + prog_name,
Packit Service b23acc
                          required : false)
Packit Service b23acc
      if prog.found()
Packit Service b23acc
        prog_path = prog.path()
Packit Service b23acc
      else
Packit Service b23acc
        prog_enable = false
Packit Service b23acc
      endif
Packit Service b23acc
    endif
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  if prog_enable
Packit Service b23acc
    config_h.set_quoted(prog_name.to_upper() + '_PATH', prog_path)
Packit Service b23acc
  elif config_dns_rc_manager_default == prog_name
Packit Service b23acc
    error(prog_name + ' has not been enabled. Please don\'t disable it or use another configuration option for main.rc-manager setting')
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  resolv_conf_summary += '  ' + prog_name + ': ' + prog_enable.to_string()
Packit Service b23acc
  if prog_enable
Packit Service b23acc
    resolv_conf_summary += ' ' + prog_path
Packit Service b23acc
  endif
Packit Service b23acc
  resolv_conf_summary += '\n'
Packit Service b23acc
endforeach
Packit Service b23acc
Packit Service b23acc
# external misc tools paths
Packit Service b23acc
default_paths = ['/sbin', '/usr/sbin']
Packit Service b23acc
dnssec_ts_paths = ['/usr/local/libexec',
Packit Service b23acc
                   '/usr/local/lib',
Packit Service b23acc
                   '/usr/local/lib/dnssec-trigger',
Packit Service b23acc
                   '/usr/libexec',
Packit Service b23acc
                   '/usr/lib',
Packit Service b23acc
                   '/usr/lib/dnssec-trigger']
Packit Service b23acc
Packit Service b23acc
# 0: cmdline option, 1: paths, 2: fallback
Packit Service b23acc
progs = [['iptables',       default_paths,   '/sbin/iptables'],
Packit Service b23acc
         ['dnsmasq',        default_paths,   ''],
Packit Service b23acc
         ['dnssec_trigger', dnssec_ts_paths, join_paths(nm_libexecdir, 'dnssec-trigger-script') ],
Packit Service b23acc
        ]
Packit Service b23acc
Packit Service b23acc
foreach prog : progs
Packit Service b23acc
  path = get_option(prog[0])
Packit Service b23acc
  if path == ''
Packit Service b23acc
    search_paths = [ prog[0] ]
Packit Service b23acc
    foreach path : prog[1]
Packit Service b23acc
      search_paths += (path + '/' + prog[0])
Packit Service b23acc
    endforeach
Packit Service b23acc
    exe = find_program(search_paths, required : false)
Packit Service b23acc
    path = exe.found() ? exe.path() : prog[2]
Packit Service b23acc
  endif
Packit Service b23acc
  name = prog[0].to_upper() + '_PATH'
Packit Service b23acc
  config_h.set_quoted(name, path)
Packit Service b23acc
endforeach
Packit Service b23acc
Packit Service b23acc
# system CA certificates path
Packit Service b23acc
system_ca_path = get_option('system_ca_path')
Packit Service b23acc
config_h.set_quoted('SYSTEM_CA_PATH', system_ca_path)
Packit Service b23acc
Packit Service b23acc
# kernel firmware dir
Packit Service b23acc
kernel_firmware_dir = get_option('kernel_firmware_dir')
Packit Service b23acc
config_h.set_quoted('KERNEL_FIRMWARE_DIR', kernel_firmware_dir)
Packit Service b23acc
Packit Service b23acc
enable_libpsl = get_option('libpsl')
Packit Service b23acc
if enable_libpsl
Packit Service b23acc
  libpsl_dep = dependency('libpsl', version: '>= 0.1')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('WITH_LIBPSL', enable_libpsl)
Packit Service b23acc
Packit Service b23acc
libcurl_dep = dependency('libcurl', version: '>= 7.24.0', required: false)
Packit Service b23acc
Packit Service b23acc
enable_concheck = get_option('concheck')
Packit Service b23acc
if enable_concheck
Packit Service b23acc
  assert(libcurl_dep.found(), 'concheck requires libcurl library. Use -Dconcheck=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
config_h.set10('WITH_CONCHECK', enable_concheck)
Packit Service b23acc
Packit Service b23acc
enable_nmcli = get_option('nmcli')
Packit Service b23acc
if enable_nmcli
Packit Service b23acc
  # FIXME: check for readline
Packit Service b23acc
  # AX_LIB_READLINE
Packit Service b23acc
  readline_dep = declare_dependency(link_args: '-lreadline')
Packit Service b23acc
  '''
Packit Service b23acc
  foreach readline_lib: ['-lreadline', '-ledit', '-leditline']
Packit Service b23acc
    if not is_variable('readline_dep')
Packit Service b23acc
      foreach termcap_lib: ['', '-lncurses', '-ltermcap', '-lcurses']
Packit Service b23acc
        test_dep = declare_dependency(link_args: ' '.join([readline_lib, termcap_lib]))
Packit Service b23acc
        if cc.has_function('readline', dependencies: test_dep) and cc.has_header('readline', dependencies: test_dep)
Packit Service b23acc
          readline_dep = test_dep
Packit Service b23acc
        endif
Packit Service b23acc
      endforeach
Packit Service b23acc
    endif
Packit Service b23acc
  endforeach
Packit Service b23acc
  '''
Packit Service b23acc
  assert(readline_dep.found(), 'readline library with terminfo support is required (one of readline, edit, or editline, AND one of ncurses, curses, or termcap)')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_nmtui = get_option('nmtui')
Packit Service b23acc
if enable_nmtui
Packit Service b23acc
  newt_dep = dependency('libnewt', version: '>= 0.52.15', required: false)
Packit Service b23acc
  assert(newt_dep.found(), 'You must have libnewt installed to build nmtui. Use -Dnmtui=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_nm_cloud_setup = get_option('nm_cloud_setup')
Packit Service b23acc
if enable_nm_cloud_setup
Packit Service b23acc
  assert(libcurl_dep.found(), 'nm-cloud-setup requires libcurl library. Use -Dnm_cloud_setup=false to disable it')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
more_asserts = get_option('more_asserts')
Packit Service b23acc
if more_asserts == 'no'
Packit Service b23acc
  more_asserts = 0
Packit Service b23acc
elif more_asserts == 'all'
Packit Service b23acc
  more_asserts = 100
Packit Service b23acc
else
Packit Service b23acc
  more_asserts = more_asserts.to_int()
Packit Service b23acc
endif
Packit Service b23acc
config_h.set('NM_MORE_ASSERTS', more_asserts)
Packit Service b23acc
Packit Service b23acc
more_logging = get_option('more_logging')
Packit Service b23acc
config_h.set10('NM_MORE_LOGGING', more_logging)
Packit Service b23acc
Packit Service b23acc
generic_support_src = 'int main() { int a = 0; int b = _Generic (a, int: 4); return b + a; };'
Packit Service b23acc
config_h.set10('_NM_CC_SUPPORT_GENERIC', cc.compiles(generic_support_src))
Packit Service b23acc
Packit Service b23acc
auto_support_src = 'int main() { int a = 0; __auto_type b = a; return b + a; };'
Packit Service b23acc
config_h.set10('_NM_CC_SUPPORT_AUTO_TYPE', cc.compiles(auto_support_src))
Packit Service b23acc
Packit Service b23acc
# Vala bindings
Packit Service b23acc
vapi_opt = get_option('vapi')
Packit Service b23acc
if vapi_opt == 'false'
Packit Service b23acc
  enable_vapi = false
Packit Service b23acc
else
Packit Service b23acc
  vala_req_version = '>= 0.17.1.24'
Packit Service b23acc
  enable_vapi = true
Packit Service b23acc
Packit Service b23acc
  if not enable_introspection
Packit Service b23acc
    assert(vapi_opt != 'true', 'vala api require GObject introspection. Use -Dvapi=false to disable it')
Packit Service b23acc
    enable_vapi = false
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  if enable_vapi and not add_languages('vala', required: false)
Packit Service b23acc
    assert(vapi_opt != 'true', 'vala is required to build. Use -Dvapi=false to disable it')
Packit Service b23acc
    enable_vapi = false
Packit Service b23acc
  endif
Packit Service b23acc
Packit Service b23acc
  if enable_vapi and not meson.get_compiler('vala').version().version_compare(vala_req_version)
Packit Service b23acc
    assert(vapi_opt != 'true', 'vala ' + vala_req_version + ' is required to build. Use -Dvapi=false to disable it')
Packit Service b23acc
    enable_vapi = false
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
# Tests, utilities and documentation
Packit Service b23acc
tests = get_option('tests')
Packit Service b23acc
enable_tests = (tests != 'no')
Packit Service b23acc
require_root_tests = (tests == 'root')
Packit Service b23acc
test_script = find_program(join_paths(source_root, 'tools', 'run-nm-test.sh'))
Packit Service b23acc
Packit Service b23acc
# valgrind
Packit Service b23acc
locations = get_option('valgrind')
Packit Service b23acc
enable_valgrind = (locations != ['no'])
Packit Service b23acc
if enable_valgrind
Packit Service b23acc
  valgrind = find_program(locations, required: false)
Packit Service b23acc
  enable_valgrind = valgrind.found()
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
if enable_valgrind
Packit Service b23acc
  valgrind_suppressions_path = get_option('valgrind_suppressions')
Packit Service b23acc
  if valgrind_suppressions_path == ''
Packit Service b23acc
    valgrind_suppressions_path = join_paths(source_root, 'valgrind.suppressions')
Packit Service b23acc
  endif
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
test_args = [
Packit Service b23acc
  '--called-from-make',
Packit Service b23acc
  build_root,
Packit Service b23acc
  '',
Packit Service b23acc
  enable_valgrind ? valgrind.path() : '',
Packit Service b23acc
  enable_valgrind ? valgrind_suppressions_path : '',
Packit Service b23acc
  '--launch-dbus=auto',
Packit Service b23acc
]
Packit Service b23acc
Packit Service b23acc
py3 = import('python3')
Packit Service b23acc
python = py3.find_python()
Packit Service b23acc
Packit Service b23acc
if python.found()
Packit Service b23acc
  config_h.set_quoted('TEST_NM_PYTHON', python.path())
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
data_conf = configuration_data()
Packit Service b23acc
data_conf.set('DISTRO_NETWORK_SERVICE',                  (enable_ifcfg_rh ? 'network.service' : ''))
Packit Service b23acc
data_conf.set('NM_CONFIG_DEFAULT_LOGGING_AUDIT_TEXT',    config_default_logging_audit)
Packit Service b23acc
data_conf.set('NM_CONFIG_DEFAULT_LOGGING_BACKEND_TEXT',  config_logging_backend_default)
Packit Service b23acc
data_conf.set('NM_CONFIG_DEFAULT_MAIN_AUTH_POLKIT_TEXT', config_auth_polkit_default)
Packit Service b23acc
data_conf.set('NM_CONFIG_DEFAULT_MAIN_DHCP',             config_dhcp_default)
Packit Service b23acc
data_conf.set('NM_CONFIG_DEFAULT_MAIN_RC_MANAGER',       config_dns_rc_manager_default)
Packit Service b23acc
data_conf.set('NM_MAJOR_VERSION',                        nm_major_version)
Packit Service b23acc
data_conf.set('NM_MICRO_VERSION',                        nm_micro_version)
Packit Service b23acc
data_conf.set('NM_MINOR_VERSION',                        nm_minor_version)
Packit Service b23acc
data_conf.set('NM_MODIFY_SYSTEM_POLICY',                 (enable_modify_system ? 'yes' : 'auth_admin_keep'))
Packit Service b23acc
data_conf.set('NM_VERSION',                              nm_version)
Packit Service b23acc
data_conf.set('VERSION',                                 nm_version)
Packit Service b23acc
data_conf.set('bindir',                                  nm_bindir)
Packit Service b23acc
data_conf.set('libexecdir',                              nm_libexecdir)
Packit Service b23acc
data_conf.set('localstatedir',                           nm_localstatedir)
Packit Service b23acc
data_conf.set('nmrundir',                                nm_pkgrundir)
Packit Service b23acc
data_conf.set('nmstatedir',                              nm_pkgstatedir)
Packit Service b23acc
data_conf.set('sbindir',                                 nm_sbindir)
Packit Service b23acc
data_conf.set('sysconfdir',                              nm_sysconfdir)
Packit Service b23acc
Packit Service b23acc
# check if we can build setting property documentation
Packit Service b23acc
'''
Packit Service b23acc
build_docs=no
Packit Service b23acc
if test -n "$INTROSPECTION_MAKEFILE"; then
Packit Service b23acc
  # If g-i is installed we know we have python, but we might not have pygobject
Packit Service b23acc
  if ! "$PYTHON" -c 'from gi.repository import GObject' >& /dev/null; then
Packit Service b23acc
    AC_MSG_ERROR(["--enable-introspection aims to build the settings documentation. This requires GObject introspection for python (pygobject)])
Packit Service b23acc
  fi
Packit Service b23acc
Packit Service b23acc
  AC_PATH_PROG(PERL, perl)
Packit Service b23acc
  if test -z "$PERL"; then
Packit Service b23acc
    AC_MSG_ERROR([--enable-introspection requires perl])
Packit Service b23acc
  fi
Packit Service b23acc
  AC_PATH_PROG(XSLTPROC, xsltproc)
Packit Service b23acc
  if test -z "$XSLTPROC"; then
Packit Service b23acc
    AC_MSG_ERROR([--enable-introspection requires xsltproc])
Packit Service b23acc
  fi
Packit Service b23acc
Packit Service b23acc
  have_introspection=yes
Packit Service b23acc
  if test "$enable_gtk_doc" = "yes"; then
Packit Service b23acc
    build_docs=yes
Packit Service b23acc
  fi
Packit Service b23acc
else
Packit Service b23acc
  if test "$enable_gtk_doc" = "yes"; then
Packit Service b23acc
    # large parts of the documentation require introspection/pygobject to extract
Packit Service b23acc
    # the documentation out of the source files. You cannot enable gtk-doc without alone.
Packit Service b23acc
    AC_MSG_ERROR(["--with-gtk-doc requires --enable-introspection"])
Packit Service b23acc
  fi
Packit Service b23acc
  have_introspection=no
Packit Service b23acc
fi
Packit Service b23acc
'''
Packit Service b23acc
Packit Service b23acc
content_files = []
Packit Service b23acc
Packit Service b23acc
subdir('introspection')
Packit Service b23acc
subdir('shared')
Packit Service b23acc
subdir('libnm-core')
Packit Service b23acc
subdir('libnm')
Packit Service b23acc
subdir('src')
Packit Service b23acc
subdir('dispatcher')
Packit Service b23acc
subdir('clients')
Packit Service b23acc
subdir('data')
Packit Service b23acc
subdir('po')
Packit Service b23acc
Packit Service b23acc
if enable_vapi
Packit Service b23acc
  subdir('vapi')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
subdir('examples/C/glib')
Packit Service b23acc
Packit Service b23acc
enable_qt = get_option('qt')
Packit Service b23acc
if enable_qt
Packit Service b23acc
  add_languages('cpp')
Packit Service b23acc
Packit Service b23acc
  qt_core_dep = dependency('QtCore', version: '>= 4')
Packit Service b23acc
  qt_dbus_dep = dependency('QtDBus')
Packit Service b23acc
  qt_network_dep = dependency('QtNetwork')
Packit Service b23acc
Packit Service b23acc
  subdir('examples/C/qt')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
enable_docs = get_option('docs')
Packit Service b23acc
Packit Service b23acc
if enable_docs
Packit Service b23acc
  assert(enable_introspection, '-Ddocs=true requires -Dintrospection=true')
Packit Service b23acc
  assert(meson.version().version_compare('>= 0.46.0'), '-Ddocs requires meson >= 0.46')
Packit Service b23acc
  subdir('man')
Packit Service b23acc
  subdir('docs')
Packit Service b23acc
endif
Packit Service b23acc
Packit Service b23acc
configure_file(
Packit Service b23acc
  input: 'config.h.meson',
Packit Service b23acc
  output: '@BASENAME@',
Packit Service b23acc
  configuration: config_h,
Packit Service b23acc
)
Packit Service b23acc
Packit Service b23acc
config_extra_h = configuration_data()
Packit Service b23acc
Packit Service b23acc
config_extra_h.set_quoted('BINDIR',            nm_bindir)
Packit Service b23acc
config_extra_h.set_quoted('DATADIR',           nm_datadir)
Packit Service b23acc
config_extra_h.set_quoted('LIBEXECDIR',        nm_libexecdir)
Packit Service b23acc
config_extra_h.set_quoted('LOCALSTATEDIR',     nm_localstatedir)
Packit Service b23acc
config_extra_h.set_quoted('NMCONFDIR',         nm_pkgconfdir)
Packit Service b23acc
config_extra_h.set_quoted('NMLIBDIR',          nm_pkglibdir)
Packit Service b23acc
config_extra_h.set_quoted('NMLOCALEDIR',       nm_localedir)
Packit Service b23acc
config_extra_h.set_quoted('NMPLUGINDIR',       nm_plugindir)
Packit Service b23acc
config_extra_h.set_quoted('NMRUNDIR',          nm_pkgrundir)
Packit Service b23acc
config_extra_h.set_quoted('NMSTATEDIR',        nm_pkgstatedir)
Packit Service b23acc
config_extra_h.set_quoted('NMVPNDIR',          nm_vpndir)
Packit Service b23acc
config_extra_h.set_quoted('NM_BUILD_BUILDDIR', build_root)
Packit Service b23acc
config_extra_h.set_quoted('NM_BUILD_SRCDIR',   source_root)
Packit Service b23acc
if enable_ppp
Packit Service b23acc
    config_extra_h.set_quoted('PPPD_PLUGIN_DIR', pppd_plugin_dir)
Packit Service b23acc
endif
Packit Service b23acc
config_extra_h.set_quoted('PREFIX',            nm_prefix)
Packit Service b23acc
config_extra_h.set_quoted('RUNSTATEDIR',       nm_runstatedir)
Packit Service b23acc
config_extra_h.set_quoted('SYSCONFDIR',        nm_sysconfdir)
Packit Service b23acc
Packit Service b23acc
configure_file(
Packit Service b23acc
  input: 'config-extra.h.meson',
Packit Service b23acc
  output: '@BASENAME@',
Packit Service b23acc
  configuration: config_extra_h,
Packit Service b23acc
)
Packit Service b23acc
Packit Service b23acc
meson.add_install_script(
Packit Service b23acc
  join_paths('tools', 'meson-post-install.sh'),
Packit Service b23acc
  nm_datadir,
Packit Service b23acc
  nm_bindir,
Packit Service b23acc
  nm_pkgconfdir,
Packit Service b23acc
  nm_pkglibdir,
Packit Service b23acc
  nm_pkgstatedir,
Packit Service b23acc
  nm_mandir,
Packit Service b23acc
  nm_sysconfdir,
Packit Service b23acc
  enable_docs ? '1' : '0',
Packit Service b23acc
  enable_ifcfg_rh ? '1' : '0',
Packit Service b23acc
  enable_nm_cloud_setup ? '1' : '0',
Packit Service b23acc
  install_systemdunitdir ? '1' : '0',
Packit Service b23acc
)
Packit Service b23acc
Packit Service b23acc
output = '\nSystem paths:\n'
Packit Service b23acc
output += '  prefix: ' + nm_prefix + '\n'
Packit Service b23acc
output += '  exec_prefix: ' + nm_prefix + '\n'
Packit Service b23acc
output += '  systemdunitdir: ' + systemd_systemdsystemunitdir + '\n'
Packit Service b23acc
output += '  nmbinary: ' + nm_pkgsbindir + '\n'
Packit Service b23acc
output += '  nmconfdir: ' + nm_pkgconfdir + '\n'
Packit Service b23acc
output += '  nmlibdir: ' + nm_pkglibdir + '\n'
Packit Service b23acc
output += '  nmdatadir: ' + nm_pkgdatadir + '\n'
Packit Service b23acc
output += '  nmstatedir: ' + nm_pkgstatedir + '\n'
Packit Service b23acc
output += '  nmrundir: ' + nm_pkgrundir + '\n'
Packit Service b23acc
output += '  nmvpndir: ' + nm_vpndir + '\n'
Packit Service b23acc
output += '  nmplugindir: ' + nm_plugindir + '\n'
Packit Service b23acc
output += '  system-ca-path: ' + system_ca_path + '\n'
Packit Service b23acc
output += '\nPlatform:\n'
Packit Service b23acc
output += '  session tracking: ' + ','.join(session_trackers) + '\n'
Packit Service b23acc
output += '  suspend/resume: ' + suspend_resume + '\n'
Packit Service b23acc
output += '  policykit: ' + enable_polkit.to_string() + ' (default: ' + config_auth_polkit_default + ')'
Packit Service b23acc
if enable_polkit
Packit Service b23acc
  output += ' ('
Packit Service b23acc
  if enable_modify_system
Packit Service b23acc
    output += 'permissive'
Packit Service b23acc
  else
Packit Service b23acc
    output += 'restrictive'
Packit Service b23acc
  endif
Packit Service b23acc
  output += ' modify.system)'
Packit Service b23acc
endif
Packit Service b23acc
output += '\n'
Packit Service b23acc
output += '  selinux: ' + enable_selinux.to_string() + '\n'
Packit Service b23acc
output += '  systemd-journald: ' + enable_systemd_journal.to_string() + ' (default: logging.backend=' + config_logging_backend_default + ')\n'
Packit Service b23acc
output += '  hostname persist: ' + hostname_persist + '\n'
Packit Service b23acc
output += '  libaudit: ' + enable_libaudit.to_string() + ' (default: logging.audit=' + config_default_logging_audit + ')\n'
Packit Service b23acc
output += '\nFeatures:\n'
Packit Service b23acc
output += '  wext: ' + enable_wext.to_string() + '\n'
Packit Service b23acc
output += '  wifi: ' + enable_wifi.to_string() + '\n'
Packit Service b23acc
output += '  iwd:  ' + enable_iwd.to_string() + '\n'
Packit Service b23acc
output += '  pppd: ' + enable_ppp.to_string()
Packit Service b23acc
if enable_ppp
Packit Service b23acc
  output += ' ' + pppd_path + ' plugins:' + pppd_plugin_dir
Packit Service b23acc
endif
Packit Service b23acc
output += '\n'
Packit Service b23acc
output += '  modemmanager-1: ' + enable_modem_manager.to_string() + '\n'
Packit Service b23acc
output += '  ofono: ' + enable_ofono.to_string() + '\n'
Packit Service b23acc
output += '  concheck: ' + enable_concheck.to_string() + '\n'
Packit Service b23acc
output += '  libteamdctl: ' + enable_teamdctl.to_string() + '\n'
Packit Service b23acc
output += '  ovs: ' + enable_ovs.to_string() + '\n'
Packit Service b23acc
output += '  nmcli: ' + enable_nmcli.to_string() + '\n'
Packit Service b23acc
output += '  nmtui: ' + enable_nmtui.to_string() + '\n'
Packit Service b23acc
output += '  nm-cloud-setup: ' + enable_nm_cloud_setup.to_string() + '\n'
Packit Service b23acc
output += '\nConfiguration_plugins (main.plugins=' + config_plugins_default + ')\n'
Packit Service b23acc
output += '  ifcfg-rh: ' + enable_ifcfg_rh.to_string() + '\n'
Packit Service b23acc
output += '  ifupdown: ' + enable_ifupdown.to_string() + '\n'
Packit Service b23acc
output += '\nHandlers for /etc/resolv.conf:\n' + resolv_conf_summary
Packit Service b23acc
output += '\n'
Packit Service b23acc
output += '  config-dns-rc-manager-default: ' + config_dns_rc_manager_default + '\n'
Packit Service b23acc
output += '\nDHCP clients (default ' + config_dhcp_default + '):\n' + dhcp_summary
Packit Service b23acc
output += '\n'
Packit Service b23acc
output += '\nMiscellaneous:\n'
Packit Service b23acc
output += '  have introspection: ' + enable_introspection.to_string() + '\n'
Packit Service b23acc
output += '  build documentation and manpages: ' + enable_docs.to_string() + '\n'
Packit Service b23acc
output += '  firewalld zone for shared mode: ' + enable_firewalld_zone.to_string() + '\n'
Packit Service b23acc
# FIXME
Packit Service b23acc
#output += '  install pregenerated documentation and manpages: no
Packit Service b23acc
output += '  tests: ' + tests + '\n'
Packit Service b23acc
output += '  more-asserts: @0@\n'.format(more_asserts)
Packit Service b23acc
output += '  more-logging: ' + more_logging.to_string() + '\n'
Packit Service b23acc
output += '  warning-level: ' + get_option('warning_level') + '\n'
Packit Service b23acc
output += '  valgrind: ' + enable_valgrind.to_string()
Packit Service b23acc
if enable_valgrind
Packit Service b23acc
  output += ' ' + valgrind.path()
Packit Service b23acc
endif
Packit Service b23acc
output += '\n'
Packit Service b23acc
output += '  code coverage: ' + get_option('b_coverage').to_string() + '\n'
Packit Service b23acc
output += '  LTO: ' + enable_lto.to_string() + '\n'
Packit Service b23acc
output += '  Linker garbage collection: ' + enable_ld_gc.to_string() + '\n'
Packit Service b23acc
output += '  JSON validation for libnm: ' + enable_json_validation.to_string() + '\n'
Packit Service b23acc
output += '  crypto: ' + crypto + '\n'
Packit Service b23acc
output += '  sanitizers: ' + get_option('b_sanitize') + '\n'
Packit Service b23acc
output += '  Mozilla Public Suffix List: ' + enable_libpsl.to_string() + '\n'
Packit Service b23acc
output += '  vapi: ' + enable_vapi.to_string() + '\n'
Packit Service b23acc
output += '  ebpf: ' + enable_ebpf.to_string() + '\n'
Packit Service b23acc
message(output)