Blame meson.build

Packit fabffb
project(
Packit fabffb
  'network-manager-applet', 'c',
Packit Service 639700
  version: '1.18.0',
Packit fabffb
  license: 'GPL2+',
Packit fabffb
  default_options: [
Packit fabffb
    'buildtype=debugoptimized',
Packit fabffb
    'c_std=gnu99'
Packit fabffb
  ],
Packit fabffb
  meson_version: '>= 0.46.0'
Packit fabffb
)
Packit fabffb
Packit fabffb
nma_name = 'nm-applet'
Packit fabffb
Packit Service 639700
nm_applet_version = meson.project_version()
Packit Service 639700
version_array = nm_applet_version.split('.')
Packit Service 639700
nm_applet_major_version = version_array[0].to_int()
Packit Service 639700
nm_applet_minor_version = version_array[1].to_int()
Packit Service 639700
nm_applet_micro_version = version_array[2].to_int()
Packit fabffb
Packit fabffb
nma_gir_version = '1.0'
Packit fabffb
nma_gir_prefix = 'NMA'
Packit fabffb
Packit fabffb
nma_prefix = get_option('prefix')
Packit fabffb
nma_bindir = join_paths(nma_prefix, get_option('bindir'))
Packit fabffb
nma_datadir = join_paths(nma_prefix, get_option('datadir'))
Packit fabffb
nma_includedir = join_paths(nma_prefix, get_option('includedir'))
Packit fabffb
nma_libdir = join_paths(nma_prefix, get_option('libdir'))
Packit fabffb
nma_libexecdir = join_paths(nma_prefix, get_option('libexecdir'))
Packit fabffb
nma_localedir = join_paths(nma_prefix, get_option('localedir'))
Packit fabffb
nma_mandir = join_paths(nma_prefix, get_option('mandir'))
Packit fabffb
nma_sysconfdir = join_paths(nma_prefix, get_option('sysconfdir'))
Packit fabffb
Packit fabffb
nma_appdir = join_paths(nma_datadir, 'applications')
Packit fabffb
nma_autostartdir = join_paths(nma_sysconfdir, 'xdg', 'autostart')
Packit fabffb
nma_icondir = join_paths(nma_datadir, 'icons')
Packit fabffb
Packit fabffb
soversion = 0
Packit fabffb
current = 0
Packit fabffb
revision = 0
Packit fabffb
libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
Packit fabffb
Packit fabffb
nma_debug = get_option('buildtype').contains('debug')
Packit fabffb
Packit fabffb
cc = meson.get_compiler('c')
Packit fabffb
Packit fabffb
config_h = configuration_data()
Packit fabffb
Packit fabffb
# defines
Packit fabffb
config_h.set_quoted('GETTEXT_PACKAGE', nma_name)
Packit Service 639700
config_h.set_quoted('VERSION', nm_applet_version)
Packit fabffb
Packit fabffb
# types
Packit fabffb
if not cc.has_type('pid_t', prefix: '#include<sys/types.h>')
Packit fabffb
  config_h.set('pid_t', 'int')
Packit fabffb
endif
Packit fabffb
Packit fabffb
# compiler flags
Packit fabffb
common_flags = []
Packit fabffb
common_ldflags = []
Packit fabffb
Packit fabffb
enable_ld_gc = get_option('ld_gc')
Packit fabffb
if enable_ld_gc
Packit fabffb
  test_cflags = [
Packit fabffb
    '-fdata-sections',
Packit fabffb
    '-ffunction-sections',
Packit fabffb
  ]
Packit fabffb
Packit fabffb
  test_ldflags = ['-Wl,--gc-sections']
Packit fabffb
Packit fabffb
  assert(cc.has_multi_arguments(test_cflags), 'Unused symbol eviction requested but not supported. Use -Dld_gc=false to build without it.')
Packit fabffb
  assert(cc.has_multi_link_arguments(test_ldflags), 'Unused symbol eviction requested but not supported. Use -Dld_gc=false to build without it.')
Packit fabffb
Packit fabffb
  common_flags += test_cflags
Packit fabffb
  common_ldflags += test_ldflags
