On Thu, 2026-01-22 at 17:35 +0000, Michal Rostecki wrote:
> Using the brace expression {ld.so,lld} in the find command results
> in musl's lld being printed, but still returns an error code due to the
> lack of glibc's ld.so. See the mentioned bug.
> 
> Also, usage of find is not really needed there, since we want to simply
> check the existence of paths and there is no need for a recursive check.
> 
> Fix that by using a simple [[ -L ]] check.
> 
> Bug: https://bugs.gentoo.org/969092
> Signed-off-by: Michal Rostecki <[email protected]>
> ---
>  eclass/sysroot.eclass | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/eclass/sysroot.eclass b/eclass/sysroot.eclass
> index f17d6bcec2b4..44b0b54dabd8 100644
> --- a/eclass/sysroot.eclass
> +++ b/eclass/sysroot.eclass
> @@ -83,7 +83,14 @@ sysroot_make_run_prefixed() {
>       if [[ ${QEMU_ARCH} == $(qemu_arch "${CBUILD}") ]]; then
>               # glibc: ld.so is a symlink, ldd is a binary.
>               # musl: ld.so doesn't exist, ldd is a symlink.
> -             local DLINKER=$(find "${MYEROOT}"/usr/bin/{ld.so,ldd} -type l 
> -print -quit 2>/dev/null || die "failed to find dynamic linker")
> +             local DLINKER candidate
> +             for candidate in "${MYEROOT}"/usr/bin/{ld.so,ldd}; do
> +                     if [[ -L ${candidate} ]]; then
> +                             DLINKER=${candidate}
> +                             break
> +                     fi
> +             done
> +             [[ -n ${DLINKER} ]] || die "failed to find dynamic linker"
>  
>               # musl symlinks ldd to ld-musl.so to libc.so. We want the 
> ld-musl.so
>               # path, not the libc.so path, so don't resolve the symlinks 
> entirely.

Looks good, thanks! I originally wrote this code for another project that
didn't check the result or use set -e, so that's why I got it wrong here.

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to