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

Pavel Hrdina posted 1 patch 4 years, 7 months ago
Failed in applying to current master (apply log)
There is a newer version of this series
.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
[libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Pavel Hrdina 4 years, 7 months ago
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
and build definition files are more readable and easier to maintain.

Signed-off-by: Pavel Hrdina <phrdina@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

diff --git a/.gitignore b/.gitignore
index b4abf66..7ed7554 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@ vgcore.*
 /aclocal.m4
 /autom4te.cache/
 /build-aux/
+/build/
 /config.h
 /config.h.in
 /config.log
diff --git a/AUTHORS.in b/AUTHORS.in
index 52202ea..d5a486e 100644
--- a/AUTHORS.in
+++ b/AUTHORS.in
@@ -13,4 +13,4 @@ The primary maintainers of libvirt-dbus are:
 
 Patches have been received from:
 
-#contributorslist#
+@contributorslist@
diff --git a/HACKING.md b/HACKING.md
index 8903408..f9b4455 100644
--- a/HACKING.md
+++ b/HACKING.md
@@ -16,32 +16,26 @@ Alternatively you can use one of the mirrors:
 Running from git repository
 ---------------------------
 
-  * The first step is to run autoreconf to create configure script:
+  * The first step is to run meson to create build directory:
 
     ```
-    ./autogen.sh
+    meson build
     ```
 
     Now you can compile libvirt-dbus:
 
     ```
-    make
+    ninja -C build
     ```
 
 
   * Before posting a patch, you should run tests and perform syntax-checking:
 
     ```
-    make check
+    ninja -C build test
     ```
 
-    The test tool requires python3, python3-pytest and python3-dbus.
-
-    ```
-    make syntax-check
-    ```
-
-    To run this flake8 package is required.
+    The test tool requires python3, python3-pytest, python3-dbus and flake8.
 
 
   * To run libvirt-dbus directly from the build dir without installing it
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644
index 0914449..0000000
--- a/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-SUBDIRS = \
-	data \
-	docs \
-	src \
-	tests \
-	$(NULL)
-
-ACLOCAL_AMFLAGS = -I m4
-
-EXTRA_DIST = \
-	$(PACKAGE).spec \
-	$(PACKAGE).spec.in \
-	AUTHORS.in \
-	HACKING.md \
-	README.md \
-	$(NULL)
-
-DISTCLEAN_FILES = \
-	$(PACKAGE).spec \
-	$(NULL)
-
-rpm: clean
-	@(unset CDPATH ; $(MAKE) dist && rpmbuild -ta $(distdir).tar.xz)
-
-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 && \
-	  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
-
-# E501: (line too long) warning is ignored.
-.PHONY: flake8
-flake8:
-	$(FLAKE8) --show-source --ignore=E501 $(srcdir)
-
-syntax-check: flake8
diff --git a/README.md b/README.md
index 66aa6f6..e365650 100644
--- a/README.md
+++ b/README.md
@@ -32,21 +32,19 @@ The packages required to build libvirt-dbus are
 Installation
 ------------
 
-libvirt-dbus uses GNU Autotools build system, so the build & install
+libvirt-dbus uses Meson build system, so the build & install
 process is fairly simple. For example, to install as root user:
 
 ```
-# ./configure --prefix=/usr --sysconfigdir=/etc --localstatedir=/var
-# make
-# make install
+# meson build --prefix=/usr --sysconfigdir=/etc --localstatedir=/var
+# ninja -C build install
 ```
 
 or to install as unprivileged user:
 
 ```
-$ ./configure --prefix=$HOME/usr
-$ make
-$ make install
+$ meson build --prefix=$HOME/usr
+$ ninja -C build install
 ```
 
 
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index 6f29899..0000000
--- a/autogen.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-set -e
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-THEDIR=`pwd`
-cd $srcdir
-
-DIE=0
-
-for prog in autoreconf automake autoconf libtoolize
-do
-    ($prog --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have $prog installed to compile libvirt-dbus."
-        DIE=1
-    }
-done
-
-if test "$DIE" -eq 1; then
-        exit 1
-fi
-
-if test -z "$*"; then
-        echo "I am going to run ./configure with no args - if you "
-        echo "wish to pass any extra arguments to it, please specify them on "
-        echo "the $0 command line."
-fi
-
-mkdir -p build-aux
-autoreconf -if
-
-cd $THEDIR
-
-if test "x$1" = "x--system"; then
-    shift
-    prefix=/usr
-    libdir=$prefix/lib
-    sysconfdir=/etc
-    localstatedir=/var
-    if [ -d /usr/lib64 ]; then
-      libdir=$prefix/lib64
-    fi
-    EXTRA_ARGS="--prefix=$prefix --sysconfdir=$sysconfdir --localstatedir=$localstatedir --libdir=$libdir"
-fi
-
-$srcdir/configure $EXTRA_ARGS "$@" && {
-    echo
-    echo "Now type 'make' to compile libvirt-dbus."
-}
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index 24ebb26..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,87 +0,0 @@
-AC_INIT([libvirt-dbus], [1.4.0], [libvir-list@redhat.com], [], [https://libvirt.org])
-
-AC_CONFIG_SRCDIR([src/main.c])
-AC_CONFIG_AUX_DIR([build-aux])
-AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_MACRO_DIR([m4])
-dnl Make automake keep quiet about wildcards & other GNUmake-isms
-AM_INIT_AUTOMAKE([foreign -Wno-portability -Wno-obsolete subdir-objects tar-pax no-dist-gzip dist-xz])
-AC_CANONICAL_HOST
-AC_USE_SYSTEM_EXTENSIONS
-
-AM_SILENT_RULES([yes])
-
-GLIB2_REQUIRED=2.44.0
-LIBVIRT_REQUIRED=3.0.0
-LIBVIRT_GLIB_REQUIRED=0.0.7
-AC_SUBST([GLIB2_REQUIRED]) dnl used in the .spec file
-AC_SUBST([LIBVIRT_REQUIRED]) dnl used in the .spec file
-AC_SUBST([LIBVIRT_GLIB_REQUIRED]) dnl used in the .spec file
-
-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])
-
-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])
-
-PKG_CHECK_MODULES([GIO2], [gio-unix-2.0 >= $GLIB2_REQUIRED])
-PKG_CHECK_MODULES([GLIB2], [glib-2.0 >= $GLIB2_REQUIRED])
-PKG_CHECK_MODULES([LIBVIRT], [libvirt >= $LIBVIRT_REQUIRED])
-PKG_CHECK_MODULES([LIBVIRT_GLIB], [libvirt-glib-1.0 >= $LIBVIRT_GLIB_REQUIRED])
-
-LIBVIRT_COMPILE_WARNINGS
-LIBVIRT_LINKER_RELRO
-LIBVIRT_COMPILE_PIE
-
-LIBVIRT_ARG_WITH([DBUS_SERVICES], [where D-Bus session services direcotry is],
-                 ['$(datadir)/dbus-1/services'])
-DBUS_SERVICES_DIR="$with_dbus_services"
-AC_SUBST([DBUS_SERVICES_DIR])
-
-LIBVIRT_ARG_WITH([DBUS_SYSTEM_SERVICES], [where D-Bus system services directory is],
-                 ['$(datadir)/dbus-1/system-services'])
-DBUS_SYSTEM_SERVICES_DIR="$with_dbus_system_services"
-AC_SUBST([DBUS_SYSTEM_SERVICES_DIR])
-
-LIBVIRT_ARG_WITH([DBUS_SYSTEM_POLICIES], [where D-Bus system policies directory is],
-                 ['$(datadir)/dbus-1/system.d'])
-DBUS_SYSTEM_POLICIES_DIR="$with_dbus_system_policies"
-AC_SUBST([DBUS_SYSTEM_POLICIES_DIR])
-
-LIBVIRT_ARG_WITH([DBUS_INTERFACES], [where D-Bus interfaces directory is],
-                 ['$(datadir)/dbus-1/interfaces'])
-DBUS_INTERFACES_DIR="$with_dbus_interfaces"
-AC_SUBST([DBUS_INTERFACES_DIR])
-
-LIBVIRT_ARG_WITH([POLKIT_RULES], [directory for polkit rules],
-                 ['$(datadir)/polkit-1/rules.d'])
-POLKIT_RULES_DIR="$with_polkit_rules"
-AC_SUBST([POLKIT_RULES_DIR])
-
-LIBVIRT_ARG_WITH([SYSTEM_USER], [username to run system instance as],
-                 ['libvirtdbus'])
-SYSTEM_USER=$with_system_user
-AC_SUBST([SYSTEM_USER])
-
-AC_CONFIG_FILES([run],
-                [chmod +x,-w run])
-AC_OUTPUT([Makefile
-           data/Makefile
-           docs/Makefile
-           src/Makefile
-           tests/Makefile
-           libvirt-dbus.spec])
diff --git a/data/Makefile.am b/data/Makefile.am
deleted file mode 100644
index f8311bd..0000000
--- a/data/Makefile.am
+++ /dev/null
@@ -1,83 +0,0 @@
-service_in_files = \
-	session/org.libvirt.service.in \
-	$(NULL)
-servicedir = $(DBUS_SERVICES_DIR)
-service_DATA = \
-	$(service_in_files:.service.in=.service) \
-	$(NULL)
-
-system_service_in_files = \
-	system/org.libvirt.service.in \
-	$(NULL)
-system_servicedir = $(DBUS_SYSTEM_SERVICES_DIR)
-system_service_DATA = \
-	$(system_service_in_files:.service.in=.service) \
-	$(NULL)
-
-system_policy_in_files = \
-	system/org.libvirt.conf.in \
-	$(NULL)
-system_policydir = $(DBUS_SYSTEM_POLICIES_DIR)
-system_policy_DATA = \
-	$(system_policy_in_files:.conf.in=.conf) \
-	$(NULL)
-
-polkit_in_files = \
-	system/libvirt-dbus.rules.in \
-	$(NULL)
-polkitdir = $(POLKIT_RULES_DIR)
-polkit_DATA = \
-	$(polkit_in_files:.rules.in=.rules) \
-	$(NULL)
-
-interfaces_files = \
-	org.libvirt.Connect.xml \
-	org.libvirt.Domain.xml \
-	org.libvirt.Interface.xml \
-	org.libvirt.Network.xml \
-	org.libvirt.NodeDevice.xml \
-	org.libvirt.NWFilter.xml \
-	org.libvirt.Secret.xml \
-	org.libvirt.StoragePool.xml \
-	org.libvirt.StorageVol.xml \
-	$(NULL)
-interfacesdir = $(DBUS_INTERFACES_DIR)
-interfaces_DATA = \
-	$(interfaces_files) \
-	$(NULL)
-
-EXTRA_DIST = \
-	$(service_in_files) \
-	$(system_service_in_files) \
-	$(system_policy_in_files) \
-	$(polkit_in_files) \
-	$(interfaces_files) \
-	$(NULL)
-
-CLEANFILES = \
-	$(service_DATA) \
-	$(system_service_DATA) \
-	$(system_policy_DATA) \
-	$(polkit_DATA) \
-	$(NULL)
-
-session/org.libvirt.service: session/org.libvirt.service.in
-	$(AM_V_GEN)$(MKDIR_P) session && \
-		sed -e 's|[@]sbindir[@]|$(sbindir)|g' < $< > $@-t && \
-			mv $@-t $@
-
-system/org.libvirt.service: system/org.libvirt.service.in
-	$(AM_V_GEN)$(MKDIR_P) system && \
-		sed -e 's|[@]sbindir[@]|$(sbindir)|g' \
-		    -e 's|[@]SYSTEM_USER[@]|$(SYSTEM_USER)|' \
-			< $< > $@-t && mv $@-t $@
-
-system/org.libvirt.conf: system/org.libvirt.conf.in
-	$(AM_V_GEN)$(MKDIR_P) system && \
-		sed -e 's|[@]SYSTEM_USER[@]|$(SYSTEM_USER)|' \
-			< $< > $@-t && mv $@-t $@
-
-system/libvirt-dbus.rules: system/libvirt-dbus.rules.in
-	$(AM_V_GEN)$(MKDIR_P) system && \
-		sed -e 's|[@]SYSTEM_USER[@]|$(SYSTEM_USER)|' \
-			< $< > $@-t && mv $@-t $@
diff --git a/data/meson.build b/data/meson.build
new file mode 100644
index 0000000..42a6799
--- /dev/null
+++ b/data/meson.build
@@ -0,0 +1,15 @@
+install_data(
+    'org.libvirt.Connect.xml',
+    'org.libvirt.Domain.xml',
+    'org.libvirt.Interface.xml',
+    'org.libvirt.Network.xml',
+    'org.libvirt.NodeDevice.xml',
+    'org.libvirt.NWFilter.xml',
+    'org.libvirt.Secret.xml',
+    'org.libvirt.StoragePool.xml',
+    'org.libvirt.StorageVol.xml',
+    install_dir: dbus_interfaces_dir,
+)
+
+subdir('session')
+subdir('system')
diff --git a/data/session/meson.build b/data/session/meson.build
new file mode 100644
index 0000000..240fcef
--- /dev/null
+++ b/data/session/meson.build
@@ -0,0 +1,6 @@
+configure_file(
+    configuration: conf,
+    input: 'org.libvirt.service.in',
+    output: 'org.libvirt.service',
+    install_dir: dbus_services_dir,
+)
diff --git a/data/system/meson.build b/data/system/meson.build
new file mode 100644
index 0000000..74f1949
--- /dev/null
+++ b/data/system/meson.build
@@ -0,0 +1,18 @@
+configure_file(
+    configuration: conf,
+    input: 'org.libvirt.service.in',
+    output: 'org.libvirt.service',
+    install_dir: dbus_system_services_dir,
+)
+configure_file(
+    configuration: conf,
+    input: 'org.libvirt.conf.in',
+    output: 'org.libvirt.conf',
+    install_dir: dbus_system_policies_dir,
+)
+configure_file(
+    configuration: conf,
+    input: 'libvirt-dbus.rules.in',
+    output: 'libvirt-dbus.rules',
+    install_dir: polkit_rules_dir,
+)
diff --git a/docs/Makefile.am b/docs/Makefile.am
deleted file mode 100644
index fe8ca1c..0000000
--- a/docs/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)"
-
-PODFILES = \
-	libvirt-dbus.pod \
-	$(NULL)
-
-%.8: %.pod
-	$(AM_V_GEN)$(POD2MAN) -s 8 $< $@ \
-		&& if grep 'POD ERROR' $@; then rm $@; exit 1; fi
-
-man8_MANS = \
-	libvirt-dbus.8 \
-	$(NULL)
-
-EXTRA_DIST = \
-	$(PODFILES) \
-	$(NULL)
-
-CLEANFILES = \
-	$(man8_MANS) \
-	$(NULL)
diff --git a/docs/meson.build b/docs/meson.build
new file mode 100644
index 0000000..e62e71a
--- /dev/null
+++ b/docs/meson.build
@@ -0,0 +1,8 @@
+prog_pod2man = find_program('pod2man')
+
+configure_file(
+    command: [prog_pod2man.path(), '-s 8', '@INPUT@', '@OUTPUT@'],
+    input: 'libvirt-dbus.pod',
+    output: 'libvirt-dbus.8',
+    install_dir: join_paths (get_option('mandir'), 'man8'),
+)
diff --git a/libvirt-dbus.spec.in b/libvirt-dbus.spec.in
index 626e2da..50471b8 100644
--- a/libvirt-dbus.spec.in
+++ b/libvirt-dbus.spec.in
@@ -14,7 +14,7 @@ URL: https://libvirt.org/
 Source0: https://libvirt.org/sources/dbus/%{name}-%{version}.tar.xz
 
 BuildRequires: gcc