Packit fabffb
endif
Packit fabffb
Packit fabffb
if nma_debug
Packit fabffb
  test_cflags = [
Packit fabffb
    '-Wdeclaration-after-statement',
Packit fabffb
    '-Wformat=2',
Packit fabffb
    '-Wimplicit-fallthrough',
Packit fabffb
    '-Winit-self',
Packit fabffb
    '-Wmissing-declarations',
Packit fabffb
    '-Wmissing-include-dirs',
Packit fabffb
    '-Wmissing-prototypes',
Packit fabffb
    '-Wno-duplicate-decl-specifier',
Packit fabffb
    '-Wno-format-truncation',
Packit fabffb
    '-Wno-format-y2k',
Packit fabffb
    '-Wno-missing-field-initializers',
Packit fabffb
    '-Wno-pragmas',
Packit fabffb
    '-Wno-sign-compare',
Packit fabffb
    '-Wno-unused-parameter',
Packit fabffb
    '-Wshadow',
Packit fabffb
    '-Wstrict-prototypes',
Packit fabffb
    '-Wundef',
Packit fabffb
    '-Wvla',
Packit fabffb
  ]
Packit fabffb
Packit fabffb
  common_flags += cc.get_supported_arguments(test_cflags)
Packit fabffb
endif
Packit fabffb
Packit fabffb
add_project_arguments(common_flags, language: 'c')
Packit fabffb
add_project_link_arguments(common_ldflags, language: 'c')
Packit fabffb
Packit fabffb
linker_script_ver = join_paths(meson.source_root(), 'linker-script-binary.ver')
Packit fabffb
Packit fabffb
gio_dep = dependency('gio-2.0', version: '>= 2.38')
Packit fabffb
gmodule_export_dep = dependency('gmodule-export-2.0')
Packit fabffb
libsecret_dep = dependency('libsecret-1', version: '>= 0.18')
Packit Service 639700
libnma_dep = dependency('libnma', version: '>= 1.8.27')
Packit fabffb
Packit fabffb
m_dep = cc.find_library('m')
Packit fabffb
Packit fabffb
# Check for gtk+
Packit fabffb
gtk_req_version = '>= 3.10'
Packit fabffb
Packit fabffb
gtk_dep = declare_dependency(
Packit fabffb
  dependencies: dependency('gtk+-3.0', version: gtk_req_version),
Packit fabffb
  compile_args: [
Packit fabffb
    '-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_10',
Packit fabffb
    '-DGDK_VERSION_MAX_ALLOWED=GDK_VERSION_3_10'
Packit fabffb
  ]
Packit fabffb
)
Packit fabffb
Packit fabffb
# Check for gudev
Packit fabffb
gudev_dep = dependency('gudev-1.0', version: '>= 147')
Packit fabffb
Packit fabffb
# Check for libnotify >= 0.7
Packit fabffb
libnotify_dep = dependency('libnotify', version: '>= 0.4.3')
Packit fabffb
config_h.set10('HAVE_LIBNOTIFY_07', libnotify_dep.found() and libnotify_dep.version().version_compare('>= 0.7'),
Packit fabffb
               description: 'Define if you have libnotify 0.7 or later')
Packit fabffb
Packit fabffb
# API documentation
Packit fabffb
nm_req_version = '>= 1.7'
Packit fabffb
Packit fabffb
deps = [
Packit fabffb
  gio_dep,
Packit fabffb
  gmodule_export_dep,
Packit fabffb
  dependency('libnm', version: nm_req_version)
Packit fabffb
]
Packit fabffb
Packit fabffb
cflags = [
Packit fabffb
  '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38',
Packit fabffb
  '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38',
Packit Service 639700
  '-DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_16',
Packit Service 639700
  '-DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_16',
Packit Service 639700
  '-DNMA_VERSION_MIN_REQUIRED=NMA_VERSION_1_8_28',
Packit Service 639700
  '-DNMA_VERSION_MAX_ALLOWED=NMA_VERSION_1_8_28',
Packit fabffb
]
Packit fabffb
Packit fabffb
libnm_dep = declare_dependency(
Packit fabffb
  dependencies: deps,
Packit fabffb
  compile_args: cflags
Packit fabffb
)
Packit fabffb
Packit Service 639700
# No such thing yet, just same lame duck placeholders.
Packit Service 639700
# it may actually end up being called differently.
Packit Service 639700
config_h.set10('WITH_GCR_GTK4', false)
Packit fabffb
Packit fabffb
enable_appindicator = get_option('appindicator')
Packit fabffb
if enable_appindicator == 'auto' or enable_appindicator == 'yes'
Packit fabffb
  appindicator_dep = dependency('ayatana-appindicator3-0.1', required: false)
