On Thu, Sep 04, 2008 at 08:24:14AM +0200, Jim Meyering wrote: > "Daniel P. Berrange" <berrange@xxxxxxxxxx> wrote: > > 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. > ... > > 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 > Instead of adding the #if/else blocks above, > how about adding these in some header file? > > #ifndef HAVE_GETGID > static inline gid_t getgid (void) { return 0; } > #endif > > #ifndef HAVE_GETUID > static inline uid_t getuid (void) { return 0; } > #endif Attached is a version with that change - though I had to make it 'int' for the return type since uid_t/gid_t don't exist on mingw either. Not that it matters, since we store the result in an int anyway 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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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.164 diff -u -p -r1.164 configure.in --- configure.in 4 Sep 2008 10:44:23 -0000 1.164 +++ configure.in 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 4 Sep 2008 11:00:17 -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 not 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 not 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 4 Sep 2008 11:00:17 -0000 @@ -200,7 +200,7 @@ virStoragePoolDefParsePerms(virConnectPt } if (virXPathNode(conn, "/pool/permissions/group", ctxt) == NULL) { - perms->uid = getgid(); + perms->gid = getgid(); } else { if (virXPathLong(conn, "number(/pool/permissions/group)", ctxt, &v) < 0) { virStorageReportError(conn, VIR_ERR_XML_ERROR, @@ -425,7 +425,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; } @@ -799,7 +799,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 4 Sep 2008 11:00:17 -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; Index: src/util.h =================================================================== RCS file: /data/cvs/libvirt/src/util.h,v retrieving revision 1.27 diff -u -p -r1.27 util.h --- src/util.h 2 Sep 2008 10:29:51 -0000 1.27 +++ src/util.h 4 Sep 2008 11:00:17 -0000 @@ -144,4 +144,12 @@ const char *virEnumToString(const char * const char *name ## TypeToString(int type); \ int name ## TypeFromString(const char*type); +#ifndef HAVE_GETUID +static inline int getuid (void) { return 0; } +#endif + +#ifndef HAVE_GETGID +static inline int getgid (void) { return 0; } +#endif + #endif /* __VIR_UTIL_H__ */ Daniel -- |: 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