On Wed, Feb 24, 2021 at 2:15 PM Daniel P. Berrangé <berra...@redhat.com> wrote:
>
> On Wed, Feb 24, 2021 at 01:07:33PM +0000, Peter Maydell wrote:
> > On Wed, 24 Feb 2021 at 11:04, Daniel P. Berrangé <berra...@redhat.com> 
> > wrote:
> > > So from osdep.h I think something like this is likely sufficient:
> > >
> > > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> > > index ba15be9c56..7a1d83a8b6 100644
> > > --- a/include/qemu/osdep.h
> > > +++ b/include/qemu/osdep.h
> > > @@ -126,6 +126,7 @@ extern int daemon(int, int);
> > >  #include "glib-compat.h"
> > >  #include "qemu/typedefs.h"
> > >
> > > +extern "C" {
> >
> > Needs to be protected by #ifdef so it's only relevant for the
> > C++ compiler, right?
> >
> > >  /*
> > >   * For mingw, as of v6.0.0, the function implementing the assert macro is
> > >   * not marked as noreturn, so the compiler cannot delete code following 
> > > an
> > > @@ -722,4 +723,6 @@ static inline int 
> > > platform_does_not_support_system(const char *command)
> > >  }
> > >  #endif /* !HAVE_SYSTEM_FUNCTION */
> > >
> > > +}
> > > +
> > >  #endif
> > >
> > >
> > > We'll also need to them protect any local headers we use before this 
> > > point.
> > >
> > > $ grep #include ../../../include/qemu/osdep.h  | grep -v '<'
> > > #include "config-host.h"
> > > #include CONFIG_TARGET
> > > #include "exec/poison.h"
> > > #include "qemu/compiler.h"
> > > #include "sysemu/os-win32.h"
> > > #include "sysemu/os-posix.h"
> > > #include "glib-compat.h"
> > > #include "qemu/typedefs.h"
> > >
> > > and transitively through that list, but I think there's no too many
> > > more there.
> >
> > Is there anything we can do to make the compiler complain if we
> > get this wrong? Otherwise it seems likely that we'll end up
> > accidentally putting things inside or outside 'extern "C"'
> > declarations when they shouldn't be, as we make future changes
> > to our headers.
>
> There's nothing easy I know of to highlight this.  It is more the kind
> of thing checkpatch would have to look at - complain if there is
> anything which isn't a  preprocessor include directive or comment
> before the 'extern'.
>
> > (The other approach would be to try to get rid of the
> > C++ in the codebase. We could probably say 'drop vixl
> > and always use capstone', for instance.)
>
> Yeah, getting rid of C++ would probably be the sanest solution long
> term.

Just as an input on short-term alternatives,
in open-vm-tools we've found to follow
https://developer.gnome.org/glib/stable/glib-Version-Information.html#GLIB-VERSION-MIN-REQUIRED:CAPS
to be an easy fix for the time being.
Which in the autoconf magic there was just:
  +AC_DEFINE(GLIB_VERSION_MIN_REQUIRED, GLIB_VERSION_2_34, [Ignore
post 2.34 deprecations])
  +AC_DEFINE(GLIB_VERSION_MAX_ALLOWED, GLIB_VERSION_2_34, [Prevent
post 2.34 APIs])
(Or any other/newer version that one would want to select)

Not sure what would apply to qemu here, but I wanted to let you know
of the overall concept in regard to this issue.


> Regards,
> Daniel
> --
> |: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-            https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
>


-- 
Christian Ehrhardt
Staff Engineer, Ubuntu Server
Canonical Ltd

Reply via email to