Packit fabffb
  if appindicator_dep.found()
Packit fabffb
    enable_appindicator = 'ayatana'
Packit fabffb
  else
Packit fabffb
    appindicator_dep = dependency('appindicator3-0.1', required: false)
Packit fabffb
    if appindicator_dep.found()
Packit fabffb
      enable_appindicator = 'ubuntu'
Packit fabffb
    else
Packit fabffb
      assert(appindicator_dep.found(), 'Neither Ubuntu\'s AppIndicator nor Ayatana AppIndicator found.')
Packit fabffb
    endif
Packit fabffb
  endif
Packit fabffb
elif enable_appindicator == 'ayatana'
Packit fabffb
  appindicator_dep = dependency('ayatana-appindicator3-0.1')
Packit fabffb
elif enable_appindicator == 'ubuntu'
Packit fabffb
  appindicator_dep = dependency('appindicator3-0.1')
Packit fabffb
endif
Packit fabffb
Packit fabffb
if enable_appindicator == 'no'
Packit fabffb
  config_h.set('WITH_APPINDICATOR', false)
Packit fabffb
  config_h.set('USE_AYATANA_INDICATORS', false)
Packit fabffb
elif enable_appindicator == 'ubuntu'
Packit fabffb
  dbusmenu_dep = dependency('dbusmenu-gtk3-0.4', version: '>= 16.04.0')
Packit fabffb
  config_h.set10('WITH_APPINDICATOR', true)
Packit fabffb
  config_h.set10('USE_AYATANA_INDICATORS', false)
Packit fabffb
elif enable_appindicator == 'ayatana'
Packit fabffb
  dbusmenu_dep = dependency('dbusmenu-gtk3-0.4', version: '>= 16.04.0')
Packit fabffb
  config_h.set10('WITH_APPINDICATOR', true)
Packit fabffb
  config_h.set10('USE_AYATANA_INDICATORS', true)
Packit fabffb
else
Packit fabffb
  error('Options allowed for -Dappindicator=<str> are: no, yes|auto, ayatana, ubuntu.')
Packit fabffb
endif
Packit fabffb
Packit fabffb
# ModemManager1 with libmm-glib for WWAN support
Packit fabffb
enable_wwan = get_option('wwan')
Packit fabffb
if enable_wwan
Packit fabffb
  mm_glib_dep = dependency('mm-glib', required: false)
Packit fabffb
  assert(mm_glib_dep.found(), 'libmm-glib is needed for WWAN support. Use -Dwwan=false to build without it.')
Packit fabffb
endif
Packit fabffb
config_h.set10('WITH_WWAN', enable_wwan)
Packit fabffb
Packit fabffb
# SELinux
Packit fabffb
enable_selinux = get_option('selinux')
Packit fabffb
if enable_selinux
Packit fabffb
  libselinux_dep = dependency('libselinux', required: false)
Packit fabffb
  assert(libselinux_dep.found(), 'libselinux is needed for SELinux label support in configuration editor. Use -Dselinux=false to build without it.')
Packit fabffb
endif
Packit fabffb
config_h.set10('WITH_SELINUX', enable_selinux)
Packit fabffb
Packit fabffb
# Jansson for team configuration editing
Packit fabffb
enable_team = get_option('team')
Packit fabffb
if enable_team
Packit fabffb
  jansson_dep = dependency('jansson', version: '>= 2.7', required: false)
Packit fabffb
  assert(jansson_dep.found(), 'jansson is needed for team configuration editor. Use -Dteam=false to build without it.')
Packit fabffb
endif
Packit fabffb
config_h.set10('WITH_JANSSON', enable_team)
Packit fabffb
Packit fabffb
more_asserts = get_option('more_asserts')
Packit fabffb
if more_asserts == 'no'
Packit fabffb
  more_asserts = 0
Packit fabffb
elif more_asserts == 'yes'
Packit fabffb
  more_asserts = 100
