aboutsummaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2022-09-28 04:52:09 +0000
committerXin LI <delphij@FreeBSD.org>2022-09-28 04:52:10 +0000
commit1b12700108642534ba3ed31b49c1340c7fd2f0e5 (patch)
treea93650e8f387994d3e278da09ef1031bd7158d4d /graphics
parentce59a3f9d9d15e48d112a1b2a1bd61d54b51f43f (diff)
downloadports-1b12700108642534ba3ed31b49c1340c7fd2f0e5.tar.gz
ports-1b12700108642534ba3ed31b49c1340c7fd2f0e5.zip
graphics/mesa-dri: Improve qsort_r detection.
Reviewed by: manu Differential Revision: https://reviews.freebsd.org/D36514
Diffstat (limited to 'graphics')
-rw-r--r--graphics/mesa-dri/files/patch-meson.build46
-rw-r--r--graphics/mesa-dri/files/patch-src_util_u__qsort.h26
2 files changed, 72 insertions, 0 deletions
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 <stdlib.h>
++
++ 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 <stdlib.h>
++
++ 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