-BuildRequires: libtool
+BuildRequires: meson
 BuildRequires: glib2-devel >= %{glib2_version}
 BuildRequires: libvirt-devel >= %{libvirt_version}
 BuildRequires: libvirt-glib-devel >= %{libvirt_glib_version}
@@ -35,11 +35,11 @@ This package provides D-Bus API for libvirt
 %autosetup
 
 %build
-%configure
-%make_build
+%meson
+%meson_build
 
 %install
-%make_install
+%meson_install
 
 %pre
 getent group %{system_user} >/dev/null || groupadd -r %{system_user}
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
deleted file mode 100644
index 0f06ade..0000000
--- a/m4/manywarnings.m4
+++ /dev/null
@@ -1,276 +0,0 @@
-# manywarnings.m4 serial 8
-dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Simon Josefsson
-
-# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
-# --------------------------------------------------
-# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
-# Elements separated by whitespace.  In set logic terms, the function
-# does OUTVAR = LISTVAR \ REMOVEVAR.
-AC_DEFUN([gl_MANYWARN_COMPLEMENT],
-[
-  gl_warn_set=
-  set x $2; shift
-  for gl_warn_item
-  do
-    case " $3 " in
-      *" $gl_warn_item "*)
-        ;;
-      *)
-        gl_warn_set="$gl_warn_set $gl_warn_item"
-        ;;
-    esac
-  done
-  $1=$gl_warn_set
-])
-
-# gl_MANYWARN_ALL_GCC(VARIABLE)
-# -----------------------------
-# Add all documented GCC warning parameters to variable VARIABLE.
-# Note that you need to test them using gl_WARN_ADD if you want to
-# make sure your gcc understands it.
-AC_DEFUN([gl_MANYWARN_ALL_GCC],
-[
-  dnl First, check for some issues that only occur when combining multiple
-  dnl gcc warning categories.
-  AC_REQUIRE([AC_PROG_CC])
-  if test -n "$GCC"; then
-
-    dnl Check if -W -Werror -Wno-missing-field-initializers is supported
-    dnl with the current $CC $CFLAGS $CPPFLAGS.
-    AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported])
-    AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers"
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([[]], [[]])],
-        [gl_cv_cc_nomfi_supported=yes],
-        [gl_cv_cc_nomfi_supported=no])
-      CFLAGS="$gl_save_CFLAGS"])
-    AC_MSG_RESULT([$gl_cv_cc_nomfi_supported])
-
-    if test "$gl_cv_cc_nomfi_supported" = yes; then
-      dnl Now check whether -Wno-missing-field-initializers is needed
-      dnl for the { 0, } construct.
-      AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed])
-      AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [
-        gl_save_CFLAGS="$CFLAGS"
-        CFLAGS="$CFLAGS -W -Werror"
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[int f (void)
-               {
-                 typedef struct { int a; int b; } s_t;
-                 s_t s1 = { 0, };
-                 return s1.b;
-               }
-             ]],
-             [[]])],
-          [gl_cv_cc_nomfi_needed=no],
-          [gl_cv_cc_nomfi_needed=yes])
-        CFLAGS="$gl_save_CFLAGS"
-      ])
-      AC_MSG_RESULT([$gl_cv_cc_nomfi_needed])
-    fi
-
-    dnl Next, check if -Werror -Wuninitialized is useful with the
-    dnl user's choice of $CFLAGS; some versions of gcc warn that it
-    dnl has no effect if -O is not also used
-    AC_MSG_CHECKING([whether -Wuninitialized is supported])
-    AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [
-      gl_save_CFLAGS="$CFLAGS"
-      CFLAGS="$CFLAGS -Werror -Wuninitialized"
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([[]], [[]])],
-        [gl_cv_cc_uninitialized_supported=yes],
-        [gl_cv_cc_uninitialized_supported=no])
-      CFLAGS="$gl_save_CFLAGS"])
-    AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported])
-
-  fi
-
-  # List all gcc warning categories.
-  # To compare this list to your installed GCC's, run this Bash command:
-  #
-  # comm -3 \
-  #  <(sed -n 's/^  *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \
-  #  <(gcc --help=warnings | sed -n 's/^  \(-[^ ]*\) .*/\1/p' | sort |
-  #      grep -v -x -f <(
-  #         awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec))
-
-  gl_manywarn_set=
-  for gl_manywarn_item in \
-    -fno-common \
-    -W \
-    -Wabi \
-    -Waddress \
-    -Waggressive-loop-optimizations \
-    -Wall \
-    -Wattributes \
-    -Wbad-function-cast \
-    -Wbool-compare \
-    -Wbuiltin-macro-redefined \
-    -Wcast-align \
-    -Wchar-subscripts \
-    -Wchkp \
-    -Wclobbered \
-    -Wcomment \
-    -Wcomments \
-    -Wcoverage-mismatch \
-    -Wcpp \
-    -Wdate-time \
-    -Wdeprecated \
-    -Wdeprecated-declarations \
-    -Wdesignated-init \
-    -Wdisabled-optimization \
-    -Wdiscarded-array-qualifiers \
-    -Wdiscarded-qualifiers \
-    -Wdiv-by-zero \
-    -Wdouble-promotion \
-    -Wduplicated-cond \
-    -Wempty-body \
-    -Wendif-labels \
-    -Wenum-compare \
-    -Wextra \
-    -Wformat-contains-nul \
-    -Wformat-extra-args \
-    -Wformat-nonliteral \
-    -Wformat-security \
-    -Wformat-signedness \
-    -Wformat-y2k \
-    -Wformat-zero-length \
-    -Wframe-address \
-    -Wfree-nonheap-object \
-    -Whsa \
-    -Wignored-attributes \
-    -Wignored-qualifiers \
-    -Wimplicit \
-    -Wimplicit-function-declaration \
-    -Wimplicit-int \
-    -Wincompatible-pointer-types \
-    -Winit-self \
-    -Winline \
-    -Wint-conversion \
-    -Wint-to-pointer-cast \
-    -Winvalid-memory-model \
-    -Winvalid-pch \
-    -Wjump-misses-init \
-    -Wlogical-not-parentheses \
-    -Wlogical-op \
-    -Wmain \
-    -Wmaybe-uninitialized \
-    -Wmemset-transposed-args \
-    -Wmisleading-indentation \
-    -Wmissing-braces \
-    -Wmissing-declarations \
-    -Wmissing-field-initializers \
-    -Wmissing-include-dirs \
-    -Wmissing-parameter-type \
-    -Wmissing-prototypes \
-    -Wmultichar \
-    -Wnarrowing \
-    -Wnested-externs \
-    -Wnonnull \
-    -Wnonnull-compare \
-    -Wnull-dereference \
-    -Wodr \
-    -Wold-style-declaration \
-    -Wold-style-definition \
-    -Wopenmp-simd \
-    -Woverflow \
-    -Woverlength-strings \
-    -Woverride-init \
-    -Wpacked \
-    -Wpacked-bitfield-compat \
-    -Wparentheses \
-    -Wpointer-arith \
-    -Wpointer-sign \
-    -Wpointer-to-int-cast \
-    -Wpragmas \
-    -Wreturn-local-addr \
-    -Wreturn-type \
-    -Wscalar-storage-order \
-    -Wsequence-point \
-    -Wshadow \
-    -Wshift-count-negative \
-    -Wshift-count-overflow \
-    -Wshift-negative-value \
-    -Wsizeof-array-argument \
-    -Wsizeof-pointer-memaccess \
-    -Wstack-protector \
-    -Wstrict-aliasing \
-    -Wstrict-overflow \
-    -Wstrict-prototypes \
-    -Wsuggest-attribute=const \
-    -Wsuggest-attribute=format \
-    -Wsuggest-attribute=noreturn \
-    -Wsuggest-attribute=pure \
-    -Wsuggest-final-methods \
-    -Wsuggest-final-types \
-    -Wswitch \
-    -Wswitch-bool \
-    -Wswitch-default \
-    -Wsync-nand \
-    -Wsystem-headers \
-    -Wtautological-compare \
-    -Wtrampolines \
-    -Wtrigraphs \
-    -Wtype-limits \
-    -Wuninitialized \
-    -Wunknown-pragmas \
-    -Wunsafe-loop-optimizations \
-    -Wunused \
-    -Wunused-but-set-parameter \
-    -Wunused-but-set-variable \
-    -Wunused-function \
-    -Wunused-label \
-    -Wunused-local-typedefs \
-    -Wunused-macros \
-    -Wunused-parameter \
-    -Wunused-result \
-    -Wunused-value \
-    -Wunused-variable \
-    -Wvarargs \
-    -Wvariadic-macros \
-    -Wvector-operation-performance \
-    -Wvla \
-    -Wvolatile-register-var \
-    -Wwrite-strings \
-    \
-    ; do
-    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
-  done
-
-  # gcc --help=warnings outputs an unusual form for these options; list
-  # them here so that the above 'comm' command doesn't report a false match.
-  gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2"
-  gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc"
-  gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2"
-  gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2"
-
-  # These are needed for older GCC versions.
-  if test -n "$GCC"; then
-    case `($CC --version) 2>/dev/null` in
-      'gcc (GCC) '[[0-3]].* | \
-      'gcc (GCC) '4.[[0-7]].*)
-        gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option"
-        gl_manywarn_set="$gl_manywarn_set -funit-at-a-time"
-          ;;
-    esac
-  fi
-
-  # Disable specific options as needed.
-  if test "$gl_cv_cc_nomfi_needed" = yes; then
-    gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers"
-  fi
-
-  if test "$gl_cv_cc_uninitialized_supported" = no; then
-    gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized"
-  fi
-
-  $1=$gl_manywarn_set
-])
diff --git a/m4/virt-arg.m4 b/m4/virt-arg.m4
deleted file mode 100644
index d626d72..0000000
--- a/m4/virt-arg.m4
+++ /dev/null
@@ -1,154 +0,0 @@
-dnl
-dnl virt-arg.m4: Helper macros for adding configure arguments
-dnl
-dnl Copyright (C) 2012-2014 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl <http://www.gnu.org/licenses/>.
-dnl
-
-
-dnl
-dnl To be used instead of AC_ARG_WITH
-dnl
-dnl See LIBVIRT_ARG_WITH_FEATURE if the argument you're adding is going to
-dnl be used for switching a feature on and off.
-dnl
-dnl LIBVIRT_ARG_WITH([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION])
-dnl
-dnl      CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
-dnl       HELP_DESC: Description that will appear in configure --help
-dnl  DEFAULT_ACTION: Default configure action
-dnl
-dnl LIBVIRT_ARG_WITH([PACKAGER], [Extra packager name], [no])
-dnl LIBVIRT_ARG_WITH([HTML_DIR], [path to base html directory], [$(datadir)/doc])
-dnl
-AC_DEFUN([LIBVIRT_ARG_WITH], [
-  m4_pushdef([check_name], [$1])
-  m4_pushdef([help_desc], [[$2]])
-  m4_pushdef([default_action], [$3])
-
-  m4_pushdef([check_name_lc], m4_tolower(check_name))
-  m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
-
-  m4_pushdef([arg_var], [with-]check_name_dash)
-  m4_pushdef([with_var], [with_]check_name_lc)
-
-  m4_divert_text([DEFAULTS], [with_var][[=]][default_action])
-  AC_ARG_WITH([check_name_lc],
-              [AS_HELP_STRING([[--]arg_var],
-                              ]m4_dquote(help_desc)[[ @<:@default=]]m4_dquote(default_action)[[@:>@])])
-
-  m4_popdef([with_var])
-  m4_popdef([arg_var])
-
-  m4_popdef([check_name_dash])
-  m4_popdef([check_name_lc])
-
-  m4_popdef([default_action])
-  m4_popdef([help_desc])
-  m4_popdef([check_name])
-])
-
-dnl
-dnl To be used instead of AC_ARG_WITH
-dnl
-dnl The difference between LIBVIRT_ARG_WITH and this macro is that the former
-dnl is mostly an enhanced drop-in replacement for AC_ARG_WITH, whereas the
-dnl latter is tailored for adding an argument that is going to be used to
-dnl switch a feature on and off: as a consequence, it optionally supports
-dnl specifying the minimum version for libraries the feature depends on and
-dnl automatically builds a suitable description from the feature name.
-dnl
-dnl LIBVIRT_ARG_WITH_FEATURE([CHECK_NAME], [HELP_NAME], [DEFAULT_ACTION], [MIN_VERSION])
-dnl
-dnl      CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
-dnl       HELP_NAME: Name that will appear in configure --help
-dnl  DEFAULT_ACTION: Default configure action
-dnl     MIN_VERSION: Specify minimal version that will be added to
-dnl                  configure --help (optional)
-dnl
-dnl LIBVIRT_ARG_WITH_FEATURE([SELINUX], [SeLinux], [check])
-dnl LIBVIRT_ARG_WITH_FEATURE([GLUSTERFS], [glusterfs], [check], [3.4.1])
-dnl
-AC_DEFUN([LIBVIRT_ARG_WITH_FEATURE], [
-  m4_pushdef([check_name], [$1])
-  m4_pushdef([help_name], [[$2]])
-  m4_pushdef([default_action], [$3])
-  m4_pushdef([min_version], [$4])
-
-  m4_pushdef([check_name_lc], m4_tolower(check_name))
-  m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
-
-  m4_pushdef([arg_var], [with-]check_name_dash)
-  m4_pushdef([with_var], [with_]check_name_lc)
-
-  m4_pushdef([version_text], m4_ifnblank(min_version, [[ (>= ]]min_version[[)]]))
-
-  m4_divert_text([DEFAULTS], [with_var][[=]][default_action])
-  AC_ARG_WITH([check_name_lc],
-              [AS_HELP_STRING([[--]arg_var],
-                              [with ]]m4_dquote(help_name)m4_dquote(version_text)[[ support @<:@default=]]m4_dquote(default_action)[[@:>@])])
-
-  m4_popdef([version_text])
-
-  m4_popdef([with_var])
-  m4_popdef([arg_var])
-
-  m4_popdef([check_name_dash])
-  m4_popdef([check_name_lc])
-
-  m4_popdef([min_version])
-  m4_popdef([default_action])
-  m4_popdef([help_name])
-  m4_popdef([check_name])
-])
-
-dnl
-dnl To be used instead of AC_ARG_ENABLE
-dnl
-dnl LIBVIRT_ARG_ENABLE([CHECK_NAME], [HELP_DESC], [DEFAULT_ACTION])
-dnl
-dnl      CHECK_NAME: Suffix/prefix used for variables/flags, in uppercase.
-dnl       HELP_DESC: Description that will appear in configure --help
-dnl  DEFAULT_ACTION: Default configure action
-dnl
-dnl LIBVIRT_ARG_ENABLE([DEBUG], [enable debugging output], [yes])
-dnl
-AC_DEFUN([LIBVIRT_ARG_ENABLE], [
-  m4_pushdef([check_name], [$1])
-  m4_pushdef([help_desc], [[$2]])
-  m4_pushdef([default_action], [$3])
-
-  m4_pushdef([check_name_lc], m4_tolower(check_name))
-  m4_pushdef([check_name_dash], m4_translit(check_name_lc, [_], [-]))
-
-  m4_pushdef([arg_var], [enable-]check_name_dash)
-  m4_pushdef([enable_var], [enable_]check_name_lc)
-
-  m4_divert_text([DEFAULTS], [enable_var][[=]][default_action])
-  AC_ARG_ENABLE([check_name_lc],
-                [AS_HELP_STRING([[--]arg_var],
-                                ]m4_dquote(help_desc)[[ @<:@default=]]m4_dquote(default_action)[[@:>@])])
-
-  m4_popdef([enable_var])
-  m4_popdef([arg_var])
-
-  m4_popdef([check_name_dash])
-  m4_popdef([check_name_lc])
-
-  m4_popdef([default_action])
-  m4_popdef([help_desc])
-  m4_popdef([check_name])
-])
diff --git a/m4/virt-compile-pie.m4 b/m4/virt-compile-pie.m4
deleted file mode 100644
index a2df38e..0000000
--- a/m4/virt-compile-pie.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl Check for support for position independent executables
-dnl
-dnl Copyright (C) 2013 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl <http://www.gnu.org/licenses/>.
-dnl
-
-AC_DEFUN([LIBVIRT_COMPILE_PIE],[
-    PIE_CFLAGS=
-    PIE_LDFLAGS=
-    case "$host" in
-      *-*-mingw* | *-*-msvc* | *-*-cygwin* )
-         ;; dnl All code is position independent on Win32 target
-      *)
-      gl_COMPILER_OPTION_IF([-fPIE -DPIE -pie], [
-        PIE_CFLAGS="-fPIE -DPIE"
-        PIE_LDFLAGS="-pie"
-      ])
-    esac
-    AC_SUBST([PIE_CFLAGS])
-    AC_SUBST([PIE_LDFLAGS])
-])
diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
deleted file mode 100644
index 6ece136..0000000
--- a/m4/virt-compile-warnings.m4
+++ /dev/null
@@ -1,203 +0,0 @@
-dnl
-dnl Enable all known GCC compiler warnings, except for those
-dnl we can't yet cope with
-dnl
-AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
-    dnl ******************************
-    dnl More compiler warnings
-    dnl ******************************
-
-    LIBVIRT_ARG_ENABLE([WERROR], [Use -Werror (if supported)], [check])
-    if test "$enable_werror" = "check"; then
-        if test -d $srcdir/.git; then
-            is_git_version=true
-            enable_werror=yes
-        else
-            enable_werror=no
-        fi
-    fi
-
-    # List of warnings that are not relevant / wanted
-
-    # Don't care about C++ compiler compat
-    dontwarn="$dontwarn -Wc++-compat"
-    dontwarn="$dontwarn -Wabi"
-    dontwarn="$dontwarn -Wdeprecated"
-    # Don't care about ancient C standard compat
-    dontwarn="$dontwarn -Wtraditional"
-    # Don't care about ancient C standard compat
-    dontwarn="$dontwarn -Wtraditional-conversion"
-    # Ignore warnings in /usr/include
-    dontwarn="$dontwarn -Wsystem-headers"
-    # Happy for compiler to add struct padding
-    dontwarn="$dontwarn -Wpadded"
-    # GCC very confused with -O2
-    dontwarn="$dontwarn -Wunreachable-code"
-    # Too many to deal with
-    dontwarn="$dontwarn -Wconversion"
-    # Too many to deal with
-    dontwarn="$dontwarn -Wsign-conversion"
-    # We need to use long long in many places
-    dontwarn="$dontwarn -Wlong-long"
-    # We allow manual list of all enum cases without default:
-    dontwarn="$dontwarn -Wswitch-default"
-    # We allow optional default: instead of listing all enum values
-    dontwarn="$dontwarn -Wswitch-enum"
-    # Not a problem since we don't use -fstrict-overflow
-    dontwarn="$dontwarn -Wstrict-overflow"
-    # Not a problem since we don't use -funsafe-loop-optimizations
-    dontwarn="$dontwarn -Wunsafe-loop-optimizations"
-    # gcc 4.4.6 complains this is C++ only; gcc 4.7.0 implies this from -Wall
-    dontwarn="$dontwarn -Wenum-compare"
-    # gcc 5.1 -Wformat-signedness mishandles enums, not ready for prime time
-    dontwarn="$dontwarn -Wformat-signedness"
-    # Several conditionals expand the same on both branches
-    # depending on the particular platform/architecture
-    dontwarn="$dontwarn -Wduplicated-branches"
-    # > This warning does not generally indicate that there is anything wrong
-    # > with your code; it merely indicates that GCC's optimizers are unable
-    # > to handle the code effectively.
-    # Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
-    dontwarn="$dontwarn -Wdisabled-optimization"
-
-    # gcc 4.2 treats attribute(format) as an implicit attribute(nonnull),
-    # which triggers spurious warnings for our usage
-    AC_CACHE_CHECK([whether the C compiler's -Wformat allows NULL strings],
-      [lv_cv_gcc_wformat_null_works], [
-      save_CFLAGS=$CFLAGS
-      CFLAGS='-Wunknown-pragmas -Werror -Wformat'
-      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-        #include <stddef.h>
-        static __attribute__ ((__format__ (__printf__, 1, 2))) int
-        foo (const char *fmt, ...) { return !fmt; }
-      ]], [[
-        return foo(NULL);
-      ]])],
-      [lv_cv_gcc_wformat_null_works=yes],
-      [lv_cv_gcc_wformat_null_works=no])
-      CFLAGS=$save_CFLAGS])
-
-    AC_CACHE_CHECK([whether gcc gives bogus warnings for -Wlogical-op],
-      [lv_cv_gcc_wlogical_op_equal_expr_broken], [
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="-O2 -Wlogical-op -Werror"
-        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-          #define TEST1 1
-          #define TEST2 TEST1
-        ]], [[
-          int test = 0;
-          return test == TEST1 || test == TEST2;]])],
-        [lv_cv_gcc_wlogical_op_equal_expr_broken=no],
-        [lv_cv_gcc_wlogical_op_equal_expr_broken=yes])
-        CFLAGS="$save_CFLAGS"])
-
-    AC_CACHE_CHECK([whether clang gives bogus warnings for -Wdouble-promotion],
-      [lv_cv_clang_double_promotion_broken], [
-        save_CFLAGS="$CFLAGS"
-        CFLAGS="-O2 -Wdouble-promotion -Werror"
-        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-          #include <math.h>
-        ]], [[
-          float f = 0.0;
-	  return isnan(f);]])],
-        [lv_cv_clang_double_promotion_broken=no],
-        [lv_cv_clang_double_promotion_broken=yes])
-        CFLAGS="$save_CFLAGS"])
-
-    if test "$lv_cv_clang_double_promotion_broken" = "yes";
-    then
-      dontwarn="$dontwarn -Wdouble-promotion"
-    fi
-
-    # Get all possible GCC warnings
-    gl_MANYWARN_ALL_GCC([maybewarn])
-
-    # Remove the ones we don't want, blacklisted earlier
-    gl_MANYWARN_COMPLEMENT([wantwarn], [$maybewarn], [$dontwarn])
-
-    # GNULIB expects this to be part of -Wc++-compat, but we turn
-    # that one off, so we need to manually enable this again
-    wantwarn="$wantwarn -Wjump-misses-init"
-
-    # -Wformat enables this by default, and we should keep it,
-    # but need to rewrite various areas of code first
-    wantwarn="$wantwarn -Wno-format-truncation"
-
-    # This should be < 256 really. Currently we're down to 4096,
-    # but using 1024 bytes sized buffers (mostly for virStrerror)
-    # stops us from going down further
-    gl_WARN_ADD([-Wframe-larger-than=4096], [STRICT_FRAME_LIMIT_CFLAGS])
-    gl_WARN_ADD([-Wframe-larger-than=25600], [RELAXED_FRAME_LIMIT_CFLAGS])
-
-    # Extra special flags
-    dnl -fstack-protector stuff passes gl_WARN_ADD with gcc
-    dnl on Mingw32, but fails when actually used
-    case $host in
-       aarch64-*-*)
-       dnl "error: -fstack-protector not supported for this target [-Werror]"
-       ;;
-       *-*-linux*)
-       dnl Prefer -fstack-protector-strong if it's available.
-       dnl There doesn't seem to be great overhead in adding
-       dnl -fstack-protector-all instead of -fstack-protector.
-       dnl
-       dnl We also don't need ssp-buffer-size with -all or -strong,
-       dnl since functions are protected regardless of buffer size.
-       dnl wantwarn="$wantwarn --param=ssp-buffer-size=4"
-       wantwarn="$wantwarn -fstack-protector-strong"
-       ;;
-       *-*-freebsd*)
-       dnl FreeBSD ships old gcc 4.2.1 which doesn't handle
-       dnl -fstack-protector-all well
-       wantwarn="$wantwarn -fstack-protector"
-
-       wantwarn="$wantwarn -Wno-unused-command-line-argument"
-       ;;
-    esac
-    wantwarn="$wantwarn -fexceptions"
-    wantwarn="$wantwarn -fasynchronous-unwind-tables"
-
-    # Need -fipa-pure-const in order to make -Wsuggest-attribute=pure
-    # fire even without -O.
-    wantwarn="$wantwarn -fipa-pure-const"
-    # We do "bad" function cast to define glib auto cleanup functions
-    wantwarn="$wantwarn -Wno-cast-function-type"
-
-    if test "$enable_werror" = "yes"
-    then
-      wantwarn="$wantwarn -Werror"
-    fi
-
-    # Check for $CC support of each warning
-    for w in $wantwarn; do
-      gl_WARN_ADD([$w])
-    done
-
-    case $host in
-        *-*-linux*)
-        dnl Fall back to -fstack-protector-all if -strong is not available
-        case $WARN_CFLAGS in
-        *-fstack-protector-strong*)
-        ;;
-        *)
-            gl_WARN_ADD([-fstack-protector-all])
-        ;;
-        esac
-        ;;
-    esac
-
-    case $WARN_CFLAGS in
-        *-Wsuggest-attribute=format*)
-           AC_DEFINE([HAVE_SUGGEST_ATTRIBUTE_FORMAT], [1], [Whether -Wsuggest-attribute=format works])
-        ;;
-    esac
-
-    # Silence certain warnings in gnulib, and use improved glibc headers
-    AH_VERBATIM([FORTIFY_SOURCE],
-    [/* Enable compile-time and run-time bounds-checking, and some warnings,
-        without upsetting newer glibc. */
-     #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
-     # define _FORTIFY_SOURCE 2
-     #endif
-    ])
-])
diff --git a/m4/virt-linker-relro.m4 b/m4/virt-linker-relro.m4
deleted file mode 100644
index 7669b23..0000000
--- a/m4/virt-linker-relro.m4
+++ /dev/null
@@ -1,35 +0,0 @@
-dnl
-dnl Check for -z now and -z relro linker flags
-dnl
-dnl Copyright (C) 2013 Red Hat, Inc.
-dnl
-dnl This library is free software; you can redistribute it and/or
-dnl modify it under the terms of the GNU Lesser General Public
-dnl License as published by the Free Software Foundation; either
-dnl version 2.1 of the License, or (at your option) any later version.
-dnl
-dnl This library is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-dnl Lesser General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU Lesser General Public
-dnl License along with this library.  If not, see
-dnl <http://www.gnu.org/licenses/>.
-dnl
-
-AC_DEFUN([LIBVIRT_LINKER_RELRO],[
-    AC_MSG_CHECKING([for how to force completely read-only GOT table])
-
-    RELRO_LDFLAGS=
-    ld_help=`ld --help 2>&1`
-    case $ld_help in
-        *"-z relro"*) RELRO_LDFLAGS="-Wl,-z -Wl,relro" ;;
-    esac
-    case $ld_help in
-        *"-z now"*) RELRO_LDFLAGS="$RELRO_LDFLAGS -Wl,-z -Wl,now" ;;
-    esac
-    AC_SUBST([RELRO_LDFLAGS])
-
-    AC_MSG_RESULT([$RELRO_LDFLAGS])
-])
diff --git a/m4/warnings.m4 b/m4/warnings.m4
deleted file mode 100644
index e697174..0000000
--- a/m4/warnings.m4
+++ /dev/null
@@ -1,79 +0,0 @@
-# warnings.m4 serial 11
-dnl Copyright (C) 2008-2017 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Simon Josefsson
-
-# gl_AS_VAR_APPEND(VAR, VALUE)
-# ----------------------------
-# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
-m4_ifdef([AS_VAR_APPEND],
-[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
-[m4_define([gl_AS_VAR_APPEND],
-[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
-
-
-# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
-#                       [PROGRAM = AC_LANG_PROGRAM()])
-# -----------------------------------------------------------------
-# Check if the compiler supports OPTION when compiling PROGRAM.
-#
-# FIXME: gl_Warn must be used unquoted until we can assume Autoconf
-# 2.64 or newer.
-AC_DEFUN([gl_COMPILER_OPTION_IF],
-[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
-AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
-AS_LITERAL_IF([$1],
-  [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
-  [gl_positive="$1"
-case $gl_positive in
-  -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
-esac
-m4_pushdef([gl_Positive], [$gl_positive])])dnl
-AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [
-  gl_save_compiler_FLAGS="$gl_Flags"
-  gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
-    [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
-  AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])],
-                 [AS_VAR_SET(gl_Warn, [yes])],
-                 [AS_VAR_SET(gl_Warn, [no])])
-  gl_Flags="$gl_save_compiler_FLAGS"
-])
-AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
-m4_popdef([gl_Positive])dnl
-AS_VAR_POPDEF([gl_Flags])dnl
-AS_VAR_POPDEF([gl_Warn])dnl
-])
-
-# gl_UNKNOWN_WARNINGS_ARE_ERRORS
-# ------------------------------
-# Clang doesn't complain about unknown warning options unless one also
-# specifies -Wunknown-warning-option -Werror.  Detect this.
-AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
-[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
-   [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
-   [gl_unknown_warnings_are_errors=])])
-
-# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS],
-#             [PROGRAM = AC_LANG_PROGRAM()])
-# ---------------------------------------------
-# Adds parameter to WARN_CFLAGS if the compiler supports it when
-# compiling PROGRAM.  For example, gl_WARN_ADD([-Wparentheses]).
-#
-# If VARIABLE is a variable name, AC_SUBST it.
-AC_DEFUN([gl_WARN_ADD],
-[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS])
-gl_COMPILER_OPTION_IF([$1],
-  [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])],
-  [],
-  [$3])
-m4_ifval([$2],
-         [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
-         [AC_SUBST([WARN_CFLAGS])])dnl
-])
-
-# Local Variables:
-# mode: autoconf
-# End:
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',
+    '-Wfree-nonheap-object',
+    '-Whsa',
+    '-Wignored-attributes',
+    '-Wignored-qualifiers',
+    '-Wimplicit',
+    '-Wimplicit-function-declaration',
+    '-Wimplicit-int',
+    '-Wincompatible-pointer-types',
+    '-Winit-self',
+    '-Winline',
+    '-Wint-conversion',
+    '-Wint-to-pointer-cast',
+    '-Winvalid-memory-model',
+    '-Winvalid-pch',
+    '-Wjump-misses-init',
+    '-Wlogical-not-parentheses',
+    '-Wlogical-op',
+    '-Wmain',
+    '-Wmaybe-uninitialized',
+    '-Wmemset-transposed-args',
+    '-Wmisleading-indentation',
+    '-Wmissing-braces',
+    '-Wmissing-declarations',
+    '-Wmissing-field-initializers',
+    '-Wmissing-include-dirs',
+    '-Wmissing-parameter-type',
+    '-Wmissing-prototypes',
+    '-Wmultichar',
+    '-Wnarrowing',
+    '-Wnested-externs',
+    '-Wno-cast-function-type',
+    '-Wnonnull',
+    '-Wnonnull-compare',
+    '-Wnormalized=nfc',
+    '-Wnull-dereference',
+    '-Wodr',
+    '-Wold-style-declaration',
+    '-Wold-style-definition',
+    '-Wopenmp-simd',
+    '-Woverflow',
+    '-Woverlength-strings',
+    '-Woverride-init',
+    '-Wpacked',
+    '-Wpacked-bitfield-compat',
+    '-Wparentheses',
+    '-Wpointer-arith',
+    '-Wpointer-sign',
+    '-Wpointer-to-int-cast',
+    '-Wpragmas',
+    '-Wreturn-local-addr',
+    '-Wreturn-type',
+    '-Wscalar-storage-order',
+    '-Wsequence-point',
+    '-Wshadow',
+    '-Wshift-count-negative',
+    '-Wshift-count-overflow',
+    '-Wshift-negative-value',
+    '-Wshift-overflow=2',
+    '-Wsizeof-array-argument',
+    '-Wsizeof-pointer-memaccess',
+    '-Wstack-protector',
+    '-Wstrict-aliasing',
+    '-Wstrict-prototypes',
+    '-Wsuggest-attribute=const',
+    '-Wsuggest-attribute=format',
+    '-Wsuggest-attribute=noreturn',
+    '-Wsuggest-attribute=pure',
+    '-Wsuggest-final-methods',
+    '-Wsuggest-final-types',
+    '-Wswitch',
+    '-Wswitch-bool',
+    '-Wsync-nand',
+    '-Wtautological-compare',
+    '-Wtrampolines',
+    '-Wtrigraphs',
+    '-Wtype-limits',
+    '-Wuninitialized',
+    '-Wunknown-pragmas',
+    '-Wunused',
+    '-Wunused-but-set-parameter',
+    '-Wunused-but-set-variable',
+    '-Wunused-const-variable=2',
+    '-Wunused-function',
+    '-Wunused-label',
+    '-Wunused-local-typedefs',
+    '-Wunused-macros',
+    '-Wunused-parameter',
+    '-Wunused-result',
+    '-Wunused-value',
+    '-Wunused-variable',
+    '-Wvarargs',
+    '-Wvariadic-macros',
+    '-Wvector-operation-performance',
+    '-Wvla',
+    '-Wvolatile-register-var',
+    '-Wwrite-strings',
+    '-fasynchronous-unwind-tables',
+    '-fexceptions',
+    '-fipa-pure-const',
+    '-fno-common',
+]
+ld_flags = [
+    '-Wl,-z,now',
+    '-Wl,-z,relro',
+]
+
+if host_machine.cpu_family() != 'aarch64'
+    if host_machine.system() == 'linux'
+        cc_flags += ['-fstack-protector-strong']
+    endif
+    if host_machine.system() == 'freebsd'
+        cc_flags += ['-fstack-protector']
+    endif
+endif
+
+if host_machine.system() not in ['cygwin', 'windows']
+    cc_flags += ['-fPIE', '-DPIE']
+    ld_flags += ['-pie']
+endif
+
+cc = meson.get_compiler('c')
+common_flags += cc.get_supported_arguments(cc_flags)
+link_flags = cc.get_supported_link_arguments(ld_flags)
+
+add_project_arguments(common_flags, language: 'c')
+add_project_link_arguments(link_flags, language: 'c')
+
+
+# Generate dist files
+
+configure_file(
+    input: 'libvirt-dbus.spec.in',
+    output: 'libvirt-dbus.spec',
+    configuration: conf,
+)
+
+configure_file(
+    input: 'run.in',
+    output: 'run',
+    configuration: conf,
+)
+
+authors_prog = find_program('tools/gen-authors.sh')
+
+authors = run_command(
+    authors_prog,
+    meson.source_root(),
+)
+
+configure_file(
+    configuration: { 'contributorslist': authors.stdout() },
+    input: 'AUTHORS.in',
+    output: 'AUTHORS',
+)
+
+foreach file : [ 'libvirt-dbus.spec', 'AUTHORS' ]
+    meson.add_dist_script(
+        'sh',
+        '-c',
+        'cp "' + join_paths(meson.build_root(), file) + '" "$MESON_DIST_ROOT/"',
+    )
+endforeach
+
+
+# Include sub-directories
+
+subdir('data')
+subdir('docs')
+subdir('src')
+subdir('tests')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..36e8065
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,6 @@
+option('dbus_services', type: 'string', value: 'dbus-1/services', description: 'D-Bus session services directory')
+option('dbus_system_services', type: 'string', value: 'dbus-1/system-services', description: 'D-Bus system services directory')
+option('dbus_system_policies', type: 'string', value: 'dbus-1/system.d', description: 'D-Bus system policies directory')
+option('dbus_interfaces', type: 'string', value: 'dbus-1/interfaces', description: 'D-Bus interfaces directory')
+option('polkit_rules', type: 'string', value: 'polkit-1/rules.d', description: 'polkit rules directory')
+option('system_user', type: 'string', value: 'libvirtdbus', description: 'username to run system instance as')
diff --git a/run.in b/run.in
old mode 100644
new mode 100755
index 0744a80..1b2207e
--- a/run.in
+++ b/run.in
@@ -14,7 +14,7 @@
 #   ./run gdb --args ./src/libvirt-dbus [args ...]
 #
 
