Devel
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 25 participants
- 40350 discussions
Hi,
with the new systemd 243 libvirt-lxc seems broken.
We had the particular symptom already in the past, the TL;DR is:
1. start a lxc guest
2. restart libvirtd
3. guest is gone
This particular change is due to [1] fixed by [2] which as a side
effect will wipe libvirt-lxc containers on daemon restart. After
checking on IRC it seems this wasn't reported to libvirt yet, but for
now it is more a start of a discussion than a bug report.
I have reported this upstream at [1] and we could keep the "discussion
with systemd" there.
If you can/want please chime in there. If it turns out we want/need a
fix in libvirt we can focus on the thread here then.
[1]: https://github.com/systemd/systemd/issues/12386
[2]: https://github.com/systemd/systemd/commit/0219b3524f414e23589e63c6de6a75981…
[3]: https://github.com/systemd/systemd/issues/13629
--
Christian Ehrhardt
Software Engineer, Ubuntu Server
Canonical Ltd
1
0
23 Sep '19
It's been agreed that the projects using libvirt-jenkins-ci would have
the `syntax-check` running as part of their test suite. Therefore,
there's no reason for keeping a job which is not going to be used.
Signed-off-by: Fabiano Fidêncio <fidencio(a)redhat.com>
---
.../build/projects/osinfo-db-tools.yml | 1 -
jenkins/jobs/meson.yaml | 39 -------------------
jenkins/projects/osinfo-db-tools.yaml | 4 +-
3 files changed, 1 insertion(+), 43 deletions(-)
diff --git a/guests/playbooks/build/projects/osinfo-db-tools.yml b/guests/playbooks/build/projects/osinfo-db-tools.yml
index d142e0e..67e5f00 100644
--- a/guests/playbooks/build/projects/osinfo-db-tools.yml
+++ b/guests/playbooks/build/projects/osinfo-db-tools.yml
@@ -17,7 +17,6 @@
- include: '{{ playbook_base }}/jobs/prepare.yml'
- include: '{{ playbook_base }}/jobs/meson-build-job.yml'
-- include: '{{ playbook_base }}/jobs/meson-syntax-check-job.yml'
- include: '{{ playbook_base }}/jobs/meson-check-job.yml'
- include: '{{ playbook_base }}/jobs/meson-rpm-job.yml'
vars:
diff --git a/jenkins/jobs/meson.yaml b/jenkins/jobs/meson.yaml
index 02e4395..102d0a4 100644
--- a/jenkins/jobs/meson.yaml
+++ b/jenkins/jobs/meson.yaml
@@ -53,45 +53,6 @@
notify-every-unstable-build: false
send-to-individuals: false
-- job-template:
- id: meson-syntax-check-job
- name: '{name}-syntax-check'
- project-type: matrix
- description: '{title} Syntax Check'
- workspace: '{name}'
- child-workspace: '.'
- block-downstream: true
- block-upstream: true
- wrappers:
- - timeout:
- abort: true
- type: absolute
- timeout: 90
- write-description: 'Aborted build after 90 minutes'
- properties:
- - build-discarder:
- days-to-keep: 30
- num-to-keep: 1000
- triggers:
- - reverse:
- jobs: '{obj:parent_jobs}'
- axes:
- - axis:
- name: systems
- type: slave
- values: '{obj:machines}'
- builders:
- - shell: |
- {global_env}
- {local_env}
- cd build
- ninja syntax-check
- publishers:
- - email:
- recipients: '{obj:spam}'
- notify-every-unstable-build: false
- send-to-individuals: false
-
- job-template:
id: meson-check-job
name: '{name}-check'
diff --git a/jenkins/projects/osinfo-db-tools.yaml b/jenkins/projects/osinfo-db-tools.yaml
index 2a9ea11..8609b46 100644
--- a/jenkins/projects/osinfo-db-tools.yaml
+++ b/jenkins/projects/osinfo-db-tools.yaml
@@ -16,10 +16,8 @@
jobs:
- meson-build-job:
parent_jobs:
- - meson-syntax-check-job:
- parent_jobs: 'osinfo-db-tools-build'
- meson-check-job:
- parent_jobs: 'osinfo-db-tools-syntax-check'
+ parent_jobs: 'osinfo-db-tools-build'
- meson-rpm-job:
parent_jobs: 'osinfo-db-tools-check'
machines:
--
2.23.0
4
8
We need to figure out a way how to check this by our test suite.
Pavel Hrdina (2):
virDomainMigrate3Params: add missing bandwidth postcopy param
virDomainMigrate3Params: add missing parallel connections param
libvirt-override.c | 6 ++++++
1 file changed, 6 insertions(+)
--
2.21.0
2
4
23 Sep '19
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.
There are some major changes with Meson build system:
- there is no syntax-check target, the syntax-check is part of Meson
test suite but it's still possible to run it separately,
- Meson forces separation between source and build directories
Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
Tested-by: Ján Tomko <jtomko(a)redhat.com>
---
Notes:
changes in v2:
- add -Werror if we are building from git
- fixed -Wframe-larger-than
- removed unrelated fix
- added comment for flake8 ignore warning
- added 'suite' labels 'syntax' and 'unit' for tests
- AUTHORS and libvirt-dbus.spec are generated only when building from git
- run.in is no longer executable, there is a helper script to fix permissions
for the generated run script
- fixed include_directories for test executable, direct paths can be used
since meson 0.50.0
- flake8 is optional as it was with autotools
- added meson version into spec file
.gitignore | 1 +
AUTHORS.in | 2 +-
HACKING.md | 24 ++--
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 | 9 +-
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 | 279 ++++++++++++++++++++++++++++++++++++
meson_options.txt | 6 +
run.in | 4 +-
src/Makefile.am | 66 ---------
src/meson.build | 42 ++++++
tests/Makefile.am | 57 --------
tests/meson.build | 52 +++++++
tools/fix-perm.sh | 3 +
tools/gen-authors.sh | 4 +
29 files changed, 463 insertions(+), 1221 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
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/fix-perm.sh
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..e90f136 100644
--- a/HACKING.md
+++ b/HACKING.md
@@ -16,32 +16,40 @@ 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:
+ * Before posting a patch, you should run tests:
```
- make check
+ ninja -C build test
```
- The test tool requires python3, python3-pytest and python3-dbus.
+ The test tool requires python3, python3-pytest, python3-dbus and flake8.
+
+ It is possible to run only specific test using:
+
+ ```
+ meson test -C build $test-name
+ ```
+
+ or a group of tests:
```
- make syntax-check
+ meson test -C build --suite $label
```
- To run this flake8 package is required.
+ For more information see [https://mesonbuild.com/Unit-tests.html#testing-tool](https://mesonbuild.com….
* 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(a)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..3425e9e 100644
--- a/libvirt-dbus.spec.in
+++ b/libvirt-dbus.spec.in
@@ -1,5 +1,6 @@
# -*- rpm-spec -*-
+%global meson_version @MESON_VERSION@
%global glib2_version @GLIB2_REQUIRED@
%global libvirt_version @LIBVIRT_REQUIRED@
%global libvirt_glib_version @LIBVIRT_GLIB_REQUIRED@
@@ -14,7 +15,7 @@ URL: https://libvirt.org/
Source0: https://libvirt.org/sources/dbus/%{name}-%{version}.tar.xz
BuildRequires: gcc
-BuildRequires: libtool
+BuildRequires: meson >= %{meson_version}
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: libvirt-devel >= %{libvirt_version}
BuildRequires: libvirt-glib-devel >= %{libvirt_glib_version}
@@ -35,11 +36,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..30eeebe
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,279 @@
+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('MESON_VERSION', '0.49.0')
+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)
+
+git = run_command('test', '-d', '.git').returncode() == 0
+
+
+# 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 = '@0@_dir'.format(opt_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-than=1024',
+ '-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 git
+ cc_flags += ['-Werror']
+endif
+
+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 run helper
+
+configure_file(
+ input: 'run.in',
+ output: 'run',
+ configuration: conf,
+)
+run_command('tools/fix-perm.sh', 'a+x', 'run')
+
+
+# Generate dist files
+
+if git
+ configure_file(
+ input: 'libvirt-dbus.spec.in',
+ output: 'libvirt-dbus.spec',
+ configuration: conf,
+ )
+
+ authors = run_command('tools/gen-authors.sh')
+ configure_file(
+ configuration: { 'contributorslist': authors.stdout() },
+ input: 'AUTHORS.in',
+ output: 'AUTHORS',
+ )
+
+ foreach file : [ 'libvirt-dbus.spec', 'AUTHORS' ]
+ path = join_paths(meson.build_root(), file)
+ meson.add_dist_script(
+ 'sh',
+ '-c',
+ 'cp "@0@" "$MESON_DIST_ROOT/"'.format(path),
+ )
+ endforeach
+endif
+
+
+# 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
index 0744a80..1b2207e 100644
--- 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/meson.build b/src/meson.build
new file mode 100644
index 0000000..a848bcd
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,42 @@
+lib_util = static_library(
+ 'libutil',
+ [
+ 'util.c',
+ ],
+ dependencies: [
+ dep_gio_unix,
+ dep_glib,
+ dep_libvirt,
+ dep_libvirt_glib
+ ],
+)
+
+exe_libvirt_dbus = executable(
+ 'libvirt-dbus',
+ [
+ 'connect.c',
+ 'domain.c',
+ 'events.c',
+ 'gdbus.c',
+ 'interface.c',
+ 'main.c',
+ 'network.c',
+ 'nodedev.c',
+ 'nwfilter.c',
+ 'secret.c',
+ 'storagepool.c',
+ 'storagevol.c',
+ ],
+ 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..6617d4c
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,52 @@
+src_include = include_directories('../src')
+
+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_include,
+)
+
+test('test_util', test_exec, suite: 'unit')
+
+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, suite: 'unit')
+endforeach
+
+flake8 = find_program('flake8', 'flake8-3', required: false)
+if flake8.found()
+ test(
+ 'flake8', flake8,
+ args: [
+ '--show-source',
+ '--ignore=E501', # E501: (line too long) warning is ignored.
+ meson.source_root(),
+ ],
+ suite: 'syntax',
+ )
+endif
diff --git a/tools/fix-perm.sh b/tools/fix-perm.sh
new file mode 100755
index 0000000..ed444d4
--- /dev/null
+++ b/tools/fix-perm.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+chmod $1 $MESON_BUILD_ROOT/$2
diff --git a/tools/gen-authors.sh b/tools/gen-authors.sh
new file mode 100755
index 0000000..eb39215
--- /dev/null
+++ b/tools/gen-authors.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cd $MESON_SOURCE_ROOT
+git log --pretty=format:' %aN <%aE>' | sort -u
--
2.21.0
5
16
[libvirt] [PATCH] docs: attempt to document the general libvirt dev strategy
by Daniel P. Berrangé 23 Sep '19
by Daniel P. Berrangé 23 Sep '19
23 Sep '19
There are various ideas / plans floating around for future libvirt work,
some of which is actively in progress. Historically we've never captured
this kind of information anywhere, except in mailing list discussions.
In particular guidelines in hacking.html.in don't appear until a policy
is actively applied.
This patch attempts to fill the documentation gap, by creating a new
"strategy" page which outlines the general vision for some notable
future changes. The key thing to note is that none of the stuff on this
page is guaranteed, plans may change as new information arises. IOW this
is a "best guess" as to the desired future.
This doc has focused on three areas, related to the topic of language
usage / consolidation
- Use of non-C languages for the library, daemons or helper tools
- Replacement of autotools with meson
- Use of RST and Sphinx for documentation (website + man pages)
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/docs.html.in | 3 +
docs/strategy.html.in | 143 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 146 insertions(+)
create mode 100644 docs/strategy.html.in
diff --git a/docs/docs.html.in b/docs/docs.html.in
index c1741c89b4..6cf09f51bc 100644
--- a/docs/docs.html.in
+++ b/docs/docs.html.in
@@ -128,6 +128,9 @@
<dt><a href="hacking.html">Contributor guidelines</a></dt>
<dd>General hacking guidelines for contributors</dd>
+ <dt><a href="strategy.html">Project strategy</a></dt>
+ <dd>Sets a vision for future direction & technical choices</dd>
+
<dt><a href="bugs.html">Bug reports</a></dt>
<dd>How and where to report bugs and request features</dd>
diff --git a/docs/strategy.html.in b/docs/strategy.html.in
new file mode 100644
index 0000000000..41bbebb8f9
--- /dev/null
+++ b/docs/strategy.html.in
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <body>
+ <h1>Libvirt Project Strategy</h1>
+
+ <p>
+ This document attempts to outline the libvirt project strategy for
+ the near future. Think of this is a high level vision or todo list
+ setting the direction for the project & its developers to take
+ </p>
+
+ <h2>Language consolidation</h2>
+
+ <p>
+ At time of writing libvirt uses the following languages
+ </p>
+
+ <dl>
+ <dt>C</dt>
+ <dd>The core libvirt library, daemons, and helper tools are all written
+ in the C language.</dd>
+ <dt>Python</dt>
+ <dd>Various supporting build/test scripts are written in Python, with
+ compatibility for Python 2 and 3.</dd>
+ <dt>Perl</dt>
+ <dd>Various supporting build/test scripts are written in Python. It is
+ also used for many syntax-check inline rules</dd>
+ <dt>Shell</dt>
+ <dd>The autoconf configure script, is essentially shell script. Shell
+ is also used for some simple build/test scripts. At runtime libvirt
+ avoids shell except when using SSH tunnels to a remote host</dd>
+ <dt>XSLT</dt>
+ <dd>The website documentation is subsituted into templates using XSLT
+ scripts. The API documentation is also autogenerated from an XML
+ description using XSLT</dd>
+ <dt>HTML</dt>
+ <dd>The website documentation is all written in plain HTML. Some HTML
+ is also auto-generated for API documentation</dd>
+ <dt>M4</dt>
+ <dd>The autoconf configure script uses a large number of M4 macros to
+ generate its content</dd>
+ <dt>make</dt>
+ <dd>The core build system uses the traditional GNU make recipes</dd>
+ <dt>automake</dt>
+ <dd>The make recipes make use of automake's make language extensions
+ which are then turned into regular make rules</dd>
+ <dt>awk/sed</dt>
+ <dd>A number of the syntax-check inline rules involve use of awk/sed
+ scripts</dd>
+ <dt>POD</dt>
+ <dd>The command line manual pages are typically written in Perl's POD
+ format, and converted to troff</dt>
+ </dl>
+
+ <p>
+ The wide range of languages used present a knowledge burden for
+ developers involved in libvirt, especially when there are multiple
+ languages all used in the same problem spaces. This is most notable
+ in the build system which uses a combination of shell, m4, make,
+ automake, awk, sed, perl and python, with debugging requiring
+ understanding of the interactions between many languages. The
+ relative popularity of the languages has implications for how easily
+ the project can attract new contributors, and the quality of the code
+ they'll be able to submit. This is most notable when comparing Perl
+ to Python, as since the start of the libvirt project, the popularity
+ and knowledge of Perl has declined, while Python has risen.
+ </p>
+ <p>
+ The C language has served libvirt well over the years, but its age shows
+ giving rise to limitations which negatively impact the project in terms
+ of code quality, reliability, and efficiency of development. Most notably
+ its lack of memory safety means that many code bugs become trivially
+ exploitable security flaws or denial of service. The lack of a high
+ level portable runtime, resulting in alot of effort being spent to
+ ensure cross platform portability. The modern languages Rust and Go
+ provide viable options for low level systems programming, in a way that
+ was not practical with other common languages such as Python and Java.
+ There is thus a desire to make use of either Rust or Go, or more likely
+ a combination of both, to incrementally replace existing use of C, and
+ also for greenfield development.
+ </p>
+ <p>
+ With this in mind the libvirt project has set a vision for language
+ usage in the future
+ </p>
+
+ <dl>
+ <dt>C</dt>
+ <dd>The core libvirt library, daemons, and helper tools are all written
+ in the C language.</dd>
+ <dt>Rust</dt>
+ <dd>Parts of the core libvirt library / daemon are to be able to leverage
+ Rust to replace C. (TBD vs Go)</dd>
+ <dt>Go</dt>
+ <dd>Parts of the core libvirt library / daemon are to be able to leverage
+ Rust to replace C. (TBD vs Rust). Helper tools are able to be written
+ in Go.</dd>
+ <dt>Meson</dt>
+ <dd>The core build system is to be written in meson.</dd>
+ <dt>Python</dt>
+ <dd>Various supporting build/test scripts are written in Python 3
+ compatible mode only.</dd>
+ <dt>RST</dt>
+ <dd>The website and command man pages are to be written in RST, using
+ Sphinx as the engine to convert to end user formats like HTML, troff,
+ etc</dd>
+ </dl>
+
+ <p>
+ Some notable points from the above. Whether the core library / daemons
+ will use Rust or Go internally is still to be decided based on more
+ detailed evaluation of their pros and cons, to identify the best fit,
+ as the need to link & embed this functionality in other processes has
+ complex interactions both at a technical and non-technical level. For
+ standalone helper tools, Go is a good fit for rapid development as
+ there are no concerns around interactions with other in-process code
+ from 3rd parties.
+ </p>
+
+ <p>
+ The meson build system is written in Python, at time of writing,
+ requiring version 3.4 or later. This directly informs the choice to use
+ Python 3.4 as the language for all supporting build scripts, re-inforcing
+ the other benefits of Python, over Perl, Shell, M4, automake, etc.
+ </p>
+
+ <p>
+ Using the RST format for documentation allows for the use of XSLT to be
+ eliminated from the build process. RST and the Sphinx toolkit are widely
+ used, as seen by the huge repository of content on
+ https://readthedocs.org/. The ability embed raw HTML in the RST docs will
+ greatly facilitate its adoption, avoiding the need for a big bang
+ conversion of existing content. Given the desire to eliminate Perl
+ usage, replacing the use of POD documentation for manual pages is an
+ obvious followup task. RST is the obvious choice to given alignment
+ with the website, allowing the man pages to be easily published online
+ with other docs. It is further anticipated that the current API docs
+ generator which uses XSLT to convert the XML API description would be
+ converted to something which generates RST using Python instead of XSL.
+ </p>
+ </body>
+</html>
--
2.21.0
4
5
[libvirt] [PATCH] docs: kbase: Add a section explaining how to verify SEV from the guest
by Erik Skultety 23 Sep '19
by Erik Skultety 23 Sep '19
23 Sep '19
Commit 50dfabbb59 forgot to add this important bit on how to check that
all the changes to the XML actually worked.
---
docs/kbase/launch_security_sev.html.in | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/docs/kbase/launch_security_sev.html.in b/docs/kbase/launch_security_sev.html.in
index 923bb52b25..4b8e06ccc1 100644
--- a/docs/kbase/launch_security_sev.html.in
+++ b/docs/kbase/launch_security_sev.html.in
@@ -349,6 +349,18 @@ EOF</pre>
...
</domain></pre>
+ <h2><a id="Guest">Checking SEV from within the guest</a></h2>
+ <p>
+ After making the necessary adjustments discussed in
+ <a href="#Configuration">Configuration</a>, the VM should now boot
+ successfully with SEV enabled. You can then verify that the guest
+ enabled with SEV by running:
+ </p>
+
+ <pre>
+# dmesg | grep -i sev
+AMD Secure Encrypted Virtualization (SEV) active</pre>
+
<h2><a id="Limitations">Limitations</a></h2>
<p>
Currently, the boot disk cannot be of type virtio-blk, instead, virtio-scsi
--
2.20.1
3
5
23 Sep '19
From: Marc-André Lureau <marcandre.lureau(a)redhat.com>
Hi,
This series adds support for running virtio GPUs in seperate
processes, thanks to vhost-user backend.
The QEMU support landed for 4.1. There are several benefits of running
the GPU/virgl in an external process, since Mesa is rather heavy on
the qemu main loop, and may block for a while, or crash.
The external GPU process is started with one end of a socket pair, the
other end is given to a QEMU chardev attached to a device. The
external process is also added to the cgroup to limit resources usage.
vhost-user is a generic mechanism that allows implementing virtio device
dataplane handling in a separate userspace process. vhost-user-gpu here
notably moves the virgl 3d handling out of the main qemu process. The
external process will be /usr/libexec/vhost-user-gpu, which comes from
qemu.git contrib/vhost-user-gpu code, first released in qemu-4.1.
Part of this series deals with discovering the location on disk of the
vhost-user-gpu binary, and what capabilities it provides. This uses a
similar mechanism to firmware.json, described in qemu
docs/interop/vhost-user.json
https://github.com/qemu/qemu/blob/master/docs/interop/vhost-user.json
qemu 4.1 ships a 50-qemu-gpu.json to match. I believe virtio-fs
will use a similar mechanism when it lands in upstream qemu, as
virtiofsd is a separate process that communicates with qemu over
vhost-user.
For a bit more background on vhost-user-gpu process handling and
the json interop motivation, here's some of the qemu discussion:
https://lists.nongnu.org/archive/html/qemu-devel/2018-08/msg02610.html
https://lists.nongnu.org/archive/html/qemu-devel/2018-09/msg00807.html
For this series, the XML to enable this is:
<video model='virtio'>
<driver name='vhostuser'/>
<acceleration accel3d='yes' rendernode='/path/to/rendernode'/>
</video>
rendernode is optional
qemu_vhost_user.c handles vhost-user.json
qemu_vhost_user_gpu.c handles the process management for
vhost-user-gpu
v4:
- rebased
- simplify vhost-user-gpu pidfile checking
- fix check/syntax-check
v3:
- rename qemu_configs -> qemu_interop_config
- replace <model .. vhostuser='yes'/> with <driver name='vhostuser'/>
- move vhost_user_binary to virDomainVideoDriverDef
- some VIR_AUTO usage improvements
- introduce qemuDomainVideoPrivate to store vhost-user fd
- improved selection of -device model
- use DO_TEST_CAPS_LATEST
- allocate a rendernode with virHostGetDRMRenderNode() - but no clear idea how to have a test
- add a patch to ignore EPERM in virDirOpenIfExists()
- better domain checks/validate
- added Ján r-b
- no s-o-b from Cole, per request and commits taken from his git branch
- rebase, indentation/style fixes, update doc, version..
v2:
- rebase to master
- if test file build by dropping LDADDS usage
- syntax-check issues:
* use #pragma once
* if () bracket issues
* jump label indent issues
* error message %s usage
* size_t for loops
Marc-André Lureau (20):
qemu: generalize qemuFetchConfigs
util: ignore EACCESS in virDirOpenIfExists
conf: format/parse/rng/docs for video <driver name='qemu|vhostuser'/>
domain: add rendernode attribute on <accel>
qemu-cgroup: allow accel rendernode access
qemu: add vhost-user-gpu capabilities checks
qemu: check that qemu is vhost-user-vga capable
qemu: validate virtio-gpu with vhost-user
qemu: restrict 'virgl=' option to non-vhostuser video type
qemu: add vhost-user helpers
qemu: add qemuSecurityStartVhostUserGPU helper
conf: add privateData to virDomainVideoDef
qemu: add qemuDomainVideoPrivate
qemu: add vhost-user-gpu helper unit
tests: mock execv/execve
tests: wrap vhost-user paths in qemuxml2argvtest
qemu: prepare domain for vhost-user GPU
qemu: start/stop the vhost-user-gpu external device
qemu: build vhost-user GPU devices
tests: add vhost-user-gpu xml2argv tests
docs/formatdomain.html.in | 18 +-
docs/schemas/domaincommon.rng | 13 +
src/conf/domain_conf.c | 87 +++-
src/conf/domain_conf.h | 21 +-
src/qemu/Makefile.inc.am | 6 +
src/qemu/qemu_capabilities.c | 6 +
src/qemu/qemu_capabilities.h | 4 +
src/qemu/qemu_cgroup.c | 24 +
src/qemu/qemu_command.c | 65 ++-
src/qemu/qemu_domain.c | 52 ++-
src/qemu/qemu_domain.h | 12 +
src/qemu/qemu_extdevice.c | 74 ++-
src/qemu/qemu_extdevice.h | 5 +
src/qemu/qemu_firmware.c | 144 +-----
src/qemu/qemu_interop_config.c | 183 ++++++++
src/qemu/qemu_interop_config.h | 25 ++
src/qemu/qemu_process.c | 61 ++-
src/qemu/qemu_security.c | 40 ++
src/qemu/qemu_security.h | 6 +
src/qemu/qemu_vhost_user.c | 422 ++++++++++++++++++
src/qemu/qemu_vhost_user.h | 48 ++
src/qemu/qemu_vhost_user_gpu.c | 276 ++++++++++++
src/qemu/qemu_vhost_user_gpu.h | 49 ++
src/util/virfile.c | 13 +-
tests/Makefile.am | 9 +
.../caps_4.1.0.x86_64.xml | 2 +
.../etc/qemu/vhost-user/40-gpu.json | 1 +
.../etc/qemu/vhost-user/50-gpu.json | 0
.../qemu/vhost-user/test-vhost-user-gpu | 11 +
.../usr/share/qemu/vhost-user/30-gpu.json | 1 +
.../usr/share/qemu/vhost-user/50-gpu.json | 8 +
.../usr/share/qemu/vhost-user/60-gpu.json | 1 +
tests/qemuvhostusertest.c | 132 ++++++
...host-user-gpu-secondary.x86_64-latest.args | 43 ++
.../vhost-user-gpu-secondary.xml | 46 ++
.../vhost-user-vga.x86_64-latest.args | 40 ++
tests/qemuxml2argvdata/vhost-user-vga.xml | 42 ++
tests/qemuxml2argvdata/virtio-options.args | 5 +-
tests/qemuxml2argvdata/virtio-options.xml | 4 +-
tests/qemuxml2argvtest.c | 16 +-
tests/virfilewrapper.c | 22 +
41 files changed, 1827 insertions(+), 210 deletions(-)
create mode 100644 src/qemu/qemu_interop_config.c
create mode 100644 src/qemu/qemu_interop_config.h
create mode 100644 src/qemu/qemu_vhost_user.c
create mode 100644 src/qemu/qemu_vhost_user.h
create mode 100644 src/qemu/qemu_vhost_user_gpu.c
create mode 100644 src/qemu/qemu_vhost_user_gpu.h
create mode 120000 tests/qemuvhostuserdata/etc/qemu/vhost-user/40-gpu.json
create mode 100644 tests/qemuvhostuserdata/etc/qemu/vhost-user/50-gpu.json
create mode 100755 tests/qemuvhostuserdata/usr/libexec/qemu/vhost-user/test-vhost-user-gpu
create mode 120000 tests/qemuvhostuserdata/usr/share/qemu/vhost-user/30-gpu.json
create mode 100644 tests/qemuvhostuserdata/usr/share/qemu/vhost-user/50-gpu.json
create mode 120000 tests/qemuvhostuserdata/usr/share/qemu/vhost-user/60-gpu.json
create mode 100644 tests/qemuvhostusertest.c
create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.x86_64-latest.args
create mode 100644 tests/qemuxml2argvdata/vhost-user-gpu-secondary.xml
create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.x86_64-latest.args
create mode 100644 tests/qemuxml2argvdata/vhost-user-vga.xml
--
2.23.0
4
37
[libvirt] [PATCH] qemu: fix operation job association when qemuCaps is NULL.
by jcfaracco@gmail.com 23 Sep '19
by jcfaracco@gmail.com 23 Sep '19
23 Sep '19
From: Julio Faracco <jcfaracco(a)gmail.com>
Function qemuMigrationEatCookie() calls
qemuMigrationCookieXMLParseStr(), when qemuCaps is not set, function
assumes priv as a NULL pointer. At the end, function tries to set
job info operation to the same current job. But, if priv is NULL due to
missing qemuCaps, code returns a Null Pointer Exception. This commit
adds an extra check to verify it.
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
src/qemu/qemu_migration_cookie.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_cookie.c
index 25d3fecd74..945b640e2c 100644
--- a/src/qemu/qemu_migration_cookie.c
+++ b/src/qemu/qemu_migration_cookie.c
@@ -1538,7 +1538,8 @@ qemuMigrationEatCookie(virQEMUDriverPtr driver,
}
}
- if (flags & QEMU_MIGRATION_COOKIE_STATS && mig->jobInfo)
+ if (flags & QEMU_MIGRATION_COOKIE_STATS && mig->jobInfo &&
+ priv && priv->job.current)
mig->jobInfo->operation = priv->job.current->operation;
return mig;
--
2.20.1
2
1
An example how configure looks like with these changes applied:
https://travis-ci.org/zippy2/libvirt/jobs/582549099#L4247
Michal Prívozník (4):
configure: Prefer LIBVIRT_RESULT over AC_MSG_NOTICE
virt-result.m4: Align string more generously
configure: Colorize output
virt-result.m4: Colourize summary printings
configure.ac | 8 ++---
m4/virt-chrdev-lock-files.m4 | 2 +-
m4/virt-colours.m4 | 62 ++++++++++++++++++++++++++++++++++++
m4/virt-debug.m4 | 2 +-
m4/virt-default-editor.m4 | 2 +-
m4/virt-dtrace.m4 | 2 +-
m4/virt-host-validate.m4 | 2 +-
m4/virt-init-script.m4 | 2 +-
m4/virt-loader-nvram.m4 | 2 +-
m4/virt-login-shell.m4 | 2 +-
m4/virt-numad.m4 | 2 +-
m4/virt-result.m4 | 21 ++++++++++--
12 files changed, 93 insertions(+), 16 deletions(-)
create mode 100644 m4/virt-colours.m4
--
2.21.0
4
17
23 Sep '19
* pass same size to virStreamRecv as the buffer has allocated
* Handle -2 error case
* Fix FFI declaration to take size_t instead of c_uint
* Allow user to pass in buffer. To allow user to decide where to
allocate it. And to be able to re-use the same buffer
* Don't try to treat binary data as a string
Signed-off-by: Linus Färnstrand <faern(a)faern.net>
---
src/stream.rs | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/stream.rs b/src/stream.rs
index 8333ee5..af6c8ec 100644
--- a/src/stream.rs
+++ b/src/stream.rs
@@ -18,6 +18,7 @@
extern crate libc;
+use std::convert::TryFrom;
use std::str;
use error::Error;
@@ -37,7 +38,7 @@ extern "C" {
-> libc::c_int;
fn virStreamRecv(c: sys::virStreamPtr,
data: *mut libc::c_char,
- nbytes: libc::c_uint)
+ nbytes: libc::size_t)
-> libc::c_int;
fn virStreamFree(c: sys::virStreamPtr) -> libc::c_int;
fn virStreamAbort(c: sys::virStreamPtr) -> libc::c_int;
@@ -116,14 +117,14 @@ impl Stream {
}
}
- pub fn recv(&self, size: u32) -> Result<String, Error> {
- unsafe {
- let mut data: [libc::c_char; 2048] = ['\0' as i8; 2048];
- let ret = virStreamRecv(self.as_ptr(), data.as_mut_ptr(), size as libc::c_uint);
- if ret == -1 {
- return Err(Error::new());
- }
- return Ok(c_chars_to_string!(data.as_ptr()));
- }
+ pub fn recv(&self, buf: &mut [u8]) -> Result<usize, Error> {
+ let ret = unsafe {
+ virStreamRecv(
+ self.as_ptr(),
+ buf.as_mut_ptr() as *mut libc::c_char,
+ buf.len(),
+ )
+ };
+ usize::try_from(ret).map_err(|_| Error::new())
}
}
--
2.21.0
2
3