Maciej Barć writes: > Bug: https://bugs.gentoo.org/900597 > Bug: https://github.com/gentoo/gentoo/pull/29309 > Signed-off-by: Maciej Barć > --- First, thank you to you & navi for working on this. It's long overdue. Left some small comments below. > eclass/nuget.eclass | 192 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 192 insertions(+) > create mode 100644 eclass/nuget.eclass > > diff --git a/eclass/nuget.eclass b/eclass/nuget.eclass > new file mode 100644 > index 0000000000..cbc9bae4a1 > --- /dev/null > +++ b/eclass/nuget.eclass > @@ -0,0 +1,192 @@ > +# Copyright 1999-2023 Gentoo Authors > +# Distributed under the terms of the GNU General Public License v2 > + > +# @ECLASS: nuget.eclass > +# @MAINTAINER: > +# Gentoo Dotnet project > +# @AUTHOR: > +# Anna Figueiredo Gomes > +# Maciej Barć > +# @SUPPORTED_EAPIS: 7 8 > +# @BLURB: common functions and variables for handling .NET NuGets > +# @DESCRIPTION: > +# This eclass is designed to provide support for .NET NuGet's ".nupkg" files. > +# > +# This eclass does not export any phase functions, for that see > +# the "dotnet-pkg" eclass. > + > +case "${EAPI}" in > + 7 | 8 ) > + : > + ;; > + * ) > + die "${ECLASS}: EAPI ${EAPI} unsupported." > + ;; > +esac > + > +if [[ -z ${_NUGET_ECLASS} ]] ; then > +_NUGET_ECLASS=1 > + > +# @ECLASS_VARIABLE: SYSTEM_NUGETS > +# @DESCRIPTION: > +# Location of the system NuGet packages directory. > +SYSTEM_NUGETS=/opt/dotnet-nugets > + Not to bikeshed too hard, but wonder if this should be another directory. > +# @ECLASS_VARIABLE: NUGET_APIS > +# @DESCRIPTION: > +# NuGet API URLs to use for precompiled NuGet package ".nupkg" downloads. > +# Set or append to this variable post-inherit, but before calling > +# the "nuget_uris" function, preferably just before "SRC_URI". Is there a reason we don't just mandate this per-inherit? Feels like it'd be cleaner there. > +# > +# Example: > +# @CODE > +# SRC_URI="https://example.com/example.tar.xz" > +# NUGET_APIS+=( "https://api.nuget.org/v3-flatcontainer" ) > +# SRC_URI+=" $(nuget_uris) " > +# @CODE > +NUGET_APIS=( "https://api.nuget.org/v3-flatcontainer" ) > + > +# @ECLASS_VARIABLE: NUGET_PACKAGES > +# @DEFAULT_UNSET > +# @PRE_INHERIT > +# @DESCRIPTION: > +# Path from where NuGets will be restored from. > +# Defaults to ${T}/nugets for use with "nuget_uris" but may be set to a custom > +# location to, for example, restore NuGets extracted form a prepared archive. > +# Do not set this variable in conjunction with non-empty "NUGETS". > +if [[ "${NUGETS}" ]] || [[ ! "${NUGET_PACKAGES}" ]] ; then > + NUGET_PACKAGES="${T}"/nugets > +fi > +export NUGET_PACKAGES > + > +# @ECLASS_VARIABLE: NUGETS > +# @DEFAULT_UNSET > +# @PRE_INHERIT > +# @DESCRIPTION: > +# String containing all NuGet packages that need to be downloaded. > +# Used by "nuget_uris". > +# > +# Example: > +# @CODE > +# NUGETS=" > +# ImGui.NET-1.87.2 > +# Config.Net-4.19.0 > +# " > +# > +# inherit dotnet-pkg > +# > +# ... > +# > +# SRC_URI+=" $(nuget_uris) " > +# @CODE Can we use the approach we're doing w/ cargo.eclass, so this isn't the default option? (i.e. set a global variable instead). > [...] > +# @FUNCTION: nuget_link > +# @USAGE: > +# @DESCRIPTION: > +# Link a specified NuGet package at "nuget-path" to the "NUGET_PACKAGES" > +# directory. > +# > +# Example: > +# @CODE > +# nuget_link "${DISTDIR}"/pkg.0.nupkg > +# @CODE > +# > +# This function is used inside "dotnet-pkg_src_unpack" > +# from the "dotnet-pkg" eclass. > +nuget_link() { > + [[ ! "${1}" ]] && die "${FUNCNAME}: no nuget path given" > + > + mkdir -p "${NUGET_PACKAGES}" || die > + > + local nuget_name="$(basename "${1}")" You should be able to do this with pure bash. > [...] best, sam