-export abs_top_builddir="@abs_top_builddir@"
-export VIRT_DBUS_INTERFACES_DIR="@abs_top_srcdir@/data"
+export abs_top_builddir="@build_root@"
+export VIRT_DBUS_INTERFACES_DIR="@source_root@/data"
 
 exec "$@"
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 845696e..0000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,66 +0,0 @@
-AM_CPPFLAGS = \
-	-I$(top_srcdir)/src \
-	-DVIRT_DBUS_INTERFACES_DIR=\"$(DBUS_INTERFACES_DIR)\" \
-	$(NULL)
-AM_CFLAGS = \
-	$(GIO2_CFLAGS) \
-	$(GLIB2_CFLAGS) \
-	$(LIBVIRT_CFLAGS) \
-	$(LIBVIRT_GLIB_CFLAGS) \
-	$(WARN_CFLAGS) \
-	$(PIE_CFLAGS) \
-	$(NULL)
-AM_LDFLAGS = \
-	$(GIO2_LDFLAGS) \
-	$(GLIB2_LDFLAGS) \
-	$(LIBVIRT_LDFLAGS) \
-	$(LIBVIRT_GLIB_LDFLAGS) \
-	$(RELRO_LDFLAGS) \
-	$(PIE_LDFLAGS) \
-	$(NULL)
-
-noinst_LTLIBRARIES = \
-	libutil.la \
-	$(NULL)
-
-libutil_la_SOURCES = \
-	util.c \
-	util.h \
-	$(NULL)
-
-sbin_PROGRAMS = \
-	libvirt-dbus \
-	$(NULL)
-
-libvirt_dbus_SOURCES = \
-	connect.c \
-	connect.h \
-	domain.c \
-	domain.h \
-	events.c \
-	events.h \
-	gdbus.c \
-	gdbus.h \
-	interface.c \
-	interface.h \
-	main.c \
-	network.c \
-	network.h \
-	nodedev.c \
-	nodedev.h \
-	nwfilter.c \
-	nwfilter.h \
-	secret.c \
-	secret.h \
-	storagepool.c \
-	storagepool.h \
-	storagevol.c \
-	storagevol.h \
-	$(NULL)
-libvirt_dbus_LDADD = \
-	libutil.la \
-	$(GIO2_LIBS) \
-	$(GLIB2_LIBS) \
-	$(LIBVIRT_LIBS) \
-	$(LIBVIRT_GLIB_LIBS) \
-	$(NULL)
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)
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..2c844c6
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,54 @@
+lib_util = static_library(
+    'libutil',
+    [
+        'util.c',
+        'util.h',
+    ],
+    dependencies: [
+        dep_gio_unix,
+        dep_glib,
+        dep_libvirt,
+        dep_libvirt_glib
+    ],
+)
+
+exe_libvirt_dbus = executable(
+    'libvirt-dbus',
+    [
+        'connect.c',
+        'connect.h',
+        'domain.c',
+        'domain.h',
+        'events.c',
+        'events.h',
+        'gdbus.c',
+        'gdbus.h',
+        'interface.c',
+        'interface.h',
+        'main.c',
+        'network.c',
+        'network.h',
+        'nodedev.c',
+        'nodedev.h',
+        'nwfilter.c',
+        'nwfilter.h',
+        'secret.c',
+        'secret.h',
+        'storagepool.c',
+        'storagepool.h',
+        'storagevol.c',
+        'storagevol.h',
+    ],
+    dependencies: [
+        dep_gio_unix,
+        dep_glib,
+        dep_libvirt,
+        dep_libvirt_glib
+    ],
+    link_with: [
+        lib_util,
+    ],
+    install: true,
+    install_dir: get_option('sbindir'),
+)
+
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index cd1fbd7..0000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,57 +0,0 @@
-AM_CPPFLAGS = \
-	-I$(top_srcdir)/src \
-	$(NULL)
-
-test_helpers = \
-	xmldata.py \
-	libvirttest.py \
-	conftest.py \
-	$(NULL)
-
-test_programs = \
-	test_connect.py \
-	test_domain.py \
-	test_interface.py \
-	test_network.py \
-	test_nodedev.py \
-	test_storage.py \
-	$(NULL)
-
-check_PROGRAMS = \
-	test_util \
-	$(NULL)
-
-test_util_SOURCES = \
-	test_util.c \
-	$(NULL)
-test_util_CFLAGS = \
-	$(GIO2_CFLAGS) \
-	$(GLIB2_CFLAGS) \
-	$(LIBVIRT_CFLAGS) \
-	$(NULL)
-test_util_LDFLAGS = \
-	$(GIO2_LDFLAGS) \
-	$(GLIB2_LDFLAGS) \
-	$(LIBVIRT_LDFLAGS) \
-	$(NULL)
-test_util_LDADD = \
-	$(top_builddir)/src/libutil.la \
-	$(GIO2_LIBS) \
-	$(GLIB2_LIBS) \
-	$(LIBVIRT_LIBS) \
-	$(NULL)
-
-EXTRA_DIST = \
-	$(test_helpers) \
-	$(test_programs) \
-	travis-run \
-	$(NULL)
-
-TESTS = \
-	$(check_PROGRAMS) \
-	$(test_programs) \
-	$(NULL)
-
-AM_TESTS_ENVIRONMENT = \
-	export abs_top_builddir="$(abs_top_builddir)"; \
-	export VIRT_DBUS_INTERFACES_DIR="$(abs_top_srcdir)/data";
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..b0fb91a
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,49 @@
+test_exec = executable(
+    'test_util',
+    [
+        'test_util.c',
+    ],
+    dependencies: [
+        dep_gio_unix,
+        dep_glib,
+        dep_libvirt,
+        dep_libvirt_glib
+    ],
+    link_with: [
+        lib_util,
+    ],
+    include_directories: [ '../src' ],
+)
+
+test('test_util', test_exec)
+
+python_tests = [
+    'test_connect.py',
+    'test_domain.py',
+    'test_interface.py',
+    'test_network.py',
+    'test_nodedev.py',
+    'test_storage.py',
+]
+
+python_env = [
+    'abs_top_builddir=' + meson.build_root(),
+    'VIRT_DBUS_INTERFACES_DIR=' + meson.source_root() + '/data'
+]
+
+foreach name : python_tests
+    prog = find_program(name)
+    test(name, prog, env: python_env)
+endforeach
+
+flake8 = find_program('flake8', 'flake8-3', required: false)
+if flake8.found()
+    test(
+        'flake8', flake8,
+        args: [
+            '--show-source',
+            '--ignore=E501',
+            meson.source_root(),
+        ]
+    )
+endif
diff --git a/tools/gen-authors.sh b/tools/gen-authors.sh
new file mode 100755
index 0000000..75eb58a
--- /dev/null
+++ b/tools/gen-authors.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+srcdir=$1
+
+if test -d ${srcdir}/.git; then
+    cd ${srcdir}
+    git log --pretty=format:'    %aN <%aE>' | sort -u
+fi
-- 
2.21.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Ján Tomko 4 years, 7 months ago
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@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@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@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Pavel Hrdina 4 years, 7 months ago
On Tue, Sep 17, 2019 at 06:39:17PM +0200, Ján Tomko wrote:
> 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@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"

