# Copyright 1999-2024 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 SDK_SLOT="$(ver_cut 1-2)" RUNTIME_SLOT="${SDK_SLOT}.0" DESCRIPTION=".NET is a free, cross-platform, open-source developer platform" HOMEPAGE="https://dotnet.microsoft.com/ https://github.com/dotnet/dotnet/" SRC_URI=" amd64? ( elibc_glibc? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-x64.tar.gz ) elibc_musl? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-musl-x64.tar.gz ) ) arm? ( elibc_glibc? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-arm.tar.gz ) elibc_musl? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-musl-arm.tar.gz ) ) arm64? ( elibc_glibc? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-arm64.tar.gz ) elibc_musl? ( https://dotnetcli.azureedge.net/dotnet/Sdk/${PV}/dotnet-sdk-${PV}-linux-musl-arm64.tar.gz ) ) " S="${WORKDIR}" LICENSE="MIT" SLOT="${SDK_SLOT}/${RUNTIME_SLOT}" # See bug https://bugs.gentoo.org/932377 KEYWORDS="amd64 arm arm64" # STRIP="llvm-strip" corrupts some executables when using the patchelf hack, # bug https://bugs.gentoo.org/923430 RESTRICT="splitdebug strip" CURRENT_NUGETS_DEPEND=" ~dev-dotnet/dotnet-runtime-nugets-${RUNTIME_SLOT} " EXTRA_NUGETS_DEPEND=" ~dev-dotnet/dotnet-runtime-nugets-6.0.36 ~dev-dotnet/dotnet-runtime-nugets-7.0.20 ~dev-dotnet/dotnet-runtime-nugets-8.0.11 " NUGETS_DEPEND=" ${CURRENT_NUGETS_DEPEND} ${EXTRA_NUGETS_DEPEND} " RDEPEND=" app-crypt/mit-krb5:0/0 dev-libs/icu dev-util/lttng-ust:0/2.12 sys-libs/zlib:0/1 " BDEPEND=" dev-util/patchelf " IDEPEND=" app-eselect/eselect-dotnet " PDEPEND=" ${NUGETS_DEPEND} " QA_PREBUILT="*" MUSL_BAD_LINKS=( apphost createdump dotnet libSystem.Globalization.Native.so libSystem.IO.Compression.Native.so libSystem.Native.so libSystem.Net.Security.Native.so libSystem.Security.Cryptography.Native.OpenSsl.so libclrgc.so libclrjit.so libcoreclr.so libcoreclrtraceptprovider.so libdbgshim.so libhostfxr.so libhostpolicy.so libmscordaccore.so libmscordbi.so libnethost.so singlefilehost ) MUSL_BAD_SONAMES=( libc.musl-aarch64.so.1 libc.musl-armv7.so.1 libc.musl-x86_64.so.1 ) src_prepare() { default # Fix musl libc SONAME links, bug https://bugs.gentoo.org/894760 if use elibc_musl ; then local musl_bad_link local musl_bad_link_path local musl_bad_soname for musl_bad_link in "${MUSL_BAD_LINKS[@]}" ; do while read -r musl_bad_link_path ; do # Skip if file either does not end with ".so" or is not executable. # Using "case" here for easier matching in case we have to add # a special exception. case "${musl_bad_link_path}" in *.so ) : ;; * ) if [[ ! -x "${musl_bad_link_path}" ]] ; then continue fi ;; esac einfo "Fixing musl libc link for ${musl_bad_link_path}" for musl_bad_soname in "${MUSL_BAD_SONAMES[@]}" ; do patchelf --remove-needed "${musl_bad_soname}" "${musl_bad_link_path}" || die done patchelf --add-needed libc.so "${musl_bad_link_path}" || die done < <(find . -type f -name "${musl_bad_link}") done fi # Remove static libraries, bug https://bugs.gentoo.org/825774 find ./packs -type f -name "libnethost.a" -delete || die } src_install() { local dest="opt/${PN}-${SDK_SLOT}" dodir "${dest%/*}" # Create a magic workloads file, bug #841896 local featureband="$(( $(ver_cut 3) / 100 * 100 ))" # e.g. 404 -> 400 local workloads="metadata/workloads/${SDK_SLOT}.${featureband}" mkdir -p "${S}/${workloads}" || die touch "${S}/${workloads}/userlocal" || die mv "${S}" "${ED}/${dest}" || die mkdir "${S}" || die fperms 0755 "/${dest}" dosym "../../${dest}/dotnet" "/usr/bin/dotnet-bin-${SDK_SLOT}" } pkg_postinst() { eselect dotnet update ifunset } pkg_postrm() { eselect dotnet update ifunset }