Backport the upstream fix for the limits.h override, which breaks GCC's
<limits.h> include cycle (notably GCC 16.x) and fails musl builds. musl only.

Upstream fix: https://github.com/systemd/systemd/pull/43831
(cherry picked from commit 4e08fdf59ffcafef6ca2df6342101e7e82b6183b)

Signed-off-by: Jaipaul Cheernam <[email protected]>
---
Changes in v2:
 - Use the upstream fix from systemd PR #43831 (more accurate).

 .../0001-include-fix-limits.h-override.patch  | 47 +++++++++++++++++++
 meta/recipes-core/systemd/systemd_261.3.bb    |  2 +
 2 files changed, 49 insertions(+)
 create mode 100644 
meta/recipes-core/systemd/systemd/0001-include-fix-limits.h-override.patch

diff --git 
a/meta/recipes-core/systemd/systemd/0001-include-fix-limits.h-override.patch 
b/meta/recipes-core/systemd/systemd/0001-include-fix-limits.h-override.patch
new file mode 100644
index 00000000000..6316b3ddf61
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0001-include-fix-limits.h-override.patch
@@ -0,0 +1,47 @@
+From 4e08fdf59ffcafef6ca2df6342101e7e82b6183b Mon Sep 17 00:00:00 2001
+From: Yu Watanabe <[email protected]>
+Date: Tue, 22 Sep 2026 01:55:01 +0900
+Subject: [PATCH] include: fix limits.h override
+
+This is especially necessary since GCC 16.x.
+
+Replaces #43824.
+
+(cherry picked from commit 4e08fdf59ffcafef6ca2df6342101e7e82b6183b)
+
+Upstream-Status: Backport [https://github.com/systemd/systemd/pull/43831]
+Signed-off-by: Jaipaul Cheernam <[email protected]>
+---
+ src/include/musl/limits.h | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/src/include/musl/limits.h b/src/include/musl/limits.h
+index 9620a3b0acc..cffb8ddd274 100644
+--- a/src/include/musl/limits.h
++++ b/src/include/musl/limits.h
+@@ -1,6 +1,25 @@
+ /* SPDX-License-Identifier: LGPL-2.1-or-later */
+ #pragma once
+ 
++/* GCC introduces a spurious, tricky inclusion cycle:
++ *    GCC's limits.h
++ *      -> GCC's syslimits.h
++ *         -> GCC's limits.h (again!!!)
++ *            -> glibc/musl's limits.h
++ *               -> define POSIX defines
++ *      -> define ISO C defines
++ * This works only when GCC's limits.h is included first, but a user override 
breaks the cycle. Hence, we
++ * need to manually achieve the cycle here. If GCC is not used (e.g., Clang), 
then including the compiler's
++ * limits.h twice should be redundant but harmless. */
++
++/* First, get the POSIX defines from glibc/musl's limits.h. When the two 
macros below are defined, GCC's
++ * limits.h includes the next limits.h, that is, one from glibc/musl. */
++#define _GCC_LIMITS_H_
++#define _GCC_NEXT_LIMITS_H
++#include_next <limits.h>        /* IWYU pragma: export */
++
++/* Next, get the ISO C defines from GCC's limits.h. */
++#undef _GCC_LIMITS_H_
+ #include_next <limits.h>        /* IWYU pragma: export */
+ 
+ #include <assert.h>
diff --git a/meta/recipes-core/systemd/systemd_261.3.bb 
b/meta/recipes-core/systemd/systemd_261.3.bb
index 1a256a598a8..175f0a4834f 100644
--- a/meta/recipes-core/systemd/systemd_261.3.bb
+++ b/meta/recipes-core/systemd/systemd_261.3.bb
@@ -38,6 +38,8 @@ SRC_URI += "file://touchscreen.rules \
            file://0003-Do-not-create-var-log-README.patch \
            "
 
+SRC_URI:append:libc-musl = " file://0001-include-fix-limits.h-override.patch"
+
 PAM_PLUGINS = " \
     pam-plugin-unix \
     pam-plugin-loginuid \
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#246359): 
https://lists.openembedded.org/g/openembedded-core/message/246359
Mute This Topic: https://lists.openembedded.org/mt/121364962/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to