diff --git a/contrib/fedora/rpm/NetworkManager.spec b/contrib/fedora/rpm/NetworkManager.spec index 92386ecd7e..e9aa69ee3d 100644 --- a/contrib/fedora/rpm/NetworkManager.spec +++ b/contrib/fedora/rpm/NetworkManager.spec @@ -45,6 +45,7 @@ ############################################################################### +%bcond_with meson %bcond_without adsl %bcond_without bluetooth %bcond_without wwan @@ -144,8 +145,12 @@ Conflicts: kde-plasma-networkmanagement < 1:0.9-0.49.20110527git.nm09 BuildRequires: gcc BuildRequires: libtool BuildRequires: pkgconfig +%if %{with meson} +BuildRequires: meson +%else BuildRequires: automake BuildRequires: autoconf +%endif BuildRequires: intltool BuildRequires: gettext-devel @@ -453,6 +458,99 @@ by nm-connection-editor and nm-applet in a non-graphical environment. %build +%if %{with meson} +%meson \ + -Ddhcpcanon=no \ + -Ddhcpcd=no \ + -Dconfig_dhcp_default=%{dhcp_default} \ +%if %{with crypto_gnutls} + -Dcrypto=gnutls \ +%else + -Dcrypto=nss \ +%endif +%if %{with debug} + -Dmore_logging=true \ + -Dmore_asserts=10000 \ +%else + -Dmore_logging=false \ + -Dmore_asserts=0 \ +%endif + -Dld_gc=true \ + -Dlibaudit=yes-disabled-by-default \ +%if 0%{?with_modem_manager_1} + -Dmodem_manager=true \ +%else + -Dmodem_manager=false \ +%endif +%if %{with wifi} + -Dwifi=true \ +%if 0%{?fedora} + -Dwext=true \ +%else + -Dwext=false \ +%endif +%else + -Dwifi=false \ +%endif +%if %{with iwd} + -Diwd=true \ +%else + -Diwd=false \ +%endif + -Dvapi=true \ + -Dintrospection=true \ +%if %{with regen_docs} + -Ddocs=true \ +%else + -Ddocs=false \ +%endif +%if %{with team} + -Dteamdctl=true \ +%else + -Dteamdctl=false \ +%endif +%if %{with ovs} + -Dovs=true \ +%else + -Dovs=false \ +%endif + -Dselinux=true \ + -Dpolkit=yes \ + -Dpolkit_agent=true \ + -Dmodify_system=true \ + -Dconcheck=true \ +%if 0%{?fedora} + -Dlibpsl=true \ +%else + -Dlibpsl=false \ +%endif + -Dsession_tracking=systemd \ + -Dsuspend_resume=systemd \ + -Dsystemdsystemunitdir=%{systemd_dir} \ + -Dsystem_ca_path=/etc/pki/tls/cert.pem \ + -Ddbus_conf_dir=%{dbus_sys_dir} \ + -Dtests=yes \ + -Dvalgrind=no \ + -Difcfg_rh=true \ +%if %{with ppp} + -Dpppd_plugin_dir=%{_libdir}/pppd/%{ppp_version} \ + -Dppp=true \ +%endif + -Ddist_version=%{version}-%{release} \ + -Dconfig_plugins_default='ifcfg-rh' \ + -Dconfig_dns_rc_manager_default=symlink \ + -Dconfig_logging_backend_default=journal \ + -Djson_validation=true \ +%if %{with libnm_glib} + -Dlibnm_glib=true +%else + -Dlibnm_glib=false +%endif + +%meson_build + +%else +# autotools %if %{with regen_docs} gtkdocize %endif @@ -565,10 +663,14 @@ intltoolize --automake --copy --force make %{?_smp_mflags} +%endif # end autotools %install -# install NM +%if %{with meson} +%meson_install +%else make install DESTDIR=%{buildroot} +%endif cp %{SOURCE1} %{buildroot}%{_sysconfdir}/%{name}/ @@ -604,11 +706,20 @@ touch %{buildroot}%{_sbindir}/ifup %{buildroot}%{_sbindir}/ifdown %check +%if %{with meson} +%if %{with test} +%meson_test +%else +%ninja_test -C %{_vpath_builddir} || : +%endif +%else +# autotools %if %{with test} make -k %{?_smp_mflags} check %else make -k %{?_smp_mflags} check || : %endif +%endif # end autotools %pre @@ -780,7 +891,6 @@ fi %if %{with libnm_glib} %files glib-devel -%doc docs/api/html/* %dir %{_includedir}/libnm-glib %dir %{_includedir}/%{name} %{_includedir}/libnm-glib/*.h @@ -816,7 +926,6 @@ fi %files libnm-devel -%doc docs/api/html/* %dir %{_includedir}/libnm %{_includedir}/libnm/*.h %{_libdir}/pkgconfig/libnm.pc diff --git a/docs/api/meson.build b/docs/api/meson.build index d0cc3ac8cf..31b9776c88 100644 --- a/docs/api/meson.build +++ b/docs/api/meson.build @@ -21,6 +21,23 @@ configure_file( ) content_files += join_paths(meson.source_root(), 'COPYING') +filecopier = find_program('cp') +foreach intro : introspection_files + path = intro.full_path().split('/')[-1] + custom_target(path, + input: intro, + output: path, + command : [filecopier, '@INPUT@', '@OUTPUT@'], + build_by_default: true, +) +endforeach + +custom_target('common.ent', + input: common_ent_file, + output: 'common.ent', + command: [filecopier, '@INPUT@', '@OUTPUT@'], + build_by_default: true, +) gnome.gtkdoc( doc_module, diff --git a/introspection/meson.build b/introspection/meson.build index a554083684..35d8c87c42 100644 --- a/introspection/meson.build +++ b/introspection/meson.build @@ -53,6 +53,7 @@ ifaces = [ ifaces_xmls = [] sources = [] +introspection_files = [] # FIXME?: DBUS_INTERFACE_DOCS/docbook files are generated in # "meson.current_build_dir()" instead of "meson.source_root()/docs/api" @@ -60,7 +61,7 @@ foreach iface: ifaces iface_xml = iface + '.xml' ifaces_xmls += files(iface_xml) - sources += gnome.gdbus_codegen( + res = gnome.gdbus_codegen( iface, iface_xml, interface_prefix: 'org.freedesktop.NetworkManager', @@ -68,8 +69,15 @@ foreach iface: ifaces docbook: 'dbus' ) - # FIXME: gnome.gdbus_codegen should return the docbook as a target result + sources += res + content_files += join_paths(meson.current_build_dir(), 'dbus-' + iface_xml) + + # res is an array only since 0.46. Documentation won't work with + # older versions + if meson.version().version_compare('>= 0.46.0') + introspection_files += res[2] + endif endforeach install_data( diff --git a/man/meson.build b/man/meson.build index 41fbf583a6..21fac21d1d 100644 --- a/man/meson.build +++ b/man/meson.build @@ -40,15 +40,14 @@ mans = [ ['nm-online', '1'], ['nmcli-examples', '7'], ['nmcli', '1'], - ['nmtui', '1'] + ['nmtui', '1'], + ['nm-initrd-generator', '8'], ] if enable_ovs mans += [['nm-openvswitch', '7']] endif -content_files += join_paths(meson.current_build_dir(), 'common.ent') - foreach man: mans input = man[0] + '.xml' content_files += join_paths(meson.current_source_dir(), input) diff --git a/meson.build b/meson.build index 32e9522171..c7c0bfc589 100644 --- a/meson.build +++ b/meson.build @@ -244,7 +244,7 @@ endif enable_ifcfg_rh = get_option('ifcfg_rh') or (distro == 'redhat') enable_ifupdown = get_option('ifupdown') or (distro == 'debian') -enable_ibft = get_option('ibft') or enable_ifcfg_rh +enable_ibft = get_option('ibft') config_h.set10('WITH_SETTINGS_PLUGIN_IBFT', enable_ibft) @@ -879,6 +879,7 @@ enable_docs = get_option('docs') if enable_docs assert(enable_introspection, '-Ddocs=true requires -Dintrospection=true') + assert(meson.version().version_compare('>= 0.46.0'), '-Ddocs requires meson >= 0.46') subdir('man') subdir('docs') endif @@ -927,7 +928,7 @@ meson.add_install_script( nm_bindir, nm_pkgconfdir, nm_pkglibdir, - nm_localstatedir, + nm_pkgstatedir, enable_docs ? 'install_docs' : '', nm_mandir ) diff --git a/src/settings/plugins/ifcfg-rh/meson.build b/src/settings/plugins/ifcfg-rh/meson.build index e4bce09b2a..e84ae80cf7 100644 --- a/src/settings/plugins/ifcfg-rh/meson.build +++ b/src/settings/plugins/ifcfg-rh/meson.build @@ -63,6 +63,15 @@ check-local-symbols-settings-ifcfg-rh: src/settings/plugins/ifcfg-rh/libnm-setti $(call check_so_symbols,$(builddir)/src/settings/plugins/ifcfg-rh/.libs/libnm-settings-plugin-ifcfg-rh.so) ''' +install_data( + ['nm-ifup', 'nm-ifdown'], + install_dir: nm_libexecdir, + install_mode: 'rwxr-xr-x', +) + +meson.add_install_script('sh', '-c', + 'mkdir -p $DESTDIR/@0@/sysconfig/network-scripts'.format(nm_sysconfdir)) + if enable_tests subdir('tests') endif diff --git a/tools/meson-post-install.sh b/tools/meson-post-install.sh index fd21941bbd..8a60ce33c7 100755 --- a/tools/meson-post-install.sh +++ b/tools/meson-post-install.sh @@ -4,7 +4,7 @@ datadir=$1 bindir=$2 pkgconfdir=$3 pkglibdir=$4 -localstatedir=$5 +pkgstatedir=$5 [ -n "$DESTDIR" ] && DESTDIR=${DESTDIR%%/}/ @@ -26,12 +26,15 @@ for dir in "${pkgconfdir}/conf.d" \ "${pkgconfdir}/dispatcher.d/pre-up.d" \ "${pkgconfdir}/dnsmasq.d" \ "${pkgconfdir}/dnsmasq-shared.d" \ - "${pkgconfdir}/conf.d" \ - "${pkgconfdir}/VPN" \ - "${localstatedir}/lib/NetworkManager"; do + "${pkglibdir}/conf.d" \ + "${pkglibdir}/VPN"; do mkdir -p "${DESTDIR}${dir}" + chmod 0755 "${DESTDIR}${dir}" done +mkdir -p "${DESTDIR}${pkgstatedir}" +chmod 0700 "${DESTDIR}${pkgstatedir}" + if [ "$6" = install_docs ]; then mandir=$7