# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
pkgname=dotnet6-build
pkgver=6.0.136
pkgrel=1
# remember to upgrade dotnet6-runtime $_bldver when upgrading dotnet6-build
_gittag=v$pkgver
_giturl="https://github.com/dotnet/installer"
_testtag=4f2372af276898d8acbe92d77af30da86920bbce
_bunnytag=v15
_patches="
	build_14816-non-portable-build.patch
	build_14816-update-portable-rid-logic.patch
	build_disable-apphost.diff
	installer_14816-update-portable-rid-logic.patch
	msbuild_optional-systemconfiguration.patch
	msbuild_optional-systemsecurity.patch
	roslyn_57003-mono-namedmutex.patch
	runtime_76500-mono-musl-support.patch
	runtime_82269-mono-thread-coop-undefine-fortify-source.patch
	runtime_enable-system-libunwind.diff
	runtime_remove-usage-of-off64-t.patch
	runtime_clang-19.patch
	sdk_14239-add-zsh-compdef-completion-script.patch
	sdk_telemetry-optout.patch
	"

_pkgver_macro=${pkgver%.*}
_pkgver_prior=${pkgver%.*.*}
_pkgver_name=${_pkgver_macro//[.0]}
pkgdesc="The .NET $_pkgver_macro bootstrap"
arch="x86_64 aarch64 armv7"
url=https://dotnet.microsoft.com
license="MIT"
# hack for dotnetx-build to be able to pull itself for bootstrapping
provides="dotnet$_pkgver_name-bootstrap"
provider_priority=$_pkgver_prior
# makes sure different major versions don't conflict
sonameprefix="dotnet$_pkgver_name:"
checkdepends="
	babeltrace
	binutils
	coreutils
	file
	gawk
	jq
	lttng-tools
	npm
	procps
	sed
	strace
	util-linux-misc
	which
	"
makedepends="
	alpine-release
	bash
	clang
	cmake
	dotnet$_pkgver_name-bootstrap
	dotnet$_pkgver_name-bootstrap-artifacts
	dotnet$_pkgver_name-stage0
	findutils
	git
	grep
	icu-data-full
	icu-dev
	inetutils-syslogd
	krb5-dev
	libgit2-dev
	libintl
	libucontext-dev
	libunwind-dev
	libxml2-dev
	libxml2-utils
	linux-headers
	lldb-dev
	llvm-dev
	lttng-ust-dev
	nodejs
	numactl-dev
	openssl-dev
	patchelf
	pigz
	rsync
	tar
	xz
	zlib-dev
	"
case $CARCH in
	s390x|x86) ;;
	*) makedepends="$makedepends lld-dev";;
esac

subpackages="
	dotnet$_pkgver_name-artifacts:artifacts:noarch
	dotnet$_pkgver_name-sdk
	dotnet$_pkgver_name-templates:templates:noarch
	dotnet-zsh-completion:zshcomp:noarch
	dotnet-bash-completion:bashcomp:noarch
	dotnet-doc
	netstandard21-targeting-pack:netstandard_targeting_pack:noarch
	"
source="
	https://ayakael.net/api/packages/mirrors/generic/dotnet/v$pkgver/dotnet-v$pkgver.tar.xz
	dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz
	dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz
	$_patches
	"
builddir="$srcdir"/dotnet-$_gittag

