gtk3: fix clang builds (#449689)

This commit is contained in:
Jan Tojnar
2025-10-17 19:23:16 +00:00
committed by GitHub
2 changed files with 99 additions and 0 deletions
+6
View File
@@ -88,6 +88,12 @@ stdenv.mkDerivation (finalAttrs: {
patches = [
./patches/3.0-immodules.cache.patch
./patches/3.0-Xft-setting-fallback-compute-DPI-properly.patch
# Backport of MR 5531 to fix sincos detection with clang
# Adds proper headers and -D_GNU_SOURCE to function checks
# MR 5531 was only merged into GTK 4, never backported to gtk-3-24
# See: https://github.com/NixOS/nixpkgs/pull/449689
# Upstream: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5531
./patches/3.0-mr5531-backport.patch
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# X11 module requires <gio/gdesktopappinfo.h> which is not installed on Darwin
@@ -0,0 +1,93 @@
From f1fb82c739aebc6b37090f8ebf74d856129116d3 Mon Sep 17 00:00:00 2001
From: Matteo Pacini <m+github@matteopacini.me>
Date: Tue, 14 Oct 2025 22:03:27 +0100
Subject: [PATCH] Backport MR 5531: Fix sincos detection with clang
Add proper headers and -D_GNU_SOURCE to function checks to ensure
functions like sincos are properly detected, especially with clang.
Also fix gtkgears.c to avoid issues when sincos is in headers but
not detected by the build system.
Backport of https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5531
adapted for GTK 3.24.49.
---
meson.build | 10 +++++++++-
tests/gtkgears.c | 22 ++++++++++++----------
2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/meson.build b/meson.build
index 08337ec..92d7781 100644
--- a/meson.build
+++ b/meson.build
@@ -255,7 +255,15 @@ check_functions = [
]
foreach func : check_functions
- if cc.has_function(func, dependencies: libm)
+ if cc.has_function(func,
+ args: '-D_GNU_SOURCE',
+ prefix:
+ '#include <stdlib.h>\n' +
+ '#include <unistd.h>\n' +
+ '#include <sys/mman.h>\n' +
+ '#include <fcntl.h>\n' +
+ '#include <math.h>',
+ dependencies: libm)
cdata.set('HAVE_' + func.underscorify().to_upper(), 1)
endif
endforeach
diff --git a/tests/gtkgears.c b/tests/gtkgears.c
index 062b611..ba7e196 100644
--- a/tests/gtkgears.c
+++ b/tests/gtkgears.c
@@ -48,14 +48,16 @@
#define VERTICES_PER_TOOTH 34
#define GEAR_VERTEX_STRIDE 6
-#ifndef HAVE_SINCOS
-static void
-sincos (double x, double *_sin, double *_cos)
+static inline void
+_sincos (double x, double *_sin, double *_cos)
{
+#ifdef HAVE_SINCOS
+ sincos (x, _sin, _cos);
+#else
*_sin = sin (x);
*_cos = cos (x);
-}
#endif
+}
/**
* Struct describing the vertices in triangle strip
@@ -306,11 +308,11 @@ create_gear (GLfloat inner_radius,
struct point p[7];
/* Calculate needed sin/cos for varius angles */
- sincos(i * 2.0 * G_PI / teeth + da * 0, &s[0], &c[0]);
- sincos(i * 2.0 * M_PI / teeth + da * 1, &s[1], &c[1]);
- sincos(i * 2.0 * M_PI / teeth + da * 2, &s[2], &c[2]);
- sincos(i * 2.0 * M_PI / teeth + da * 3, &s[3], &c[3]);
- sincos(i * 2.0 * M_PI / teeth + da * 4, &s[4], &c[4]);
+ _sincos(i * 2.0 * G_PI / teeth + da * 0, &s[0], &c[0]);
+ _sincos(i * 2.0 * M_PI / teeth + da * 1, &s[1], &c[1]);
+ _sincos(i * 2.0 * M_PI / teeth + da * 2, &s[2], &c[2]);
+ _sincos(i * 2.0 * M_PI / teeth + da * 3, &s[3], &c[3]);
+ _sincos(i * 2.0 * M_PI / teeth + da * 4, &s[4], &c[4]);
GEAR_POINT(p[0], r2, 1);
GEAR_POINT(p[1], r2, 2);
@@ -519,7 +521,7 @@ void perspective(GLfloat *m, GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloa
identity(tmp);
deltaZ = zFar - zNear;
- sincos(radians, &sine, &cosine);
+ _sincos(radians, &sine, &cosine);
if ((deltaZ == 0) || (sine == 0) || (aspect == 0))
return;
--
2.50.1 (Apple Git-155)