iamb: cleaning (#365160)
[NixPkgs.git] / pkgs / build-support / dotnet / build-dotnet-global-tool / default.nix
blob206aea51f2634553092b3e6cb36b0c60e7d89965
2   buildDotnetModule,
3   emptyDirectory,
4   fetchNupkg,
5   dotnet-sdk,
6   lib,
7 }:
9 fnOrAttrs:
11 buildDotnetModule (
12   finalAttrs:
13   (
14     {
15       pname,
16       version,
17       # Name of the nuget package to install, if different from pname
18       nugetName ? pname,
19       # Hash of the nuget package to install, will be given on first build
20       # nugetHash uses SRI hash and should be preferred
21       nugetHash ? "",
22       nugetSha256 ? "",
23       # Additional nuget deps needed by the tool package
24       nugetDeps ? (_: [ ]),
25       # Executables to wrap into `$out/bin`, same as in `buildDotnetModule`, but with
26       # a default of `pname` instead of null, to avoid auto-wrapping everything
27       executables ? pname,
28       # The dotnet runtime to use, dotnet tools need a full SDK to function
29       dotnet-runtime ? dotnet-sdk,
30       ...
31     }@args:
32     let
33       nupkg = fetchNupkg {
34         pname = nugetName;
35         inherit version;
36         sha256 = nugetSha256;
37         hash = nugetHash;
38         installable = true;
39       };
40     in
41     args
42     // {
43       inherit
44         pname
45         version
46         dotnet-runtime
47         executables
48         ;
50       src = emptyDirectory;
52       buildInputs = [ nupkg ];
54       dotnetGlobalTool = true;
56       useDotnetFromEnv = true;
58       dontBuild = true;
60       installPhase = ''
61         runHook preInstall
63         dotnet tool install --tool-path $out/lib/${pname} ${nugetName}
65         # remove files that contain nix store paths to temp nuget sources we made
66         find $out -name 'project.assets.json' -delete
67         find $out -name '.nupkg.metadata' -delete
69         runHook postInstall
70       '';
72       passthru = {
73         updateScript = ./update.sh;
74         nupkg = nupkg;
75       } // args.passthru or { };
76     }
77   )
78     (if lib.isFunction fnOrAttrs then fnOrAttrs finalAttrs else fnOrAttrs)