# secfixes:
#   6.0.106-r0:
#     - CVE-2022-30184
#   6.0.108-r0:
#     - CVE-2022-34716
#   6.0.109-r0:
#     - CVE-2022-38013
#   6.0.110-r0:
#     - CVE-2022-41032
#   6.0.112-r0:
#     - CVE-2022-41089
#   6.0.113-r0:
#     - CVE-2023-21538
#   6.0.114-r0:
#     - CVE-2023-21808
#   6.0.116-r0:
#     - CVE-2023-28260
#   6.0.118-r0:
#     - CVE-2023-24895
#     - CVE-2023-24897
#     - CVE-2023-24936
#     - CVE-2023-29331
#     - CVE-2023-29337
#     - CVE-2023-33126
#     - CVE-2023-33128
#     - CVE-2023-33135
#   6.0.120-r0:
#     - CVE-2023-33127
#     - CVE-2023-33170
#   6.0.121-r0:
#     - CVE-2023-35390
#     - CVE-2023-38180
#     - CVE-2023-35391
#   6.0.122-r0:
#     - CVE-2023-36792
#     - CVE-2023-36793
#     - CVE-2023-36794
#     - CVE-2023-36796
#     - CVE-2023-36799
#   6.0.123-r0:
#     - CVE-2023-44487
#   6.0.124-r0:
#     - CVE-2023-36792
#     - CVE-2023-36793
#     - CVE-2023-36794
#     - CVE-2023-36796
#     - CVE-2023-36799
#     - CVE-2023-44487
#   6.0.125-r0:
#     - CVE-2023-36049
#     - CVE-2023-36558
#   6.0.126-r0:
#     - CVE-2024-0056
#     - CVE-2024-0057
#     - CVE-2024-21319
#   6.0.127-r0:
#     - CVE-2024-21386
#     - CVE-2024-21404
#   6.0.129-r0:
#     - CVE-2024-21409
#   6.0.131-r0:
#     - CVE-2024-20672
#   6.0.132-r0:
#     - CVE-2024-38095
#     - CVE-2024-38081
#   6.0.135-r0:
#     - CVE-2024-43483
#     - CVE-2024-43484
#     - CVE-2024-43485

_checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v}
_testdir="$srcdir"/dotnet-regular-tests-$_testtag
_cli_root="$srcdir"/bootstrap
_nugetdir="$srcdir"/nuget-cache
_artifactsdir="$_cli_root"/artifacts
_libdir="/usr/lib"
# if true, then within pipeline environment, in which case send logs there
# to be scooped
if [ -d "$APORTSDIR/logs" ]; then
	_logdir="$APORTSDIR"/logs/$pkgname
else
	_logdir="$srcdir"/logs
fi

case $CARCH in
	x86_64) _dotnet_arch="x64";;
	aarch64) _dotnet_arch="arm64";;
	armv7) _dotnet_arch="arm";;
	armhf) _dotnet_arch="armv6";;
	*) _dotnet_arch="$CARCH";;
esac

# Build doesn't set all the right executable bits for the right file types
_fix_executable() {
	# add executable bit
	find "$1" -type f \( \
		-name 'apphost' -o \
		-name 'singlefilehost' -o \
		-name 'lib*so' \
			\) \
		-exec chmod +x '{}' \;

	# remove executable bit
	find "$1" -type f \( \
		-name '*.a' -o \
		-name '*.dll' -o \
		-name '*.h' -o \
		-name '*.json' -o \
		-name '*.pdb' -o \
		-name '*.props' -o \
		-name '*.pubxml' -o \
		-name '*.targets' -o \
		-name '*.txt' -o \
		-name '*.xml' \
			\) \
		-exec chmod -x '{}' \;
}

