diff --git a/graphics/mesa-dri/files/patch-meson.build b/graphics/mesa-dri/files/patch-meson.build new file mode 100644 index 000000000000..21cdcf840400 --- /dev/null +++ b/graphics/mesa-dri/files/patch-meson.build @@ -0,0 +1,46 @@ +--- meson.build.orig 2022-03-18 19:26:47 UTC ++++ meson.build +@@ -1414,11 +1414,42 @@ foreach f : ['strtof', 'mkostemp', 'timespec_get', 'me + endforeach + + foreach f : ['strtof', 'mkostemp', 'timespec_get', 'memfd_create', 'random_r', +- 'flock', 'strtok_r', 'getrandom', 'qsort_r', 'qsort_s'] ++ 'flock', 'strtok_r', 'getrandom', 'qsort_s'] + if cc.has_function(f) + pre_args += '-DHAVE_@0@'.format(f.to_upper()) + endif + endforeach ++ ++if cpp.links(''' ++ #define _GNU_SOURCE ++ #include ++ ++ static int dcomp(const void *l, const void *r, void *t) { return 0; } ++ ++ int main(int ac, char **av) { ++ int arr[] = { 1 }; ++ void *t = NULL; ++ qsort_r((void*)&arr[0], 1, 1, dcomp, t); ++ return (0); ++ }''', ++ args : pre_args, ++ name : 'GNU qsort_r') ++ pre_args += '-DHAVE_GNU_QSORT_R' ++elif cpp.links(''' ++ #include ++ ++ static int dcomp(void *t, const void *l, const void *r) { return 0; } ++ ++ int main(int ac, char **av) { ++ int arr[] = { 1 }; ++ void *t = NULL; ++ qsort_r((void*)&arr[0], 1, 1, t, dcomp); ++ return (0); ++ }''', ++ args : pre_args, ++ name : 'BSD qsort_r') ++ pre_args += '-DHAVE_BSD_QSORT_R' ++endif + + if cc.has_header_symbol('errno.h', 'program_invocation_name', + args : '-D_GNU_SOURCE') diff --git a/graphics/mesa-dri/files/patch-src_util_u__qsort.h b/graphics/mesa-dri/files/patch-src_util_u__qsort.h new file mode 100644 index 000000000000..f199fecd7b56 --- /dev/null +++ b/graphics/mesa-dri/files/patch-src_util_u__qsort.h @@ -0,0 +1,26 @@ +--- src/util/u_qsort.h.orig 2022-03-18 19:26:47 UTC ++++ src/util/u_qsort.h +@@ -56,8 +56,10 @@ util_qsort_r(void *base, size_t nmemb, size_t size, + int (*compar)(const void *, const void *, void *), + void *arg) + { +-#if HAVE_QSORT_R +-# if DETECT_OS_APPLE || DETECT_OS_BSD ++#if HAVE_GNU_QSORT_R ++ /* GNU extension added in glibc 2.8 */ ++ qsort_r(base, nmemb, size, compar, arg); ++#elif HAVE_BSD_QSORT_R + /* BSD/macOS qsort_r takes "arg" before the comparison function and it + * pass the "arg" before the elements. + */ +@@ -66,10 +68,6 @@ util_qsort_r(void *base, size_t nmemb, size_t size, + arg + }; + qsort_r(base, nmemb, size, &data, util_qsort_adapter); +-# else +- /* GNU extension added in glibc 2.8 */ +- qsort_r(base, nmemb, size, compar, arg); +-# endif + #elif HAVE_QSORT_S + # ifdef _WIN32 + /* MSVC/MinGW qsort_s takes "arg" after the comparison function and it