diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/dotnet/stage0.nix')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/dotnet/stage0.nix | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/dotnet/stage0.nix b/nixpkgs/pkgs/development/compilers/dotnet/stage0.nix new file mode 100644 index 000000000000..d12d1a6c3d13 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/dotnet/stage0.nix @@ -0,0 +1,126 @@ +{ stdenv +, stdenvNoCC +, callPackage +, lib +, writeShellScript +, pkgsBuildHost +, mkNugetDeps +, nix +, cacert +, nuget-to-nix +, dotnetCorePackages +, xmlstarlet + +, releaseManifestFile +, tarballHash +, depsFile +, bootstrapSdk +}: + +let + mkPackages = callPackage ./packages.nix; + mkVMR = callPackage ./vmr.nix; + + dotnetSdk = pkgsBuildHost.callPackage bootstrapSdk {}; + + patchNupkgs = pkgsBuildHost.callPackage ./patch-nupkgs.nix {}; + + signAppHost = callPackage ./sign-apphost.nix {}; + + deps = mkNugetDeps { + name = "dotnet-vmr-deps"; + sourceFile = depsFile; + }; + + vmr = (mkVMR { + inherit releaseManifestFile tarballHash dotnetSdk; + }).overrideAttrs (old: rec { + prebuiltPackages = mkNugetDeps { + name = "dotnet-vmr-deps"; + sourceFile = depsFile; + }; + + nativeBuildInputs = + old.nativeBuildInputs or [] + ++ [ xmlstarlet ] + ++ lib.optional stdenv.isLinux patchNupkgs; + + postPatch = old.postPatch or "" + lib.optionalString stdenv.isLinux '' + xmlstarlet ed \ + --inplace \ + -s //Project -t elem -n Import \ + -i \$prev -t attr -n Project -v "${./patch-restored-packages.proj}" \ + src/*/Directory.Build.targets + '' + lib.optionalString stdenv.isDarwin '' + xmlstarlet ed \ + --inplace \ + -s //Project -t elem -n Import \ + -i \$prev -t attr -n Project -v "${signAppHost}" \ + src/runtime/Directory.Build.targets + ''; + + postConfigure = old.postConfigure or "" + '' + [[ ! -v prebuiltPackages ]] || ln -sf "$prebuiltPackages"/* prereqs/packages/prebuilt/ + ''; + + passthru = old.passthru or {} // { fetch-deps = + let + inherit (vmr) targetRid updateScript; + otherRids = + lib.remove targetRid ( + map (system: dotnetCorePackages.systemToDotnetRid system) + vmr.meta.platforms); + + pkg = vmr.overrideAttrs (old: { + nativeBuildInputs = old.nativeBuildInputs ++ [ + nix + cacert + (nuget-to-nix.override { dotnet-sdk = dotnetSdk; }) + ]; + postPatch = old.postPatch or "" + '' + xmlstarlet ed \ + --inplace \ + -s //Project -t elem -n Import \ + -i \$prev -t attr -n Project -v "${./record-downloaded-packages.proj}" \ + repo-projects/Directory.Build.targets + # make nuget-client use the standard arcade package-cache dir, which + # is where we scan for dependencies + xmlstarlet ed \ + --inplace \ + -s //Project -t elem -n ItemGroup \ + -s \$prev -t elem -n EnvironmentVariables \ + -i \$prev -t attr -n Include -v 'NUGET_PACKAGES=$(ProjectDirectory)artifacts/sb/package-cache/' \ + repo-projects/nuget-client.proj + ''; + buildFlags = [ "--online" ] ++ old.buildFlags; + prebuiltPackages = null; + }); + + drv = builtins.unsafeDiscardOutputDependency pkg.drvPath; + in + writeShellScript "fetch-dotnet-sdk-deps" '' + ${nix}/bin/nix-shell --pure --run 'source /dev/stdin' "${drv}" << 'EOF' + set -e + + tmp=$(mktemp -d) + trap 'rm -fr "$tmp"' EXIT + + HOME=$tmp/.home + cd "$tmp" + + phases="''${prePhases[*]:-} unpackPhase patchPhase ''${preConfigurePhases[*]:-} \ + configurePhase ''${preBuildPhases[*]:-} buildPhase checkPhase" \ + genericBuild + + depsFiles=(./src/*/deps.nix) + + cat $(nix-build ${toString ./combine-deps.nix} \ + --arg list "[ ''${depsFiles[*]} ]" \ + --argstr baseRid ${targetRid} \ + --arg otherRids '${lib.generators.toPretty { multiline = false; } otherRids}' \ + ) > "${toString prebuiltPackages.sourceFile}" + EOF + ''; + }; + }); +in mkPackages { inherit vmr; } |