summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2022-09-08 04:21:04 +0100
committerSam James <sam@gentoo.org>2022-09-10 12:28:02 +0100
commitfbdcef42c8f58fdd5175f2130afd56b8e42ef226 (patch)
tree99d109b1522d68b3b6e8150e5dc698913487679b /sys-libs/musl
parentmate-extra/mate-media: add 1.26.0 (diff)
downloadgentoo-fbdcef42c8f58fdd5175f2130afd56b8e42ef226.tar.gz
gentoo-fbdcef42c8f58fdd5175f2130afd56b8e42ef226.tar.bz2
gentoo-fbdcef42c8f58fdd5175f2130afd56b8e42ef226.zip
sys-libs/musl: add USE=crypt for libxcrypt support
Add USE=crypt to allow enabling/disabling crypt.h installation (to allow sys-libs/libxcrypt[system] usage). Many things are starting to want functions from libxcrypt itself (additional functions and algorithms). musl isn't removing crypt.h (and the relevant functions from its libc), unlike glibc, but we need to allow disabling the installation of crypt.h to allow libxcrypt[system] usage (which provides crypt.h & libcrypt.so instead, with more functionality). This brings musl in line with the changes we made for glibc a while ago. The situation with glibc is a bit different because the migration is mandatory there, while we're just strongly recommending it for musl because sys-libs/libxcrypt[-system] causes headaches (see linked PAM bug for an example, but I've also hit a similar issue with Python yesterday). Bug: https://bugs.gentoo.org/867991 Bug: https://bugs.gentoo.org/699422 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-libs/musl')
-rw-r--r--sys-libs/musl/musl-1.2.3-r1.ebuild181
-rw-r--r--sys-libs/musl/musl-9999.ebuild10
2 files changed, 190 insertions, 1 deletions
diff --git a/sys-libs/musl/musl-1.2.3-r1.ebuild b/sys-libs/musl/musl-1.2.3-r1.ebuild
new file mode 100644
index 000000000000..fedb9137f4cb
--- /dev/null
+++ b/sys-libs/musl/musl-1.2.3-r1.ebuild
@@ -0,0 +1,181 @@
+# 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 prefix
+if [[ ${PV} == "9999" ]] ; then
+ EGIT_REPO_URI="git://git.musl-libc.org/musl"
+ inherit git-r3
+else
+ VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/musl.asc
+ inherit verify-sig
+
+ SRC_URI="https://musl.libc.org/releases/${P}.tar.gz"
+ SRC_URI+=" verify-sig? ( https://musl.libc.org/releases/${P}.tar.gz.asc )"
+ KEYWORDS="-* ~amd64 ~arm ~arm64 ~mips ~ppc ~ppc64 ~riscv ~x86"
+
+ BDEPEND="verify-sig? ( sec-keys/openpgp-keys-musl )"
+fi
+GETENT_COMMIT="93a08815f8598db442d8b766b463d0150ed8e2ab"
+GETENT_FILE="musl-getent-${GETENT_COMMIT}.c"
+SRC_URI+="
+ https://dev.gentoo.org/~blueness/musl-misc/getconf.c
+ https://gitlab.alpinelinux.org/alpine/aports/-/raw/${GETENT_COMMIT}/main/musl/getent.c -> ${GETENT_FILE}
+ https://dev.gentoo.org/~blueness/musl-misc/iconv.c
+"
+
+export CBUILD=${CBUILD:-${CHOST}}
+export CTARGET=${CTARGET:-${CHOST}}
+if [[ ${CTARGET} == ${CHOST} ]] ; then
+ if [[ ${CATEGORY} == cross-* ]] ; then
+ export CTARGET=${CATEGORY#cross-}
+ fi
+fi
+
+DESCRIPTION="Light, fast and simple C library focused on standards-conformance and safety"
+HOMEPAGE="https://musl.libc.org"
+
+LICENSE="MIT LGPL-2 GPL-2"
+SLOT="0"
+IUSE="crypt headers-only"
+
+QA_SONAME="/usr/lib/libc.so"
+QA_DT_NEEDED="/usr/lib/libc.so"
+
+RDEPEND="crypt? ( sys-libs/libxcrypt[system] )"
+
+is_crosscompile() {
+ [[ ${CHOST} != ${CTARGET} ]]
+}
+
+just_headers() {
+ use headers-only && is_crosscompile
+}
+
+pkg_setup() {
+ if [ ${CTARGET} == ${CHOST} ] ; then
+ case ${CHOST} in
+ *-musl*) ;;
+ *) die "Use sys-devel/crossdev to build a musl toolchain" ;;
+ esac
+ fi
+
+ # fix for #667126, copied from glibc ebuild
+ # make sure host make.conf doesn't pollute us
+ if is_crosscompile || tc-is-cross-compiler ; then
+ CHOST=${CTARGET} strip-unsupported-flags
+ fi
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ elif use verify-sig ; then
+ # We only verify the release; not the additional (fixed, safe) files
+ # we download.
+ # (Seem to get IPC error on verifying in cross?)
+ ! is_crosscompile && verify-sig_verify_detached "${DISTDIR}"/${P}.tar.gz{,.asc}
+ fi
+
+ default
+}
+
+src_prepare() {
+ default
+
+ mkdir "${WORKDIR}"/misc || die
+ cp "${DISTDIR}"/getconf.c "${WORKDIR}"/misc/getconf.c || die
+ cp "${DISTDIR}/${GETENT_FILE}" "${WORKDIR}"/misc/getent.c || die
+ cp "${DISTDIR}"/iconv.c "${WORKDIR}"/misc/iconv.c || die
+}
+
+src_configure() {
+ tc-getCC ${CTARGET}
+
+ just_headers && export CC=true
+
+ local sysroot
+ is_crosscompile && sysroot=/usr/${CTARGET}
+ ./configure \
+ --target=${CTARGET} \
+ --prefix=${EPREFIX}${sysroot}/usr \
+ --syslibdir=${EPREFIX}${sysroot}/lib \
+ --disable-gcc-wrapper || die
+}
+
+src_compile() {
+ emake obj/include/bits/alltypes.h
+ just_headers && return 0
+
+ emake
+ if [[ ${CATEGORY} != cross-* ]] ; then
+ emake -C "${T}" getconf getent iconv \
+ CC="$(tc-getCC)" \
+ CFLAGS="${CFLAGS}" \
+ CPPFLAGS="${CPPFLAGS}" \
+ LDFLAGS="${LDFLAGS}" \
+ VPATH="${WORKDIR}/misc"
+ fi
+
+ $(tc-getCC) ${CFLAGS} -c -o libssp_nonshared.o "${FILESDIR}"/stack_chk_fail_local.c || die
+ $(tc-getAR) -rcs libssp_nonshared.a libssp_nonshared.o || die
+}
+
+src_install() {
+ local target="install"
+ just_headers && target="install-headers"
+ emake DESTDIR="${D}" ${target}
+ just_headers && return 0
+
+ # musl provides ldd via a sym link to its ld.so
+ local sysroot
+ is_crosscompile && sysroot=/usr/${CTARGET}
+ local ldso=$(basename "${ED}"${sysroot}/lib/ld-musl-*)
+ dosym ${EPREFIX}${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd
+
+ if ! use crypt ; then
+ # Allow sys-libs/libxcrypt[system] to provide it instead
+ rm "${ED}"/usr/include/crypt.h || die
+ fi
+
+ if [[ ${CATEGORY} != cross-* ]] ; then
+ # Fish out of config:
+ # ARCH = ...
+ # SUBARCH = ...
+ # and print $(ARCH)$(SUBARCH).
+ local arch=$(awk '{ k[$1] = $3 } END { printf("%s%s", k["ARCH"], k["SUBARCH"]); }' config.mak)
+
+ # 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
+ dobin "${T}"/getconf
+ dobin "${T}"/getent
+ dobin "${T}"/iconv
+ echo 'LDPATH="include ld.so.conf.d/*.conf"' > "${T}"/00musl || die
+ doenvd "${T}"/00musl
+ dolib.a libssp_nonshared.a
+ fi
+}
+
+pkg_postinst() {
+ is_crosscompile && return 0
+
+ [ -n "${ROOT}" ] && return 0
+
+ ldconfig || die
+}
diff --git a/sys-libs/musl/musl-9999.ebuild b/sys-libs/musl/musl-9999.ebuild
index 07ab1388cef8..fedb9137f4cb 100644
--- a/sys-libs/musl/musl-9999.ebuild
+++ b/sys-libs/musl/musl-9999.ebuild
@@ -35,13 +35,16 @@ fi
DESCRIPTION="Light, fast and simple C library focused on standards-conformance and safety"
HOMEPAGE="https://musl.libc.org"
+
LICENSE="MIT LGPL-2 GPL-2"
SLOT="0"
-IUSE="headers-only"
+IUSE="crypt headers-only"
QA_SONAME="/usr/lib/libc.so"
QA_DT_NEEDED="/usr/lib/libc.so"
+RDEPEND="crypt? ( sys-libs/libxcrypt[system] )"
+
is_crosscompile() {
[[ ${CHOST} != ${CTARGET} ]]
}
@@ -131,6 +134,11 @@ src_install() {
local ldso=$(basename "${ED}"${sysroot}/lib/ld-musl-*)
dosym ${EPREFIX}${sysroot}/lib/${ldso} ${sysroot}/usr/bin/ldd
+ if ! use crypt ; then
+ # Allow sys-libs/libxcrypt[system] to provide it instead
+ rm "${ED}"/usr/include/crypt.h || die
+ fi
+
if [[ ${CATEGORY} != cross-* ]] ; then
# Fish out of config:
# ARCH = ...