mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-09-09 16:01:54 -09:00
package/perl: fix build issue with musl
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
8a289667f5, 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>
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
committed by
Julien Olivain
parent
7538f675d7
commit
d950fff290
@@ -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)
|
||||
Reference in New Issue
Block a user