# generates tarball containing all components built by dotnet
snapshot() {
	local _pkg="$srcdir"/${builddir##*/}.tar

	ulimit -n 4096
	export NUGET_PACKAGES=$_nugetdir

	if [ -d "$srcdir" ]; then
		cd "$srcdir"
	else
		mkdir -p "$srcdir" && cd "$srcdir"
	fi
	if [ -d "installer" ]; then
		cd "$srcdir"/installer
	else
		git clone $_giturl --branch $_gittag && cd "$srcdir"/installer
	fi

	sed 's|<Exec Command="tar.*|<Exec Command="tar -cf $(TarballFilePath) -C $(TarballDir)/.. $([MSBuild]::MakeRelative($([System.IO.Path]::GetDirectoryName($(TarballDir))), $(TarballDir)))" />|' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets

	if [ -d "$_libdir/dotnet/bootstrap" ]; then
		local _cli_root="$(find /usr/lib/dotnet/bootstrap/6.0* -maxdepth 0 -type d | sort -r | head -n 1)"
	else
		local _cli_root=""
	fi

	_InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \
		/p:ArcadeBuildTarball=true \
		/p:TarballDir=$builddir \
		/p:TarballFilePath=$_pkg

	msg "Compressing ${builddir##*/}.tar to $SRCDEST"
	xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg"

	cd "$startdir"
	abuild checksum
}

prepare() {
	default_prepare
	ulimit -n 4096

	# Using system libunwind is broken on aarch64 and mono-based builds
	# see https://github.com/dotnet/source-build/issues/2408,
	case $CARCH in
		x86_64)
			msg "Using system libunwind"
			patch -p1 -i "$srcdir"/runtime_enable-system-libunwind.diff
		;;
	esac

	# For some reason, new s390x apphost isn't pulled, this disable it's use on s390x
	case $CARCH in
		s390x)
			msg "Disabing use of apphost"
			patch -p1 -i "$srcdir"/build_disable-apphost.diff
		;;
	esac

	# links logfiles to pipeline logs for easy pickup in pipelines
	mkdir -p "$_logdir" "$builddir"/artifacts
	ln -s "$_logdir" "$builddir"/artifacts/logs
	ln -s "$_logdir" "$builddir"/artifacts/log
	for i in "$builddir"/src/*; do
		if [ -f "$i" ]; then
			continue
		fi
		mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts
		ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log
	done

	# dotnet requires its bootstrap to be in a writable dir
	msg "Setting up bootstrap"
	local _bootstrapdir=$(find $_libdir/dotnet/bootstrap/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1)
	if [ ! -d "$_cli_root" ]; then
		cp -r "$_bootstrapdir" "$_cli_root"
	fi
	# ensure that dotnet does not download artifacts provided by dotnet-artifacts
	rm -rf "$builddir"/packages/archive
}

build() {
	msg "Building $pkgname-$pkgver"
	ulimit -n 4096

	export PATH="$PATH:/usr/lib/llvm/bin"

	# Disable use of LTTng as tracing on lttng <=2,13,0 is broken
	# See https://github.com/dotnet/runtime/issues/57784.
	if [ -f "/usr/lib/liblttng-ust.so.1" ]; then
		export DOTNET_LTTng=0
	fi

	# looks for most recent recent version of _artifactsdir
	local _artifactsdir=$(find $_libdir/dotnet/artifacts/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1)

	# ci args, else the output is forwarded to log files which isn't ideal in a
	# pipeline environment, and build by defaults uses lots of space
	local args="
		/v:minimal
		/p:LogVerbosity=minimal
		/p:MinimalConsoleLogOutput=true
		/p:CleanWhileBuilding=true
		"
	# disable use of crossgen on arches platforms where its unsupported (mono)
	# or broken (armv7, aarch64)
	case $CARCH in
		x86|aarch64|armv7|armhf|s390x) local args="$args /p:CrossgenOutput=false /p:DISABLE_CROSSGEN=True";;
	esac

	# Sets TargetRid manually as dotnet cannot be trusted to reliably compute
	# the machine's runtime ID between releases.
	# shellcheck disable=SC2034
	. /etc/os-release
	local VERSION_ID_DOT="${VERSION_ID//[^.]}"
	while [ ${#VERSION_ID_DOT} -gt 1 ]; do
		local VERSION_ID="${VERSION_ID%.*}"
		local VERSION_ID_DOT="${VERSION_ID//[^.]}"
	done
	local VERSION_ID_DASH="${VERSION_ID//[^_]}"
	while [ ${#VERSION_ID_DASH} -ge 1 ]; do
		local VERSION_ID="${VERSION_ID%_*}"
		local VERSION_ID_DASH="${VERSION_ID//[^_]}"
	done
	local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch"

	case "$CARCH" in
	x86*) ;;
	*)
		# clang doesn't implement this outside of x86, and it causes a later configure to fail
		export CFLAGS="${CFLAGS/-fstack-clash-protection}"
		export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}"
		;;
	esac

	./build.sh \
		--with-sdk "$_cli_root" \
		--with-packages "$_artifactsdir" \
		-- $args
}

check() {
	ulimit -n 4096
	# Tests timeout (in seconds)
	local _tests_timeout=1000
	# Test suite disable flags
	# following tests only work via Github actions on upstream repo
	# see https://github.com/redhat-developer/dotnet-regular-tests/actions
	local _disabled_tests="
		man-pages distribution-package bash-completion
		install-location release-version-sane managed-symbols-available
		tools-in-path createdump-aspnet system-data-odbc
		"
	# Disable use of LTTng as tracing on lttng <=2,13,0 is broken
	# See https://github.com/dotnet/runtime/issues/57784.
	if [ -f "/usr/lib/liblttng-ust.so.1" ]; then
		local _disabled_tests="$_disabled_tests lttng"
	fi
	# TODO: Investigate build failure in builders
	local _disabled_tests="$_disabled_tests debugging-sos-lldb-via-core debugging-via-dotnet-dump"

	export DOTNET_ROOT="$_checkdir/release"
	if [ ! -d "$DOTNET_ROOT" ]; then
		msg "Unpacking produced dotnet"
		mkdir -p "$DOTNET_ROOT"
		tar --use-compress-program="pigz" \
			-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
			-C "$DOTNET_ROOT" \
			--no-same-owner
		# some files either should or should not have executable bits
		# (done again during packaging - this is for tests)
		_fix_executable "$DOTNET_ROOT"
	fi
	export PATH="$DOTNET_ROOT:$PATH"

	if [ ! -d "$_logdir/check" ]; then
		mkdir -p "$_logdir"/check
	fi
	if [ ! -d "$_checkdir"/turkey ]; then
		msg "Building turkey test suite"
		cd "$_checkdir"/Turkey
		dotnet publish -bl:"$_logdir"/check/turkey.binlog -f net6.0 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey
	fi

	msg "Running test suite"
	cd "$_testdir"
	for i in $_disabled_tests; do
		if [ -d "$i" ]; then
			sed -i 's|"enabled": true|"enabled": false|' $i/test.json
		fi
	done

	# do not source /etc/profile
	sed '/if \[ -f \/etc\/profile \]/,+2d' -i ./*/test.sh

	dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout -l "$_logdir"/check || local ERROR=true
	if [ $ERROR ]; then
		msg "Check error reported, please check logs"
		return 1
	fi
}

