diff mbox

[qemu-ga] qga: Make qemu-ga compile statically for Windows

Message ID 20170322130952.8997-1-sameeh@daynix.com
State New
Headers show

Commit Message

Sameeh Jubran March 22, 2017, 1:09 p.m. UTC
Attempting to compile qemu-ga statically as follows for Windows causes
the following error:

Compilation:
    ./configure --disable-docs --target-list=x86_64-softmmu \
    --cross-prefix=x86_64-w64-mingw32- --static \
    --enable-guest-agent-msi --with-vss-sdk=/path/to/VSSSDK72

    make -j8 qemu-ga

Error:
    path/to/qemu/stubs/error-printf.c:7: undefined reference to `__imp_g_test_config_vars'
    collect2: error: ld returned 1 exit status
    Makefile:444: recipe for target 'qemu-ga.exe' failed
    make: *** [qemu-ga.exe] Error 1

This is caused by a bug in the pkg-config file for glib as it doesn't define
GLIB_STATIC_COMPILATION for pkg-config --static.

Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
---
 configure | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Peter Maydell March 22, 2017, 1:21 p.m. UTC | #1
On 22 March 2017 at 13:09, Sameeh Jubran <sameeh@daynix.com> wrote:
> Attempting to compile qemu-ga statically as follows for Windows causes
> the following error:
>
> Compilation:
>     ./configure --disable-docs --target-list=x86_64-softmmu \
>     --cross-prefix=x86_64-w64-mingw32- --static \
>     --enable-guest-agent-msi --with-vss-sdk=/path/to/VSSSDK72
>
>     make -j8 qemu-ga
>
> Error:
>     path/to/qemu/stubs/error-printf.c:7: undefined reference to `__imp_g_test_config_vars'
>     collect2: error: ld returned 1 exit status
>     Makefile:444: recipe for target 'qemu-ga.exe' failed
>     make: *** [qemu-ga.exe] Error 1
>
> This is caused by a bug in the pkg-config file for glib as it doesn't define
> GLIB_STATIC_COMPILATION for pkg-config --static.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
> Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
> @@ -4138,7 +4138,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="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS $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

If we need this for static glib compilation we should
be adding it where we do the "test for glib and
add glib related flags to the CFLAGS", not in the
part of configure where we decide that we're
compiling the guest agent.

Also, please can we have a comment that clearly states
why we need this and that we're working around a
packaging bug in glib for Windows, please?

thanks
-- PMM
Marc-André Lureau March 22, 2017, 1:29 p.m. UTC | #2
Hi

On Wed, Mar 22, 2017 at 5:11 PM Sameeh Jubran <sameeh@daynix.com> wrote:

