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@xxxxxxxxxx> - 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 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list