[arch-commits] Commit in mesa/trunk (PKGBUILD glibc_dropped_xlocale.h.diff)

Andreas Radke andyrtr at archlinux.org
Mon Sep 4 11:37:00 UTC 2017


    Date: Monday, September 4, 2017 @ 11:37:00
  Author: andyrtr
Revision: 304649

upgpkg: mesa 17.1.8-2

apply upstream fix for broken video caused by glibc 2.26 dropping xlocale.h; FS#55244

Added:
  mesa/trunk/glibc_dropped_xlocale.h.diff
Modified:
  mesa/trunk/PKGBUILD

------------------------------+
 PKGBUILD                     |   12 ++-
 glibc_dropped_xlocale.h.diff |  143 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 152 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-09-04 09:09:32 UTC (rev 304648)
+++ PKGBUILD	2017-09-04 11:37:00 UTC (rev 304649)
@@ -5,7 +5,7 @@
 pkgbase=mesa
 pkgname=('opencl-mesa' 'vulkan-intel' 'vulkan-radeon' 'libva-mesa-driver' 'mesa-vdpau' 'mesa')
 pkgver=17.1.8
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 makedepends=('python2-mako' 'libxml2' 'libx11' 'glproto' 'libdrm' 'dri2proto' 'dri3proto' 'presentproto' 
              'libxshmfence' 'libxxf86vm' 'libxdamage' 'libvdpau' 'libva' 'wayland' 'elfutils' 'llvm'
@@ -14,11 +14,13 @@
 license=('custom')
 source=(https://mesa.freedesktop.org/archive/mesa-${pkgver}.tar.xz{,.sig}
         LICENSE
-        0002-glvnd-fix-gl-dot-pc.patch)
+        0002-glvnd-fix-gl-dot-pc.patch
+        glibc_dropped_xlocale.h.diff)
 sha256sums=('75ed2eaeae26ddd536150f294386468ae2e1a7717948c41cd14b7875be5269db'
             'SKIP'
             '7fdc119cf53c8ca65396ea73f6d10af641ba41ea1dd2bd44a824726e01c8b3f2'
-            '64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966')
+            '64a77944a28026b066c1682c7258d02289d257b24b6f173a9f7580c48beed966'
+            '6de2adc3dde36d098bfe9977f5052c13e1b2e80a913e4c83d520b2e5349ddbd0')
 validpgpkeys=('8703B6700E7EE06D7A39B8D6EDAE37B02CEB490D') # Emil Velikov <emil.l.velikov at gmail.com>
 validpgpkeys+=('946D09B5E4C9845E63075FF1D961C596A7203456') # Andres Gomez <tanty at igalia.com>
 validpgpkeys+=('E3E8F480C52ADD73B278EE78E1ECBE07D7D70895') # Juan Antonio Suárez Romero (Igalia, S.L.) <jasuarez at igalia.com>"
@@ -29,6 +31,10 @@
   # glvnd support patches - from Fedora
   # non-upstreamed ones
   patch -Np1 -i ../0002-glvnd-fix-gl-dot-pc.patch
+  
+  # glibc 2.26 dropped xlocale.h leading to corrupted video
+  # https://bugs.archlinux.org/task/55244 / https://bugs.freedesktop.org/show_bug.cgi?id=102454
+  patch -Np1 -i ../glibc_dropped_xlocale.h.diff
 
   autoreconf -fiv
 }

