Blame meson.build

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