[arch-commits] Commit in libvirt/trunk (17 files)

Christian Rebischke shibumi at archlinux.org
Sat Aug 18 16:38:04 UTC 2018


    Date: Saturday, August 18, 2018 @ 16:38:03
  Author: shibumi
Revision: 372664

This fixes support for qemu

Added:
  libvirt/trunk/0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch
  libvirt/trunk/0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch
  libvirt/trunk/0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch
  libvirt/trunk/0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch
  libvirt/trunk/0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch
  libvirt/trunk/0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch
  libvirt/trunk/0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch
  libvirt/trunk/0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch
  libvirt/trunk/0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch
  libvirt/trunk/0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch
  libvirt/trunk/0011-Revert-Remove-virJSONValueNewStringLen.patch
  libvirt/trunk/0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch
  libvirt/trunk/0013-Revert-Remove-functions-using-yajl.patch
  libvirt/trunk/0014-Revert-Switch-from-yajl-to-Jansson.patch
  libvirt/trunk/0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch
  libvirt/trunk/0016-Revert-build-add-with-jansson.patch
Modified:
  libvirt/trunk/PKGBUILD

-----------------------------------------------------------------+
 0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch |   49 
 0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch        |   48 
 0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch |   63 
 0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch |   46 
 0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch |   45 
 0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch |  514 ++++++
 0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch |   40 
 0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch          |  191 ++
 0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch |   39 
 0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch |   49 
 0011-Revert-Remove-virJSONValueNewStringLen.patch               |   83 +
 0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch |   38 
 0013-Revert-Remove-functions-using-yajl.patch                   |  578 +++++++
 0014-Revert-Switch-from-yajl-to-Jansson.patch                   |  743 ++++++++++
 0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch |   37 
 0016-Revert-build-add-with-jansson.patch                        |   96 +
 PKGBUILD                                                        |   50 
 17 files changed, 2706 insertions(+), 3 deletions(-)

Added: 0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch
===================================================================
--- 0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch	                        (rev 0)
+++ 0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,49 @@
+From c020527f8d734061253f8bfd1ca996cb774b35ba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:37:53 +0200
+Subject: [PATCH 01/16] Revert "src: Move DLOPEN_LIBS to libraries introducing
+ the dependency"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 5d40272ea67c74049600e120095d1b42287ed2d2.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ tools/Makefile.am | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 1452d984a0..26c887649e 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -527,7 +527,8 @@ nss_libnss_libvirt_impl_la_CFLAGS = \
+ 
+ nss_libnss_libvirt_impl_la_LIBADD = \
+ 	../gnulib/lib/libgnu.la \
+-	../src/libvirt-nss.la
++	../src/libvirt-nss.la \
++	$(DLOPEN_LIBS)
+ 
+ nss_libnss_libvirt_la_SOURCES =
+ nss_libnss_libvirt_la_LDFLAGS = \
+@@ -554,7 +555,8 @@ nss_libnss_libvirt_guest_impl_la_CFLAGS = \
+ 
+ nss_libnss_libvirt_guest_impl_la_LIBADD = \
+ 	../gnulib/lib/libgnu.la \
+-	../src/libvirt-nss.la
++	../src/libvirt-nss.la \
++	$(DLOPEN_LIBS)
+ 
+ nss_libnss_libvirt_guest_la_SOURCES =
+ nss_libnss_libvirt_guest_la_LDFLAGS = \
+-- 
+2.18.0
+

Added: 0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch
===================================================================
--- 0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch	                        (rev 0)
+++ 0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,48 @@
+From 918ae02a60af28875876fbea649870ced686412c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:38:28 +0200
+Subject: [PATCH 02/16] Revert "Fix link errors in tools/nss and tests"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit b3d9b08ef797e569b14cfa42d3dceba23c2a5b14.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ tools/Makefile.am | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 26c887649e..1452d984a0 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -527,8 +527,7 @@ nss_libnss_libvirt_impl_la_CFLAGS = \
+ 
+ nss_libnss_libvirt_impl_la_LIBADD = \
+ 	../gnulib/lib/libgnu.la \
+-	../src/libvirt-nss.la \
+-	$(DLOPEN_LIBS)
++	../src/libvirt-nss.la
+ 
+ nss_libnss_libvirt_la_SOURCES =
+ nss_libnss_libvirt_la_LDFLAGS = \
+@@ -555,8 +554,7 @@ nss_libnss_libvirt_guest_impl_la_CFLAGS = \
+ 
+ nss_libnss_libvirt_guest_impl_la_LIBADD = \
+ 	../gnulib/lib/libgnu.la \
+-	../src/libvirt-nss.la \
+-	$(DLOPEN_LIBS)
++	../src/libvirt-nss.la
+ 
+ nss_libnss_libvirt_guest_la_SOURCES =
+ nss_libnss_libvirt_guest_la_LDFLAGS = \
+-- 
+2.18.0
+

Added: 0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch
===================================================================
--- 0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch	                        (rev 0)
+++ 0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,63 @@
+From fed899ac086a1ee511197d3cb7da28b925c53a65 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:38:38 +0200
+Subject: [PATCH 03/16] Revert "remote: daemon: Make sure that JSON symbols are
+ properly loaded at startup"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 3251fc9c9b9639c3fec3181530599415523d671a.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ src/libvirt_private.syms   | 4 ----
+ src/remote/remote_daemon.c | 4 ----
+ 2 files changed, 8 deletions(-)
+
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index 70dfcc5e29..fc386e1699 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -2135,10 +2135,6 @@ virJSONValueObjectStealObject;
+ virJSONValueToString;
+ 
+ 
+-# util/virjsoncompat.h
+-virJSONInitialize;
+-
+-
+ # util/virkeycode.h
+ virKeycodeSetTypeFromString;
+ virKeycodeSetTypeToString;
+diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c
+index 8bbc3818bb..9f3a5f38ad 100644
+--- a/src/remote/remote_daemon.c
++++ b/src/remote/remote_daemon.c
+@@ -59,7 +59,6 @@
+ #include "virutil.h"
+ #include "virgettext.h"
+ #include "util/virnetdevopenvswitch.h"
+-#include "virjsoncompat.h"
+ 
+ #include "driver.h"
+ 
+@@ -1184,9 +1183,6 @@ int main(int argc, char **argv) {
+         exit(EXIT_FAILURE);
+     }
+ 
+-    if (virJSONInitialize() < 0)
+-        exit(EXIT_FAILURE);
+-
+     daemonSetupNetDevOpenvswitch(config);
+ 
+     if (daemonSetupAccessManager(config) < 0) {
+-- 
+2.18.0
+

Added: 0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch
===================================================================
--- 0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch	                        (rev 0)
+++ 0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,46 @@
+From 60cd8228e79151fbb2fe574161da5743937a0122 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:38:46 +0200
+Subject: [PATCH 04/16] Revert "util: jsoncompat: Stub out virJSONInitialize
+ when compiling without jansson"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 9e44c2db8ad94d3c20acc1d081538c280af198b4.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ src/util/virjsoncompat.c | 13 +------------
+ 1 file changed, 1 insertion(+), 12 deletions(-)
+
+diff --git a/src/util/virjsoncompat.c b/src/util/virjsoncompat.c
+index ffbeb5488c..6c853e9bb5 100644
+--- a/src/util/virjsoncompat.c
++++ b/src/util/virjsoncompat.c
+@@ -271,15 +271,4 @@ json_true_impl(void)
+     return json_true_ptr();
+ }
+ 
+-
+-#else /* !WITH_JANSSON */
+-
+-
+-int
+-virJSONInitialize(void)
+-{
+-    return 0;
+-}
+-
+-
+-#endif /* !WITH_JANSSON */
++#endif /* WITH_JANSSON */
+-- 
+2.18.0
+

