1{
2 stdenvNoCC,
3 lib,
4 callPackage,
5 vmr,
6 xmlstarlet,
7 strip-nondeterminism,
8 zip,
9 nugetPackageHook,
10 baseName ? "dotnet",
11 fallbackTargetPackages ? { },
12}:
13
14let
15 mkWrapper = callPackage ./wrapper.nix { };
16 mkCommon =
17 type: args:
18 mkWrapper type (
19 stdenvNoCC.mkDerivation (
20 args
21 // {
22 outputs = args.outputs or [ "out" ] ++ [ "man" ];
23 postFixup = args.postFixup or "" + ''
24 ln -s ${vmr.man} $man
25 '';
26 propagatedSandboxProfile = lib.optionalString stdenvNoCC.hostPlatform.isDarwin ''
27 (allow file-read* (subpath "/private/var/db/mds/system"))
28 (allow mach-lookup (global-name "com.apple.SecurityServer")
29 (global-name "com.apple.system.opendirectoryd.membership"))
30 '';
31 }
32 )
33 );
34 inherit (vmr) targetRid releaseManifest;
35
36 # TODO: do this properly
37 hostRid = targetRid;
38
39 mkPackage =
40 pname: version:
41 stdenvNoCC.mkDerivation {
42 inherit pname version;
43
44 src = vmr;
45 dontUnpack = true;
46
47 nativeBuildInputs = [
48 xmlstarlet
49 nugetPackageHook
50 ];
51
52 installPhase = ''
53 runHook preInstall
54
55 mkdir -p "$out"
56
57 pushd "$src"/lib/Private.SourceBuilt.Artifacts.*.${targetRid}
58 pushd ${pname}.${version}.nupkg
59
60 xmlstarlet \
61 sel -t \
62 -m /_:package/_:metadata \
63 -v _:id -nl \
64 -v _:version -nl \
65 *.nuspec | (
66 read id
67 read version
68 id=''${id,,}
69 version=''${version,,}
70 mkdir -p "$out"/share/nuget/packages/"$id"
71 cp -r . "$out"/share/nuget/packages/"$id"/"$version"
72 cd "$out"/share/nuget/packages/"$id"/"$version"
73 chmod +w .
74 for dir in tools runtimes/*/native; do
75 [[ ! -d "$dir" ]] || chmod -R +x "$dir"
76 done
77 echo {} > .nupkg.metadata
78 )
79
80 popd
81 popd
82
83 runHook postInstall
84 '';
85 };
86
87 packages = [
88 (mkPackage "Microsoft.AspNetCore.App.Ref" aspnetcore.version)
89 (mkPackage "Microsoft.NETCore.DotNetAppHost" runtime.version)
90 (mkPackage "Microsoft.NETCore.App.Ref" runtime.version)
91 (mkPackage "Microsoft.DotNet.ILCompiler" runtime.version)
92 (mkPackage "Microsoft.NET.ILLink.Tasks" runtime.version)
93 (mkPackage "Microsoft.NETCore.App.Crossgen2.${hostRid}" runtime.version)
94 (mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version)
95 ]
96 ++ lib.optionals (lib.versionOlder runtime.version "9") [
97 (mkPackage "Microsoft.NETCore.DotNetHost" runtime.version)
98 (mkPackage "Microsoft.NETCore.DotNetHostPolicy" runtime.version)
99 (mkPackage "Microsoft.NETCore.DotNetHostResolver" runtime.version)
100 ]
101 ++ targetPackages.${targetRid};
102
103 targetPackages = fallbackTargetPackages // {
104 ${targetRid} = [
105 (mkPackage "Microsoft.AspNetCore.App.Runtime.${targetRid}" aspnetcore.version)
106 (mkPackage "Microsoft.NETCore.App.Host.${targetRid}" runtime.version)
107 (mkPackage "Microsoft.NETCore.App.Runtime.${targetRid}" runtime.version)
108 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetAppHost" runtime.version)
109 ]
110 ++ lib.optionals (lib.versionOlder runtime.version "9") [
111 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHost" runtime.version)
112 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostPolicy" runtime.version)
113 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostResolver" runtime.version)
114 ];
115 };
116
117 sdk = mkCommon "sdk" rec {
118 pname = "${baseName}-sdk";
119 version = releaseManifest.sdkVersion;
120
121 src = vmr;
122 dontUnpack = true;
123
124 nativeBuildInputs = [
125 xmlstarlet
126 strip-nondeterminism
127 zip
128 ];
129
130 outputs = [
131 "out"
132 "artifacts"
133 ];
134
135 installPhase = ''
136 runHook preInstall
137
138 mkdir -p "$out"/share
139 cp -r "$src"/lib/dotnet-sdk-${version}-${targetRid} "$out"/share/dotnet
140 chmod +w "$out"/share/dotnet
141 mkdir "$out"/bin
142 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
143
144 mkdir -p "$artifacts"
145 cp -r "$src"/lib/Private.SourceBuilt.Artifacts.*.${targetRid}/* "$artifacts"/
146 chmod +w -R "$artifacts"
147
148 local package
149
150 for package in "$artifacts"/{,SourceBuildReferencePackages/}*.nupkg; do
151 echo packing "$package" to artifacts
152 (cd "$package" && zip -rq0 "$package.tmp" .)
153 strip-nondeterminism --type zip "$package.tmp"
154 rm -r "$package"
155 mv "$package.tmp" "$package"
156 done
157
158 runHook postInstall
159 '';
160
161 ${
162 if stdenvNoCC.hostPlatform.isDarwin && lib.versionAtLeast version "10" then "postInstall" else null
163 } =
164 ''
165 mkdir -p "$out"/nix-support
166 cp "$src"/nix-support/manual-sdk-deps "$out"/nix-support/manual-sdk-deps
167 '';
168
169 passthru = {
170 inherit (vmr) icu targetRid hasILCompiler;
171
172 inherit
173 packages
174 targetPackages
175 runtime
176 aspnetcore
177 ;
178 };
179
180 meta = vmr.meta // {
181 mainProgram = "dotnet";
182 };
183 };
184
185 runtime = mkCommon "runtime" rec {
186 pname = "${baseName}-runtime";
187 version = releaseManifest.runtimeVersion;
188
189 src = vmr;
190 dontUnpack = true;
191
192 installPhase = ''
193 runHook preInstall
194
195 mkdir -p "$out"/share
196 cp -r "$src/lib/dotnet-runtime-${version}-${targetRid}" "$out"/share/dotnet
197 chmod +w "$out"/share/dotnet
198 mkdir "$out"/bin
199 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
200
201 runHook postInstall
202 '';
203
204 passthru = {
205 inherit (vmr) icu;
206 };
207
208 meta = vmr.meta // {
209 mainProgram = "dotnet";
210 };
211 };
212
213 aspnetcore = mkCommon "aspnetcore" rec {
214 pname = "${baseName}-aspnetcore-runtime";
215 version = releaseManifest.aspNetCoreVersion or releaseManifest.runtimeVersion;
216
217 src = vmr;
218 dontUnpack = true;
219
220 installPhase = ''
221 runHook preInstall
222
223 mkdir -p "$out"/share
224 cp -r "$src/lib/dotnet-runtime-${runtime.version}-${targetRid}" "$out"/share/dotnet
225 chmod +w "$out"/share/dotnet/shared
226 mkdir "$out"/bin
227 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
228
229 cp -Tr "$src/lib/aspnetcore-runtime-${version}-${targetRid}"/shared/Microsoft.AspNetCore.App "$out"/share/dotnet/shared/Microsoft.AspNetCore.App
230 chmod +w "$out"/share/dotnet/shared
231
232 runHook postInstall
233 '';
234
235 passthru = {
236 inherit (vmr) icu;
237 };
238
239 meta = vmr.meta // {
240 mainProgram = "dotnet";
241 };
242 };
243in
244{
245 inherit
246 vmr
247 sdk
248 runtime
249 aspnetcore
250 ;
251
252}