I can fix that, will look into it.

> > -	  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=]

That explains why it was not working, will fix that.

> 
> and -Werror is missing from the list

It should not be there by default, but I'll add it conditionally if we
are running meson from git.

> > +    '-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@redhat.com>

Right, I don't know how it slipped into the meson work. Thanks, I'll
push it separately.

> > +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.

Good idea, I'll add it there.

> 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@redhat.com>

Thanks for the review, I'll fix the issues pointed out.

Pavel
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Fabiano Fidêncio 4 years, 7 months ago
On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> 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
> and build definition files are more readable and easier to maintain.

Hmm. I really would prefer smaller patches.
- Add meson;
- Drop autotools;
- Change spec files;
- ...

I didn't go through the patch, will do that in the next days ... but a
few things should be considered here:
- meson >= 0.49.0 basically means the project won't be built on Debian
< 10, Ubuntu < 19.04 ... which may be a problem for the project, if
you're following libvirt supported distros;
- please, take a look at the work done on libvirt-jenkins-ci and try
to adapt this one to follow the targets we have there;
  - It'll force the addition of a `ninja syntax-check`, instead of
having the syntax-check as part of the tests;

Again, I'll carefully go through this patch in the next days.

Best Regards,
-- 
Fabiano Fidêncio

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Pavel Hrdina 4 years, 7 months ago
On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> 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
> > and build definition files are more readable and easier to maintain.
> 
> Hmm. I really would prefer smaller patches.
> - Add meson;
> - Drop autotools;
> - Change spec files;
> - ...

