qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] build: qga: add macro to force use of native mi


From: Michael Roth
Subject: Re: [Qemu-devel] [PATCH] build: qga: add macro to force use of native mingw32 assert()
Date: Sat, 10 Nov 2018 18:18:31 -0600
User-agent: alot/0.7

Quoting Philippe Mathieu-Daudé (2018-11-10 13:34:25)
> Hi Michael,
> 
> On 11/9/18 5:00 PM, Michael Roth wrote:
> > When building qemu-ga for w32 with VSS support, some parts of qemu-ga
> > are not linked against glib, specifically the C++ bits used to
> > create the VSS provider DLL. With 3ebee3b191e, we now define assert()
> > as g_assert() for all mingw32 builds via osdep.h, which results in the
> > following build breakage:
> > 
> >   x86_64-w64-mingw32-g++ -o qga/vss-win32/qga-vss.dll 
> > qga/vss-win32/requester.o qga/vss-win32/provider.o qga/vss-win32/install.o 
> > /home/mdroth/w/qemu4.git/qga/vss-win32/qga-vss.def  -shared 
> > -Wl,--add-stdcall-alias,--enable-stdcall-fixup -lole32 -loleaut32 -lshlwapi 
> > -luuid -static
> >   qga/vss-win32/requester.o: In function `requester_freeze':
> >   /home/mdroth/w/qemu4.git/qga/vss-win32/requester.cpp:284: undefined 
> > reference to `g_assertion_message_expr'
> >   qga/vss-win32/requester.o: In function `requester_thaw':
> >   /home/mdroth/w/qemu4.git/qga/vss-win32/requester.cpp:508: undefined 
> > reference to `g_assertion_message_expr'
> >   /home/mdroth/w/qemu4.git/qga/vss-win32/requester.cpp:509: undefined 
> > reference to `g_assertion_message_expr'
> >   collect2: error: ld returned 1 exit status
> >   make: *** [/home/mdroth/w/qemu4.git/qga/vss-win32/Makefile.objs:10: 
> > qga/vss-win32/qga-vss.dll] Error 1
> >   make: *** Waiting for unfinished jobs....
> > 
> > Fix this by introducing a USE_NATIVE_MINGW32_ASSERT macro that can
> > be defined prior to inclusion of osdep.h in individual C/C++ files
> > that don't link against glib.
> > 
> > Cc: Richard Henderson <address@hidden>
> > Signed-off-by: Michael Roth <address@hidden>
> > ---
> >  include/qemu/osdep.h        | 2 +-
> >  qga/vss-win32/install.cpp   | 2 +-
> >  qga/vss-win32/provider.cpp  | 2 +-
> >  qga/vss-win32/requester.cpp | 2 +-
> >  qga/vss-win32/vss-common.h  | 2 ++
> >  5 files changed, 6 insertions(+), 4 deletions(-)
> > 
> > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> > index 3bf48bcdec..59364bfeb0 100644
> > --- a/include/qemu/osdep.h
> > +++ b/include/qemu/osdep.h
> > @@ -129,7 +129,7 @@ extern int daemon(int, int);
> >   * code that is unreachable when features are disabled.
> >   * All supported versions of Glib's g_assert() satisfy this requirement.
> >   */
> > -#ifdef __MINGW32__
> > +#if defined(__MINGW32__) && !defined(USE_NATIVE_MINGW32_ASSERT)
> >  #undef assert
> >  #define assert(x)  g_assert(x)
> >  #endif
> 
> OK.
> 
> > diff --git a/qga/vss-win32/install.cpp b/qga/vss-win32/install.cpp
> > index 6713e58670..6ed2d5930c 100644
> > --- a/qga/vss-win32/install.cpp
> > +++ b/qga/vss-win32/install.cpp
> > @@ -10,9 +10,9 @@
> >   * See the COPYING file in the top-level directory.
> >   */
> >  
> > +#include "vss-common.h"
> >  #include "qemu/osdep.h"
> 
> I don't like breaking the rule and not using "qemu/osdep.h" first.
> (See below for suggestion).

Yah, if it can be easily avoided that's probably the better route.

> 
> >  
> > -#include "vss-common.h"
> >  #include <inc/win2003/vscoordint.h>
> >  #include "install.h"
> >  #include <wbemidl.h>
> > diff --git a/qga/vss-win32/provider.cpp b/qga/vss-win32/provider.cpp
> > index 72d8b0e19d..d298af91b2 100644
> > --- a/qga/vss-win32/provider.cpp
> > +++ b/qga/vss-win32/provider.cpp
> > @@ -10,8 +10,8 @@
> >   * See the COPYING file in the top-level directory.
> >   */
> >  
> > -#include "qemu/osdep.h"
> >  #include "vss-common.h"
> > +#include "qemu/osdep.h"
> 
> Ditto.
> 
> >  #include <inc/win2003/vscoordint.h>
> >  #include <inc/win2003/vsprov.h>
> >  
> > diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
> > index 5378c55d23..d239bd9598 100644
> > --- a/qga/vss-win32/requester.cpp
> > +++ b/qga/vss-win32/requester.cpp
> > @@ -10,8 +10,8 @@
> >   * See the COPYING file in the top-level directory.
> >   */
> >  
> > -#include "qemu/osdep.h"
> >  #include "vss-common.h"
> > +#include "qemu/osdep.h"
> 
> Ditto.
> 
> >  #include "requester.h"
> >  #include "install.h"
> >  #include <inc/win2003/vswriter.h>
> > diff --git a/qga/vss-win32/vss-common.h b/qga/vss-win32/vss-common.h
> > index 61c170b52e..275cbb59c5 100644
> > --- a/qga/vss-win32/vss-common.h
> > +++ b/qga/vss-win32/vss-common.h
> > @@ -13,6 +13,8 @@
> >  #ifndef VSS_COMMON_H
> >  #define VSS_COMMON_H
> >  
> > +#define USE_NATIVE_MINGW32_ASSERT
> 
> I believe you can add this in the "VSS SDK" section of the ./configure
> script:
> 
> -- >8 --
> diff --git a/configure b/configure
> @@ -4588,7 +4588,7 @@ int main(void) { return VSS_CTX_BACKUP; }
>  EOF
>    if compile_prog "$vss_win32_include" "" ; then
>      guest_agent_with_vss="yes"
> -    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
> +    QEMU_CFLAGS="$QEMU_CFLAGS -DUSE_NATIVE_MINGW32_ASSERT
> $vss_win32_include"
>      libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++
> -Wl,--enable-stdcall-fixup $libs_qga"
>      qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
>    else
> ---
> 
> What do you think?

This may pass it on to the qemu build itself, but something similar for
just the VSS DLL target might do the trick. I'll give that a shot,
thanks.

> 
> Regards,
> 
> Phil.
> 
> > +
> >  #define __MIDL_user_allocate_free_DEFINED__
> >  #include <windows.h>
> >  #include <shlwapi.h>
> > 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]