
On 08/17/2010 10:48 AM, Stefan Berger wrote:
On 08/17/2010 12:25 PM, Daniel P. Berrange wrote:
On Tue, Aug 17, 2010 at 12:14:47PM -0400, Stefan Berger wrote:
When doing './autogen.sh --with-sasl --with-libvirtd=no' on cygwin, I needed to #include netinet/in.h for a successful build. Now authentication using SASL works. Hmm, this is the sort of thing that GNULIB usually fixes for us. What is the compile error without this patch present ? Ideally we can get GNULIB to fix it
Well, gnulib does not yet offer any replacements for the <rpc/....h> headers, in part because they are not standardized by POSIX. That's certainly a larger task than just working around it for now in libvirt. The real question here is whether cygwin's <rpc/rpc.h> is broken because it is not self-sufficient, or whether the compile error is due to something else that libvirt is doing. Which is why the actual compile message is important (so I went and reproduced this setup - it took me more than an hour to get to the failure point)...
It complains about an incomplete datatype due to sockaddr_in being used in rpc/svc.h (xp_raddr in SVCXPRT struct).
I could not reproduce the failure with the latest cygwin: cygwin 1.7.6-1 OK libsasl2-devel 2.1.23-1 OK libxml2-devel 2.7.7-1 OK sunrpc 4.0-3 OK What versions do you have installed? (Not sure if I have any other relevant installed packages that I didn't list here). More particularly, I see that cygwin's <rpc/svc.h> has a blind reference to sockaddr_in inside struct SVCXPRT, but libvirt includes the master file <rpc/rpc.h> which includes <rpc/types.h> prior to <rpc/svc.h>; and <rpc/types.h> includes <netinet/in.h>.
+++ b/src/remote/qemu_protocol.h @@ -6,6 +6,9 @@ #ifndef _RP_QEMU_H_RPCGEN #define _RP_QEMU_H_RPCGEN
+#ifdef __CYGWIN__ +# include <netinet/in.h> +#endif #include <rpc/rpc.h>
If we decide to apply this, then lose the #ifdef __CYGWIN__. There's nothing wrong with making this #include unconditional, particularly since POSIX is clear that sockaddr_in may be defined in several headers (<arpa/inet.h>, <netdb.h>), but only must be defined in <netinit/in.h>, and since gnulib guarantees that <netinet/in.h> will exist. glibc's implementation is a bit looser and provides sockaddr_in in more places, but that's no excuse for us to depend on that laziness. But since I think upgrading the installation on your end will clear up the compilation problem, I'm inclined to NAK this patch. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org