Packit fabffb
else
Packit fabffb
  more_asserts = more_asserts.to_int()
Packit fabffb
endif
Packit fabffb
config_h.set('NM_MORE_ASSERTS', more_asserts)
Packit fabffb
Packit fabffb
gnome = import('gnome')
Packit fabffb
i18n = import('i18n')
Packit fabffb
pkg = import('pkgconfig')
Packit fabffb
Packit fabffb
po_dir = join_paths(meson.source_root(), 'po')
Packit fabffb
Packit fabffb
top_inc = include_directories('.')
Packit fabffb
Packit fabffb
subdir('po')
Packit fabffb
subdir('icons')
Packit fabffb
subdir('shared')
Packit fabffb
subdir('src')
Packit fabffb
subdir('man')
Packit fabffb
Packit fabffb
i18n = import('i18n')
Packit fabffb
Packit fabffb
# FIXME: The same target can not be copied into two directories.
Packit fabffb
#        There is a workaround in meson_post_install.py until proper solution arises:
Packit fabffb
#        https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
Packit fabffb
desktop_files = [
Packit fabffb
  'nm-applet',
Packit fabffb
  'nm-connection-editor',
Packit fabffb
]
Packit fabffb
Packit fabffb
desktop_file_validate = find_program('desktop-file-validate', required: false)
Packit fabffb
Packit fabffb
foreach desktop: desktop_files
Packit fabffb
  i18n.merge_file(
Packit fabffb
    desktop + '-desktop',
Packit fabffb
    input: desktop + '.desktop.in',
Packit fabffb
    output: desktop + '.desktop',
Packit fabffb
    install: true,
Packit fabffb
    install_dir: nma_appdir,
Packit fabffb
    po_dir: po_dir,
Packit fabffb
    type: 'desktop',
Packit fabffb
  )
Packit fabffb
Packit fabffb
  if desktop_file_validate.found()
Packit fabffb
    test('validate-' + desktop + '-desktop',
Packit fabffb
      desktop_file_validate,
Packit fabffb
      args: desktop + '.desktop',
Packit fabffb
      workdir: meson.current_build_dir(),
Packit fabffb
    )
Packit fabffb
  endif
Packit fabffb
endforeach
Packit fabffb
Packit fabffb
appdata = 'nm-connection-editor.appdata.xml'
Packit fabffb
Packit fabffb
i18n.merge_file(
Packit fabffb
  'desktop',
Packit fabffb
  input: appdata + '.in',
Packit fabffb
  output: appdata,
Packit fabffb
  install: true,
Packit fabffb
  install_dir: join_paths(nma_datadir, 'metainfo'),
Packit fabffb
  po_dir: po_dir,
Packit fabffb
)
Packit fabffb
Packit fabffb
appstream_util = find_program('appstream-util', required: false)
Packit fabffb
if appstream_util.found()
Packit fabffb
  test('validate-appdata',
Packit fabffb
    appstream_util,
Packit fabffb
    args: ['validate', '--nonet', appdata],
Packit fabffb
    workdir: meson.current_build_dir(),
Packit fabffb
  )
Packit fabffb
endif
Packit fabffb
Packit fabffb
install_data(
Packit fabffb
  'nm-applet.convert',
Packit fabffb
  install_dir: join_paths(nma_datadir, 'GConf', 'gsettings')
Packit fabffb
)
Packit fabffb
Packit fabffb
config = 'config.h'
Packit fabffb
Packit fabffb
configure_file(
Packit fabffb
  input: config + '.meson',
Packit fabffb
  output: config,
Packit fabffb
  configuration: config_h
Packit fabffb
)
Packit fabffb
Packit fabffb
meson.add_install_script(
Packit fabffb
  'meson_post_install.py',
Packit fabffb
  nma_datadir,
Packit fabffb
  nma_sysconfdir
Packit fabffb
)
Packit fabffb
Packit Service 639700
output = '\n'
Packit fabffb
output += '  LTO: ' + get_option('b_lto').to_string() + '\n'
Packit fabffb
output += '  Linker garbage collection: ' + enable_ld_gc.to_string() + '\n'
Packit fabffb
output += '  libappindicator: ' + enable_appindicator
Packit fabffb
message(output)