diff mbox

qga: fix build for older versions of mingw

Message ID 1436289212-14756-1-git-send-email-okrishtal@parallels.com
State New
Headers show

Commit Message

Olga Krishtal July 7, 2015, 5:13 p.m. UTC
Peter, can you try this patch on your system?

In mingw older than mingw64-headers-4.0.2-1.el7.noarch
header ntddscsi.h can be found in include/ddk, however
compiler does not look there. This breaks the compilation.

The patch adds this directory in QEMU_INCLUDES.

Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
---
 configure | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Denis V. Lunev July 7, 2015, 6:06 p.m. UTC | #1
On 07/07/15 20:13, Olga Krishtal wrote:
> Peter, can you try this patch on your system?
>
> In mingw older than mingw64-headers-4.0.2-1.el7.noarch
> header ntddscsi.h can be found in include/ddk, however
> compiler does not look there. This breaks the compilation.
>
> The patch adds this directory in QEMU_INCLUDES.
>
> Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
> ---
>   configure | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/configure b/configure
> index 52cfe18..ada8895 100755
> --- a/configure
> +++ b/configure
> @@ -3763,7 +3763,6 @@ if test "$usb_redir" != "no" ; then
>           usb_redir="no"
>       fi
>   fi
> -
>   ##########################################
>   # check if we have VSS SDK headers for win
>
> @@ -3820,6 +3819,14 @@ if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss"
>   fi
>
>   ##########################################
> +# mingw package on Linux is quite different with different versions. ntddscsi.h
> +# can be found sys-root/mingw/include and in sys-root/mingw/include/ddk
> +# Add ddk directory to lookup path automatically
> +if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
> +  QEMU_INCLUDES="$QEMU_INCLUDES -I`$cc -print-sysroot`/mingw/include/ddk"
> +fi
> +
> +##########################################
>   # Guest agent Window MSI  package
>
>   if test "$guest_agent" != yes; then
>

actually this is a dirty hack, but we want to
know whether additional include directory help or not.
If this helps, we could think how to avoid extra
configuration option and ifdef in the code.

Den
Peter Maydell July 7, 2015, 7:16 p.m. UTC | #2
On 7 July 2015 at 19:06, Denis V. Lunev <den-lists@parallels.com> wrote:
> On 07/07/15 20:13, Olga Krishtal wrote:
>>
>> Peter, can you try this patch on your system?
>>
>> In mingw older than mingw64-headers-4.0.2-1.el7.noarch
>> header ntddscsi.h can be found in include/ddk, however
>> compiler does not look there. This breaks the compilation.
>>
>> The patch adds this directory in QEMU_INCLUDES.
>>
>> Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
>> ---
>>   configure | 9 ++++++++-
>>   1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/configure b/configure
>> index 52cfe18..ada8895 100755
>> --- a/configure
>> +++ b/configure
>> @@ -3763,7 +3763,6 @@ if test "$usb_redir" != "no" ; then
>>           usb_redir="no"
>>       fi
>>   fi
>> -
>>   ##########################################
>>   # check if we have VSS SDK headers for win
>>
>> @@ -3820,6 +3819,14 @@ if test "$mingw32" = "yes" -a "$guest_agent" !=
>> "no" -a "$guest_agent_with_vss"
>>   fi
>>
>>   ##########################################
>> +# mingw package on Linux is quite different with different versions.
>> ntddscsi.h
>> +# can be found sys-root/mingw/include and in sys-root/mingw/include/ddk
>> +# Add ddk directory to lookup path automatically
>> +if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
>> +  QEMU_INCLUDES="$QEMU_INCLUDES -I`$cc -print-sysroot`/mingw/include/ddk"
>> +fi
>> +
>> +##########################################
>>   # Guest agent Window MSI  package
>>
>>   if test "$guest_agent" != yes; then
>>
>
> actually this is a dirty hack, but we want to
> know whether additional include directory help or not.
> If this helps, we could think how to avoid extra
> configuration option and ifdef in the code.

I agree it's a pretty nasty hack :-)

Unfortunately my build machine is going to be running
flat out processing all the last-minute pull requests.
I won't be able to test this until tomorrow at best.

