summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIñigo Martínez <inigomartinez@gmail.com>2017-09-25 12:27:58 +0200
committerThomas Haller <thaller@redhat.com>2017-10-12 12:15:47 +0200
commit1c1168d4c7a9ed600ea880ed953b9d05b8f04582 (patch)
treefd4a0a391da169452e214161231498369c834a7a
parentd1b7b6a82a17a2f40dcadfafb1c2ea746d869aae (diff)
downloadnetwork-manager-applet-1c1168d4c7a9ed600ea880ed953b9d05b8f04582.tar.gz
build: Port to meson build system
meson is a build system focused on speed an ease of use, which helps speeding up the software development. This patch adds meson support along autotools. https://bugzilla.gnome.org/show_bug.cgi?id=788146
-rw-r--r--Makefile.am31
-rw-r--r--config.h.meson144
-rw-r--r--gtkdocentities.ent.in7
-rw-r--r--icons/meson.build107
-rw-r--r--man/meson.build17
-rw-r--r--meson.build548
-rw-r--r--meson_options.txt11
-rw-r--r--meson_post_install.py21
-rw-r--r--po/meson.build1
-rw-r--r--shared/meson.build3
-rw-r--r--src/connection-editor/meson.build122
-rw-r--r--src/libnm-gtk/meson.build151
-rw-r--r--src/libnma/meson.build148
-rw-r--r--src/meson.build114
-rw-r--r--src/utils/meson.build59
-rw-r--r--src/wireless-security/meson.build86
16 files changed, 1564 insertions, 6 deletions
diff --git a/Makefile.am b/Makefile.am
index 58c536f2..cb583b1b 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -153,6 +153,8 @@ iconscalable_DATA = \
icons/scalable/nm-no-connection.svg
EXTRA_DIST += $(iconscalable_DATA)
+EXTRA_DIST += icons/meson.build
+
###############################################################################
shared_files = \
@@ -160,7 +162,6 @@ shared_files = \
shared/nm-utils/nm-shared-utils.h \
$(NULL)
-
noinst_LTLIBRARIES += src/utils/libutils-libnm.la
src_utils_libutils_libnm_la_CPPFLAGS = \
@@ -213,6 +214,8 @@ src_utils_tests_test_utils_LDADD = \
$(GTK_LIBS) \
$(LIBNM_LIBS)
+EXTRA_DIST += src/utils/meson.build
+
###############################################################################
src/wireless-security/ws-resources.h: src/wireless-security/ws.gresource.xml
@@ -325,7 +328,8 @@ EXTRA_DIST += \
src/wireless-security/ws-wep-key.ui \
src/wireless-security/ws-wpa-eap.ui \
src/wireless-security/ws-wpa-psk.ui \
- src/wireless-security/ws.gresource.xml
+ src/wireless-security/ws.gresource.xml \
+ src/wireless-security/meson.build
###############################################################################
@@ -456,6 +460,7 @@ EXTRA_DIST += \
src/libnm-gtk/check-exports.sh \
src/libnm-gtk/wifi.ui \
src/libnm-gtk/nm.gresource.xml \
+ src/libnm-gtk/meson.build \
\
src/libnm-gtk/tests/iso3166-test.xml \
src/libnm-gtk/tests/serviceproviders-test.xml \
@@ -586,7 +591,8 @@ EXTRA_DIST += \
src/libnma/wifi.ui \
src/libnma/nma-pkcs11-token-login-dialog.ui \
src/libnma/nma-pkcs11-cert-chooser-dialog.ui \
- src/libnma/nma.gresource.xml
+ src/libnma/nma.gresource.xml \
+ src/libnma/meson.build
###############################################################################
@@ -747,7 +753,8 @@ EXTRA_DIST += \
src/connection-editor/ce-ppp-auth-methods.ui \
src/connection-editor/nm-connection-editor.ui \
src/connection-editor/nm-connection-list.ui \
- src/connection-editor/ce.gresource.xml
+ src/connection-editor/ce.gresource.xml \
+ src/connection-editor/meson.build
###############################################################################
@@ -850,7 +857,8 @@ EXTRA_DIST += \
src/8021x.ui \
src/gsm-unlock.ui \
src/info.ui \
- src/applet.gresource.xml
+ src/applet.gresource.xml \
+ src/meson.build
###############################################################################
@@ -864,6 +872,7 @@ EXTRA_DIST += \
shared/nm-utils/nm-vpn-editor-plugin-call.h \
shared/nm-default.h \
shared/nm-libnm-compat.h \
+ shared/meson.build \
$(NULL)
###############################################################################
@@ -872,6 +881,8 @@ man_MANS += \
man/nm-applet.1 \
man/nm-connection-editor.1
+EXTRA_DIST += man/meson.build
+
###############################################################################
DOC_MODULE = libnma
@@ -923,7 +934,15 @@ EXTRA_DIST += \
intltool-merge.in \
intltool-update.in \
Makefile.glib \
- autogen.sh
+ autogen.sh \
+ meson.build \
+ meson_options.txt \
+ meson_post_install.py \
+ config.h.meson \
+ gtkdocentities.ent.in \
+ \
+ po/meson.build
+
autostartdir = $(sysconfdir)/xdg/autostart
autostart_in_files = nm-applet.desktop.in
diff --git a/config.h.meson b/config.h.meson
new file mode 100644
index 00000000..0c71ba53
--- /dev/null
+++ b/config.h.meson
@@ -0,0 +1,144 @@
+/* Gettext package */
+#mesondefine GETTEXT_PACKAGE
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#mesondefine HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
+ CoreFoundation framework. */
+#mesondefine HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#mesondefine HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define to 1 if you have the `dcgettext' function. */
+#mesondefine HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#mesondefine HAVE_DLFCN_H
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#mesondefine HAVE_GETTEXT
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#mesondefine HAVE_INTTYPES_H
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#mesondefine HAVE_LC_MESSAGES
+
+/* Define if you have libnotify 0.7 or later */
+#mesondefine HAVE_LIBNOTIFY_07
+
+/* Define to 1 if you have the <locale.h> header file. */
+#mesondefine HAVE_LOCALE_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#mesondefine HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#mesondefine HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#mesondefine HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#mesondefine HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#mesondefine HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#mesondefine HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#mesondefine HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#mesondefine HAVE_UNISTD_H
+
+/* ISO codes prefix */
+#mesondefine ISO_CODES_PREFIX
+
+/* git commit id of the original source code version */
+#mesondefine NMA_GIT_SHA
+
+/* Define if more asserts are enabled */
+#mesondefine NM_MORE_ASSERTS
+
+/* Name of package */
+#mesondefine PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#mesondefine PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#mesondefine PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#mesondefine PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#mesondefine PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#mesondefine PACKAGE_URL
+
+/* Define to the version of this package. */
+#mesondefine PACKAGE_VERSION
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+/* Enable threading extensions on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+/* Version number of package */
+#mesondefine VERSION
+
+/* Enable using libappindicator */
+#mesondefine WITH_APPINDICATOR
+
+/* Define if Gcr is available */
+#mesondefine WITH_GCR
+
+/* Define if Jansson is available */
+#mesondefine WITH_JANSSON
+
+/* Define if libselinux is available */
+#mesondefine WITH_SELINUX
+
+/* Define if you have ModemManager/WWAN support */
+#mesondefine WITH_WWAN
+
+/* Define to 1 if on MINIX. */
+#mesondefine _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+ this defined. */
+#mesondefine _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#mesondefine _POSIX_SOURCE
+
+/* Define to `int' if <sys/types.h> does not define. */
+#mesondefine pid_t
diff --git a/gtkdocentities.ent.in b/gtkdocentities.ent.in
new file mode 100644
index 00000000..d2a068a1
--- /dev/null
+++ b/gtkdocentities.ent.in
@@ -0,0 +1,7 @@
+<!ENTITY package @PACKAGE@>
+<!ENTITY package_bugreport @PACKAGE_BUGREPORT@>
+<!ENTITY package_name @PACKAGE_NAME@>
+<!ENTITY package_string @PACKAGE_STRING@>
+<!ENTITY package_tarname @PACKAGE_TARNAME@>
+<!ENTITY package_url @PACKAGE_URL@>
+<!ENTITY package_version @PACKAGE_VERSION@>
diff --git a/icons/meson.build b/icons/meson.build
new file mode 100644
index 00000000..c06cefa9
--- /dev/null
+++ b/icons/meson.build
@@ -0,0 +1,107 @@
+icons_16 = [
+ 'nm-device-wired.png',
+ 'nm-no-connection.png',
+ 'nm-vpn-standalone-lock.png'
+]
+
+icons_22 = [
+ 'nm-adhoc.png',
+ 'nm-device-wired.png',
+ 'nm-device-wwan.png',
+ 'nm-mb-roam.png',
+ 'nm-no-connection.png',
+ 'nm-secure-lock.png',
+ 'nm-signal-00.png',
+ 'nm-signal-100.png',
+ 'nm-signal-25.png',
+ 'nm-signal-50.png',
+ 'nm-signal-75.png',
+ 'nm-stage01-connecting01.png',
+ 'nm-stage01-connecting02.png',
+ 'nm-stage01-connecting03.png',
+ 'nm-stage01-connecting04.png',
+ 'nm-stage01-connecting05.png',
+ 'nm-stage01-connecting06.png',
+ 'nm-stage01-connecting07.png',
+ 'nm-stage01-connecting08.png',
+ 'nm-stage01-connecting09.png',
+ 'nm-stage01-connecting10.png',
+ 'nm-stage01-connecting11.png',
+ 'nm-stage02-connecting01.png',
+ 'nm-stage02-connecting02.png',
+ 'nm-stage02-connecting03.png',
+ 'nm-stage02-connecting04.png',
+ 'nm-stage02-connecting05.png',
+ 'nm-stage02-connecting06.png',
+ 'nm-stage02-connecting07.png',
+ 'nm-stage02-connecting08.png',
+ 'nm-stage02-connecting09.png',
+ 'nm-stage02-connecting10.png',
+ 'nm-stage02-connecting11.png',
+ 'nm-stage03-connecting01.png',
+ 'nm-stage03-connecting02.png',
+ 'nm-stage03-connecting03.png',
+ 'nm-stage03-connecting04.png',
+ 'nm-stage03-connecting05.png',
+ 'nm-stage03-connecting06.png',
+ 'nm-stage03-connecting07.png',
+ 'nm-stage03-connecting08.png',
+ 'nm-stage03-connecting09.png',
+ 'nm-stage03-connecting10.png',
+ 'nm-stage03-connecting11.png',
+ 'nm-tech-3g.png',
+ 'nm-tech-cdma-1x.png',
+ 'nm-tech-edge.png',
+ 'nm-tech-evdo.png',
+ 'nm-tech-gprs.png',
+ 'nm-tech-hspa.png',
+ 'nm-tech-lte.png',
+ 'nm-tech-umts.png',
+ 'nm-vpn-active-lock.png',
+ 'nm-vpn-connecting01.png',
+ 'nm-vpn-connecting02.png',
+ 'nm-vpn-connecting03.png',
+ 'nm-vpn-connecting04.png',
+ 'nm-vpn-connecting05.png',
+ 'nm-vpn-connecting06.png',
+ 'nm-vpn-connecting07.png',
+ 'nm-vpn-connecting08.png',
+ 'nm-vpn-connecting09.png',
+ 'nm-vpn-connecting10.png',
+ 'nm-vpn-connecting11.png',
+ 'nm-vpn-connecting12.png',
+ 'nm-vpn-connecting13.png',
+ 'nm-vpn-connecting14.png',
+ 'nm-wwan-tower.png'
+]
+
+icons_32 = [
+ 'nm-device-wired.png',
+ 'nm-no-connection.png'
+]
+
+icons_48 = ['nm-device-wireless.png']
+
+icons_scalable = [
+ 'nm-device-wired.svg',
+ 'nm-no-connection.svg'
+]
+
+icons = [
+ # local dir, install dir, files
+ ['16', '16x16', icons_16],
+ ['22', '22x22', icons_22],
+ ['32', '32x32', icons_32],
+ ['48', '48x48', icons_48],
+ ['scalable', 'scalable', icons_scalable]
+]
+
+foreach icon: icons
+ icon_dir = join_paths(nma_datadir, 'icons', 'hicolor', icon[1], 'apps')
+ foreach name: icon[2]
+ install_data(
+ join_paths(icon[0], name),
+ install_dir: icon_dir
+ )
+ endforeach
+endforeach
diff --git a/man/meson.build b/man/meson.build
new file mode 100644
index 00000000..4a12eff6
--- /dev/null
+++ b/man/meson.build
@@ -0,0 +1,17 @@
+mans = [
+ 'nm-applet.1',
+ 'nm-connection-editor.1'
+]
+
+man1_dir = join_paths(nma_mandir, 'man1')
+
+foreach man: mans
+ configure_file(
+ input: man + '.in',
+ output: man,
+ install: true,
+ install_dir: man1_dir,
+ # FIXME: empty configuration
+ configuration: configuration_data()
+ )
+endforeach
diff --git a/meson.build b/meson.build
new file mode 100644
index 00000000..1aa233ed
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,548 @@
+project(
+ 'nm-applet', 'c',
+ version: '1.8.3',
+ license: 'GPL2+',
+ default_options: [
+ 'b_lundef=true',
+ 'buildtype=debugoptimized',
+ 'c_std=gnu99',
+ 'warning_level=1'
+ ],
+ meson_version: '>= 0.42.0'
+)
+
+nma_long_name = 'network-manager-applet'
+
+nma_version = meson.project_version()
+version_array = nma_version.split('.')
+nma_major_version = version_array[0].to_int()
+nma_minor_version = version_array[1].to_int()
+nma_micro_version = version_array[2].to_int()
+
+nma_gir_version = '1.0'
+nma_gir_prefix = 'NMA'
+
+nma_gir_ns = 'NMA'
+nma_gtk_gir_ns = 'NMGtk'
+
+nma_prefix = get_option('prefix')
+nma_bindir = join_paths(nma_prefix, get_option('bindir'))
+nma_datadir = join_paths(nma_prefix, get_option('datadir'))
+nma_includedir = join_paths(nma_prefix, get_option('includedir'))
+nma_libdir = join_paths(nma_prefix, get_option('libdir'))
+nma_libexecdir = join_paths(nma_prefix, get_option('libexecdir'))
+nma_localedir = join_paths(nma_prefix, get_option('localedir'))
+nma_mandir = join_paths(nma_prefix, get_option('mandir'))
+nma_sysconfdir = join_paths(nma_prefix, get_option('sysconfdir'))
+
+nma_appdir = join_paths(nma_datadir, 'applications')
+nma_autostartdir = join_paths(nma_sysconfdir, 'xdg', 'autostart')
+nma_icondir = join_paths(nma_datadir, 'icons')
+
+soversion = 0
+current = 0
+revision = 0
+libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
+
+nma_debug = get_option('buildtype').contains('debug')
+
+cc = meson.get_compiler('c')
+
+config_h = configuration_data()
+
+# defines
+set_defines = [
+ # package
+ ['PACKAGE', nma_long_name],
+ ['PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=NetworkManager'],
+ ['PACKAGE_NAME', meson.project_name()],
+ ['PACKAGE_STRING', '@0@ @1@'.format(meson.project_name(), nma_version)],
+ ['PACKAGE_TARNAME', nma_long_name],
+ ['PACKAGE_URL', ''],
+ ['PACKAGE_VERSION', nma_version],
+ ['VERSION', nma_version],
+ # i18n
+ ['GETTEXT_PACKAGE', meson.project_name()]
+]
+
+foreach define: set_defines
+ config_h.set_quoted(define[0], define[1])
+endforeach
+
+res = run_command(find_program('git'), 'rev-parse', '--verify', '-q', 'HEAD')
+config_h.set_quoted('NMA_GIT_SHA', res.stdout().strip())
+
+# headers
+check_headers = [
+ ['HAVE_DLFCN_H', 'dlfcn.h'],
+ ['HAVE_INTTYPES_H', 'inttypes.h'],
+ ['HAVE_LOCALE_H', 'locale.h'],
+ ['HAVE_MEMORY_H', 'memory.h'],
+ ['HAVE_STDINT_H', 'stdint.h'],
+ ['HAVE_STDLIB_H', 'stdlib.h'],
+ ['HAVE_STRINGS_H', 'strings.h'],
+ ['HAVE_STRING_H', 'string.h'],
+ ['HAVE_SYS_STAT_H', 'sys/stat.h'],
+ ['HAVE_SYS_TYPES_H', 'sys/types.h'],
+ ['HAVE_UNISTD_H', 'unistd.h']
+]
+
+foreach header: check_headers
+ config_h.set(header[0], cc.has_header(header[1]))
+endforeach
+
+# functions
+check_functions = [
+ # i18n
+ ['HAVE_DCGETTEXT', 'dcgettext'],
+ ['HAVE_GETTEXT', 'gettext'],
+ ['HAVE_ICONV', 'iconv']
+]
+
+if host_machine.system().contains('darwin')
+ check_functions += [
+ ['HAVE_CFLOCALECOPYCURRENT', 'CFLocaleCopyCurrent'],
+ ['HAVE_CFPREFERENCESCOPYAPPVALUE', 'CFPreferencesCopyAppValue']
+ ]
+endif
+
+foreach func: check_functions
+ config_h.set(func[0], cc.has_function(func[1]))
+endforeach
+
+# symbols
+check_symbols = [
+ # i18n
+ ['HAVE_LC_MESSAGES', 'locale.h', 'LC_MESSAGES'],
+ ['HAVE_BIND_TEXTDOMAIN_CODESET', 'libintl.h', 'bind_textdomain_codeset']
+]
+
+foreach symbol: check_symbols
+ config_h.set(symbol[0], cc.has_header_symbol(symbol[1], symbol[2]))
+endforeach
+
+# types
+check_types = [
+ # type, header, fallback type
+ ['pid_t', 'sys/types.h', 'int']
+]
+
+foreach type: check_types
+ if not cc.has_type(type[0], prefix: '#include<@0@>'.format(type[1]))
+ config_h.set(type[0], type[2])
+ endif
+endforeach
+
+# compiler flags
+common_flags = ['-DHAVE_CONFIG_H']
+common_ldflags = []
+
+enable_ld_gc = get_option('enable-ld-gc')
+if enable_ld_gc
+ test_cflags = [
+ '-fdata-sections',
+ '-ffunction-sections',
+ ]
+
+ test_ldflags = ['-Wl,--gc-sections']
+
+ foreach cflag: test_cflags + test_ldflags
+ assert(cc.has_argument(cflag), 'Unused symbol eviction requested but not supported. Use -Denable-ld-gc=false to build without it.')
+ endforeach
+
+ common_flags += test_cflags
+ common_ldflags += test_ldflags
+endif
+
+if nma_debug
+ test_cflags = [
+ '-Wdeclaration-after-statement',
+ '-Wfloat-equal',
+ '-Wformat=2',
+ '-Wimplicit-fallthrough',
+ '-Winit-self',
+ '-Wmissing-declarations',
+ '-Wmissing-include-dirs',
+ '-Wmissing-prototypes',
+ '-Wno-duplicate-decl-specifier',
+ '-Wno-format-truncation',
+ '-Wno-format-y2k',
+ '-Wno-missing-field-initializers',
+ '-Wno-pragmas',
+ '-Wno-sign-compare',
+ '-Wno-unused-but-set-variable',
+ '-Wno-unused-parameter',
+ '-Wshadow',
+ '-Wstrict-prototypes',
+ '-Wundef'
+ ]
+
+ foreach cflag: test_cflags
+ if cc.has_argument(cflag)
+ common_flags += [cflag]
+ endif
+ endforeach
+endif
+
+add_project_arguments(common_flags, language: 'c')
+add_project_link_arguments(common_ldflags, language: 'c')
+
+ldflag = '-Wl,--version-script'
+have_version_script = host_machine.system().contains('linux') and cc.has_argument(ldflag)
+
+linker_script_ver = join_paths(meson.source_root(), 'linker-script-binary.ver')
+
+# Check for iso-codes for country names translation
+enable_iso_codes = get_option('enable-iso-codes')
+message('whether to disable iso-codes at build-time: ' + enable_iso_codes.to_string())
+if enable_iso_codes
+ iso_codes_dep = dependency('iso-codes')
+
+ str = 'Consider installing the package or adjusting the PKG_CONFIG_PATH environment variable.\n'
+ str += 'You can also disable build-time check for \'iso-codes\' via -Denable-iso-codes=false'
+ assert(iso_codes_dep.found(), str)
+
+ iso_3166 = iso_codes_dep.get_pkgconfig_variable('domains').contains('iso_3166')
+ message('whether iso-codes has iso_3166 domain: ' + iso_3166.to_string())
+
+ config_h.set_quoted('ISO_CODES_PREFIX', iso_codes_dep.get_pkgconfig_variable('prefix'))
+else
+ config_h.set_quoted('ISO_CODES_PREFIX', nma_prefix)
+endif
+
+gio_dep = dependency('gio-2.0', version: '>= 2.38')
+gmodule_export_dep = dependency('gmodule-export-2.0')
+libsecret_dep = dependency('libsecret-1', version: '>= 0.18')
+
+m_dep = cc.find_library('m')
+
+# Check for gtk+
+gtk_req_version = '>= 3.4'
+
+gtk_dep = declare_dependency(
+ dependencies: dependency('gtk+-3.0', version: gtk_req_version),
+ compile_args: [
+ '-DGDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4',
+ '-DGTK_VERSION_MAX_ALLOWED=GTK_VERSION_3_4'
+ ]
+)
+
+# Check for gudev
+gudev_dep = dependency('gudev-1.0', version: '>= 147')
+
+# Check for libnotify >= 0.7
+libnotify_dep = dependency('libnotify', version: '>= 0.4.3')
+config_h.set10('HAVE_LIBNOTIFY_07', libnotify_dep.found() and libnotify_dep.version().version_compare('>= 0.7'),
+ description: 'Define if you have libnotify 0.7 or later')
+
+# API documentation
+nm_req_version = '>= 1.7'
+
+deps = [
+ gio_dep,
+ gmodule_export_dep,
+ dependency('libnm', version: nm_req_version)
+]
+
+cflags = [
+ '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38',
+ '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38',
+ '-DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_8',
+ '-DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_8'
+]
+
+libnm_dep = declare_dependency(
+ dependencies: deps,
+ compile_args: cflags
+)
+
+enable_libnm_gtk = get_option('enable-libnm-gtk')
+if enable_libnm_gtk
+ deps = [
+ gio_dep,
+ gmodule_export_dep,
+ dependency('libnm-glib', version: nm_req_version),
+ dependency('libnm-glib-vpn', version: nm_req_version),
+ dependency('libnm-util', version: nm_req_version),
+ dependency('NetworkManager', version: nm_req_version)
+ ]
+
+ cflags = [
+ '-DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_38',
+ '-DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_38',
+ '-DNM_VERSION_MIN_REQUIRED=NM_VERSION_1_4',
+ '-DNM_VERSION_MAX_ALLOWED=NM_VERSION_1_4'
+ ]
+
+ libnm_glib_dep = declare_dependency(
+ dependencies: deps,
+ compile_args: cflags
+ )
+endif
+
+enable_appindicator = get_option('enable-appindicator')
+if enable_appindicator
+ appindicator_dep = dependency('appindicator3-0.1')
+ dbusmenu_dep = dependency('dbusmenu-gtk3-0.4', version: '>= 16.04.0')
+endif
+config_h.set('WITH_APPINDICATOR', enable_appindicator)
+
+# ModemManager1 with libmm-glib for WWAN support
+enable_wwan = get_option('enable-wwan')
+if enable_wwan
+ mm_glib_dep = dependency('mm-glib', required: false)
+ assert(mm_glib_dep.found(), 'libmm-glib is needed for WWAN support. Use -Denable-wwan=false to build without it.')
+endif
+config_h.set10('WITH_WWAN', enable_wwan)
+
+# SELinux
+enable_selinux = get_option('enable-selinux')
+if enable_selinux
+ libselinux_dep = dependency('libselinux', required: false)
+ assert(libselinux_dep.found(), 'libselinux is needed for SELinux label support in configuration editor. Use -Denable-selinux=false to build without it.')
+endif
+config_h.set10('WITH_SELINUX', enable_selinux)
+
+# Jansson for team configuration editing
+enable_team = get_option('enable-team')
+if enable_team
+ jansson_dep = dependency('jansson', version: '>= 2.7', required: false)
+ assert(jansson_dep.found(), 'jansson is needed for team configuration editor. Use -Denable-team=false to build without it.')
+endif
+config_h.set10('WITH_JANSSON', enable_team)
+
+# GCR for PKCS#11 enabled certificate chooser
+enable_gcr = get_option('enable-gcr')
+if enable_gcr
+ deps = [
+ dependency('gcr-3', version: '>= 3.14'),
+ dependency('gck-1', version: '>= 3.14')
+ ]
+
+ cflags = [
+ '-DGCR_API_SUBJECT_TO_CHANGE',
+ '-DGCK_API_SUBJECT_TO_CHANGE'
+ ]
+
+ # GCR API is declared subject to change, do an extensive check of the prototypes
+ gcr_src = '''
+ #ifndef GCR_API_SUBJECT_TO_CHANGE
+ # define GCR_API_SUBJECT_TO_CHANGE
+ #endif
+ #ifndef GCK_API_SUBJECT_TO_CHANGE
+ # define GCK_API_SUBJECT_TO_CHANGE
+ #endif
+
+ #include <gcr/gcr.h>
+ #include <gck/gck.h>
+
+ const GckAttribute *gck_attributes_find (GckAttributes *attrs, gulong attr_type);
+ gboolean gck_attributes_find_string (GckAttributes *attrs, gulong attr_type, gchar **value);
+ gboolean gck_attributes_find_ulong (GckAttributes *attrs, gulong attr_type, gulong *value);
+ GckAttributes *gck_attributes_new_empty (gulong first_type, ...);
+ void gck_attributes_unref (gpointer attrs);
+ void gck_builder_add_all (GckBuilder *builder, GckAttributes *attrs);
+ void gck_builder_add_only (GckBuilder *builder, GckAttributes *attrs, gulong only_type, ...);
+ GckAttributes *gck_builder_end (GckBuilder *builder);
+ GckBuilder *gck_builder_new (GckBuilderFlags flags);
+ void gck_enumerator_next_async (GckEnumerator *self, gint max_objects, GCancellable *cancellable,
+ GAsyncReadyCallback callback, gpointer user_data);
+ GList *gck_enumerator_next_finish (GckEnumerator *self, GAsyncResult *result, GError **error);
+ void gck_list_unref_free (GList *reflist);
+ GList *gck_modules_get_slots (GList *modules, gboolean token_present);
+ void gck_modules_initialize_registered_async (GCancellable *cancellable, GAsyncReadyCallback callback,
+ gpointer user_data);
+ GList *gck_modules_initialize_registered_finish (GAsyncResult *result, GError **error);
+ void gck_object_get_async (GckObject *self, const gulong *attr_types, guint n_attr_types,
+ GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
+ GckAttributes *gck_object_get_finish (GckObject *self, GAsyncResult *result, GError **error);
+ void gck_session_login_async (GckSession *self, gulong user_type, const guchar *pin,
+ gsize n_pin, GCancellable *cancellable,
+ GAsyncReadyCallback callback, gpointer user_data);
+ gboolean gck_session_login_finish (GckSession *self, GAsyncResult *result, GError **error);
+ GckSlotInfo *gck_slot_get_info (GckSlot *self);
+ GckTokenInfo *gck_slot_get_token_info (GckSlot *self);
+ void gck_slot_open_session_async (GckSlot *self, GckSessionOptions options, GCancellable *cancellable,
+ GAsyncReadyCallback callback, gpointer user_data);
+ GckSession *gck_slot_open_session_finish (GckSlot *self, GAsyncResult *result, GError **error);
+ void gck_token_info_free (GckTokenInfo *token_info);
+ gchar *gck_uri_build (GckUriData *uri_data, GckUriFlags flags);
+ void gck_uri_data_free (GckUriData *uri_data);
+ GckUriData *gck_uri_parse (const gchar *string, GckUriFlags flags, GError **error);
+ gchar *gcr_certificate_get_issuer_name (GcrCertificate *self);
+ gchar *gcr_certificate_get_subject_name (GcrCertificate *self);
+ GcrCertificate *gcr_simple_certificate_new (const guchar *data, gsize n_data);
+ '''
+
+ assert(cc.compiles(gcr_src, dependencies: deps), 'gcr support was requested, but the gcr library is not available. Use -Denable-gcr=false to build without it.')
+
+ gcr_dep = declare_dependency(
+ dependencies: deps,
+ compile_args: cflags
+ )
+endif
+config_h.set10('WITH_GCR', enable_gcr)
+
+# introspection support
+enable_introspection = get_option('enable-introspection')
+if enable_introspection
+ gir_dep = dependency('gobject-introspection-1.0', version: '>= 0.9.6', required: false)
+ assert(gir_dep.found(), 'introspection support was requested, but the gobject-introspection library is not available. Use -Denable-introspection=false to build without it.')
+endif
+
+more_asserts = get_option('with-more-asserts')
+if more_asserts == 'no'
+ more_asserts = 0
+elif more_asserts == 'yes'
+ more_asserts = 100
+else
+ more_asserts = more_asserts.to_int()
+endif
+config_h.set('NM_MORE_ASSERTS', more_asserts)
+
+config = 'config.h'
+
+configure_file(
+ input: config + '.meson',
+ output: config,
+ configuration: config_h
+)
+
+gnome = import('gnome')
+i18n = import('i18n')
+pkg = import('pkgconfig')
+
+po_dir = join_paths(meson.source_root(), 'po')
+
+intltool_merge = find_program('intltool-merge')
+intltool_cache = join_paths(po_dir, '.intltool-merge-cache')
+intltool_desktop_cmd = [intltool_merge, '-d', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
+intltool_xml_cmd = [intltool_merge, '-x', '-u', '-c', intltool_cache, po_dir, '@INPUT@', '@OUTPUT@']
+
+top_inc = include_directories('.')
+
+subdir('po')
+subdir('icons')
+subdir('shared')
+subdir('src')
+subdir('man')
+
+desktop = 'nm-applet.desktop'
+
+# FIXME: The same target can not be copied into two directories.
+# There is a workaround in meson_post_install.py until proper solution arises:
+# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
+custom_target(
+ desktop,
+ input: desktop + '.in',
+ output: desktop,
+ command: intltool_desktop_cmd,
+ install: true,
+ install_dir: nma_appdir
+ #install_dir: [
+ # nma_appdir,
+ # nma_autostartdir
+ #]
+)
+
+desktop = 'nm-connection-editor.desktop'
+
+custom_target(
+ desktop,
+ input: desktop + '.in',
+ output: desktop,
+ command: intltool_desktop_cmd,
+ install: true,
+ install_dir: nma_appdir
+)
+
+info = 'nm-connection-editor.metainfo.xml'
+
+custom_target(
+ info,
+ input: 'nm-connection-editor.appdata.xml.in',
+ output: info,
+ command: intltool_xml_cmd,
+ install: true,
+ install_dir: join_paths(nma_datadir, 'metainfo')
+)
+
+schema_conf = configuration_data()
+schema_conf.set('GETTEXT_PACKAGE', meson.project_name())
+
+schema = 'org.gnome.@0@.gschema.xml'.format(meson.project_name())
+
+configure_file(
+ input: schema + '.in',
+ output: schema,
+ install: true,
+ install_dir: join_paths(nma_datadir, 'glib-2.0', 'schemas'),
+ configuration: schema_conf
+)
+
+install_data(
+ meson.project_name() + '.convert',
+ install_dir: join_paths(nma_datadir, 'GConf', 'gsettings')
+)
+
+# documentation
+enable_gtk_doc = get_option('enable-gtk-doc')
+if enable_gtk_doc
+ mod_name = 'libnma'
+
+ private_headers = [
+ 'nma-cert-chooser-button.h',
+ 'nma-cert-chooser-private.h',
+ 'nma-pkcs11-cert-chooser-dialog.h',
+ 'nma-pkcs11-token-login-dialog.h',
+ 'nma-resources.h',
+ 'nma-version.h'
+ ]
+
+ private_sources = [
+ 'nma-cert-chooser-button.c',
+ 'nma-file-cert-chooser.c',
+ 'nma-pkcs11-cert-chooser-dialog.c',
+ 'nma-pkcs11-cert-chooser.c',
+ 'nma-pkcs11-token-login-dialog.c',
+ 'nma-resources.c'
+ ]
+
+ ent = 'gtkdocentities.ent'
+
+ configure_file(
+ input: ent + '.in',
+ output: ent,
+ configuration: config_h
+ )
+
+ doc_path = join_paths(nma_datadir, 'gtk-doc', 'html', mod_name)
+
+ gnome.gtkdoc(
+ mod_name,
+ main_xml: mod_name + '-docs.xml',
+ src_dir: libnma_inc,
+ dependencies: libnma_dep,
+ scan_args: [
+ '--rebuild-types',
+ '--rebuild-sections',
+ '--ignore-headers=' + ' '.join(private_headers)
+ ],
+ mkdb_args: '--ignore-files=' + ' '.join(private_headers + private_sources),
+ gobject_typesfile: mod_name + '.types',
+ install: true,
+ install_dir: doc_path
+ )
+endif
+
+meson.add_install_script(
+ 'meson_post_install.py',
+ nma_datadir,
+ nma_sysconfdir
+)
+
+output = '\n Build legacy library libnm-gtk: ' + enable_libnm_gtk.to_string() + '\n'
+output += ' GCR: ' + enable_gcr.to_string() + '\n'
+output += ' LTO: ' + get_option('b_lto').to_string() + '\n'
+output += ' Linker garbage collection: ' + enable_ld_gc.to_string()
+message(output)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 00000000..4929ca76
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,11 @@
+option('enable-libnm-gtk', type: 'boolean', value: true, description: 'build legacy library libnm-gtk which depends on libnm-glib/libnm-util/dbus-glib')
+option('enable-appindicator', type: 'boolean', value: true, description: 'Build with libappindicator support instead of xembed systray support.')
+option('enable-wwan', type: 'boolean', value: true, description: 'Enable WWAN support.')
+option('enable-selinux', type: 'boolean', value: true, description: 'Enable support for adjusting SELinux labels in configuration editor.')
+option('enable-team', type: 'boolean', value: true, description: 'Enable team configuration editor.')
+option('enable-gcr', type: 'boolean', value: true, description: 'Enable advanced certificate chooser.')
+option('with-more-asserts', type: 'string', value: '0', description: 'Enable more assertions for debugging.')
+option('enable-iso-codes', type: 'boolean', value: true, description: 'check for iso-codes at build-time')
+option('enable-ld-gc', type: 'boolean', value: true, description: 'Enable garbage collection of unused symbols on linking')
+option('enable-gtk-doc', type: 'boolean', value: false, description: 'use gtk-doc to build documentation')
+option('enable-introspection', type: 'boolean', value: false, description: 'Enable introspection for this build')
diff --git a/meson_post_install.py b/meson_post_install.py
new file mode 100644
index 00000000..c1e6a548
--- /dev/null
+++ b/meson_post_install.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+import os
+import shutil
+import subprocess
+import sys
+
+if not os.environ.get('DESTDIR'):
+ schemadir = os.path.join(sys.argv[1], 'glib-2.0', 'schemas')
+ print('Compile gsettings schemas...')
+ subprocess.call(['glib-compile-schemas', schemadir])
+
+ # FIXME: this is due to unable to copy a generated target file:
+ # https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
+ dst_dir = os.path.join(sys.argv[2], 'xdg', 'autostart')
+ if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+
+ src = os.path.join(sys.argv[1], 'applications', 'nm-applet.desktop')
+ dst = os.path.join(dst_dir, 'nm-applet.desktop')
+ shutil.copyfile(src, dst)
diff --git a/po/meson.build b/po/meson.build
new file mode 100644
index 00000000..e9b77d79
--- /dev/null
+++ b/po/meson.build
@@ -0,0 +1 @@
+i18n.gettext(meson.project_name(), preset: 'glib')
diff --git a/shared/meson.build b/shared/meson.build
new file mode 100644
index 00000000..6a5fa34f
--- /dev/null
+++ b/shared/meson.build
@@ -0,0 +1,3 @@
+shared_inc = include_directories('.')
+
+shared_sources = files('nm-utils/nm-shared-utils.c')
diff --git a/src/connection-editor/meson.build b/src/connection-editor/meson.build
new file mode 100644
index 00000000..990f1b47
--- /dev/null
+++ b/src/connection-editor/meson.build
@@ -0,0 +1,122 @@
+sources = files(
+ 'ce-page.c',
+ 'ce-polkit-button.c',
+ 'ce-polkit.c',
+ 'connection-helpers.c',
+ 'ip4-routes-dialog.c',
+ 'ip6-routes-dialog.c',
+ 'nm-connection-editor.c',
+ 'nm-connection-list.c',
+ 'main.c',
+ 'page-8021x-security.c',
+ 'page-bridge.c',
+ 'page-bridge-port.c',
+ 'page-bluetooth.c',
+ 'page-bond.c',
+ 'page-dcb.c',
+ 'page-dsl.c',
+ 'page-ethernet.c',
+ 'page-general.c',
+ 'page-infiniband.c',
+ 'page-ip-tunnel.c',
+ 'page-ip4.c',
+ 'page-ip6.c',
+ 'page-macsec.c',
+ 'page-master.c',
+ 'page-mobile.c',
+ 'page-ppp.c',
+ 'page-proxy.c',
+ 'page-team.c',
+ 'page-team-port.c',
+ 'page-vlan.c',
+ 'page-vpn.c',
+ 'page-wifi.c',
+ 'page-wifi-security.c',
+ 'ppp-auth-methods-dialog.c',
+ 'vpn-helpers.c'
+)
+
+resource_data = files(
+ 'ce-ip4-routes.ui',
+ 'ce-ip6-routes.ui',
+ 'ce-new-connection.ui',
+ 'ce-page-bluetooth.ui',
+ 'ce-page-bond.ui',
+ 'ce-page-bridge-port.ui',
+ 'ce-page-bridge.ui',
+ 'ce-page-dcb.ui',
+ 'ce-page-dsl.ui',
+ 'ce-page-ethernet.ui',
+ 'ce-page-general.ui',
+ 'ce-page-infiniband.ui',
+ 'ce-page-ip4.ui',
+ 'ce-page-ip6.ui',
+ 'ce-page-ip-tunnel.ui',
+ 'ce-page-macsec.ui',
+ 'ce-page-mobile.ui',
+ 'ce-page-ppp.ui',
+ 'ce-page-proxy.ui',
+ 'ce-page-team-port.ui',
+ 'ce-page-team.ui',
+ 'ce-page-vlan.ui',
+ 'ce-page-wifi-security.ui',
+ 'ce-page-wifi.ui',
+ 'ce-ppp-auth-methods.ui',
+ 'nm-connection-editor.ui',
+ 'nm-connection-list.ui'
+)
+
+sources += gnome.compile_resources(
+ 'ce-resources',
+ 'ce.gresource.xml',
+ dependencies: resource_data
+)
+
+incs = [
+ top_inc,
+ utils_inc,
+ src_inc,
+ shared_inc
+]
+
+deps = [
+ gtk_dep,
+ libnm_dep,
+ libnma_dep,
+ libwireless_security_libnm_dep,
+ m_dep
+]
+
+cflags = [
+ '-DBINDIR="@0@"'.format(nma_bindir),
+ '-DDATADIR="@0@"'.format(nma_datadir),
+ '-DLIBDIR="@0@"'.format(nma_libdir),
+ '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
+ '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
+ '-DICONDIR="@0@"'.format(nma_icondir)
+]
+
+ldflags = []
+if have_version_script
+ ldflags += '-Wl,--version-script,@0@'.format(linker_script_ver)
+endif
+
+if enable_selinux
+ deps += libselinux_dep
+endif
+
+if enable_team
+ deps += jansson_dep
+endif
+
+executable(
+ 'nm-connection-editor',
+ sources,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ link_args: ldflags,
+ link_depends: linker_script_ver,
+ install: true,
+ install_dir: nma_bindir
+)
diff --git a/src/libnm-gtk/meson.build b/src/libnm-gtk/meson.build
new file mode 100644
index 00000000..9aaf2194
--- /dev/null
+++ b/src/libnm-gtk/meson.build
@@ -0,0 +1,151 @@
+lib_name = 'libnm-gtk'
+
+gir_headers = files(
+ 'nm-cert-chooser.h',
+ 'nm-mobile-providers.h',
+ 'nm-mobile-wizard.h',
+ 'nm-ui-utils.h',
+ 'nm-vpn-password-dialog.h',
+ 'nm-wifi-dialog.h'
+)
+
+headers = gir_headers + files('nm-wireless-dialog.h')
+
+install_headers(
+ headers,
+ subdir: lib_name
+)
+
+gir_sources = cert_chooser_sources + files(
+ 'init.c',
+ 'nm-mobile-providers.c',
+ 'nm-mobile-wizard.c',
+ 'nm-ui-utils.c',
+ 'nm-vpn-password-dialog.c',
+ 'nm-wifi-dialog.c'
+)
+
+sources = [version_header] + gir_sources + files('nm-wireless-dialog.c')
+
+resource_data = files('wifi.ui')
+
+sources += gnome.compile_resources(
+ 'nm-resources',
+ 'nm.gresource.xml',
+ dependencies: resource_data
+)
+
+incs = [
+ top_inc,
+ shared_inc,
+ src_inc,
+ libnma_inc
+]
+
+deps = [
+ gtk_dep,
+ gudev_dep,
+ libnm_glib_dep,
+ libutils_libnm_glib_dep,
+ libwireless_security_libnm_glib_dep
+]
+
+cflags = [
+ '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY',
+ '-DBINDIR="@0@"'.format(nma_bindir),
+ '-DDATADIR="@0@"'.format(nma_datadir),
+ '-DLIBEXECDIR="@0@"'.format(nma_libexecdir),
+ '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
+ '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
+ '-DAUTOSTARTDIR="@0@"'.format(nma_autostartdir),
+ '-DICONDIR="@0@"'.format(nma_icondir)
+]
+
+symbol_map = join_paths(meson.current_source_dir(), 'libnm-gtk.ver')
+
+ldflags = []
+if have_version_script
+ ldflags += '-Wl,--version-script,' + symbol_map
+endif
+
+libnm_gtk = shared_library(
+ 'nm-gtk',
+ sources: sources,
+ version: libversion,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ link_args: ldflags,
+ link_depends: symbol_map,
+ install: true,
+ install_dir: nma_libdir
+)
+
+pkg.generate(
+ libraries: libnm_gtk,
+ version: nma_version,
+ name: lib_name,
+ description: 'NetworkManager UI utilities (libnm-glib version)',
+ filebase: lib_name,
+ subdirs: lib_name,
+ requires: [
+ 'NetworkManager ' + nm_req_version,
+ 'libnm-util ' + nm_req_version,
+ 'linm-glib ' + nm_req_version,
+ 'gtk+-3.0 ' + gtk_req_version
+ ],
+ variables: 'exec_prefix=' + nma_prefix,
+ install_dir: join_paths(nma_libdir, 'pkgconfig')
+)
+
+if enable_introspection
+ gir_incs = [
+ 'Gtk-3.0',
+ 'NetworkManager-1.0',
+ 'NMClient-1.0'
+ ]
+
+ gir_dir = join_paths(nma_datadir, 'gir-' + nma_gir_version)
+ typelib_dir = join_paths(nma_libdir, 'girepository-' + nma_gir_version)
+
+ # FIXME: the generated gir file is slightly different
+ gnome.generate_gir(
+ libnm_gtk,
+ sources: gir_sources + gir_headers,
+ nsversion: nma_gir_version,
+ namespace: nma_gtk_gir_ns,
+ includes: gir_incs,
+ identifier_prefix: nma_gir_prefix,
+ symbol_prefix: nma_gir_prefix.to_lower(),
+ export_packages: lib_name,
+ install: true,
+ install_dir_gir: gir_dir,
+ install_dir_typelib: typelib_dir
+ )
+endif
+
+test_unit = 'test-mobile-providers'
+
+deps = [
+ gtk_dep,
+ libnm_glib_dep
+]
+
+cflags = '-DTEST_DATA_DIR="@0@"'.format(join_paths(meson.current_source_dir(), 'tests'))
+
+exe = executable(
+ test_unit,
+ 'tests/' + test_unit + '.c',
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ link_with: libnm_gtk
+)
+
+test(test_unit, exe)
+
+run_target(
+ 'check-local-exports-libnm-gtk',
+ command: [find_program('check-exports.sh'), libnm_gtk.full_path(), symbol_map],
+ depends: libnm_gtk
+)
diff --git a/src/libnma/meson.build b/src/libnma/meson.build
new file mode 100644
index 00000000..0659268a
--- /dev/null
+++ b/src/libnma/meson.build
@@ -0,0 +1,148 @@
+lib_name = 'libnma'
+
+cert_chooser_headers = files('nma-cert-chooser.h')
+
+cert_chooser_sources = files(
+ 'nma-cert-chooser.c',
+ 'nma-file-cert-chooser.c'
+)
+
+resource_data = files(
+ 'nma-pkcs11-cert-chooser-dialog.ui',
+ 'nma-pkcs11-token-login-dialog.ui',
+ 'wifi.ui'
+)
+
+built_sources = gnome.compile_resources(
+ 'nma-resources',
+ 'nma.gresource.xml',
+ dependencies: resource_data
+)
+
+gir_headers = cert_chooser_headers + files(
+ 'nma-mobile-providers.h',
+ 'nma-mobile-wizard.h',
+ 'nma-ui-utils.h',
+ 'nma-vpn-password-dialog.h',
+ 'nma-wifi-dialog.h'
+)
+
+headers = gir_headers + files('nma-cert-chooser-private.h')
+
+install_headers(
+ gir_headers,
+ subdir: lib_name
+)
+
+gir_sources = [version_header] + cert_chooser_sources + files(
+ 'init.c',
+ 'nma-mobile-providers.c',
+ 'nma-mobile-wizard.c',
+ 'nma-ui-utils.c',
+ 'nma-vpn-password-dialog.c',
+ 'nma-wifi-dialog.c'
+)
+
+incs = [
+ top_inc,
+ shared_inc,
+ src_inc,
+ libnma_inc
+]
+
+deps = [
+ gtk_dep,
+ gudev_dep,
+ libnm_dep,
+ libutils_libnm_dep,
+ libwireless_security_libnm_dep
+]
+
+cflags = [
+ '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB',
+ '-DBINDIR="@0@"'.format(nma_bindir),
+ '-DDATADIR="@0@"'.format(nma_datadir),
+ '-DLIBEXECDIR="@0@"'.format(nma_libexecdir),
+ '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
+ '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
+ '-DAUTOSTARTDIR="@0@"'.format(nma_autostartdir),
+ '-DICONDIR="@0@"'.format(nma_icondir)
+]
+
+symbol_map = join_paths(meson.current_source_dir(), 'libnma.ver')
+
+ldflags = []
+if have_version_script
+ ldflags += '-Wl,--version-script,' + symbol_map
+endif
+
+if enable_gcr
+ headers += files(
+ 'nma-cert-chooser-button.h',
+ 'nma-pkcs11-cert-chooser-dialog.h',
+ 'nma-pkcs11-token-login-dialog.h'
+ )
+
+ gir_sources += files(
+ 'nma-cert-chooser-button.c',
+ 'nma-pkcs11-cert-chooser.c',
+ 'nma-pkcs11-cert-chooser-dialog.c',
+ 'nma-pkcs11-token-login-dialog.c'
+ )
+
+ deps += gcr_dep
+endif
+
+libnma = shared_library(
+ 'nma',
+ sources: gir_sources + built_sources,
+ version: libversion,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ link_args: ldflags,
+ link_depends: symbol_map,
+ install: true,
+ install_dir: nma_libdir
+)
+
+libnma_dep = declare_dependency(
+ link_with: libnma,
+ include_directories: libnma_inc
+)
+
+pkg.generate(
+ libraries: libnma,
+ version: nma_version,
+ name: lib_name,
+ description: 'NetworkManager UI utilities (libnm version)',
+ filebase: lib_name,
+ subdirs: lib_name,
+ requires: 'libnm',
+ variables: 'exec_prefix=' + nma_prefix,
+ install_dir: join_paths(nma_libdir, 'pkgconfig')
+)
+
+if enable_introspection
+ gir_incs = [
+ 'Gtk-3.0',
+ 'NM-1.0'
+ ]
+
+ gir_dir = join_paths(nma_datadir, 'gir-' + nma_gir_version)
+ typelib_dir = join_paths(nma_libdir, 'girepository-' + nma_gir_version)
+
+ gnome.generate_gir(
+ libnma,
+ sources: gir_sources + gir_headers,
+ nsversion: nma_gir_version,
+ namespace: nma_gir_ns,
+ includes: gir_incs,
+ identifier_prefix: nma_gir_prefix,
+ symbol_prefix: nma_gir_prefix.to_lower(),
+ export_packages: lib_name,
+ install: true,
+ install_dir_gir: gir_dir,
+ install_dir_typelib: typelib_dir
+ )
+endif
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 00000000..c8e28723
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,114 @@
+src_inc = include_directories('.')
+
+# FIXME: although this file is contained in the libnma directory
+# it should be generated before because it's used at
+# wireless-security directory, which is needed later for
+# libnma directory.
+libnma_inc = include_directories('libnma')
+
+version_conf = configuration_data()
+version_conf.set('NMA_MAJOR_VERSION', nma_major_version)
+version_conf.set('NMA_MINOR_VERSION', nma_minor_version)
+version_conf.set('NMA_MICRO_VERSION', nma_micro_version)
+
+version = 'nma-version.h'
+
+version_header = configure_file(
+ input: 'libnma/' + version + '.in',
+ output: version,
+ configuration: version_conf,
+ install: true,
+ install_dir: join_paths(nma_includedir, 'libnma')
+)
+
+subdir('utils')
+subdir('wireless-security')
+subdir('libnma')
+
+if enable_libnm_gtk
+ subdir('libnm-gtk')
+endif
+
+subdir('connection-editor')
+
+program_name = 'nm-applet'
+
+sources = files(
+ 'ap-menu-item.c',
+ 'applet-agent.c',
+ 'applet.c',
+ 'applet-device-bt.c',
+ 'applet-device-ethernet.c',
+ 'applet-device-wifi.c',
+ 'applet-dialogs.c',
+ 'applet-vpn-request.c',
+ 'ethernet-dialog.c',
+ 'main.c',
+ 'mb-menu-item.c',
+ 'mobile-helpers.c'
+)
+
+resource_data = files(
+ '8021x.ui',
+ 'connection-editor/ce-page-dsl.ui',
+ 'gsm-unlock.ui',
+ 'info.ui'
+)
+
+sources += gnome.compile_resources(
+ 'applet-resources',
+ 'applet.gresource.xml',
+ dependencies: resource_data
+)
+
+deps = [
+ gtk_dep,
+ libnm_dep,
+ libnma_dep,
+ libnotify_dep,
+ libsecret_dep,
+ libwireless_security_libnm_dep,
+ m_dep
+]
+
+cflags = [
+ '-DBINDIR="@0@"'.format(nma_bindir),
+ '-DDATADIR="@0@"'.format(nma_datadir),
+ '-DLIBDIR="@0@"'.format(nma_libdir),
+ '-DLIBEXECDIR="@0@"'.format(nma_libexecdir),
+ '-DNMALOCALEDIR="@0@"'.format(nma_localedir),
+ '-DSYSCONFDIR="@0@"'.format(nma_sysconfdir),
+ '-DAUTOSTARTDIR="@0@"'.format(nma_autostartdir),
+ '-DICONDIR="@0@"'.format(nma_icondir),
+ '-DG_LOG_DOMAIN="@0@"'.format(program_name)
+]
+
+ldflags = []
+if have_version_script
+ ldflags += '-Wl,--version-script,@0@'.format(linker_script_ver)
+endif
+
+if enable_appindicator
+ deps += [
+ appindicator_dep,
+ dbusmenu_dep
+ ]
+endif
+
+if enable_wwan
+ sources += files('applet-device-broadband.c')
+
+ deps += mm_glib_dep
+endif
+
+executable(
+ program_name,
+ sources,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags,
+ link_args: ldflags,
+ link_depends: linker_script_ver,
+ install: true,
+ install_dir: nma_bindir
+)
diff --git a/src/utils/meson.build b/src/utils/meson.build
new file mode 100644
index 00000000..b06a5ccd
--- /dev/null
+++ b/src/utils/meson.build
@@ -0,0 +1,59 @@
+utils_inc = include_directories('.')
+
+sources = shared_sources + files('utils.c')
+
+incs = [
+ top_inc,
+ shared_inc
+]
+
+deps = [
+ gtk_dep,
+ libnm_dep
+]
+
+libutils_libnm = static_library(
+ 'utils-libnm',
+ sources: sources,
+ include_directories: incs,
+ dependencies: deps
+)
+
+libutils_libnm_dep = declare_dependency(
+ link_with: libutils_libnm,
+ include_directories: utils_inc
+)
+
+test_unit = 'test-utils'
+
+exe = executable(
+ test_unit,
+ 'tests/' + test_unit + '.c',
+ include_directories: incs,
+ dependencies: deps,
+ link_with: libutils_libnm
+)
+
+test(test_unit, exe)
+
+if enable_libnm_gtk
+ deps = [
+ gtk_dep,
+ libnm_glib_dep
+ ]
+
+ cflags = '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY'
+
+ libutils_libnm_glib = static_library(
+ 'utils-libnm-glib',
+ sources: sources,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags
+ )
+
+ libutils_libnm_glib_dep = declare_dependency(
+ link_with: libutils_libnm_glib,
+ include_directories: utils_inc
+ )
+endif
diff --git a/src/wireless-security/meson.build b/src/wireless-security/meson.build
new file mode 100644
index 00000000..e3efcdb4
--- /dev/null
+++ b/src/wireless-security/meson.build
@@ -0,0 +1,86 @@
+wireless_security_inc = include_directories('.')
+
+sources = [version_header] + files(
+ 'eap-method.c',
+ 'eap-method-fast.c',
+ 'eap-method-leap.c',
+ 'eap-method-peap.c',
+ 'eap-method-simple.c',
+ 'eap-method-tls.c',
+ 'eap-method-ttls.c',
+ 'helpers.c',
+ 'wireless-security.c',
+ 'ws-dynamic-wep.c',
+ 'ws-leap.c',
+ 'ws-wep-key.c',
+ 'ws-wpa-eap.c',
+ 'ws-wpa-psk.c'
+)
+
+resource_data = files(
+ 'eap-method-fast.ui',
+ 'eap-method-leap.ui',
+ 'eap-method-peap.ui',
+ 'eap-method-simple.ui',
+ 'eap-method-tls.ui',
+ 'eap-method-ttls.ui',
+ 'ws-dynamic-wep.ui',
+ 'ws-leap.ui',
+ 'ws-wep-key.ui',
+ 'ws-wpa-eap.ui',
+ 'ws-wpa-psk.ui'
+)
+
+sources += gnome.compile_resources(
+ 'ws-resources',
+ 'ws.gresource.xml',
+ dependencies: resource_data
+)
+
+incs = [
+ top_inc,
+ shared_inc,
+ src_inc,
+ libnma_inc
+]
+
+deps = [
+ gtk_dep,
+ libnm_dep,
+ libutils_libnm_dep
+]
+
+libwireless_security_libnm = static_library(
+ 'wireless-security-libnm',
+ sources: sources,
+ include_directories: incs,
+ dependencies: deps
+)
+
+libwireless_security_libnm_dep = declare_dependency(
+ link_with: libwireless_security_libnm,
+ include_directories: wireless_security_inc
+)
+
+if enable_libnm_gtk
+ deps = [
+ gtk_dep,
+ libnm_glib_dep,
+ libutils_libnm_glib_dep
+ ]
+
+ cflags = '-DNETWORKMANAGER_COMPILATION=NM_NETWORKMANAGER_COMPILATION_LIB_LEGACY'
+
+ libwireless_security_libnm_glib = static_library(
+ 'wireless-security-libnm-glib',
+ sources: sources,
+ include_directories: incs,
+ dependencies: deps,
+ c_args: cflags
+ )
+
+ libwireless_security_libnm_glib_dep = declare_dependency(
+ link_with: libwireless_security_libnm_glib,
+ include_directories: wireless_security_inc
+ )
+endif