From 8aa4ec3daf3d92bc486355261e83f0bdc7590a3d Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Fri, 24 Apr 2026 11:18:59 +0200 Subject: [PATCH] =?UTF-8?q?build:=20a=C3=AFlla=20la=20implementaci=C3=B3?= =?UTF-8?q?=20de=20stb=5Fvorbis=20en=20un=20TU=20propi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mateix patró que stb_image_write: jail_audio.cpp defineix STB_VORBIS_HEADER_ONLY i només veu les declaracions; les definicions viuen a source/external/stb_vorbis_impl.cpp, ja exclòs del pre-commit. Això permet retirar també la desactivació global de clang-analyzer-core.UndefinedBinaryOperatorResult al .clang-tidy, i el check queda actiu arreu del nostre propi codi. --- .clang-tidy | 5 ----- CMakeLists.txt | 1 + source/core/audio/jail_audio.cpp | 7 ++++--- source/external/stb_vorbis_impl.cpp | 13 +++++++++++++ 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 source/external/stb_vorbis_impl.cpp diff --git a/.clang-tidy b/.clang-tidy index 6193962..6cbebda 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -9,11 +9,6 @@ Checks: - -bugprone-easily-swappable-parameters - -bugprone-narrowing-conversions - -modernize-avoid-c-arrays,-warnings-as-errors - # Fals positiu recurrent en codi C de tercers (source/external/stb_vorbis.c). - # HeaderFilterRegex no aplica a clang-analyzer-*, així que cal desactivar - # explícitament. El check d'inferència sobre variables locals de legacy C - # genera reports que no reflecteixen bugs reals. - - -clang-analyzer-core.UndefinedBinaryOperatorResult WarningsAsErrors: '*' # Headers nostres (excloem source/external/ que conté dependències de tercers no editables) diff --git a/CMakeLists.txt b/CMakeLists.txt index 761dc9d..f5944c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,6 +69,7 @@ set(APP_SOURCES source/core/rendering/gif.cpp source/core/rendering/screenshot.cpp source/external/stb_image_write_impl.cpp + source/external/stb_vorbis_impl.cpp source/core/rendering/surface.cpp source/core/rendering/text.cpp source/core/rendering/sprite/sprite.cpp diff --git a/source/core/audio/jail_audio.cpp b/source/core/audio/jail_audio.cpp index 292bb67..be1c110 100644 --- a/source/core/audio/jail_audio.cpp +++ b/source/core/audio/jail_audio.cpp @@ -5,9 +5,10 @@ #include #include -// Implementació completa de stb_vorbis en aquest TU. HEADER_ONLY es queda -// indefinit aquí perquè el .c aporti les definicions. La resta del projecte -// només veu el forward-decl de jail_audio.hpp. +// Només declaracions de stb_vorbis: STB_VORBIS_HEADER_ONLY omet el bloc +// d'implementació. Les definicions les aporta source/external/stb_vorbis_impl.cpp +// (TU aïllat perquè clang-analyzer no dispari fals positius al nostre codi). +#define STB_VORBIS_HEADER_ONLY // clang-format off // NOLINTNEXTLINE(bugprone-suspicious-include) #include "external/stb_vorbis.c" diff --git a/source/external/stb_vorbis_impl.cpp b/source/external/stb_vorbis_impl.cpp new file mode 100644 index 0000000..7adf65f --- /dev/null +++ b/source/external/stb_vorbis_impl.cpp @@ -0,0 +1,13 @@ +// Unitat de compilació aïllada per a la implementació de stb_vorbis. +// Viu dins de source/external/ perquè el `.clang-tidy` d'aquesta carpeta +// desactiva tots els checks (com fa per stb_image_write_impl.cpp) i el +// pre-commit hook ja filtra aquesta ruta de clang-format / clang-tidy. +// Així els fals positius de clang-analyzer-* dins de codi C de tercers +// no afecten el nostre codi, que continua tenint tots els checks actius. +// +// jail_audio.cpp defineix STB_VORBIS_HEADER_ONLY abans d'incloure el .c, +// així només en veu les declaracions; les definicions les aporta aquest +// TU i l'enllaçador les resol. + +// NOLINTNEXTLINE(bugprone-suspicious-include) +#include "external/stb_vorbis.c"