diff mbox series

[v2] configure: Force the C standard to gnu99

Message ID 1547043869-10520-1-git-send-email-thuth@redhat.com (mailing list archive)
State New, archived
Headers show
Series [v2] configure: Force the C standard to gnu99 | expand

Commit Message

Thomas Huth Jan. 9, 2019, 2:24 p.m. UTC
Different versions of GCC and Clang use different versions of the C standard.
This repeatedly caused problems already, e.g. with duplicated typedefs:

 https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html

or with for-loop variable initializers:

 https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg00237.html

To avoid these problems, we should enforce the C language version to the
same level for all compilers. Since our minimum compiler versions is
GCC v4.8, our best option is "gnu99" right now ("gnu17" is not available
there yet, and "gnu11" is marked as "experimental").

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 v2: Use gnu99 instead of gnu11

 configure | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

Daniel P. Berrangé Jan. 9, 2019, 2:31 p.m. UTC | #1
On Wed, Jan 09, 2019 at 03:24:29PM +0100, Thomas Huth wrote:
> Different versions of GCC and Clang use different versions of the C standard.
> This repeatedly caused problems already, e.g. with duplicated typedefs:
> 
>  https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html
> 
> or with for-loop variable initializers:
> 
>  https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg00237.html
> 
> To avoid these problems, we should enforce the C language version to the
> same level for all compilers. Since our minimum compiler versions is
> GCC v4.8, our best option is "gnu99" right now ("gnu17" is not available
> there yet, and "gnu11" is marked as "experimental").
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  v2: Use gnu99 instead of gnu11
> 
>  configure | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


> 
> diff --git a/configure b/configure
> index b9f34af..721ade7 100755
> --- a/configure
> +++ b/configure
> @@ -105,7 +105,8 @@ update_cxxflags() {
>      for arg in $QEMU_CFLAGS; do
>          case $arg in
>              -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
> -            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
> +            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls|\
> +            -std=gnu99)

IIUC this is to  drop  -std=gnu99 from CXXFLAGS, so C++ code (only the
guest-agent on Win32 IIUC) will use the compiler default still. No worse
than what we have today.

We could consider also setting a suitable -std for CXXFLAGS too in future
though...

>                  ;;
>              *)
>                  QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
> @@ -585,7 +586,7 @@ ARFLAGS="${ARFLAGS-rv}"
>  # left shift of signed integers is well defined and has the expected
>  # 2s-complement style results. (Both clang and gcc agree that it
>  # provides these semantics.)
> -QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
> +QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
>  QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
>  QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
>  QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"

Regards,
Daniel
Thomas Huth Jan. 9, 2019, 2:51 p.m. UTC | #2
On 2019-01-09 15:31, Daniel P. Berrangé wrote:
> On Wed, Jan 09, 2019 at 03:24:29PM +0100, Thomas Huth wrote:
>> Different versions of GCC and Clang use different versions of the C standard.
>> This repeatedly caused problems already, e.g. with duplicated typedefs:
>>
>>  https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html
>>
>> or with for-loop variable initializers:
>>
>>  https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg00237.html
>>
>> To avoid these problems, we should enforce the C language version to the
>> same level for all compilers. Since our minimum compiler versions is
>> GCC v4.8, our best option is "gnu99" right now ("gnu17" is not available
>> there yet, and "gnu11" is marked as "experimental").
>>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>  v2: Use gnu99 instead of gnu11
>>
>>  configure | 5 +++--
>>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> 
>> diff --git a/configure b/configure
>> index b9f34af..721ade7 100755
>> --- a/configure
>> +++ b/configure
>> @@ -105,7 +105,8 @@ update_cxxflags() {
>>      for arg in $QEMU_CFLAGS; do
>>          case $arg in
>>              -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
>> -            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
>> +            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls|\
>> +            -std=gnu99)
> 
> IIUC this is to  drop  -std=gnu99 from CXXFLAGS, so C++ code (only the
> guest-agent on Win32 IIUC) will use the compiler default still.

