From e9f0796b44c85246ad829269e4fb1d229a6644a4 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 23 Sep 2018 15:14:08 +0200 Subject: Factor out deprecation attribute and warning boilerplate --- lv2/atom/forge.h | 29 +++++++------------------- lv2/core/attributes.h | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ lv2/core/meta.ttl | 2 ++ 3 files changed, 67 insertions(+), 22 deletions(-) create mode 100644 lv2/core/attributes.h diff --git a/lv2/atom/forge.h b/lv2/atom/forge.h index a77170f..826b2d1 100644 --- a/lv2/atom/forge.h +++ b/lv2/atom/forge.h @@ -52,14 +52,9 @@ #include "lv2/atom/atom.h" #include "lv2/atom/util.h" +#include "lv2/core/attributes.h" #include "lv2/urid/urid.h" -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -# define LV2_ATOM_FORGE_DEPRECATED __attribute__((__deprecated__)) -#else -# define LV2_ATOM_FORGE_DEPRECATED -#endif - #ifdef __cplusplus extern "C" { #else @@ -67,13 +62,7 @@ extern "C" { #endif // Disable deprecation warnings for Blank and Resource -#if defined(__clang__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -#endif +LV2_DISABLE_DEPRECATION_WARNINGS /** Handle for LV2_Atom_Forge_Sink. */ typedef void* LV2_Atom_Forge_Sink_Handle; @@ -110,7 +99,7 @@ typedef struct { LV2_Atom_Forge_Frame* stack; - LV2_URID Blank LV2_ATOM_FORGE_DEPRECATED; + LV2_URID Blank LV2_DEPRECATED; LV2_URID Bool; LV2_URID Chunk; LV2_URID Double; @@ -121,7 +110,7 @@ typedef struct { LV2_URID Object; LV2_URID Path; LV2_URID Property; - LV2_URID Resource LV2_ATOM_FORGE_DEPRECATED; + LV2_URID Resource LV2_DEPRECATED; LV2_URID Sequence; LV2_URID String; LV2_URID Tuple; @@ -584,7 +573,7 @@ lv2_atom_forge_object(LV2_Atom_Forge* forge, This function is deprecated and should not be used in new code. Use lv2_atom_forge_object() directly instead. */ -LV2_ATOM_FORGE_DEPRECATED +LV2_DEPRECATED static inline LV2_Atom_Forge_Ref lv2_atom_forge_resource(LV2_Atom_Forge* forge, LV2_Atom_Forge_Frame* frame, @@ -605,7 +594,7 @@ lv2_atom_forge_resource(LV2_Atom_Forge* forge, This function is deprecated and should not be used in new code. Use lv2_atom_forge_object() directly instead. */ -LV2_ATOM_FORGE_DEPRECATED +LV2_DEPRECATED static inline LV2_Atom_Forge_Ref lv2_atom_forge_blank(LV2_Atom_Forge* forge, LV2_Atom_Forge_Frame* frame, @@ -691,11 +680,7 @@ lv2_atom_forge_beat_time(LV2_Atom_Forge* forge, double beats) @} */ -#if defined(__clang__) -# pragma clang diagnostic pop -#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) -# pragma GCC diagnostic pop -#endif +LV2_RESTORE_WARNINGS #ifdef __cplusplus } /* extern "C" */ diff --git a/lv2/core/attributes.h b/lv2/core/attributes.h new file mode 100644 index 0000000..c054ae1 --- /dev/null +++ b/lv2/core/attributes.h @@ -0,0 +1,58 @@ +/* + Copyright 2018 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#ifndef LV2_CORE_ATTRIBUTES_H +#define LV2_CORE_ATTRIBUTES_H + +/** + @defgroup attributes Attributes + + Macros for source code attributes. + + @{ +*/ + +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +#define LV2_DEPRECATED __attribute__((__deprecated__)) +#else +#define LV2_DEPRECATED +#endif + +#if defined(__clang__) +#define LV2_DISABLE_DEPRECATION_WARNINGS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) +#define LV2_DISABLE_DEPRECATION_WARNINGS \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#else +#define LV2_DISABLE_DEPRECATION_WARNINGS +#endif + +#if defined(__clang__) +#define LV2_RESTORE_WARNINGS _Pragma("clang diagnostic pop") +#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) +#define LV2_RESTORE_WARNINGS _Pragma("GCC diagnostic pop") +#else +#define LV2_RESTORE_WARNINGS +#endif + +/** + @} +*/ + +#endif /* LV2_CORE_ATTRIBUTES_H */ diff --git a/lv2/core/meta.ttl b/lv2/core/meta.ttl index 8ed9595..d6290f9 100644 --- a/lv2/core/meta.ttl +++ b/lv2/core/meta.ttl @@ -43,6 +43,8 @@ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH R dcs:blame ; dcs:changeset [ dcs:item [ + rdfs:label "Add core/attributes.h utility header." + ] , [ rdfs:label "Include waf sources and fix build with Python 3.7." ] , [ rdfs:label "eg-sampler: Add waveform display to UI." -- cgit v1.2.1