On 15.05.2013 12:33, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Change the build process & driver initialization so that the
VirtualBox driver is built into libvirtd, instead of libvirt.so
This change avoids the VirtualBox GPLv2-only license causing
compatibility problems with libvirt.so which is under the
GPLv2-or-later license.
NB this change prevents use of the VirtualBox driver on the
Windows platform, until such time as libvirtd can be made
to work there.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
daemon/libvirtd.c | 9 +++++++++
docs/drvvbox.html.in | 12 ++++++++++++
src/Makefile.am | 24 +++++++++++++++++++-----
src/libvirt.c | 7 -------
4 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c
index 1ac8e30..abb46ca 100644
--- a/daemon/libvirtd.c
+++ b/daemon/libvirtd.c
@@ -73,6 +73,9 @@
# ifdef WITH_UML
# include "uml/uml_driver.h"
# endif
+#ifdef WITH_VBOX
+# include "vbox/vbox_driver.h"
+#endif
bad indent
# ifdef WITH_NETWORK
# include "network/bridge_driver.h"
# endif
@@ -400,6 +403,9 @@ static void daemonInitialize(void)
# ifdef WITH_UML
virDriverLoadModule("uml");
# endif
+# ifdef WITH_UML
s/WITH_UML/WITH_VBOX/
+ virDriverLoadModule("vbox");
+# endif
#else
# ifdef WITH_NETWORK
networkRegister();
@@ -434,6 +440,9 @@ static void daemonInitialize(void)
# ifdef WITH_UML
umlRegister();
# endif
+# ifdef WITH_VBOX
+ vboxRegister();
+# endif
#endif
}
diff --git a/docs/drvvbox.html.in b/docs/drvvbox.html.in
index d59da57..e2a213c 100644
--- a/docs/drvvbox.html.in
+++ b/docs/drvvbox.html.in
@@ -31,6 +31,18 @@ vbox+tcp://user@example.com/session (remote access, SASl/Kerberos)
vbox+ssh://user@example.com/session (remote access, SSH tunnelled)
</pre>
+ <p>
+ <strong>NOTE: as of libvirt 1.0.6, the VirtualBox driver will always
+ run inside the libvirtd daemon, instead of being built-in to the
+ libvirt.so library directly. This change was required due to the
+ fact that VirtualBox code is GPLv2-only licensed, which is not
+ compatible with the libvirt.so license of GPLv2-or-later. The
+ daemon will be auto-started when the first connection to VirtualBox
+ is requested. This change also means it is no longer possible to
+ use the VirtualBox on the Windows platform, which lacks support
+ for the libvirtd daemon.</strong>
+ </p>
+
<h2><a name="xmlconfig">Example domain XML
config</a></h2>
<pre>
diff --git a/src/Makefile.am b/src/Makefile.am
index 6c626ac..8f26181 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -957,12 +957,26 @@ libvirt_driver_vmware_la_SOURCES = $(VMWARE_DRIVER_SOURCES)
endif
if WITH_VBOX
+noinst_LTLIBRARIES += libvirt_driver_vbox_impl.la
+libvirt_driver_vbox_la_SOURCES =
+libvirt_driver_vbox_la_LIBADD = libvirt_driver_vbox_impl.la
+if WITH_DRIVER_MODULES
+mod_LTLIBRARIES += libvirt_driver_vbox.la
+libvirt_driver_vbox_la_LIBADD += ../gnulib/lib/libgnu.la
+libvirt_driver_vbox_la_LDFLAGS = -module -avoid-version
+else
noinst_LTLIBRARIES += libvirt_driver_vbox.la
-libvirt_la_BUILT_LIBADD += libvirt_driver_vbox.la
-libvirt_driver_vbox_la_CFLAGS = \
- -I$(top_srcdir)/src/conf $(AM_CFLAGS)
-libvirt_driver_vbox_la_LIBADD = $(DLOPEN_LIBS) $(MSCOM_LIBS)
-libvirt_driver_vbox_la_SOURCES = $(VBOX_DRIVER_SOURCES)
+# GPLv2-only license requries that it be linked into
+# libvirtd and *not* libvirt.so
+#libvirt_la_BUILT_LIBADD += libvirt_driver_xen.la
Why libvirt_driver_xen.la? s/xen/vbox/
+endif
+
+libvirt_driver_vbox_impl_la_CFLAGS = \
+ -I$(top_srcdir)/src/conf \
+ $(AM_CFLAGS)
+libvirt_driver_vbox_impl_la_LDFLAGS = $(AM_LDFLAGS)
+libvirt_driver_vbox_impl_la_LIBADD = $(DLOPEN_LIBS) $(MSCOM_LIBS)
+libvirt_driver_vbox_impl_la_SOURCES = $(VBOX_DRIVER_SOURCES)
endif
if WITH_XENAPI
diff --git a/src/libvirt.c b/src/libvirt.c
index 2b3515e..d0ec10a 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -81,9 +81,6 @@
#ifdef WITH_PHYP
# include "phyp/phyp_driver.h"
#endif
-#ifdef WITH_VBOX
-# include "vbox/vbox_driver.h"
-#endif
#ifdef WITH_ESX
# include "esx/esx_driver.h"
#endif
@@ -465,10 +462,6 @@ virGlobalInit(void)
if (phypRegister() == -1)
goto error;
#endif
-#ifdef WITH_VBOX
- if (vboxRegister() == -1)
- goto error;
-#endif
#ifdef WITH_ESX
if (esxRegister() == -1)
goto error;
Makes sense. ACK if you address the nits but please wait a moment before
pushing so others can express themselves as well.
Michal