[Libvir] [PATCH] modular compilation of xen/qemu/test

Daniel Veillard veillard at redhat.com
Wed Mar 14 15:43:59 UTC 2007


  The following patch adds 3 configure options to turn on or off
the support for Xen, QEMU/KVM and the test driver, as the output
of configure --help shows:
...
  --with-xen              add XEN support (on)
  --with-qemu             add QEMU/KVM support (on)
  --with-test             add test driver support (on)
...

 It uses compile time flags, is not really intrusive, it just pointed out
a few strangeness, one of which was fixed (a Xen include) and the remaining
ones are:
   - xml.c doesn't depend on Xen except for virDomainXMLDevID calling
     xenStoreDomainGetNetworkID()
   - libvirt.c still calls xenDaemonDomainLookupByName_ids from
     virDomainGetUUID() , I'm not sure if this can be avoided
In the tests directory, sexpr2xmltest.c and xmconfigtest.c still depends on
code in xen specific modules, trying to add them without xen being present
was more complex than the value it may add (it also makes the patch smaller
to cut at the module level).

  Plan to commit this before the release, unless this raises a problem,

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/
-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /data/cvs/libxen/configure.in,v
retrieving revision 1.64
diff -u -p -r1.64 configure.in
--- configure.in	5 Mar 2007 11:10:06 -0000	1.64
+++ configure.in	14 Mar 2007 15:21:35 -0000
@@ -63,6 +63,14 @@ AC_ARG_WITH(html-subdir, AC_HELP_STRING(
             [HTML_DIR="$HTML_DIR/\$(PACKAGE)-\$(VERSION)/html"])
 AC_SUBST(HTML_DIR)
 
+dnl Allow to build without Xen, QEMU/KVM or test driver
+AC_ARG_WITH(xen,
+[  --with-xen              add XEN support (on)])
+AC_ARG_WITH(qemu,
+[  --with-qemu             add QEMU/KVM support (on)])
+AC_ARG_WITH(test,
+[  --with-test             add test driver support (on)])
+
 dnl
 dnl specific tests to setup DV devel environments with debug etc ...
 dnl
@@ -156,11 +164,35 @@ dnl
 AC_ARG_WITH(depends,
 	[  --with-depends          check for dependancies (on)])
 
+LIBVIRT_FEATURES=
+WITH_XEN=0
+
+if test "$with_qemu" = "no" ; then
+    echo "Disabling QEMU/KVM support"
+else
+    LIBVIRT_FEATURES="$LIBVIRT_FEATURES -DWITH_QEMU"
+fi
+
+if test "$with_test" = "no" ; then
+    echo "Disabling test driver support"
+else
+    LIBVIRT_FEATURES="$LIBVIRT_FEATURES -DWITH_TEST"
+fi
+
 if test "$with_depends" != "no"
 then
 
-dnl search for the Xen store library
-AC_SEARCH_LIBS(xs_read, [xenstore], [], [AC_MSG_ERROR([Xen store library not found])])
+if test "$with_xen" = "no" ; then
+    echo Disabling XEN support
+else
+    dnl search for the Xen store library
+    AC_SEARCH_LIBS(xs_read, [xenstore],
+                   [WITH_XEN=1],
+                   [AC_MSG_RESULT([Xen store library not found])])
+    if test "$WITH_XEN" != "0" ; then
+        LIBVIRT_FEATURES="$LIBVIRT_FEATURES -DWITH_XEN"
+    fi
+fi
 
 dnl
 dnl check for libsyfs (>= 2.0.0); allow disabling bridge parameters support altogether
@@ -245,6 +277,9 @@ AC_SUBST(VIRSH_LIBS)
 # end of if with_depends
 fi
 
+AC_SUBST(WITH_XEN)
+AC_SUBST(LIBVIRT_FEATURES)
+
 dnl
 dnl check for python
 dnl
Index: proxy/Makefile.am
===================================================================
RCS file: /data/cvs/libxen/proxy/Makefile.am,v
retrieving revision 1.8
diff -u -p -r1.8 Makefile.am
--- proxy/Makefile.am	1 Mar 2007 16:18:55 -0000	1.8
+++ proxy/Makefile.am	14 Mar 2007 15:21:36 -0000
@@ -3,7 +3,7 @@
 INCLUDES = -I$(top_builddir)/include -I at top_srcdir@/include \
            -I at top_srcdir@/proxy -I at top_srcdir@/src @LIBXML_CFLAGS@ \
 	   -DPROXY  -DLOCALEBASEDIR=\""$(datadir)/locale"\" \
-           -DGETTEXT_PACKAGE=\"$(PACKAGE)\" $(WARN_CFLAGS)
+           -DGETTEXT_PACKAGE=\"$(PACKAGE)\" $(WARN_CFLAGS) $(LIBVIRT_FEATURES)
 
 libexec_PROGRAMS = libvirt_proxy
 
Index: proxy/libvirt_proxy.c
===================================================================
RCS file: /data/cvs/libxen/proxy/libvirt_proxy.c,v
retrieving revision 1.13
diff -u -p -r1.13 libvirt_proxy.c
--- proxy/libvirt_proxy.c	1 Mar 2007 16:01:39 -0000	1.13
+++ proxy/libvirt_proxy.c	14 Mar 2007 15:21:36 -0000
@@ -19,6 +19,8 @@
 #include <sys/un.h>
 #include <locale.h>
 #include "internal.h"
+
+#ifdef WITH_XEN
 #include "proxy_internal.h"
 #include "xen_internal.h"
 #include "xend_internal.h"
@@ -786,3 +788,9 @@ int main(int argc, char **argv) {
     proxyCloseUnixSocket();
     exit(0);
 }
+#else /* WITHOUT_XEN */
+int main(void) {
+    fprintf(stderr, "libvirt was compiled without Xen support\n");
+    exit(1);
+}
+#endif /* WITH_XEN */
Index: src/Makefile.am
===================================================================
RCS file: /data/cvs/libxen/src/Makefile.am,v
retrieving revision 1.35
diff -u -p -r1.35 Makefile.am
--- src/Makefile.am	1 Mar 2007 16:18:55 -0000	1.35
+++ src/Makefile.am	14 Mar 2007 15:21:36 -0000
@@ -3,7 +3,7 @@
 INCLUDES = -I$(top_builddir)/include -I at top_srcdir@/include @LIBXML_CFLAGS@ -I at top_srcdir@/qemud \
 	   -DBINDIR=\""$(libexecdir)"\" -DSBINDIR=\""$(sbindir)"\" -DLOCALEBASEDIR=\""$(datadir)/locale"\" \
            -DLOCAL_STATE_DIR=\""$(localstatedir)"\" \
-           -DGETTEXT_PACKAGE=\"$(PACKAGE)\" $(WARN_CFLAGS)
+           -DGETTEXT_PACKAGE=\"$(PACKAGE)\" $(WARN_CFLAGS) $(LIBVIRT_FEATURES)
 DEPS = libvirt.la
 LDADDS = @STATIC_BINARIES@ libvirt.la
 VIRSH_LIBS = @VIRSH_LIBS@
Index: src/libvirt.c
===================================================================
RCS file: /data/cvs/libxen/src/libvirt.c,v
retrieving revision 1.61
diff -u -p -r1.61 libvirt.c
--- src/libvirt.c	8 Mar 2007 14:53:41 -0000	1.61
+++ src/libvirt.c	14 Mar 2007 15:21:36 -0000
@@ -21,14 +21,16 @@
 #include <libxml/parser.h>
 #include <libxml/xpath.h>
 
-#include <xs.h>
-
 #include "internal.h"
 #include "driver.h"
+
+#ifdef WITH_XEN
+#include <xs.h>
 #include "xen_internal.h"
 #include "xend_internal.h"
 #include "xs_internal.h"
 #include "xm_internal.h"
+#endif
 #include "proxy_internal.h"
 #include "xml.h"
 #include "test.h"
@@ -69,13 +71,19 @@ virInitialize(void)
     /*
      * Note that the order is important the first ones have a higher priority
      */
+#ifdef WITH_XEN
     xenHypervisorRegister();
     xenProxyRegister();
     xenDaemonRegister();
     xenStoreRegister();
     xenXMRegister();
+#endif
+#ifdef WITH_TEST
     testRegister();
+#endif
+#ifdef WITH_QEMU
     qemuRegister();
+#endif
 
     return(0);
 }