package() {
	# directory creation
	install -dm 755 \
		"$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver \
		"$pkgdir"/usr/share/man/man1 \
		"$pkgdir"/$_libdir/dotnet/artifacts/$pkgver

	# unpack sdk to bootstrap
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \
		--no-same-owner

	# extract arch-specific artifacts to artifacts dir for use by future dotnet builds
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \
		-C "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \
		--no-same-owner \
		--wildcards \
		'*alpine*'

	# assemble docs
	find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$pkgdir"/usr/share/man/man1/. \;

	# some files either should or should not have executable bits
	_fix_executable "$pkgdir"

	# TODO: Remove once https://gitlab.alpinelinux.org/alpine/abuild/-/commit/5ad0236004343a534b2591421bffb242b6ea16cc is in abuild package
	# make absolute rpath of libmscordbi.so to help abuild find libmscordaccore.so
	local _libmscordbi_path="$(realpath "$pkgdir"/usr/lib/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libmscordbi.so)"
	local _libmscordbi_path="${_libmscordbi_path/$pkgdir/}"
	local _libmscordbi_path="${_libmscordbi_path%/*}"
	patchelf $pkgdir/usr/lib/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libmscordbi.so --set-rpath $_libmscordbi_path
}

sdk() {
	pkgdesc="The .NET $_pkgver_macro SDK"
	depends="
		aspnetcore$_pkgver_name-runtime
		aspnetcore$_pkgver_name-targeting-pack
		dotnet$_pkgver_name-apphost-pack
		dotnet$_pkgver_name-targeting-pack
		dotnet$_pkgver_name-templates
		netstandard21-targeting-pack
		"
	provides="
		dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel
		dotnet$_pkgver_name-dev=$pkgver-r$pkgrel
		"

	install -dm 755 "$subpkgdir"/$_libdir/dotnet

	# sdk
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$subpkgdir"/$_libdir/dotnet/ \
		--no-same-owner \
		./sdk ./sdk-manifests

	# some files either should or should not have executable bits
	_fix_executable "$subpkgdir"

	# See https://github.com/dotnet/source-build/issues/2579
	find "$subpkgdir" -type f -name 'testhost.x86' -delete
	find "$subpkgdir" -type f -name 'vstest.console' -delete
}

