[libvirt] [dbus PATCH] build: convert to Meson/Ninja build system

Ján Tomko jtomko at redhat.com
Tue Sep 17 16:39:17 UTC 2019


On Tue, Sep 17, 2019 at 05:20:43PM +0200, Pavel Hrdina wrote:
>Meson build system is simple and quick compared to Autotools and it's
>able to fully replace our Autotools usage.  There are few drawbacks as
>it's a fairly new build system, it requires Python 3.5 and Ninja 1.5.0,
>it's still evolving and the user base is not that large and there were
>some tweaks required to achieve the same functionality.
>
>However, there are benefits, the configure and build time is way shorter

Neat, despite the colors

>and build definition files are more readable and easier to maintain.
>
>Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
>---
> .gitignore                  |   1 +
> AUTHORS.in                  |   2 +-
> HACKING.md                  |  16 +--
> Makefile.am                 |  51 -------
> README.md                   |  12 +-
> autogen.sh                  |  52 -------
> configure.ac                |  87 ------------
> data/Makefile.am            |  83 -----------
> data/meson.build            |  15 ++
> data/session/meson.build    |   6 +
> data/system/meson.build     |  18 +++
> docs/Makefile.am            |  21 ---
> docs/meson.build            |   8 ++
> libvirt-dbus.spec.in        |   8 +-
> m4/manywarnings.m4          | 276 ------------------------------------
> m4/virt-arg.m4              | 154 --------------------
> m4/virt-compile-pie.m4      |  35 -----
> m4/virt-compile-warnings.m4 | 203 --------------------------
> m4/virt-linker-relro.m4     |  35 -----
> m4/warnings.m4              |  79 -----------
> meson.build                 | 271 +++++++++++++++++++++++++++++++++++
> meson_options.txt           |   6 +
> run.in                      |   4 +-
> src/Makefile.am             |  66 ---------
> src/domain.c                |   2 +-
> src/meson.build             |  54 +++++++
> tests/Makefile.am           |  57 --------
> tests/meson.build           |  49 +++++++
> tools/gen-authors.sh        |   8 ++
> 29 files changed, 454 insertions(+), 1225 deletions(-)
> delete mode 100644 Makefile.am
> delete mode 100755 autogen.sh
> delete mode 100644 configure.ac
> delete mode 100644 data/Makefile.am
> create mode 100644 data/meson.build
> create mode 100644 data/session/meson.build
> create mode 100644 data/system/meson.build
> delete mode 100644 docs/Makefile.am
> create mode 100644 docs/meson.build
> delete mode 100644 m4/manywarnings.m4
> delete mode 100644 m4/virt-arg.m4
> delete mode 100644 m4/virt-compile-pie.m4
> delete mode 100644 m4/virt-compile-warnings.m4
> delete mode 100644 m4/virt-linker-relro.m4
> delete mode 100644 m4/warnings.m4
> create mode 100644 meson.build
> create mode 100644 meson_options.txt
> mode change 100644 => 100755 run.in
> delete mode 100644 src/Makefile.am
> create mode 100644 src/meson.build
> delete mode 100644 tests/Makefile.am
> create mode 100644 tests/meson.build
> create mode 100755 tools/gen-authors.sh
>
>-dist-hook: gen-AUTHORS
>-
>-# Generate the AUTHORS file (with all entries since the switch to git)
>-# and insert it into the directory we're about to use to create a tarball.
>-.PHONY: gen-AUTHORS
>-gen-AUTHORS:
>-	$(AM_V_GEN)\
>-	if test -d $(srcdir)/.git; then \
>-	  ( \
>-	    cd $(srcdir) && \
>-	    git log --pretty=format:'    %aN <%aE>' | sort -u \
>-	  ) > all.list && \
>-	  sort -u $(srcdir)/AUTHORS.in > maint.list && \
>-	  comm -23 all.list maint.list > contrib.list && \

This filtering is not present in the meson version, but I can live with
that "regression"