I was considering it but to me personally the whole switch in single
patch looked fine as there is not that much of a code to add/remove.
In addition it's easier to spot if something was not converted, but
I can split as I don't care that much.

> I didn't go through the patch, will do that in the next days ... but a
> few things should be considered here:
> - meson >= 0.49.0 basically means the project won't be built on Debian
> < 10, Ubuntu < 19.04 ... which may be a problem for the project, if
> you're following libvirt supported distros;

Debian 9 has meson 0.37.1 so yes, this will mean you cannot build
upstream libvirt-dbus using distribution packages, but there is
Python3.5 so the possible workaround is to install meson using pip.

The same applies to Ubuntu and CentOS 7 as well.  There is also a
possibility to bundle meson together with our projects but IMHO
installing meson using pip in user mode is a good enough workaround
if someone is crazy enough to run upstream code on these old
distributions.

> - please, take a look at the work done on libvirt-jenkins-ci and try
> to adapt this one to follow the targets we have there;
>   - It'll force the addition of a `ninja syntax-check`, instead of
> having the syntax-check as part of the tests;

This is an intentional change to run syntax-check tests for dist target
as well, but it might be possible to configure it somehow.  Anyway, I
would rather prefer to run syntax-check when running ninja dist than
having it as a separate target.

> 
> Again, I'll carefully go through this patch in the next days.

