nixpkgs/pkgs/development/compilers/dotnet/packages.nix
2024-10-14 18:47:32 -03:00

212 lines
5.1 KiB
Nix

{
stdenvNoCC,
lib,
callPackage,
vmr,
xmlstarlet,
strip-nondeterminism,
zip,
nugetPackageHook,
baseName ? "dotnet",
fallbackTargetPackages ? { },
}:
let
mkCommon = callPackage ./common.nix { };
inherit (vmr) targetRid releaseManifest;
# TODO: do this properly
hostRid = targetRid;
mkPackage =
pname: version:
stdenvNoCC.mkDerivation {
inherit pname version;
src = vmr;
dontUnpack = true;
nativeBuildInputs = [
xmlstarlet
nugetPackageHook
];
installPhase = ''
runHook preInstall
mkdir -p "$out"
pushd "$src"/Private.SourceBuilt.Artifacts.*.${targetRid}
pushd ${pname}.${version}.nupkg
xmlstarlet \
sel -t \
-m /_:package/_:metadata \
-v _:id -nl \
-v _:version -nl \
*.nuspec | (
read id
read version
id=''${id,,}
version=''${version,,}
mkdir -p "$out"/share/nuget/packages/"$id"
cp -r . "$out"/share/nuget/packages/"$id"/"$version"
chmod +w "$out"/share/nuget/packages/"$id"/"$version"
echo {} > "$out"/share/nuget/packages/"$id"/"$version"/.nupkg.metadata
)
popd
popd
runHook postInstall
'';
};
packages =
[
(mkPackage "Microsoft.AspNetCore.App.Ref" aspnetcore.version)
(mkPackage "Microsoft.NETCore.DotNetAppHost" runtime.version)
(mkPackage "Microsoft.NETCore.App.Ref" runtime.version)
(mkPackage "Microsoft.DotNet.ILCompiler" runtime.version)
(mkPackage "Microsoft.NET.ILLink.Tasks" runtime.version)
(mkPackage "Microsoft.NETCore.App.Crossgen2.${hostRid}" runtime.version)
(mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version)
]
++ lib.optionals (lib.versionOlder runtime.version "9") [
(mkPackage "Microsoft.NETCore.DotNetHost" runtime.version)
(mkPackage "Microsoft.NETCore.DotNetHostPolicy" runtime.version)
(mkPackage "Microsoft.NETCore.DotNetHostResolver" runtime.version)
];
targetPackages = fallbackTargetPackages // {
${targetRid} =
[
(mkPackage "Microsoft.AspNetCore.App.Runtime.${targetRid}" aspnetcore.version)
(mkPackage "Microsoft.NETCore.App.Host.${targetRid}" runtime.version)
(mkPackage "Microsoft.NETCore.App.Runtime.${targetRid}" runtime.version)
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetAppHost" runtime.version)
]
++ lib.optionals (lib.versionOlder runtime.version "9") [
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHost" runtime.version)
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostPolicy" runtime.version)
(mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostResolver" runtime.version)
];
};
sdk = mkCommon "sdk" rec {
pname = "${baseName}-sdk";
version = releaseManifest.sdkVersion;
src = vmr;
dontUnpack = true;
nativeBuildInputs = [
xmlstarlet
strip-nondeterminism
zip
];
outputs = [
"out"
"artifacts"
];
installPhase = ''
runHook preInstall
cp -r "$src"/dotnet-sdk-${version}-${targetRid} "$out"
chmod +w "$out"
mkdir "$out"/bin
ln -s "$out"/dotnet "$out"/bin/dotnet
mkdir -p "$artifacts"
cp -r "$src"/Private.SourceBuilt.Artifacts.*.${targetRid}/* "$artifacts"/
chmod +w -R "$artifacts"
local package
for package in "$artifacts"/{,SourceBuildReferencePackages/}*.nupkg; do
echo packing "$package" to artifacts
(cd "$package" && zip -rq0 "$package.tmp" .)
strip-nondeterminism --type zip "$package.tmp"
rm -r "$package"
mv "$package.tmp" "$package"
done
runHook postInstall
'';
passthru = {
inherit (vmr) icu targetRid hasILCompiler;
inherit packages targetPackages;
};
meta = vmr.meta // {
mainProgram = "dotnet";
};
};
runtime = mkCommon "runtime" rec {
pname = "${baseName}-runtime";
version = releaseManifest.runtimeVersion;
src = vmr;
dontUnpack = true;
outputs = [ "out" ];
installPhase = ''
runHook preInstall
cp -r "$src/dotnet-runtime-${version}-${targetRid}" "$out"
chmod +w "$out"
mkdir "$out"/bin
ln -s "$out"/dotnet "$out"/bin/dotnet
runHook postInstall
'';
meta = vmr.meta // {
mainProgram = "dotnet";
};
};
aspnetcore = mkCommon "aspnetcore" rec {
pname = "${baseName}-aspnetcore-runtime";
version = releaseManifest.aspNetCoreVersion or releaseManifest.runtimeVersion;
src = vmr;
dontUnpack = true;
outputs = [ "out" ];
installPhase = ''
runHook preInstall
cp -r "$src/dotnet-runtime-${releaseManifest.runtimeVersion}-${targetRid}" "$out"
chmod +w "$out"
mkdir "$out"/bin
ln -s "$out"/dotnet "$out"/bin/dotnet
chmod +w "$out"/shared
cp -Tr "$src/aspnetcore-runtime-${version}-${targetRid}" "$out"
runHook postInstall
'';
meta = vmr.meta // {
mainProgram = "dotnet";
};
};
in
{
inherit
vmr
sdk
runtime
aspnetcore
;
}