@@ -1335,6 +1343,7 @@ virDomainGetUUID(virDomainPtr domain, un
     if (domain->id == 0) {
         memset(uuid, 0, VIR_UUID_BUFLEN);
     } else {
+#ifdef WITH_XEN
         if ((domain->uuid[0] == 0) && (domain->uuid[1] == 0) &&
             (domain->uuid[2] == 0) && (domain->uuid[3] == 0) &&
             (domain->uuid[4] == 0) && (domain->uuid[5] == 0) &&
@@ -1345,6 +1354,7 @@ virDomainGetUUID(virDomainPtr domain, un
             (domain->uuid[14] == 0) && (domain->uuid[15] == 0))
             xenDaemonDomainLookupByName_ids(domain->conn, domain->name,
                                 &domain->uuid[0]);
+#endif
         memcpy(uuid, &domain->uuid[0], VIR_UUID_BUFLEN);
     }
     return (0);
Index: src/qemu_internal.c
===================================================================
RCS file: /data/cvs/libxen/src/qemu_internal.c,v
retrieving revision 1.16
diff -u -p -r1.16 qemu_internal.c
--- src/qemu_internal.c	8 Mar 2007 15:16:01 -0000	1.16
+++ src/qemu_internal.c	14 Mar 2007 15:21:36 -0000
@@ -21,6 +21,7 @@
  * Author: Daniel P. Berrange <berrange at redhat.com>
  */
 
+#ifdef WITH_QEMU
 #include <stdio.h>
 #include <string.h>
 #include <sys/time.h>
@@ -1230,6 +1231,7 @@ void qemuRegister(void) {
     virRegisterDriver(&qemuDriver);
     virRegisterNetworkDriver(&qemuNetworkDriver);
 }
+#endif /* WITH_QEMU */
 
 /*
  * Local variables:
Index: src/test.c
===================================================================
RCS file: /data/cvs/libxen/src/test.c,v
retrieving revision 1.22
diff -u -p -r1.22 test.c
--- src/test.c	8 Mar 2007 08:31:07 -0000	1.22
+++ src/test.c	14 Mar 2007 15:21:36 -0000
@@ -21,6 +21,7 @@
  * Daniel Berrange <berrange at redhat.com>
  */
 
+#ifdef WITH_TEST
 #include <stdio.h>
 #include <string.h>
 #include <sys/time.h>
@@ -1375,6 +1376,7 @@ int testDomainUndefine(virDomainPtr doma
 
     return (0);
 }
+#endif /* WITH_TEST */
 
 /*
  * Local variables:
Index: src/xen_internal.c
===================================================================
RCS file: /data/cvs/libxen/src/xen_internal.c,v
retrieving revision 1.60
diff -u -p -r1.60 xen_internal.c
--- src/xen_internal.c	8 Mar 2007 08:31:07 -0000	1.60
+++ src/xen_internal.c	14 Mar 2007 15:21:36 -0000
@@ -8,6 +8,8 @@
  * Daniel Veillard <veillard at redhat.com>
  */
 
+#ifdef WITH_XEN
+
 #include <stdio.h>
 #include <string.h>
 /* required for uint8_t, uint32_t, etc ... */
@@ -1880,6 +1882,7 @@ xenHypervisorGetVcpuMax(virDomainPtr dom
     return maxcpu;
 }
 
+#endif /* WITH_XEN */
 /*
  * Local variables:
  *  indent-tabs-mode: nil
Index: src/xen_internal.h
===================================================================
RCS file: /data/cvs/libxen/src/xen_internal.h,v
retrieving revision 1.15
diff -u -p -r1.15 xen_internal.h
--- src/xen_internal.h	8 Mar 2007 08:31:07 -0000	1.15
+++ src/xen_internal.h	14 Mar 2007 15:21:36 -0000
@@ -11,9 +11,6 @@
 #ifndef __VIR_XEN_INTERNAL_H__
 #define __VIR_XEN_INTERNAL_H__
 
-/* required for dom0_getdomaininfo_t and DOM0_INTERFACE_VERSION */
-#include <xen/dom0_ops.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
Index: src/xend_internal.c
===================================================================
RCS file: /data/cvs/libxen/src/xend_internal.c,v
retrieving revision 1.102
diff -u -p -r1.102 xend_internal.c
--- src/xend_internal.c	14 Mar 2007 13:14:51 -0000	1.102
+++ src/xend_internal.c	14 Mar 2007 15:21:36 -0000
@@ -10,6 +10,7 @@
  *  archive for more details.
  */
 
+#ifdef WITH_XEN
 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/socket.h>
@@ -37,6 +38,9 @@
 #include "xen_internal.h" /* for DOM0_INTERFACE_VERSION */
 #include "xs_internal.h" /* To extract VNC port & Serial console TTY */
 
+/* required for cpumap_t */
+#include <xen/dom0_ops.h>
+
 #ifndef PROXY
 static const char * xenDaemonGetType(virConnectPtr conn);
 static int xenDaemonListDomains(virConnectPtr conn, int *ids, int maxids);
@@ -3123,9 +3127,7 @@ error:
 }
 
 #endif /* ! PROXY */
-
-
-
+#endif /* WITH_XEN */
 
 /*
  * Local variables:
Index: src/xm_internal.c
===================================================================
RCS file: /data/cvs/libxen/src/xm_internal.c,v
retrieving revision 1.18
diff -u -p -r1.18 xm_internal.c
--- src/xm_internal.c	8 Mar 2007 14:12:06 -0000	1.18
+++ src/xm_internal.c	14 Mar 2007 15:21:37 -0000
@@ -22,6 +22,7 @@
  *
  */
 
+#ifdef WITH_XEN
 #include <dirent.h>
 #include <time.h>
 #include <sys/stat.h>
@@ -2261,6 +2262,7 @@ int xenXMNumOfDefinedDomains(virConnectP
     return virHashSize(nameConfigMap);
 }
 
+#endif /* WITH_XEN */
 /*
  * Local variables:
  *  indent-tabs-mode: nil
Index: src/xml.c
===================================================================
RCS file: /data/cvs/libxen/src/xml.c,v
retrieving revision 1.64
diff -u -p -r1.64 xml.c
--- src/xml.c	8 Mar 2007 14:12:06 -0000	1.64
+++ src/xml.c	14 Mar 2007 15:21:37 -0000
@@ -14,7 +14,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
+#ifdef WITH_XEN
 #include <xs.h>
+#endif
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 #include <libxml/xpath.h>
@@ -1340,7 +1342,9 @@ virDomainXMLDevID(virDomainPtr domain, c
     xmlDocPtr xml = NULL;
     xmlNodePtr node, cur;
     xmlChar *attr = NULL;
+#ifdef WITH_XEN
     char *xref;
+#endif /* WITH_XEN */
     int ret = 0;
 
     xml = xmlReadDoc((const xmlChar *) xmldesc, "domain.xml", NULL,
@@ -1372,6 +1376,7 @@ virDomainXMLDevID(virDomainPtr domain, c
             if (attr == NULL)
                 goto error;
 
+#ifdef WITH_XEN
             xref = xenStoreDomainGetNetworkID(domain->conn, domain->id,
                                               (char *) attr);
             if (xref != NULL) {
@@ -1379,6 +1384,7 @@ virDomainXMLDevID(virDomainPtr domain, c
                 free(xref);
                 goto cleanup;
             }
+#endif /* WITH_XEN */
 
             goto error;
         }
Index: src/xs_internal.c
===================================================================
RCS file: /data/cvs/libxen/src/xs_internal.c,v
retrieving revision 1.34
diff -u -p -r1.34 xs_internal.c
--- src/xs_internal.c	8 Mar 2007 14:17:32 -0000	1.34
+++ src/xs_internal.c	14 Mar 2007 15:21:37 -0000
@@ -8,6 +8,7 @@
  * Daniel Veillard <veillard at redhat.com>
  */
 
+#ifdef WITH_XEN
 #include <stdio.h>
 #include <string.h>
 #include <unistd.h>
@@ -836,3 +837,13 @@ xenStoreDomainGetNetworkID(virConnectPtr
     free(list);
     return(ret);
 }
+
+#endif /* WITH_XEN */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
Index: tests/Makefile.am
===================================================================
RCS file: /data/cvs/libxen/tests/Makefile.am,v
retrieving revision 1.16
diff -u -p -r1.16 Makefile.am
--- tests/Makefile.am	1 Mar 2007 16:18:55 -0000	1.16
+++ tests/Makefile.am	14 Mar 2007 15:21:37 -0000
@@ -19,7 +19,8 @@ INCLUDES = \
         -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=199506L \
         -DGETTEXT_PACKAGE=\"$(PACKAGE)\" \
          $(COVERAGE_CFLAGS) \
-         $(WARN_CFLAGS)
+         $(WARN_CFLAGS)	\
+	 $(LIBVIRT_FEATURES)
 
 LDADDS = \
 	@STATIC_BINARIES@ \
Index: tests/sexpr2xmltest.c
===================================================================
RCS file: /data/cvs/libxen/tests/sexpr2xmltest.c,v
retrieving revision 1.9
diff -u -p -r1.9 sexpr2xmltest.c
--- tests/sexpr2xmltest.c	13 Dec 2006 14:08:51 -0000	1.9
+++ tests/sexpr2xmltest.c	14 Mar 2007 15:21:37 -0000
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifdef WITH_XEN
 #include "xml.h"
 #include "xend_internal.h"
 #include "testutils.h"
@@ -190,3 +191,19 @@ main(int argc, char **argv)
 
     exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
+#else /* WITHOUT_XEN */
+int
+main(void)
+{
+    fprintf(stderr, "libvirt compiled without Xen support\n");
+    exit(0);
+}
+#endif /* WITH_XEN */
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
Index: tests/xmconfigtest.c
===================================================================
RCS file: /data/cvs/libxen/tests/xmconfigtest.c,v
retrieving revision 1.1
diff -u -p -r1.1 xmconfigtest.c
--- tests/xmconfigtest.c	19 Jan 2007 20:30:05 -0000	1.1
+++ tests/xmconfigtest.c	14 Mar 2007 15:21:37 -0000
@@ -24,6 +24,7 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifdef WITH_XEN
 #include "xm_internal.h"
 #include "testutils.h"
 #include "internal.h"
@@ -214,7 +215,14 @@ main(int argc, char **argv)
 
     exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
-
+#else /* WITHOUT_XEN */
+int
+main(void)
+{
+    fprintf(stderr, "libvirt compiled without Xen support\n");
+    exit(0);
+}
+#endif /* WITH_XEN */
 
 /*
  * Local variables:


More information about the libvir-list mailing list