-- PMM
Michael Roth July 7, 2015, 8:02 p.m. UTC | #3
Quoting Peter Maydell (2015-07-07 14:16:29)
> On 7 July 2015 at 19:06, Denis V. Lunev <den-lists@parallels.com> wrote:
> > On 07/07/15 20:13, Olga Krishtal wrote:
> >>
> >> Peter, can you try this patch on your system?
> >>
> >> In mingw older than mingw64-headers-4.0.2-1.el7.noarch
> >> header ntddscsi.h can be found in include/ddk, however
> >> compiler does not look there. This breaks the compilation.
> >>
> >> The patch adds this directory in QEMU_INCLUDES.
> >>
> >> Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
> >> ---
> >>   configure | 9 ++++++++-
> >>   1 file changed, 8 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/configure b/configure
> >> index 52cfe18..ada8895 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -3763,7 +3763,6 @@ if test "$usb_redir" != "no" ; then
> >>           usb_redir="no"
> >>       fi
> >>   fi
> >> -
> >>   ##########################################
> >>   # check if we have VSS SDK headers for win
> >>
> >> @@ -3820,6 +3819,14 @@ if test "$mingw32" = "yes" -a "$guest_agent" !=
> >> "no" -a "$guest_agent_with_vss"
> >>   fi
> >>
> >>   ##########################################
> >> +# mingw package on Linux is quite different with different versions.
> >> ntddscsi.h
> >> +# can be found sys-root/mingw/include and in sys-root/mingw/include/ddk
> >> +# Add ddk directory to lookup path automatically
> >> +if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
> >> +  QEMU_INCLUDES="$QEMU_INCLUDES -I`$cc -print-sysroot`/mingw/include/ddk"
> >> +fi
> >> +
> >> +##########################################
> >>   # Guest agent Window MSI  package
> >>
> >>   if test "$guest_agent" != yes; then
> >>
> >
> > actually this is a dirty hack, but we want to
> > know whether additional include directory help or not.
> > If this helps, we could think how to avoid extra
> > configuration option and ifdef in the code.
> 
> I agree it's a pretty nasty hack :-)
> 
> Unfortunately my build machine is going to be running
> flat out processing all the last-minute pull requests.
> I won't be able to test this until tomorrow at best.

I've gotten an ubuntu 14.04 mingw environment set up that I think matches yours
fairly closely, so I can give any proposed fixes a spin.

Unfortunately simply pointing to ddk/ntddscsi.h instead of ntddscsi.h
doesn't quite do it:

In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddk.h:76,
                 from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddscsi.h:34,
                 from /home/mdroth/w/qemu4.git/qga/commands-win32.c:25:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1069: error: redefinition of ‘struct _DRIVE_LAYOUT_INFORMATION_MBR’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1073: error: redefinition of ‘struct _DRIVE_LAYOUT_INFORMATION_GPT’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1080: error: redefinition of ‘struct _PARTITION_INFORMATION_MBR’
In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddk.h:76,
                 from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddscsi.h:34,
                 from /home/mdroth/w/qemu4.git/qga/commands-win32.c:25:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3575: error: nested redefinition of ‘enum _PARTITION_STYLE’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3575: error: redeclaration of ‘enum _PARTITION_STYLE’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3576: error: redeclaration of enumerator ‘PARTITION_STYLE_MBR’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/winioctl.h:208: error: previous definition of ‘PARTITION_STYLE_MBR’ was here
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3578: error: redeclaration of enumerator ‘PARTITION_STYLE_GPT’
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/winioctl.h:209: error: previous definition of ‘PARTITION_STYLE_GPT’ was here
...

I'm still trying to make sense of how the headers are organized but the
impression I'm getting is that stuff in ddk/ is meant for kernel code and
doesn't play very nicely with userspace headers. At some point ntddscsi.h
got moved out of ddk/ and #ifdef guards were added all over the place to
make it useable, so it seems likely we'll have to disable the feature
completely for the ddk/ntddscsi.h versions of mingw.

