at master 6.6 kB view raw
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}