Fix dynamic linking on Arch Linux by adding (some of) missing links. The ldd reports linker in many ways: ldd /usr/lib/libreadline.so.8 /usr/lib64/ld-linux-x86-64.so.2 (0x000071244211c000) ldd /bin/sh /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x000077457d5ec000) ldd /usr/lib/libc.so.6 /usr/lib/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x000075d218b8b000) This patch looks at the left side and determines if there is a link there, then adds it. Signed-off-by: Lukasz Gut <lgut(a)lgut.eu> --- mbuto | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/mbuto b/mbuto index 4f860cd..7d67160 100755 --- a/mbuto +++ b/mbuto @@ -668,6 +668,27 @@ libs_dlopen_copy() { done } +# libs_add_links() - Rebuild alternate links to ld as they appear on the host +# $1: String returned by ldd in form 's => d' describing location of ld +libs_add_links() { + __ld_path="${1##*=> }" + __ld_link="${1%%=>*}" + [ -z "${__ld_link}" ] && return + [ "${__ld_path}" = "${__ld_link}" ] && return + while [ "${__ld_link}" != "/" ]; do + if [ -L "${__ld_link}" ]; then + __target="$("${READLINK}" -f "${__ld_link}")" + __link="$("${REALPATH}" -s "${__ld_link}" --relative-to "/")" + __link="${wd}"/"${__link}" + [ -L "${__link}" ] && break + __destdir="$("${DIRNAME}" "${__link}")" + "${MKDIR}" -p "${__destdir}" + "${LN}" -s "${__target}" "${__link}" + fi + __ld_link="$("${DIRNAME}" "${__ld_link}")" + done +} + # __libs_copy() - Recursively copy shared dependencies for programs, libraries # $1: Host path to program or library __libs_copy() { @@ -716,8 +737,13 @@ __libs_copy() { if [ -n "${__ld_path}" ]; then libs_copy_ld_so "${__ld_path}" - libs_path_add "${__ld_path##${wd}}" + libs_path_add "${__ld_path##"${wd}"}" fi + + # On Arch Linux, to execute /bin/sh, the system expects the linker + # to be under /lib64. Linker is located in /usr/lib, and there is + # a link /lib64 => /usr/lib. + libs_add_links "${__ld_so}" } # libs_copy() - Call __libs_copy with tabs and newlines as IFS -- 2.46.1