[Spice-devel] [protocol 0/3] Fixing the *_DEPRECATED set of macros
Christophe Fergeau
cfergeau at redhat.com
Thu Sep 1 10:43:26 UTC 2016
On Thu, Aug 11, 2016 at 04:28:58PM +0200, Francois Gouget wrote:
>
> The following patch broke compilation of xf86-video-qxl:
>
> commit b41220b1441b8adea6db9a98e9da1b43a8f426bb
> Author: Christophe Fergeau <cfergeau at redhat.com>
> Date: Thu Mar 5 15:28:22 2015 +0100
>
> Mark unused public API methods/code as deprecated
>
> Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
>
>
> The reason is it introduces a #include <glib.h> in spice-server.h which
> is a *public* header! This means any application that needs to include
> spice-server.h, like xf86-video-qxl, must now check for GLib even if
> they don't use it, like xf86-video-qxl.
>
> This does not make sense and thus the glib.h include must be removed.
As danpb pointed out, main reason for that is that we forgot to add
glib-2.0 as a dependency in the .pc file, if this had been done, this
change would probably have gone mostly unnoticed.
> However it was added to get G_GNUC_DEPRECATED. Fortunately there is
> SPICE_GNUC_DEPRECATED, or maybe that's SPICE_DEPRECATED? It gets a bit
> confusing from here:
>
> First the macros to tag deprecated functions:
> * spice uses G_GNUC_DEPRECATED directly in spice-server.h as seen above.
>
> * spice-gtk defines SPICE_DEPRECATED in spice-util.h as a wrapper around
> G_GNUC_DEPRECATED, or an empty macro if SPICE_NO_DEPRECATED is
> defined.
>
> * spice-gtk also has a SPICE_GNUC_DEPRECATED_FOR() macro which is not
> defined anywhere else and a corresponding wrapper,
> SPICE_DEPRECATED_FOR(), which is a no-op if SPICE_NO_DEPRECATED is
> defined.
Imo this SPICE_NO_DEPRECATED is only meant to be used internally by
spice-gtk even if this is not really documented. I would not consider it
breakage if this was removed, or changed in incompatible ways.
And it turns out it's actually useless as -Wno-deprecated-declarations
is used during compilation (which also disables the
warnings from GLIB_VERSION_MIN_REQUIRED/GLIB_VERSION_MAX_REQUIRED :(
I'd tend to change that so that -Wno-deprecated-declarations is only
used for spicy, and make selective use of
G_GNUC_BEGIN_IGNORE_DEPRECATIONS / G_GNUC_END_IGNORE_DEPRECATIONS when
needed. Seems to be working with quick and dirty local changes.
SPICE_NO_DEPRECATED is then not really needed.
>
> * spice-protocol defines SPICE_GNUC_DEPRECATED in spice/macro.h but
> uses the gcc __attribute__ macro directly instead of using
> G_GNUC_DEPRECATED.
Yup, mostly because spice-protocol does not depend on glib (and does not
use anything related to glib for that matter).
> Second the macros to 'enable/disable' deprecated APIs:
> * In spice-gtk defining SPICE_NO_DEPRECATED disables the warnings.
See above, my thinking is that this is mainly meant for internal use.
>
> * In spice-protocol you must define SPICE_DEPRECATED to get access to
> the deprecated vd_agent.h VD_AGENT_CLIPBOARD_MAX_SIZE_DEFAULT and
> VD_AGENT_CLIPBOARD_MAX_SIZE_ENV macros.
>
> Of course spice-gtk's source files use both spice-util.h and vd_agent.h,
> meaning they necessarily get the spice-protocol deprecated macros due to
> the SPICE_DEPRECATED naming conflict.
Ah, not a big deal, but not nice :(
> So here is the proposed solution:
>
> * spice-protocol's SPICE_DEPRECATED is in a public header so keep it as
> is. Extend it to mean the user wants to use deprecated APIs. This
> includes:
> - Defining deprecated APIs and macros (as before).
> - Disabling warnings about the use of deprecated APIs so it takes
> over spice-gtk's SPICE_NO_DEPRECATED role.
>
> * Disable spice-protocol's SPICE_GNUC_DEPRECATED warnings when
> SPICE_DEPRECATED is defined.
Hm, I can see some merit with having a way to disable deprecation
warnings per-module rather than globally through
-Wno-deprecated-declarations. How big of a mess would a more
explicit/similar to glib name cause? SPICE_DISABLE_DEPRECATION_WARNINGS
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20160901/35549525/attachment-0001.sig>
More information about the Spice-devel
mailing list