From 84a6010718c47953c64a7dcd4d0fc7f435aa1bbf Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 18 Mar 2018 21:30:30 +0100 Subject: [PATCH 1/3] meson: quote dist_version properly --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 1e999a4acd..994916778a 100644 --- a/meson.build +++ b/meson.build @@ -261,7 +261,7 @@ config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_PLUGINS', config_plugins_default) # Distribution version string dist_version = get_option('dist_version') if dist_version != '' - config_h.set('NM_DIST_VERSION', dist_version) + config_h.set_quoted('NM_DIST_VERSION', dist_version) endif enable_wifi = get_option('wifi') From 6aac441f1ce9f74ccb9dd2d97d3330be3eec0cef Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 18 Mar 2018 21:19:41 +0100 Subject: [PATCH 2/3] meson: distinguish arch specific and arch neutral lib dir Plugins go to the arch specific place while conf.d/ and VPN/ are in lib/. Use the same naming as is used with autoconf. --- libnm-core/meson.build | 2 +- libnm-glib/meson.build | 2 +- meson.build | 4 +++- src/devices/adsl/meson.build | 2 +- src/devices/bluetooth/meson.build | 2 +- src/devices/ovs/meson.build | 2 +- src/devices/team/meson.build | 2 +- src/devices/wifi/meson.build | 2 +- src/devices/wwan/meson.build | 4 ++-- src/meson.build | 2 +- src/ppp/meson.build | 2 +- src/settings/plugins/ibft/meson.build | 2 +- src/settings/plugins/ifcfg-rh/meson.build | 2 +- src/settings/plugins/ifupdown/meson.build | 2 +- 14 files changed, 17 insertions(+), 15 deletions(-) diff --git a/libnm-core/meson.build b/libnm-core/meson.build index bba844069c..135f363f35 100644 --- a/libnm-core/meson.build +++ b/libnm-core/meson.build @@ -141,7 +141,7 @@ cflags = [ '-DLOCALEDIR="@0@"'.format(nm_localedir), '-DNMCONFDIR="@0@"'.format(nm_pkgconfdir), '-DNMLIBDIR="@0@"'.format(nm_pkglibdir), - '-DNMPLUGINDIR="@0@"'.format(nm_pkglibdir) + '-DNMPLUGINDIR="@0@"'.format(nm_plugindir) ] if enable_json_validation diff --git a/libnm-glib/meson.build b/libnm-glib/meson.build index eddf983e49..3fc14d547d 100644 --- a/libnm-glib/meson.build +++ b/libnm-glib/meson.build @@ -287,7 +287,7 @@ pkg.generate( variables: [ 'exec_prefix=${prefix}', 'libgnome_serverdir=' + nm_libexecdir, - 'plugindir=' + nm_pkglibdir, + 'plugindir=' + nm_plugindir, 'configdir=' + nm_pkgconfdir ] ) diff --git a/meson.build b/meson.build index 994916778a..dc1524aa0d 100644 --- a/meson.build +++ b/meson.build @@ -42,9 +42,10 @@ nm_pkgsbindir = join_paths(nm_sbindir, nm_name) nm_pkgconfdir = join_paths(nm_sysconfdir, nm_name) nm_pkgdatadir = join_paths(nm_datadir, nm_name) nm_pkgincludedir = join_paths(nm_includedir, nm_name) -nm_pkglibdir = join_paths(nm_libdir, nm_name) +nm_pkglibdir = join_paths(nm_prefix, 'lib', nm_name) nm_pkgrundir = join_paths(nm_runstatedir, nm_name) nm_pkgstatedir = join_paths(nm_localstatedir, nm_name) +nm_plugindir = join_paths(nm_libdir, nm_name) libnm_name = 'libnm' @@ -886,6 +887,7 @@ output += ' nmlibdir: ' + nm_pkglibdir + '\n' output += ' nmdatadir: ' + nm_pkgdatadir + '\n' output += ' nmstatedir: ' + nm_pkgstatedir + '\n' output += ' nmrundir: ' + nm_pkgrundir + '\n' +output += ' nmplugindir: ' + nm_plugindir + '\n' output += '\nPlatform:\n' output += ' session tracking: ' + ','.join(session_trackers) + '\n' output += ' suspend/resume: ' + suspend_resume + '\n' diff --git a/src/devices/adsl/meson.build b/src/devices/adsl/meson.build index 4b0fade01a..ee804d2387 100644 --- a/src/devices/adsl/meson.build +++ b/src/devices/adsl/meson.build @@ -15,7 +15,7 @@ libnm_device_plugin_adsl = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_adsl diff --git a/src/devices/bluetooth/meson.build b/src/devices/bluetooth/meson.build index eb200679f5..30284f9e0f 100644 --- a/src/devices/bluetooth/meson.build +++ b/src/devices/bluetooth/meson.build @@ -26,7 +26,7 @@ libnm_device_plugin_bluetooth = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_bluetooth diff --git a/src/devices/ovs/meson.build b/src/devices/ovs/meson.build index 7b1c461746..f4edd57c00 100644 --- a/src/devices/ovs/meson.build +++ b/src/devices/ovs/meson.build @@ -19,7 +19,7 @@ libnm_device_plugin_ovs = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_ovs diff --git a/src/devices/team/meson.build b/src/devices/team/meson.build index 4a533bc5cd..159c182a2e 100644 --- a/src/devices/team/meson.build +++ b/src/devices/team/meson.build @@ -16,7 +16,7 @@ libnm_device_plugin_team = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_team diff --git a/src/devices/wifi/meson.build b/src/devices/wifi/meson.build index 27eaeea63f..a27f8e6a03 100644 --- a/src/devices/wifi/meson.build +++ b/src/devices/wifi/meson.build @@ -28,7 +28,7 @@ libnm_device_plugin_wifi = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_wifi diff --git a/src/devices/wwan/meson.build b/src/devices/wwan/meson.build index 032b35853f..abf585946a 100644 --- a/src/devices/wwan/meson.build +++ b/src/devices/wwan/meson.build @@ -25,7 +25,7 @@ libnm_wwan = shared_module( ], link_depends: linker_script, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) libnm_wwan_dep = declare_dependency( @@ -54,7 +54,7 @@ libnm_device_plugin_wwan = shared_module( link_args: ldflags_linker_script_devices, link_depends: linker_script_devices, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_device_plugin_wwan diff --git a/src/meson.build b/src/meson.build index 591c9c79c1..e60ab93fb9 100644 --- a/src/meson.build +++ b/src/meson.build @@ -29,7 +29,7 @@ cflags = nm_cflags + [ '-DRUNDIR="@0@"'.format(nm_pkgrundir), '-DNMCONFDIR="@0@"'.format(nm_pkgconfdir), '-DNMLOCALEDIR="@0@"'.format(nm_localedir), - '-DNMPLUGINDIR="@0@"'.format(nm_pkglibdir), + '-DNMPLUGINDIR="@0@"'.format(nm_plugindir), '-DNMRUNDIR="@0@"'.format(nm_pkgrundir), '-DNMSTATEDIR="@0@"'.format(nm_pkgstatedir), '-DNMLIBDIR="@0@"'.format(nm_pkglibdir) diff --git a/src/ppp/meson.build b/src/ppp/meson.build index 20edb9d055..38f9a0f140 100644 --- a/src/ppp/meson.build +++ b/src/ppp/meson.build @@ -37,5 +37,5 @@ core_plugins += shared_module( ], link_depends: linker_script, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) diff --git a/src/settings/plugins/ibft/meson.build b/src/settings/plugins/ibft/meson.build index da9f556687..1b6ff28adc 100644 --- a/src/settings/plugins/ibft/meson.build +++ b/src/settings/plugins/ibft/meson.build @@ -26,7 +26,7 @@ libnm_settings_plugin_ibft = shared_module( link_args: ldflags_linker_script_settings, link_depends: linker_script_settings, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_settings_plugin_ibft diff --git a/src/settings/plugins/ifcfg-rh/meson.build b/src/settings/plugins/ifcfg-rh/meson.build index fdf308be09..964ce22db6 100644 --- a/src/settings/plugins/ifcfg-rh/meson.build +++ b/src/settings/plugins/ifcfg-rh/meson.build @@ -55,7 +55,7 @@ libnm_settings_plugin_ifcfg_rh = shared_module( link_args: ldflags_linker_script_settings, link_depends: linker_script_settings, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_settings_plugin_ifcfg_rh diff --git a/src/settings/plugins/ifupdown/meson.build b/src/settings/plugins/ifupdown/meson.build index 87b5bea2d1..fd028f4d3e 100644 --- a/src/settings/plugins/ifupdown/meson.build +++ b/src/settings/plugins/ifupdown/meson.build @@ -31,7 +31,7 @@ libnm_settings_plugin_ifupdown = shared_module( link_args: ldflags_linker_script_settings, link_depends: linker_script_settings, install: true, - install_dir: nm_pkglibdir + install_dir: nm_plugindir ) core_plugins += libnm_settings_plugin_ifupdown From 6384ad4ee16f31dd103f790bd193c4049d89a6fc Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Sun, 18 Mar 2018 20:38:49 +0100 Subject: [PATCH 3/3] build: qualify plugin dir name with a version string This makes package updates more robust, avoiding in-place replaces of the plugins. Previously, if an upgrade transaction was terminated, NetworkManager library could end up being of a different version than the plugins. If the user was unfortunate enough to connect using a connection that required a plugin (say, Wi-Fi), he would be left without a network connection making it somewhat inconvenient to recover from the botched upgrade. This makes the whole situation a little bit less sad. --- Makefile.am | 12 +++++++----- configure.ac | 7 +++---- contrib/fedora/rpm/NetworkManager.spec | 26 ++++++++++++++------------ meson.build | 14 ++++++++------ 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/Makefile.am b/Makefile.am index 2658439111..26a6b8863e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -20,7 +20,7 @@ sbin_PROGRAMS = bin_PROGRAMS = libexec_PROGRAMS = lib_LTLIBRARIES = -pkglib_LTLIBRARIES = +plugin_LTLIBRARIES = core_plugins = service_DATA = man_MANS = @@ -73,6 +73,8 @@ examplesdir = $(docdir)/examples rundir=$(runstatedir)/NetworkManager statedir=$(localstatedir)/lib/NetworkManager +plugindir=$(pkglibdir)/$(NM_DIST_VERSION) + dbusactivationdir = $(datadir)/dbus-1/system-services servicedir = $(datadir)/dbus-1/system-services @@ -578,7 +580,7 @@ libnm_core_libnm_core_la_CPPFLAGS = \ -DLOCALEDIR=\"$(datadir)/locale\" \ -DNMCONFDIR=\"$(nmconfdir)\" \ -DNMLIBDIR=\"$(nmlibdir)\" \ - -DNMPLUGINDIR=\"$(pkglibdir)\" \ + -DNMPLUGINDIR=\"$(plugindir)\" \ -DLIBEXECDIR=\"$(libexecdir)\" \ $(NULL) @@ -1173,7 +1175,7 @@ src_cppflags = \ \ -DNMCONFDIR=\"$(nmconfdir)\" \ -DNMLOCALEDIR=\"$(datadir)/locale\" \ - -DNMPLUGINDIR=\"$(pkglibdir)\" \ + -DNMPLUGINDIR=\"$(plugindir)\" \ -DNMRUNDIR=\"$(nmrundir)\" \ -DNMSTATEDIR=\"$(nmstatedir)\" \ -DNMLIBDIR=\"$(nmlibdir)\" \ @@ -4656,7 +4658,7 @@ check_PROGRAMS += $(check_programs) $(check_programs_norun) check_LTLIBRARIES += $(check_ltlibraries) endif -pkglib_LTLIBRARIES += $(core_plugins) +plugin_LTLIBRARIES += $(core_plugins) TESTS += $(check_programs) @@ -4756,7 +4758,7 @@ install-data-hook: $(install_data_hook) $(mkinstalldirs) -m 0755 $(DESTDIR)$(nmlibdir)/conf.d $(mkinstalldirs) -m 0755 $(DESTDIR)$(nmlibdir)/VPN $(mkinstalldirs) -m 0700 $(DESTDIR)$(nmstatedir) - $(mkinstalldirs) -m 0755 $(DESTDIR)$(pkglibdir) + $(mkinstalldirs) -m 0755 $(DESTDIR)$(plugindir) uninstall-hook: $(uninstall_hook) diff --git a/configure.ac b/configure.ac index 7ac11e1127..5609f28121 100644 --- a/configure.ac +++ b/configure.ac @@ -183,10 +183,9 @@ dnl AC_ARG_WITH(dist-version, AS_HELP_STRING([--with-dist-version=], [Define the NM''s distribution version string]), - ac_distver=$withval, ac_distver="") -if ! test x"$ac_distver" = x""; then - AC_DEFINE_UNQUOTED(NM_DIST_VERSION, "$ac_distver", [Define the distribution version string]) -fi + ac_distver=$withval, ac_distver=$NM_VERSION) +AC_DEFINE_UNQUOTED(NM_DIST_VERSION, "$ac_distver", [Define the distribution version string]) +AC_SUBST(NM_DIST_VERSION, "$ac_distver") AC_ARG_ENABLE(wifi, AS_HELP_STRING([--enable-wifi], [enable Wi-Fi support])) if test "${enable_wifi}" != "no"; then diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 04f78a205c..e1bdc45235 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -26,6 +26,7 @@ %global systemd_dir %{_prefix}/lib/systemd/system %global nmlibdir %{_prefix}/lib/%{name} +%global nmplugindir %{_libdir}/%{name}/%{version}-%{release} %global _hardened_build 1 @@ -528,7 +529,7 @@ ln -s ../10-ifcfg-rh-routes.sh %{buildroot}%{_sysconfdir}/%{name}/dispatcher.d/n rm -f %{buildroot}%{_libdir}/*.la rm -f %{buildroot}%{_libdir}/pppd/%{ppp_version}/*.la -rm -f %{buildroot}%{_libdir}/NetworkManager/*.la +rm -f %{buildroot}%{nmplugindir}/*.la # Ensure the documentation timestamps are constant to avoid multilib conflicts find %{buildroot}%{_datadir}/gtk-doc -exec touch --reference configure.ac '{}' \+ @@ -604,8 +605,9 @@ fi %{_libexecdir}/nm-dhcp-helper %{_libexecdir}/nm-dispatcher %{_libexecdir}/nm-iface-helper -%dir %{_libdir}/NetworkManager -%{_libdir}/NetworkManager/libnm-settings-plugin*.so +%dir %{_libdir}/%{name} +%dir %{nmplugindir} +%{nmplugindir}/libnm-settings-plugin*.so %if %{with nmtui} %exclude %{_mandir}/man1/nmtui* %endif @@ -635,35 +637,35 @@ fi %if %{with adsl} %files adsl -%{_libdir}/%{name}/libnm-device-plugin-adsl.so +%{nmplugindir}/libnm-device-plugin-adsl.so %else -%exclude %{_libdir}/%{name}/libnm-device-plugin-adsl.so +%exclude %{nmplugindir}/libnm-device-plugin-adsl.so %endif %if %{with bluetooth} %files bluetooth -%{_libdir}/%{name}/libnm-device-plugin-bluetooth.so +%{nmplugindir}/libnm-device-plugin-bluetooth.so %endif %if %{with team} %files team -%{_libdir}/%{name}/libnm-device-plugin-team.so +%{nmplugindir}/libnm-device-plugin-team.so %endif %if %{with wifi} %files wifi -%{_libdir}/%{name}/libnm-device-plugin-wifi.so +%{nmplugindir}/libnm-device-plugin-wifi.so %endif %if %{with wwan} %files wwan -%{_libdir}/%{name}/libnm-device-plugin-wwan.so -%{_libdir}/%{name}/libnm-wwan.so +%{nmplugindir}/libnm-device-plugin-wwan.so +%{nmplugindir}/libnm-wwan.so %endif %if %{with ovs} %files ovs -%{_libdir}/%{name}/libnm-device-plugin-ovs.so +%{nmplugindir}/libnm-device-plugin-ovs.so %{systemd_dir}/NetworkManager.service.d/NetworkManager-ovs.conf %{_mandir}/man7/nm-openvswitch.7* %endif @@ -671,7 +673,7 @@ fi %if %{with ppp} %files ppp %{_libdir}/pppd/%{ppp_version}/nm-pppd-plugin.so -%{_libdir}/%{name}/libnm-ppp-plugin.so +%{nmplugindir}/libnm-ppp-plugin.so %endif %if %{with libnm_glib} diff --git a/meson.build b/meson.build index dc1524aa0d..480c56ff88 100644 --- a/meson.build +++ b/meson.build @@ -25,6 +25,12 @@ nm_id_prefix = 'NM' nm_gir_version = '1.0' +# Distribution version string +dist_version = get_option('dist_version') +if dist_version == '' + dist_version = nm_version +endif + nm_prefix = get_option('prefix') nm_bindir = join_paths(nm_prefix, get_option('bindir')) nm_datadir = join_paths(nm_prefix, get_option('datadir')) @@ -45,7 +51,7 @@ nm_pkgincludedir = join_paths(nm_includedir, nm_name) nm_pkglibdir = join_paths(nm_prefix, 'lib', nm_name) nm_pkgrundir = join_paths(nm_runstatedir, nm_name) nm_pkgstatedir = join_paths(nm_localstatedir, nm_name) -nm_plugindir = join_paths(nm_libdir, nm_name) +nm_plugindir = join_paths(nm_libdir, nm_name, dist_version) libnm_name = 'libnm' @@ -259,11 +265,7 @@ if config_plugins_default == '' endif config_h.set_quoted('NM_CONFIG_DEFAULT_MAIN_PLUGINS', config_plugins_default) -# Distribution version string -dist_version = get_option('dist_version') -if dist_version != '' - config_h.set_quoted('NM_DIST_VERSION', dist_version) -endif +config_h.set_quoted('NM_DIST_VERSION', dist_version) enable_wifi = get_option('wifi') config_h.set10('WITH_WIFI', enable_wifi)