Added: glibc_dropped_xlocale.h.diff
===================================================================
--- glibc_dropped_xlocale.h.diff	                        (rev 0)
+++ glibc_dropped_xlocale.h.diff	2017-09-04 11:37:00 UTC (rev 304649)
@@ -0,0 +1,143 @@
+From 49b428470e28ae6ab22083e43fa41abf622f3b0d Mon Sep 17 00:00:00 2001
+From: Eric Engestrom <eric.engestrom at imgtec.com>
+Date: Thu, 31 Aug 2017 16:55:56 +0000
+Subject: util: improve compiler guard
+
+Glibc 2.26 has dropped xlocale.h, but the functions needed (strtod_l()
+and strdof_l()) can be found in stdlib.h.
+Improve the detection method to allow newer builds to still make use of
+the locale-setting.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102454
+Cc: Laurent Carlier <lordheavym at gmail.com>
+Cc: Emil Velikov <emil.l.velikov at gmail.com>
+Cc: Rob Herring <robh at kernel.org>
+Signed-off-by: Eric Engestrom <eric.engestrom at imgtec.com>
+Reviewed-by: Laurent Carlier <lordheavym at gmail.com>
+Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
+
+diff --git a/configure.ac b/configure.ac
+index ac64a38..fb6037e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -795,6 +795,27 @@ AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
+ AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
+ AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"])
+ 
++AC_MSG_CHECKING([whether strtod has locale support])
++AC_LINK_IFELSE([AC_LANG_SOURCE([[
++    #define _GNU_SOURCE
++    #include <stdlib.h>
++    #include <locale.h>
++    #ifdef HAVE_XLOCALE_H
++    #include <xlocale.h>
++    #endif
++    int main() {
++       locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL);
++       const char *s = "1.0";
++       char *end;
++       double d = strtod_l(s, end, loc);
++       float f = strtof_l(s, end, loc);
++       freelocale(loc);
++       return 0;
++    }]])],
++  [DEFINES="$DEFINES -DHAVE_STRTOD_L"];
++   AC_MSG_RESULT([yes]),
++   AC_MSG_RESULT([no]))
++
+ dnl Check to see if dlopen is in default libraries (like Solaris, which
+ dnl has it in libc), or if libdl is needed to get it.
+ AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"],
+diff --git a/scons/gallium.py b/scons/gallium.py
+index c8e47a3..1e35ef4 100755
+--- a/scons/gallium.py
++++ b/scons/gallium.py
+@@ -157,6 +157,19 @@ def check_header(env, header):
+     env = conf.Finish()
+     return have_header
+ 
++def check_functions(env, functions):
++    '''Check if all of the functions exist'''
++
++    conf = SCons.Script.Configure(env)
++    have_functions = True
++
++    for function in functions:
++        if not conf.CheckFunc(function):
++            have_functions = False
++
++    env = conf.Finish()
++    return have_functions
++
+ def check_prog(env, prog):
+     """Check whether this program exists."""
+ 
+@@ -339,6 +352,9 @@ def generate(env):
+         if check_header(env, 'xlocale.h'):
+             cppdefines += ['HAVE_XLOCALE_H']
+ 
++        if check_functions(env, ['strtod_l', 'strtof_l']):
++            cppdefines += ['HAVE_STRTOD_L']
++
+     if platform == 'windows':
+         cppdefines += [
+             'WIN32',
+diff --git a/src/util/strtod.c b/src/util/strtod.c
+index ea7d395..de695d6 100644
+--- a/src/util/strtod.c
++++ b/src/util/strtod.c
+@@ -26,12 +26,12 @@
+ 
+ #include <stdlib.h>
+ 
+-#ifdef _GNU_SOURCE
++#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L)
+ #include <locale.h>
+ #ifdef HAVE_XLOCALE_H
+ #include <xlocale.h>
+-static locale_t loc;
+ #endif
++static locale_t loc;
+ #endif
+ 
+ #include "strtod.h"
+@@ -40,7 +40,7 @@ static locale_t loc;
+ void
+ _mesa_locale_init(void)
+ {
+-#if defined(_GNU_SOURCE) && defined(HAVE_XLOCALE_H)
++#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L)
+    loc = newlocale(LC_CTYPE_MASK, "C", NULL);
+ #endif
+ }
+@@ -48,7 +48,7 @@ _mesa_locale_init(void)
+ void
+ _mesa_locale_fini(void)
+ {
+-#if defined(_GNU_SOURCE) && defined(HAVE_XLOCALE_H)
++#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L)
+    freelocale(loc);
+ #endif
+ }
+@@ -60,7 +60,7 @@ _mesa_locale_fini(void)
+ double
+ _mesa_strtod(const char *s, char **end)
+ {
+-#if defined(_GNU_SOURCE) && defined(HAVE_XLOCALE_H)
++#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L)
+    return strtod_l(s, end, loc);
+ #else
+    return strtod(s, end);
+@@ -75,7 +75,7 @@ _mesa_strtod(const char *s, char **end)
+ float
+ _mesa_strtof(const char *s, char **end)
+ {
+-#if defined(_GNU_SOURCE) && defined(HAVE_XLOCALE_H)
++#if defined(_GNU_SOURCE) && defined(HAVE_STRTOD_L)
+    return strtof_l(s, end, loc);
+ #elif defined(HAVE_STRTOF)
+    return strtof(s, end);
+-- 
+cgit v0.10.2
+
+



More information about the arch-commits mailing list