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 |
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
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
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
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 --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"
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(-)