Thanks, I'll fix the issues pointed out by Jano and send a link to
repository with the changes.

Pavel
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Andrea Bolognani 4 years, 7 months ago
On Tue, 2019-09-17 at 20:17 +0200, Pavel Hrdina wrote:
> On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > I didn't go through the patch, will do that in the next days ... but a
> > few things should be considered here:
> > - meson >= 0.49.0 basically means the project won't be built on Debian
> > < 10, Ubuntu < 19.04 ... which may be a problem for the project, if
> > you're following libvirt supported distros;
> 
> Debian 9 has meson 0.37.1 so yes, this will mean you cannot build
> upstream libvirt-dbus using distribution packages, but there is
> Python3.5 so the possible workaround is to install meson using pip.
> 
> The same applies to Ubuntu and CentOS 7 as well.  There is also a
> possibility to bundle meson together with our projects but IMHO
> installing meson using pip in user mode is a good enough workaround
> if someone is crazy enough to run upstream code on these old
> distributions.

Yeah, this is definitely a conversation that we need to have.

Since the idea is to adopt Meson more and more for libvirt-related
projects, including libvirt itself, we have to find a balance between
the desire to use relatively recent Meson versions[1] and our current
platform support policy.

How much more work would it be to use a baseline Meson release that
is old enough to be available on all our supported platforms? Can
that even be done, or there simply is no amount of compatibility code
that we can use to make it work? How difficult is it to bundle Meson,
and given that Meson's Apache 2.0 and libvirt's LGPL 2.1+ are not
compatible can that even be done? I assume a build system such as
Meson would probably have an exception for users, but I haven't
checked.

More in general, as we look at introducing in the libvirt ecosystem
technology that is faster-moving than what we've historically had to
deal with, we might need to change our current stance and just accept
the fact that building libvirt on an older distribution might require
fetching some of the dependencies from side channels such as
third-party repositories or language-specific package managers,
especially when "older distributions" in this case includes the
*latest* Ubuntu LTS release, which is not set to be replaced with a
newer version before at least six months!

Basically the work you're doing in libvirt-dbus[2] will for better or
worse inform the way the entire libvirt ecosystem will deal with the
same challenges a few months down the line, so we should make sure we
don't just hand-wave concerns away because "it's just libvirt-dbus"
but spend some time considering the implications instead.


[1] Meson 0.49.0 was released in December 2018, nine months ago.
[2] Which is awesome, by the way! Thanks for putting the time in :)
-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Daniel P. Berrangé 4 years, 7 months ago
On Wed, Sep 18, 2019 at 11:30:14AM +0200, Andrea Bolognani wrote:
> On Tue, 2019-09-17 at 20:17 +0200, Pavel Hrdina wrote:
> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > > I didn't go through the patch, will do that in the next days ... but a
> > > few things should be considered here:
> > > - meson >= 0.49.0 basically means the project won't be built on Debian
> > > < 10, Ubuntu < 19.04 ... which may be a problem for the project, if
> > > you're following libvirt supported distros;
> > 
> > Debian 9 has meson 0.37.1 so yes, this will mean you cannot build
> > upstream libvirt-dbus using distribution packages, but there is
> > Python3.5 so the possible workaround is to install meson using pip.
> > 
> > The same applies to Ubuntu and CentOS 7 as well.  There is also a
> > possibility to bundle meson together with our projects but IMHO
> > installing meson using pip in user mode is a good enough workaround
> > if someone is crazy enough to run upstream code on these old
> > distributions.
> 
> Yeah, this is definitely a conversation that we need to have.
> 
> Since the idea is to adopt Meson more and more for libvirt-related
> projects, including libvirt itself, we have to find a balance between
> the desire to use relatively recent Meson versions[1] and our current
> platform support policy.
> 
> How much more work would it be to use a baseline Meson release that
> is old enough to be available on all our supported platforms? Can
> that even be done, or there simply is no amount of compatibility code
> that we can use to make it work? How difficult is it to bundle Meson,
> and given that Meson's Apache 2.0 and libvirt's LGPL 2.1+ are not
> compatible can that even be done? I assume a build system such as
> Meson would probably have an exception for users, but I haven't
> checked.

The licensing is a non-issue. Source tar.gz can contain stuff under
as many different licenses as we wish. The license compatibility
requirements affect code that goes into the various programs, libraries
that are built/installed. No meson code gets built into the libvirt
dbus binaries.

We certainly could bundle meson with them, but given that in very
short time we're going to have libvirt, libvirt-dbus, osinfo-db-tools,
libosinfo, gtk-vnc, spice-gtk all using meson, bundling meson in the
individual tarballs feels like a waste of time to me. Distros are
better off packaging a newer meson just once. If they can't/won't
upgrade their existing meson, then the distros can still bundle
a newer meson tarball in the individual source packages they build.

IOW, I think we should just go with whatever is needed to do a good
job with meson usage from upstream POV, and let distros jump through
whatever hoops they need downstream.

For our CI system, we can just install newer meson ourselves to
satisfy the version apps if we want to keep testing on these distros,
which I think we should.

With RHEL-7.7 shipping a python 3 package, we don't have the py2
problem anymore there.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Andrea Bolognani 4 years, 7 months ago
On Wed, 2019-09-18 at 10:39 +0100, Daniel P. Berrangé wrote:
> We certainly could bundle meson with them, but given that in very
> short time we're going to have libvirt, libvirt-dbus, osinfo-db-tools,
> libosinfo, gtk-vnc, spice-gtk all using meson, bundling meson in the
> individual tarballs feels like a waste of time to me. Distros are
> better off packaging a newer meson just once. If they can't/won't
> upgrade their existing meson, then the distros can still bundle
> a newer meson tarball in the individual source packages they build.
> 
> IOW, I think we should just go with whatever is needed to do a good
> job with meson usage from upstream POV, and let distros jump through
> whatever hoops they need downstream.
> 
> For our CI system, we can just install newer meson ourselves to
> satisfy the version apps if we want to keep testing on these distros,
> which I think we should.

So, to be clear, you're advocating for keeping our list of target
platforms unchanged and exempt Meson specifically from the implicit
requirement we've had so far, which is that all build dependencies
should be installed from distro-provided packages?

I'm not saying that I'm against this, but I think we should at the
very least document this prominently, and ideally get an explicit
thumbs up from a few downstreams because this could negatively
affect their ability to package new libvirt versions.

> With RHEL-7.7 shipping a python 3 package, we don't have the py2
> problem anymore there.

Not having a suitable Python 3 available on the system would
certainly be a much bigger hurdle than not having Meson, so it's
good that we're now in this position, especially with the Python
clock ticking ever so faster...

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Daniel P. Berrangé 4 years, 7 months ago
On Wed, Sep 18, 2019 at 02:55:53PM +0200, Andrea Bolognani wrote:
> On Wed, 2019-09-18 at 10:39 +0100, Daniel P. Berrangé wrote:
> > We certainly could bundle meson with them, but given that in very
> > short time we're going to have libvirt, libvirt-dbus, osinfo-db-tools,
> > libosinfo, gtk-vnc, spice-gtk all using meson, bundling meson in the
> > individual tarballs feels like a waste of time to me. Distros are
> > better off packaging a newer meson just once. If they can't/won't
> > upgrade their existing meson, then the distros can still bundle
> > a newer meson tarball in the individual source packages they build.
> > 
> > IOW, I think we should just go with whatever is needed to do a good
> > job with meson usage from upstream POV, and let distros jump through
> > whatever hoops they need downstream.
> > 
> > For our CI system, we can just install newer meson ourselves to
> > satisfy the version apps if we want to keep testing on these distros,
> > which I think we should.
> 
> So, to be clear, you're advocating for keeping our list of target
> platforms unchanged and exempt Meson specifically from the implicit
> requirement we've had so far, which is that all build dependencies
> should be installed from distro-provided packages?
> 
> I'm not saying that I'm against this, but I think we should at the
> very least document this prominently, and ideally get an explicit
> thumbs up from a few downstreams because this could negatively
> affect their ability to package new libvirt versions.

Of course the best is if the distro's already ships a standard
meson that's good enough, if they don't though, they need to
use a custom meson to build libvirt. So the comparison is 

  - libvirt.tar.gz that contains a copy of meson sources
  - libvirt.tar.gz and a meson.tar.gz

Both these cases are functionally the same in what the distro
ends up building & bundling. So if one causes policy problems
for the distro, the other will too IMHO. 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Andrea Bolognani 4 years, 7 months ago
On Wed, 2019-09-18 at 17:46 +0100, Daniel P. Berrangé wrote:
> On Wed, Sep 18, 2019 at 02:55:53PM +0200, Andrea Bolognani wrote:
> > So, to be clear, you're advocating for keeping our list of target
> > platforms unchanged and exempt Meson specifically from the implicit
> > requirement we've had so far, which is that all build dependencies
> > should be installed from distro-provided packages?
> > 
> > I'm not saying that I'm against this, but I think we should at the
> > very least document this prominently, and ideally get an explicit
> > thumbs up from a few downstreams because this could negatively
> > affect their ability to package new libvirt versions.
> 
> Of course the best is if the distro's already ships a standard
> meson that's good enough, if they don't though, they need to
> use a custom meson to build libvirt. So the comparison is
> 
>   - libvirt.tar.gz that contains a copy of meson sources
>   - libvirt.tar.gz and a meson.tar.gz
> 
> Both these cases are functionally the same in what the distro
> ends up building & bundling. So if one causes policy problems
> for the distro, the other will too IMHO.

Sounds reasonable to me, but I would really like to have ACKs from
at least a couple of downstreams and ideally a PoC showing that
doing this doesn't create a massive amount of pain for them. And
documenting it is definitely a must.

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Fabiano Fidêncio 4 years, 7 months ago
On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
>
> On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> 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
> > > and build definition files are more readable and easier to maintain.
> >
> > Hmm. I really would prefer smaller patches.
> > - Add meson;
> > - Drop autotools;
> > - Change spec files;
> > - ...
>
> I was considering it but to me personally the whole switch in single
> patch looked fine as there is not that much of a code to add/remove.
> In addition it's easier to spot if something was not converted, but
> I can split as I don't care that much.

I don't have any strong opinions here either. So, just leave it as it is.

>
> > I didn't go through the patch, will do that in the next days ... but a
> > few things should be considered here:
> > - meson >= 0.49.0 basically means the project won't be built on Debian
> > < 10, Ubuntu < 19.04 ... which may be a problem for the project, if
> > you're following libvirt supported distros;
>
> Debian 9 has meson 0.37.1 so yes, this will mean you cannot build
> upstream libvirt-dbus using distribution packages, but there is
> Python3.5 so the possible workaround is to install meson using pip.
>

We don't packages which do not officially come with the distros in
libvirt-jenkins-ci.
I sincerely am fine dropping the support for old systems (I just did
the same for osinfo-db-tools and libosinfo). However, this is a
libvirt project and I'll leave for libvirt maintainers to decide what
to do.