Added: 0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch
===================================================================
--- 0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch	                        (rev 0)
+++ 0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,45 @@
+From a588ecc2817db93ec22e5e2a8c9fdcfb59839875 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:09 +0200
+Subject: [PATCH 05/16] Revert "tests: qemucapsprobe: Fix output after
+ switching to jansson"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 397447f80588438545994a86883792a5999cad15.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ tests/qemucapsprobemock.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/tests/qemucapsprobemock.c b/tests/qemucapsprobemock.c
+index 049b16273a..5936975505 100644
+--- a/tests/qemucapsprobemock.c
++++ b/tests/qemucapsprobemock.c
+@@ -76,7 +76,6 @@ qemuMonitorSend(qemuMonitorPtr mon,
+         printLineSkipEmpty("\n", stdout);
+ 
+     printLineSkipEmpty(reformatted, stdout);
+-    printLineSkipEmpty("\n", stdout);
+     VIR_FREE(reformatted);
+ 
+     return realQemuMonitorSend(mon, msg);
+@@ -117,7 +116,6 @@ qemuMonitorJSONIOProcessLine(qemuMonitorPtr mon,
+             printLineSkipEmpty("\n", stdout);
+ 
+         printLineSkipEmpty(json, stdout);
+-        printLineSkipEmpty("\n", stdout);
+     }
+ 
+  cleanup:
+-- 
+2.18.0
+

Added: 0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch
===================================================================
--- 0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch	                        (rev 0)
+++ 0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,514 @@
+From e4fbf4535267b5fbf62048c9f241a5bf52fbba1b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:16 +0200
+Subject: [PATCH 06/16] Revert "util: avoid symbol clash between json
+ libraries"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit ce3c6ef6843f98d81be5423ece11fad79eaab920.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ libvirt.spec.in          |   2 -
+ src/Makefile.am          |   8 +-
+ src/util/Makefile.inc.am |   3 +-
+ src/util/virjson.c       |   9 +-
+ src/util/virjsoncompat.c | 274 ---------------------------------------
+ src/util/virjsoncompat.h |  88 -------------
+ 6 files changed, 7 insertions(+), 377 deletions(-)
+ delete mode 100644 src/util/virjsoncompat.c
+ delete mode 100644 src/util/virjsoncompat.h
+
+diff --git a/libvirt.spec.in b/libvirt.spec.in
+index 19ae55cdaf..4113579e47 100644
+--- a/libvirt.spec.in
++++ b/libvirt.spec.in
+@@ -898,8 +898,6 @@ Requires: ncurses
+ Requires: gettext
+ # Needed by virt-pki-validate script.
+ Requires: gnutls-utils
+-# We dlopen(libjansson.so.4), so need an explicit dep
+-Requires: jansson
+ %if %{with_bash_completion}
+ Requires: %{name}-bash-completion = %{version}-%{release}
+ %endif
+diff --git a/src/Makefile.am b/src/Makefile.am
+index a4f213480e..83263e69e5 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -552,6 +552,7 @@ libvirt_admin_la_CFLAGS += \
+ 
+ libvirt_admin_la_LIBADD += \
+ 		$(CAPNG_LIBS) \
++		$(JANSSON_LIBS) \
+ 		$(DEVMAPPER_LIBS) \
+ 		$(LIBXML_LIBS) \
+ 		$(SSH2_LIBS) \
+@@ -689,7 +690,6 @@ libvirt_setuid_rpc_client_la_SOURCES = \
+ 		util/virhashcode.c \
+ 		util/virhostcpu.c \
+ 		util/virjson.c \
+-		util/virjsoncompat.c \
+ 		util/virlog.c \
+ 		util/virobject.c \
+ 		util/virpidfile.c \
+@@ -961,8 +961,6 @@ libvirt_nss_la_SOURCES = \
+ 		util/virhashcode.h \
+ 		util/virjson.c \
+ 		util/virjson.h \
+-		util/virjsoncompat.c \
+-		util/virjsoncompat.h \
+ 		util/virkmod.c \
+ 		util/virkmod.h \
+ 		util/virlease.c \
+@@ -1001,6 +999,10 @@ libvirt_nss_la_CFLAGS = \
+ libvirt_nss_la_LDFLAGS = \
+ 		$(AM_LDFLAGS) \
+ 		$(NULL)
++
++libvirt_nss_la_LIBADD = \
++		$(JANSSON_LIBS) \
++		$(NULL)
+ endif WITH_NSS
+ 
+ 
+diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am
+index 8ef9ee1dfa..71b2b93c2d 100644
+--- a/src/util/Makefile.inc.am
++++ b/src/util/Makefile.inc.am
+@@ -86,8 +86,6 @@ UTIL_SOURCES = \
+ 	util/viriscsi.h \
+ 	util/virjson.c \
+ 	util/virjson.h \
+-	util/virjsoncompat.c \
+-	util/virjsoncompat.h \
+ 	util/virkeycode.c \
+ 	util/virkeycode.h \
+ 	util/virkeyfile.c \
+@@ -266,6 +264,7 @@ libvirt_util_la_CFLAGS = \
+ 	$(NULL)
+ libvirt_util_la_LIBADD = \
+ 	$(CAPNG_LIBS) \
++	$(JANSSON_LIBS) \
+ 	$(LIBNL_LIBS) \
+ 	$(THREAD_LIBS) \
+ 	$(AUDIT_LIBS) \
+diff --git a/src/util/virjson.c b/src/util/virjson.c
+index 5bab662cd3..01a387b2f7 100644
+--- a/src/util/virjson.c
++++ b/src/util/virjson.c
+@@ -1437,8 +1437,7 @@ virJSONValueCopy(const virJSONValue *in)
+ 
+ 
+ #if WITH_JANSSON
+-
+-# include "virjsoncompat.h"
++# include <jansson.h>
+ 
+ static virJSONValuePtr
+ virJSONValueFromJansson(json_t *json)
+@@ -1525,9 +1524,6 @@ virJSONValueFromString(const char *jsonstring)
+     size_t flags = JSON_REJECT_DUPLICATES |
+                    JSON_DECODE_ANY;
+ 
+-    if (virJSONInitialize() < 0)
+-        return NULL;
+-
+     if (!(json = json_loads(jsonstring, flags, &error))) {
+         virReportError(VIR_ERR_INTERNAL_ERROR,
+                        _("failed to parse JSON %d:%d: %s"),
+@@ -1634,9 +1630,6 @@ virJSONValueToString(virJSONValuePtr object,
+     json_t *json;
+     char *str = NULL;
+ 
+-    if (virJSONInitialize() < 0)
+-        return NULL;
+-
+     if (pretty)
+         flags |= JSON_INDENT(2);
+     else
+diff --git a/src/util/virjsoncompat.c b/src/util/virjsoncompat.c
+deleted file mode 100644
+index 6c853e9bb5..0000000000
+--- a/src/util/virjsoncompat.c
++++ /dev/null
+@@ -1,274 +0,0 @@
+-/*
+- * virjsoncompat.c: JSON object parsing/formatting
+- *
+- * Copyright (C) 2018 Red Hat, Inc.
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library.  If not, see
+- * <http://www.gnu.org/licenses/>.
+- *
+- */
+-
+-#include <config.h>
+-
+-#include "virthread.h"
+-#include "virerror.h"
+-#define VIR_JSON_COMPAT_IMPL
+-#include "virjsoncompat.h"
+-
+-#define VIR_FROM_THIS VIR_FROM_NONE
+-
+-#if WITH_JANSSON
+-
+-# include <dlfcn.h>
+-
+-json_t *(*json_array_ptr)(void);
+-int (*json_array_append_new_ptr)(json_t *array, json_t *value);
+-json_t *(*json_array_get_ptr)(const json_t *array, size_t index);
+-size_t (*json_array_size_ptr)(const json_t *array);
+-void (*json_delete_ptr)(json_t *json);
+-char *(*json_dumps_ptr)(const json_t *json, size_t flags);
+-json_t *(*json_false_ptr)(void);
+-json_t *(*json_integer_ptr)(json_int_t value);
+-json_int_t (*json_integer_value_ptr)(const json_t *integer);
+-json_t *(*json_loads_ptr)(const char *input, size_t flags, json_error_t *error);
+-json_t *(*json_null_ptr)(void);
+-json_t *(*json_object_ptr)(void);
+-void *(*json_object_iter_ptr)(json_t *object);
+-const char *(*json_object_iter_key_ptr)(void *iter);
+-void *(*json_object_iter_next_ptr)(json_t *object, void *iter);
+-json_t *(*json_object_iter_value_ptr)(void *iter);
+-void *(*json_object_key_to_iter_ptr)(const char *key);
+-int (*json_object_set_new_ptr)(json_t *object, const char *key, json_t *value);
+-json_t *(*json_real_ptr)(double value);
+-double (*json_real_value_ptr)(const json_t *real);
+-json_t *(*json_string_ptr)(const char *value);
+-const char *(*json_string_value_ptr)(const json_t *string);
+-json_t *(*json_true_ptr)(void);
+-
+-
+-static int
+-virJSONJanssonOnceInit(void)
+-{
+-    void *handle = dlopen("libjansson.so.4", RTLD_LAZY|RTLD_LOCAL|RTLD_NODELETE);
+-    if (!handle) {
+-        virReportError(VIR_ERR_NO_SUPPORT,
+-                       _("libjansson.so.4 JSON library not available: %s"), dlerror());
+-        return -1;
+-    }
+-
+-# define LOAD(name) \
+-    do { \
+-        if (!(name ## _ptr = dlsym(handle, #name))) { \
+-            virReportError(VIR_ERR_NO_SUPPORT, \
+-                           _("missing symbol '%s' in libjansson.so.4: %s"), #name, dlerror()); \
+-            return -1; \
+-        } \
+-    } while (0)
+-
+-    LOAD(json_array);
+-    LOAD(json_array_append_new);
+-    LOAD(json_array_get);
+-    LOAD(json_array_size);
+-    LOAD(json_delete);
+-    LOAD(json_dumps);
+-    LOAD(json_false);
+-    LOAD(json_integer);
+-    LOAD(json_integer_value);
+-    LOAD(json_loads);
+-    LOAD(json_null);
+-    LOAD(json_object);
+-    LOAD(json_object_iter);
+-    LOAD(json_object_iter_key);
+-    LOAD(json_object_iter_next);
+-    LOAD(json_object_iter_value);
+-    LOAD(json_object_key_to_iter);
+-    LOAD(json_object_set_new);
+-    LOAD(json_real);
+-    LOAD(json_real_value);
+-    LOAD(json_string);
+-    LOAD(json_string_value);
+-    LOAD(json_true);
+-
+-    return 0;
+-}
+-
+-VIR_ONCE_GLOBAL_INIT(virJSONJansson);
+-
+-int
+-virJSONInitialize(void)
+-{
+-    return virJSONJanssonInitialize();
+-}
+-
+-json_t *
+-json_array_impl(void)
+-{
+-    return json_array_ptr();
+-}
+-
+-
+-int
+-json_array_append_new_impl(json_t *array, json_t *value)
+-{
+-    return json_array_append_new_ptr(array, value);
+-}
+-
+-
+-json_t *
+-json_array_get_impl(const json_t *array, size_t index)
+-{
+-    return json_array_get_ptr(array, index);
+-}
+-
+-
+-size_t
+-json_array_size_impl(const json_t *array)
+-{
+-    return json_array_size_ptr(array);
+-}
+-
+-
+-void
+-json_delete_impl(json_t *json)
+-{
+-    return json_delete_ptr(json);
+-}
+-
+-
+-char *
+-json_dumps_impl(const json_t *json, size_t flags)
+-{
+-    return json_dumps_ptr(json, flags);
+-}
+-
+-
+-json_t *
+-json_false_impl(void)
+-{
+-    return json_false_ptr();
+-}
+-
+-
+-json_t *
+-json_integer_impl(json_int_t value)
+-{
+-    return json_integer_ptr(value);
+-}
+-
+-
+-json_int_t
+-json_integer_value_impl(const json_t *integer)
+-{
+-    return json_integer_value_ptr(integer);
+-}
+-
+-
+-json_t *
+-json_loads_impl(const char *input, size_t flags, json_error_t *error)
+-{
+-    return json_loads_ptr(input, flags, error);
+-}
+-
+-
+-json_t *
+-json_null_impl(void)
+-{
+-    return json_null_ptr();
+-}
+-
+-
+-json_t *
+-json_object_impl(void)
+-{
+-    return json_object_ptr();
+-}
+-
+-
+-void *
+-json_object_iter_impl(json_t *object)
+-{
+-    return json_object_iter_ptr(object);
+-}
+-
+-
+-const char *
+-json_object_iter_key_impl(void *iter)
+-{
+-    return json_object_iter_key_ptr(iter);
+-}
+-
+-
+-void *
+-json_object_iter_next_impl(json_t *object, void *iter)
+-{
+-    return json_object_iter_next_ptr(object, iter);
+-}
+-
+-
+-json_t *
+-json_object_iter_value_impl(void *iter)
+-{
+-    return json_object_iter_value_ptr(iter);
+-}
+-
+-
+-void *
+-json_object_key_to_iter_impl(const char *key)
+-{
+-    return json_object_key_to_iter_ptr(key);
+-}
+-
+-
+-int
+-json_object_set_new_impl(json_t *object, const char *key, json_t *value)
+-{
+-    return json_object_set_new_ptr(object, key, value);
+-}
+-
+-
+-json_t *
+-json_real_impl(double value)
+-{
+-    return json_real_ptr(value);
+-}
+-
+-
+-double
+-json_real_value_impl(const json_t *real)
+-{
+-    return json_real_value_ptr(real);
+-}
+-
+-
+-json_t *
+-json_string_impl(const char *value)
+-{
+-    return json_string_ptr(value);
+-}
+-
+-
+-const char *
+-json_string_value_impl(const json_t *string)
+-{
+-    return json_string_value_ptr(string);
+-}
+-
+-
+-json_t *
+-json_true_impl(void)
+-{
+-    return json_true_ptr();
+-}
+-
+-#endif /* WITH_JANSSON */
+diff --git a/src/util/virjsoncompat.h b/src/util/virjsoncompat.h
+deleted file mode 100644
+index d9b7765a37..0000000000
+--- a/src/util/virjsoncompat.h
++++ /dev/null
+@@ -1,88 +0,0 @@
+-/*
+- * virjsoncompat.h: JSON object parsing/formatting
+- *
+- * Copyright (C) 2018 Red Hat, Inc.
+- *
+- * This library is free software; you can redistribute it and/or
+- * modify it under the terms of the GNU Lesser General Public
+- * License as published by the Free Software Foundation; either
+- * version 2.1 of the License, or (at your option) any later version.
+- *
+- * This library is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+- * Lesser General Public License for more details.
+- *
+- * You should have received a copy of the GNU Lesser General Public
+- * License along with this library.  If not, see
+- * <http://www.gnu.org/licenses/>.
+- *
+- */
+-
+-
+-#ifndef __VIR_JSON_COMPAT_H_
+-# define __VIR_JSON_COMPAT_H_
+-
+-# if WITH_JANSSON
+-#  ifndef VIR_JSON_COMPAT_IMPL
+-
+-#   define json_array json_array_impl
+-#   define json_array_append_new json_array_append_new_impl
+-#   define json_array_get json_array_get_impl
+-#   define json_array_size json_array_size_impl
+-#   define json_delete json_delete_impl
+-#   define json_dumps json_dumps_impl
+-#   define json_false json_false_impl
+-#   define json_integer json_integer_impl
+-#   define json_integer_value json_integer_value_impl
+-#   define json_loads json_loads_impl
+-#   define json_null json_null_impl
+-#   define json_object json_object_impl
+-#   define json_object_iter json_object_iter_impl
+-#   define json_object_iter_key json_object_iter_key_impl
+-#   define json_object_iter_next json_object_iter_next_impl
+-#   define json_object_iter_value json_object_iter_value_impl
+-#   define json_object_key_to_iter json_object_key_to_iter_impl
+-#   define json_object_set_new json_object_set_new_impl
+-#   define json_real json_real_impl
+-#   define json_real_value json_real_value_impl
+-#   define json_string json_string_impl
+-#   define json_string_value json_string_value_impl
+-#   define json_true json_true_impl
+-
+-#  endif /* ! VIR_JSON_COMPAT_IMPL */
+-
+-#  include <jansson.h>
+-
+-#  ifdef VIR_JSON_COMPAT_IMPL
+-
+-json_t *json_array_impl(void);
+-int json_array_append_new_impl(json_t *array, json_t *value);
+-json_t *json_array_get_impl(const json_t *array, size_t index);
+-size_t json_array_size_impl(const json_t *array);
+-void json_delete_impl(json_t *json);
+-char *json_dumps_impl(const json_t *json, size_t flags);
+-json_t *json_false_impl(void);
+-json_t *json_integer_impl(json_int_t value);
+-json_int_t json_integer_value_impl(const json_t *integer);
+-json_t *json_loads_impl(const char *input, size_t flags, json_error_t *error);
+-json_t *json_null_impl(void);
+-json_t *json_object_impl(void);
+-void *json_object_iter_impl(json_t *object);
+-const char *json_object_iter_key_impl(void *iter);
+-void *json_object_iter_next_impl(json_t *object, void *iter);
+-json_t *json_object_iter_value_impl(void *iter);
+-void *json_object_key_to_iter_impl(const char *key);
+-int json_object_set_new_impl(json_t *object, const char *key, json_t *value);
+-json_t *json_real_impl(double value);
+-double json_real_value_impl(const json_t *real);
+-json_t *json_string_impl(const char *value);
+-const char *json_string_value_impl(const json_t *string);
+-json_t *json_true_impl(void);
+-
+-#  endif /* VIR_JSON_COMPAT_IMPL */
+-# endif /* WITH_JANSSON */
+-
+-int virJSONInitialize(void);
+-
+-#endif /* __VIR_JSON_COMPAT_H_ */
+-- 
+2.18.0
+

Added: 0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch
===================================================================
--- 0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch	                        (rev 0)
+++ 0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,40 @@
+From bf66fef1df9fa1012849e01a888d359622816221 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:25 +0200
+Subject: [PATCH 07/16] Revert "tests: also skip qemuagenttest with old
+ jansson"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit c31146685f5c8558ff88d52d03a68533c9220feb.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ tests/qemuagenttest.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
+index b3d737d8a8..232b34f9cd 100644
+--- a/tests/qemuagenttest.c
++++ b/tests/qemuagenttest.c
+@@ -907,8 +907,8 @@ mymain(void)
+ {
+     int ret = 0;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
++#if !WITH_JANSSON
++    fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+ 
+-- 
+2.18.0
+

Added: 0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch
===================================================================
--- 0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch	                        (rev 0)
+++ 0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,191 @@
+From 89447ce3e5e96aa873bc35c6279899968ba9b97e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:33 +0200
+Subject: [PATCH 08/16] Revert "m4: Introduce STABLE_ORDERING_JANSSON"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 4dd60540007042bfc0087a67f57f3e9f3311a84a.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ m4/virt-jansson.m4           | 3 ---
+ tests/qemublocktest.c        | 5 -----
+ tests/qemucapabilitiestest.c | 5 -----
+ tests/qemucommandutiltest.c  | 5 -----
+ tests/qemuhotplugtest.c      | 5 -----
+ tests/qemumigparamstest.c    | 5 -----
+ tests/qemumonitorjsontest.c  | 5 -----
+ tests/virjsontest.c          | 5 -----
+ tests/virmacmaptest.c        | 5 -----
+ tests/virnetdaemontest.c     | 5 -----
+ 10 files changed, 48 deletions(-)
+
+diff --git a/m4/virt-jansson.m4 b/m4/virt-jansson.m4
+index ab4c020f62..206d6a5ced 100644
+--- a/m4/virt-jansson.m4
++++ b/m4/virt-jansson.m4
+@@ -22,9 +22,6 @@ AC_DEFUN([LIBVIRT_ARG_JANSSON],[
+ AC_DEFUN([LIBVIRT_CHECK_JANSSON],[
+   dnl Jansson http://www.digip.org/jansson/
+   LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5])
+-  dnl Older versions of Jansson did not preserve the order of object keys
+-  dnl use this check to guard the tests that are sensitive to this
+-  LIBVIRT_CHECK_PKG([STABLE_ORDERING_JANSSON], [jansson], [2.8], [true])
+ ])
+ 
+ AC_DEFUN([LIBVIRT_RESULT_JANSSON],[
+diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
+index d22b4b754e..9a387cf063 100644
+--- a/tests/qemublocktest.c
++++ b/tests/qemublocktest.c
+@@ -337,11 +337,6 @@ mymain(void)
+     char *capslatest_x86_64 = NULL;
+     virQEMUCapsPtr caps_x86_64 = NULL;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+     if (qemuTestDriverInit(&driver) < 0)
+         return EXIT_FAILURE;
+ 
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 28f903a88c..641ec4f597 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -141,11 +141,6 @@ mymain(void)
+     int ret = 0;
+     testQemuData data;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #if !WITH_JANSSON
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c
+index 9b13dde63f..8e57a1b79d 100644
+--- a/tests/qemucommandutiltest.c
++++ b/tests/qemucommandutiltest.c
+@@ -76,11 +76,6 @@ mymain(void)
+     int ret = 0;
+     testQemuCommandBuildObjectFromJSONData data1;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #if !WITH_JANSSON
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
+index 3c0eecb079..2fb96c6158 100644
+--- a/tests/qemuhotplugtest.c
++++ b/tests/qemuhotplugtest.c
+@@ -593,11 +593,6 @@ mymain(void)
+     struct qemuHotplugTestData data = {0};
+     struct testQemuHotplugCpuParams cpudata;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #if !WITH_JANSSON
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c
+index 5e12430991..b8af68211b 100644
+--- a/tests/qemumigparamstest.c
++++ b/tests/qemumigparamstest.c
+@@ -203,11 +203,6 @@ mymain(void)
+     virQEMUDriver driver;
+     int ret = 0;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #if !WITH_JANSSON
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
+index 1826c4f297..c11615f7ac 100644
+--- a/tests/qemumonitorjsontest.c
++++ b/tests/qemumonitorjsontest.c
+@@ -2863,11 +2863,6 @@ mymain(void)
+     virJSONValuePtr metaschema = NULL;
+     char *metaschemastr = NULL;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #if !WITH_JANSSON
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+diff --git a/tests/virjsontest.c b/tests/virjsontest.c
+index d352d370fd..d42413d11d 100644
+--- a/tests/virjsontest.c
++++ b/tests/virjsontest.c
+@@ -479,11 +479,6 @@ mymain(void)
+ {
+     int ret = 0;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #define DO_TEST_FULL(name, cmd, doc, expect, pass) \
+     do { \
+         struct testInfo info = { doc, expect, pass }; \
+diff --git a/tests/virmacmaptest.c b/tests/virmacmaptest.c
+index 420531dcdb..6e3e9984d1 100644
+--- a/tests/virmacmaptest.c
++++ b/tests/virmacmaptest.c
+@@ -157,11 +157,6 @@ mymain(void)
+     int ret = 0;
+     virMacMapPtr mgr = NULL;
+ 
+-#if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-#endif
+-
+ #define DO_TEST_BASIC(f, d, ...) \
+     do { \
+         const char * const m[] = {__VA_ARGS__, NULL }; \
+diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c
+index 277fb06385..cbc961dbaf 100644
+--- a/tests/virnetdaemontest.c
++++ b/tests/virnetdaemontest.c
+@@ -375,11 +375,6 @@ mymain(void)
+     int ret = 0;
+     const char *server_names[] = { "testServer0", "testServer1" };
+ 
+-# if !WITH_STABLE_ORDERING_JANSSON
+-    fputs("libvirt not compiled with recent enough Jansson, skipping this test\n", stderr);
+-    return EXIT_AM_SKIP;
+-# endif
+-
+     if (virInitialize() < 0 ||
+         virEventRegisterDefaultImpl() < 0) {
+         virDispatchError(NULL);
+-- 
+2.18.0
+

Added: 0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch
===================================================================
--- 0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch	                        (rev 0)
+++ 0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,39 @@
+From a1bd0be0213fdeb8e8f34912ca346add5583db36 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:39 +0200
+Subject: [PATCH 09/16] Revert "build: require Jansson if QEMU driver is
+ enabled"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 01ce04375c3348fd683475e5aa5231149ef6a78a.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ m4/virt-driver-qemu.m4 | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/m4/virt-driver-qemu.m4 b/m4/virt-driver-qemu.m4
+index 2d9992d0dc..ddb2834705 100644
+--- a/m4/virt-driver-qemu.m4
++++ b/m4/virt-driver-qemu.m4
+@@ -27,9 +27,6 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
+ 
+ AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [
+   AC_REQUIRE([LIBVIRT_CHECK_JANSSON])
+-  if test "$with_qemu:$with_jansson" = "yes:no"; then
+-    AC_MSG_ERROR([Jansson >= 2.5 is required to build QEMU driver])
+-  fi
+   if test "$with_qemu" = "check"; then
+     with_qemu=$with_jansson
+   fi
+-- 
+2.18.0
+

Added: 0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch
===================================================================
--- 0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch	                        (rev 0)
+++ 0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,49 @@
+From 724b5fc2fdd2377ad4df7deb1ed739711f4bcd9b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:48 +0200
+Subject: [PATCH 10/16] Revert "build: switch --with-qemu default from yes to
+ check"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit c5ae8e0c2b4b6bb3c667cfadaf65a66c3f4f3d85.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ m4/virt-driver-qemu.m4 | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/m4/virt-driver-qemu.m4 b/m4/virt-driver-qemu.m4
+index ddb2834705..80e1d3ad46 100644
+--- a/m4/virt-driver-qemu.m4
++++ b/m4/virt-driver-qemu.m4
+@@ -18,7 +18,7 @@ dnl <http://www.gnu.org/licenses/>.
+ dnl
+ 
+ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
+-  LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [check])
++  LIBVIRT_ARG_WITH_FEATURE([QEMU], [QEMU/KVM], [yes])
+   LIBVIRT_ARG_WITH([QEMU_USER], [username to run QEMU system instance as],
+                    ['platform dependent'])
+   LIBVIRT_ARG_WITH([QEMU_GROUP], [groupname to run QEMU system instance as],
+@@ -26,10 +26,6 @@ AC_DEFUN([LIBVIRT_DRIVER_ARG_QEMU], [
+ ])
+ 
+ AC_DEFUN([LIBVIRT_DRIVER_CHECK_QEMU], [
+-  AC_REQUIRE([LIBVIRT_CHECK_JANSSON])
+-  if test "$with_qemu" = "check"; then
+-    with_qemu=$with_jansson
+-  fi
+   if test "$with_qemu" = "yes" ; then
+     AC_DEFINE_UNQUOTED([WITH_QEMU], 1, [whether QEMU driver is enabled])
+   fi
+-- 
+2.18.0
+

Added: 0011-Revert-Remove-virJSONValueNewStringLen.patch
===================================================================
--- 0011-Revert-Remove-virJSONValueNewStringLen.patch	                        (rev 0)
+++ 0011-Revert-Remove-virJSONValueNewStringLen.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,83 @@
+From 53b6e8439a8d93244eb5c14a75a3e5e9ad420f52 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:39:56 +0200
+Subject: [PATCH 11/16] Revert "Remove virJSONValueNewStringLen"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 8f802c6d8659beb9eb3cab96ba2553e251728337.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ src/libvirt_private.syms |  1 +
+ src/util/virjson.c       | 22 ++++++++++++++++++++++
+ src/util/virjson.h       |  1 +
+ 3 files changed, 24 insertions(+)
+
+diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
+index fc386e1699..a5e88a9018 100644
+--- a/src/libvirt_private.syms
++++ b/src/libvirt_private.syms
+@@ -2098,6 +2098,7 @@ virJSONValueNewNumberUint;
+ virJSONValueNewNumberUlong;
+ virJSONValueNewObject;
+ virJSONValueNewString;
++virJSONValueNewStringLen;
+ virJSONValueObjectAdd;
+ virJSONValueObjectAddVArgs;
+ virJSONValueObjectAppend;
+diff --git a/src/util/virjson.c b/src/util/virjson.c
+index 01a387b2f7..80274bc6c5 100644
+--- a/src/util/virjson.c
++++ b/src/util/virjson.c
+@@ -420,6 +420,28 @@ virJSONValueNewString(const char *data)
+ }
+ 
+ 
++virJSONValuePtr
++virJSONValueNewStringLen(const char *data,
++                         size_t length)
++{
++    virJSONValuePtr val;
++
++    if (!data)
++        return virJSONValueNewNull();
++
++    if (VIR_ALLOC(val) < 0)
++        return NULL;
++
++    val->type = VIR_JSON_TYPE_STRING;
++    if (VIR_STRNDUP(val->data.string, data, length) < 0) {
++        VIR_FREE(val);
++        return NULL;
++    }
++
++    return val;
++}
++
++
+ static virJSONValuePtr
+ virJSONValueNewNumber(const char *data)
+ {
+diff --git a/src/util/virjson.h b/src/util/virjson.h
+index 0d5a7ef753..75f7f17b44 100644
+--- a/src/util/virjson.h
++++ b/src/util/virjson.h
+@@ -59,6 +59,7 @@ int virJSONValueObjectAddVArgs(virJSONValuePtr obj, va_list args)
+ 
+ 
+ virJSONValuePtr virJSONValueNewString(const char *data);
++virJSONValuePtr virJSONValueNewStringLen(const char *data, size_t length);
+ virJSONValuePtr virJSONValueNewNumberInt(int data);
+ virJSONValuePtr virJSONValueNewNumberUint(unsigned int data);
+ virJSONValuePtr virJSONValueNewNumberLong(long long data);
+-- 
+2.18.0
+

Added: 0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch
===================================================================
--- 0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch	                        (rev 0)
+++ 0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,38 @@
+From 6c3eae3158686bd184dc87e0febbe70a12602614 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:40:02 +0200
+Subject: [PATCH 12/16] Revert "build: remove references to WITH_YAJL for
+ SETUID_RPC_CLIENT"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 1caf8441604b58e4a89aa2c09975b8346928c52a.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ config-post.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/config-post.h b/config-post.h
+index 05672121f0..24117bbbd4 100644
+--- a/config-post.h
++++ b/config-post.h
+@@ -44,6 +44,8 @@
+ # undef WITH_SSH2
+ # undef WITH_SYSTEMD_DAEMON
+ # undef WITH_VIRTUALPORT
++# undef WITH_YAJL
++# undef WITH_YAJL2
+ #endif
+ 
+ /*
+-- 
+2.18.0
+

Added: 0013-Revert-Remove-functions-using-yajl.patch
===================================================================
--- 0013-Revert-Remove-functions-using-yajl.patch	                        (rev 0)
+++ 0013-Revert-Remove-functions-using-yajl.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,578 @@
+From 37b2c6cd84d9c73b5b0fba789f1b808cde100b56 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:40:11 +0200
+Subject: [PATCH 13/16] Revert "Remove functions using yajl"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit bf114decb34f21cd225ead6dc4d929d35a8c5fe5.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ src/util/virjson.c | 529 ++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 528 insertions(+), 1 deletion(-)
+
+diff --git a/src/util/virjson.c b/src/util/virjson.c
+index 80274bc6c5..608ba85d67 100644
+--- a/src/util/virjson.c
++++ b/src/util/virjson.c
+@@ -29,6 +29,22 @@
+ #include "virstring.h"
+ #include "virutil.h"
+ 
++#if WITH_YAJL
++# include <yajl/yajl_gen.h>
++# include <yajl/yajl_parse.h>
++
++# ifdef WITH_YAJL2
++#  define yajl_size_t size_t
++#  define VIR_YAJL_STATUS_OK(status) ((status) == yajl_status_ok)
++# else
++#  define yajl_size_t unsigned int
++#  define yajl_complete_parse yajl_parse_complete
++#  define VIR_YAJL_STATUS_OK(status) \
++    ((status) == yajl_status_ok || (status) == yajl_status_insufficient_data)
++# endif
++
++#endif
++
+ /* XXX fixme */
+ #define VIR_FROM_THIS VIR_FROM_NONE
+ 
+@@ -72,6 +88,23 @@ struct _virJSONValue {
+ };
+ 
+ 
++typedef struct _virJSONParserState virJSONParserState;
++typedef virJSONParserState *virJSONParserStatePtr;
++struct _virJSONParserState {
++    virJSONValuePtr value;
++    char *key;
++};
++
++typedef struct _virJSONParser virJSONParser;
++typedef virJSONParser *virJSONParserPtr;
++struct _virJSONParser {
++    virJSONValuePtr head;
++    virJSONParserStatePtr state;
++    size_t nstate;
++    int wrap;
++};
++
++
+ virJSONType
+ virJSONValueGetType(const virJSONValue *value)
+ {
+@@ -1458,7 +1491,501 @@ virJSONValueCopy(const virJSONValue *in)
+ }
+ 
+ 
+-#if WITH_JANSSON
++#if WITH_YAJL
++static int
++virJSONParserInsertValue(virJSONParserPtr parser,
++                         virJSONValuePtr value)
++{
++    if (!parser->head) {
++        parser->head = value;
++    } else {
++        virJSONParserStatePtr state;
++        if (!parser->nstate) {
++            VIR_DEBUG("got a value to insert without a container");
++            return -1;
++        }
++
++        state = &parser->state[parser->nstate-1];
++
++        switch (state->value->type) {
++        case VIR_JSON_TYPE_OBJECT: {
++            if (!state->key) {
++                VIR_DEBUG("missing key when inserting object value");
++                return -1;
++            }
++
++            if (virJSONValueObjectAppend(state->value,
++                                         state->key,
++                                         value) < 0)
++                return -1;
++
++            VIR_FREE(state->key);
++        }   break;
++
++        case VIR_JSON_TYPE_ARRAY: {
++            if (state->key) {
++                VIR_DEBUG("unexpected key when inserting array value");
++                return -1;
++            }
++
++            if (virJSONValueArrayAppend(state->value,
++                                        value) < 0)
++                return -1;
++        }   break;
++
++        default:
++            VIR_DEBUG("unexpected value type, not a container");
++            return -1;
++        }
++    }
++
++    return 0;
++}
++
++
++static int
++virJSONParserHandleNull(void *ctx)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONValuePtr value = virJSONValueNewNull();
++
++    VIR_DEBUG("parser=%p", parser);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleBoolean(void *ctx,
++                           int boolean_)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONValuePtr value = virJSONValueNewBoolean(boolean_);
++
++    VIR_DEBUG("parser=%p boolean=%d", parser, boolean_);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleNumber(void *ctx,
++                          const char *s,
++                          yajl_size_t l)
++{
++    virJSONParserPtr parser = ctx;
++    char *str;
++    virJSONValuePtr value;
++
++    if (VIR_STRNDUP(str, s, l) < 0)
++        return -1;
++    value = virJSONValueNewNumber(str);
++    VIR_FREE(str);
++
++    VIR_DEBUG("parser=%p str=%s", parser, str);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleString(void *ctx,
++                          const unsigned char *stringVal,
++                          yajl_size_t stringLen)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONValuePtr value = virJSONValueNewStringLen((const char *)stringVal,
++                                                     stringLen);
++
++    VIR_DEBUG("parser=%p str=%p", parser, (const char *)stringVal);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleMapKey(void *ctx,
++                          const unsigned char *stringVal,
++                          yajl_size_t stringLen)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONParserStatePtr state;
++
++    VIR_DEBUG("parser=%p key=%p", parser, (const char *)stringVal);
++
++    if (!parser->nstate)
++        return 0;
++
++    state = &parser->state[parser->nstate-1];
++    if (state->key)
++        return 0;
++    if (VIR_STRNDUP(state->key, (const char *)stringVal, stringLen) < 0)
++        return 0;
++    return 1;
++}
++
++
++static int
++virJSONParserHandleStartMap(void *ctx)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONValuePtr value = virJSONValueNewObject();
++
++    VIR_DEBUG("parser=%p", parser);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    if (VIR_REALLOC_N(parser->state,
++                      parser->nstate + 1) < 0) {
++        return 0;
++    }
++
++    parser->state[parser->nstate].value = value;
++    parser->state[parser->nstate].key = NULL;
++    parser->nstate++;
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleEndMap(void *ctx)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONParserStatePtr state;
++
++    VIR_DEBUG("parser=%p", parser);
++
++    if (!parser->nstate)
++        return 0;
++
++    state = &(parser->state[parser->nstate-1]);
++    if (state->key) {
++        VIR_FREE(state->key);
++        return 0;
++    }
++
++    VIR_DELETE_ELEMENT(parser->state, parser->nstate - 1, parser->nstate);
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleStartArray(void *ctx)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONValuePtr value = virJSONValueNewArray();
++
++    VIR_DEBUG("parser=%p", parser);
++
++    if (!value)
++        return 0;
++
++    if (virJSONParserInsertValue(parser, value) < 0) {
++        virJSONValueFree(value);
++        return 0;
++    }
++
++    if (VIR_REALLOC_N(parser->state,
++                      parser->nstate + 1) < 0)
++        return 0;
++
++    parser->state[parser->nstate].value = value;
++    parser->state[parser->nstate].key = NULL;
++    parser->nstate++;
++
++    return 1;
++}
++
++
++static int
++virJSONParserHandleEndArray(void *ctx)
++{
++    virJSONParserPtr parser = ctx;
++    virJSONParserStatePtr state;
++
++    VIR_DEBUG("parser=%p", parser);
++
++    if (!(parser->nstate - parser->wrap))
++        return 0;
++
++    state = &(parser->state[parser->nstate-1]);
++    if (state->key) {
++        VIR_FREE(state->key);
++        return 0;
++    }
++
++    VIR_DELETE_ELEMENT(parser->state, parser->nstate - 1, parser->nstate);
++
++    return 1;
++}
++
++
++static const yajl_callbacks parserCallbacks = {
++    virJSONParserHandleNull,
++    virJSONParserHandleBoolean,
++    NULL,
++    NULL,
++    virJSONParserHandleNumber,
++    virJSONParserHandleString,
++    virJSONParserHandleStartMap,
++    virJSONParserHandleMapKey,
++    virJSONParserHandleEndMap,
++    virJSONParserHandleStartArray,
++    virJSONParserHandleEndArray
++};
++
++
++/* XXX add an incremental streaming parser - yajl trivially supports it */
++virJSONValuePtr
++virJSONValueFromString(const char *jsonstring)
++{
++    yajl_handle hand;
++    virJSONParser parser = { NULL, NULL, 0, 0 };
++    virJSONValuePtr ret = NULL;
++    int rc;
++    size_t len = strlen(jsonstring);
++# ifndef WITH_YAJL2
++    yajl_parser_config cfg = { 0, 1 }; /* Match yajl 2 default behavior */
++    VIR_AUTOPTR(virJSONValue) tmp = NULL;
++# endif
++
++    VIR_DEBUG("string=%s", jsonstring);
++
++# ifdef WITH_YAJL2
++    hand = yajl_alloc(&parserCallbacks, NULL, &parser);
++# else
++    hand = yajl_alloc(&parserCallbacks, &cfg, NULL, &parser);
++# endif
++    if (!hand) {
++        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                       _("Unable to create JSON parser"));
++        goto cleanup;
++    }
++
++    /* Yajl 2 is nice enough to default to rejecting trailing garbage.
++     * Yajl 1.0.12 has yajl_get_bytes_consumed to make that detection
++     * simpler.  But we're stuck with yajl 1.0.7 on RHEL 6, which
++     * happily quits parsing at the end of a valid JSON construct,
++     * with no visibility into how much more input remains.  Wrapping
++     * things in an array forces yajl to confess the truth.  */
++# ifdef WITH_YAJL2
++    rc = yajl_parse(hand, (const unsigned char *)jsonstring, len);
++# else
++    rc = yajl_parse(hand, (const unsigned char *)"[", 1);
++    parser.wrap = 1;
++    if (VIR_YAJL_STATUS_OK(rc))
++        rc = yajl_parse(hand, (const unsigned char *)jsonstring, len);
++    parser.wrap = 0;
++    if (VIR_YAJL_STATUS_OK(rc))
++        rc = yajl_parse(hand, (const unsigned char *)"]", 1);
++# endif
++    if (!VIR_YAJL_STATUS_OK(rc) ||
++        yajl_complete_parse(hand) != yajl_status_ok) {
++        unsigned char *errstr = yajl_get_error(hand, 1,
++                                               (const unsigned char*)jsonstring,
++                                               strlen(jsonstring));
++
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("cannot parse json %s: %s"),
++                       jsonstring, (const char*) errstr);
++        yajl_free_error(hand, errstr);
++        virJSONValueFree(parser.head);
++        goto cleanup;
++    }
++
++    if (parser.nstate != 0) {
++        virReportError(VIR_ERR_INTERNAL_ERROR,
++                       _("cannot parse json %s: unterminated string/map/array"),
++                       jsonstring);
++        virJSONValueFree(parser.head);
++    } else {
++        ret = parser.head;
++# ifndef WITH_YAJL2
++        /* Undo the array wrapping above */
++        tmp = ret;
++        ret = NULL;
++        if (virJSONValueArraySize(tmp) > 1)
++            virReportError(VIR_ERR_INTERNAL_ERROR,
++                           _("cannot parse json %s: too many items present"),
++                           jsonstring);
++        else
++            ret = virJSONValueArraySteal(tmp, 0);
++# endif
++    }
++
++ cleanup:
++    yajl_free(hand);
++
++    if (parser.nstate) {
++        size_t i;
++        for (i = 0; i < parser.nstate; i++)
++            VIR_FREE(parser.state[i].key);
++        VIR_FREE(parser.state);
++    }
++
++    VIR_DEBUG("result=%p", ret);
++
++    return ret;
++}
++
++
++static int
++virJSONValueToStringOne(virJSONValuePtr object,
++                        yajl_gen g)
++{
++    size_t i;
++
++    VIR_DEBUG("object=%p type=%d gen=%p", object, object->type, g);
++
++    switch (object->type) {
++    case VIR_JSON_TYPE_OBJECT:
++        if (yajl_gen_map_open(g) != yajl_gen_status_ok)
++            return -1;
++        for (i = 0; i < object->data.object.npairs; i++) {
++            if (yajl_gen_string(g,
++                                (unsigned char *)object->data.object.pairs[i].key,
++                                strlen(object->data.object.pairs[i].key))
++                                != yajl_gen_status_ok)
++                return -1;
++            if (virJSONValueToStringOne(object->data.object.pairs[i].value, g) < 0)
++                return -1;
++        }
++        if (yajl_gen_map_close(g) != yajl_gen_status_ok)
++            return -1;
++        break;
++    case VIR_JSON_TYPE_ARRAY:
++        if (yajl_gen_array_open(g) != yajl_gen_status_ok)
++            return -1;
++        for (i = 0; i < object->data.array.nvalues; i++) {
++            if (virJSONValueToStringOne(object->data.array.values[i], g) < 0)
++                return -1;
++        }
++        if (yajl_gen_array_close(g) != yajl_gen_status_ok)
++            return -1;
++        break;
++
++    case VIR_JSON_TYPE_STRING:
++        if (yajl_gen_string(g, (unsigned char *)object->data.string,
++                            strlen(object->data.string)) != yajl_gen_status_ok)
++            return -1;
++        break;
++
++    case VIR_JSON_TYPE_NUMBER:
++        if (yajl_gen_number(g, object->data.number,
++                            strlen(object->data.number)) != yajl_gen_status_ok)
++            return -1;
++        break;
++
++    case VIR_JSON_TYPE_BOOLEAN:
++        if (yajl_gen_bool(g, object->data.boolean) != yajl_gen_status_ok)
++            return -1;
++        break;
++
++    case VIR_JSON_TYPE_NULL:
++        if (yajl_gen_null(g) != yajl_gen_status_ok)
++            return -1;
++        break;
++
++    default:
++        return -1;
++    }
++
++    return 0;
++}
++
++
++char *
++virJSONValueToString(virJSONValuePtr object,
++                     bool pretty)
++{
++    yajl_gen g;
++    const unsigned char *str;
++    char *ret = NULL;
++    yajl_size_t len;
++# ifndef WITH_YAJL2
++    yajl_gen_config conf = { pretty ? 1 : 0, pretty ? "  " : " "};
++# endif
++
++    VIR_DEBUG("object=%p", object);
++
++# ifdef WITH_YAJL2
++    g = yajl_gen_alloc(NULL);
++    if (g) {
++        yajl_gen_config(g, yajl_gen_beautify, pretty ? 1 : 0);
++        yajl_gen_config(g, yajl_gen_indent_string, pretty ? "  " : " ");
++        yajl_gen_config(g, yajl_gen_validate_utf8, 1);
++    }
++# else
++    g = yajl_gen_alloc(&conf, NULL);
++# endif
++    if (!g) {
++        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
++                       _("Unable to create JSON formatter"));
++        goto cleanup;
++    }
++
++    if (virJSONValueToStringOne(object, g) < 0) {
++        virReportOOMError();
++        goto cleanup;
++    }
++
++    if (yajl_gen_get_buf(g, &str, &len) != yajl_gen_status_ok) {
++        virReportOOMError();
++        goto cleanup;
++    }
++
++    ignore_value(VIR_STRDUP(ret, (const char *)str));
++
++ cleanup:
++    yajl_gen_free(g);
++
++    VIR_DEBUG("result=%s", NULLSTR(ret));
++
++    return ret;
++}
++
++
++#elif WITH_JANSSON
+ # include <jansson.h>
+ 
+ static virJSONValuePtr
+-- 
+2.18.0
+

Added: 0014-Revert-Switch-from-yajl-to-Jansson.patch
===================================================================
--- 0014-Revert-Switch-from-yajl-to-Jansson.patch	                        (rev 0)
+++ 0014-Revert-Switch-from-yajl-to-Jansson.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,743 @@
+From 395cb24a696f1dc53c6501175636372330afa35e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:40:18 +0200
+Subject: [PATCH 14/16] Revert "Switch from yajl to Jansson"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 9cf38263d05ca7f27dbbd9b1a0b48d338d9280e2.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ libvirt.spec.in                          |   4 +-
+ m4/virt-nss.m4                           |   4 +-
+ m4/virt-yajl.m4                          |  27 ++-
+ src/Makefile.am                          |   8 +-
+ src/qemu/qemu_driver.c                   |   2 +-
+ src/util/Makefile.inc.am                 |   4 +-
+ src/util/virjson.c                       | 211 -----------------------
+ tests/Makefile.am                        |  12 +-
+ tests/cputest.c                          |  16 +-
+ tests/libxlxml2domconfigtest.c           |   4 +-
+ tests/qemuagenttest.c                    |   2 +-
+ tests/qemublocktest.c                    |   1 -
+ tests/qemucapabilitiestest.c             |   2 +-
+ tests/qemucaps2xmltest.c                 |   2 +-
+ tests/qemucommandutiltest.c              |   2 +-
+ tests/qemuhotplugtest.c                  |   2 +-
+ tests/qemumigparamsdata/empty.json       |   4 +-
+ tests/qemumigparamsdata/unsupported.json |   4 +-
+ tests/qemumigparamstest.c                |   2 +-
+ tests/qemumonitorjsontest.c              |   2 +-
+ tests/virmacmaptestdata/empty.json       |   4 +-
+ tests/virmocklibxl.c                     |   4 +-
+ tests/virnetdaemontest.c                 |   2 +-
+ tests/virstoragetest.c                   |   4 +-
+ 24 files changed, 72 insertions(+), 257 deletions(-)
+
+diff --git a/libvirt.spec.in b/libvirt.spec.in
+index 4113579e47..ab8e97a489 100644
+--- a/libvirt.spec.in
++++ b/libvirt.spec.in
+@@ -292,7 +292,7 @@ BuildRequires: libblkid-devel >= 2.17
+ BuildRequires: augeas
+ BuildRequires: systemd-devel >= 185
+ BuildRequires: libpciaccess-devel >= 0.10.9
+-BuildRequires: jansson-devel
++BuildRequires: yajl-devel
+ %if %{with_sanlock}
+ BuildRequires: sanlock-devel >= 2.4
+ %endif
+@@ -1226,7 +1226,7 @@ rm -f po/stamp-po
+            --without-apparmor \
+            --without-hal \
+            --with-udev \
+-           --with-jansson \
++           --with-yajl \
+            %{?arg_sanlock} \
+            --with-libpcap \
+            --with-macvtap \
+diff --git a/m4/virt-nss.m4 b/m4/virt-nss.m4
+index 082b7b14f6..951a74e835 100644
+--- a/m4/virt-nss.m4
++++ b/m4/virt-nss.m4
+@@ -27,9 +27,9 @@ AC_DEFUN([LIBVIRT_CHECK_NSS],[
+   bsd_nss=no
+   fail=0
+   if test "x$with_nss_plugin" != "xno" ; then
+-    if test "x$with_jansson" != "xyes" ; then
++    if test "x$with_yajl" != "xyes" ; then
+       if test "x$with_nss_plugin" = "xyes" ; then
+-        AC_MSG_ERROR([Can't build nss plugin without JSON support])
++        AC_MSG_ERROR([Can't build nss plugin without yajl])
+       else
+         with_nss_plugin=no
+       fi
+diff --git a/m4/virt-yajl.m4 b/m4/virt-yajl.m4
+index 8d4c43a6b2..c4ea0102a3 100644
+--- a/m4/virt-yajl.m4
++++ b/m4/virt-yajl.m4
+@@ -23,10 +23,31 @@ AC_DEFUN([LIBVIRT_ARG_YAJL],[
+ 
+ AC_DEFUN([LIBVIRT_CHECK_YAJL],[
+   dnl YAJL JSON library http://lloyd.github.com/yajl/
+-  if test "$with_yajl" = yes; then
+-    AC_MSG_ERROR([Compilation with YAJL is no longer supported])
++  if test "$with_qemu:$with_yajl" = yes:check; then
++    dnl Some versions of qemu require the use of yajl; try to detect them
++    dnl here, although we do not require qemu to exist in order to compile.
++    dnl This check mirrors src/qemu/qemu_capabilities.c
++    AC_PATH_PROGS([QEMU], [qemu-kvm qemu kvm qemu-system-x86_64],
++                  [], [$PATH:/usr/bin:/usr/libexec])
++    if test -x "$QEMU"; then
++      if $QEMU -help 2>/dev/null | grep -q libvirt; then
++        with_yajl=yes
++      else
++        [qemu_version_sed='s/.*ersion \([0-9.,]*\).*/\1/']
++        qemu_version=`$QEMU -version | sed "$qemu_version_sed"`
++        case $qemu_version in
++          [[1-9]].* | 0.15.* ) with_yajl=yes ;;
++          0.* | '' ) ;;
++          *) AC_MSG_ERROR([Unexpected qemu version string]) ;;
++        esac
++      fi
++    fi
+   fi
+-  with_yajl=no
++
++  LIBVIRT_CHECK_LIB_ALT([YAJL], [yajl],
++                        [yajl_parse_complete], [yajl/yajl_common.h],
++                        [YAJL2], [yajl],
++                        [yajl_tree_parse], [yajl/yajl_common.h])
+ ])
+ 
+ AC_DEFUN([LIBVIRT_RESULT_YAJL],[
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 83263e69e5..db8c8ebd1a 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -544,7 +544,7 @@ libvirt_admin_la_CFLAGS = \
+ libvirt_admin_la_CFLAGS += \
+ 		$(XDR_CFLAGS) \
+ 		$(CAPNG_CFLAGS) \
+-		$(JANSSON_CFLAGS) \
++		$(YAJL_CFLAGS) \
+ 		$(SSH2_CFLAGS) \
+ 		$(SASL_CFLAGS) \
+ 		$(GNUTLS_CFLAGS) \
+@@ -552,7 +552,7 @@ libvirt_admin_la_CFLAGS += \
+ 
+ libvirt_admin_la_LIBADD += \
+ 		$(CAPNG_LIBS) \
+-		$(JANSSON_LIBS) \
++		$(YAJL_LIBS) \
+ 		$(DEVMAPPER_LIBS) \
+ 		$(LIBXML_LIBS) \
+ 		$(SSH2_LIBS) \
+@@ -994,14 +994,14 @@ libvirt_nss_la_SOURCES = \
+ libvirt_nss_la_CFLAGS = \
+ 		-DLIBVIRT_NSS \
+ 		$(AM_CFLAGS) \
+-		$(JANSSON_CFLAGS) \
++		$(YAJL_CFLAGS) \
+ 		$(NULL)
+ libvirt_nss_la_LDFLAGS = \
+ 		$(AM_LDFLAGS) \
+ 		$(NULL)
+ 
+ libvirt_nss_la_LIBADD = \
+-		$(JANSSON_LIBS) \
++		$(YAJL_LIBS) \
+ 		$(NULL)
+ endif WITH_NSS
+ 
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index fb0d4a8c7a..d4a2379e48 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -2092,7 +2092,7 @@ qemuDomainReboot(virDomainPtr dom, unsigned int flags)
+      */
+     if ((!useAgent) ||
+         (ret < 0 && (acpiRequested || !flags))) {
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+         virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                        _("ACPI reboot is not supported without the JSON monitor"));
+         goto endjob;
+diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am
+index 71b2b93c2d..a22265606c 100644
+--- a/src/util/Makefile.inc.am
++++ b/src/util/Makefile.inc.am
+@@ -251,7 +251,7 @@ libvirt_util_la_SOURCES = \
+ 	$(NULL)
+ libvirt_util_la_CFLAGS = \
+ 	$(CAPNG_CFLAGS) \
+-	$(JANSSON_CFLAGS) \
++	$(YAJL_CFLAGS) \
+ 	$(LIBNL_CFLAGS) \
+ 	$(AM_CFLAGS) \
+ 	$(AUDIT_CFLAGS) \
+@@ -264,7 +264,7 @@ libvirt_util_la_CFLAGS = \
+ 	$(NULL)
+ libvirt_util_la_LIBADD = \
+ 	$(CAPNG_LIBS) \
+-	$(JANSSON_LIBS) \
++	$(YAJL_LIBS) \
+ 	$(LIBNL_LIBS) \
+ 	$(THREAD_LIBS) \
+ 	$(AUDIT_LIBS) \
+diff --git a/src/util/virjson.c b/src/util/virjson.c
+index 608ba85d67..29530dcb15 100644
+--- a/src/util/virjson.c
++++ b/src/util/virjson.c
+@@ -1985,217 +1985,6 @@ virJSONValueToString(virJSONValuePtr object,
+ }
+ 
+ 
+-#elif WITH_JANSSON
+-# include <jansson.h>
+-
+-static virJSONValuePtr
+-virJSONValueFromJansson(json_t *json)
+-{
+-    virJSONValuePtr ret = NULL;
+-    const char *key;
+-    json_t *cur;
+-    size_t i;
+-
+-    switch (json_typeof(json)) {
+-    case JSON_OBJECT:
+-        ret = virJSONValueNewObject();
+-        if (!ret)
+-            goto error;
+-
+-        json_object_foreach(json, key, cur) {
+-            virJSONValuePtr val = virJSONValueFromJansson(cur);
+-            if (!val)
+-                goto error;
+-
+-            if (virJSONValueObjectAppend(ret, key, val) < 0) {
+-                virJSONValueFree(val);
+-                goto error;
+-            }
+-        }
+-
+-        break;
+-
+-    case JSON_ARRAY:
+-        ret = virJSONValueNewArray();
+-        if (!ret)
+-            goto error;
+-
+-        json_array_foreach(json, i, cur) {
+-            virJSONValuePtr val = virJSONValueFromJansson(cur);
+-            if (!val)
+-                goto error;
+-
+-            if (virJSONValueArrayAppend(ret, val) < 0) {
+-                virJSONValueFree(val);
+-                goto error;
+-            }
+-        }
+-        break;
+-
+-    case JSON_STRING:
+-        ret = virJSONValueNewString(json_string_value(json));
+-        break;
+-
+-    case JSON_INTEGER:
+-        ret = virJSONValueNewNumberLong(json_integer_value(json));
+-        break;
+-
+-    case JSON_REAL:
+-        ret = virJSONValueNewNumberDouble(json_real_value(json));
+-        break;
+-
+-    case JSON_TRUE:
+-        ret = virJSONValueNewBoolean(true);
+-        break;
+-
+-    case JSON_FALSE:
+-        ret = virJSONValueNewBoolean(false);
+-        break;
+-
+-    case JSON_NULL:
+-        ret = virJSONValueNewNull();
+-        break;
+-    }
+-
+-    return ret;
+-
+- error:
+-    virJSONValueFree(ret);
+-    return NULL;
+-}
+-
+-virJSONValuePtr
+-virJSONValueFromString(const char *jsonstring)
+-{
+-    virJSONValuePtr ret = NULL;
+-    json_t *json;
+-    json_error_t error;
+-    size_t flags = JSON_REJECT_DUPLICATES |
+-                   JSON_DECODE_ANY;
+-
+-    if (!(json = json_loads(jsonstring, flags, &error))) {
+-        virReportError(VIR_ERR_INTERNAL_ERROR,
+-                       _("failed to parse JSON %d:%d: %s"),
+-                       error.line, error.column, error.text);
+-        return NULL;
+-    }
+-
+-    ret = virJSONValueFromJansson(json);
+-    json_decref(json);
+-    return ret;
+-}
+-
+-
+-static json_t *
+-virJSONValueToJansson(virJSONValuePtr object)
+-{
+-    json_t *ret = NULL;
+-    size_t i;
+-
+-    switch ((virJSONType)object->type) {
+-    case VIR_JSON_TYPE_OBJECT:
+-        ret = json_object();
+-        if (!ret)
+-            goto no_memory;
+-        for (i = 0; i < object->data.object.npairs; i++) {
+-            virJSONObjectPairPtr cur = object->data.object.pairs + i;
+-            json_t *val = virJSONValueToJansson(cur->value);
+-
+-            if (!val)
+-                goto error;
+-            if (json_object_set_new(ret, cur->key, val) < 0) {
+-                json_decref(val);
+-                goto no_memory;
+-            }
+-        }
+-        break;
+-
+-    case VIR_JSON_TYPE_ARRAY:
+-        ret = json_array();
+-        if (!ret)
+-            goto no_memory;
+-        for (i = 0; i < object->data.array.nvalues; i++) {
+-            virJSONValuePtr cur = object->data.array.values[i];
+-            json_t *val = virJSONValueToJansson(cur);
+-
+-            if (!val)
+-                goto error;
+-            if (json_array_append_new(ret, val) < 0) {
+-                json_decref(val);
+-                goto no_memory;
+-            }
+-        }
+-        break;
+-
+-    case VIR_JSON_TYPE_STRING:
+-        ret = json_string(object->data.string);
+-        break;
+-
+-    case VIR_JSON_TYPE_NUMBER: {
+-        long long ll_val;
+-        double d_val;
+-        if (virStrToLong_ll(object->data.number, NULL, 10, &ll_val) < 0) {
+-            if (virStrToDouble(object->data.number, NULL, &d_val) < 0) {
+-                virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+-                               _("JSON value is not a number"));
+-                return NULL;
+-            }
+-            ret = json_real(d_val);
+-        } else {
+-            ret = json_integer(ll_val);
+-        }
+-    }
+-        break;
+-
+-    case VIR_JSON_TYPE_BOOLEAN:
+-        ret = json_boolean(object->data.boolean);
+-        break;
+-
+-    case VIR_JSON_TYPE_NULL:
+-        ret = json_null();
+-        break;
+-
+-    default:
+-        virReportEnumRangeError(virJSONType, object->type);
+-        goto error;
+-    }
+-    if (!ret)
+-        goto no_memory;
+-    return ret;
+-
+- no_memory:
+-    virReportOOMError();
+- error:
+-    json_decref(ret);
+-    return NULL;
+-}
+-
+-
+-char *
+-virJSONValueToString(virJSONValuePtr object,
+-                     bool pretty)
+-{
+-    size_t flags = JSON_ENCODE_ANY;
+-    json_t *json;
+-    char *str = NULL;
+-
+-    if (pretty)
+-        flags |= JSON_INDENT(2);
+-    else
+-        flags |= JSON_COMPACT;
+-
+-    json = virJSONValueToJansson(object);
+-    if (!json)
+-        return NULL;
+-
+-    str = json_dumps(json, flags);
+-    if (!str)
+-        virReportOOMError();
+-    json_decref(json);
+-    return str;
+-}
+-
+-
+ #else
+ virJSONValuePtr
+ virJSONValueFromString(const char *jsonstring ATTRIBUTE_UNUSED)
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 302b50e1cd..21a6c823d9 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -46,7 +46,7 @@ AM_CFLAGS = \
+ 	$(SASL_CFLAGS) \
+ 	$(SELINUX_CFLAGS) \
+ 	$(APPARMOR_CFLAGS) \
+-	$(JANSSON_CFLAGS) \
++	$(YAJL_CFLAGS) \
+ 	$(COVERAGE_CFLAGS) \
+ 	$(XDR_CFLAGS) \
+ 	$(WARN_CFLAGS)
+@@ -331,9 +331,9 @@ if WITH_CIL
+ test_programs += objectlocking
+ endif WITH_CIL
+ 
+-if WITH_JANSSON
++if WITH_YAJL
+ test_programs += virjsontest
+-endif WITH_JANSSON
++endif WITH_YAJL
+ 
+ test_programs += \
+ 		networkxml2xmltest \
+@@ -1219,15 +1219,15 @@ virdeterministichashmock_la_LIBADD = $(MOCKLIBS_LIBS)
+ 
+ test_libraries += virdeterministichashmock.la
+ 
+-if WITH_JANSSON
++if WITH_YAJL
+ virmacmaptest_SOURCES = \
+ 	virmacmaptest.c testutils.h testutils.c
+ virmacmaptest_LDADD = $(LDADDS)
+ 
+ test_programs += virmacmaptest
+-else ! WITH_JANSSON
++else ! WITH_YAJL
+ EXTRA_DIST +=  virmacmaptest.c
+-endif ! WITH_JANSSON
++endif ! WITH_YAJL
+ 
+ virnetdevtest_SOURCES = \
+ 	virnetdevtest.c testutils.h testutils.c
+diff --git a/tests/cputest.c b/tests/cputest.c
+index 9cc361d125..baf2b3c648 100644
+--- a/tests/cputest.c
++++ b/tests/cputest.c
+@@ -40,7 +40,7 @@
+ #include "cpu/cpu_map.h"
+ #include "virstring.h"
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+ # include "testutilsqemu.h"
+ # include "qemumonitortestutils.h"
+ # define __QEMU_CAPSPRIV_H_ALLOW__
+@@ -67,7 +67,7 @@ struct data {
+     int result;
+ };
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+ static virQEMUDriver driver;
+ #endif
+ 
+@@ -479,7 +479,7 @@ typedef enum {
+     JSON_MODELS_REQUIRED,
+ } cpuTestCPUIDJson;
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+ static virQEMUCapsPtr
+ cpuTestMakeQEMUCaps(const struct data *data)
+ {
+@@ -554,7 +554,7 @@ cpuTestGetCPUModels(const struct data *data,
+     return 0;
+ }
+ 
+-#else /* if WITH_QEMU && WITH_JANSSON */
++#else /* if WITH_QEMU && WITH_YAJL */
+ 
+ static int
+ cpuTestGetCPUModels(const struct data *data,
+@@ -834,7 +834,7 @@ cpuTestUpdateLive(const void *arg)
+ }
+ 
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+ static int
+ cpuTestJSONCPUID(const void *arg)
+ {
+@@ -911,7 +911,7 @@ mymain(void)
+     virDomainCapsCPUModelsPtr ppc_models = NULL;
+     int ret = 0;
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+     if (qemuTestDriverInit(&driver) < 0)
+         return EXIT_FAILURE;
+ 
+@@ -1004,7 +1004,7 @@ mymain(void)
+             host "/" cpu " (" #models ")", \
+             host, cpu, models, 0, result)
+ 
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+ # define DO_TEST_JSON(arch, host, json) \
+     do { \
+         if (json == JSON_MODELS) { \
+@@ -1205,7 +1205,7 @@ mymain(void)
+     DO_TEST_CPUID(VIR_ARCH_X86_64, "Xeon-X5460", JSON_NONE);
+ 
+  cleanup:
+-#if WITH_QEMU && WITH_JANSSON
++#if WITH_QEMU && WITH_YAJL
+     qemuTestDriverFree(&driver);
+ #endif
+ 
+diff --git a/tests/libxlxml2domconfigtest.c b/tests/libxlxml2domconfigtest.c
+index a9758c40cb..b814461acc 100644
+--- a/tests/libxlxml2domconfigtest.c
++++ b/tests/libxlxml2domconfigtest.c
+@@ -33,7 +33,7 @@
+ 
+ #include "testutils.h"
+ 
+-#if defined(WITH_LIBXL) && defined(WITH_JANSSON) && defined(HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON)
++#if defined(WITH_LIBXL) && defined(WITH_YAJL) && defined(HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON)
+ 
+ # include "internal.h"
+ # include "viralloc.h"
+@@ -228,4 +228,4 @@ int main(void)
+     return EXIT_AM_SKIP;
+ }
+ 
+-#endif /* WITH_LIBXL && WITH_JANSSON && HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON */
++#endif /* WITH_LIBXL && WITH_YAJL && HAVE_LIBXL_DOMAIN_CONFIG_FROM_JSON */
+diff --git a/tests/qemuagenttest.c b/tests/qemuagenttest.c
+index 232b34f9cd..2f79986207 100644
+--- a/tests/qemuagenttest.c
++++ b/tests/qemuagenttest.c
+@@ -907,7 +907,7 @@ mymain(void)
+ {
+     int ret = 0;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
+index 9a387cf063..0c335abc5b 100644
+--- a/tests/qemublocktest.c
++++ b/tests/qemublocktest.c
+@@ -309,7 +309,6 @@ testQemuDiskXMLToPropsValidateFile(const void *opaque)
+             goto cleanup;
+ 
+         virBufferAdd(&buf, jsonstr, -1);
+-        virBufferAddLit(&buf, "\n");
+         VIR_FREE(jsonstr);
+     }
+ 
+diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
+index 641ec4f597..4aec175968 100644
+--- a/tests/qemucapabilitiestest.c
++++ b/tests/qemucapabilitiestest.c
+@@ -141,7 +141,7 @@ mymain(void)
+     int ret = 0;
+     testQemuData data;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
+index e3b7b97925..5b9152b04d 100644
+--- a/tests/qemucaps2xmltest.c
++++ b/tests/qemucaps2xmltest.c
+@@ -165,7 +165,7 @@ mymain(void)
+ 
+     testQemuData data;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemucommandutiltest.c b/tests/qemucommandutiltest.c
+index 8e57a1b79d..f0921e3b93 100644
+--- a/tests/qemucommandutiltest.c
++++ b/tests/qemucommandutiltest.c
+@@ -76,7 +76,7 @@ mymain(void)
+     int ret = 0;
+     testQemuCommandBuildObjectFromJSONData data1;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
+index 2fb96c6158..5b1e0db104 100644
+--- a/tests/qemuhotplugtest.c
++++ b/tests/qemuhotplugtest.c
+@@ -593,7 +593,7 @@ mymain(void)
+     struct qemuHotplugTestData data = {0};
+     struct testQemuHotplugCpuParams cpudata;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemumigparamsdata/empty.json b/tests/qemumigparamsdata/empty.json
+index 0967ef424b..0db3279e44 100644
+--- a/tests/qemumigparamsdata/empty.json
++++ b/tests/qemumigparamsdata/empty.json
+@@ -1 +1,3 @@
+-{}
++{
++
++}
+diff --git a/tests/qemumigparamsdata/unsupported.json b/tests/qemumigparamsdata/unsupported.json
+index 0967ef424b..0db3279e44 100644
+--- a/tests/qemumigparamsdata/unsupported.json
++++ b/tests/qemumigparamsdata/unsupported.json
+@@ -1 +1,3 @@
+-{}
++{
++
++}
+diff --git a/tests/qemumigparamstest.c b/tests/qemumigparamstest.c
+index b8af68211b..0532053722 100644
+--- a/tests/qemumigparamstest.c
++++ b/tests/qemumigparamstest.c
+@@ -203,7 +203,7 @@ mymain(void)
+     virQEMUDriver driver;
+     int ret = 0;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c
+index c11615f7ac..e9b2632655 100644
+--- a/tests/qemumonitorjsontest.c
++++ b/tests/qemumonitorjsontest.c
+@@ -2863,7 +2863,7 @@ mymain(void)
+     virJSONValuePtr metaschema = NULL;
+     char *metaschemastr = NULL;
+ 
+-#if !WITH_JANSSON
++#if !WITH_YAJL
+     fputs("libvirt not compiled with JSON support, skipping this test\n", stderr);
+     return EXIT_AM_SKIP;
+ #endif
+diff --git a/tests/virmacmaptestdata/empty.json b/tests/virmacmaptestdata/empty.json
+index fe51488c70..41b42e677b 100644
+--- a/tests/virmacmaptestdata/empty.json
++++ b/tests/virmacmaptestdata/empty.json
+@@ -1 +1,3 @@
+-[]
++[
++
++]
+diff --git a/tests/virmocklibxl.c b/tests/virmocklibxl.c
+index 0a047c239f..546c6d6a43 100644
+--- a/tests/virmocklibxl.c
++++ b/tests/virmocklibxl.c
+@@ -22,7 +22,7 @@
+ 
+ #include <config.h>
+ 
+-#if defined(WITH_LIBXL) && defined(WITH_JANSSON)
++#if defined(WITH_LIBXL) && defined(WITH_YAJL)
+ # include "virmock.h"
+ # include <sys/stat.h>
+ # include <unistd.h>
+@@ -136,4 +136,4 @@ VIR_MOCK_IMPL_RET_ARGS(stat, int,
+     return real_stat(path, sb);
+ }
+ 
+-#endif /* WITH_LIBXL && WITH_JANSSON */
++#endif /* WITH_LIBXL && WITH_YAJL */
+diff --git a/tests/virnetdaemontest.c b/tests/virnetdaemontest.c
+index cbc961dbaf..6f4957fc4c 100644
+--- a/tests/virnetdaemontest.c
++++ b/tests/virnetdaemontest.c
+@@ -26,7 +26,7 @@
+ 
+ #define VIR_FROM_THIS VIR_FROM_RPC
+ 
+-#if defined(HAVE_SOCKETPAIR) && defined(WITH_JANSSON)
++#if defined(HAVE_SOCKETPAIR) && defined(WITH_YAJL)
+ struct testClientPriv {
+     int magic;
+ };
+diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
+index b20b5a8744..68d0307d5c 100644
+--- a/tests/virstoragetest.c
++++ b/tests/virstoragetest.c
+@@ -1317,7 +1317,7 @@ mymain(void)
+                        "  <host name='example.org' port='6000'/>\n"
+                        "</source>\n");
+ 
+-#ifdef WITH_JANSSON
++#ifdef WITH_YAJL
+     TEST_BACKING_PARSE("json:", NULL);
+     TEST_BACKING_PARSE("json:asdgsdfg", NULL);
+     TEST_BACKING_PARSE("json:{}", NULL);
+@@ -1581,7 +1581,7 @@ mymain(void)
+                        "<source protocol='vxhs' name='c6718f6b-0401-441d-a8c3-1f0064d75ee0'>\n"
+                        "  <host name='example.com' port='9999'/>\n"
+                        "</source>\n");
+-#endif /* WITH_JANSSON */
++#endif /* WITH_YAJL */
+ 
+  cleanup:
+     /* Final cleanup */
+-- 
+2.18.0
+

Added: 0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch
===================================================================
--- 0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch	                        (rev 0)
+++ 0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,37 @@
+From 3a0ae97574bb1d8fd99b6b32e99785a754b59541 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:40:25 +0200
+Subject: [PATCH 15/16] Revert "build: undef WITH_JANSSON for
+ SETUID_RPC_CLIENT"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 93fdc9e0b0cbb2eec32745a868ac4633f0912ad5.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ config-post.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/config-post.h b/config-post.h
+index 24117bbbd4..063e30fa37 100644
+--- a/config-post.h
++++ b/config-post.h
+@@ -36,7 +36,6 @@
+ # undef WITH_DEVMAPPER
+ # undef WITH_DTRACE_PROBES
+ # undef WITH_GNUTLS
+-# undef WITH_JANSSON
+ # undef WITH_LIBSSH
+ # undef WITH_MACVTAP
+ # undef WITH_NUMACTL
+-- 
+2.18.0
+

Added: 0016-Revert-build-add-with-jansson.patch
===================================================================
--- 0016-Revert-build-add-with-jansson.patch	                        (rev 0)
+++ 0016-Revert-build-add-with-jansson.patch	2018-08-18 16:38:03 UTC (rev 372664)
@@ -0,0 +1,96 @@
+From adbe2263370aaa90bafa5d1d1da043bea63b5118 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko at redhat.com>
+Date: Mon, 13 Aug 2018 13:41:14 +0200
+Subject: [PATCH 16/16] Revert "build: add --with-jansson"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This reverts commit 12b34f094e2f1c7f414f4bb8f880a9d65c8fcd85.
+
+Jansson cannot parse QEMU's quirky JSON.
+Revert back to yajl.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1614569
+
+Conflicts:
+  configure.ac:
+    Commit 8aa85e0b introduced LIBVIRT_*_LIBISCSI macros.
+
+Signed-off-by: Ján Tomko <jtomko at redhat.com>
+Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
+---
+ configure.ac       |  6 +++---
+ m4/virt-jansson.m4 | 29 -----------------------------
+ 2 files changed, 3 insertions(+), 32 deletions(-)
+ delete mode 100644 m4/virt-jansson.m4
+
+diff --git a/configure.ac b/configure.ac
+index c6287f656a..c668630a79 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -250,7 +250,7 @@ LIBVIRT_ARG_FIREWALLD
+ LIBVIRT_ARG_FUSE
+ LIBVIRT_ARG_GLUSTER
+ LIBVIRT_ARG_HAL
+-LIBVIRT_ARG_JANSSON
++LIBVIRT_ARG_LIBISCSI
+ LIBVIRT_ARG_LIBPCAP
+ LIBVIRT_ARG_LIBSSH
+ LIBVIRT_ARG_LIBXML
+@@ -291,7 +291,7 @@ LIBVIRT_CHECK_FUSE
+ LIBVIRT_CHECK_GLUSTER
+ LIBVIRT_CHECK_GNUTLS
+ LIBVIRT_CHECK_HAL
+-LIBVIRT_CHECK_JANSSON
++LIBVIRT_CHECK_LIBISCSI
+ LIBVIRT_CHECK_LIBNL
+ LIBVIRT_CHECK_LIBPARTED
+ LIBVIRT_CHECK_LIBPCAP
+@@ -972,7 +972,7 @@ LIBVIRT_RESULT_FUSE
+ LIBVIRT_RESULT_GLUSTER
+ LIBVIRT_RESULT_GNUTLS
+ LIBVIRT_RESULT_HAL
+-LIBVIRT_RESULT_JANSSON
++LIBVIRT_RESULT_LIBISCSI
+ LIBVIRT_RESULT_LIBNL
+ LIBVIRT_RESULT_LIBPCAP
+ LIBVIRT_RESULT_LIBSSH
+diff --git a/m4/virt-jansson.m4 b/m4/virt-jansson.m4
+deleted file mode 100644
+index 206d6a5ced..0000000000
+--- a/m4/virt-jansson.m4
++++ /dev/null
+@@ -1,29 +0,0 @@
+-dnl The jansson library
+-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_ARG_JANSSON],[
+-  LIBVIRT_ARG_WITH_FEATURE([JANSSON], [jansson], [check])
+-])
+-
+-AC_DEFUN([LIBVIRT_CHECK_JANSSON],[
+-  dnl Jansson http://www.digip.org/jansson/
+-  LIBVIRT_CHECK_PKG([JANSSON], [jansson], [2.5])
+-])
+-
+-AC_DEFUN([LIBVIRT_RESULT_JANSSON],[
+-  LIBVIRT_RESULT_LIB([JANSSON])
+-])
+-- 
+2.18.0
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2018-08-18 15:47:53 UTC (rev 372663)
+++ PKGBUILD	2018-08-18 16:38:03 UTC (rev 372664)
@@ -5,7 +5,7 @@
 
 pkgname=libvirt
 pkgver=4.6.0
-pkgrel=2
+pkgrel=3
 pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)"
 arch=('x86_64')
 url="http://libvirt.org/"
@@ -67,16 +67,59 @@
 source=("https://libvirt.org/sources/${pkgname}-${pkgver}.tar.xz"{,.asc}
         'libvirtd.conf.d'
         'libvirtd-guests.conf.d'
-        'libvirt.sysusers.d')
+        'libvirt.sysusers.d'
+        '0001-Revert-src-Move-DLOPEN_LIBS-to-libraries-introducing.patch'
+        '0002-Revert-Fix-link-errors-in-tools-nss-and-tests.patch'
+        '0003-Revert-remote-daemon-Make-sure-that-JSON-symbols-are.patch'
+        '0004-Revert-util-jsoncompat-Stub-out-virJSONInitialize-wh.patch'
+        '0005-Revert-tests-qemucapsprobe-Fix-output-after-switchin.patch'
+        '0006-Revert-util-avoid-symbol-clash-between-json-librarie.patch'
+        '0007-Revert-tests-also-skip-qemuagenttest-with-old-jansso.patch'
+        '0008-Revert-m4-Introduce-STABLE_ORDERING_JANSSON.patch'
+        '0009-Revert-build-require-Jansson-if-QEMU-driver-is-enabl.patch'
+        '0010-Revert-build-switch-with-qemu-default-from-yes-to-ch.patch'
+        '0011-Revert-Remove-virJSONValueNewStringLen.patch'
+        '0012-Revert-build-remove-references-to-WITH_YAJL-for-SETU.patch'
+        '0013-Revert-Remove-functions-using-yajl.patch'
+        '0014-Revert-Switch-from-yajl-to-Jansson.patch'
+        '0015-Revert-build-undef-WITH_JANSSON-for-SETUID_RPC_CLIEN.patch'
+        '0016-Revert-build-add-with-jansson.patch')
 sha512sums=('beae0f1cafa73b9495d877979547bbc9b7ca2a7c3b213c5da92e6302b570d42df9d639f50380dbc0cebd6af983924dc27b1c81139c81dee0897f39a6a5158968'
             'SKIP'
             'fc0e16e045a2c84d168d42c97d9e14ca32ba0d86025135967f4367cf3fa663882eefb6923ebf04676ae763f4f459e5156d7221b36b47c835f9e531c6b6e0cd9d'
             'ef221bae994ad0a15ab5186b7469132896156d82bfdc3ef3456447d5cf1af347401ef33e8665d5b2f76451f5457aee7ea01064d7b9223d6691c90c4456763258'
-            '7d1d535aaf739a6753f6819c49272c8d9b5f488e0a8553797499334a76b8631474e222b6048f2125b858e5ecc21e602face45dd02121f833d605b9ae58322982')
+            '7d1d535aaf739a6753f6819c49272c8d9b5f488e0a8553797499334a76b8631474e222b6048f2125b858e5ecc21e602face45dd02121f833d605b9ae58322982'
+            'd77f916871482445aa7d75e1f1b048be4d0a4d04f90e85c6866d7b3ea7f2696367e333952679ed089a99a8c3b4d0c65cfb498dad1758e21637d60984c676ba06'
+            '5bfcae0d1fccc082793b57115241f88fdb5085fa00da73943a1a0043f29290af67a5ddad27b4b2784b54bc945e1c6df53299e9ae299d7771852452aaf7bf5a8a'
+            'a4b22dc08b92600910da08508fcb4bd4a2d27346eb45e9d8bc571149309f7aca762fe16d523bf662d88f4ceb3c3ac8a1ce33759e794444fac50713e40b6cb302'
+            '0b37d65045b942cdbe7480217baa06fbdd747a380c85397c88a59fea2af1a92d87e283b5e9534796ecadd66039fd370d62ce3223267991bdc978201f5416244f'
+            '6e4b33c866e9e7e27ab85a709a45a6d591b2f9a209b3352c8835ec582b810d0b632e9d328590075d119317d360974a0dc411280d68483a38f3405eced6458f0b'
+            '6e9f05297f1dc671b4564b041661a6bb35f1667c641388ba2d3971c9961a73a139f4c8b24db86792c2165ff49260c72123214e61442e63398325f0b434ff2cf9'
+            'e31377b9da9defdc4bfbc645a805fd83a5617e6150b0348f30c3f0892834066a26695f8b19bef2deea62486743383139e83b15c452f02947cb3d29b7ffc4d861'
+            '80cc5ee53fc490b86fb62bdf966441020b4798e94a93e05c1319249e066246e0bafc7b4b97a3c6c10a0d44632c6b228b015ff9dc677c60112a07523c823ee24c'
+            'a455409fb97e191f3c2e8510906d7da659212ced5163c4a37ca206ab1c348933c0cf0c0f1479ff2ad9076d42c73b35147757da43a96a079a40a385cf334ce5bc'
+            'bd82f3865c2a641877e91bc7ba92b09268caca1dd9cd0ba64e53bdd88965ba37d7a66c07b1d8dedc5d4254de4bfc08ba5bcafd47caa91d10921a185d88392b8b'
+            '6251c32e2d9681fb5ee477f535160688793f80957bac2e693bc47592a076b3878d5b071b1d1d8fcc28d2c9127567b28d93067e02d1342cbd72e38191e1c0f2f8'
+            'b271b72c910ce1d872d6d16cde4b4796309b8ede2fe150398ef094ab8a84284f81c9a1a6a795d25264c098cbab81c990d963132a112e215f6e32bd2fe561849a'
+            '74458eab69e570c3b4531f722db6d84cd83c534cf1bb60d38d6e2c5c44fdecaa73bfae250c14c787b4761d9edf01ef70d72617d52d14c63c1ee660e0cd8541a3'
+            'ee1b532579b74aea3cca308f51263693f42c19f946698a647a807258017689dfb4cebd778ccfdd7cb1fea68f55b7575754f1871ba0590e234e125b57afc5c8ea'
+            '9196b4cd7aa9c7af188bbd9ce4028dda4b04ea316546a5639e291a542663ac78c7deafc639f311b6c1aaa0878690b2e8e0e4e5c4bbe706c54c9cbf2d92960ad9'
+            'dca08fbdb2e1e088dbeb0d0b192f78cc63f010a7398111a8a71fcc392e23e0176ce84eb3577c12bc6c9da097db3802dab99d7dea91bf00504ecc930f8ab841e9')
 
 prepare() {
   cd "${srcdir}/${pkgname}-${pkgver}"
 
+  local src
+  for src in "${source[@]}"; do
+    src="${src%%::*}"
+    src="${src##*/}"
+    [[ $src = *.patch ]] || continue
+    msg2 "Applying patch $src..."
+    patch -Np1 < "../$src"
+  done
+
+  autoreconf -vi
+
   sed -i 's|/sysconfig/|/conf.d/|g' \
     src/remote/libvirtd.service.in \
     tools/{libvirt-guests.service,libvirt-guests.sh,virt-pki-validate}.in \
@@ -102,6 +145,7 @@
     --sbindir=/usr/bin \
     --disable-static \
     --with-init-script=systemd \
+    --with-qemu \
     --with-qemu-user=nobody \
     --with-qemu-group=kvm \
     --without-hal \



More information about the arch-commits mailing list