netstandard_targeting_pack() {
	pkgdesc="The .NET 2.1 Standard targeting pack"
	depends="dotnet-host"
	provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel"

	install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$subpkgdir"/$_libdir/dotnet/ \
		--no-same-owner \
		./packs/NETStandard.Library.Ref

	# some files either should or should not have executable bits
	_fix_executable "$subpkgdir"
}

templates() {
	pkgdesc="The .NET $_pkgver_macro templates"
	depends="dotnet-host"
	provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel"

	install -dm 755 "$subpkgdir"/$_libdir/dotnet
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$subpkgdir"/$_libdir/dotnet/ \
		--no-same-owner \
		./templates

	# some files either should or should not have executable bits
	_fix_executable "$subpkgdir"
}

artifacts() {
	pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit"
	# hack to allow artifacts to pull itself
	provides="dotnet$_pkgver_name-bootstrap-artifacts"
	provider_priority=$_pkgver_prior

	# directory creation
	install -dm 755 \
		"$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \
		"$subpkgdir"/usr/share/licenses

	# extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \
		-C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \
		--no-same-owner \
		--exclude '*Intermediate*' \
		--exclude '*alpine*'
}

zshcomp() {
	depends=""
	pkgdesc="zsh completion for .NET"
	# netstandard21-targeting-pack will always be pulled by any dotnetx-sdk
	# thus pulling this with it for sdk
	install_if="netstandard21-targeting-pack=$pkgver-r$pkgrel zsh"
	depends="dotnet-host"

	install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions
	install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet
}

bashcomp() {
	depends=""
	pkgdesc="bash completion for .NET"
	# netstandard21-targeting-pack will always be pulled by any dotnetx-sdk
	# thus pulling this with it for sdk
	install_if="netstandard21-targeting-pack=$pkgver-r$pkgrel bash-completion"
	depends="dotnet-host"

	install -dm 755	"$subpkgdir"/usr/share/bash-completion/completions
	install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet
}

doc() {
	default_doc
	pkgdesc="Docs for .NET"

	# licenses
	install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet
	tar --use-compress-program="pigz" \
		-xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \
		-C "$subpkgdir"/usr/share/licenses/dotnet/ \
		--no-same-owner \
		./LICENSE.txt ./ThirdPartyNotices.txt
}