> The same applies to Ubuntu and CentOS 7 as well.  There is also a
> possibility to bundle meson together with our projects but IMHO
> installing meson using pip in user mode is a good enough workaround
> if someone is crazy enough to run upstream code on these old
> distributions.
>
> > - please, take a look at the work done on libvirt-jenkins-ci and try
> > to adapt this one to follow the targets we have there;
> >   - It'll force the addition of a `ninja syntax-check`, instead of
> > having the syntax-check as part of the tests;
>
> This is an intentional change to run syntax-check tests for dist target
> as well, but it might be possible to configure it somehow.  Anyway, I
> would rather prefer to run syntax-check when running ninja dist than
> having it as a separate target.

osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
This is a pattern already being used and here I have a strong
preference for not changing the pattern if we can easily adapt to it.

>
> >
> > Again, I'll carefully go through this patch in the next days.
>
> Thanks, I'll fix the issues pointed out by Jano and send a link to
> repository with the changes.

Cool, looking forward for the link.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Fabiano Fidêncio 4 years, 7 months ago
On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
>
> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> >
> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> 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
> > > > and build definition files are more readable and easier to maintain.
> > >
> > > Hmm. I really would prefer smaller patches.
> > > - Add meson;
> > > - Drop autotools;
> > > - Change spec files;
> > > - ...
> >
> > I was considering it but to me personally the whole switch in single
> > patch looked fine as there is not that much of a code to add/remove.
> > In addition it's easier to spot if something was not converted, but
> > I can split as I don't care that much.
>
> I don't have any strong opinions here either. So, just leave it as it is.
>
> >
> > > I didn't go through the patch, will do that in the next days ... but a
> > > few things should be considered here:
> > > - meson >= 0.49.0 basically means the project won't be built on Debian
> > > < 10, Ubuntu < 19.04 ... which may be a problem for the project, if
> > > you're following libvirt supported distros;
> >
> > Debian 9 has meson 0.37.1 so yes, this will mean you cannot build
> > upstream libvirt-dbus using distribution packages, but there is
> > Python3.5 so the possible workaround is to install meson using pip.
> >
>
> We don't packages which do not officially come with the distros in
> libvirt-jenkins-ci.
> I sincerely am fine dropping the support for old systems (I just did
> the same for osinfo-db-tools and libosinfo). However, this is a
> libvirt project and I'll leave for libvirt maintainers to decide what
> to do.
>
> > The same applies to Ubuntu and CentOS 7 as well.  There is also a
> > possibility to bundle meson together with our projects but IMHO
> > installing meson using pip in user mode is a good enough workaround
> > if someone is crazy enough to run upstream code on these old
> > distributions.
> >
> > > - please, take a look at the work done on libvirt-jenkins-ci and try
> > > to adapt this one to follow the targets we have there;
> > >   - It'll force the addition of a `ninja syntax-check`, instead of
> > > having the syntax-check as part of the tests;
> >
> > This is an intentional change to run syntax-check tests for dist target
> > as well, but it might be possible to configure it somehow.  Anyway, I
> > would rather prefer to run syntax-check when running ninja dist than
> > having it as a separate target.
>
> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
> This is a pattern already being used and here I have a strong
> preference for not changing the pattern if we can easily adapt to it.

Just for the record, we had a face-to-face discussion about this and
agreement was to:
- Do not introduce the `syntax-check` target for libvirt-dbus;
- Patch osinfo-db-tools, (gtk-vnc,)? and libosinfo (depending on when
the code will be reviewed / merged) to remove the syntax-check target;
- Patch libvirt-jenkins-ci to remove the syntax-check target from the
meson jobs;

Best Regards,
-- 
Fabiano Fidêncio

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Ján Tomko 4 years, 7 months ago
On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
>On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
>>
>> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
>> >
>> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
>> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
>> > This is an intentional change to run syntax-check tests for dist target
>> > as well, but it might be possible to configure it somehow.  Anyway, I
>> > would rather prefer to run syntax-check when running ninja dist than
>> > having it as a separate target.
>>
>> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
>> This is a pattern already being used and here I have a strong
>> preference for not changing the pattern if we can easily adapt to it.
>
>Just for the record, we had a face-to-face discussion about this and

Can you record the reasoning as well?

Jano

>agreement was to:
>- Do not introduce the `syntax-check` target for libvirt-dbus;
>- Patch osinfo-db-tools, (gtk-vnc,)? and libosinfo (depending on when
>the code will be reviewed / merged) to remove the syntax-check target;
>- Patch libvirt-jenkins-ci to remove the syntax-check target from the
>meson jobs;
>
>Best Regards,
>-- 
>Fabiano Fidêncio
>
>--
>libvir-list mailing list
>libvir-list@redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Fabiano Fidêncio 4 years, 7 months ago
On Wed, Sep 18, 2019 at 9:57 PM Ján Tomko <jtomko@redhat.com> wrote:
>
> On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
> >On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
> >>
> >> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> >> >
> >> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> >> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> >> > This is an intentional change to run syntax-check tests for dist target
> >> > as well, but it might be possible to configure it somehow.  Anyway, I
> >> > would rather prefer to run syntax-check when running ninja dist than
> >> > having it as a separate target.
> >>
> >> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
> >> This is a pattern already being used and here I have a strong
> >> preference for not changing the pattern if we can easily adapt to it.
> >
> >Just for the record, we had a face-to-face discussion about this and
>
> Can you record the reasoning as well?

A few topics were brought up:
- It's closer to what different projects using meson are doing
(systemd was the example used);
- It runs on `ninja dist` without having to run an additional command
(`ninja syntax-check`);
- If the test is named 'syntax-check', the test can still be run as
`meson test syntax-check`;

Everything else is just about personal preference. And talking about
personal preference, I'd rather keep the syntax-check target, it looks
cleaner to me ... however, my personal preference is far from counting
something on "libvirt land" and I'm okay on adapting osinfo related
projects to whatever is decided here.

There are projects, though, which do not have any tests (gtk-vnc, for
example) and those will have to add a single test case to run
syntax-check in order to adapt to this decision. Up to the maintainers
to decide what to do ... but consistence, IMHO, is important.


>
> Jano
>
> >agreement was to:
> >- Do not introduce the `syntax-check` target for libvirt-dbus;
> >- Patch osinfo-db-tools, (gtk-vnc,)? and libosinfo (depending on when
> >the code will be reviewed / merged) to remove the syntax-check target;
> >- Patch libvirt-jenkins-ci to remove the syntax-check target from the
> >meson jobs;
> >
> >Best Regards,
> >--
> >Fabiano Fidêncio
> >
> >--
> >libvir-list mailing list
> >libvir-list@redhat.com
> >https://www.redhat.com/mailman/listinfo/libvir-list

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Pavel Hrdina 4 years, 7 months ago
On Thu, Sep 19, 2019 at 12:05:23AM +0200, Fabiano Fidêncio wrote:
> On Wed, Sep 18, 2019 at 9:57 PM Ján Tomko <jtomko@redhat.com> wrote:
> >
> > On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
> > >On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
> > >>
> > >> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > >> >
> > >> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > >> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > >> > This is an intentional change to run syntax-check tests for dist target
> > >> > as well, but it might be possible to configure it somehow.  Anyway, I
> > >> > would rather prefer to run syntax-check when running ninja dist than
> > >> > having it as a separate target.
> > >>
> > >> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
> > >> This is a pattern already being used and here I have a strong
> > >> preference for not changing the pattern if we can easily adapt to it.
> > >
> > >Just for the record, we had a face-to-face discussion about this and
> >
> > Can you record the reasoning as well?
> 
> A few topics were brought up:
> - It's closer to what different projects using meson are doing
> (systemd was the example used);
> - It runs on `ninja dist` without having to run an additional command
> (`ninja syntax-check`);
> - If the test is named 'syntax-check', the test can still be run as
> `meson test syntax-check`;
> 
> Everything else is just about personal preference. And talking about
> personal preference, I'd rather keep the syntax-check target, it looks
> cleaner to me ... however, my personal preference is far from counting
> something on "libvirt land" and I'm okay on adapting osinfo related
> projects to whatever is decided here.
> 
> There are projects, though, which do not have any tests (gtk-vnc, for
> example) and those will have to add a single test case to run
> syntax-check in order to adapt to this decision. Up to the maintainers
> to decide what to do ... but consistence, IMHO, is important.

A bit more to the reasoning behind dropping syntax-check target.

I was looking at a lot of meson-based projects [1] and none of the
projects that I've checked have syntax-check target and they are using
only the test target.

I was trying to search any usage of syntax-check but it looks like it's
a gnulib specific target, only few projects have this target defined in
Makefile.

Another argument from my side was that we require syntax-check and check
to be executed before posting patches to mailing list, having it under
single target would simplify things for new contributors and would align
more with meson community and projects.

Dan pointed out an issue with our CI that we would loose the separation
in our CI results, which can be solved by using 'suite' labels for tests
that we run, so for syntax-check we can use 'syntax' label and for unit
tests we can use 'unit' label, there can be multiple labels assigned to
each test and to run only a set of tests with a specific label we just
need to run these commands:

    meson test --suite syntax
    meson test --suite unit

This way we would still have the separation in our CI and contributors
could easily run `meson test` or `ninja test` to run everything.

Pavel

[1] <https://mesonbuild.com/Users.html>
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Daniel P. Berrangé 4 years, 7 months ago
On Thu, Sep 19, 2019 at 10:20:04AM +0200, Pavel Hrdina wrote:
> On Thu, Sep 19, 2019 at 12:05:23AM +0200, Fabiano Fidêncio wrote:
> > On Wed, Sep 18, 2019 at 9:57 PM Ján Tomko <jtomko@redhat.com> wrote:
> > >
> > > On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
> > > >On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
> > > >>
> > > >> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > > >> >
> > > >> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > > >> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > > >> > This is an intentional change to run syntax-check tests for dist target
> > > >> > as well, but it might be possible to configure it somehow.  Anyway, I
> > > >> > would rather prefer to run syntax-check when running ninja dist than
> > > >> > having it as a separate target.
> > > >>
> > > >> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
> > > >> This is a pattern already being used and here I have a strong
> > > >> preference for not changing the pattern if we can easily adapt to it.
> > > >
> > > >Just for the record, we had a face-to-face discussion about this and
> > >
> > > Can you record the reasoning as well?
> > 
> > A few topics were brought up:
> > - It's closer to what different projects using meson are doing
> > (systemd was the example used);
> > - It runs on `ninja dist` without having to run an additional command
> > (`ninja syntax-check`);


I think this is the compelling reason that I didn't understand before.

"ninja dist" is *NOT* the same as "make dist" from autoconf world.
It is in fact equivalent to 'make distcheck'. If we have syntx-check
as a separate target, then we're loosing a safety check at time of
release.


> > - If the test is named 'syntax-check', the test can still be run as
> > `meson test syntax-check`;
> > 
> > Everything else is just about personal preference. And talking about
> > personal preference, I'd rather keep the syntax-check target, it looks
> > cleaner to me ... however, my personal preference is far from counting
> > something on "libvirt land" and I'm okay on adapting osinfo related
> > projects to whatever is decided here.
> > 
> > There are projects, though, which do not have any tests (gtk-vnc, for
> > example) and those will have to add a single test case to run
> > syntax-check in order to adapt to this decision. Up to the maintainers
> > to decide what to do ... but consistence, IMHO, is important.
> 
> A bit more to the reasoning behind dropping syntax-check target.
> 
> I was looking at a lot of meson-based projects [1] and none of the
> projects that I've checked have syntax-check target and they are using
> only the test target.
> 
> I was trying to search any usage of syntax-check but it looks like it's
> a gnulib specific target, only few projects have this target defined in
> Makefile.
> 
> Another argument from my side was that we require syntax-check and check
> to be executed before posting patches to mailing list, having it under
> single target would simplify things for new contributors and would align
> more with meson community and projects.
> 
> Dan pointed out an issue with our CI that we would loose the separation
> in our CI results, which can be solved by using 'suite' labels for tests
> that we run, so for syntax-check we can use 'syntax' label and for unit
> tests we can use 'unit' label, there can be multiple labels assigned to
> each test and to run only a set of tests with a specific label we just
> need to run these commands:
> 
>     meson test --suite syntax
>     meson test --suite unit
>
> This way we would still have the separation in our CI and contributors
> could easily run `meson test` or `ninja test` to run everything.

