diff --git a/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch b/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch new file mode 100644 index 0000000000..da20c26f19 --- /dev/null +++ b/package/libfuse3/0001-meson.build-fix-wrong-.symver-detection.patch @@ -0,0 +1,61 @@ +From 3aba09a5c56e017746c5c1652dbc845f4db7374a Mon Sep 17 00:00:00 2001 +From: Giulio Benetti +Date: Tue, 3 Aug 2021 23:39:46 +0200 +Subject: [PATCH] meson.build: fix wrong .symver detection + +As pointed here [1] __has_attribute() is broken for many attributes and +if it doesn't support the specific attribute it returns true, so we +can't really rely on that for this check. This lead to Buildroot +libfuse3 build failure [2] where that shows up with: +``` +error: symver is only supported on ELF platforms +``` +Indeed Microblaze doesn't support ELF since it doesn't include elfos.h, +but __has_attribute(symver) returns true. + +So let's substitute the #ifdef __has_attribute() with a stronger test on +a function foo() with __attribute__((symver ("test@TEST"))). + +[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101766 +[2]: http://autobuild.buildroot.net/results/d6c/d6cfaf2aafaeda3c12d127f6a2d2e175b25e654f/build-end.log + +Signed-off-by: Giulio Benetti +--- + meson.build | 16 +++++++--------- + 1 file changed, 7 insertions(+), 9 deletions(-) + +diff --git a/meson.build b/meson.build +index b0250ee..a7281f3 100644 +--- a/meson.build ++++ b/meson.build +@@ -96,20 +96,18 @@ endif + # to have __has_attribute, then they are too old to support symver) + # other compilers might not have __has_attribute, but in those cases + # it is safe for this check to fail and for us to fallback to the old _asm_ +-# method for symver ++# method for symver. Anyway the attributes not supported by __has_attribute() ++# unfortunately return true giving a false positive. So let's try to build ++# using __attribute__ ((symver )) and see the result. + code = ''' +-#if defined __has_attribute +-# if !__has_attribute (symver) +-# error symver attribute not supported +-# endif +-#else +-#error __has_attribute not defined, assume we do not have symver +-#endif ++__attribute__ ((symver ("test@TEST"))) ++void foo(void) { ++} + + int main(void) { + return 0; + }''' +-if cc.compiles(code, args: [ '-O0', '-c']) ++if cc.compiles(code, args: [ '-O0', '-c', '-Werror']) + message('Compiler supports symver attribute') + add_project_arguments('-DHAVE_SYMVER_ATTRIBUTE', language: 'c') + else +-- +2.25.1 +