[Spice-devel] [PATCH spice-server 1/2] Change ENABLE_EXTRA_CHECKS statements to #ifdef
Eduardo Lima (Etrunko)
etrunko at redhat.com
Mon Mar 19 13:15:12 UTC 2018
On 19/03/18 06:28, Frediano Ziglio wrote:
>>
>> On 15/03/18 14:20, Christophe Fergeau wrote:
>>> On Tue, Mar 13, 2018 at 10:37:46AM -0300, Eduardo Lima (Etrunko) wrote:
>>>> On 13/03/18 04:21, Frediano Ziglio wrote:
>>>>>>
>>>>>> This patch makes it clear that this is a configure switch and not a
>>>>>> variable defined somewhere else in the code.
>>>>>>
>>>>>
>>>>> The code is intended that way to make the compiler always parse
>>>>> these parts. Note that that define is always defined so your code
>>>>> is not doing what you are intending.
>>>>
>>>> I have sent this patch by mistake, but anyway, the fact of it always
>>>> being defined is true with autotools, but it is not with meson.
>>>>
>>>> Do you think it would make sense to have this patch or is it better to
>>>> keep as is? If the latter, I think it would be better to keep a static
>>>> variable and change its value according to the define.
>>>
>>> For what it's worth, I tried doing something like what you suggest in
>>> the past
>>> https://lists.freedesktop.org/archives/spice-devel/2017-September/039963.html
>>> but I came to the conclusion that this was not going to work nicely
>>> https://lists.freedesktop.org/archives/spice-devel/2017-September/039983.html
>>> I don't fully recall what the problem(s) were though :(
>>>
>>
>> Looks like I missed that discussion, but as there are very few places in
>> the code that make use of this define, we could make it a static global
>> to each file that makes the use.
>>
>> #ifdef ENABLE_EXTRA_CHECKS
>> static const int extra_checks = 1;
>> #else
>> static const int extra_checks = 0;
>> #endif
>>
>> And then replace accordingly.
>>
>
> What about something like this on spice-common:
>
>
> diff --git a/common/log.h b/common/log.h
> index 06d48d2..f9e1245 100644
> --- a/common/log.h
> +++ b/common/log.h
> @@ -93,6 +93,12 @@ void spice_log(GLogLevelFlags log_level,
> } \
> } G_STMT_END
>
> +#if ENABLE_EXTRA_CHECKS
> +enum { extra_checks = 1 };
> +#else
> +enum { extra_checks = 0 };
> +#endif
> +
> SPICE_END_DECLS
>
> #endif /* H_SPICE_LOG */
> diff --git a/configure.ac b/configure.ac
> index 3542161..3da85de 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -27,6 +27,7 @@ fi
> AM_PROG_CC_C_O
>
> SPICE_CHECK_SYSDEPS
> +SPICE_EXTRA_CHECKS
>
> AC_ARG_ENABLE([alignment-checks],
> AS_HELP_STRING([--enable-alignment-checks],
> diff --git a/m4/spice-deps.m4 b/m4/spice-deps.m4
> index 68e3091..b969c4f 100644
> --- a/m4/spice-deps.m4
> +++ b/m4/spice-deps.m4
> @@ -22,6 +22,14 @@ AC_DEFUN([SPICE_PRINT_MESSAGES],[
> IFS="$ac_save_IFS"
> ])
>
> +AC_DEFUN([SPICE_EXTRA_CHECKS],[
> +AC_ARG_ENABLE([extra-checks],
> + AS_HELP_STRING([--enable-extra-checks=@<:@yes/no@:>@],
> + [Enable expensive checks @<:@default=no@:>@]))
> +AM_CONDITIONAL(ENABLE_EXTRA_CHECKS, test "x$enable_extra_checks" = "xyes")
> +AS_IF([test "x$enable_extra_checks" = "xyes"],
> + [AC_DEFINE([ENABLE_EXTRA_CHECKS], 1, [Enable extra checks on code])])
> +])
>
> # SPICE_CHECK_SYSDEPS()
> # ---------------------
>
>
> and in spice-server (and possibly spice-gtk too for the configure.ac):
>
>
> diff --git a/configure.ac b/configure.ac
> index 86383434..2443ccf3 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -71,6 +71,7 @@ esac
> dnl =========================================================================
> dnl Check optional features
> SPICE_CHECK_SMARTCARD
> +SPICE_EXTRA_CHECKS
>
> AC_ARG_ENABLE(gstreamer,
> AS_HELP_STRING([--enable-gstreamer=@<:@auto/0.10/1.0/yes/no@:>@],
> @@ -237,14 +238,6 @@ AC_ARG_ENABLE([statistics],
> AS_IF([test "$enable_statistics" = "yes"],
> [AC_DEFINE([RED_STATISTICS], [1], [Enable SPICE statistics])])
>
> -AC_ARG_ENABLE([extra-checks],
> - AS_HELP_STRING([--enable-extra-checks=@<:@yes/no@:>@],
> - [Enable expensive checks @<:@default=no@:>@]))
> -AM_CONDITIONAL(ENABLE_EXTRA_CHECKS, test "$enable_extra_checks" = "yes")
> -AC_DEFINE_UNQUOTED([ENABLE_EXTRA_CHECKS],
> - [$(test "x$enable_extra_checks" = xyes && echo 1 || echo 0)],
> - [Define to 1 to enable extra checks on code otherwise define to 0])
> -
> dnl ===========================================================================
> dnl check compiler flags
>
> diff --git a/server/display-channel.c b/server/display-channel.c
> index 6dc10ee7..6511419d 100644
> --- a/server/display-channel.c
> +++ b/server/display-channel.c
> @@ -89,7 +89,7 @@ display_channel_finalize(GObject *object)
> display_channel_destroy_surfaces(self);
> image_cache_reset(&self->priv->image_cache);
>
> - if (ENABLE_EXTRA_CHECKS) {
> + if (extra_checks) {
> unsigned int count;
> _Drawable *drawable;
> VideoStream *stream;
>
>
>
> - the usage of the enum make sure extra_checks is a compile time constant;
> - the macro/constant can be used also in spice-common;
> - the --enable-extra-checks is shared between different projects;
> - ENABLE_EXTRA_CHECKS is defined as 1 or undefined which is more standard;
> - I think common/log.h is a good place to define that constant as is often
> used with spice_assert.
>
> Frediano
>
I like the idea of the enum, it looks good to me, although I would add
'spice_' or 'spice_common_' prefix to the name, now that it has got a
broader scope.
--
Eduardo de Barros Lima (Etrunko)
Software Engineer - RedHat
etrunko at redhat.com
More information about the Spice-devel
mailing list