From 6ec50f717a30307feddaa3fee492ba1dec18dcb1 Mon Sep 17 00:00:00 2001 From: Marvin Scholz Date: Wed, 13 May 2026 13:28:01 +0200 Subject: [PATCH 1/3] SpatialaudioAPI: Add SPAUDIO_DEPRECATED macro This is a helper to declare an API as deprecated, adding a workaround for GCC <13, which chokes when the native C++ attribute style [[]] is combined with __attribute__(()). --- include/SpatialaudioAPI.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/SpatialaudioAPI.h b/include/SpatialaudioAPI.h index 1bae07e..3fedb89 100644 --- a/include/SpatialaudioAPI.h +++ b/include/SpatialaudioAPI.h @@ -35,4 +35,14 @@ # define SPAUDIO_API SPATIALAUDIO_IMPORT #endif +// Deprecation annotation +// For GCC 12 and older we must not mix the attribute syntax +// styles, so in that case, we use __attribute__(()) here, else +// we just use the normal C++ attribute syntax +#if defined(__GNUC__) && (__GNUC__ < 13) +# define SPAUDIO_DEPRECATED(msg) __attribute__((deprecated(msg))) +#else +# define SPAUDIO_DEPRECATED(msg) [[deprecated(msg)]] +#endif + #endif /* SPATIALAUDIO_API_H */ From 0b7834d6b2da66b77a32f1cd615d04803f775f82 Mon Sep 17 00:00:00 2001 From: Marvin Scholz Date: Wed, 13 May 2026 13:28:44 +0200 Subject: [PATCH 2/3] Use SPAUDIO_DEPRECATED instead of the C++ attribute Fixes compilation with GCC 12 and older. --- include/AmbisonicProcessor.h | 5 +++-- include/AmbisonicShelfFilters.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/AmbisonicProcessor.h b/include/AmbisonicProcessor.h index 15d3ff8..51d7b55 100644 --- a/include/AmbisonicProcessor.h +++ b/include/AmbisonicProcessor.h @@ -108,8 +108,9 @@ namespace spaudio { * Please use AmbisonicRotator instead. */ - class SPAUDIO_API - [[deprecated("This class is deprecated. Please use AmbisonicRotator class instead.")]] + class + SPAUDIO_DEPRECATED("This class is deprecated. Please use AmbisonicRotator class instead.") + SPAUDIO_API AmbisonicProcessor : public AmbisonicBase { public: diff --git a/include/AmbisonicShelfFilters.h b/include/AmbisonicShelfFilters.h index 047caaa..abdf718 100644 --- a/include/AmbisonicShelfFilters.h +++ b/include/AmbisonicShelfFilters.h @@ -26,8 +26,9 @@ namespace spaudio { /** This class applies frequency dependent basic & max-rE optimisation to a B-format signal using linear phase FIR filters. * This class is deprecated in favour of AmbisonicOptimFilters, which uses LinkwitzRiley IIR filters to apply frequency dependent gains. */ - class SPAUDIO_API - [[deprecated("This class is deprecated. Please use AmbisonicOptimFilters class instead.")]] + class + SPAUDIO_DEPRECATED("This class is deprecated. Please use AmbisonicOptimFilters class instead.") + SPAUDIO_API AmbisonicShelfFilters : public AmbisonicBase { public: From d2d604e675cc732b9b63d8d4952740f9848c6bb7 Mon Sep 17 00:00:00 2001 From: Marvin Scholz Date: Wed, 13 May 2026 13:43:21 +0200 Subject: [PATCH 3/3] Reword deprecation messages The fact that the class is deprecated is already implied by the presence of the attribute itself. --- include/AmbisonicProcessor.h | 2 +- include/AmbisonicShelfFilters.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/AmbisonicProcessor.h b/include/AmbisonicProcessor.h index 51d7b55..12a9f4d 100644 --- a/include/AmbisonicProcessor.h +++ b/include/AmbisonicProcessor.h @@ -109,7 +109,7 @@ namespace spaudio { */ class - SPAUDIO_DEPRECATED("This class is deprecated. Please use AmbisonicRotator class instead.") + SPAUDIO_DEPRECATED("Please use AmbisonicRotator class instead.") SPAUDIO_API AmbisonicProcessor : public AmbisonicBase { diff --git a/include/AmbisonicShelfFilters.h b/include/AmbisonicShelfFilters.h index abdf718..4f67736 100644 --- a/include/AmbisonicShelfFilters.h +++ b/include/AmbisonicShelfFilters.h @@ -27,7 +27,7 @@ namespace spaudio { * This class is deprecated in favour of AmbisonicOptimFilters, which uses LinkwitzRiley IIR filters to apply frequency dependent gains. */ class - SPAUDIO_DEPRECATED("This class is deprecated. Please use AmbisonicOptimFilters class instead.") + SPAUDIO_DEPRECATED("Please use AmbisonicOptimFilters class instead.") SPAUDIO_API AmbisonicShelfFilters : public AmbisonicBase {