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