You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.8 KiB
158 lines
3.8 KiB
# 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}.1"
|
|
|
|
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}"
|
|
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.26
|
|
~dev-dotnet/dotnet-runtime-nugets-7.0.15
|
|
"
|
|
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
|
|
}
|