From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 2897815808C for ; Sun, 20 Feb 2022 00:31:40 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 49E72E0809; Sun, 20 Feb 2022 00:31:39 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 212BFE07F1 for ; Sun, 20 Feb 2022 00:31:39 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 10AD3335DED for ; Sun, 20 Feb 2022 00:31:38 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 166242F0 for ; Sun, 20 Feb 2022 00:31:35 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1645316986.b02003640228503cb93d5c371bef1f55c555429f.sam@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: sys-libs/musl/, sys-libs/musl/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: sys-libs/musl/files/ldconfig.in-r3 sys-libs/musl/musl-1.2.2-r8.ebuild sys-libs/musl/musl-9999.ebuild X-VCS-Directories: sys-libs/musl/ sys-libs/musl/files/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: b02003640228503cb93d5c371bef1f55c555429f X-VCS-Branch: master Date: Sun, 20 Feb 2022 00:31:35 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 438a00aa-e037-47b7-9a95-01083f0c3107 X-Archives-Hash: 3f1337495d6ab0a4343ffa4d26ee56c5 commit: b02003640228503cb93d5c371bef1f55c555429f Author: Esteve Varela Colominas gmail com> AuthorDate: Sat Feb 12 15:34:33 2022 +0000 Commit: Sam James gentoo org> CommitDate: Sun Feb 20 00:29:46 2022 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b0200364 sys-libs/musl: Support Gentoo prefix Added necessary framework to get this libc to run properly under a prefix. Closes: https://bugs.gentoo.org/833192 Signed-off-by: Esteve Varela Colominas gmail.com> Closes: https://github.com/gentoo/gentoo/pull/24169 Signed-off-by: Sam James gentoo.org> sys-libs/musl/files/ldconfig.in-r3 | 160 +++++++++++++++++++++ .../{musl-9999.ebuild => musl-1.2.2-r8.ebuild} | 44 +++--- sys-libs/musl/musl-9999.ebuild | 44 +++--- 3 files changed, 200 insertions(+), 48 deletions(-) diff --git a/sys-libs/musl/files/ldconfig.in-r3 b/sys-libs/musl/files/ldconfig.in-r3 new file mode 100644 index 000000000000..60f6cc9e1130 --- /dev/null +++ b/sys-libs/musl/files/ldconfig.in-r3 @@ -0,0 +1,160 @@ +#!/bin/bash -e +# Copyright 1999-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +ROOT="/" +EPREFIX="@GENTOO_PORTAGE_EPREFIX@" +LDSO_CONF_FILE="/etc/ld.so.conf" + +VERBOSE=0 + +UPDATE_LINKS=1 + +get_options() { + LDSO_CONF="" + while getopts "vnNXf:C:r:p" opt "$@"; do + case $opt in + v) + echo "ldconfig for musl in Gentoo" + VERBOSE=1 + ;; + r) + ROOT=${OPTARG} + ;; + f) + LDSO_CONF=${OPTARG} + ;; + X) + UPDATE_LINKS=0 + ;; + \?) + echo "Invalid option: -${opt}" >&2 + exit 1 + ;; + n|N|C|p) + echo "Unimplemented option: -${opt}" >&2 + exit 1 + ;; + esac + done + if [[ -z ${LDSO_CONF} ]]; then + LDSO_CONF=${ROOT}${EPREFIX}${LDSO_CONF_FILE} + fi + + if [[ ${UPDATE_LINKS} == 1 ]]; then + echo "Updating links is not implemented." + fi +} + + +repeated() { + local l=${1} + local drs="${@:2}" + for m in ${drs}; do + [[ ${m} == ${l} ]] && return 0 + done + return 1 +} + +expand() { + # We are assuming the ld.so.conf's 'include' is not recursive + local f line l + local glob="${LDSO_CONF_DIR}/${1}" + local drs="${@:2} " + + for f in ${glob}; do + [[ ! -f ${f} ]] && continue + while read line; do + line=${line%%#*} + line=${line//:/ } + line=${line//,/ } + for l in ${line}; do + # We must add this whether or not the directory exists + repeated ${l} ${drs} && continue + drs+=" ${l} " + done + done < ${f} + done + + echo ${drs} +} + +read_ldso_conf() { + local drs=" " + + while read line; do + # Sanitize the line - see ldconfig(8) for delimiters + # Note: bash read turns tabs into spaces and read already + # delimits on newlines with the default $IFS + line=${line%%#*} # Remove comments + line=${line//:/ } # Change colon delimiter to space + line=${line//,/ } # Change comma delimiter to space + + next=0 + for l in ${line}; do + if [[ ${next} == 1 ]]; then + next=0 + drs=$(expand ${l} ${drs}) + elif [[ ${l} == "include" ]]; then + next=1 + else + # glibc's ldconfig silently skips non directories + if [[ -d ${l} ]]; then + repeated ${l} ${drs} && continue + drs+=" ${l} " + fi + fi + done + done < ${1} + + echo ${drs} +} + +sanitize() { + local drs=$@ + + repeated "${EPREFIX}/lib" ${drs} || drs="${EPREFIX}/lib ${drs}" + repeated "${EPREFIX}/usr/lib" ${drs} || drs="${EPREFIX}/usr/lib ${drs}" + + echo ${drs} +} + +changed() { + [[ -f ${ETC_LDSO_PATH} ]] || return 0 + local current=$(<${ETC_LDSO_PATH}) + current=${current//$'\n'/ } + [[ ${current} != ${drs} ]] || return 1 +} + +get_options "$@" + +if [[ ! -e ${LDSO_CONF} ]]; then + echo "${LDSO_CONF} not found" >&2 + exit 1 +fi + +LDSO_CONF_DIR=$(dirname ${LDSO_CONF}) + +drs=$(read_ldso_conf "${LDSO_CONF}") +drs=$(sanitize ${drs}) + +ARCH=@@ARCH@@ +LDSO_PATH="${ROOT}${EPREFIX}/lib/ld-musl-${ARCH}.so.1" +if [[ ! -e ${LDSO_PATH} ]]; then + echo "${LDSO_PATH} not found" >&2 + exit 1 +fi + +LDSO_ARCH=$(basename ${LDSO_PATH}) +LDSO_NAME=${LDSO_ARCH%.so.1} +ETC_LDSO_PATH="${ROOT}${EPREFIX}/etc/${LDSO_NAME}.path" + +changed || exit 0 +X=$(mktemp -p /tmp ${LDSO_NAME}.XXXXXX) +for d in ${drs}; do + echo ${d} >> ${X} +done +chmod 644 ${X} +# busybox doesn't support mz -Z +cp ${X} ${ETC_LDSO_PATH} +rm ${X} diff --git a/sys-libs/musl/musl-9999.ebuild b/sys-libs/musl/musl-1.2.2-r8.ebuild similarity index 76% copy from sys-libs/musl/musl-9999.ebuild copy to sys-libs/musl/musl-1.2.2-r8.ebuild index 6a5e2688dd5a..52960e95a004 100644 --- a/sys-libs/musl/musl-9999.ebuild +++ b/sys-libs/musl/musl-1.2.2-r8.ebuild @@ -1,9 +1,9 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 -inherit eapi8-dosym flag-o-matic toolchain-funcs +inherit eapi8-dosym flag-o-matic toolchain-funcs prefix if [[ ${PV} == "9999" ]] ; then EGIT_REPO_URI="git://git.musl-libc.org/musl" inherit git-r3 @@ -76,11 +76,11 @@ src_configure() { just_headers && export CC=true local sysroot - is_crosscompile && sysroot="${EPREFIX}"/usr/${CTARGET} + is_crosscompile && sysroot=/usr/${CTARGET} ./configure \ --target=${CTARGET} \ - --prefix=${sysroot}/usr \ - --syslibdir=${sysroot}/lib \ + --prefix=${EPREFIX}${sysroot}/usr \ + --syslibdir=${EPREFIX}${sysroot}/lib \ --disable-gcc-wrapper || die } @@ -111,8 +111,8 @@ src_install() { # musl provides ldd via a sym link to its ld.so local sysroot is_crosscompile && sysroot=/usr/${CTARGET} - local ldso=$(basename "${D}"${sysroot}/lib/ld-musl-*) - dosym ${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd + local ldso=$(basename "${ED}"${sysroot}/lib/ld-musl-*) + dosym ${EPREFIX}${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd if [[ ${CATEGORY} != cross-* ]] ; then # Fish out of config: @@ -121,24 +121,20 @@ src_install() { # and print $(ARCH)$(SUBARCH). local arch=$(awk '{ k[$1] = $3 } END { printf("%s%s", k["ARCH"], k["SUBARCH"]); }' config.mak) - if [[ ! -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] ; then - # During cross (using crossdev), when emerging sys-libs/musl, - # if /usr/lib/libc.so.1 doesn't exist on the system, installation - # would fail. - # - # The musl build system seems to create a symlink: - # ${D}/lib/ld-musl-${arch}.so.1 -> /usr/lib/libc.so.1 (absolute) - # During cross, there's no guarantee that the host is using musl - # so that file may not exist. Use a relative symlink within ${D} - # instead. - dosym8 -r /usr/lib/libc.so /lib/ld-musl-${arch}.so.1 - - # If it's still a dead symlnk, OK, we really do need to abort. - [[ -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] || die - fi - - cp "${FILESDIR}"/ldconfig.in-r1 "${T}"/ldconfig.in || die + # The musl build system seems to create a symlink: + # ${D}/lib/ld-musl-${arch}.so.1 -> /usr/lib/libc.so.1 (absolute) + # During cross or within prefix, there's no guarantee that the host is + # using musl so that file may not exist. Use a relative symlink within + # ${D} instead. + rm -f "${ED}"/lib/ld-musl-${arch}.so.1 || die + dosym8 -r /usr/lib/libc.so /lib/ld-musl-${arch}.so.1 + + # If it's still a dead symlnk, OK, we really do need to abort. + [[ -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] || die + + cp "${FILESDIR}"/ldconfig.in-r3 "${T}"/ldconfig.in || die sed -e "s|@@ARCH@@|${arch}|" "${T}"/ldconfig.in > "${T}"/ldconfig || die + eprefixify "${T}"/ldconfig into / dosbin "${T}"/ldconfig into /usr diff --git a/sys-libs/musl/musl-9999.ebuild b/sys-libs/musl/musl-9999.ebuild index 6a5e2688dd5a..52960e95a004 100644 --- a/sys-libs/musl/musl-9999.ebuild +++ b/sys-libs/musl/musl-9999.ebuild @@ -1,9 +1,9 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 -inherit eapi8-dosym flag-o-matic toolchain-funcs +inherit eapi8-dosym flag-o-matic toolchain-funcs prefix if [[ ${PV} == "9999" ]] ; then EGIT_REPO_URI="git://git.musl-libc.org/musl" inherit git-r3 @@ -76,11 +76,11 @@ src_configure() { just_headers && export CC=true local sysroot - is_crosscompile && sysroot="${EPREFIX}"/usr/${CTARGET} + is_crosscompile && sysroot=/usr/${CTARGET} ./configure \ --target=${CTARGET} \ - --prefix=${sysroot}/usr \ - --syslibdir=${sysroot}/lib \ + --prefix=${EPREFIX}${sysroot}/usr \ + --syslibdir=${EPREFIX}${sysroot}/lib \ --disable-gcc-wrapper || die } @@ -111,8 +111,8 @@ src_install() { # musl provides ldd via a sym link to its ld.so local sysroot is_crosscompile && sysroot=/usr/${CTARGET} - local ldso=$(basename "${D}"${sysroot}/lib/ld-musl-*) - dosym ${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd + local ldso=$(basename "${ED}"${sysroot}/lib/ld-musl-*) + dosym ${EPREFIX}${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd if [[ ${CATEGORY} != cross-* ]] ; then # Fish out of config: @@ -121,24 +121,20 @@ src_install() { # and print $(ARCH)$(SUBARCH). local arch=$(awk '{ k[$1] = $3 } END { printf("%s%s", k["ARCH"], k["SUBARCH"]); }' config.mak) - if [[ ! -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] ; then - # During cross (using crossdev), when emerging sys-libs/musl, - # if /usr/lib/libc.so.1 doesn't exist on the system, installation - # would fail. - # - # The musl build system seems to create a symlink: - # ${D}/lib/ld-musl-${arch}.so.1 -> /usr/lib/libc.so.1 (absolute) - # During cross, there's no guarantee that the host is using musl - # so that file may not exist. Use a relative symlink within ${D} - # instead. - dosym8 -r /usr/lib/libc.so /lib/ld-musl-${arch}.so.1 - - # If it's still a dead symlnk, OK, we really do need to abort. - [[ -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] || die - fi - - cp "${FILESDIR}"/ldconfig.in-r1 "${T}"/ldconfig.in || die + # The musl build system seems to create a symlink: + # ${D}/lib/ld-musl-${arch}.so.1 -> /usr/lib/libc.so.1 (absolute) + # During cross or within prefix, there's no guarantee that the host is + # using musl so that file may not exist. Use a relative symlink within + # ${D} instead. + rm -f "${ED}"/lib/ld-musl-${arch}.so.1 || die + dosym8 -r /usr/lib/libc.so /lib/ld-musl-${arch}.so.1 + + # If it's still a dead symlnk, OK, we really do need to abort. + [[ -e "${ED}"/lib/ld-musl-${arch}.so.1 ]] || die + + cp "${FILESDIR}"/ldconfig.in-r3 "${T}"/ldconfig.in || die sed -e "s|@@ARCH@@|${arch}|" "${T}"/ldconfig.in > "${T}"/ldconfig || die + eprefixify "${T}"/ldconfig into / dosbin "${T}"/ldconfig into /usr