python312Packages.databricks-sdk: 0.41.0 -> 0.43.0 (#380426)
[NixPkgs.git] / pkgs / development / compilers / dotnet / stage0.nix
blob4f439c0a42856f1f5d354a3f7a0dda092b53655a
2   stdenv,
3   callPackage,
4   lib,
5   writeShellScript,
6   mkNugetDeps,
7   nix,
8   cacert,
9   nuget-to-json,
10   jq,
11   dotnetCorePackages,
12   xmlstarlet,
13   patchNupkgs,
14   symlinkJoin,
16   baseName ? "dotnet",
17   releaseManifestFile,
18   tarballHash,
19   depsFile,
20   fallbackTargetPackages,
21   bootstrapSdk,
24 let
25   mkPackages = callPackage ./packages.nix;
26   mkVMR = callPackage ./vmr.nix;
28   sdkPackages = symlinkJoin {
29     name = "${bootstrapSdk.name}-packages";
30     paths = map (
31       p:
32       p.override {
33         installable = true;
34       }
35     ) bootstrapSdk.packages;
36   };
38   vmr =
39     (mkVMR {
40       inherit
41         baseName
42         releaseManifestFile
43         tarballHash
44         bootstrapSdk
45         ;
46     }).overrideAttrs
47       (old: rec {
48         prebuiltPackages = mkNugetDeps {
49           name = "dotnet-vmr-deps";
50           sourceFile = depsFile;
51           installable = true;
52         };
54         nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [
55           xmlstarlet
56           patchNupkgs
57         ];
59         postPatch =
60           old.postPatch or ""
61           + ''
62             xmlstarlet ed \
63               --inplace \
64               -s //Project -t elem -n Import \
65               -i \$prev -t attr -n Project -v "${./patch-restored-packages.proj}" \
66               src/*/Directory.Build.targets
67           '';
69         postConfigure =
70           old.postConfigure or ""
71           + ''
72             [[ ! -v prebuiltPackages ]] || \
73               ln -sf "$prebuiltPackages"/share/nuget/source/*/*/*.nupkg prereqs/packages/prebuilt/
74             ln -sf "${sdkPackages}"/share/nuget/source/*/*/*.nupkg prereqs/packages/prebuilt/
75           '';
77         buildFlags =
78           old.buildFlags
79           ++ lib.optionals (lib.versionAtLeast old.version "9") [
80             # We need to set this as long as we have something in deps.json. Currently
81             # that's the portable ilasm/ildasm which aren't in the centos sourcebuilt
82             # artifacts.
83             "-p:SkipErrorOnPrebuilts=true"
84           ];
86         passthru = old.passthru or { } // {
87           fetch-deps =
88             let
89               inherit (vmr) targetRid updateScript;
90               otherRids = lib.remove targetRid (
91                 map (system: dotnetCorePackages.systemToDotnetRid system) vmr.meta.platforms
92               );
94               pkg = vmr.overrideAttrs (old: {
95                 nativeBuildInputs = old.nativeBuildInputs ++ [
96                   nix
97                   cacert
98                   nuget-to-json
99                   jq
100                 ];
101                 postPatch =
102                   old.postPatch or ""
103                   + ''
104                     xmlstarlet ed \
105                       --inplace \
106                       -s //Project -t elem -n Import \
107                       -i \$prev -t attr -n Project -v "${./record-downloaded-packages.proj}" \
108                       repo-projects/Directory.Build.targets
109                     # make nuget-client use the standard arcade package-cache dir, which
110                     # is where we scan for dependencies
111                     xmlstarlet ed \
112                       --inplace \
113                       -s //Project -t elem -n ItemGroup \
114                       -s \$prev -t elem -n EnvironmentVariables \
115                       -i \$prev -t attr -n Include -v 'NUGET_PACKAGES=$(ProjectDirectory)artifacts/sb/package-cache/' \
116                       repo-projects/nuget-client.proj
117                   '';
118                 buildFlags = [ "--online" ] ++ old.buildFlags;
119                 prebuiltPackages = null;
120               });
122               drv = builtins.unsafeDiscardOutputDependency pkg.drvPath;
123             in
124             writeShellScript "fetch-dotnet-sdk-deps" ''
125               ${nix}/bin/nix-shell --pure --run 'source /dev/stdin' "${drv}" << 'EOF'
126               set -e
128               tmp=$(mktemp -d)
129               trap 'rm -fr "$tmp"' EXIT
131               HOME=$tmp/.home
132               cd "$tmp"
134               phases="''${prePhases[*]:-} unpackPhase patchPhase ''${preConfigurePhases[*]:-} \
135                 configurePhase ''${preBuildPhases[*]:-} buildPhase checkPhase" \
136                 genericBuild
138               depsFiles=(./src/*/deps.json)
140               jq . $(nix-build ${toString ./combine-deps.nix} \
141                 --arg list "[ ''${depsFiles[*]} ]" \
142                 --argstr baseRid ${targetRid} \
143                 --arg otherRids '${lib.generators.toPretty { multiline = false; } otherRids}' \
144                 ) > deps.json
146               mv deps.json "${toString prebuiltPackages.sourceFile}"
147               EOF
148             '';
149         };
150       });
152 mkPackages { inherit baseName vmr; }