This patch is a small incremental change to optionally allow us to build every driver as a dlopen()able module. This is disabled by default for now. I'm not sure whether this is hugely usefl or not, but it was easy enough to do, so here's the patch. Daniel diff -r ecc8ae6295bc configure.in --- a/configure.in Wed Nov 12 21:59:22 2008 +0000 +++ b/configure.in Thu Nov 13 17:13:02 2008 +0000 @@ -1059,6 +1059,38 @@ AC_CHECK_TOOL([WINDRES], [windres], [no]) AM_CONDITIONAL([WITH_WIN_ICON], [test "$WINDRES" != "no"]) + + +dnl Driver-Modules library +AC_ARG_WITH([driver-modules], + [ --with-driver-modules build drivers as loadable modules], + [], + [with_driver_modules=no]) + +DRIVER_MODULES_CFLAGS= +DRIVER_MODULES_LIBS= +if test "x$with_driver_modules" = "xyes" ; then + old_cflags="$CFLAGS" + old_libs="$LIBS" + fail=0 + AC_CHECK_HEADER([dlfcn.h],[],[fail=1]) + AC_CHECK_LIB([dl], [dlopen],[],[fail=1]) + test $fail = 1 && + AC_MSG_ERROR([You must have dlfcn.h / dlopen() support to build driver modules]) + + CFLAGS="$old_cflags" + LIBS="$old_libs" +fi +if test "$with_driver_modules" = "yes"; then + DRIVER_MODULES_CFLAGS="-export-dynamic" + DRIVER_MODULES_LIBS="-ldl" + AC_DEFINE_UNQUOTED([WITH_DRIVER_MODULES], 1, [whether to build drivers as modules]) +fi +AM_CONDITIONAL([WITH_DRIVER_MODULES], [test "$with_driver_modules" != "no"]) +AC_SUBST([DRIVER_MODULES_CFLAGS]) +AC_SUBST([DRIVER_MODULES_LIBS]) + + # Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether # we're building shared libraries. This is the name of the directory # in which .o files will be created. @@ -1114,6 +1146,14 @@ AC_MSG_NOTICE([ iSCSI: $with_storage_iscsi]) AC_MSG_NOTICE([ Disk: $with_storage_disk]) AC_MSG_NOTICE([]) +AC_MSG_NOTICE([Driver Loadable Modules]) +AC_MSG_NOTICE([]) +if test "$with_driver_modules" != "no" ; then +AC_MSG_NOTICE([ dlopen: $DRIVER_MODULES_CFLAGS $DRIVER_MODULES_LIBS]) +else +AC_MSG_NOTICE([ dlopen: no]) +fi +AC_MSG_NOTICE([]) AC_MSG_NOTICE([Libraries]) AC_MSG_NOTICE([]) AC_MSG_NOTICE([ libxml: $LIBXML_CFLAGS $LIBXML_LIBS]) diff -r ecc8ae6295bc qemud/Makefile.am --- a/qemud/Makefile.am Wed Nov 12 21:59:22 2008 +0000 +++ b/qemud/Makefile.am Thu Nov 13 17:13:02 2008 +0000 @@ -92,6 +92,7 @@ ../gnulib/lib/libgnu.la \ ../src/libvirt.la +if ! WITH_DRIVER_MODULES if WITH_QEMU libvirtd_LDADD += ../src/libvirt_driver_qemu.la endif @@ -106,6 +107,7 @@ if WITH_NETWORK libvirtd_LDADD += ../src/libvirt_driver_network.la +endif endif if HAVE_POLKIT diff -r ecc8ae6295bc qemud/qemud.c --- a/qemud/qemud.c Wed Nov 12 21:59:22 2008 +0000 +++ b/qemud/qemud.c Thu Nov 13 17:13:02 2008 +0000 @@ -61,6 +61,9 @@ #include "mdns.h" #endif +#ifdef WITH_DRIVER_MODULES +#include "driver.h" +#else #ifdef WITH_QEMU #include "qemu_driver.h" #endif @@ -72,6 +75,7 @@ #endif #ifdef WITH_STORAGE_DIR #include "storage_driver.h" +#endif #endif @@ -744,8 +748,19 @@ virInitialize(); +#ifdef WITH_DRIVER_MODULES + /* We don't care if any of these fail, because the whole point + * is to allow users to only install modules they want to use. + * If they try to use a open a connection for a module that + * is not loaded they'll get a suitable error at that point + */ + virDriverLoadModule("qemu"); + virDriverLoadModule("lxc"); + virDriverLoadModule("network"); + virDriverLoadModule("storage"); +#else #ifdef WITH_QEMU - qemudRegister(); + qemuRegister(); #endif #ifdef WITH_LXC lxcRegister(); @@ -755,6 +770,7 @@ #endif #ifdef WITH_STORAGE_DIR storageRegister(); +#endif #endif virEventRegisterImpl(virEventAddHandleImpl, diff -r ecc8ae6295bc src/Makefile.am --- a/src/Makefile.am Wed Nov 12 21:59:22 2008 +0000 +++ b/src/Makefile.am Thu Nov 13 17:13:02 2008 +0000 @@ -6,7 +6,10 @@ -I@top_srcdir@/include \ -I@top_srcdir@/qemud \ $(LIBXML_CFLAGS) \ + $(XEN_CFLAGS) \ $(SELINUX_CFLAGS) \ + $(DRIVER_MODULE_CFLAGS) \ + -DLIBDIR=\""$(libdir)"\" \ -DBINDIR=\""$(libexecdir)"\" \ -DSBINDIR=\""$(sbindir)"\" \ -DSYSCONF_DIR="\"$(sysconfdir)\"" \ @@ -30,6 +33,10 @@ lib_LTLIBRARIES = libvirt.la +moddir = $(libdir)/libvirt/drivers +mod_LTLIBRARIES = + + # These files are not related to driver APIs. Simply generic # helper APIs for various purposes UTIL_SOURCES = \ @@ -49,7 +56,7 @@ # Internal generic driver infrastructure DRIVER_SOURCES = \ - driver.h \ + driver.c driver.h \ internal.h \ datatypes.c datatypes.h \ domain_event.c domain_event.h \ @@ -163,67 +170,120 @@ $(STORAGE_CONF_SOURCES) if WITH_TEST +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_test.la +else noinst_LTLIBRARIES += libvirt_driver_test.la libvirt_la_LIBADD += libvirt_driver_test.la +endif libvirt_driver_test_la_SOURCES = $(TEST_DRIVER_SOURCES) endif if WITH_REMOTE +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_remote.la +else noinst_LTLIBRARIES += libvirt_driver_remote.la libvirt_la_LIBADD += libvirt_driver_remote.la +endif libvirt_driver_remote_la_CFLAGS = \ $(GNUTLS_CFLAGS) \ $(SASL_CFLAGS) libvirt_driver_remote_la_LDFLAGS = \ $(GNUTLS_LIBS) \ $(SASL_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_remote_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_remote_la_SOURCES = $(REMOTE_DRIVER_SOURCES) endif if WITH_XEN +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_xen.la +else noinst_LTLIBRARIES += libvirt_driver_xen.la libvirt_la_LIBADD += libvirt_driver_xen.la +endif libvirt_driver_xen_la_CFLAGS = $(XEN_CFLAGS) libvirt_driver_xen_la_LDFLAGS = $(XEN_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_xen_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_xen_la_SOURCES = $(XEN_DRIVER_SOURCES) endif if WITH_OPENVZ +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_openvz.la +else noinst_LTLIBRARIES += libvirt_driver_openvz.la libvirt_la_LIBADD += libvirt_driver_openvz.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_openvz_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_openvz_la_SOURCES = $(OPENVZ_DRIVER_SOURCES) endif if WITH_QEMU +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_qemu.la +else noinst_LTLIBRARIES += libvirt_driver_qemu.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_qemu.la +endif libvirt_driver_qemu_la_CFLAGS = $(NUMACTL_CFLAGS) libvirt_driver_qemu_la_LDFLAGS = $(NUMACTL_LIBS) +if WITH_DRIVER_MODULES +libvirt_driver_qemu_la_LDFLAGS += -module -avoid-version +endif libvirt_driver_qemu_la_SOURCES = $(QEMU_DRIVER_SOURCES) endif if WITH_LXC +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_lxc.la +else noinst_LTLIBRARIES += libvirt_driver_lxc.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_lxc.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_lxc_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_lxc_la_SOURCES = $(LXC_DRIVER_SOURCES) endif if WITH_NETWORK +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_network.la +else noinst_LTLIBRARIES += libvirt_driver_network.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_network.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_network_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_network_la_SOURCES = $(NETWORK_DRIVER_SOURCES) endif # Needed to keep automake quiet about conditionals libvirt_driver_storage_la_SOURCES = if WITH_STORAGE_DIR +if WITH_DRIVER_MODULES +mod_LTLIBRARIES += libvirt_driver_storage.la +else noinst_LTLIBRARIES += libvirt_driver_storage.la # Stateful, so linked to daemon instead #libvirt_la_LIBADD += libvirt_driver_storage.la +endif +if WITH_DRIVER_MODULES +libvirt_driver_storage_la_LDFLAGS = -module -avoid-version +endif libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_SOURCES) libvirt_driver_storage_la_SOURCES += $(STORAGE_DRIVER_FS_SOURCES) endif @@ -258,7 +318,8 @@ # Empty source list - it merely links a bunch of convenience libs together libvirt_la_SOURCES = -libvirt_la_LIBADD += $(LIBXML_LIBS) $(SELINUX_LIBS) \ +libvirt_la_LIBADD += $(LIBXML_LIBS) $(XEN_LIBS) $(SELINUX_LIBS) \ + $(DRIVER_MODULE_LIBS) \ @CYGWIN_EXTRA_LIBADD@ ../gnulib/lib/libgnu.la libvirt_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libvirt_sym.version \ -version-info @LIBVIRT_VERSION_INFO@ \ diff -r ecc8ae6295bc src/driver.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/driver.c Thu Nov 13 17:13:02 2008 +0000 @@ -0,0 +1,97 @@ +/* + * driver.c: Helpers for loading drivers + * + * Copyright (C) 2006-2008 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +#include <config.h> + +#include <unistd.h> + +#include "driver.h" +#include "memory.h" +#include "logging.h" + +#define DEFAULT_DRIVER_DIR LIBDIR "/libvirt/drivers" + +#ifdef WITH_DRIVER_MODULES + +/* XXX re-implment this for other OS, or use libtools helper lib ? */ + +#include <dlfcn.h> + +void * +virDriverLoadModule(const char *name) +{ + const char *moddir = getenv("LIBVIRT_DRIVER_DIR"); + char *modfile = NULL, *regfunc = NULL; + void *handle = NULL; + int (*regsym)(void); + + if (moddir == NULL) + moddir = DEFAULT_DRIVER_DIR; + + DEBUG("Module load %s", name); + + if (asprintf(&modfile, "%s/libvirt_driver_%s.so", moddir, name) < 0) + return NULL; + + if (access(modfile, R_OK) < 0) { + DEBUG("Moodule %s not accessible", modfile); + goto cleanup; + } + + handle = dlopen(modfile, RTLD_NOW | RTLD_LOCAL); + if (!handle) { + DEBUG("failed to load module %s %s", modfile, dlerror()); + goto cleanup; + } + + if (asprintf(®func, "%sRegister", name) < 0) { + regfunc = NULL; + goto cleanup; + } + + regsym = dlsym(handle, regfunc); + if (!regsym) { + DEBUG("Missing module registration symbol %s", regfunc); + goto cleanup; + } + + if ((*regsym)() < 0) { + DEBUG("Failed module registration %s", regfunc); + goto cleanup; + } + + VIR_FREE(modfile); + VIR_FREE(regfunc); + return handle; + +cleanup: + VIR_FREE(modfile); + VIR_FREE(regfunc); + if (handle) + dlclose(handle); + return NULL; +} + + +/* XXX unload modules, but we can't until we can unregister libvirt drivers */ + +#endif diff -r ecc8ae6295bc src/driver.h --- a/src/driver.h Wed Nov 12 21:59:22 2008 +0000 +++ b/src/driver.h Thu Nov 13 17:13:02 2008 +0000 @@ -8,6 +8,7 @@ #include <libxml/uri.h> +#include "internal.h" /* * List of registered drivers numbers */ @@ -614,5 +615,6 @@ #ifdef WITH_LIBVIRTD int virRegisterStateDriver(virStateDriverPtr); #endif +void *virDriverLoadModule(const char *name); #endif /* __VIR_DRIVER_H__ */ diff -r ecc8ae6295bc src/libvirt.c --- a/src/libvirt.c Wed Nov 12 21:59:22 2008 +0000 +++ b/src/libvirt.c Thu Nov 13 17:13:02 2008 +0000 @@ -41,6 +41,7 @@ #include "util.h" #include "memory.h" +#ifndef WITH_DRIVER_MODULES #ifdef WITH_TEST #include "test.h" #endif @@ -52,6 +53,7 @@ #endif #ifdef WITH_OPENVZ #include "openvz_driver.h" +#endif #endif /* @@ -270,11 +272,22 @@ * Note that the order is important: the first ones have a higher * priority when calling virConnectOpen. */ +#ifdef WITH_DRIVER_MODULES + /* We don't care if any of these fail, because the whole point + * is to allow users to only install modules they want to use. + * If they try to use a open a connection for a module that + * is not loaded they'll get a suitable error at that point + */ + virDriverLoadModule("test"); + virDriverLoadModule("xen"); + virDriverLoadModule("openvz"); + virDriverLoadModule("remote"); +#else #ifdef WITH_TEST if (testRegister() == -1) return -1; #endif #ifdef WITH_XEN - if (xenUnifiedRegister () == -1) return -1; + if (xenRegister () == -1) return -1; #endif #ifdef WITH_OPENVZ if (openvzRegister() == -1) return -1; @@ -282,6 +295,7 @@ #ifdef WITH_REMOTE if (remoteRegister () == -1) return -1; #endif +#endif return(0); } @@ -458,6 +472,9 @@ return(-1); } + DEBUG ("registering %s as network driver %d", + driver->name, virNetworkDriverTabCount); + virNetworkDriverTab[virNetworkDriverTabCount] = driver; return virNetworkDriverTabCount++; } @@ -485,6 +502,9 @@ virLibConnError(NULL, VIR_ERR_INVALID_ARG, __FUNCTION__); return(-1); } + + DEBUG ("registering %s as storage driver %d", + driver->name, virStorageDriverTabCount); virStorageDriverTab[virStorageDriverTabCount] = driver; return virStorageDriverTabCount++; diff -r ecc8ae6295bc src/libvirt_sym.version.in --- a/src/libvirt_sym.version.in Wed Nov 12 21:59:22 2008 +0000 +++ b/src/libvirt_sym.version.in Thu Nov 13 17:13:02 2008 +0000 @@ -283,8 +283,12 @@ virCapabilitiesAddGuest; virCapabilitiesAddGuestDomain; virCapabilitiesAddGuestFeature; + virCapabilitiesAddHostMigrateTransport; virCapabilitiesAddHostNUMACell; + virCapabilitiesAddHostFeature; + virCapabilitiesDefaultGuestArch; virCapabilitiesDefaultGuestEmulator; + virCapabilitiesDefaultGuestMachine; virCapabilitiesFormatXML; virCapabilitiesFree; virCapabilitiesNew; @@ -296,6 +300,7 @@ virConfReadFile; virConfReadMem; virConfFree; + virConfFreeValue; virConfGetValue; virConfSetValue; virConfWriteFile; @@ -307,6 +312,7 @@ virGetNetwork; virGetStoragePool; virGetStorageVol; + virUnrefDomain; /* domain_conf.h */ @@ -314,14 +320,22 @@ virDiskNameToIndex; virDomainAssignDef; virDomainConfigFile; + virDomainCpuSetFormat; + virDomainCpuSetParse; + virDomainChrDefFree; + virDomainChrTypeFromString; + virDomainChrTypeToString; virDomainDefDefaultEmulator; virDomainDefFormat; virDomainDefFree; virDomainDefParseFile; + virDomainDefParseNode; virDomainDefParseString; virDomainDeleteConfig; + virDomainDeviceDefFree; virDomainDeviceDefParse; virDomainDiskBusTypeToString; + virDomainDiskDefFree; virDomainDiskDeviceTypeToString; virDomainDiskQSort; virDomainEventCallbackListAdd; @@ -330,12 +344,53 @@ virDomainFindByID; virDomainFindByName; virDomainFindByUUID; + virDomainGraphicsTypeFromString; + virDomainGraphicsDefFree; + virDomainInputDefFree; + virDomainLifecycleTypeFromString; + virDomainLifecycleTypeToString; virDomainLoadAllConfigs; + virDomainNetDefFree; + virDomainObjFree; virDomainObjListFree; virDomainRemoveInactive; virDomainSaveConfig; + virDomainSoundDefFree; + virDomainSoundModelTypeFromString; virDomainSoundModelTypeToString; virDomainVirtTypeToString; + virDomainFSDefFree; + + + /* domain_event.h */ + virDomainEventQueueFree; + virDomainEventCallbackQueuePop; + virDomainEventCallbackQueuePush; + + + /* driver.h */ + virDriverLoadModule; + + + /* event.h */ + virEventAddHandle; + virEventAddTimeout; + virEventRemoveHandle; + virEventRemoveTimeout; + virEventUpdateHandle; + virEventUpdateTimeout; + + + /* hash.h */ + virHashAddEntry; + virHashCreate; + virHashForEach; + virHashFree; + virHashLookup; + virHashRemoveEntry; + virHashRemoveSet; + virHashSearch; + virHashSize; /* iptables.h */ @@ -391,12 +446,15 @@ virNetworkAssignDef; virNetworkDefFormat; virNetworkDefFree; + virNetworkDefParseFile; + virNetworkDefParseNode; virNetworkDefParseString; virNetworkDeleteConfig; virNetworkFindByName; virNetworkFindByUUID; virNetworkLoadAllConfigs; virNetworkObjListFree; + virNetworkDefParseNode; virNetworkRemoveInactive; virNetworkSaveConfig; @@ -405,8 +463,15 @@ virNodeInfoPopulate; + /* qparams.h */ + qparam_get_query; + qparam_query_parse; + free_qparam_set; + + /* stats_linux.h */ linuxDomainInterfaceStats; + xenLinuxDomainBlockStats; /* storage_backend.h */ @@ -423,6 +488,7 @@ /* storage_conf.h */ + virStorageBackendPoolOptionsForType; virStoragePoolDefFormat; virStoragePoolDefFree; virStoragePoolDefParse; @@ -443,6 +509,11 @@ virStorageVolDefFormat; virStorageVolDefFree; virStorageVolDefParse; + virStoragePoolFormatDiskTypeToString; + virStoragePoolFormatFileSystemTypeToString; + virStoragePoolFormatFileSystemNetTypeToString; + virStorageVolFormatFileSystemTypeToString; + virStoragePoolTypeFromString; /* util.h */ @@ -450,6 +521,7 @@ virStrToLong_i; virStrToLong_ll; virStrToLong_ull; + virFileLinkPointsTo; saferead; safewrite; virMacAddrCompare; @@ -458,6 +530,8 @@ virEventAddHandle; virEventRemoveHandle; virExec; + virFormatMacAddr; + virParseMacAddr; virFileDeletePid; virFileExists; virFileHasSuffix; @@ -465,20 +539,28 @@ virFileOpenTty; virFileReadLimFD; virFileReadPid; + virParseNumber; virRun; + virSkipSpaces; /* uuid.h */ virUUIDFormat; + virUUIDGenerate; + virUUIDParse; /* virterror_internal.h */ + virRaiseError; virReportErrorHelper; + virErrorMsg; /* xml.h */ + virXPathLong; + virXPathNodeSet; virXPathString; - + virXMLPropString; /* Finally everything else is totally private */ local: diff -r ecc8ae6295bc src/qemu_driver.c --- a/src/qemu_driver.c Wed Nov 12 21:59:22 2008 +0000 +++ b/src/qemu_driver.c Thu Nov 13 17:13:02 2008 +0000 @@ -3440,7 +3440,7 @@ .active = qemudActive, }; -int qemudRegister(void) { +int qemuRegister(void) { virRegisterDriver(&qemuDriver); virRegisterStateDriver(&qemuStateDriver); return 0; diff -r ecc8ae6295bc src/qemu_driver.h --- a/src/qemu_driver.h Wed Nov 12 21:59:22 2008 +0000 +++ b/src/qemu_driver.h Thu Nov 13 17:13:02 2008 +0000 @@ -47,6 +47,6 @@ # define KVM_CAP_NR_VCPUS 9 /* returns max vcpus per vm */ #endif -int qemudRegister(void); +int qemuRegister(void); #endif /* QEMUD_DRIVER_H */ diff -r ecc8ae6295bc src/xen_unified.c --- a/src/xen_unified.c Wed Nov 12 21:59:22 2008 +0000 +++ b/src/xen_unified.c Thu Nov 13 17:13:02 2008 +0000 @@ -1359,14 +1359,14 @@ }; /** - * xenUnifiedRegister: + * xenRegister: * * Register xen related drivers * * Returns the driver priority or -1 in case of error. */ int -xenUnifiedRegister (void) +xenRegister (void) { /* Ignore failures here. */ (void) xenHypervisorInit (); diff -r ecc8ae6295bc src/xen_unified.h --- a/src/xen_unified.h Wed Nov 12 21:59:22 2008 +0000 +++ b/src/xen_unified.h Thu Nov 13 17:13:02 2008 +0000 @@ -22,7 +22,7 @@ #include <winsock2.h> #endif -extern int xenUnifiedRegister (void); +extern int xenRegister (void); #define XEN_UNIFIED_HYPERVISOR_OFFSET 0 #define XEN_UNIFIED_PROXY_OFFSET 1 diff -r ecc8ae6295bc tests/Makefile.am --- a/tests/Makefile.am Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/Makefile.am Thu Nov 13 17:13:02 2008 +0000 @@ -18,6 +18,11 @@ -DGETTEXT_PACKAGE=\"$(PACKAGE)\" \ $(COVERAGE_CFLAGS) \ $(WARN_CFLAGS) + +if WITH_DRIVER_MODULES +INCLUDES += \ + -DTEST_DRIVER_DIR=\"$(top_builddir)/src/.libs\" +endif LDADDS = \ @STATIC_BINARIES@ \ @@ -76,6 +81,7 @@ abs_srcdir=`cd '$(srcdir)'; pwd` \ PATH="$(path_add)$(PATH_SEPARATOR)$$PATH" \ SHELL="$(SHELL)" \ + LIBVIRT_DRIVER_DIR="$(abs_top_builddir)/src/.libs" \ $(VG) valgrind: @@ -93,17 +99,17 @@ xml2sexprtest_SOURCES = \ xml2sexprtest.c testutilsxen.c testutilsxen.h \ testutils.c testutils.h -xml2sexprtest_LDADD = $(LDADDS) +xml2sexprtest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) sexpr2xmltest_SOURCES = \ sexpr2xmltest.c \ testutils.c testutils.h -sexpr2xmltest_LDADD = $(LDADDS) +sexpr2xmltest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) xmconfigtest_SOURCES = \ xmconfigtest.c testutilsxen.c testutilsxen.h \ testutils.c testutils.h -xmconfigtest_LDADD = $(LDADDS) +xmconfigtest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) qemuxml2argvtest_SOURCES = \ qemuxml2argvtest.c testutilsqemu.c testutilsqemu.h \ @@ -126,7 +132,7 @@ xencapstest_SOURCES = \ xencapstest.c testutils.h testutils.c -xencapstest_LDADD = $(LDADDS) +xencapstest_LDADD = ../src/libvirt_driver_xen.la $(LDADDS) nodeinfotest_SOURCES = \ nodeinfotest.c testutils.h testutils.c diff -r ecc8ae6295bc tests/cpuset --- a/tests/cpuset Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/cpuset Thu Nov 13 17:13:02 2008 +0000 @@ -21,6 +21,9 @@ virsh --version fi +test -z "$srcdir" && srcdir=`pwd` +test -z "$abs_top_srcdir" && abs_top_srcdir=`pwd`/.. + . $srcdir/test-lib.sh fail=0 @@ -40,6 +43,6 @@ error: Failed to define domain from xml-invalid EOF -compare out exp || fail=1 +compare exp out || fail=1 (exit $fail); exit $fail diff -r ecc8ae6295bc tests/read-bufsiz --- a/tests/read-bufsiz Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/read-bufsiz Thu Nov 13 17:13:02 2008 +0000 @@ -21,6 +21,9 @@ virsh --version fi +test -z "$srcdir" && srcdir=`pwd` +test -z "$abs_top_srcdir" && abs_top_srcdir=`pwd`/.. + . $srcdir/test-lib.sh fail=0 @@ -37,7 +40,7 @@ virsh --connect test:///default define $in > out || fail=1 printf "Domain test defined from $in\n\n" > exp || fail=1 - compare out exp || fail=1 + compare exp out || fail=1 done (exit $fail); exit $fail diff -r ecc8ae6295bc tests/read-non-seekable --- a/tests/read-non-seekable Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/read-non-seekable Thu Nov 13 17:13:02 2008 +0000 @@ -20,6 +20,9 @@ set -x virsh --version fi + +test -z "$srcdir" && srcdir=`pwd` +test -z "$abs_top_srcdir" && abs_top_srcdir=`pwd`/.. . $srcdir/test-lib.sh diff -r ecc8ae6295bc tests/testutils.c --- a/tests/testutils.c Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/testutils.c Thu Nov 13 17:13:02 2008 +0000 @@ -151,6 +151,9 @@ int stderrfd = -1; const char *const env[] = { "LANG=C", +#if WITH_DRIVER_MODULES + "LIBVIRT_DRIVER_DIR=" TEST_DRIVER_DIR, +#endif NULL }; diff -r ecc8ae6295bc tests/undefine --- a/tests/undefine Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/undefine Thu Nov 13 17:13:02 2008 +0000 @@ -21,6 +21,9 @@ virsh --version fi +test -z "$srcdir" && srcdir=`pwd` +test -z "$abs_top_srcdir" && abs_top_srcdir=`pwd`/.. + . $srcdir/test-lib.sh fail=0 @@ -32,7 +35,7 @@ libvir: Test error : internal error Domain 'test' is still running error: Failed to undefine domain test EOF -compare out exp || fail=1 +compare exp out || fail=1 # A different diagnostic when specifying a domain ID virsh -q -c test:///default undefine 1 > out 2>&1 @@ -41,7 +44,7 @@ error: a running domain like 1 cannot be undefined; to undefine, first shutdown then undefine using its name or UUID EOF -compare out exp || fail=1 +compare exp out || fail=1 # Succeed, now: first shut down, then undefine, both via name. virsh -q -c test:///default 'shutdown test; undefine test' > out 2>&1 @@ -50,6 +53,6 @@ Domain test is being shutdown Domain test has been undefined EOF -compare out exp || fail=1 +compare exp out || fail=1 (exit $fail); exit $fail diff -r ecc8ae6295bc tests/vcpupin --- a/tests/vcpupin Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/vcpupin Thu Nov 13 17:13:02 2008 +0000 @@ -21,6 +21,9 @@ virsh --version fi +test -z "$srcdir" && srcdir=`pwd` +test -z "$abs_top_srcdir" && abs_top_srcdir=`pwd`/.. + . $srcdir/test-lib.sh fail=0 @@ -32,7 +35,7 @@ error: vcpupin: Invalid or missing vCPU number. EOF -compare out exp || fail=1 +compare exp out || fail=1 # An out-of-range vCPU number deserves a diagnostic, too. virsh --connect test:///default vcpupin test 100 0,1 > out 2>&1 @@ -41,6 +44,6 @@ error: vcpupin: Invalid vCPU number. EOF -compare out exp || fail=1 +compare exp out || fail=1 (exit $fail); exit $fail diff -r ecc8ae6295bc tests/xmconfigtest.c --- a/tests/xmconfigtest.c Wed Nov 12 21:59:22 2008 +0000 +++ b/tests/xmconfigtest.c Thu Nov 13 17:13:02 2008 +0000 @@ -55,13 +55,11 @@ int ret = -1; virConnectPtr conn; int wrote = MAX_FILE; - void *old_priv = NULL; struct _xenUnifiedPrivate priv; virDomainDefPtr def = NULL; - conn = virConnectOpenReadOnly("test:///default"); + conn = virGetConnect(); if (!conn) goto fail; - old_priv = conn->privateData; if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) goto fail; @@ -95,10 +93,7 @@ if (conf) virConfFree(conf); virDomainDefFree(def); - if (conn) { - conn->privateData = old_priv; - virConnectClose(conn); - } + VIR_FREE(conn); return ret; } @@ -113,13 +108,11 @@ virConfPtr conf = NULL; int ret = -1; virConnectPtr conn; - void *old_priv; struct _xenUnifiedPrivate priv; virDomainDefPtr def = NULL; - conn = virConnectOpenReadOnly("test:///default"); + conn = virGetConnect(); if (!conn) goto fail; - old_priv = conn->privateData; if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) goto fail; @@ -153,10 +146,7 @@ virConfFree(conf); VIR_FREE(gotxml); virDomainDefFree(def); - if (conn) { - conn->privateData = old_priv; - virConnectClose(conn); - } + VIR_FREE(conn); return ret; } -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list