Yes, that's a usable approach.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Andrea Bolognani 4 years, 7 months ago
On Thu, 2019-09-19 at 09:36 +0100, Daniel P. Berrangé wrote:
> On Thu, Sep 19, 2019 at 10:20:04AM +0200, Pavel Hrdina wrote:
> > Another argument from my side was that we require syntax-check and check
> > to be executed before posting patches to mailing list, having it under
> > single target would simplify things for new contributors and would align
> > more with meson community and projects.

This is pretty nice. I've been guilty of posting patches that passed
check but not syntax-check in the past O:-) and I know for a fact I'm
not the only one who's done that ;)

> > Dan pointed out an issue with our CI that we would loose the separation
> > in our CI results, which can be solved by using 'suite' labels for tests
> > that we run, so for syntax-check we can use 'syntax' label and for unit
> > tests we can use 'unit' label, there can be multiple labels assigned to
> > each test and to run only a set of tests with a specific label we just
> > need to run these commands:
> > 
> >     meson test --suite syntax
> >     meson test --suite unit
> > 
> > This way we would still have the separation in our CI and contributors
> > could easily run `meson test` or `ninja test` to run everything.
> 
> Yes, that's a usable approach.

Jumping in a bit late, but why do we care about this distinction in
CI at all? In our existing setup, for all projects 'make check' is
executed if and only if 'make syntax-check' has succeeded, so the
separation is fairly arbitrary and doesn't really buy us anything as
far as I can tell.

>From my point of view, while offering the option above for users can
be nice, once a project switches to Meson and its syntax-check rules
are moved to the test suite, there might as well be a single CI job
which runs 'ninja test' and that's it.

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Daniel P. Berrangé 4 years, 7 months ago
On Thu, Sep 19, 2019 at 02:45:53PM +0200, Andrea Bolognani wrote:
> On Thu, 2019-09-19 at 09:36 +0100, Daniel P. Berrangé wrote:
> > On Thu, Sep 19, 2019 at 10:20:04AM +0200, Pavel Hrdina wrote:
> > > Another argument from my side was that we require syntax-check and check
> > > to be executed before posting patches to mailing list, having it under
> > > single target would simplify things for new contributors and would align
> > > more with meson community and projects.
> 
> This is pretty nice. I've been guilty of posting patches that passed
> check but not syntax-check in the past O:-) and I know for a fact I'm
> not the only one who's done that ;)
> 
> > > Dan pointed out an issue with our CI that we would loose the separation
> > > in our CI results, which can be solved by using 'suite' labels for tests
> > > that we run, so for syntax-check we can use 'syntax' label and for unit
> > > tests we can use 'unit' label, there can be multiple labels assigned to
> > > each test and to run only a set of tests with a specific label we just
> > > need to run these commands:
> > > 
> > >     meson test --suite syntax
> > >     meson test --suite unit
> > > 
> > > This way we would still have the separation in our CI and contributors
> > > could easily run `meson test` or `ninja test` to run everything.
> > 
> > Yes, that's a usable approach.
> 
> Jumping in a bit late, but why do we care about this distinction in
> CI at all? In our existing setup, for all projects 'make check' is
> executed if and only if 'make syntax-check' has succeeded, so the
> separation is fairly arbitrary and doesn't really buy us anything as
> far as I can tell.

I thought we ran the two jobs in parallel but I guess not. Mostly I'm
interested in having CI failure mails contain clear error information.
With the jobs we currently have I find the alerts from the syntax-check
jobs clearer/easier to consume, than the check jobs. So I'm wary in
having the syntax-check results just be intermingled with the check job
results.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Andrea Bolognani 4 years, 7 months ago
On Thu, 2019-09-19 at 14:21 +0100, Daniel P. Berrangé wrote:
> On Thu, Sep 19, 2019 at 02:45:53PM +0200, Andrea Bolognani wrote:
> > On Thu, 2019-09-19 at 09:36 +0100, Daniel P. Berrangé wrote:
> > Jumping in a bit late, but why do we care about this distinction in
> > CI at all? In our existing setup, for all projects 'make check' is
> > executed if and only if 'make syntax-check' has succeeded, so the
> > separation is fairly arbitrary and doesn't really buy us anything as
> > far as I can tell.
> 
> I thought we ran the two jobs in parallel but I guess not.

No, we don't :)

> Mostly I'm
> interested in having CI failure mails contain clear error information.
> With the jobs we currently have I find the alerts from the syntax-check
> jobs clearer/easier to consume, than the check jobs. So I'm wary in
> having the syntax-check results just be intermingled with the check job
> results.

I don't think I'm subscribed to the CI mails you talk about, so
generally when I'm investigating a failure I open the full log in the
Jenkins Web UI and make liberal use of Ctrl+F. That seems to work
well enough for me.

If the output of 'ninja test' is too confusing to parse when included
in the body of a mail, then I think the solution is to try and
improve it, because that's what developers will see when they run the
same command in their terminals.

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Ján Tomko 4 years, 7 months ago
On Thu, Sep 19, 2019 at 09:36:35AM +0100, Daniel P. Berrangé wrote:
>On Thu, Sep 19, 2019 at 10:20:04AM +0200, Pavel Hrdina wrote:
>> On Thu, Sep 19, 2019 at 12:05:23AM +0200, Fabiano Fidêncio wrote:
>> > On Wed, Sep 18, 2019 at 9:57 PM Ján Tomko <jtomko@redhat.com> wrote:
>> > >
>> > > On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
>> > > >On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
>> > > >>
>> > > >> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
>> > > >> >
>> > > >> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
>> > > >> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
>> > > >> > This is an intentional change to run syntax-check tests for dist target
>> > > >> > as well, but it might be possible to configure it somehow.  Anyway, I
>> > > >> > would rather prefer to run syntax-check when running ninja dist than
>> > > >> > having it as a separate target.
>> > > >>
>> > > >> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
>> > > >> This is a pattern already being used and here I have a strong
>> > > >> preference for not changing the pattern if we can easily adapt to it.
>> > > >
>> > > >Just for the record, we had a face-to-face discussion about this and
>> > >
>> > > Can you record the reasoning as well?
>> >
>> > A few topics were brought up:
>> > - It's closer to what different projects using meson are doing
>> > (systemd was the example used);

Not a fan of using systemd as an example O:-)

>> > - It runs on `ninja dist` without having to run an additional command
>> > (`ninja syntax-check`);
>
>
>I think this is the compelling reason that I didn't understand before.
>
>"ninja dist" is *NOT* the same as "make dist" from autoconf world.
>It is in fact equivalent to 'make distcheck'. If we have syntx-check
>as a separate target, then we're loosing a safety check at time of
>release.
>

I thought that was exactly the point of keeping the target separate -
not to run the tests meant for patch submissions. For a downstream
example, I remember us not caring that much for exact spacing or failing
copyright year check on our RHEL branches.

(For example QEMU has these checks separate and only ran on the new
patch, not the whole codebase)

>
>> > - If the test is named 'syntax-check', the test can still be run as
>> > `meson test syntax-check`;
>> >
>> > Everything else is just about personal preference. And talking about
>> > personal preference, I'd rather keep the syntax-check target, it looks
>> > cleaner to me ... however, my personal preference is far from counting
>> > something on "libvirt land" and I'm okay on adapting osinfo related
>> > projects to whatever is decided here.
>> >
>> > There are projects, though, which do not have any tests (gtk-vnc, for
>> > example) and those will have to add a single test case to run
>> > syntax-check in order to adapt to this decision. Up to the maintainers
>> > to decide what to do ... but consistence, IMHO, is important.
>>
>> A bit more to the reasoning behind dropping syntax-check target.
>>
>> I was looking at a lot of meson-based projects [1] and none of the
>> projects that I've checked have syntax-check target and they are using
>> only the test target.
>>
>> I was trying to search any usage of syntax-check but it looks like it's
>> a gnulib specific target, only few projects have this target defined in
>> Makefile.
>>
>> Another argument from my side was that we require syntax-check and check
>> to be executed before posting patches to mailing list, having it under
>> single target would simplify things for new contributors and would align
>> more with meson community and projects.
>>

I like this, hopefully we'll get less patches failing syntax-check from
the old contributors as well.

Jano

>> Dan pointed out an issue with our CI that we would loose the separation
>> in our CI results, which can be solved by using 'suite' labels for tests
>> that we run, so for syntax-check we can use 'syntax' label and for unit
>> tests we can use 'unit' label, there can be multiple labels assigned to
>> each test and to run only a set of tests with a specific label we just
>> need to run these commands:
>>
>>     meson test --suite syntax
>>     meson test --suite unit
>>
>> This way we would still have the separation in our CI and contributors
>> could easily run `meson test` or `ninja test` to run everything.
>
>Yes, that's a usable approach.
>
>Regards,
>Daniel
>-- 
>|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
>|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
>|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [dbus PATCH] build: convert to Meson/Ninja build system
Posted by Daniel P. Berrangé 4 years, 7 months ago
On Thu, Sep 19, 2019 at 12:09:23PM +0200, Ján Tomko wrote:
> On Thu, Sep 19, 2019 at 09:36:35AM +0100, Daniel P. Berrangé wrote:
> > On Thu, Sep 19, 2019 at 10:20:04AM +0200, Pavel Hrdina wrote:
> > > On Thu, Sep 19, 2019 at 12:05:23AM +0200, Fabiano Fidêncio wrote:
> > > > On Wed, Sep 18, 2019 at 9:57 PM Ján Tomko <jtomko@redhat.com> wrote:
> > > > >
> > > > > On Wed, Sep 18, 2019 at 05:40:06PM +0200, Fabiano Fidêncio wrote:
> > > > > >On Wed, Sep 18, 2019 at 1:22 AM Fabiano Fidêncio <fidencio@redhat.com> wrote:
> > > > > >>
> > > > > >> On Tue, Sep 17, 2019 at 8:17 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > > > > >> >
> > > > > >> > On Tue, Sep 17, 2019 at 06:53:30PM +0200, Fabiano Fidêncio wrote:
> > > > > >> > > On Tue, Sep 17, 2019 at 5:22 PM Pavel Hrdina <phrdina@redhat.com> wrote:
> > > > > >> > This is an intentional change to run syntax-check tests for dist target
> > > > > >> > as well, but it might be possible to configure it somehow.  Anyway, I
> > > > > >> > would rather prefer to run syntax-check when running ninja dist than
> > > > > >> > having it as a separate target.
> > > > > >>
> > > > > >> osinfo-db-tools has it, libosinfo has it, libvirt-jenkins-ci uses it.
> > > > > >> This is a pattern already being used and here I have a strong
> > > > > >> preference for not changing the pattern if we can easily adapt to it.
> > > > > >
> > > > > >Just for the record, we had a face-to-face discussion about this and
> > > > >
> > > > > Can you record the reasoning as well?
> > > >
> > > > A few topics were brought up:
> > > > - It's closer to what different projects using meson are doing
> > > > (systemd was the example used);
> 
> Not a fan of using systemd as an example O:-)
> 
> > > > - It runs on `ninja dist` without having to run an additional command
> > > > (`ninja syntax-check`);
> > 
> > 
> > I think this is the compelling reason that I didn't understand before.
> > 
> > "ninja dist" is *NOT* the same as "make dist" from autoconf world.
> > It is in fact equivalent to 'make distcheck'. If we have syntx-check
> > as a separate target, then we're loosing a safety check at time of
> > release.
> > 
> 
> I thought that was exactly the point of keeping the target separate -
> not to run the tests meant for patch submissions. For a downstream
> example, I remember us not caring that much for exact spacing or failing
> copyright year check on our RHEL branches.

There is that, but if we look at the kind of things our checks do, a
non-trivial number of checks are verging on code correctness rather
than merely style check. So from that POV, I think running these
checks downstream is actally desirable in general. They can still
opt-out though, if we put the syntax check as  suite test suite
from meson's POV.

> (For example QEMU has these checks separate and only ran on the new
> patch, not the whole codebase)

QEMU is a good example of why that approach is a terrible idea. A
huge portion of QEMU's codebase doesn't comply with the style
checks as no one ever bothers to clean up after new style rules
are added. As a result people submitting patches find themselves
having to fix problems with existing code in order for their
patch to succeed. So you get patches submitted which mix style
and new features in the same patch.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list