>-	  contrib="`cat contrib.list`" && \
>-	  perl -p -e "s/#contributorslist#// and print '$$contrib'" \
>-	    < $(srcdir)/AUTHORS.in > $(distdir)/AUTHORS-tmp && \
>-	  mv -f $(distdir)/AUTHORS-tmp $(distdir)/AUTHORS && \
>-	  rm -f all.list maint.list contrib.list; \
>-	fi
>-


>diff --git a/configure.ac b/configure.ac
>deleted file mode 100644
>index 24ebb26..0000000
>--- a/configure.ac
>+++ /dev/null
>-LIBVIRT_DBUS_MAJOR_VERSION=`echo $VERSION | awk -F. '{print $1}'`
>-LIBVIRT_DBUS_MINOR_VERSION=`echo $VERSION | awk -F. '{print $2}'`
>-LIBVIRT_DBUS_MICRO_VERSION=`echo $VERSION | awk -F. '{print $3}'`
>-LIBVIRT_DBUS_VERSION=$LIBVIRT_DBUS_MAJOR_VERSION.$LIBVIRT_DBUS_MINOR_VERSION.$LIBVIRT_DBUS_MICRO_VERSION$LIBVIRT_DBUS_MICRO_VERSION_SUFFIX
>-LIBVIRT_DBUS_VERSION_NUMBER=`expr $LIBVIRT_DBUS_MAJOR_VERSION \* 1000000 + $LIBVIRT_dbus_MINOR_VERSION \* 1000 + $LIBVIRT_DBUS_MICRO_VERSION`
>-
>-AC_SUBST([LIBVIRT_DBUS_MAJOR_VERSION])
>-AC_SUBST([LIBVIRT_DBUS_MINOR_VERSION])
>-AC_SUBST([LIBVIRT_DBUS_MICRO_VERSION])
>-AC_SUBST([LIBVIRT_DBUS_VERSION])
>-AC_SUBST([LIBVIRT_DBUS_VERSION_INFO])
>-AC_SUBST([LIBVIRT_DBUS_VERSION_NUMBER])
>-

We lose these, but they were unusued.

