All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] package/perl: fix build issue with musl
@ 2026-08-26 20:33 Thomas Petazzoni via buildroot
  2026-08-27 20:34 ` Julien Olivain via buildroot
  0 siblings, 1 reply; 2+ messages in thread
From: Thomas Petazzoni via buildroot @ 2026-08-26 20:33 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Petazzoni, Francois Perrad

perl does not build with musl due to memrchr() being unavailable. This
is caused by a perl-cross bug, which does function availability
detection with _GNU_SOURCE defined, but then does the build without
_GNU_SOURCE defined. At least OpenEmbedded and NixOS have faced the
same issue, and worked it around in slightly different ways.

On our side, we create a patch, which was submitted upstream, to solve
the issue.

This issue has been introduced in perl-cross commit b40c560f5d5e,
which was first merged in perl-cross release 1.4.1. From a Buildroot
perspective, we bumped from perl-cross 1.4 to 1.4.1 in commit
8a289667f5dba6fffb3a21faa14517e9b49726a4, which was merged
2023.05. And indeed the build failure can be reproduced even on our
LTS 2025.02.x, so the fix needs to be backported there.

It should be noted that even if the patch is against perl-cross, we
add it to package/perl/ directly, as patches in perl are applied after
perl has been extracted *and* perl-cross has been extracted on top.

Fixes:

  https://autobuild.buildroot.net/results/3e47ade0963642988fd8e1be9a6e8042700619ec/

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 ...gure-keep-_GNU_SOURCE-in-build-flags.patch | 55 +++++++++++++++++++
 1 file changed, 55 insertions(+)
 create mode 100644 package/perl/0001-configure-keep-_GNU_SOURCE-in-build-flags.patch

diff --git a/package/perl/0001-configure-keep-_GNU_SOURCE-in-build-flags.patch b/package/perl/0001-configure-keep-_GNU_SOURCE-in-build-flags.patch
new file mode 100644
index 0000000000..497e58c502
--- /dev/null
+++ b/package/perl/0001-configure-keep-_GNU_SOURCE-in-build-flags.patch
@@ -0,0 +1,55 @@
+From 6bdfdff24f4a7d17d3b7d9d02bca3eac11c235a4 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+Date: Wed, 26 Aug 2026 19:34:39 +0200
+Subject: [PATCH] configure: keep _GNU_SOURCE in build flags
+
+The checkfunc() function probes available libc functions with _GNU_SOURCE
+defined. The generated config.sh did not retain that define in ccflags, so
+the actual cross build could use functions whose prototypes remain hidden by
+feature-test macros. This breaks musl builds, where memrchr is declared only
+with _GNU_SOURCE.
+
+To fix this, append _GNU_SOURCE to explicit -Dccflags values while parsing
+configure arguments. Such values are locked before configure_tool.sh can
+append flags. This keeps the function-availability checks and subsequent
+compilation in the same feature set, including when flags are supplied
+through CFLAGS.
+
+This fixes the regression introduced by b40c560f5d5e (configure_func.sh: Add
+_GNU_SOURCE define and function signatures).
+
+It fixes the following build issue with musl:
+
+    In file included from op.c:163:
+    op.c: In function 'Perl_newATTRSUB_x':
+    perl.h:2385:25: error: implicit declaration of function 'memrchr'; did
+    you mean 'memchr'? [-Wimplicit-function-declaration]
+     2385 | #    define my_memrchr  memrchr
+          |                         ^~~~~~~
+
+This issue is worked around in several build systems:
+
+- In OpenEmbedded:
+  https://github.com/openembedded/openembedded-core/commit/6422e62
+
+- In NixOS:
+  https://github.com/NixOS/nixpkgs/pull/441527
+
+Fixes: https://github.com/arsv/perl-cross/issues/158
+Upstream: https://github.com/arsv/perl-cross/pull/180
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
+
+diff --git a/cnf/configure_args.sh b/cnf/configure_args.sh
+index 5bc4c6b..65ffc96 100644
+--- a/cnf/configure_args.sh
++++ b/cnf/configure_args.sh
+@@ -225,6 +225,9 @@ while [ $i -le $# -o -n "$n" ]; do
+ 		host|target|build) ;;
+ 		# original Configure options
+ 		D)
++			if [ "$k" = 'ccflags' ]; then
++				v="$v -D_GNU_SOURCE"
++			fi
+ 			setordefine "$k" "$x" "$v" 'define' 'true'
+ 			;;
+ 		U)
-- 
2.55.0

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-08-27 20:34 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-26 20:33 [Buildroot] [PATCH] package/perl: fix build issue with musl Thomas Petazzoni via buildroot
2026-08-27 20:34 ` Julien Olivain via buildroot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.