summaryrefslogtreecommitdiff
path: root/etc/patches/clang-20/libcxx-musl-support.patch
blob: 96cf13d1cf2aa1003327b356d2d8cc1a20f9af65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
From cfceef12ffa2963ffc32a0e2797dfc7e5ff7a2ac Mon Sep 17 00:00:00 2001
From: Oliver Reiche <oliver.reiche@huawei.com>
Date: Fri, 21 Mar 2025 13:10:23 +0200
Subject: [PATCH] libcxx: Add musl support for __locale

... which does not provide a known rune table and uses
missing locale-based string to integer conversion functions.
---
 libcxx/include/__locale | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/libcxx/include/__locale_dir/locale_base_api.h b/libcxx/include/__locale_dir/locale_base_api.h
index c1e73ca..3ece532 100644
--- a/libcxx/include/__locale_dir/locale_base_api.h
+++ b/libcxx/include/__locale_dir/locale_base_api.h
@@ -133,6 +133,40 @@
 #    include <__locale_dir/locale_base_api/openbsd.h>
 #  elif defined(__wasi__) || _LIBCPP_HAS_MUSL_LIBC
 #    include <__locale_dir/locale_base_api/musl.h>
+#  else
+     // Detect musl libc (inspired by musl detection from gcc's config.guess)
+#    include <features.h>
+#    if !(defined(__UCLIBC__) || defined(__dietlibc__) || defined(__GLIBC__))
+#      include <stdarg.h>
+#      ifdef __DEFINED_va_list
+#        ifndef __MUSL_LIBC__
+#          define __MUSL_LIBC__
+#        endif
+#      endif
+#    endif
+
+#    ifdef __MUSL_LIBC__
+#      include <clocale>
+#      include <cstdlib>
+       // Fall back to default rune table for musl libc
+#      ifndef _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
+#        define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
+#      endif
+       // Implement missing strto*_l functions for musl libc
+#      define __MUSL_LIBC_CREATE_STRTOX_L(X) \
+         static inline auto \
+         strto ## X ## _l(const char* str, char** end, int base, locale_t l) { \
+           locale_t old = uselocale(l); \
+           auto result = strto ## X(str, end, base); \
+           uselocale(old); \
+           return result; \
+         }
+       __MUSL_LIBC_CREATE_STRTOX_L(l)
+       __MUSL_LIBC_CREATE_STRTOX_L(ll)
+       __MUSL_LIBC_CREATE_STRTOX_L(ul)
+       __MUSL_LIBC_CREATE_STRTOX_L(ull)
+#      undef __MUSL_LIBC_CREATE_STRTOX_L
+#    endif
 #  endif
 
 #  include <__locale_dir/locale_base_api/bsd_locale_fallbacks.h>
-- 
2.30.2