From 928e583edf9cdee08afb5f23670a881536e34ae2 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sat, 28 Mar 2026 20:38:35 -0300 Subject: [PATCH] dotnet: combine binary and source expressions --- .../compilers/dotnet/10.0.2xx/default.nix | 11 - .../{10.0.2xx => 10.0/2xx}/release-info.json | 0 .../{10.0.2xx => 10.0/2xx}/release.json | 0 .../compilers/dotnet/10.0/default.nix | 11 - .../compilers/dotnet/11.0/default.nix | 12 - .../compilers/dotnet/8.0/default.nix | 11 - .../compilers/dotnet/9.0/default.nix | 11 - .../dotnet/{ => binary}/build-dotnet.nix | 4 +- .../dotnet/{ => binary}/sign-apphost.nix | 2 +- .../dotnet/{ => binary}/sign-apphost.proj | 0 .../compilers/dotnet/{ => binary}/update.sh | 0 pkgs/development/compilers/dotnet/default.nix | 186 +++++--------- pkgs/development/compilers/dotnet/dotnet.nix | 87 +------ ...gPackageSourcesMappings-don-t-add-em.patch | 0 .../compilers/dotnet/source/default.nix | 241 ++++++++++++++++++ .../fix-aspnetcore-portable-build.patch | 0 .../{ => source}/fix-cmake-darwin.patch | 0 .../dotnet/{ => source}/fix-prep-script.patch | 0 .../fix-skiperroronprebuilts.patch | 0 .../dotnet/{ => source}/packages.nix | 2 +- .../{ => source}/patch-npm-packages.proj | 0 .../{ => source}/patch-restored-packages.proj | 0 .../record-downloaded-packages.proj | 0 .../compilers/dotnet/{ => source}/stage0.nix | 0 .../compilers/dotnet/{ => source}/stage1.nix | 0 .../dotnet/{ => source}/update-dotnet-vmr.sh | 0 .../compilers/dotnet/{ => source}/update.nix | 0 .../{ => source}/vmr-compiler-opt-v8.patch | 0 .../{ => source}/vmr-compiler-opt-v9.patch | 0 .../compilers/dotnet/{ => source}/vmr.nix | 2 +- 30 files changed, 316 insertions(+), 264 deletions(-) delete mode 100644 pkgs/development/compilers/dotnet/10.0.2xx/default.nix rename pkgs/development/compilers/dotnet/{10.0.2xx => 10.0/2xx}/release-info.json (100%) rename pkgs/development/compilers/dotnet/{10.0.2xx => 10.0/2xx}/release.json (100%) delete mode 100644 pkgs/development/compilers/dotnet/10.0/default.nix delete mode 100644 pkgs/development/compilers/dotnet/11.0/default.nix delete mode 100644 pkgs/development/compilers/dotnet/8.0/default.nix delete mode 100644 pkgs/development/compilers/dotnet/9.0/default.nix rename pkgs/development/compilers/dotnet/{ => binary}/build-dotnet.nix (98%) rename pkgs/development/compilers/dotnet/{ => binary}/sign-apphost.nix (73%) rename pkgs/development/compilers/dotnet/{ => binary}/sign-apphost.proj (100%) rename pkgs/development/compilers/dotnet/{ => binary}/update.sh (100%) rename pkgs/development/compilers/dotnet/{ => source}/UpdateNuGetConfigPackageSourcesMappings-don-t-add-em.patch (100%) create mode 100644 pkgs/development/compilers/dotnet/source/default.nix rename pkgs/development/compilers/dotnet/{ => source}/fix-aspnetcore-portable-build.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/fix-cmake-darwin.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/fix-prep-script.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/fix-skiperroronprebuilts.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/packages.nix (99%) rename pkgs/development/compilers/dotnet/{ => source}/patch-npm-packages.proj (100%) rename pkgs/development/compilers/dotnet/{ => source}/patch-restored-packages.proj (100%) rename pkgs/development/compilers/dotnet/{ => source}/record-downloaded-packages.proj (100%) rename pkgs/development/compilers/dotnet/{ => source}/stage0.nix (100%) rename pkgs/development/compilers/dotnet/{ => source}/stage1.nix (100%) rename pkgs/development/compilers/dotnet/{ => source}/update-dotnet-vmr.sh (100%) rename pkgs/development/compilers/dotnet/{ => source}/update.nix (100%) rename pkgs/development/compilers/dotnet/{ => source}/vmr-compiler-opt-v8.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/vmr-compiler-opt-v9.patch (100%) rename pkgs/development/compilers/dotnet/{ => source}/vmr.nix (99%) diff --git a/pkgs/development/compilers/dotnet/10.0.2xx/default.nix b/pkgs/development/compilers/dotnet/10.0.2xx/default.nix deleted file mode 100644 index a47eb409fccb..000000000000 --- a/pkgs/development/compilers/dotnet/10.0.2xx/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - callPackage, - dotnetCorePackages, -}: -callPackage ../dotnet.nix { - releaseManifestFile = ./release.json; - releaseInfoFile = ./release-info.json; - bootstrapSdk = dotnetCorePackages.dotnet_10.sdk; - depsFile = ./deps.json; - fallbackTargetPackages = dotnetCorePackages.sdk_10_0_2xx-bin.targetPackages; -} diff --git a/pkgs/development/compilers/dotnet/10.0.2xx/release-info.json b/pkgs/development/compilers/dotnet/10.0/2xx/release-info.json similarity index 100% rename from pkgs/development/compilers/dotnet/10.0.2xx/release-info.json rename to pkgs/development/compilers/dotnet/10.0/2xx/release-info.json diff --git a/pkgs/development/compilers/dotnet/10.0.2xx/release.json b/pkgs/development/compilers/dotnet/10.0/2xx/release.json similarity index 100% rename from pkgs/development/compilers/dotnet/10.0.2xx/release.json rename to pkgs/development/compilers/dotnet/10.0/2xx/release.json diff --git a/pkgs/development/compilers/dotnet/10.0/default.nix b/pkgs/development/compilers/dotnet/10.0/default.nix deleted file mode 100644 index 6a62a896edca..000000000000 --- a/pkgs/development/compilers/dotnet/10.0/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - callPackage, - dotnetCorePackages, -}: -callPackage ../dotnet.nix { - releaseManifestFile = ./release.json; - releaseInfoFile = ./release-info.json; - bootstrapSdkFile = ./bootstrap-sdk.nix; - depsFile = ./deps.json; - fallbackTargetPackages = dotnetCorePackages.sdk_10_0-bin.targetPackages; -} diff --git a/pkgs/development/compilers/dotnet/11.0/default.nix b/pkgs/development/compilers/dotnet/11.0/default.nix deleted file mode 100644 index ad3d2bfb398a..000000000000 --- a/pkgs/development/compilers/dotnet/11.0/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - callPackage, - dotnetCorePackages, -}: -callPackage ../dotnet.nix { - releaseManifestFile = ./release.json; - releaseInfoFile = ./release-info.json; - bootstrapSdkFile = ./bootstrap-sdk.nix; - depsFile = ./deps.json; - fallbackTargetPackages = dotnetCorePackages.sdk_11_0-bin.targetPackages; - allowPrerelease = true; -} diff --git a/pkgs/development/compilers/dotnet/8.0/default.nix b/pkgs/development/compilers/dotnet/8.0/default.nix deleted file mode 100644 index bd2b3754bb93..000000000000 --- a/pkgs/development/compilers/dotnet/8.0/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - callPackage, - dotnetCorePackages, -}: -callPackage ../dotnet.nix { - releaseManifestFile = ./release.json; - releaseInfoFile = ./release-info.json; - bootstrapSdkFile = ./bootstrap-sdk.nix; - depsFile = ./deps.json; - fallbackTargetPackages = dotnetCorePackages.sdk_8_0-bin.targetPackages; -} diff --git a/pkgs/development/compilers/dotnet/9.0/default.nix b/pkgs/development/compilers/dotnet/9.0/default.nix deleted file mode 100644 index ef192830f8a3..000000000000 --- a/pkgs/development/compilers/dotnet/9.0/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - callPackage, - dotnetCorePackages, -}: -callPackage ../dotnet.nix { - releaseManifestFile = ./release.json; - releaseInfoFile = ./release-info.json; - bootstrapSdkFile = ./bootstrap-sdk.nix; - depsFile = ./deps.json; - fallbackTargetPackages = dotnetCorePackages.sdk_9_0-bin.targetPackages; -} diff --git a/pkgs/development/compilers/dotnet/build-dotnet.nix b/pkgs/development/compilers/dotnet/binary/build-dotnet.nix similarity index 98% rename from pkgs/development/compilers/dotnet/build-dotnet.nix rename to pkgs/development/compilers/dotnet/binary/build-dotnet.nix index 13e47c95b320..c027e206b63b 100644 --- a/pkgs/development/compilers/dotnet/build-dotnet.nix +++ b/pkgs/development/compilers/dotnet/binary/build-dotnet.nix @@ -63,12 +63,12 @@ let sdk = ".NET SDK ${version}"; }; - mkWrapper = callPackage ./wrapper.nix { }; + mkWrapper = callPackage ../wrapper.nix { }; hostRid = systemToDotnetRid stdenv.hostPlatform.system; targetRid = systemToDotnetRid stdenv.targetPlatform.system; - sigtool = callPackage ./sigtool.nix { }; + sigtool = callPackage ../sigtool.nix { }; signAppHost = callPackage ./sign-apphost.nix { }; hasILCompiler = lib.versionAtLeast version (if hostRid == "osx-arm64" then "8" else "7"); diff --git a/pkgs/development/compilers/dotnet/sign-apphost.nix b/pkgs/development/compilers/dotnet/binary/sign-apphost.nix similarity index 73% rename from pkgs/development/compilers/dotnet/sign-apphost.nix rename to pkgs/development/compilers/dotnet/binary/sign-apphost.nix index e69adc5f3660..0b73540a29e1 100644 --- a/pkgs/development/compilers/dotnet/sign-apphost.nix +++ b/pkgs/development/compilers/dotnet/binary/sign-apphost.nix @@ -3,7 +3,7 @@ callPackage, }: let - sigtool = callPackage ./sigtool.nix { }; + sigtool = callPackage ../sigtool.nix { }; in replaceVars ./sign-apphost.proj { diff --git a/pkgs/development/compilers/dotnet/sign-apphost.proj b/pkgs/development/compilers/dotnet/binary/sign-apphost.proj similarity index 100% rename from pkgs/development/compilers/dotnet/sign-apphost.proj rename to pkgs/development/compilers/dotnet/binary/sign-apphost.proj diff --git a/pkgs/development/compilers/dotnet/update.sh b/pkgs/development/compilers/dotnet/binary/update.sh similarity index 100% rename from pkgs/development/compilers/dotnet/update.sh rename to pkgs/development/compilers/dotnet/binary/update.sh diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index ab80554a81ca..60b43dd7aef3 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -14,7 +14,7 @@ }: let - pkgs = makeScopeWithSplicing' { + scope = makeScopeWithSplicing' { otherSplices = generateSplicesForMkScope "dotnetCorePackages"; f = ( self: @@ -23,8 +23,10 @@ let fetchNupkg = callPackage ../../../build-support/dotnet/fetch-nupkg { }; - buildDotnet = attrs: callPackage (import ./build-dotnet.nix attrs) { }; buildDotnetSdk = + let + buildDotnet = attrs: callPackage (import ./binary/build-dotnet.nix attrs) { }; + in version: import version { inherit fetchNupkg; @@ -33,17 +35,6 @@ let buildNetSdk = attrs: buildDotnet (attrs // { type = "sdk"; }); }; - dotnet-bin = lib.mergeAttrsList ( - map buildDotnetSdk [ - ./6.0/releases.nix - ./7.0/releases.nix - ./8.0/releases.nix - ./9.0/releases.nix - ./10.0/releases.nix - ./11.0/releases.nix - ] - ); - runtimeIdentifierMap = { "x86_64-linux" = "linux-x64"; "aarch64-linux" = "linux-arm64"; @@ -54,24 +45,16 @@ let }; in - lib.optionalAttrs config.allowAliases ( - { - # EOL - sdk_2_1 = throw "Dotnet SDK 2.1 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; - sdk_2_2 = throw "Dotnet SDK 2.2 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; - sdk_3_0 = throw "Dotnet SDK 3.0 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; - sdk_3_1 = throw "Dotnet SDK 3.1 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; - sdk_5_0 = throw "Dotnet SDK 5.0 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; - } - // dotnet-bin - ) - // lib.mapAttrs' (k: v: lib.nameValuePair "${k}-bin" v) dotnet-bin - // { - inherit callPackage fetchNupkg buildDotnetSdk; + { + inherit + callPackage + fetchNupkg + buildDotnetSdk + ; generate-dotnet-sdk = writeScriptBin "generate-dotnet-sdk" ( # Don't include current nixpkgs in the exposed version. We want to make the script runnable without nixpkgs repo. - builtins.replaceStrings [ " -I nixpkgs=./." ] [ "" ] (builtins.readFile ./update.sh) + builtins.replaceStrings [ " -I nixpkgs=./." ] [ "" ] (builtins.readFile ./binary/update.sh) ); # Convert a "stdenv.hostPlatform.system" to a dotnet RID @@ -90,112 +73,59 @@ let mkNugetSource = callPackage ../../../build-support/dotnet/make-nuget-source { }; mkNugetDeps = callPackage ../../../build-support/dotnet/make-nuget-deps { }; addNuGetDeps = callPackage ../../../build-support/dotnet/add-nuget-deps { }; - - dotnet_8 = lib.recurseIntoAttrs (callPackage ./8.0 { }); - dotnet_9 = lib.recurseIntoAttrs (callPackage ./9.0 { }); - dotnet_10 = lib.recurseIntoAttrs (callPackage ./10.0 { }); - dotnet_10_0_2xx = lib.recurseIntoAttrs (callPackage ./10.0.2xx { }); - dotnet_11 = lib.recurseIntoAttrs (callPackage ./11.0 { }); } ); }; - # combine an SDK with the runtime/packages from a base SDK - combineSdk = - base: fallback: - if (fallback.runtime.version != base.runtime.version) then - throw "combineSdk: unable to combine ${fallback.name} with ${base.name} because runtime versions don't match (${fallback.runtime.version} != ${base.runtime.version})" - else if base.meta.broken then - fallback - else + callPackage = scope.callPackage; + + pkgs = + scope + // ( let - withBaseRuntimes = - if fallback.version == base.version then - base.unwrapped - else - (pkgs.combinePackages [ - base.runtime - base.aspnetcore - fallback - ]).unwrapped.overrideAttrs - (old: { - name = fallback.unwrapped.name; - # resolve symlinks so DOTNET_ROOT is self-contained - postBuild = '' - mv "$out"/share/dotnet{,~} - cp -Lr "$out"/share/dotnet{~,} - rm -r "$out"/share/dotnet~ - '' - + old.postBuild; - passthru = old.passthru // { - inherit (base) - runtime - aspnetcore - ; - inherit (fallback.unwrapped) - pname - version - ; - }; - }); + dotnet_6 = callPackage ./dotnet.nix { + dir = ./6.0; + withVMR = false; + }; - withFallbackPackages = withBaseRuntimes.overrideAttrs (old: { - passthru = - old.passthru - // ( - let - hostRid = pkgs.systemToDotnetRid base.stdenv.hostPlatform.system; - hasILCompiler = base.hasILCompiler || fallback.hasILCompiler; - packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler"; - mergePackages = - a: b: - let - names = lib.genAttrs' a (p: lib.nameValuePair p.pname null); - in - a ++ lib.filter (p: !lib.hasAttr p.pname names) b; - packages = mergePackages base.packages fallback.packages; - targetPackages = lib.mapAttrs ( - name: value: mergePackages value fallback.targetPackages.${name} - ) base.targetPackages; - in - { - inherit hasILCompiler packages targetPackages; - } - ); - }); + dotnet_7 = callPackage ./dotnet.nix { + dir = ./7.0; + withVMR = false; + }; + + dotnet_8 = callPackage ./dotnet.nix { + dir = ./8.0; + }; + + dotnet_9 = callPackage ./dotnet.nix { + dir = ./9.0; + }; + + dotnet_10 = callPackage ./dotnet.nix { + dir = ./10.0; + }; + + dotnet_11 = callPackage ./dotnet.nix { + dir = ./11.0; + allowPrerelease = true; + }; in - pkgs.callPackage ./wrapper.nix { } "sdk" withFallbackPackages; - + lib.optionalAttrs config.allowAliases { + # EOL + sdk_2_1 = throw "Dotnet SDK 2.1 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; + sdk_2_2 = throw "Dotnet SDK 2.2 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; + sdk_3_0 = throw "Dotnet SDK 3.0 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; + sdk_3_1 = throw "Dotnet SDK 3.1 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; + sdk_5_0 = throw "Dotnet SDK 5.0 is EOL, please use 8.0 (LTS) or 9.0 (Current)"; + } + // lib.mergeAttrsList [ + dotnet_6 + dotnet_7 + dotnet_8 + dotnet_9 + dotnet_10 + dotnet_11 + ] + ); in pkgs -// rec { - # use binary SDK here to avoid downgrading feature band - # combining sdk_8 results in a broken ilcompiler - sdk_8_0_1xx = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin; - sdk_9_0_1xx = combineSdk pkgs.dotnet_9.sdk pkgs.sdk_9_0_1xx-bin; - sdk_10_0_1xx = combineSdk pkgs.dotnet_10.sdk pkgs.sdk_10_0_1xx-bin; - sdk_10_0_2xx = combineSdk pkgs.dotnet_10_0_2xx.sdk pkgs.sdk_10_0_2xx-bin; - sdk_11_0_1xx = combineSdk pkgs.dotnet_11.sdk pkgs.sdk_11_0_1xx-bin; - # source-built SDK only exists for _1xx feature band - # https://github.com/dotnet/source-build/issues/3667 - sdk_8_0_4xx = combineSdk sdk_8_0_1xx pkgs.sdk_8_0_4xx-bin; - sdk_9_0_3xx = combineSdk sdk_9_0_1xx pkgs.sdk_9_0_3xx-bin; - sdk_8_0 = sdk_8_0_4xx; - sdk_9_0 = sdk_9_0_3xx; - sdk_10_0 = sdk_10_0_2xx; - sdk_11_0 = sdk_11_0_1xx; - sdk_8_0-source = if !pkgs.dotnet_8.vmr.meta.broken then pkgs.dotnet_8.sdk else pkgs.sdk_8_0_1xx-bin; - sdk_9_0-source = if !pkgs.dotnet_9.vmr.meta.broken then pkgs.dotnet_9.sdk else pkgs.sdk_9_0_1xx-bin; - sdk_10_0-source = - if !pkgs.dotnet_10.vmr.meta.broken then pkgs.dotnet_10_0_2xx.sdk else pkgs.sdk_10_0_2xx-bin; - sdk_11_0-source = - if !pkgs.dotnet_11.vmr.meta.broken then pkgs.dotnet_11.sdk else pkgs.sdk_11_0_1xx-bin; - runtime_8_0 = sdk_8_0.runtime; - runtime_9_0 = sdk_9_0.runtime; - runtime_10_0 = sdk_10_0.runtime; - runtime_11_0 = sdk_11_0.runtime; - aspnetcore_8_0 = sdk_8_0.aspnetcore; - aspnetcore_9_0 = sdk_9_0.aspnetcore; - aspnetcore_10_0 = sdk_10_0.aspnetcore; - aspnetcore_11_0 = sdk_11_0.aspnetcore; -} diff --git a/pkgs/development/compilers/dotnet/dotnet.nix b/pkgs/development/compilers/dotnet/dotnet.nix index 428693e2fa04..e223a926bf4d 100644 --- a/pkgs/development/compilers/dotnet/dotnet.nix +++ b/pkgs/development/compilers/dotnet/dotnet.nix @@ -1,85 +1,22 @@ { - stdenvNoCC, + config, callPackage, lib, - fetchurl, - releaseManifestFile, - releaseInfoFile, - bootstrapSdkFile ? null, - bootstrapSdk ? null, - allowPrerelease ? false, - depsFile, - fallbackTargetPackages, - pkgsBuildHost, + dir ? null, + releasesFile ? dir + "/releases.nix", buildDotnetSdk, -}: - -assert bootstrapSdkFile != null || bootstrapSdk != null; + withVMR ? true, + ... +}@attrs: let - inherit (lib.importJSON releaseInfoFile) - tarballHash - artifactsUrl - artifactsHash - ; + binary = buildDotnetSdk releasesFile; - mkPackages = callPackage ./packages.nix; - - vmr = - if bootstrapSdk != null then - callPackage ./vmr.nix { - inherit - releaseManifestFile - tarballHash - ; - bootstrapSdk = bootstrapSdk.unwrapped; - hasRuntime = false; - } - else - callPackage ./stage1.nix { - inherit - releaseManifestFile - tarballHash - depsFile - ; - bootstrapSdk = (buildDotnetSdk bootstrapSdkFile).sdk.unwrapped.overrideAttrs (old: { - passthru = old.passthru or { } // { - artifacts = stdenvNoCC.mkDerivation { - name = lib.nameFromURL artifactsUrl ".tar.gz"; - - src = fetchurl { - url = artifactsUrl; - hash = artifactsHash; - }; - - sourceRoot = "."; - - installPhase = '' - mkdir -p $out - cp -r * $out/ - ''; - }; - }; - }); - }; - - pkgs = mkPackages { - inherit vmr fallbackTargetPackages; - }; + sourcePackages = lib.optionalAttrs withVMR (callPackage ./source (attrs // { inherit binary; })); + pkgs = + lib.optionalAttrs config.allowAliases binary + // lib.mapAttrs' (k: v: lib.nameValuePair "${k}-bin" v) binary + // sourcePackages; in pkgs -// { - vmr = pkgs.vmr.overrideAttrs (old: { - passthru = old.passthru // { - updateScript = pkgsBuildHost.callPackage ./update.nix { - inherit - releaseManifestFile - releaseInfoFile - bootstrapSdkFile - allowPrerelease - ; - }; - }; - }); -} diff --git a/pkgs/development/compilers/dotnet/UpdateNuGetConfigPackageSourcesMappings-don-t-add-em.patch b/pkgs/development/compilers/dotnet/source/UpdateNuGetConfigPackageSourcesMappings-don-t-add-em.patch similarity index 100% rename from pkgs/development/compilers/dotnet/UpdateNuGetConfigPackageSourcesMappings-don-t-add-em.patch rename to pkgs/development/compilers/dotnet/source/UpdateNuGetConfigPackageSourcesMappings-don-t-add-em.patch diff --git a/pkgs/development/compilers/dotnet/source/default.nix b/pkgs/development/compilers/dotnet/source/default.nix new file mode 100644 index 000000000000..7a9672da606d --- /dev/null +++ b/pkgs/development/compilers/dotnet/source/default.nix @@ -0,0 +1,241 @@ +{ + config, + stdenvNoCC, + callPackage, + lib, + fetchurl, + dir ? null, + releaseManifestFile ? dir + "/release.json", + releaseInfoFile ? dir + "/release-info.json", + bootstrapSdkFile ? dir + "/bootstrap-sdk.nix", + bootstrapSdk ? null, + allowPrerelease ? false, + depsFile ? dir + "/deps.json", + pkgsBuildHost, + buildDotnetSdk, + withBinary ? true, + combinePackages, + systemToDotnetRid, + binary, +}@attrs: + +assert bootstrapSdk != null || bootstrapSdkFile != null; + +let + inherit (lib.importJSON releaseManifestFile) + sdkVersion + ; + + suffix = + let + parts = lib.take 3 (lib.splitVersion sdkVersion); + patch = lib.elemAt parts 2; + band = lib.substring 0 (lib.stringLength patch - 2) patch; + major = lib.elemAt parts 0; + channel = lib.concatStringsSep "_" (lib.take 2 parts); + sdk = lib.concatStringsSep "_" (lib.replaceElemAt parts 2 "${band}xx"); + in + { + source = if band == "1" then major else sdk; + inherit major channel sdk; + }; + + releaseInfo = (lib.importJSON releaseInfoFile); + inherit (releaseInfo) + tarballHash + artifactsUrl + artifactsHash + ; + + artifacts = stdenvNoCC.mkDerivation { + name = lib.nameFromURL artifactsUrl ".tar.gz"; + + src = fetchurl { + url = artifactsUrl; + hash = artifactsHash; + }; + + sourceRoot = "."; + + installPhase = '' + mkdir -p $out + cp -r * $out/ + ''; + }; + + vmr = + if bootstrapSdk != null then + callPackage ./vmr.nix { + inherit + releaseManifestFile + tarballHash + ; + bootstrapSdk = bootstrapSdk.unwrapped; + hasRuntime = false; + } + else + callPackage ./stage1.nix { + inherit + releaseManifestFile + tarballHash + depsFile + ; + bootstrapSdk = (buildDotnetSdk bootstrapSdkFile).sdk.unwrapped.overrideAttrs (old: { + passthru = old.passthru or { } // { + inherit artifacts; + }; + }); + }; + + fallbackSdk = binary.${"sdk_${suffix.sdk}"}; + fallbackTargetPackages = fallbackSdk.targetPackages; + + vmrPackages = + let + pkgs = callPackage ./packages.nix { + inherit vmr fallbackTargetPackages; + }; + in + lib.recurseIntoAttrs ( + pkgs + // { + vmr = pkgs.vmr.overrideAttrs (old: { + passthru = old.passthru // { + updateScript = pkgsBuildHost.callPackage ./update.nix { + inherit + releaseManifestFile + releaseInfoFile + bootstrapSdkFile + allowPrerelease + ; + }; + }; + }); + } + ); + + source = + vmrPackages + // lib.optionalAttrs vmr.meta.broken rec { + sdk = fallbackSdk; + inherit (sdk) runtime aspnetcore; + }; + + # combine an SDK with the runtime/packages from a base SDK + combineSdk = + base: fallback: + if (fallback.runtime.version != base.runtime.version) then + throw "combineSdk: unable to combine ${fallback.name} with ${base.name} because runtime versions don't match (${fallback.runtime.version} != ${base.runtime.version})" + else if base.meta.broken then + fallback + else + let + withBaseRuntimes = + if fallback.version == base.version then + base.unwrapped + else + (combinePackages [ + base.runtime + base.aspnetcore + fallback + ]).unwrapped.overrideAttrs + (old: { + name = fallback.unwrapped.name; + # resolve symlinks so DOTNET_ROOT is self-contained + postBuild = '' + mv "$out"/share/dotnet{,~} + cp -Lr "$out"/share/dotnet{~,} + rm -r "$out"/share/dotnet~ + '' + + old.postBuild; + passthru = old.passthru // { + inherit (base) + runtime + aspnetcore + ; + inherit (fallback.unwrapped) + pname + version + hasILCompiler + ; + }; + }); + + withFallbackPackages = withBaseRuntimes.overrideAttrs (old: { + passthru = + old.passthru + // ( + let + hostRid = systemToDotnetRid base.stdenv.hostPlatform.system; + hasILCompiler = base.hasILCompiler || withBaseRuntimes.hasILCompiler; + packageName = "runtime.${hostRid}.Microsoft.DotNet.ILCompiler"; + mergePackages = + a: b: + let + names = lib.genAttrs' a (p: lib.nameValuePair p.pname null); + in + a ++ lib.filter (p: !lib.hasAttr p.pname names) b; + packages = mergePackages base.packages fallback.packages; + targetPackages = lib.mapAttrs ( + name: value: mergePackages value fallback.targetPackages.${name} + ) base.targetPackages; + in + { + inherit hasILCompiler packages targetPackages; + } + ); + }); + in + callPackage ../wrapper.nix { } "sdk" withFallbackPackages; +in +{ + "dotnet_${suffix.source}" = vmrPackages; +} +// ( + let + combined = lib.mapAttrs (s: v: combineSdk source.sdk v) ( + if withBinary then + lib.filterAttrs (n: _: lib.substring 0 4 n == "sdk_") binary + else + { + "sdk_${suffix.sdk}" = binary.${"sdk_${suffix.sdk}"}; + } + // + lib.optionalAttrs (lib.versionAtLeast source.sdk.version binary.${"sdk_${suffix.channel}"}.version) + { + "sdk_${suffix.channel}" = binary.${"sdk_${suffix.channel}"}; + } + ); + in + combined + // { + "sdk_${suffix.channel}-source" = source.sdk; + "runtime_${suffix.channel}" = source.runtime; + "aspnetcore_${suffix.channel}" = source.aspnetcore; + } +) +// lib.optionalAttrs withBinary ( + lib.mergeAttrsList ( + map + ( + featureBand: + callPackage ./default.nix ( + attrs + // { + dir = dir + "/${featureBand}"; + withBinary = false; + bootstrapSdk = vmrPackages.sdk; + } + ) + ) + ( + lib.filter (x: x != "1xx") ( + map (x: lib.elemAt x 2) ( + lib.filter (x: x != null && lib.versionAtLeast (lib.elemAt x 0) "10") ( + map (lib.match "sdk_(.*)_(.*)_(.*)") (lib.attrNames binary) + ) + ) + ) + ) + ) +) diff --git a/pkgs/development/compilers/dotnet/fix-aspnetcore-portable-build.patch b/pkgs/development/compilers/dotnet/source/fix-aspnetcore-portable-build.patch similarity index 100% rename from pkgs/development/compilers/dotnet/fix-aspnetcore-portable-build.patch rename to pkgs/development/compilers/dotnet/source/fix-aspnetcore-portable-build.patch diff --git a/pkgs/development/compilers/dotnet/fix-cmake-darwin.patch b/pkgs/development/compilers/dotnet/source/fix-cmake-darwin.patch similarity index 100% rename from pkgs/development/compilers/dotnet/fix-cmake-darwin.patch rename to pkgs/development/compilers/dotnet/source/fix-cmake-darwin.patch diff --git a/pkgs/development/compilers/dotnet/fix-prep-script.patch b/pkgs/development/compilers/dotnet/source/fix-prep-script.patch similarity index 100% rename from pkgs/development/compilers/dotnet/fix-prep-script.patch rename to pkgs/development/compilers/dotnet/source/fix-prep-script.patch diff --git a/pkgs/development/compilers/dotnet/fix-skiperroronprebuilts.patch b/pkgs/development/compilers/dotnet/source/fix-skiperroronprebuilts.patch similarity index 100% rename from pkgs/development/compilers/dotnet/fix-skiperroronprebuilts.patch rename to pkgs/development/compilers/dotnet/source/fix-skiperroronprebuilts.patch diff --git a/pkgs/development/compilers/dotnet/packages.nix b/pkgs/development/compilers/dotnet/source/packages.nix similarity index 99% rename from pkgs/development/compilers/dotnet/packages.nix rename to pkgs/development/compilers/dotnet/source/packages.nix index 6be556fe204c..d804fa7032bc 100644 --- a/pkgs/development/compilers/dotnet/packages.nix +++ b/pkgs/development/compilers/dotnet/source/packages.nix @@ -12,7 +12,7 @@ }: let - mkWrapper = callPackage ./wrapper.nix { }; + mkWrapper = callPackage ../wrapper.nix { }; mkCommon = type: args: mkWrapper type ( diff --git a/pkgs/development/compilers/dotnet/patch-npm-packages.proj b/pkgs/development/compilers/dotnet/source/patch-npm-packages.proj similarity index 100% rename from pkgs/development/compilers/dotnet/patch-npm-packages.proj rename to pkgs/development/compilers/dotnet/source/patch-npm-packages.proj diff --git a/pkgs/development/compilers/dotnet/patch-restored-packages.proj b/pkgs/development/compilers/dotnet/source/patch-restored-packages.proj similarity index 100% rename from pkgs/development/compilers/dotnet/patch-restored-packages.proj rename to pkgs/development/compilers/dotnet/source/patch-restored-packages.proj diff --git a/pkgs/development/compilers/dotnet/record-downloaded-packages.proj b/pkgs/development/compilers/dotnet/source/record-downloaded-packages.proj similarity index 100% rename from pkgs/development/compilers/dotnet/record-downloaded-packages.proj rename to pkgs/development/compilers/dotnet/source/record-downloaded-packages.proj diff --git a/pkgs/development/compilers/dotnet/stage0.nix b/pkgs/development/compilers/dotnet/source/stage0.nix similarity index 100% rename from pkgs/development/compilers/dotnet/stage0.nix rename to pkgs/development/compilers/dotnet/source/stage0.nix diff --git a/pkgs/development/compilers/dotnet/stage1.nix b/pkgs/development/compilers/dotnet/source/stage1.nix similarity index 100% rename from pkgs/development/compilers/dotnet/stage1.nix rename to pkgs/development/compilers/dotnet/source/stage1.nix diff --git a/pkgs/development/compilers/dotnet/update-dotnet-vmr.sh b/pkgs/development/compilers/dotnet/source/update-dotnet-vmr.sh similarity index 100% rename from pkgs/development/compilers/dotnet/update-dotnet-vmr.sh rename to pkgs/development/compilers/dotnet/source/update-dotnet-vmr.sh diff --git a/pkgs/development/compilers/dotnet/update.nix b/pkgs/development/compilers/dotnet/source/update.nix similarity index 100% rename from pkgs/development/compilers/dotnet/update.nix rename to pkgs/development/compilers/dotnet/source/update.nix diff --git a/pkgs/development/compilers/dotnet/vmr-compiler-opt-v8.patch b/pkgs/development/compilers/dotnet/source/vmr-compiler-opt-v8.patch similarity index 100% rename from pkgs/development/compilers/dotnet/vmr-compiler-opt-v8.patch rename to pkgs/development/compilers/dotnet/source/vmr-compiler-opt-v8.patch diff --git a/pkgs/development/compilers/dotnet/vmr-compiler-opt-v9.patch b/pkgs/development/compilers/dotnet/source/vmr-compiler-opt-v9.patch similarity index 100% rename from pkgs/development/compilers/dotnet/vmr-compiler-opt-v9.patch rename to pkgs/development/compilers/dotnet/source/vmr-compiler-opt-v9.patch diff --git a/pkgs/development/compilers/dotnet/vmr.nix b/pkgs/development/compilers/dotnet/source/vmr.nix similarity index 99% rename from pkgs/development/compilers/dotnet/vmr.nix rename to pkgs/development/compilers/dotnet/source/vmr.nix index 44e6aff2f3c8..33b457d6822f 100644 --- a/pkgs/development/compilers/dotnet/vmr.nix +++ b/pkgs/development/compilers/dotnet/source/vmr.nix @@ -58,7 +58,7 @@ let targetRid = dotnetCorePackages.systemToDotnetRid targetPlatform.system; targetArch = lib.elemAt (lib.splitString "-" targetRid) 1; - sigtool = callPackage ./sigtool.nix { }; + sigtool = callPackage ../sigtool.nix { }; _icu = if isDarwin then darwin.ICU else icu;