From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (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 finch.gentoo.org (Postfix) with ESMTPS id ECA081582EF for ; Sun, 09 Mar 2025 10:18:39 +0000 (UTC) Received: from lists.gentoo.org (bobolink.gentoo.org [140.211.166.189]) (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) (Authenticated sender: relay-lists.gentoo.org@gentoo.org) by smtp.gentoo.org (Postfix) with ESMTPSA id D8BC03430FD for ; Sun, 09 Mar 2025 10:18:39 +0000 (UTC) Received: from bobolink.gentoo.org (localhost [127.0.0.1]) by bobolink.gentoo.org (Postfix) with ESMTP id C37F61103E1; Sun, 09 Mar 2025 10:17:57 +0000 (UTC) Received: from smtp.gentoo.org (smtp.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) server-digest SHA256) (No client certificate requested) by bobolink.gentoo.org (Postfix) with ESMTPS id 136F5110370 for ; Sun, 09 Mar 2025 10:17:57 +0000 (UTC) Received: from symphony.aura-online.co.uk (157.2.187.81.in-addr.arpa [81.187.2.157]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: chewi) by smtp.gentoo.org (Postfix) with ESMTPSA id 7943634307A for ; Sun, 09 Mar 2025 10:17:56 +0000 (UTC) Message-ID: Subject: Re: [gentoo-dev] [PATCH] ffmpeg-compat.eclass: new eclass From: James Le Cuirot To: gentoo-dev@lists.gentoo.org Date: Sun, 09 Mar 2025 10:17:42 +0000 In-Reply-To: <20250309033514.576-1-ionen@gentoo.org> References: <20250309033514.576-1-ionen@gentoo.org> Autocrypt: addr=chewi@gentoo.org; prefer-encrypt=mutual; keydata=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 Content-Type: multipart/signed; micalg="pgp-sha256"; protocol="application/pgp-signature"; boundary="=-Q8MTUQFJagUc82bsOmz8" User-Agent: Evolution 3.54.3 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 X-Archives-Salt: 46d44d98-128f-4bbb-b561-34f1dc609d29 X-Archives-Hash: 920f7ea568e381f8f8d19356809dfdc0 --=-Q8MTUQFJagUc82bsOmz8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 2025-03-08 at 22:34 -0500, Ionen Wolkens wrote: > Sending this to dev ML in advance given it's simple and "probably" > won't need to change the code further. >=20 > If interested in the whole deal, see the PR instead: > https://github.com/gentoo/gentoo/pull/40942 >=20 > --- (actual commit message below) >=20 > Both the slotting method and eclass are meant to be as simple > as possible, and isolated so that it does not really need to > work with everything given non-slotted ffmpeg stays. >=20 > Did not want turn ffmpeg into a permanent slotting model with > a FFMPEG_SLOT use_expand, eselect, or such potentially turning > it into a special Gentoo-only thing that often need hacks. >=20 > Essentially just a way for broken packages to gain time without > blocking everyone's ffmpeg updates. >=20 > Signed-off-by: Ionen Wolkens > --- > eclass/ffmpeg-compat.eclass | 69 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 69 insertions(+) > create mode 100644 eclass/ffmpeg-compat.eclass >=20 > diff --git a/eclass/ffmpeg-compat.eclass b/eclass/ffmpeg-compat.eclass > new file mode 100644 > index 000000000000..2d675ab4cc66 > --- /dev/null > +++ b/eclass/ffmpeg-compat.eclass > @@ -0,0 +1,69 @@ > +# Copyright 2025 Gentoo Authors > +# Distributed under the terms of the GNU General Public License v2 > + > +# @ECLASS: ffmpeg-compat.eclass > +# @MAINTAINER: > +# Ionen Wolkens > +# @AUTHOR: > +# Ionen Wolkens > +# @SUPPORTED_EAPIS: 8 > +# @BLURB: Helper functions to link with slotted ffmpeg-compat libraries > +# @DESCRIPTION: > +# To use this, run ``ffmpeg_compat_setup `` before packages use > +# pkg-config, depend on media-video/ffmpeg-compat:=3D, and ensure > +# usage of both pkg-config --cflags and --libs (which adds -Wl,-rpath > +# to find libraries at runtime). > +# > +# This eclass is intended as a quick-to-setup alternative to setting > +# an upper bound on ffmpeg for packages broken with the latest version, > +# and thus allow users to upgrade their normal ffmpeg. > +# > +# This should still be a temporary measure, and it is recommended to > +# keep migration bugs open rather than consider this eclass as being > +# the "fix". > +# > +# Unlike LLVM_SLOT-style, this does not have USE to select the slot > +# and should instead pick only the highest one usable until package > +# is fixed and can use non-slotted ffmpeg again. > +# > +# Do *not* use both like ``|| ( ffmpeg-compat: )``, > +# the package manager cannot know which version it linked against > +# without USE flags. Unfortunately means a period where users may > +# have two identical versions in stable before the newest major version > +# is stabilized, but idea is to not mangle normal ffmpeg with slotting > +# logic and make this an isolated temporary deal. > + > +case ${EAPI} in > + 8) ;; > + *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; > +esac > + > +if [[ -z ${_FFMPEG_COMPAT_ECLASS} ]]; then > +_FFMPEG_COMPAT_ECLASS=3D1 > + > +# @FUNCTION: ffmpeg_compat_get_prefix > +# @USAGE: > +# @DESCRIPTION: > +# Return prefix of the installed ffmpeg-compat:. Binaries like > +# ffmpeg will be found under /bin if needed. > +ffmpeg_compat_get_prefix() { > + (( ${#} =3D=3D 1 )) || die "Usage: ${FUNCNAME} " > + > + echo "${EPREFIX}/usr/lib/ffmpeg${1}" > +} > + > +# @FUNCTION: ffmpeg_compat_setup > +# @USAGE: > +# @DESCRIPTION: > +# Add ESYSROOT's ffmpeg-compat: to PKG_CONFIG_PATH for the > +# current ABI. Can be called multiple times for multilib. > +ffmpeg_compat_setup() { > + (( ${#} =3D=3D 1 )) || die "Usage: ${FUNCNAME} " > + > + local path=3D${SYSROOT}$(ffmpeg_compat_get_prefix "${1}") > + [[ ${PKG_CONFIG_PATH} =3D~ (.*)"${path}"/[^/]+/pkgconfig:(.*) ]] && > + PKG_CONFIG_PATH=3D${BASH_REMATCH[1]}${BASH_REMATCH[2]} > + export PKG_CONFIG_PATH=3D${path}/$(get_libdir)/pkgconfig:${PKG_CONFIG_P= ATH} > +} > + > +fi I like this approach. We've generally been quite good at dragging upstreams= to the latest, so it would be a shame to go fully slotted. The regex check seems like overkill to me, but perhaps I've missed somethin= g. This currently won't work when cross-compiling as cross-pkg-config currentl= y unsets PKG_CONFIG_PATH, but I have been thinking about changing that. That = was done to tame non-Gentoo environments, but no one else uses crossdev in reality. --=-Q8MTUQFJagUc82bsOmz8 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- iQJFBAABCAAvFiEEPxcZ3tkwcedKm2a8EiZBXQDdMTcFAmfNasYRHGNoZXdpQGdl bnRvby5vcmcACgkQEiZBXQDdMTcdGRAAl7HkDpUP863dv4pkmcS2w28CoLTVTsnY vRtKPUFJxC40eWUrXpub6pSLkgtPE7eLIYB7k2Z5BaRAfL9CmgwHtWwCxFD0yGtE gu0IXF4pNB1UZSAO8Oi4A3NefvghGVgKR3Ypp4fnSE4vZTsnxtDNQwnYReJnv96s rTk4pf5OYr8o1BlR/9RVbmE+p9i0wJsTd9KfwolDfSJ/4pY5xsii1yUlIODTJJKQ +znhTkvkZkTs8zl/mC4gzDlIxuFDF2rjShPdAnTXHc+gTMIandujtYtU+UmwvlzW g2r90n6/BTm+exyCKj5HoOG7mfBzENaal9wxdKOLG6Km82xkPjIXpy2o8AieK3EF bObbl1IN0ft+IohFb53gz3Fe0h3SPyItF4bWeKZSJgwfAlzKfHD+GQCpH5lVsd0O UarDSfKFlkJ6E/n6QH1HlwFtXjZ5fukbZg4Rli8p+/DX4yLffjhHBdyrWBBQGKXK mY3WyEHGV/VwtaFIbpOrmNunMFdipsJpYpxyb/HoWBalvBHoZgWJp+T0arUPnx2f sbTTwvTDfyKfGTC/dFXO+kuu1wBRNFWK8hmgQWfc/W6HeYacsSxGoph2xr+mUaWD H2vaDj0oYNMBusmCdWDFHaDg/fnphZhKEYEwdevk7xpYM+hn7c+aWO6msoMcbypg PsJmDL7vMlE= =yz5O -----END PGP SIGNATURE----- --=-Q8MTUQFJagUc82bsOmz8--