On Wed, Jul 05, 2017 at 11:34:10AM +0100, Daniel P. Berrange wrote: > We only ever test libvirt with GCC or CLang which provides a > GCC compatible compilation environment. Between them, these > compilers cover every important operating system platform, > even Windows. > > Mandate their use to make it explicit that we don't care about > compilers like Microsoft VCC or other UNIX vendor C compilers. > > GCC 4.4 was picked as the baseline, since RHEL-6 ships 4.4.7 > and that lets us remove a large set of checks. There is a slight > issue that CLang reports itself as GCC 4.2, so we must also check > if __clang__ is defined. We could check a particular CLang version > too, but that would require someone to figure out a suitable min > version which is fun because OS-X reports totally different CLang > version numbers from CLang builds on Linux/BSD > > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> > --- > config-post.h | 20 +++++----- > src/internal.h | 116 ++++++++++++++++----------------------------------------- > 2 files changed, 44 insertions(+), 92 deletions(-) > > diff --git a/config-post.h b/config-post.h > index 75e7d02..4bddbac 100644 > --- a/config-post.h > +++ b/config-post.h > @@ -74,6 +74,10 @@ > # undef WITH_CAPNG > #endif /* LIBVIRT_NSS */ > > +#ifndef __GNUC__ > +# error "Libvirt requires GCC >= 4.4, or CLang" > +#endif > + > /* > * Define __GNUC_PREREQ to a sane default if it isn't yet defined. > * This is done here so that it's included as early as possible; gnulib relies > @@ -81,13 +85,11 @@ > * This doesn't happen on many non-glibc systems. > * When __GNUC_PREREQ is not defined, gnulib defines it to 0, which breaks things. > */ > -#ifdef __GNUC__ > -# ifndef __GNUC_PREREQ > -# if defined __GNUC__ && defined __GNUC_MINOR__ > -# define __GNUC_PREREQ(maj, min) \ > - ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) > -# else > -# define __GNUC_PREREQ(maj, min) 0 > -# endif > -# endif > +#ifndef __GNUC_PREREQ > +# define __GNUC_PREREQ(maj, min) \ > + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) > +#endif > + > +#if !__GNUC_PREREQ(4, 4) || defined(__clang__) Opps, messed up precedence there - it should have been #if !(__GNUC_PREREQ(4, 4) || defined(__clang__)) > +# error "Libvirt requires GCC >= 4.4, or CLang" > #endif 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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list