> 
> -- PMM
>
Denis V. Lunev July 7, 2015, 8:04 p.m. UTC | #4
On 07/07/15 23:02, Michael Roth wrote:
> Quoting Peter Maydell (2015-07-07 14:16:29)
>> On 7 July 2015 at 19:06, Denis V. Lunev <den-lists@parallels.com> wrote:
>>> On 07/07/15 20:13, Olga Krishtal wrote:
>>>>
>>>> Peter, can you try this patch on your system?
>>>>
>>>> In mingw older than mingw64-headers-4.0.2-1.el7.noarch
>>>> header ntddscsi.h can be found in include/ddk, however
>>>> compiler does not look there. This breaks the compilation.
>>>>
>>>> The patch adds this directory in QEMU_INCLUDES.
>>>>
>>>> Signed-off-by: Olga Krishtal <okrishtal@parallels.com>
>>>> ---
>>>>    configure | 9 ++++++++-
>>>>    1 file changed, 8 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/configure b/configure
>>>> index 52cfe18..ada8895 100755
>>>> --- a/configure
>>>> +++ b/configure
>>>> @@ -3763,7 +3763,6 @@ if test "$usb_redir" != "no" ; then
>>>>            usb_redir="no"
>>>>        fi
>>>>    fi
>>>> -
>>>>    ##########################################
>>>>    # check if we have VSS SDK headers for win
>>>>
>>>> @@ -3820,6 +3819,14 @@ if test "$mingw32" = "yes" -a "$guest_agent" !=
>>>> "no" -a "$guest_agent_with_vss"
>>>>    fi
>>>>
>>>>    ##########################################
>>>> +# mingw package on Linux is quite different with different versions.
>>>> ntddscsi.h
>>>> +# can be found sys-root/mingw/include and in sys-root/mingw/include/ddk
>>>> +# Add ddk directory to lookup path automatically
>>>> +if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
>>>> +  QEMU_INCLUDES="$QEMU_INCLUDES -I`$cc -print-sysroot`/mingw/include/ddk"
>>>> +fi
>>>> +
>>>> +##########################################
>>>>    # Guest agent Window MSI  package
>>>>
>>>>    if test "$guest_agent" != yes; then
>>>>
>>>
>>> actually this is a dirty hack, but we want to
>>> know whether additional include directory help or not.
>>> If this helps, we could think how to avoid extra
>>> configuration option and ifdef in the code.
>>
>> I agree it's a pretty nasty hack :-)
>>
>> Unfortunately my build machine is going to be running
>> flat out processing all the last-minute pull requests.
>> I won't be able to test this until tomorrow at best.
>
> I've gotten an ubuntu 14.04 mingw environment set up that I think matches yours
> fairly closely, so I can give any proposed fixes a spin.
>
> Unfortunately simply pointing to ddk/ntddscsi.h instead of ntddscsi.h
> doesn't quite do it:
>
> In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddk.h:76,
>                   from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddscsi.h:34,
>                   from /home/mdroth/w/qemu4.git/qga/commands-win32.c:25:
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1069: error: redefinition of ‘struct _DRIVE_LAYOUT_INFORMATION_MBR’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1073: error: redefinition of ‘struct _DRIVE_LAYOUT_INFORMATION_GPT’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:1080: error: redefinition of ‘struct _PARTITION_INFORMATION_MBR’
> In file included from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddk.h:76,
>                   from /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/ntddscsi.h:34,
>                   from /home/mdroth/w/qemu4.git/qga/commands-win32.c:25:
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3575: error: nested redefinition of ‘enum _PARTITION_STYLE’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3575: error: redeclaration of ‘enum _PARTITION_STYLE’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3576: error: redeclaration of enumerator ‘PARTITION_STYLE_MBR’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/winioctl.h:208: error: previous definition of ‘PARTITION_STYLE_MBR’ was here
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:3578: error: redeclaration of enumerator ‘PARTITION_STYLE_GPT’
> /usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/winioctl.h:209: error: previous definition of ‘PARTITION_STYLE_GPT’ was here
> ...
>
> I'm still trying to make sense of how the headers are organized but the
> impression I'm getting is that stuff in ddk/ is meant for kernel code and
> doesn't play very nicely with userspace headers. At some point ntddscsi.h
> got moved out of ddk/ and #ifdef guards were added all over the place to
> make it useable, so it seems likely we'll have to disable the feature
> completely for the ddk/ntddscsi.h versions of mingw.
>
>>
>> -- PMM
>>
>


yep :( this seems so thus we need to disable it if the header is not 
available
diff mbox

Patch

diff --git a/configure b/configure
index 52cfe18..ada8895 100755
--- a/configure
+++ b/configure
@@ -3763,7 +3763,6 @@  if test "$usb_redir" != "no" ; then
         usb_redir="no"
     fi
 fi
-
 ##########################################
 # check if we have VSS SDK headers for win
 
@@ -3820,6 +3819,14 @@  if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss"
 fi
 
 ##########################################
+# mingw package on Linux is quite different with different versions. ntddscsi.h
+# can be found sys-root/mingw/include and in sys-root/mingw/include/ddk
+# Add ddk directory to lookup path automatically
+if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
+  QEMU_INCLUDES="$QEMU_INCLUDES -I`$cc -print-sysroot`/mingw/include/ddk"
+fi
+
+##########################################
 # Guest agent Window MSI  package
 
 if test "$guest_agent" != yes; then