[vlc-devel] [PATCH 0/6] Fix warnings related to unknown attributes by introducing VLC_ATTR

Steve Lhomme robux4 at gmail.com
Thu Mar 2 09:07:26 CET 2017


On Sun, Feb 26, 2017 at 11:32 PM, Filip Roséen <filip at atch.se> wrote:
> Hi vlc-devel,
>
> As per the information posted by Rémi Denis-Courmount in the below linked
> message, relying solely on information available during configure is not
> sufficient as VLC-headers might be used by entities differently than that
> used during that stage.
>
> https://mailman.videolan.org/pipermail/vlc-devel/2017-February/111752.html
>
> With the above in mind I see it as we have two approaches to solving issues
> related to attribute uses using compilers that may not support them (and
> where the attribute itself is not mandatory for compilation, but certainly
> helpful if available).

(for some reason gmail removed the numbers when quoting)
As I've been compiling VLC with MSVC (winrt ARM port) for a while I
prefer a clean define for each. Sometimes MSVC syntax is a bit
different or the order different from GCC so it's probably easier to
handle this way.  So I vote for #1

As a side note, we already have some compiler format detection in configure.ac:
AC_C_CONST
AC_C_INLINE
AC_C_RESTRICT

> Maintain a #if-tree that properly defines helper macros for each attribute
> used within the codebase, and conditionally defines these to either that
> which is supported by the relevant compiler - or empty (in order to prevent
> unsupported attributes from resulting in diagnostics).
>
> Use the information available from configure if available (i.e. when we are
> building VLC), otherwise fall back to a more easily maintainable list of
> macros where we do not care about the exact compiler being used. Instead we
> would maintain in a way that corresponds to the current implementation.
> #ifdef __GNUC__ would unconditionally define the macros to what the
> “compiler of our dream” would implement.
>
> As I do not believe alternative #1 will be easy to maintain, I would go with
> alternative #2. Below is a link to a branch where such is implemented (based
> on the patch-batch in which this email is a reply).
>
> https://github.com/FilipRoseen-refp/vlc/commits/0000_attributes
>
> Where the relevant commit with changes compared to the proposed
> implementation is available in the following commit:
>
> https://github.com/FilipRoseen-refp/vlc/commit/68ad551238b0b70de1c48bd977ac37dfe5de5f28
>
> Best Regards,
> Filip
>
> On 2017-02-26 20:13, Filip Roséen wrote:
>
>  After the more than welcomed commit linked below we currently
>  experience tons of diagnostics related to unknown attributes when
>  things are compiled with clang.
>
>   -
> http://git.videolan.org/?p=vlc.git;a=commit;h=97d669a8c704a19f9bd4cd4b8f995dcc9e9edbb7
>
>  Example:
>
>      include/vlc_threads.h:837:16: warning: unknown attribute 'error'
> ignored [-Wunknown-attributes]
>      __attribute__((error("sorry, cannot sleep for such short a time")))
>                     ^
>      include/vlc_threads.h:847:16: warning: unknown attribute 'warning'
> ignored [-Wunknown-attributes]
>      __attribute__((warning("use proper event handling instead of short
> delay")))
>                     ^
>  Rationale for changes
>  ----------------------------------------------------------------------
>
>  As attribute usage is encouraged in cases where it make sense, I was
>  reluctant to wrap usage of the affected attributes in a preprocessor
>  condition checking if we are being compiled by clang, and what version
>  of clang.
>
>  In my opinion that would lead to unnecessary complexity and harder
>  maintainability, especially when things differ version to version.
>
>  Instead these changes include addition of support for checking
>  supported attributes during configure, as well as a macro named
>  `VLC_ATTR` that is used to apply the checked attributes (if they are
>  supported by the compiler, otherwise it expands to an empty string).
>
>  Future
>  ----------------------------------------------------------------------
>
>  I currently have patches that does what is listed below, but will
>  submit them at a later time if the contents of this patch-batch is
>  satisfactory:
>
>   - replace usage of VLC_DEPRECATED with VLC_ATTR(deprecated)
>
>   - add support for more attributes that can be used to further
>     strengthen the codebase (where applicable)
>
>   - some further attribute related clean-up
>
>  Disclaimer
>  ----------------------------------------------------------------------
>
>  I took about an hour to read up on `.m4` and `autoconf` prior to
>  writing that part of the changes; besides reading patches to this
>  codebase, that hour is my **only** experience with the toolchain.
>
>  Please go easy on me if there is something that should have been done
>  differently.
>
>  Best Regards,\
>
>  Filip Roséen (6):
>    m4: add attributes.m4
>    configure: add check for attributes
>    configure: use attributes.m4 to check for attribute packed
>    configure: use attributes.m4 to check for attribute aligned
>    vlc_common: introduce macro VLC_ATTR
>    vlc_threads: use VLC_ATTR to apply attributes
>
>   configure.ac          | 25 ++++++++++---------------
>   include/vlc_common.h  | 33 +++++++++++++++++++++++++++++++++
>   include/vlc_threads.h | 20 +++++++++++---------
>   m4/Makefile.am        |  1 +
>   m4/attributes.m4      | 41 +++++++++++++++++++++++++++++++++++++++++
>   5 files changed, 96 insertions(+), 24 deletions(-)
>   create mode 100644 m4/attributes.m4
>
>  --
>  2.11.1
>
>
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list