[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libguestfs] [libnbd PATCH 3/5] libev: Check for old compiler



On Mon, May 10, 2021 at 12:03:36AM +0300, Nir Soffer wrote:
On Fri, May 7, 2021 at 4:24 PM Martin Kletzander <mkletzan redhat com> wrote:

On Fri, May 07, 2021 at 07:14:32AM -0500, Eric Blake wrote:
>On 5/6/21 6:30 AM, Martin Kletzander wrote:
>> At some point GCC added some optimisations and checks that started emitting
>> warnings on harmless code:
>>
>>   ...dereferencing type-punned pointer will break strict-aliasing rules...
>>
>> This was later fixed, but can still break the build (or report warnings) on old
>> GCCs (e.g. 7.5.0) when building the libev example.
>>
>> Signed-off-by: Martin Kletzander <mkletzan redhat com>
>> ---
>>  configure.ac | 24 ++++++++++++++++++++++++
>>  1 file changed, 24 insertions(+)
>>
>> diff --git a/configure.ac b/configure.ac
>> index 19b7bfdb5d2a..3b51354346cc 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -247,6 +247,30 @@ PKG_CHECK_MODULES([LIBEV], [libev], [
>>          AC_MSG_WARN([ev.h not found, some examples will not be compiled])
>>      ])
>>  ])
>> +
>> +AS_IF([test "x$LIBEV_LIBS" != "x"], [
>> +    old_CFLAGS="$CFLAGS"
>> +    CFLAGS="-Werror=strict-aliasing -O2"
>> +    AC_MSG_CHECKING([if the compiler is new enough for good aliasing rules])
>> +    AC_COMPILE_IFELSE([
>> +        AC_LANG_PROGRAM([
>> +            #include <ev.h>
>> +
>> +            static void cb (struct ev_loop *l, ev_timer *t, int e) { }
>> +            static ev_timer timer;
>> +        ], [
>> +            ev_timer_init (&timer, cb, 0, .1);
>> +        ])
>> +    ], [
>> +        AC_MSG_RESULT([yes])
>> +    ], [
>> +        AC_MSG_RESULT([no])
>> +        AC_SUBST([LIBEV_CFLAGS], [""])
>> +        AC_SUBST([LIBEV_LIBS], [""])
>> +        AC_MSG_WARN([compiler is probably too old to compile with libev without errors, some examples will not be compiled])
>
>Do we really need to skip compiling the example altogether, or can we
>just modify CFLAGS to add -Wno-strict-aliasing to prevent the failure?
>

This is one of the results that I was not sure about.  We could just add
no-strict-aliasing for that one particular example of course.  I figured
it is just an example and it only causes an issue on CentOS 7, OpenSUSE
Leap 15.2, Ubuntu 18.04 and some similarly old systems if I remember
correctly.

Do we really support Centos 7? libnbd is available since rhel 8 (2, 3?).
Why support older systems?


Strictly speaking I do not think there is any description of what is
supported for libnbd.  I just wanted as much as possible to start with,
but centos7 is now already out.

Time spent on older systems means less time working features,
performance, support for new systems, etc.

But changing the LIBEV_CFLAGS seems more fit for the purpose.

Sounds like the best option.


I did that, we can remove it later.

Nir

Attachment: signature.asc
Description: PGP signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]