nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
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 sdkVersion = releaseManifest.sdkVersion;
36 runtimeVersion = releaseManifest.runtimeVersion;
37 aspnetcoreVersion = releaseManifest.aspNetCoreVersion or releaseManifest.runtimeVersion;
38
39 # TODO: do this properly
40 hostRid = targetRid;
41
42 mkPackage =
43 pname: version:
44 stdenvNoCC.mkDerivation {
45 inherit pname version;
46
47 src = vmr;
48 dontUnpack = true;
49
50 nativeBuildInputs = [
51 xmlstarlet
52 nugetPackageHook
53 ];
54
55 installPhase = ''
56 runHook preInstall
57
58 mkdir -p "$out"
59
60 pushd "$src"/lib/Private.SourceBuilt.Artifacts.*.${targetRid}
61 pushd ${pname}.${version}.nupkg
62
63 xmlstarlet \
64 sel -t \
65 -m /_:package/_:metadata \
66 -v _:id -nl \
67 -v _:version -nl \
68 *.nuspec | (
69 read id
70 read version
71 id=''${id,,}
72 version=''${version,,}
73 mkdir -p "$out"/share/nuget/packages/"$id"
74 cp -r . "$out"/share/nuget/packages/"$id"/"$version"
75 cd "$out"/share/nuget/packages/"$id"/"$version"
76 chmod +w .
77 for dir in tools runtimes/*/native; do
78 [[ ! -d "$dir" ]] || chmod -R +x "$dir"
79 done
80 echo {} > .nupkg.metadata
81 )
82
83 popd
84 popd
85
86 runHook postInstall
87 '';
88 };
89
90 packages = [
91 (mkPackage "Microsoft.AspNetCore.App.Ref" aspnetcore.version)
92 (mkPackage "Microsoft.NETCore.DotNetAppHost" runtime.version)
93 (mkPackage "Microsoft.NETCore.App.Ref" runtime.version)
94 (mkPackage "Microsoft.DotNet.ILCompiler" runtime.version)
95 (mkPackage "Microsoft.NET.ILLink.Tasks" runtime.version)
96 (mkPackage "Microsoft.NETCore.App.Crossgen2.${hostRid}" runtime.version)
97 ]
98 ++ lib.optional vmr.hasILCompiler (
99 mkPackage "runtime.${hostRid}.Microsoft.DotNet.ILCompiler" runtime.version
100 )
101 ++ lib.optionals (lib.versionOlder runtime.version "9") [
102 (mkPackage "Microsoft.NETCore.DotNetHost" runtime.version)
103 (mkPackage "Microsoft.NETCore.DotNetHostPolicy" runtime.version)
104 (mkPackage "Microsoft.NETCore.DotNetHostResolver" runtime.version)
105 ]
106 ++ targetPackages.${targetRid};
107
108 targetPackages = fallbackTargetPackages // {
109 ${targetRid} = [
110 (mkPackage "Microsoft.AspNetCore.App.Runtime.${targetRid}" aspnetcore.version)
111 (mkPackage "Microsoft.NETCore.App.Host.${targetRid}" runtime.version)
112 (mkPackage "Microsoft.NETCore.App.Runtime.${targetRid}" runtime.version)
113 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetAppHost" runtime.version)
114 ]
115 ++ lib.optionals (lib.versionOlder runtime.version "9") [
116 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHost" runtime.version)
117 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostPolicy" runtime.version)
118 (mkPackage "runtime.${targetRid}.Microsoft.NETCore.DotNetHostResolver" runtime.version)
119 ]
120 ++ lib.optionals (lib.versionAtLeast runtime.version "10") [
121 (mkPackage "Microsoft.NETCore.App.Runtime.NativeAOT.${targetRid}" runtime.version)
122 ];
123 };
124
125 sdk = mkCommon "sdk" {
126 pname = "${baseName}-sdk";
127 version = sdkVersion;
128
129 src = vmr;
130 dontUnpack = true;
131
132 nativeBuildInputs = [
133 xmlstarlet
134 strip-nondeterminism
135 zip
136 ];
137
138 outputs = [
139 "out"
140 "artifacts"
141 ];
142
143 installPhase = ''
144 runHook preInstall
145
146 mkdir -p "$out"/share
147 cp -r "$src"/lib/dotnet-sdk-${sdkVersion}-${targetRid} "$out"/share/dotnet
148 chmod +w "$out"/share/dotnet
149 mkdir "$out"/bin
150 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
151
152 mkdir -p "$artifacts"
153 cp -r "$src"/lib/Private.SourceBuilt.Artifacts.*.${targetRid}/* "$artifacts"/
154 chmod +w -R "$artifacts"
155
156 local package
157
158 for package in "$artifacts"/{,SourceBuildReferencePackages/}*.nupkg; do
159 echo packing "$package" to artifacts
160 (cd "$package" && zip -rq0 "$package.tmp" .)
161 strip-nondeterminism --type zip "$package.tmp"
162 rm -r "$package"
163 mv "$package.tmp" "$package"
164 done
165
166 runHook postInstall
167 '';
168
169 ${
170 if stdenvNoCC.hostPlatform.isDarwin && lib.versionAtLeast sdkVersion "10" then
171 "postInstall"
172 else
173 null
174 } =
175 ''
176 mkdir -p "$out"/nix-support
177 cp "$src"/nix-support/manual-sdk-deps "$out"/nix-support/manual-sdk-deps
178 '';
179
180 passthru = {
181 inherit (vmr) icu targetRid hasILCompiler;
182
183 inherit
184 packages
185 targetPackages
186 runtime
187 aspnetcore
188 ;
189 };
190
191 meta = vmr.meta // {
192 mainProgram = "dotnet";
193 };
194 };
195
196 runtime = mkCommon "runtime" {
197 pname = "${baseName}-runtime";
198 version = runtimeVersion;
199
200 src = vmr;
201 dontUnpack = true;
202
203 installPhase = ''
204 runHook preInstall
205
206 mkdir -p "$out"/share
207 cp -r "$src/lib/dotnet-runtime-${runtimeVersion}-${targetRid}" "$out"/share/dotnet
208 chmod +w "$out"/share/dotnet
209 mkdir "$out"/bin
210 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
211
212 runHook postInstall
213 '';
214
215 passthru = {
216 inherit (vmr) icu;
217 };
218
219 meta = vmr.meta // {
220 mainProgram = "dotnet";
221 };
222 };
223
224 aspnetcore = mkCommon "aspnetcore" {
225 pname = "${baseName}-aspnetcore-runtime";
226 version = aspnetcoreVersion;
227
228 src = vmr;
229 dontUnpack = true;
230
231 installPhase = ''
232 runHook preInstall
233
234 mkdir -p "$out"/share
235 cp -r "$src/lib/dotnet-runtime-${runtime.version}-${targetRid}" "$out"/share/dotnet
236 chmod +w "$out"/share/dotnet/shared
237 mkdir "$out"/bin
238 ln -s "$out"/share/dotnet/dotnet "$out"/bin/dotnet
239
240 cp -Tr "$src/lib/aspnetcore-runtime-${aspnetcoreVersion}-${targetRid}"/shared/Microsoft.AspNetCore.App "$out"/share/dotnet/shared/Microsoft.AspNetCore.App
241 chmod +w "$out"/share/dotnet/shared
242
243 runHook postInstall
244 '';
245
246 passthru = {
247 inherit (vmr) icu;
248 };
249
250 meta = vmr.meta // {
251 mainProgram = "dotnet";
252 };
253 };
254in
255{
256 inherit
257 vmr
258 sdk
259 runtime
260 aspnetcore
261 ;
262
263 packages = lib.recurseIntoAttrs (
264 # recursion can't handle . in the attribute names
265 lib.genAttrs' packages (p: lib.nameValuePair (lib.replaceString "." "-" p.pname) p)
266 );
267}