sha512sums="
50030149ae51f8b8bb79536df413fd2d10f5c5660d2b326123ec56270a82d78654e3a9e943f0dcbfe41a00596b926da2a4397d780deefa86c2219aa914b1f4fd  dotnet-v6.0.136.tar.xz
69181ea34dafaacf95a267675a2c1dc75c37fcf331e540a9e3ee4f80709572c7523dd4370a786ad5c885356d05ec83b27c9bbcae6adac01b78d9aa2ac69ed719  dotnet-testsuite-4f2372af276898d8acbe92d77af30da86920bbce.tar.gz
7f59b10878aa90a6953ee4d88d08fa932910a24018dace92b173ee87c847d14734f93dc5fc031982a3d0a5cb4ac223b83d0e548531c23c4e3326dc83510989a9  dotnet-bunny-v15.tar.gz
ed5e1dc89664cfae0ec64fcd7d924831b1b7bb5dbf35537832e7450f1780285dcff695f63e49b40385d160b53c24f0b8520b378ba1157ec8d21f0c557028f71a  build_14816-non-portable-build.patch
70d402d0bcaa98c8b09652365404238b67ed26eb9c3d510c7d6309fb61937d98c9144f1096e521c11b00e946d29585a9d474498ccc5223de32bd6471ab5a431f  build_14816-update-portable-rid-logic.patch
a5a359af816595fbf19482e5dccf874c78d2fc4b59f38223118aac603b33e00c9fed22580eee3112519477205c2c8ed16177d100f09f45275e3da3c20b0ed7f7  build_disable-apphost.diff
e71f91d14873755bc2f227807d909e5260bd1f166a262eda0bf05d4a3975a7bce7fde457c1eba476a83b317aebdaaba25f1893d3385182428c08bba6243f21c8  installer_14816-update-portable-rid-logic.patch
86e14ecc0269c8b2c2a2a679790de4fa4e15ac06b2a831e1129c4a7de1499d60583fcdc79b3705652c3c4ced73afac2e0ee3edce2cfa3b00fddf94180fb26e10  msbuild_optional-systemconfiguration.patch
f4d27624f735ce77e0030fa791594fc12fb325a3ce8620791a7856bd5c0067a042df2196ec97ed4d0309db64bd51e6a48cafaad316d9ea45e34134214a7f3ca4  msbuild_optional-systemsecurity.patch
42779a7bf1004fe0f7054cfa4f09f49d7f2a57c0543ec994ffbd54fb349abb508295476098ed35d60e9676be8bcc15aa8a9ec5c814cd1e058357530b5cdfb2b6  roslyn_57003-mono-namedmutex.patch
e67e0114bd324dae65eb19f6fa8c74414bee77cd30e299931b0d82b4ca1b6b6f88358a0c47ffb180f46c5cb28f61f79bb4a59d43c1ae3011bfe491e757de293a  runtime_76500-mono-musl-support.patch
827e899a83103f666dc3d57c1ec695bebc659a574f4a1d754da0cafe8c18d7db79c3950267e905fa078f94612ee1101fbddd0ea62b3c08947d8bcd7d9c8de41c  runtime_82269-mono-thread-coop-undefine-fortify-source.patch
91f237afe642d0170dbf0e9a2706a4145c937d9d869d22959acaf092f1fd11941144b2b1d041102abe7b70349dd5869d558896e9d13d01f176cace39b21ef1ef  runtime_enable-system-libunwind.diff
d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80  runtime_remove-usage-of-off64-t.patch
2976799c63ff44e82646b1d77b211da918eea283e22f3ac6d30c889ba437fcae04a1fe92268a8d4d2fa89d2c0f6c6b2d4f166cfee684f8c6ae031e9d2707fdaf  runtime_clang-19.patch
d1b4ebcbb1a6815fc0ce4c471485c232618e60968a879309fb8336821a9351d2e0028d9f7726c0c041c750b497a0baa47400c78c9ceff550b91b4a6c2816fc41  sdk_14239-add-zsh-compdef-completion-script.patch
815de1dad37412579b16d763debe2ecceffb44f5c46bd3f4ac00b3e431b20c677db435794eac41cea5601030b4e0f03f19e2d53c7a1ead896de2ffbca787eb84  sdk_telemetry-optout.patch
"
