On Wed, Sep 03, 2008 at 01:35:27PM +0100, Daniel P. Berrange wrote:
I've got a MinGW build environment setup on Fedora 10 now, so
just checked
out what the latest state of libvirt CVS is.
With the attached patch, I can run configure with:
./configure \
--build=i686-pc-linux-gnu \
--host=i686-pc-mingw32 \
--prefix=/usr/i686-pc-mingw32/sys-root/mingw \
--without-libvirtd \
--without-xen \
--without-qemu \
--without-sasl \
--without-lxc \
--without-openvz \
--without-python
Aside from the PKG_CONFIG_PATH I already mentioned you need to set CC
and also pass --without-avahi and --without-polkit, so complete
invocation is actually
PKG_CONFIG_PATH=/usr/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig \
CC="i686-pc-mingw32-gcc" \
./configure \
--build=$(uname -m)-pc-linux \
--host=i686-pc-mingw32 \
--prefix=/usr/i686-pc-mingw32/sys-root/mingw \
--without-sasl \
--without-avahi \
--without-polkit \
--without-python \
--without-xen \
--without-qemu \
--without-lxc \
--without-openvz \
--without-libvirtd
This new version of the patch fixes two small bugs in the original, and
also adds the mingw-libvirt.spec.in and makes the autobuild.sh script
build this RPM too, if mingw build chain is present. THis means we will
get fully validation of the windows compatability for our nightly builds
Daniel
Index: .cvsignore
===================================================================
RCS file: /data/cvs/libvirt/.cvsignore,v
retrieving revision 1.10
diff -u -p -r1.10 .cvsignore
--- .cvsignore 2 Jan 2008 16:31:21 -0000 1.10
+++ .cvsignore 3 Sep 2008 16:44:21 -0000
@@ -20,6 +20,7 @@ ltconfig
update.log
libvirt.pc
libvirt.spec
+mingw-libvirt.spec
COPYING
m4
ABOUT-NLS
Index: Makefile.am
===================================================================
RCS file: /data/cvs/libvirt/Makefile.am,v
retrieving revision 1.27
diff -u -p -r1.27 Makefile.am
--- Makefile.am 13 Jun 2008 09:08:44 -0000 1.27
+++ Makefile.am 3 Sep 2008 16:44:21 -0000
@@ -10,6 +10,7 @@ ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4
EXTRA_DIST = \
libvirt.spec libvirt.spec.in \
+ mingw-libvirt.spec mingw-libvirt.spec.in \
libvirt.pc libvirt.pc.in \
$(man_MANS) autobuild.sh \
.x-sc_avoid_if_before_free \
Index: autobuild.sh
===================================================================
RCS file: /data/cvs/libvirt/autobuild.sh,v
retrieving revision 1.10
diff -u -p -r1.10 autobuild.sh
--- autobuild.sh 28 Aug 2008 09:08:44 -0000 1.10
+++ autobuild.sh 3 Sep 2008 16:44:21 -0000
@@ -17,8 +17,6 @@ rm -rf coverage
./autogen.sh --prefix="$AUTOBUILD_INSTALL_ROOT" \
--enable-test-coverage \
--enable-compile-warnings=error \
- --with-openvz \
- --with-lxc \
--with-xen-proxy
# If the MAKEFLAGS envvar does not yet include a -j option,
@@ -44,6 +42,7 @@ test -x /usr/bin/lcov && make cov
rm -f *.tar.gz
make dist
+
if [ -f /usr/bin/rpmbuild ]; then
if [ -n "$AUTOBUILD_COUNTER" ]; then
EXTRA_RELEASE=".auto$AUTOBUILD_COUNTER"
@@ -51,5 +50,40 @@ if [ -f /usr/bin/rpmbuild ]; then
NOW=`date +"%s"`
EXTRA_RELEASE=".$USER$NOW"
fi
- rpmbuild --nodeps --define "extra_release $EXTRA_RELEASE" -ta --clean
*.tar.gz
+
+ rpmbuild --nodeps \
+ --define "extra_release $EXTRA_RELEASE" \
+ --define "_sourcedir `pwd`" \
+ -ba --clean libvirt.spec
+fi
+
+if [ -x /usr/bin/i686-pc-mingw32-gcc ]; then
+ make distclean
+
+ PKG_CONFIG_PATH=$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig \
+ CC="i686-pc-mingw32-gcc" \
+ ./configure \
+ --build=$(uname -m)-pc-linux \
+ --host=i686-pc-mingw32 \
+ --prefix=$AUTOBUILD_INSTALL_ROOT/i686-pc-mingw32/sys-root/mingw \
+ --without-sasl \
+ --without-avahi \
+ --without-polkit \
+ --without-python \
+ --without-xen \
+ --without-qemu \
+ --without-lxc \
+ --without-openvz \
+ --without-libvirtd
+
+ make
+ make install
+
+ #set -o pipefail
+ #make check 2>&1 | tee "$RESULTS"
+
+ rpmbuild --nodeps \
+ --define "extra_release $EXTRA_RELEASE" \
+ --define "_sourcedir `pwd`" \
+ -ba --clean mingw-libvirt.spec
fi
Index: configure.in
===================================================================
RCS file: /data/cvs/libvirt/configure.in,v
retrieving revision 1.163
diff -u -p -r1.163 configure.in
--- configure.in 27 Aug 2008 20:05:58 -0000 1.163
+++ configure.in 3 Sep 2008 16:44:21 -0000
@@ -65,10 +65,10 @@ dnl Use --disable-largefile if you don't
AC_SYS_LARGEFILE
dnl Availability of various common functions (non-fatal if missing).
-AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity])
+AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid])
dnl Availability of various common headers (non-fatal if missing).
-AC_CHECK_HEADERS([pwd.h paths.h sys/syslimits.h sys/utsname.h sys/wait.h winsock2.h
sched.h termios.h])
+AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/syslimits.h sys/utsname.h sys/wait.h
winsock2.h sched.h termios.h])
dnl Where are the XDR functions?
dnl If portablexdr is installed, prefer that.
@@ -649,6 +649,20 @@ AC_ARG_WITH([storage-iscsi],
AC_ARG_WITH([storage-disk],
[ --with-storage-disk with GPartd Disk backend for the storage driver
(on)],[],[with_storage_disk=check])
+with_storage_dir=yes
+if test "$with_libvirtd" = "no"; then
+ with_storage_dir=no
+ with_storage_fs=no
+ with_storage_lvm=no
+ with_storage_iscsi=no
+ with_storage_disk=no
+fi
+if test "$with_storage_dir" = "yes" ; then
+ AC_DEFINE_UNQUOTED([WITH_STORAGE_DIR], 1, [whether directory backend for storage driver
is enabled])
+fi
+AM_CONDITIONAL([WITH_STORAGE_DIR], [test "$with_storage_dir" =
"yes"])
+
+
if test "$with_storage_fs" = "yes" -o "$with_storage_fs" =
"check"; then
AC_PATH_PROG([MOUNT], [mount], [], [$PATH:/sbin:/usr/sbin])
AC_PATH_PROG([UMOUNT], [umount], [], [$PATH:/sbin:/usr/sbin])
@@ -1024,7 +1038,7 @@ AC_OUTPUT(Makefile src/Makefile include/
docs/examples/python/Makefile \
gnulib/lib/Makefile \
gnulib/tests/Makefile \
- libvirt.pc libvirt.spec \
+ libvirt.pc libvirt.spec mingw-libvirt.spec \
po/Makefile.in \
include/libvirt/Makefile include/libvirt/libvirt.h \
python/Makefile python/tests/Makefile \
@@ -1053,7 +1067,7 @@ AC_MSG_NOTICE([Libvirtd: $with_libvirtd]
AC_MSG_NOTICE([])
AC_MSG_NOTICE([Storage Drivers])
AC_MSG_NOTICE([])
-AC_MSG_NOTICE([ Dir: yes])
+AC_MSG_NOTICE([ Dir: $with_storage_dir])
AC_MSG_NOTICE([ FS: $with_storage_fs])
AC_MSG_NOTICE([ NetFS: $with_storage_fs])
AC_MSG_NOTICE([ LVM: $with_storage_lvm])
Index: mingw-libvirt.spec.in
===================================================================
RCS file: mingw-libvirt.spec.in
diff -N mingw-libvirt.spec.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mingw-libvirt.spec.in 3 Sep 2008 16:44:21 -0000
@@ -0,0 +1,89 @@
+%define __os_install_post /usr/lib/rpm/brp-compress %{nil}
+
+Name: mingw-libvirt
+Version: @VERSION@
+Release: 1%{?dist}%{?extra_release}
+Summary: MinGW Windows libvirt virtualization library
+
+License: LGPLv2+
+Group: Development/Libraries
+URL:
http://www.libvirt.org/
+Source0:
ftp://libvirt.org/libvirt/libvirt-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires: mingw-gcc
+BuildRequires: mingw-binutils
+BuildRequires: mingw-libgpg-error
+BuildRequires: mingw-libgcrypt
+BuildRequires: mingw-gnutls
+BuildRequires: mingw-libxml2
+BuildRequires: mingw-portablexdr
+
+Requires: mingw-runtime
+Requires: mingw-libgpg-error
+Requires: mingw-libgcrypt
+Requires: mingw-gnutls
+Requires: mingw-libxml2
+
+%description
+MinGW Windows libvirt virtualization library.
+
+
+%prep
+%setup -q -n libvirt-%{version}
+
+
+%build
+# XXX enable SASL in future
+PKG_CONFIG_PATH="%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig" \
+CC="i686-pc-mingw32-gcc" \
+CFLAGS="-O2 -g -Wall -pipe" \
+./configure \
+ --build=%_build \
+ --host=i686-pc-mingw32 \
+ --prefix=%{_prefix}/i686-pc-mingw32/sys-root/mingw \
+ --without-sasl \
+ --without-avahi \
+ --without-polkit \
+ --without-python \
+ --without-xen \
+ --without-qemu \
+ --without-lxc \
+ --without-openvz \
+ --without-libvirtd
+make
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make DESTDIR=$RPM_BUILD_ROOT install
+
+rm -rf $RPM_BUILD_ROOT/%{_prefix}/i686-pc-mingw32/sys-root/mingw/etc/libvirt
+rm -rf $RPM_BUILD_ROOT/%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/doc/*
+rm -rf $RPM_BUILD_ROOT/%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/gtk-doc/*
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files
+%defattr(-,root,root)
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/bin/libvirt-0.dll
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/bin/virsh.exe
+
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/libvirt.a
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/libvirt.dll.a
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/libvirt.la
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/lib/pkgconfig/libvirt.pc
+
+%dir %{_prefix}/i686-pc-mingw32/sys-root/mingw/include/libvirt
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/include/libvirt/libvirt.h
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/include/libvirt/virterror.h
+
+%{_prefix}/i686-pc-mingw32/sys-root/mingw/share/man/man1/virsh.1*
+
+
+%changelog
+* Tue Sep 2 2008 Daniel P. Berrange <berrange(a)redhat.com> - 0.4.4-1
+- Initial RPM release, largely based on earlier work from several sources.
Index: qemud/remote_protocol.c
===================================================================
RCS file: /data/cvs/libvirt/qemud/remote_protocol.c,v
retrieving revision 1.17
diff -u -p -r1.17 remote_protocol.c
--- qemud/remote_protocol.c 27 Aug 2008 20:05:59 -0000 1.17
+++ qemud/remote_protocol.c 3 Sep 2008 16:44:22 -0000
@@ -6,6 +6,7 @@
#include "remote_protocol.h"
#include <config.h>
#include "internal.h"
+#include "socketcompat.h"
bool_t
xdr_remote_nonnull_string (XDR *xdrs, remote_nonnull_string *objp)
Index: qemud/remote_protocol.h
===================================================================
RCS file: /data/cvs/libvirt/qemud/remote_protocol.h,v
retrieving revision 1.17
diff -u -p -r1.17 remote_protocol.h
--- qemud/remote_protocol.h 27 Aug 2008 20:05:59 -0000 1.17
+++ qemud/remote_protocol.h 3 Sep 2008 16:44:22 -0000
@@ -15,6 +15,7 @@ extern "C" {
#include <config.h>
#include "internal.h"
+#include "socketcompat.h"
#define REMOTE_MESSAGE_MAX 262144
#define REMOTE_STRING_MAX 65536
Index: qemud/remote_protocol.x
===================================================================
RCS file: /data/cvs/libvirt/qemud/remote_protocol.x,v
retrieving revision 1.17
diff -u -p -r1.17 remote_protocol.x
--- qemud/remote_protocol.x 27 Aug 2008 20:05:59 -0000 1.17
+++ qemud/remote_protocol.x 3 Sep 2008 16:44:22 -0000
@@ -38,6 +38,7 @@
%#include <config.h>
%#include "internal.h"
+%#include "socketcompat.h"
/*----- Data types. -----*/
Index: src/Makefile.am
===================================================================
RCS file: /data/cvs/libvirt/src/Makefile.am,v
retrieving revision 1.92
diff -u -p -r1.92 Makefile.am
--- src/Makefile.am 27 Aug 2008 11:19:45 -0000 1.92
+++ src/Makefile.am 3 Sep 2008 16:44:22 -0000
@@ -58,7 +58,8 @@ NETWORK_CONF_SOURCES = \
# Storage driver generic impl APIs
STORAGE_CONF_SOURCES = \
- storage_conf.h storage_conf.c
+ storage_conf.h storage_conf.c \
+ storage_backend.h storage_backend.c
# The remote RPC driver, covering domains, storage, networks, etc
@@ -109,8 +110,7 @@ QEMU_DRIVER_SOURCES = \
# And finally storage backend specific impls
STORAGE_DRIVER_SOURCES = \
- storage_driver.h storage_driver.c \
- storage_backend.h storage_backend.c
+ storage_driver.h storage_driver.c
STORAGE_DRIVER_FS_SOURCES = \
storage_backend_fs.h storage_backend_fs.c
Index: src/storage_backend.c
===================================================================
RCS file: /data/cvs/libvirt/src/storage_backend.c,v
retrieving revision 1.20
diff -u -p -r1.20 storage_backend.c
--- src/storage_backend.c 27 Aug 2008 11:42:52 -0000 1.20
+++ src/storage_backend.c 3 Sep 2008 16:44:22 -0000
@@ -24,9 +24,13 @@
#include <config.h>
#include <string.h>
+#if HAVE_REGEX_H
#include <regex.h>
+#endif
#include <sys/types.h>
+#if HAVE_SYS_WAIT_H
#include <sys/wait.h>
+#endif
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
@@ -38,6 +42,10 @@
#endif
#include "internal.h"
+#include "util.h"
+#include "memory.h"
+
+#include "storage_backend.h"
#if WITH_STORAGE_LVM
#include "storage_backend_logical.h"
@@ -48,15 +56,14 @@
#if WITH_STORAGE_DISK
#include "storage_backend_disk.h"
#endif
-
-#include "util.h"
-#include "memory.h"
-
-#include "storage_backend.h"
+#if WITH_STORAGE_DIR
#include "storage_backend_fs.h"
+#endif
static virStorageBackendPtr backends[] = {
+#if WITH_STORAGE_DIR
&virStorageBackendDirectory,
+#endif
#if WITH_STORAGE_FS
&virStorageBackendFileSystem,
&virStorageBackendNetFileSystem,
@@ -209,8 +216,12 @@ virStorageBackendUpdateVolInfoFD(virConn
return -2;
if (S_ISREG(sb.st_mode)) {
+#ifndef __MINGW32__
vol->allocation = (unsigned long long)sb.st_blocks *
(unsigned long long)sb.st_blksize;
+#else
+ vol->allocation = sb.st_size;
+#endif
/* Regular files may be sparse, so logical size (capacity) is not same
* as actual allocation above
*/
@@ -337,6 +348,8 @@ virStorageBackendStablePath(virConnectPt
return devpath;
}
+
+#ifndef __MINGW32__
/*
* Run an external program.
*
@@ -620,3 +633,33 @@ virStorageBackendRunProgNul(virConnectPt
return 0;
}
+
+#else
+
+int
+virStorageBackendRunProgRegex(virConnectPtr conn,
+ virStoragePoolObjPtr pool ATTRIBUTE_UNUSED,
+ const char *const*prog ATTRIBUTE_UNUSED,
+ int nregex ATTRIBUTE_UNUSED,
+ const char **regex ATTRIBUTE_UNUSED,
+ int *nvars ATTRIBUTE_UNUSED,
+ virStorageBackendListVolRegexFunc func ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED,
+ int *outexit ATTRIBUTE_UNUSED)
+{
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, _("%s no implemented on
Win32"), __FUNCTION__);
+ return -1;
+}
+
+int
+virStorageBackendRunProgNul(virConnectPtr conn,
+ virStoragePoolObjPtr pool ATTRIBUTE_UNUSED,
+ const char **prog ATTRIBUTE_UNUSED,
+ size_t n_columns ATTRIBUTE_UNUSED,
+ virStorageBackendListVolNulFunc func ATTRIBUTE_UNUSED,
+ void *data ATTRIBUTE_UNUSED)
+{
+ virStorageReportError(conn, VIR_ERR_INTERNAL_ERROR, _("%s no implemented on
Win32"), __FUNCTION__);
+ return -1;
+}
+#endif
Index: src/storage_conf.c
===================================================================
RCS file: /data/cvs/libvirt/src/storage_conf.c,v
retrieving revision 1.13
diff -u -p -r1.13 storage_conf.c
--- src/storage_conf.c 3 Sep 2008 07:12:37 -0000 1.13
+++ src/storage_conf.c 3 Sep 2008 16:44:22 -0000
@@ -189,7 +189,11 @@ virStoragePoolDefParsePerms(virConnectPt
}
if (virXPathNode(conn, "/pool/permissions/owner", ctxt) == NULL) {
+#if HAVE_GETUID
perms->uid = getuid();
+#else
+ perms->uid = 0;
+#endif
} else {
if (virXPathLong(conn, "number(/pool/permissions/owner)", ctxt, &v)
< 0) {
virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -200,7 +204,11 @@ virStoragePoolDefParsePerms(virConnectPt
}
if (virXPathNode(conn, "/pool/permissions/group", ctxt) == NULL) {
- perms->uid = getgid();
+#if HAVE_GETGID
+ perms->gid = getgid();
+#else
+ perms->gid = 0;
+#endif
} else {
if (virXPathLong(conn, "number(/pool/permissions/group)", ctxt, &v)
< 0) {
virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -425,7 +433,7 @@ virStoragePoolDefParse(virConnectPtr con
if (!xml) {
if (conn && conn->err.code == VIR_ERR_NONE)
virStorageReportError(conn, VIR_ERR_XML_ERROR,
- _("failed to parse xml document"));
+ "%s",_("failed to parse xml
document"));
goto cleanup;
}
@@ -590,7 +598,11 @@ virStorageVolDefParsePerms(virConnectPtr
}
if (virXPathNode(conn, "/volume/permissions/owner", ctxt) == NULL) {
+#if HAVE_GETUID
perms->uid = getuid();
+#else
+ perms->uid = 0;
+#endif
} else {
if (virXPathLong(conn, "number(/volume/permissions/owner)", ctxt,
&v) < 0) {
virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -600,7 +612,11 @@ virStorageVolDefParsePerms(virConnectPtr
perms->uid = (int)v;
}
if (virXPathNode(conn, "/volume/permissions/group", ctxt) == NULL) {
+#if HAVE_GETGID
perms->gid = getgid();
+#else
+ perms->gid = 0;
+#endif
} else {
if (virXPathLong(conn, "number(/volume/permissions/group)", ctxt,
&v) < 0) {
virStorageReportError(conn, VIR_ERR_XML_ERROR,
@@ -799,7 +815,7 @@ virStorageVolDefParse(virConnectPtr conn
if (!xml) {
if (conn && conn->err.code == VIR_ERR_NONE)
virStorageReportError(conn, VIR_ERR_XML_ERROR,
- _("failed to parse xml document"));
+ "%s", _("failed to parse xml
document"));
goto cleanup;
}
Index: src/util.c
===================================================================
RCS file: /data/cvs/libvirt/src/util.c,v
retrieving revision 1.56
diff -u -p -r1.56 util.c
--- src/util.c 2 Sep 2008 10:29:51 -0000 1.56
+++ src/util.c 3 Sep 2008 16:44:22 -0000
@@ -440,22 +440,13 @@ virRun(virConnectPtr conn,
int
virExec(virConnectPtr conn,
const char *const*argv ATTRIBUTE_UNUSED,
+ const char *const*envp ATTRIBUTE_UNUSED,
+ const fd_set *keepfd ATTRIBUTE_UNUSED,
int *retpid ATTRIBUTE_UNUSED,
int infd ATTRIBUTE_UNUSED,
int *outfd ATTRIBUTE_UNUSED,
- int *errfd ATTRIBUTE_UNUSED)
-{
- ReportError (conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__);
- return -1;
-}
-
-int
-virExecNonBlock(virConnectPtr conn,
- const char *const*argv ATTRIBUTE_UNUSED,
- int *retpid ATTRIBUTE_UNUSED,
- int infd ATTRIBUTE_UNUSED,
- int *outfd ATTRIBUTE_UNUSED,
- int *errfd ATTRIBUTE_UNUSED)
+ int *errfd ATTRIBUTE_UNUSED,
+ int flags ATTRIBUTE_UNUSED)
{
ReportError (conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__);
return -1;
--
|: 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 :|