On Thu, Sep 04, 2008 at 08:24:14AM +0200, Jim Meyering wrote:
"Daniel P. Berrange" <berrange(a)redhat.com> 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(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 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 :|