dotnet: add override mechanism for nuget packages (#339953)

This commit is contained in:
David McFarland 2024-09-07 09:00:01 -03:00 committed by GitHub
commit 13a975148a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
33 changed files with 268 additions and 227 deletions

View File

@ -93,7 +93,7 @@ The `dotnetCorePackages.sdk` contains both a runtime and the full sdk of a given
To package Dotnet applications, you can use `buildDotnetModule`. This has similar arguments to `stdenv.mkDerivation`, with the following additions: To package Dotnet applications, you can use `buildDotnetModule`. This has similar arguments to `stdenv.mkDerivation`, with the following additions:
* `projectFile` is used for specifying the dotnet project file, relative to the source root. These have `.sln` (entire solution) or `.csproj` (single project) file extensions. This can be a list of multiple projects as well. When omitted, will attempt to find and build the solution (`.sln`). If running into problems, make sure to set it to a file (or a list of files) with the `.csproj` extension - building applications as entire solutions is not fully supported by the .NET CLI. * `projectFile` is used for specifying the dotnet project file, relative to the source root. These have `.sln` (entire solution) or `.csproj` (single project) file extensions. This can be a list of multiple projects as well. When omitted, will attempt to find and build the solution (`.sln`). If running into problems, make sure to set it to a file (or a list of files) with the `.csproj` extension - building applications as entire solutions is not fully supported by the .NET CLI.
* `nugetDeps` takes either a path to a `deps.nix` file, or a derivation. The `deps.nix` file can be generated using the script attached to `passthru.fetch-deps`. If the argument is a derivation, it will be used directly and assume it has the same output as `mkNugetDeps`. * `nugetDeps` takes either a path to a `deps.nix` file, or a derivation. The `deps.nix` file can be generated using the script attached to `passthru.fetch-deps`. For compatibility, if the argument is a list of derivations, they will be added to `buildInputs`.
::: {.note} ::: {.note}
For more detail about managing the `deps.nix` file, see [Generating and updating NuGet dependencies](#generating-and-updating-nuget-dependencies) For more detail about managing the `deps.nix` file, see [Generating and updating NuGet dependencies](#generating-and-updating-nuget-dependencies)
::: :::

View File

@ -10,7 +10,7 @@
update scripts. update scripts.
*/ */
let let
pkgs = import ../.. {}; pkgs = import ../.. { config.allowAliases = false; };
inherit (pkgs) lib; inherit (pkgs) lib;

View File

@ -5,9 +5,6 @@
, dotnetCorePackages , dotnetCorePackages
, dbus , dbus
, fontconfig , fontconfig
, libICE
, libSM
, libX11
, portaudio , portaudio
}: }:
@ -32,10 +29,6 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
dbus dbus
fontconfig
libICE
libSM
libX11
portaudio portaudio
]; ];

View File