> Attempting to compile qemu-ga statically as follows for Windows causes
> the following error:
>
> Compilation:
>     ./configure --disable-docs --target-list=x86_64-softmmu \
>     --cross-prefix=x86_64-w64-mingw32- --static \
>     --enable-guest-agent-msi --with-vss-sdk=/path/to/VSSSDK72
>
>     make -j8 qemu-ga
>
> Error:
>     path/to/qemu/stubs/error-printf.c:7: undefined reference to
> `__imp_g_test_config_vars'
>     collect2: error: ld returned 1 exit status
>     Makefile:444: recipe for target 'qemu-ga.exe' failed
>     make: *** [qemu-ga.exe] Error 1
>

weird, I don't get this error on fedora 25 (but I have no vss-sdk, is that
related?).


>
> This is caused by a bug in the pkg-config file for glib as it doesn't
> define
> GLIB_STATIC_COMPILATION for pkg-config --static.
>

If that's a bug in glib, it would be nice to have a link to a bug report.


>
> Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
> Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
>
---
>  configure | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/configure b/configure
> index b9a30cf..6f7b460 100755
> --- a/configure
> +++ b/configure
> @@ -4138,7 +4138,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="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS
> $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
> --
> 2.9.3
>
>
> --
Marc-André Lureau
Sameeh Jubran March 22, 2017, 2:11 p.m. UTC | #3
On Wed, Mar 22, 2017 at 3:29 PM, Marc-André Lureau <
marcandre.lureau@gmail.com> wrote:

> Hi
>
> On Wed, Mar 22, 2017 at 5:11 PM Sameeh Jubran <sameeh@daynix.com> wrote:
>
>> Attempting to compile qemu-ga statically as follows for Windows causes
>> the following error:
>>
>> Compilation:
>>     ./configure --disable-docs --target-list=x86_64-softmmu \
>>     --cross-prefix=x86_64-w64-mingw32- --static \
>>     --enable-guest-agent-msi --with-vss-sdk=/path/to/VSSSDK72
>>
>>     make -j8 qemu-ga
>>
>> Error:
>>     path/to/qemu/stubs/error-printf.c:7: undefined reference to
>> `__imp_g_test_config_vars'
>>     collect2: error: ld returned 1 exit status
>>     Makefile:444: recipe for target 'qemu-ga.exe' failed
>>     make: *** [qemu-ga.exe] Error 1
>>
>
> weird, I don't get this error on fedora 25 (but I have no vss-sdk, is that
> related?).
>
Can you please try it with vss-sdk (
https://www.microsoft.com/en-us/download/details.aspx?id=23490)

>
>
>>
>> This is caused by a bug in the pkg-config file for glib as it doesn't
>> define
>> GLIB_STATIC_COMPILATION for pkg-config --static.
>>
>
> If that's a bug in glib, it would be nice to have a link to a bug report.
>
I've just filed a bug report:
https://bugzilla.gnome.org/show_bug.cgi?id=780399
<https://bugzilla.gnome.org/show_bug.cgi?id=780399>

>
>
>>
>> Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
>> Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
>>
> ---
>>  configure | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/configure b/configure
>> index b9a30cf..6f7b460 100755
>> --- a/configure
>> +++ b/configure
>> @@ -4138,7 +4138,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="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS
>> $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
>> --
>> 2.9.3
>>
>>
>> --
> Marc-André Lureau
>
Sameeh Jubran March 22, 2017, 2:12 p.m. UTC | #4
On Wed, Mar 22, 2017 at 3:21 PM, Peter Maydell <peter.maydell@linaro.org>
wrote:

> On 22 March 2017 at 13:09, Sameeh Jubran <sameeh@daynix.com> wrote:
> > Attempting to compile qemu-ga statically as follows for Windows causes
> > the following error:
> >
> > Compilation:
> >     ./configure --disable-docs --target-list=x86_64-softmmu \
> >     --cross-prefix=x86_64-w64-mingw32- --static \
> >     --enable-guest-agent-msi --with-vss-sdk=/path/to/VSSSDK72
> >
> >     make -j8 qemu-ga
> >
> > Error:
> >     path/to/qemu/stubs/error-printf.c:7: undefined reference to
> `__imp_g_test_config_vars'
> >     collect2: error: ld returned 1 exit status
> >     Makefile:444: recipe for target 'qemu-ga.exe' failed
> >     make: *** [qemu-ga.exe] Error 1
> >
> > This is caused by a bug in the pkg-config file for glib as it doesn't
> define
> > GLIB_STATIC_COMPILATION for pkg-config --static.
> >
> > Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
> > Signed-off-by: Sameeh Jubran <sameeh@daynix.com>
> > @@ -4138,7 +4138,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="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS
> $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
>
> If we need this for static glib compilation we should
> be adding it where we do the "test for glib and
> add glib related flags to the CFLAGS", not in the
> part of configure where we decide that we're
> compiling the guest agent.
>
> Also, please can we have a comment that clearly states
> why we need this and that we're working around a
> packaging bug in glib for Windows, please?
>
sure, no problem.

>
> thanks
> -- PMM
>
diff mbox

Patch

diff --git a/configure b/configure
index b9a30cf..6f7b460 100755
--- a/configure
+++ b/configure
@@ -4138,7 +4138,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="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS $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