>-AC_PROG_CC
>-AC_PROG_MKDIR_P
>-AM_PROG_CC_C_O
>-AC_PROG_CC_STDC
>-AC_PROG_LIBTOOL
>-AC_PATH_PROGS([FLAKE8], [flake8 flake8-3.6])
>-
>diff --git a/meson.build b/meson.build
>new file mode 100644
>index 0000000..9cc4417
>--- /dev/null
>+++ b/meson.build
>@@ -0,0 +1,271 @@
>+project(
>+    'libvirt-dbus', 'c',
>+    version:'1.4.0',
>+    license: 'LGPLv2+',
>+    meson_version: '>= 0.49.0',
>+    default_options: [
>+        'buildtype=debugoptimized',
>+        'c_std=gnu99',
>+    ]
>+)
>+
>+
>+conf = configuration_data()
>+conf.set('PACKAGE', meson.project_name())
>+conf.set('VERSION', meson.project_version())
>+conf.set('build_root', meson.build_root())
>+conf.set('sbindir', get_option('sbindir'))
>+conf.set('source_root', meson.source_root())
>+
>+# Dependencies
>+
>+glib2_version = '2.44.0'
>+libvirt_version = '3.0.0'
>+libvirt_glib_version = '0.0.7'
>+
>+dep_gio_unix = dependency('gio-unix-2.0', version: '>=' + glib2_version)
>+dep_glib = dependency('glib-2.0', version: '>=' + glib2_version)
>+dep_libvirt = dependency('libvirt', version: '>=' + libvirt_version)
>+dep_libvirt_glib = dependency('libvirt-glib-1.0', version: '>=' + libvirt_glib_version)
>+
>+conf.set('GLIB2_REQUIRED', glib2_version)
>+conf.set('LIBVIRT_REQUIRED', libvirt_version)
>+conf.set('LIBVIRT_GLIB_REQUIRED', libvirt_glib_version)
>+
>+
>+# Configure options
>+
>+conf.set('SYSTEM_USER', get_option('system_user'))
>+
>+opt_dirs = [
>+    'dbus_interfaces',
>+    'dbus_services',
>+    'dbus_system_services',
>+    'dbus_system_policies',
>+    'polkit_rules',
>+]
>+
>+foreach opt_dir : opt_dirs
>+    value = get_option(opt_dir)
>+    varname = opt_dir + '_dir'
>+    if opt_dir.startswith('/')
>+        set_variable(varname, value)
>+    else
>+        set_variable(varname, join_paths(get_option('datadir'), value))
>+    endif
>+endforeach
>+
>+
>+# Compile flags
>+
>+common_flags = [
>+    '-DVIRT_DBUS_INTERFACES_DIR="@0@"'.format(dbus_interfaces_dir),
>+]
>+
>+cc_flags = [
>+    '-W',
>+    '-Waddress',
>+    '-Waggressive-loop-optimizations',
>+    '-Wall',
>+    '-Warray-bounds=2',
>+    '-Wattributes',
>+    '-Wbad-function-cast',
>+    '-Wbool-compare',
>+    '-Wbuiltin-macro-redefined',
>+    '-Wcast-align',
>+    '-Wchar-subscripts',
>+    '-Wclobbered',
>+    '-Wcomment',
>+    '-Wcomments',
>+    '-Wcoverage-mismatch',
>+    '-Wcpp',
>+    '-Wdate-time',
>+    '-Wdeprecated-declarations',
>+    '-Wdesignated-init',
>+    '-Wdiscarded-array-qualifiers',
>+    '-Wdiscarded-qualifiers',
>+    '-Wdiv-by-zero',
>+    '-Wdouble-promotion',
>+    '-Wduplicated-cond',
>+    '-Wempty-body',
>+    '-Wendif-labels',
>+    '-Wextra',
>+    '-Wformat',
>+    '-Wformat-contains-nul',
>+    '-Wformat-extra-args',
>+    '-Wformat-nonliteral',
>+    '-Wformat-security',
>+    '-Wformat-y2k',
>+    '-Wformat-zero-length',
>+    '-Wframe-address',

>+    '-Wframe-larger-then=256',

s/then/than/

Also, 256 is not enough:
../src/connect.c:1613:1: error: stack frame size of 552 bytes in function 'virtDBusConnectNodeGetSecurityModel' [-Werror,-Wframe-larger-than=]

and -Werror is missing from the list

>+    '-Wfree-nonheap-object',
>+    '-Whsa',

>diff --git a/src/domain.c b/src/domain.c
>index e8b1a0e..10fa8de 100644
>--- a/src/domain.c
>+++ b/src/domain.c
>@@ -136,7 +136,7 @@ virtDBusDomainGVariantToCpumap(GVariantIter *iter,
>     guint cnt = 0;
>
>     *cpumaplen = VIR_CPU_MAPLEN(cpus);
>-    *cpumap = g_new0(guchar, cpumaplen);
>+    *cpumap = g_new0(guchar, *cpumaplen);
>
>     while (g_variant_iter_loop(iter, "b", &usable)) {
>         if (usable)

Unrelated fix that should go in as a separate patch.
To this hunk:
Reviewed-by: Ján Tomko <jtomko at redhat.com>

>+flake8 = find_program('flake8', 'flake8-3', required: false)
>+if flake8.found()
>+    test(
>+        'flake8', flake8,
>+        args: [
>+            '--show-source',
>+            '--ignore=E501',
>+            meson.source_root(),
>+        ]
>+    )

Can you include the text representation of E501?
# E501: (line too long) warning is ignored.

The rest looks good to me, but I presume someone who actually touched
meson before should take a look.

Tested-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190917/628e49e7/attachment-0001.sig>


More information about the libvir-list mailing list