@ -2,22 +2,16 @@
, fetchFromGitHub , fetchFromGitHub
, buildDotnetModule , buildDotnetModule
, dotnetCorePackages , dotnetCorePackages
, libX11
, libICE
, libSM
, fontconfig
, libsecret , libsecret
, git , git
, git-credential-manager , git-credential-manager
, gnupg , gnupg
, pass , pass
, testers , testers
, withGuiSupport ? true
, withLibsecretSupport ? true , withLibsecretSupport ? true
, withGpgSupport ? true , withGpgSupport ? true
}: }:
assert withLibsecretSupport -> withGuiSupport;
buildDotnetModule rec { buildDotnetModule rec {
pname = "git-credential-manager"; pname = "git-credential-manager";
version = "2.5.1"; version = "2.5.1";
@ -36,9 +30,8 @@ buildDotnetModule rec {
dotnetInstallFlags = [ "--framework" "net8.0" ]; dotnetInstallFlags = [ "--framework" "net8.0" ];
executables = [ "git-credential-manager" ]; executables = [ "git-credential-manager" ];
runtimeDeps = [ fontconfig ] runtimeDeps =
++ lib.optionals withGuiSupport [ libX11 libICE libSM ] lib.optional withLibsecretSupport libsecret;
++ lib.optional withLibsecretSupport libsecret;
makeWrapperArgs = [ makeWrapperArgs = [
"--prefix PATH : ${lib.makeBinPath ([ git ] ++ lib.optionals withGpgSupport [ gnupg pass ])}" "--prefix PATH : ${lib.makeBinPath ([ git ] ++ lib.optionals withGpgSupport [ gnupg pass ])}"
]; ];

View File

@ -1,4 +1,4 @@
{ buildDotnetModule, emptyDirectory, mkNugetDeps, dotnet-sdk }: { buildDotnetModule, emptyDirectory, fetchNupkg, dotnet-sdk }:
{ pname { pname
, version , version
@ -23,13 +23,15 @@ buildDotnetModule (args // {
src = emptyDirectory; src = emptyDirectory;
nugetDeps = mkNugetDeps { buildInputs = [
name = pname; (fetchNupkg {
nugetDeps = { fetchNuGet }: [ pname = nugetName;
(fetchNuGet { pname = nugetName; inherit version; sha256 = nugetSha256; hash = nugetHash; }) inherit version;
] ++ (nugetDeps fetchNuGet); sha256 = nugetSha256;
hash = nugetHash;
installable = true; installable = true;
}; })
];
dotnetGlobalTool = true; dotnetGlobalTool = true;

View File

@ -7,7 +7,7 @@
writeShellScript, writeShellScript,
makeWrapper, makeWrapper,
dotnetCorePackages, dotnetCorePackages,
mkNugetDeps, fetchNupkg,
nuget-to-nix, nuget-to-nix,
cacert, cacert,
unzip, unzip,
@ -18,10 +18,7 @@ let
transformArgs = transformArgs =
finalAttrs: finalAttrs:
{ {
name ? "${args.pname}-${args.version}",
pname ? name,
enableParallelBuilding ? true, enableParallelBuilding ? true,
doCheck ? false,
# Flags to pass to `makeWrapper`. This is done to avoid double wrapping. # Flags to pass to `makeWrapper`. This is done to avoid double wrapping.
makeWrapperArgs ? [ ], makeWrapperArgs ? [ ],
@ -115,22 +112,36 @@ let
_nugetDeps = _nugetDeps =
if (nugetDeps != null) then if (nugetDeps != null) then
if lib.isDerivation nugetDeps then if lib.isDerivation nugetDeps then
[ nugetDeps ]
else if lib.isList nugetDeps then
nugetDeps nugetDeps
else else
mkNugetDeps { assert (lib.isPath nugetDeps);
inherit name; callPackage nugetDeps { fetchNuGet = fetchNupkg; }
sourceFile = nugetDeps;
}
else else
throw "Defining the `nugetDeps` attribute is required, as to lock the NuGet dependencies. This file can be generated by running the `passthru.fetch-deps` script."; [ ];
nugetDepsFile = _nugetDeps.sourceFile; nugetDepsFile = if lib.isPath nugetDeps then nugetDeps else null;
inherit (dotnetCorePackages) systemToDotnetRid; inherit (dotnetCorePackages) systemToDotnetRid;
in in
# Not all args need to be passed through to mkDerivation # Not all args need to be passed through to mkDerivation
# TODO: We should probably filter out even more attrs # TODO: We should probably filter out even more attrs
removeAttrs args [ "nugetDeps" ] removeAttrs args [
"nugetDeps"
"installPath"
"executables"
"projectFile"
"projectReferences"
"runtimeDeps"
"runtimeId"
"disabledTests"
"testProjectFile"
"buildType"
"selfContainedBuild"
"useDotnet"
"useAppHost"
]
// { // {
dotnetInstallPath = installPath; dotnetInstallPath = installPath;
dotnetExecutables = executables; dotnetExecutables = executables;
@ -145,9 +156,18 @@ let
dotnetRuntimeDeps = map lib.getLib runtimeDeps; dotnetRuntimeDeps = map lib.getLib runtimeDeps;
dotnetSelfContainedBuild = selfContainedBuild; dotnetSelfContainedBuild = selfContainedBuild;
dotnetUseAppHost = useAppHost; dotnetUseAppHost = useAppHost;
inherit useDotnetFromEnv;
inherit enableParallelBuilding; inherit
enableParallelBuilding
dotnetRestoreFlags
dotnetBuildFlags
dotnetTestFlags
dotnetInstallFlags
dotnetPackFlags
dotnetFlags
packNupkg
useDotnetFromEnv
;
nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [ nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
dotnetConfigureHook dotnetConfigureHook
@ -163,13 +183,7 @@ let
yq yq
]; ];
buildInputs = buildInputs = args.buildInputs or [ ] ++ [ dotnet-sdk.packages ] ++ _nugetDeps ++ projectReferences;
args.buildInputs or [ ]
++ [
dotnet-sdk.packages
_nugetDeps
]
++ projectReferences;
# Parse the version attr into a format acceptable for the Version msbuild property # Parse the version attr into a format acceptable for the Version msbuild property
# The actual version attr is saved in InformationalVersion, which accepts an arbitrary string # The actual version attr is saved in InformationalVersion, which accepts an arbitrary string
@ -213,13 +227,13 @@ let
{ {
nugetDeps = _nugetDeps; nugetDeps = _nugetDeps;
} }
// lib.optionalAttrs (!lib.isDerivation nugetDeps) { // lib.optionalAttrs (nugetDeps == null || lib.isPath nugetDeps) {
fetch-deps = fetch-deps =
let let
pkg = finalAttrs.finalPackage.overrideAttrs ( pkg = finalAttrs.finalPackage.overrideAttrs (
old: old:
{ {
buildInputs = lib.remove _nugetDeps old.buildInputs; buildInputs = lib.subtractLists _nugetDeps old.buildInputs;
keepNugetConfig = true; keepNugetConfig = true;
} }
// lib.optionalAttrs (runtimeId == null) { // lib.optionalAttrs (runtimeId == null) {
@ -238,15 +252,15 @@ let
# Note that toString is necessary here as it results in the path at # Note that toString is necessary here as it results in the path at
# eval time (i.e. to the file in your local Nixpkgs checkout) rather # eval time (i.e. to the file in your local Nixpkgs checkout) rather
# than the Nix store path of the path after it's been imported. # than the Nix store path of the path after it's been imported.
if lib.isPath nugetDepsFile && !lib.hasPrefix "${builtins.storeDir}/" (toString nugetDepsFile) then if lib.isPath nugetDeps && !lib.isStorePath nugetDepsFile then
toString nugetDepsFile toString nugetDepsFile
else else
''$(mktemp -t "${pname}-deps-XXXXXX.nix")''; ''$(mktemp -t "${finalAttrs.pname ? finalAttrs.finalPackage.name}-deps-XXXXXX.nix")'';
nugetToNix = (nuget-to-nix.override { inherit dotnet-sdk; }); nugetToNix = (nuget-to-nix.override { inherit dotnet-sdk; });
}; };
in in
writeShellScript "${name}-fetch-deps" '' writeShellScript "${finalAttrs.finalPackage.name}-fetch-deps" ''
NIX_BUILD_SHELL="${runtimeShell}" exec ${nix}/bin/nix-shell \ NIX_BUILD_SHELL="${runtimeShell}" exec ${nix}/bin/nix-shell \
--pure --run 'source "${innerScript}"' "${drv}" --pure --run 'source "${innerScript}"' "${drv}"
''; '';

View File

@ -4,6 +4,8 @@ tmp=$(mktemp -d)
trap 'chmod -R +w "$tmp" && rm -fr "$tmp"' EXIT trap 'chmod -R +w "$tmp" && rm -fr "$tmp"' EXIT
HOME=$tmp/.home HOME=$tmp/.home
export TMPDIR="$tmp/.tmp"
mkdir "$HOME" "$TMPDIR"
cd "$tmp" cd "$tmp"
phases=" phases="

View File

@ -50,7 +50,7 @@ dotnetConfigureHook() {
fi fi
done done
if [[ -f .config/dotnet-tools.json || -f .dotnet-tools.json ]]; then if [[ -f .config/dotnet-tools.json || -f dotnet-tools.json ]]; then
dotnet tool restore dotnet tool restore
fi fi

View File

@ -0,0 +1,80 @@
{
symlinkJoin,
fetchurl,
stdenvNoCC,
lib,
unzip,
patchNupkgs,
nugetPackageHook,
callPackage,
overrides ? callPackage ./overrides.nix { },
}:
{
pname,
version,
sha256 ? "",
hash ? "",
url ? "https://www.nuget.org/api/v2/package/${pname}/${version}",
installable ? false,
}:
let
package = stdenvNoCC.mkDerivation rec {
inherit pname version;
src = fetchurl {
name = "${pname}.${version}.nupkg";
# There is no need to verify whether both sha256 and hash are
# valid here, because nuget-to-nix does not generate a deps.nix
# containing both.
inherit
url
sha256
hash
version
;
};
nativeBuildInputs = [
unzip
patchNupkgs
nugetPackageHook
];
unpackPhase = ''
runHook preUnpack
unzip -nqd source $src
chmod -R +rw source
cd source
runHook postUnpack
'';
prePatch = ''
shopt -s nullglob
local dir
for dir in tools runtimes/*/native; do
[[ ! -d "$dir" ]] || chmod -R +x "$dir"
done
rm -rf .signature.p7s
'';
installPhase = ''
runHook preInstall
dir=$out/share/nuget/packages/${lib.toLower pname}/${lib.toLower version}
mkdir -p $dir
cp -r . $dir
echo {} > "$dir"/.nupkg.metadata
runHook postInstall
'';
preFixup = ''
patch-nupkgs $out/share/nuget/packages
'';
createInstallableNugetSource = installable;
};
in
overrides.${pname} or lib.id package

View File

@ -0,0 +1,55 @@
{
autoPatchelfHook,
dotnetCorePackages,
fontconfig,
lib,
libICE,
libSM,
libX11,
stdenv,
writeText,
}:
{
# e.g.
# "Package.Id" =
# package:
# package.overrideAttrs (old: {
# buildInputs = old.buildInputs or [ ] ++ [ hello ];
# });
"Avalonia.X11" =
package:
package.overrideAttrs (
old:
lib.optionalAttrs (!stdenv.isDarwin) {
setupHook = writeText "setupHook.sh" ''
prependToVar dotnetRuntimeDeps \
"${lib.getLib libICE}" \
"${lib.getLib libSM}" \
"${lib.getLib libX11}"
'';
}
);
"SkiaSharp.NativeAssets.Linux" =
package:
package.overrideAttrs (
old:
lib.optionalAttrs stdenv.isLinux {
nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [ autoPatchelfHook ];
buildInputs = old.buildInputs or [ ] ++ [ fontconfig ];
preInstall =
old.preInstall or ""
+ ''
cd runtimes
for platform in *; do
[[ $platform == "${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" ]] ||
rm -r "$platform"
done
cd - >/dev/null
'';
}
);
}

View File

@ -5,6 +5,7 @@
, unzip , unzip
, patchNupkgs , patchNupkgs
, nugetPackageHook , nugetPackageHook
, fetchNupkg
}: }:
lib.makeOverridable( lib.makeOverridable(
{ name { name
@ -15,56 +16,7 @@ lib.makeOverridable(
(symlinkJoin { (symlinkJoin {
name = "${name}-nuget-deps"; name = "${name}-nuget-deps";
paths = nugetDeps { paths = nugetDeps {
fetchNuGet = fetchNuGet = args: fetchNupkg (args // { inherit installable; });
{ pname
, version
, sha256 ? ""
, hash ? ""
, url ? "https://www.nuget.org/api/v2/package/${pname}/${version}" }:
stdenvNoCC.mkDerivation rec {
inherit pname version;
src = fetchurl {
name = "${pname}.${version}.nupkg";
# There is no need to verify whether both sha256 and hash are
# valid here, because nuget-to-nix does not generate a deps.nix
# containing both.
inherit url sha256 hash version;
};
nativeBuildInputs = [
unzip
patchNupkgs
nugetPackageHook
];
unpackPhase = ''
unzip -nq $src
chmod -R +rw .
'';
prePatch = ''
shopt -s nullglob
local dir
for dir in tools runtimes/*/native; do
[[ ! -d "$dir" ]] || chmod -R +x "$dir"
done
rm -rf .signature.p7s
'';
installPhase = ''
dir=$out/share/nuget/packages/${lib.toLower pname}/${lib.toLower version}
mkdir -p $dir
cp -r . $dir
echo {} > "$dir"/.nupkg.metadata
'';
preFixup = ''
patch-nupkgs $out/share/nuget/packages
'';
createInstallableNugetSource = installable;
};
}; };
}) // { }) // {
inherit sourceFile; inherit sourceFile;

View File

@ -5,11 +5,6 @@
dotnetCorePackages, dotnetCorePackages,
libX11,
libICE,
libSM,
fontconfig,
xdg-utils, xdg-utils,
}: }:
@ -38,12 +33,6 @@ buildDotnetModule rec {
nugetDeps = ./deps.nix; nugetDeps = ./deps.nix;
runtimeDeps = [
libX11
libICE
libSM
fontconfig
];
# Required for OneClick # Required for OneClick
makeWrapperArgs = [ makeWrapperArgs = [

View File

@ -6,9 +6,6 @@
dotnetCorePackages, dotnetCorePackages,
xz, xz,
pcre, pcre,
libX11,
libICE,
libSM,
autoPatchelfHook, autoPatchelfHook,
bintools, bintools,
fixDarwinDylibNames, fixDarwinDylibNames,
@ -77,13 +74,9 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
xz xz
pcre pcre
libX11
libICE
libSM
libgdiplus libgdiplus
glib glib
libXrandr libXrandr
fontconfig
] ++ lib.optionals stdenv.hostPlatform.isLinux [ blender ]; ] ++ lib.optionals stdenv.hostPlatform.isLinux [ blender ];
# there is no "*.so.3" or "*.so.5" in nixpkgs. So ignore the warning # there is no "*.so.3" or "*.so.5" in nixpkgs. So ignore the warning

View File

@ -1,10 +1,8 @@
{ {
buildDotnetModule buildDotnetModule
, fetchFromGitHub , fetchFromGitHub
, fontconfig
, lib , lib
, openal , openal
, xorg
}: }:
buildDotnetModule rec { buildDotnetModule rec {
@ -23,7 +21,7 @@ buildDotnetModule rec {
nugetDeps = ./deps.nix; nugetDeps = ./deps.nix;
executables = [ "Knossos.NET" ]; executables = [ "Knossos.NET" ];
runtimeDeps = [ fontconfig openal xorg.libX11 xorg.libICE xorg.libSM ]; runtimeDeps = [ openal ];
meta = with lib; { meta = with lib; {
homepage = "https://github.com/KnossosNET/Knossos.NET"; homepage = "https://github.com/KnossosNET/Knossos.NET";

View File

@ -6,14 +6,6 @@
dotnetCorePackages, dotnetCorePackages,
wrapGAppsHook3, wrapGAppsHook3,
libX11,
libICE,
libSM,
libXi,
libXcursor,
libXext,
libXrandr,
fontconfig,
glew, glew,
gtk3, gtk3,
}: }:
@ -48,14 +40,6 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
# For Avalonia UI # For Avalonia UI
libX11
libICE
libSM
libXi
libXcursor
libXext
libXrandr
fontconfig
glew glew
# For file dialogs # For file dialogs
gtk3 gtk3

View File

@ -5,11 +5,7 @@
dotnetCorePackages, dotnetCorePackages,
zlib, zlib,
icu, icu,
fontconfig,
openssl, openssl,
libX11,
libICE,
libSM,
icoutils, icoutils,
copyDesktopItems, copyDesktopItems,
makeDesktopItem, makeDesktopItem,
@ -36,11 +32,7 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
zlib zlib
icu icu
fontconfig
openssl openssl
libX11
libICE
libSM
]; ];
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -7,9 +7,6 @@
fetchFromGitHub, fetchFromGitHub,
fontconfig, fontconfig,
lib, lib,
libICE,
libSM,
libX11,
runCommand, runCommand,
pname ? "nexusmods-app", pname ? "nexusmods-app",
}: }:
@ -62,13 +59,6 @@ buildDotnetModule (finalAttrs: {
runtimeInputs = [ desktop-file-utils ]; runtimeInputs = [ desktop-file-utils ];
runtimeDeps = [
fontconfig
libICE
libSM
libX11
];
executables = [ "NexusMods.App" ]; executables = [ "NexusMods.App" ];
doCheck = true; doCheck = true;

View File

@ -4,11 +4,6 @@
, copyDesktopItems , copyDesktopItems
, makeDesktopItem , makeDesktopItem
, lib , lib
, fontconfig
, libX11
, libXcursor
, libICE
, libSM
, runCommandLocal , runCommandLocal
}: }:
let let
@ -43,14 +38,6 @@ buildDotnetModule {
copyDesktopItems copyDesktopItems
]; ];
runtimeDeps = [
fontconfig
libX11
libICE
libXcursor
libSM
];
projectFile = [ projectFile = [
"RetroSpyX/RetroSpyX.csproj" "RetroSpyX/RetroSpyX.csproj"
"GBPemuX/GBPemuX.csproj" "GBPemuX/GBPemuX.csproj"

View File

@ -2,6 +2,7 @@
# Please dont edit it manually, your changes might get overwritten! # Please dont edit it manually, your changes might get overwritten!
{ fetchNuGet }: [ { fetchNuGet }: [
(fetchNuGet { pname = "dotnet-format"; version = "7.0.360304"; hash = "sha256-TuhZIhearocl702hLzGJCcRd8+RWoI4tDY02Bf6Lus8="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/dotnet-format/7.0.360304/dotnet-format.7.0.360304.nupkg"; })
(fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; hash = "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/humanizer.core/2.14.1/humanizer.core.2.14.1.nupkg"; }) (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; hash = "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/humanizer.core/2.14.1/humanizer.core.2.14.1.nupkg"; })
(fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "8.1.1.7464"; hash = "sha256-71/e9zuQIfqRXOiWxZkUFW/tMAj63nE8tg/sR7bGzuM="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/icsharpcode.decompiler/8.1.1.7464/icsharpcode.decompiler.8.1.1.7464.nupkg"; }) (fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "8.1.1.7464"; hash = "sha256-71/e9zuQIfqRXOiWxZkUFW/tMAj63nE8tg/sR7bGzuM="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/icsharpcode.decompiler/8.1.1.7464/icsharpcode.decompiler.8.1.1.7464.nupkg"; })
(fetchNuGet { pname = "MessagePack"; version = "2.5.108"; hash = "sha256-+vMXyEbfutY5WOFuFnNF24uLcKJTTdntVrVlSJH4yjI="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/messagepack/2.5.108/messagepack.2.5.108.nupkg"; }) (fetchNuGet { pname = "MessagePack"; version = "2.5.108"; hash = "sha256-+vMXyEbfutY5WOFuFnNF24uLcKJTTdntVrVlSJH4yjI="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/messagepack/2.5.108/messagepack.2.5.108.nupkg"; })
@ -116,6 +117,7 @@
(fetchNuGet { pname = "NuGet.ProjectModel"; version = "6.8.0-rc.112"; hash = "sha256-geQh1fSRTp2FTzeilFL8gxFFq7q8u7YaakShPKiTwns="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.projectmodel/6.8.0-rc.112/nuget.projectmodel.6.8.0-rc.112.nupkg"; }) (fetchNuGet { pname = "NuGet.ProjectModel"; version = "6.8.0-rc.112"; hash = "sha256-geQh1fSRTp2FTzeilFL8gxFFq7q8u7YaakShPKiTwns="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.projectmodel/6.8.0-rc.112/nuget.projectmodel.6.8.0-rc.112.nupkg"; })
(fetchNuGet { pname = "NuGet.Protocol"; version = "6.8.0-rc.112"; hash = "sha256-6r/MJCo2ngibSAfNdH+xmeNUl38EPjQkaewKsTJpfvU="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.protocol/6.8.0-rc.112/nuget.protocol.6.8.0-rc.112.nupkg"; }) (fetchNuGet { pname = "NuGet.Protocol"; version = "6.8.0-rc.112"; hash = "sha256-6r/MJCo2ngibSAfNdH+xmeNUl38EPjQkaewKsTJpfvU="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.protocol/6.8.0-rc.112/nuget.protocol.6.8.0-rc.112.nupkg"; })
(fetchNuGet { pname = "NuGet.Versioning"; version = "6.8.0-rc.112"; hash = "sha256-BzAWS5wpGnNj0gU33sfWao7BELGjrQBT4xj3EC7qRRE="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.versioning/6.8.0-rc.112/nuget.versioning.6.8.0-rc.112.nupkg"; }) (fetchNuGet { pname = "NuGet.Versioning"; version = "6.8.0-rc.112"; hash = "sha256-BzAWS5wpGnNj0gU33sfWao7BELGjrQBT4xj3EC7qRRE="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/nuget.versioning/6.8.0-rc.112/nuget.versioning.6.8.0-rc.112.nupkg"; })
(fetchNuGet { pname = "PowerShell"; version = "7.0.0"; hash = "sha256-ioasr71UIhDmeZ2Etw52lQ7QsioEd1pnbpVlEeCyUI4="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/powershell/7.0.0/powershell.7.0.0.nupkg"; })
(fetchNuGet { pname = "RichCodeNav.EnvVarDump"; version = "0.1.1643-alpha"; hash = "sha256-bwND+Na9iEnkEdeL1elY34+m4/F4BYATBHv/2BEw4d4="; url = "https://pkgs.dev.azure.com/azure-public/3ccf6661-f8ce-4e8a-bb2e-eff943ddd3c7/_packaging/58ca65bb-e6c1-4210-88ac-fa55c1cd7877/nuget/v3/flat2/richcodenav.envvardump/0.1.1643-alpha/richcodenav.envvardump.0.1.1643-alpha.nupkg"; }) (fetchNuGet { pname = "RichCodeNav.EnvVarDump"; version = "0.1.1643-alpha"; hash = "sha256-bwND+Na9iEnkEdeL1elY34+m4/F4BYATBHv/2BEw4d4="; url = "https://pkgs.dev.azure.com/azure-public/3ccf6661-f8ce-4e8a-bb2e-eff943ddd3c7/_packaging/58ca65bb-e6c1-4210-88ac-fa55c1cd7877/nuget/v3/flat2/richcodenav.envvardump/0.1.1643-alpha/richcodenav.envvardump.0.1.1643-alpha.nupkg"; })
(fetchNuGet { pname = "Roslyn.Diagnostics.Analyzers"; version = "3.11.0-beta1.24081.1"; hash = "sha256-wIOhKwvYetwytnuNX0uNC5oyBDU7xAhLqzTvyuGDVMM="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/a54510f9-4b2c-4e69-b96a-6096683aaa1f/nuget/v3/flat2/roslyn.diagnostics.analyzers/3.11.0-beta1.24081.1/roslyn.diagnostics.analyzers.3.11.0-beta1.24081.1.nupkg"; }) (fetchNuGet { pname = "Roslyn.Diagnostics.Analyzers"; version = "3.11.0-beta1.24081.1"; hash = "sha256-wIOhKwvYetwytnuNX0uNC5oyBDU7xAhLqzTvyuGDVMM="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/a54510f9-4b2c-4e69-b96a-6096683aaa1f/nuget/v3/flat2/roslyn.diagnostics.analyzers/3.11.0-beta1.24081.1/roslyn.diagnostics.analyzers.3.11.0-beta1.24081.1.nupkg"; })
(fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; hash = "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg"; }) (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; hash = "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8="; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/45bacae2-5efb-47c8-91e5-8ec20c22b4f8/nuget/v3/flat2/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg"; })

View File

@ -33,7 +33,7 @@ buildDotnetModule rec {
jq '.sdk.rollForward = "latestMinor"' < global.json > global.json.tmp jq '.sdk.rollForward = "latestMinor"' < global.json > global.json.tmp
mv global.json.tmp global.json mv global.json.tmp global.json
substituteInPlace $projectFile \ substituteInPlace $dotnetProjectFiles \
--replace-fail \ --replace-fail \
'>win-x64;win-arm64;linux-x64;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>' \ '>win-x64;win-arm64;linux-x64;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>' \
'>linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>' '>linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>'
@ -58,7 +58,7 @@ buildDotnetModule rec {
'' ''
runHook preInstall runHook preInstall
env dotnet publish $projectFile \ env dotnet publish $dotnetProjectFiles \
-p:ContinuousIntegrationBuild=true \ -p:ContinuousIntegrationBuild=true \
-p:Deterministic=true \ -p:Deterministic=true \
-p:InformationalVersion=$version \ -p:InformationalVersion=$version \

View File

@ -10,13 +10,6 @@
, sndio , sndio
, pulseaudio , pulseaudio
, vulkan-loader , vulkan-loader
, libICE
, libSM
, libXi
, libXcursor
, libXext
, libXrandr
, fontconfig
, glew , glew
, libGL , libGL
, udev , udev
@ -55,13 +48,6 @@ buildDotnetModule rec {
udev udev
# Avalonia UI # Avalonia UI
libICE
libSM
libXi
libXcursor
libXext
libXrandr
fontconfig
glew glew
# Headless executable # Headless executable

View File

@ -51,6 +51,13 @@ makeScopeWithSplicing' {
patchNupkgs = callPackage ./patch-nupkgs.nix {}; patchNupkgs = callPackage ./patch-nupkgs.nix {};
nugetPackageHook = callPackage ./nuget-package-hook.nix {}; nugetPackageHook = callPackage ./nuget-package-hook.nix {};
buildDotnetModule = callPackage ../../../build-support/dotnet/build-dotnet-module { };
buildDotnetGlobalTool = callPackage ../../../build-support/dotnet/build-dotnet-global-tool { };
mkNugetSource = callPackage ../../../build-support/dotnet/make-nuget-source { };
mkNugetDeps = callPackage ../../../build-support/dotnet/make-nuget-deps { };
fetchNupkg = callPackage ../../../build-support/dotnet/fetch-nupkg { };
dotnet_8 = recurseIntoAttrs (callPackage ./8 { bootstrapSdk = dotnet_8_0.sdk_8_0_1xx; }); dotnet_8 = recurseIntoAttrs (callPackage ./8 { bootstrapSdk = dotnet_8_0.sdk_8_0_1xx; });
dotnet_9 = recurseIntoAttrs (callPackage ./9 {}); dotnet_9 = recurseIntoAttrs (callPackage ./9 {});
} // lib.optionalAttrs config.allowAliases { } // lib.optionalAttrs config.allowAliases {

View File

@ -16,6 +16,7 @@ _linkPackages() {
local -r src="$1" local -r src="$1"
local -r dest="$2" local -r dest="$2"
local dir local dir
local x
for x in "$src"/*/*; do for x in "$src"/*/*; do
dir=$dest/$(basename "$(dirname "$x")") dir=$dest/$(basename "$(dirname "$x")")
@ -27,8 +28,9 @@ _linkPackages() {
createNugetDirs() { createNugetDirs() {
nugetTemp=$PWD/.nuget-temp nugetTemp=$PWD/.nuget-temp
export NUGET_PACKAGES=$nugetTemp/packages export NUGET_PACKAGES=$nugetTemp/packages
export NUGET_FALLBACK_PACKAGES=$nugetTemp/fallback
nugetSource=$nugetTemp/source nugetSource=$nugetTemp/source
mkdir -p "$NUGET_PACKAGES" "$nugetSource" mkdir -p "$NUGET_PACKAGES" "$NUGET_FALLBACK_PACKAGES" "$nugetSource"
dotnet new nugetconfig dotnet new nugetconfig
if [[ -z ${keepNugetConfig-} ]]; then if [[ -z ${keepNugetConfig-} ]]; then
@ -39,9 +41,11 @@ createNugetDirs() {
} }
configureNuget() { configureNuget() {
local x
for x in "${!_nugetInputs[@]}"; do for x in "${!_nugetInputs[@]}"; do
if [[ -d $x/share/nuget/packages ]]; then if [[ -d $x/share/nuget/packages ]]; then
addToSearchPathWithCustomDelimiter ";" NUGET_FALLBACK_PACKAGES "$x/share/nuget/packages" _linkPackages "$x/share/nuget/packages" "$NUGET_FALLBACK_PACKAGES"
fi fi
if [[ -d $x/share/nuget/source ]]; then if [[ -d $x/share/nuget/source ]]; then
@ -60,7 +64,7 @@ configureNuget() {
done done
fi fi
if [[ -f paket.dependencies ]]; then if [[ -z ${keepNugetConfig-} && -f paket.dependencies ]]; then
sed -i "s:source .*:source $nugetSource:" paket.dependencies sed -i "s:source .*:source $nugetSource:" paket.dependencies
sed -i "s:remote\:.*:remote\: $nugetSource:" paket.lock sed -i "s:remote\:.*:remote\: $nugetSource:" paket.lock

View File

@ -65,6 +65,7 @@ in {
read version read version
mkdir -p "$packages"/share/nuget/packages/"$id" mkdir -p "$packages"/share/nuget/packages/"$id"
cp -r "$package" "$packages"/share/nuget/packages/"$id"/"$version" cp -r "$package" "$packages"/share/nuget/packages/"$id"/"$version"
echo {} > "$packages"/share/nuget/packages/"$id"/"$version"/.nupkg.metadata
) )
fi fi
done done

View File

@ -38,8 +38,7 @@ buildPythonPackage {
buildInputs = [ buildInputs = [
dotnetCorePackages.sdk_6_0.packages dotnetCorePackages.sdk_6_0.packages
dotnet-build.nugetDeps ] ++ dotnet-build.nugetDeps;
];
nativeBuildInputs = [ nativeBuildInputs = [
setuptools setuptools

View File

@ -37,7 +37,7 @@ buildPythonPackage {
--replace 'dynamic = ["version"]' 'version = "${version}"' --replace 'dynamic = ["version"]' 'version = "${version}"'
''; '';
buildInputs = [ dotnet-build.nugetDeps ]; buildInputs = dotnet-build.nugetDeps;
nativeBuildInputs = [ nativeBuildInputs = [
setuptools setuptools

View File

@ -6,14 +6,6 @@
, iconConvTools , iconConvTools
, copyDesktopItems , copyDesktopItems
, makeDesktopItem , makeDesktopItem
, libX11
, libICE
, libSM
, libXi
, libXcursor
, libXext
, libXrandr
, fontconfig
, glew , glew
, SDL2 , SDL2
, glfw , glfw
@ -95,14 +87,6 @@ buildDotnetModule rec {
gdk-pixbuf gdk-pixbuf
# Avalonia UI dependencies. # Avalonia UI dependencies.
libX11
libICE
libSM
libXi
libXcursor
libXext
libXrandr
fontconfig
glew glew
]; ];

View File

@ -5,4 +5,5 @@
use-dotnet-from-env = lib.recurseIntoAttrs (callPackage ./use-dotnet-from-env { }); use-dotnet-from-env = lib.recurseIntoAttrs (callPackage ./use-dotnet-from-env { });
structured-attrs = lib.recurseIntoAttrs (callPackage ./structured-attrs { }); structured-attrs = lib.recurseIntoAttrs (callPackage ./structured-attrs { });
final-attrs = lib.recurseIntoAttrs (callPackage ./final-attrs { }); final-attrs = lib.recurseIntoAttrs (callPackage ./final-attrs { });
nuget-deps = lib.recurseIntoAttrs (callPackage ./nuget-deps { });
} }

View File

@ -0,0 +1,44 @@
# Tests that `nugetDeps` in buildDotnetModule can handle various types.
{
lib,
dotnet-sdk,
buildPackages, # buildDotnetModule
runCommand,
}:
let
inherit (lib)
mapAttrs
;
inherit (buildPackages)
emptyDirectory
buildDotnetModule
;
in
mapAttrs
(
name: nugetDeps:
buildDotnetModule {
name = "nuget-deps-${name}";
unpackPhase = ''
runHook preUnpack
mkdir test
cd test
dotnet new console -o .
ls -l
runHook postUnpack
'';
inherit nugetDeps;
}
)
{
"null" = null;
"file" = ./nuget-deps.nix;
"derivation" = emptyDirectory;
"list" = [ emptyDirectory ];
}

View File

@ -0,0 +1,6 @@
# This file was automatically generated by passthru.fetch-deps.
# Please dont edit it manually, your changes might get overwritten!
{ fetchNuGet }:
[
]

View File

@ -3,10 +3,6 @@
, fetchFromGitHub , fetchFromGitHub
, glibc , glibc
, zlib , zlib
, libX11
, libICE
, libSM
, fontconfig
, gtk3 , gtk3
, copyDesktopItems , copyDesktopItems
, icoutils , icoutils
@ -32,10 +28,6 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
glibc glibc
zlib zlib
libX11
libICE
libSM
fontconfig
gtk3 gtk3
]; ];

View File

@ -4,8 +4,6 @@
, dotnet-runtime_8 , dotnet-runtime_8
, buildDotnetModule , buildDotnetModule
, fetchFromGitHub , fetchFromGitHub
, fontconfig
, xorg
, libglvnd , libglvnd
, makeDesktopItem , makeDesktopItem
, copyDesktopItems , copyDesktopItems
@ -34,7 +32,7 @@ buildDotnetModule rec {
copyDesktopItems copyDesktopItems
]; ];
buildInputs = [ stdenv.cc.cc.lib fontconfig ]; buildInputs = [ stdenv.cc.cc.lib ];
postInstall = '' postInstall = ''
rm -rf $out/lib/${lib.toLower pname}/runtimes/{*musl*,win*} rm -rf $out/lib/${lib.toLower pname}/runtimes/{*musl*,win*}
@ -42,9 +40,6 @@ buildDotnetModule rec {
runtimeDeps = [ runtimeDeps = [
libglvnd libglvnd
xorg.libSM
xorg.libICE
xorg.libX11
]; ];
desktopItems = makeDesktopItem { desktopItems = makeDesktopItem {

View File

@ -875,12 +875,8 @@ with pkgs;
dotnet-runtime = dotnetCorePackages.runtime_6_0; dotnet-runtime = dotnetCorePackages.runtime_6_0;
dotnet-aspnetcore = dotnetCorePackages.aspnetcore_6_0; dotnet-aspnetcore = dotnetCorePackages.aspnetcore_6_0;
buildDotnetModule = callPackage ../build-support/dotnet/build-dotnet-module { };
nuget-to-nix = callPackage ../build-support/dotnet/nuget-to-nix { }; nuget-to-nix = callPackage ../build-support/dotnet/nuget-to-nix { };
mkNugetSource = callPackage ../build-support/dotnet/make-nuget-source { }; inherit (dotnetCorePackages) buildDotnetModule buildDotnetGlobalTool mkNugetSource mkNugetDeps;
mkNugetDeps = (newScope dotnetCorePackages) ../build-support/dotnet/make-nuget-deps { };
buildDotnetGlobalTool = callPackage ../build-support/dotnet/build-dotnet-global-tool { };
fsautocomplete = callPackage ../development/tools/fsautocomplete { }; fsautocomplete = callPackage ../development/tools/fsautocomplete { };