We also use it for the capstone disassembler and disas/libvixl.

> We could consider also setting a suitable -std for CXXFLAGS too in future
> though...

Shall I send a v3 with "-std=gnu++98" (which seems to be the only usable
option right now), or shall we wait until we really hit a problem with
the C++ code?

 Thomas
Daniel P. Berrangé Jan. 9, 2019, 2:58 p.m. UTC | #3
On Wed, Jan 09, 2019 at 03:51:33PM +0100, Thomas Huth wrote:
> On 2019-01-09 15:31, Daniel P. Berrangé wrote:
> > On Wed, Jan 09, 2019 at 03:24:29PM +0100, Thomas Huth wrote:
> >> Different versions of GCC and Clang use different versions of the C standard.
> >> This repeatedly caused problems already, e.g. with duplicated typedefs:
> >>
> >>  https://lists.gnu.org/archive/html/qemu-devel/2018-11/msg05829.html
> >>
> >> or with for-loop variable initializers:
> >>
> >>  https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg00237.html
> >>
> >> To avoid these problems, we should enforce the C language version to the
> >> same level for all compilers. Since our minimum compiler versions is
> >> GCC v4.8, our best option is "gnu99" right now ("gnu17" is not available
> >> there yet, and "gnu11" is marked as "experimental").
> >>
> >> Signed-off-by: Thomas Huth <thuth@redhat.com>
> >> ---
> >>  v2: Use gnu99 instead of gnu11
> >>
> >>  configure | 5 +++--
> >>  1 file changed, 3 insertions(+), 2 deletions(-)
> > 
> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> > 
> >> diff --git a/configure b/configure
> >> index b9f34af..721ade7 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -105,7 +105,8 @@ update_cxxflags() {
> >>      for arg in $QEMU_CFLAGS; do
> >>          case $arg in
> >>              -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
> >> -            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
> >> +            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls|\
> >> +            -std=gnu99)
> > 
> > IIUC this is to  drop  -std=gnu99 from CXXFLAGS, so C++ code (only the
> > guest-agent on Win32 IIUC) will use the compiler default still.
> 
> We also use it for the capstone disassembler and disas/libvixl.
> 
> > We could consider also setting a suitable -std for CXXFLAGS too in future
> > though...
> 
> Shall I send a v3 with "-std=gnu++98" (which seems to be the only usable
> option right now), or shall we wait until we really hit a problem with
> the C++ code?

I'd have a slight preference for adding a C++ suitable -std now
just to give us a more predictable build setup. I don't consider
it a blocker though, hence my R-b on this v2 patch as it is now.

Regards,
Daniel
Thomas Huth Jan. 9, 2019, 3:06 p.m. UTC | #4
On 2019-01-09 15:58, Daniel P. Berrangé wrote:
> On Wed, Jan 09, 2019 at 03:51:33PM +0100, Thomas Huth wrote:
>> On 2019-01-09 15:31, Daniel P. Berrangé wrote:
[...]
>>> We could consider also setting a suitable -std for CXXFLAGS too in future
>>> though...
>>
>> Shall I send a v3 with "-std=gnu++98" (which seems to be the only usable
>> option right now), or shall we wait until we really hit a problem with
>> the C++ code?
> 
> I'd have a slight preference for adding a C++ suitable -std now
> just to give us a more predictable build setup.
I think that's my preference, too. I'll send a v3...

 Thomas
diff mbox series

Patch

diff --git a/configure b/configure
index b9f34af..721ade7 100755
--- a/configure
+++ b/configure
@@ -105,7 +105,8 @@  update_cxxflags() {
     for arg in $QEMU_CFLAGS; do
         case $arg in
             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
-            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
+            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls|\
+            -std=gnu99)
                 ;;
             *)
                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
@@ -585,7 +586,7 @@  ARFLAGS="${ARFLAGS-rv}"
 # left shift of signed integers is well defined and has the expected
 # 2s-complement style results. (Both clang and gcc agree that it
 # provides these semantics.)
-QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
+QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"