From 13bd1003004f8a0832229cb1f33a7cac3331f54f Mon Sep 17 00:00:00 2001 From: David McFarland Date: Mon, 26 Aug 2024 00:59:52 -0300 Subject: [PATCH 01/19] update-dotnet-lockfiles.nix: disable aliases --- maintainers/scripts/update-dotnet-lockfiles.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintainers/scripts/update-dotnet-lockfiles.nix b/maintainers/scripts/update-dotnet-lockfiles.nix index 22ceff1ffa996..a79b0b074c8d1 100644 --- a/maintainers/scripts/update-dotnet-lockfiles.nix +++ b/maintainers/scripts/update-dotnet-lockfiles.nix @@ -10,7 +10,7 @@ update scripts. */ let - pkgs = import ../.. {}; + pkgs = import ../.. { config.allowAliases = false; }; inherit (pkgs) lib; From 9a14832d2e4a723ba53258bb8df04b5c81360065 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 5 Sep 2024 00:51:14 -0300 Subject: [PATCH 02/19] dotnet: fix fetch-deps in paket projects --- pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh index cac55cb560175..5d657eaf31228 100644 --- a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh +++ b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh @@ -60,7 +60,7 @@ configureNuget() { done fi - if [[ -f paket.dependencies ]]; then + if [[ -z ${keepNugetConfig-} && -f paket.dependencies ]]; then sed -i "s:source .*:source $nugetSource:" paket.dependencies sed -i "s:remote\:.*:remote\: $nugetSource:" paket.lock From e530139caa10efda9d23217ada93e8488c43181b Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 5 Sep 2024 12:57:57 -0300 Subject: [PATCH 03/19] buildDotnetModule: fix tool manifest detection --- .../dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh | 2 +- pkgs/by-name/ro/roslyn-ls/deps.nix | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh index 1e421cb18ce10..37c815e004e30 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh +++ b/pkgs/build-support/dotnet/build-dotnet-module/hooks/dotnet-configure-hook.sh @@ -50,7 +50,7 @@ dotnetConfigureHook() { fi 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 fi diff --git a/pkgs/by-name/ro/roslyn-ls/deps.nix b/pkgs/by-name/ro/roslyn-ls/deps.nix index 27aa7a75d2685..a16363944efd8 100644 --- a/pkgs/by-name/ro/roslyn-ls/deps.nix +++ b/pkgs/by-name/ro/roslyn-ls/deps.nix @@ -2,6 +2,7 @@ # Please dont edit it manually, your changes might get overwritten! { 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 = "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"; }) @@ -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.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 = "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 = "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"; }) From e49642596f20f2730d4ad136d96f8bd3cbc080e8 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sat, 24 Aug 2024 14:35:27 -0300 Subject: [PATCH 04/19] buildDotnetModule: set TMPDIR in fetch-deps Some packages assume TMPDIR is unshared, even in nix-shell. --- pkgs/build-support/dotnet/build-dotnet-module/fetch-deps.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/build-support/dotnet/build-dotnet-module/fetch-deps.sh b/pkgs/build-support/dotnet/build-dotnet-module/fetch-deps.sh index c8d4282406212..ff971ce1e5929 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/fetch-deps.sh +++ b/pkgs/build-support/dotnet/build-dotnet-module/fetch-deps.sh @@ -4,6 +4,8 @@ tmp=$(mktemp -d) trap 'chmod -R +w "$tmp" && rm -fr "$tmp"' EXIT HOME=$tmp/.home +export TMPDIR="$tmp/.tmp" +mkdir "$HOME" "$TMPDIR" cd "$tmp" phases=" From 04686b6b28c20ce39cb858308badc96700da4ce9 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 5 Sep 2024 00:08:17 -0300 Subject: [PATCH 05/19] dotnet: add .nupkg.metadata to VMR packages This fixes nuget-to-nix in projects that use the source-built sdk and `linkNugetPackages`. --- pkgs/development/compilers/dotnet/packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/compilers/dotnet/packages.nix b/pkgs/development/compilers/dotnet/packages.nix index db9b5e68bdbf2..fc569b6b7e1f2 100644 --- a/pkgs/development/compilers/dotnet/packages.nix +++ b/pkgs/development/compilers/dotnet/packages.nix @@ -65,6 +65,7 @@ in { read version mkdir -p "$packages"/share/nuget/packages/"$id" cp -r "$package" "$packages"/share/nuget/packages/"$id"/"$version" + echo {} > "$packages"/share/nuget/packages/"$id"/"$version"/.nupkg.metadata ) fi done From e78882326b6744060af5da512311a90dd33ba0db Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 21:54:18 -0300 Subject: [PATCH 06/19] mkNugetDeps: unpack to source/ Unpacking to the build root was a bad idea. stdenv uses dumpVars() to create a file env-vars containing the entire environment. This was being installed in the derivation output, and since it contains lots of store paths, it was bloating the closure for every nuget package. --- pkgs/build-support/dotnet/make-nuget-deps/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/build-support/dotnet/make-nuget-deps/default.nix b/pkgs/build-support/dotnet/make-nuget-deps/default.nix index 341ab82ccddb5..7266a2913732a 100644 --- a/pkgs/build-support/dotnet/make-nuget-deps/default.nix +++ b/pkgs/build-support/dotnet/make-nuget-deps/default.nix @@ -39,8 +39,9 @@ lib.makeOverridable( ]; unpackPhase = '' - unzip -nq $src - chmod -R +rw . + unzip -nqd source $src + chmod -R +rw source + cd source ''; prePatch = '' From 2d43ecc4002d8643d0b3373480b1707f477a40d0 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 22:49:22 -0300 Subject: [PATCH 07/19] buildDotnetModule: clean-up stdenv attributes - stop binding attributes we don't care about (e.g. name, doCheck) - remove attributes we handle in nix (e.g. useAppHost) - inherit attributes with default values (e.g. packNupkg) --- .../dotnet/build-dotnet-module/default.nix | 38 ++++++++++++++----- pkgs/by-name/ro/roslyn-ls/package.nix | 4 +- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pkgs/build-support/dotnet/build-dotnet-module/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/default.nix index e36e339dfa7fb..82e900360ebc5 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/default.nix @@ -18,10 +18,7 @@ let transformArgs = finalAttrs: { - name ? "${args.pname}-${args.version}", - pname ? name, enableParallelBuilding ? true, - doCheck ? false, # Flags to pass to `makeWrapper`. This is done to avoid double wrapping. makeWrapperArgs ? [ ], @@ -118,7 +115,7 @@ let nugetDeps else mkNugetDeps { - inherit name; + inherit (finalAttrs.finalPackage) name; sourceFile = nugetDeps; } else @@ -130,7 +127,21 @@ let in # Not all args need to be passed through to mkDerivation # 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; dotnetExecutables = executables; @@ -145,9 +156,18 @@ let dotnetRuntimeDeps = map lib.getLib runtimeDeps; dotnetSelfContainedBuild = selfContainedBuild; dotnetUseAppHost = useAppHost; - inherit useDotnetFromEnv; - inherit enableParallelBuilding; + inherit + enableParallelBuilding + dotnetRestoreFlags + dotnetBuildFlags + dotnetTestFlags + dotnetInstallFlags + dotnetPackFlags + dotnetFlags + packNupkg + useDotnetFromEnv + ; nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [ dotnetConfigureHook @@ -241,12 +261,12 @@ let if lib.isPath nugetDepsFile && !lib.hasPrefix "${builtins.storeDir}/" (toString nugetDepsFile) then toString nugetDepsFile 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; }); }; in - writeShellScript "${name}-fetch-deps" '' + writeShellScript "${finalAttrs.finalPackage.name}-fetch-deps" '' NIX_BUILD_SHELL="${runtimeShell}" exec ${nix}/bin/nix-shell \ --pure --run 'source "${innerScript}"' "${drv}" ''; diff --git a/pkgs/by-name/ro/roslyn-ls/package.nix b/pkgs/by-name/ro/roslyn-ls/package.nix index 3207eea29d093..8955d46b5b7b2 100644 --- a/pkgs/by-name/ro/roslyn-ls/package.nix +++ b/pkgs/by-name/ro/roslyn-ls/package.nix @@ -33,7 +33,7 @@ buildDotnetModule rec { jq '.sdk.rollForward = "latestMinor"' < global.json > global.json.tmp mv global.json.tmp global.json - substituteInPlace $projectFile \ + substituteInPlace $dotnetProjectFiles \ --replace-fail \ '>win-x64;win-arm64;linux-x64;linux-arm64;linux-musl-x64;linux-musl-arm64;osx-x64;osx-arm64' \ '>linux-x64;linux-arm64;osx-x64;osx-arm64' @@ -58,7 +58,7 @@ buildDotnetModule rec { '' runHook preInstall - env dotnet publish $projectFile \ + env dotnet publish $dotnetProjectFiles \ -p:ContinuousIntegrationBuild=true \ -p:Deterministic=true \ -p:InformationalVersion=$version \ From d4776214f794ebeb96d3ba49be4dfa119ef7358a Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 23:01:00 -0300 Subject: [PATCH 08/19] mkNugetSource/Deps: move into dotnetCorePackages --- pkgs/development/compilers/dotnet/default.nix | 3 +++ pkgs/top-level/all-packages.nix | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index 9a1acf4ad70d5..0604e5706b021 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -51,6 +51,9 @@ makeScopeWithSplicing' { patchNupkgs = callPackage ./patch-nupkgs.nix {}; nugetPackageHook = callPackage ./nuget-package-hook.nix {}; + mkNugetSource = callPackage ../../../build-support/dotnet/make-nuget-source { }; + mkNugetDeps = callPackage ../../../build-support/dotnet/make-nuget-deps { }; + dotnet_8 = recurseIntoAttrs (callPackage ./8 { bootstrapSdk = dotnet_8_0.sdk_8_0_1xx; }); dotnet_9 = recurseIntoAttrs (callPackage ./9 {}); } // lib.optionalAttrs config.allowAliases { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e69ca4d78f5b1..9441405e16664 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -880,8 +880,7 @@ with pkgs; buildDotnetModule = callPackage ../build-support/dotnet/build-dotnet-module { }; nuget-to-nix = callPackage ../build-support/dotnet/nuget-to-nix { }; - mkNugetSource = callPackage ../build-support/dotnet/make-nuget-source { }; - mkNugetDeps = (newScope dotnetCorePackages) ../build-support/dotnet/make-nuget-deps { }; + inherit (dotnetCorePackages) mkNugetSource mkNugetDeps; buildDotnetGlobalTool = callPackage ../build-support/dotnet/build-dotnet-global-tool { }; From 7ea78aaf5a1001152e46184020f647398ada3d84 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 23:05:32 -0300 Subject: [PATCH 09/19] dotnetCorePackages.fetchNupkg: split from mkNugetDeps --- .../dotnet/fetch-nupkg/default.nix | 67 +++++++++++++++++++ .../dotnet/make-nuget-deps/default.nix | 53 +-------------- pkgs/development/compilers/dotnet/default.nix | 1 + 3 files changed, 70 insertions(+), 51 deletions(-) create mode 100644 pkgs/build-support/dotnet/fetch-nupkg/default.nix diff --git a/pkgs/build-support/dotnet/fetch-nupkg/default.nix b/pkgs/build-support/dotnet/fetch-nupkg/default.nix new file mode 100644 index 0000000000000..66bf503a65187 --- /dev/null +++ b/pkgs/build-support/dotnet/fetch-nupkg/default.nix @@ -0,0 +1,67 @@ +{ + symlinkJoin, + fetchurl, + stdenvNoCC, + lib, + unzip, + patchNupkgs, + nugetPackageHook, +}: +{ + pname, + version, + sha256 ? "", + hash ? "", + url ? "https://www.nuget.org/api/v2/package/${pname}/${version}", + installable ? false, +}: +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 -nqd source $src + chmod -R +rw source + cd source + ''; + + 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; +} diff --git a/pkgs/build-support/dotnet/make-nuget-deps/default.nix b/pkgs/build-support/dotnet/make-nuget-deps/default.nix index 7266a2913732a..efc3d07e97774 100644 --- a/pkgs/build-support/dotnet/make-nuget-deps/default.nix +++ b/pkgs/build-support/dotnet/make-nuget-deps/default.nix @@ -5,6 +5,7 @@ , unzip , patchNupkgs , nugetPackageHook +, fetchNupkg }: lib.makeOverridable( { name @@ -15,57 +16,7 @@ lib.makeOverridable( (symlinkJoin { name = "${name}-nuget-deps"; paths = nugetDeps { - fetchNuGet = - { 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 -nqd source $src - chmod -R +rw source - cd source - ''; - - 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; - }; + fetchNuGet = args: fetchNupkg (args // { inherit installable; }); }; }) // { inherit sourceFile; diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index 0604e5706b021..fec4583bf558d 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -53,6 +53,7 @@ makeScopeWithSplicing' { 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_9 = recurseIntoAttrs (callPackage ./9 {}); From 32ccfdc278542a03cce351b9346e3bfa87802ae0 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 23:10:54 -0300 Subject: [PATCH 10/19] dotnetCorePackages.fetchNupkg: run missing hooks --- pkgs/build-support/dotnet/fetch-nupkg/default.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/build-support/dotnet/fetch-nupkg/default.nix b/pkgs/build-support/dotnet/fetch-nupkg/default.nix index 66bf503a65187..031a8d50207a7 100644 --- a/pkgs/build-support/dotnet/fetch-nupkg/default.nix +++ b/pkgs/build-support/dotnet/fetch-nupkg/default.nix @@ -38,9 +38,13 @@ stdenvNoCC.mkDerivation rec { ]; unpackPhase = '' + runHook preUnpack + unzip -nqd source $src chmod -R +rw source cd source + + runHook postUnpack ''; prePatch = '' @@ -53,10 +57,14 @@ stdenvNoCC.mkDerivation rec { ''; 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 = '' From 1f6cd35f5efa75edfcd8172f010eee71741e45ff Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 23:33:28 -0300 Subject: [PATCH 11/19] dotnetCorePackages.fetchNupkg: add override mechanism --- .../dotnet/fetch-nupkg/default.nix | 99 ++++++++++--------- .../dotnet/fetch-nupkg/overrides.nix | 9 ++ 2 files changed, 61 insertions(+), 47 deletions(-) create mode 100644 pkgs/build-support/dotnet/fetch-nupkg/overrides.nix diff --git a/pkgs/build-support/dotnet/fetch-nupkg/default.nix b/pkgs/build-support/dotnet/fetch-nupkg/default.nix index 031a8d50207a7..07f1f2fc617f8 100644 --- a/pkgs/build-support/dotnet/fetch-nupkg/default.nix +++ b/pkgs/build-support/dotnet/fetch-nupkg/default.nix @@ -6,6 +6,8 @@ unzip, patchNupkgs, nugetPackageHook, + callPackage, + overrides ? callPackage ./overrides.nix { }, }: { pname, @@ -15,61 +17,64 @@ url ? "https://www.nuget.org/api/v2/package/${pname}/${version}", installable ? false, }: -stdenvNoCC.mkDerivation rec { - inherit pname version; +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 - ; - }; + 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 - ]; + nativeBuildInputs = [ + unzip + patchNupkgs + nugetPackageHook + ]; - unpackPhase = '' - runHook preUnpack + unpackPhase = '' + runHook preUnpack - unzip -nqd source $src - chmod -R +rw source - cd source + unzip -nqd source $src + chmod -R +rw source + cd source - runHook postUnpack - ''; + 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 - ''; + 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 + installPhase = '' + runHook preInstall - dir=$out/share/nuget/packages/${lib.toLower pname}/${lib.toLower version} - mkdir -p $dir - cp -r . $dir - echo {} > "$dir"/.nupkg.metadata + dir=$out/share/nuget/packages/${lib.toLower pname}/${lib.toLower version} + mkdir -p $dir + cp -r . $dir + echo {} > "$dir"/.nupkg.metadata - runHook postInstall - ''; + runHook postInstall + ''; - preFixup = '' - patch-nupkgs $out/share/nuget/packages - ''; + preFixup = '' + patch-nupkgs $out/share/nuget/packages + ''; - createInstallableNugetSource = installable; -} + createInstallableNugetSource = installable; + }; +in +overrides.${pname} or lib.id package diff --git a/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix new file mode 100644 index 0000000000000..f00e41fb1fade --- /dev/null +++ b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix @@ -0,0 +1,9 @@ +{ autoPatchelfHook }: +{ + # e.g. + # "Package.Id" = + # package: + # package.overrideAttrs (old: { + # buildInputs = old.buildInputs or [ ] ++ [ hello ]; + # }); +} From 9a0be2fd287493c3a22eb90b945db9f63a3d44d6 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Tue, 3 Sep 2024 23:34:56 -0300 Subject: [PATCH 12/19] dotnetCorePackages.fetchNupkg: override skiasharp to find fontconfig --- pkgs/applications/audio/openutau/default.nix | 1 - .../git-credential-manager/default.nix | 5 ++-- .../dotnet/fetch-nupkg/overrides.nix | 27 ++++++++++++++++++- .../be/beatsabermodmanager/package.nix | 2 -- pkgs/by-name/bl/blendfarm/package.nix | 1 - pkgs/by-name/kn/knossosnet/package.nix | 3 +-- pkgs/by-name/li/libation/package.nix | 2 -- pkgs/by-name/lu/lumafly/package.nix | 2 -- pkgs/by-name/ne/nexusmods-app/package.nix | 1 - pkgs/by-name/re/retrospy/package.nix | 2 -- pkgs/by-name/ry/ryujinx/package.nix | 2 -- .../space-station-14-launcher.nix | 2 -- pkgs/tools/games/scarab/default.nix | 2 -- .../networking/mqttmultimeter/default.nix | 3 +-- 14 files changed, 30 insertions(+), 25 deletions(-) diff --git a/pkgs/applications/audio/openutau/default.nix b/pkgs/applications/audio/openutau/default.nix index 3e16c7b512de8..bb5c43f29fb7e 100644 --- a/pkgs/applications/audio/openutau/default.nix +++ b/pkgs/applications/audio/openutau/default.nix @@ -32,7 +32,6 @@ buildDotnetModule rec { runtimeDeps = [ dbus - fontconfig libICE libSM libX11 diff --git a/pkgs/applications/version-management/git-credential-manager/default.nix b/pkgs/applications/version-management/git-credential-manager/default.nix index 592074224f01c..fb70c4b71888e 100644 --- a/pkgs/applications/version-management/git-credential-manager/default.nix +++ b/pkgs/applications/version-management/git-credential-manager/default.nix @@ -5,7 +5,6 @@ , libX11 , libICE , libSM -, fontconfig , libsecret , git , git-credential-manager @@ -36,8 +35,8 @@ buildDotnetModule rec { dotnetInstallFlags = [ "--framework" "net8.0" ]; executables = [ "git-credential-manager" ]; - runtimeDeps = [ fontconfig ] - ++ lib.optionals withGuiSupport [ libX11 libICE libSM ] + runtimeDeps = + lib.optionals withGuiSupport [ libX11 libICE libSM ] ++ lib.optional withLibsecretSupport libsecret; makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath ([ git ] ++ lib.optionals withGpgSupport [ gnupg pass ])}" diff --git a/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix index f00e41fb1fade..384505a65cd2d 100644 --- a/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix +++ b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix @@ -1,4 +1,10 @@ -{ autoPatchelfHook }: +{ + autoPatchelfHook, + dotnetCorePackages, + fontconfig, + lib, + stdenv, +}: { # e.g. # "Package.Id" = @@ -6,4 +12,23 @@ # package.overrideAttrs (old: { # buildInputs = old.buildInputs or [ ] ++ [ hello ]; # }); + + "SkiaSharp.NativeAssets.Linux" = + package: + package.overrideAttrs (old: { + 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 + ''; + }); } diff --git a/pkgs/by-name/be/beatsabermodmanager/package.nix b/pkgs/by-name/be/beatsabermodmanager/package.nix index 96705c35d345a..a44d30f7fa702 100644 --- a/pkgs/by-name/be/beatsabermodmanager/package.nix +++ b/pkgs/by-name/be/beatsabermodmanager/package.nix @@ -8,7 +8,6 @@ libX11, libICE, libSM, - fontconfig, xdg-utils, }: @@ -42,7 +41,6 @@ buildDotnetModule rec { libX11 libICE libSM - fontconfig ]; # Required for OneClick diff --git a/pkgs/by-name/bl/blendfarm/package.nix b/pkgs/by-name/bl/blendfarm/package.nix index badbda23c38a6..ba7bfc21af3c2 100644 --- a/pkgs/by-name/bl/blendfarm/package.nix +++ b/pkgs/by-name/bl/blendfarm/package.nix @@ -83,7 +83,6 @@ buildDotnetModule rec { libgdiplus glib libXrandr - fontconfig ] ++ lib.optionals stdenv.hostPlatform.isLinux [ blender ]; # there is no "*.so.3" or "*.so.5" in nixpkgs. So ignore the warning diff --git a/pkgs/by-name/kn/knossosnet/package.nix b/pkgs/by-name/kn/knossosnet/package.nix index a6a41e20fc739..ab767a89300d2 100644 --- a/pkgs/by-name/kn/knossosnet/package.nix +++ b/pkgs/by-name/kn/knossosnet/package.nix @@ -1,7 +1,6 @@ { buildDotnetModule , fetchFromGitHub - , fontconfig , lib , openal , xorg @@ -23,7 +22,7 @@ buildDotnetModule rec { nugetDeps = ./deps.nix; executables = [ "Knossos.NET" ]; - runtimeDeps = [ fontconfig openal xorg.libX11 xorg.libICE xorg.libSM ]; + runtimeDeps = [ openal xorg.libX11 xorg.libICE xorg.libSM ]; meta = with lib; { homepage = "https://github.com/KnossosNET/Knossos.NET"; diff --git a/pkgs/by-name/li/libation/package.nix b/pkgs/by-name/li/libation/package.nix index fc61d7c0d48f8..ff736584a33d8 100644 --- a/pkgs/by-name/li/libation/package.nix +++ b/pkgs/by-name/li/libation/package.nix @@ -13,7 +13,6 @@ libXcursor, libXext, libXrandr, - fontconfig, glew, gtk3, }: @@ -55,7 +54,6 @@ buildDotnetModule rec { libXcursor libXext libXrandr - fontconfig glew # For file dialogs gtk3 diff --git a/pkgs/by-name/lu/lumafly/package.nix b/pkgs/by-name/lu/lumafly/package.nix index 14227990c4902..676b00cfa6467 100644 --- a/pkgs/by-name/lu/lumafly/package.nix +++ b/pkgs/by-name/lu/lumafly/package.nix @@ -5,7 +5,6 @@ dotnetCorePackages, zlib, icu, - fontconfig, openssl, libX11, libICE, @@ -36,7 +35,6 @@ buildDotnetModule rec { runtimeDeps = [ zlib icu - fontconfig openssl libX11 libICE diff --git a/pkgs/by-name/ne/nexusmods-app/package.nix b/pkgs/by-name/ne/nexusmods-app/package.nix index 68f5dadc393aa..a55bb43e00074 100644 --- a/pkgs/by-name/ne/nexusmods-app/package.nix +++ b/pkgs/by-name/ne/nexusmods-app/package.nix @@ -63,7 +63,6 @@ buildDotnetModule (finalAttrs: { runtimeInputs = [ desktop-file-utils ]; runtimeDeps = [ - fontconfig libICE libSM libX11 diff --git a/pkgs/by-name/re/retrospy/package.nix b/pkgs/by-name/re/retrospy/package.nix index a68b08617f43e..869b6debfb1a1 100644 --- a/pkgs/by-name/re/retrospy/package.nix +++ b/pkgs/by-name/re/retrospy/package.nix @@ -4,7 +4,6 @@ , copyDesktopItems , makeDesktopItem , lib -, fontconfig , libX11 , libXcursor , libICE @@ -44,7 +43,6 @@ buildDotnetModule { ]; runtimeDeps = [ - fontconfig libX11 libICE libXcursor diff --git a/pkgs/by-name/ry/ryujinx/package.nix b/pkgs/by-name/ry/ryujinx/package.nix index 590b7cfc7ccea..cbf8e52810087 100644 --- a/pkgs/by-name/ry/ryujinx/package.nix +++ b/pkgs/by-name/ry/ryujinx/package.nix @@ -16,7 +16,6 @@ , libXcursor , libXext , libXrandr -, fontconfig , glew , libGL , udev @@ -61,7 +60,6 @@ buildDotnetModule rec { libXcursor libXext libXrandr - fontconfig glew # Headless executable diff --git a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix index cde4cee0384af..909b57277f61c 100644 --- a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix +++ b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix @@ -13,7 +13,6 @@ , libXcursor , libXext , libXrandr -, fontconfig , glew , SDL2 , glfw @@ -102,7 +101,6 @@ buildDotnetModule rec { libXcursor libXext libXrandr - fontconfig glew ]; diff --git a/pkgs/tools/games/scarab/default.nix b/pkgs/tools/games/scarab/default.nix index 11ec9e7cdd027..e3bce4d7e574c 100644 --- a/pkgs/tools/games/scarab/default.nix +++ b/pkgs/tools/games/scarab/default.nix @@ -6,7 +6,6 @@ , libX11 , libICE , libSM -, fontconfig , gtk3 , copyDesktopItems , icoutils @@ -35,7 +34,6 @@ buildDotnetModule rec { libX11 libICE libSM - fontconfig gtk3 ]; diff --git a/pkgs/tools/networking/mqttmultimeter/default.nix b/pkgs/tools/networking/mqttmultimeter/default.nix index 1c2c290bef787..a265f1dfa4724 100644 --- a/pkgs/tools/networking/mqttmultimeter/default.nix +++ b/pkgs/tools/networking/mqttmultimeter/default.nix @@ -4,7 +4,6 @@ , dotnet-runtime_8 , buildDotnetModule , fetchFromGitHub -, fontconfig , xorg , libglvnd , makeDesktopItem @@ -34,7 +33,7 @@ buildDotnetModule rec { copyDesktopItems ]; - buildInputs = [ stdenv.cc.cc.lib fontconfig ]; + buildInputs = [ stdenv.cc.cc.lib ]; postInstall = '' rm -rf $out/lib/${lib.toLower pname}/runtimes/{*musl*,win*} From 5b31367e13601a2a2ab3a55ef8bce9dfd1949c27 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Wed, 4 Sep 2024 00:48:59 -0300 Subject: [PATCH 13/19] buildDotnetModule: move into dotnetCorePackages --- pkgs/development/compilers/dotnet/default.nix | 1 + pkgs/top-level/all-packages.nix | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index fec4583bf558d..f963c0603536d 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -51,6 +51,7 @@ makeScopeWithSplicing' { patchNupkgs = callPackage ./patch-nupkgs.nix {}; nugetPackageHook = callPackage ./nuget-package-hook.nix {}; + buildDotnetModule = callPackage ../../../build-support/dotnet/build-dotnet-module { }; mkNugetSource = callPackage ../../../build-support/dotnet/make-nuget-source { }; mkNugetDeps = callPackage ../../../build-support/dotnet/make-nuget-deps { }; fetchNupkg = callPackage ../../../build-support/dotnet/fetch-nupkg { }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9441405e16664..cce11a14c429a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -878,9 +878,8 @@ with pkgs; dotnet-runtime = dotnetCorePackages.runtime_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 { }; - inherit (dotnetCorePackages) mkNugetSource mkNugetDeps; + inherit (dotnetCorePackages) buildDotnetModule mkNugetSource mkNugetDeps; buildDotnetGlobalTool = callPackage ../build-support/dotnet/build-dotnet-global-tool { }; From e5cb52bd58b8fb580900e17929d3f2051aad6534 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Fri, 6 Sep 2024 00:12:18 -0300 Subject: [PATCH 14/19] buildDotnetGlobalTool: move into dotnetCorePackages --- pkgs/development/compilers/dotnet/default.nix | 2 ++ pkgs/top-level/all-packages.nix | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/compilers/dotnet/default.nix b/pkgs/development/compilers/dotnet/default.nix index f963c0603536d..1a2fdc7f8dd1d 100644 --- a/pkgs/development/compilers/dotnet/default.nix +++ b/pkgs/development/compilers/dotnet/default.nix @@ -52,6 +52,8 @@ makeScopeWithSplicing' { 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 { }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cce11a14c429a..4c7b2589bb8ca 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -879,9 +879,7 @@ with pkgs; dotnet-aspnetcore = dotnetCorePackages.aspnetcore_6_0; nuget-to-nix = callPackage ../build-support/dotnet/nuget-to-nix { }; - inherit (dotnetCorePackages) buildDotnetModule mkNugetSource mkNugetDeps; - - buildDotnetGlobalTool = callPackage ../build-support/dotnet/build-dotnet-global-tool { }; + inherit (dotnetCorePackages) buildDotnetModule buildDotnetGlobalTool mkNugetSource mkNugetDeps; fsautocomplete = callPackage ../development/tools/fsautocomplete { }; From 2563bd752cd19785ae8431914316cbad118c0aa9 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 5 Sep 2024 11:09:19 -0300 Subject: [PATCH 15/19] dotnet-sdk-setup-hook: make shell vars local --- pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh index 5d657eaf31228..4af67889b28bf 100644 --- a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh +++ b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh @@ -16,6 +16,7 @@ _linkPackages() { local -r src="$1" local -r dest="$2" local dir + local x for x in "$src"/*/*; do dir=$dest/$(basename "$(dirname "$x")") @@ -39,6 +40,8 @@ createNugetDirs() { } configureNuget() { + local x + for x in "${!_nugetInputs[@]}"; do if [[ -d $x/share/nuget/packages ]]; then addToSearchPathWithCustomDelimiter ";" NUGET_FALLBACK_PACKAGES "$x/share/nuget/packages" From 6c5a9e5a438cd5f50d41cf21cd05fc50cd427a7e Mon Sep 17 00:00:00 2001 From: David McFarland Date: Thu, 5 Sep 2024 09:56:14 -0300 Subject: [PATCH 16/19] dotnet-sdk-setup-hook: use temporary symlink dir for NUGET_FALLBACK_PACKAGES Restore operations get extremely slow when there are a lot of paths in NUGET_FALLBACK_PACKAGES. --- pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh index 4af67889b28bf..fccf6b02aaeb8 100644 --- a/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh +++ b/pkgs/development/compilers/dotnet/dotnet-sdk-setup-hook.sh @@ -28,8 +28,9 @@ _linkPackages() { createNugetDirs() { nugetTemp=$PWD/.nuget-temp export NUGET_PACKAGES=$nugetTemp/packages + export NUGET_FALLBACK_PACKAGES=$nugetTemp/fallback nugetSource=$nugetTemp/source - mkdir -p "$NUGET_PACKAGES" "$nugetSource" + mkdir -p "$NUGET_PACKAGES" "$NUGET_FALLBACK_PACKAGES" "$nugetSource" dotnet new nugetconfig if [[ -z ${keepNugetConfig-} ]]; then @@ -44,7 +45,7 @@ configureNuget() { for x in "${!_nugetInputs[@]}"; do if [[ -d $x/share/nuget/packages ]]; then - addToSearchPathWithCustomDelimiter ";" NUGET_FALLBACK_PACKAGES "$x/share/nuget/packages" + _linkPackages "$x/share/nuget/packages" "$NUGET_FALLBACK_PACKAGES" fi if [[ -d $x/share/nuget/source ]]; then From cc9c59c4780a097ef7b988daeb118269e73d4730 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Wed, 4 Sep 2024 01:18:07 -0300 Subject: [PATCH 17/19] buildDotnetModule: use individual dependencies for nugetDeps --- doc/languages-frameworks/dotnet.section.md | 2 +- .../build-dotnet-global-tool/default.nix | 18 ++++++------ .../dotnet/build-dotnet-module/default.nix | 28 ++++++++----------- .../python-modules/clr-loader/default.nix | 3 +- .../python-modules/pythonnet/default.nix | 2 +- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/doc/languages-frameworks/dotnet.section.md b/doc/languages-frameworks/dotnet.section.md index cdacec1c3a5ea..2cbb7ea45d986 100644 --- a/doc/languages-frameworks/dotnet.section.md +++ b/doc/languages-frameworks/dotnet.section.md @@ -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: * `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} For more detail about managing the `deps.nix` file, see [Generating and updating NuGet dependencies](#generating-and-updating-nuget-dependencies) ::: diff --git a/pkgs/build-support/dotnet/build-dotnet-global-tool/default.nix b/pkgs/build-support/dotnet/build-dotnet-global-tool/default.nix index 466c1972899c0..2177000c3627e 100644 --- a/pkgs/build-support/dotnet/build-dotnet-global-tool/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-global-tool/default.nix @@ -1,4 +1,4 @@ -{ buildDotnetModule, emptyDirectory, mkNugetDeps, dotnet-sdk }: +{ buildDotnetModule, emptyDirectory, fetchNupkg, dotnet-sdk }: { pname , version @@ -23,13 +23,15 @@ buildDotnetModule (args // { src = emptyDirectory; - nugetDeps = mkNugetDeps { - name = pname; - nugetDeps = { fetchNuGet }: [ - (fetchNuGet { pname = nugetName; inherit version; sha256 = nugetSha256; hash = nugetHash; }) - ] ++ (nugetDeps fetchNuGet); - installable = true; - }; + buildInputs = [ + (fetchNupkg { + pname = nugetName; + inherit version; + sha256 = nugetSha256; + hash = nugetHash; + installable = true; + }) + ]; dotnetGlobalTool = true; diff --git a/pkgs/build-support/dotnet/build-dotnet-module/default.nix b/pkgs/build-support/dotnet/build-dotnet-module/default.nix index 82e900360ebc5..412747733bd6c 100644 --- a/pkgs/build-support/dotnet/build-dotnet-module/default.nix +++ b/pkgs/build-support/dotnet/build-dotnet-module/default.nix @@ -7,7 +7,7 @@ writeShellScript, makeWrapper, dotnetCorePackages, - mkNugetDeps, + fetchNupkg, nuget-to-nix, cacert, unzip, @@ -112,16 +112,16 @@ let _nugetDeps = if (nugetDeps != null) then if lib.isDerivation nugetDeps then + [ nugetDeps ] + else if lib.isList nugetDeps then nugetDeps else - mkNugetDeps { - inherit (finalAttrs.finalPackage) name; - sourceFile = nugetDeps; - } + assert (lib.isPath nugetDeps); + callPackage nugetDeps { fetchNuGet = fetchNupkg; } 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; in @@ -183,13 +183,7 @@ let yq ]; - buildInputs = - args.buildInputs or [ ] - ++ [ - dotnet-sdk.packages - _nugetDeps - ] - ++ projectReferences; + buildInputs = args.buildInputs or [ ] ++ [ dotnet-sdk.packages ] ++ _nugetDeps ++ projectReferences; # 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 @@ -233,13 +227,13 @@ let { nugetDeps = _nugetDeps; } - // lib.optionalAttrs (!lib.isDerivation nugetDeps) { + // lib.optionalAttrs (nugetDeps == null || lib.isPath nugetDeps) { fetch-deps = let pkg = finalAttrs.finalPackage.overrideAttrs ( old: { - buildInputs = lib.remove _nugetDeps old.buildInputs; + buildInputs = lib.subtractLists _nugetDeps old.buildInputs; keepNugetConfig = true; } // lib.optionalAttrs (runtimeId == null) { @@ -258,7 +252,7 @@ let # 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 # 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 else ''$(mktemp -t "${finalAttrs.pname ? finalAttrs.finalPackage.name}-deps-XXXXXX.nix")''; diff --git a/pkgs/development/python-modules/clr-loader/default.nix b/pkgs/development/python-modules/clr-loader/default.nix index 6b3d2c3faa391..583cf34320e47 100644 --- a/pkgs/development/python-modules/clr-loader/default.nix +++ b/pkgs/development/python-modules/clr-loader/default.nix @@ -38,8 +38,7 @@ buildPythonPackage { buildInputs = [ dotnetCorePackages.sdk_6_0.packages - dotnet-build.nugetDeps - ]; + ] ++ dotnet-build.nugetDeps; nativeBuildInputs = [ setuptools diff --git a/pkgs/development/python-modules/pythonnet/default.nix b/pkgs/development/python-modules/pythonnet/default.nix index 969534e80cef7..9119f1a27268c 100644 --- a/pkgs/development/python-modules/pythonnet/default.nix +++ b/pkgs/development/python-modules/pythonnet/default.nix @@ -37,7 +37,7 @@ buildPythonPackage { --replace 'dynamic = ["version"]' 'version = "${version}"' ''; - buildInputs = [ dotnet-build.nugetDeps ]; + buildInputs = dotnet-build.nugetDeps; nativeBuildInputs = [ setuptools From e6c700ed11f9a398930b757449f01753b01d810f Mon Sep 17 00:00:00 2001 From: David McFarland Date: Wed, 4 Sep 2024 01:18:41 -0300 Subject: [PATCH 18/19] dotnetCorePackages.fetchNupkg: override avalonia.x11 to find native libs --- pkgs/applications/audio/openutau/default.nix | 6 --- .../git-credential-manager/default.nix | 8 +-- .../dotnet/fetch-nupkg/overrides.nix | 49 +++++++++++++------ .../be/beatsabermodmanager/package.nix | 9 ---- pkgs/by-name/bl/blendfarm/package.nix | 6 --- pkgs/by-name/kn/knossosnet/package.nix | 3 +- pkgs/by-name/li/libation/package.nix | 14 ------ pkgs/by-name/lu/lumafly/package.nix | 6 --- pkgs/by-name/ne/nexusmods-app/package.nix | 9 ---- pkgs/by-name/re/retrospy/package.nix | 11 ----- pkgs/by-name/ry/ryujinx/package.nix | 12 ----- .../space-station-14-launcher.nix | 14 ------ pkgs/tools/games/scarab/default.nix | 6 --- .../networking/mqttmultimeter/default.nix | 4 -- 14 files changed, 37 insertions(+), 120 deletions(-) diff --git a/pkgs/applications/audio/openutau/default.nix b/pkgs/applications/audio/openutau/default.nix index bb5c43f29fb7e..f797215b607b4 100644 --- a/pkgs/applications/audio/openutau/default.nix +++ b/pkgs/applications/audio/openutau/default.nix @@ -5,9 +5,6 @@ , dotnetCorePackages , dbus , fontconfig -, libICE -, libSM -, libX11 , portaudio }: @@ -32,9 +29,6 @@ buildDotnetModule rec { runtimeDeps = [ dbus - libICE - libSM - libX11 portaudio ]; diff --git a/pkgs/applications/version-management/git-credential-manager/default.nix b/pkgs/applications/version-management/git-credential-manager/default.nix index fb70c4b71888e..c9df6aff549ab 100644 --- a/pkgs/applications/version-management/git-credential-manager/default.nix +++ b/pkgs/applications/version-management/git-credential-manager/default.nix @@ -2,21 +2,16 @@ , fetchFromGitHub , buildDotnetModule , dotnetCorePackages -, libX11 -, libICE -, libSM , libsecret , git , git-credential-manager , gnupg , pass , testers -, withGuiSupport ? true , withLibsecretSupport ? true , withGpgSupport ? true }: -assert withLibsecretSupport -> withGuiSupport; buildDotnetModule rec { pname = "git-credential-manager"; version = "2.5.1"; @@ -36,8 +31,7 @@ buildDotnetModule rec { executables = [ "git-credential-manager" ]; runtimeDeps = - lib.optionals withGuiSupport [ libX11 libICE libSM ] - ++ lib.optional withLibsecretSupport libsecret; + lib.optional withLibsecretSupport libsecret; makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath ([ git ] ++ lib.optionals withGpgSupport [ gnupg pass ])}" ]; diff --git a/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix index 384505a65cd2d..f4bc1976e0eb5 100644 --- a/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix +++ b/pkgs/build-support/dotnet/fetch-nupkg/overrides.nix @@ -3,7 +3,11 @@ dotnetCorePackages, fontconfig, lib, + libICE, + libSM, + libX11, stdenv, + writeText, }: { # e.g. @@ -13,22 +17,39 @@ # 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: { - nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [ autoPatchelfHook ]; + package.overrideAttrs ( + old: + lib.optionalAttrs stdenv.isLinux { + nativeBuildInputs = old.nativeBuildInputs or [ ] ++ [ autoPatchelfHook ]; - buildInputs = old.buildInputs or [ ] ++ [ fontconfig ]; + 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 - ''; - }); + preInstall = + old.preInstall or "" + + '' + cd runtimes + for platform in *; do + [[ $platform == "${dotnetCorePackages.systemToDotnetRid stdenv.hostPlatform.system}" ]] || + rm -r "$platform" + done + cd - >/dev/null + ''; + } + ); } diff --git a/pkgs/by-name/be/beatsabermodmanager/package.nix b/pkgs/by-name/be/beatsabermodmanager/package.nix index a44d30f7fa702..e11f60c39508f 100644 --- a/pkgs/by-name/be/beatsabermodmanager/package.nix +++ b/pkgs/by-name/be/beatsabermodmanager/package.nix @@ -5,10 +5,6 @@ dotnetCorePackages, - libX11, - libICE, - libSM, - xdg-utils, }: @@ -37,11 +33,6 @@ buildDotnetModule rec { nugetDeps = ./deps.nix; - runtimeDeps = [ - libX11 - libICE - libSM - ]; # Required for OneClick makeWrapperArgs = [ diff --git a/pkgs/by-name/bl/blendfarm/package.nix b/pkgs/by-name/bl/blendfarm/package.nix index ba7bfc21af3c2..4eeabc18efaf2 100644 --- a/pkgs/by-name/bl/blendfarm/package.nix +++ b/pkgs/by-name/bl/blendfarm/package.nix @@ -6,9 +6,6 @@ dotnetCorePackages, xz, pcre, - libX11, - libICE, - libSM, autoPatchelfHook, bintools, fixDarwinDylibNames, @@ -77,9 +74,6 @@ buildDotnetModule rec { runtimeDeps = [ xz pcre - libX11 - libICE - libSM libgdiplus glib libXrandr diff --git a/pkgs/by-name/kn/knossosnet/package.nix b/pkgs/by-name/kn/knossosnet/package.nix index ab767a89300d2..7abcb75f3c9a4 100644 --- a/pkgs/by-name/kn/knossosnet/package.nix +++ b/pkgs/by-name/kn/knossosnet/package.nix @@ -3,7 +3,6 @@ , fetchFromGitHub , lib , openal - , xorg }: buildDotnetModule rec { @@ -22,7 +21,7 @@ buildDotnetModule rec { nugetDeps = ./deps.nix; executables = [ "Knossos.NET" ]; - runtimeDeps = [ openal xorg.libX11 xorg.libICE xorg.libSM ]; + runtimeDeps = [ openal ]; meta = with lib; { homepage = "https://github.com/KnossosNET/Knossos.NET"; diff --git a/pkgs/by-name/li/libation/package.nix b/pkgs/by-name/li/libation/package.nix index ff736584a33d8..b84469c716fb2 100644 --- a/pkgs/by-name/li/libation/package.nix +++ b/pkgs/by-name/li/libation/package.nix @@ -6,13 +6,6 @@ dotnetCorePackages, wrapGAppsHook3, - libX11, - libICE, - libSM, - libXi, - libXcursor, - libXext, - libXrandr, glew, gtk3, }: @@ -47,13 +40,6 @@ buildDotnetModule rec { runtimeDeps = [ # For Avalonia UI - libX11 - libICE - libSM - libXi - libXcursor - libXext - libXrandr glew # For file dialogs gtk3 diff --git a/pkgs/by-name/lu/lumafly/package.nix b/pkgs/by-name/lu/lumafly/package.nix index 676b00cfa6467..c15e290b465cd 100644 --- a/pkgs/by-name/lu/lumafly/package.nix +++ b/pkgs/by-name/lu/lumafly/package.nix @@ -6,9 +6,6 @@ zlib, icu, openssl, - libX11, - libICE, - libSM, icoutils, copyDesktopItems, makeDesktopItem, @@ -36,9 +33,6 @@ buildDotnetModule rec { zlib icu openssl - libX11 - libICE - libSM ]; nativeBuildInputs = [ diff --git a/pkgs/by-name/ne/nexusmods-app/package.nix b/pkgs/by-name/ne/nexusmods-app/package.nix index a55bb43e00074..6d07a5b93f9e1 100644 --- a/pkgs/by-name/ne/nexusmods-app/package.nix +++ b/pkgs/by-name/ne/nexusmods-app/package.nix @@ -7,9 +7,6 @@ fetchFromGitHub, fontconfig, lib, - libICE, - libSM, - libX11, runCommand, pname ? "nexusmods-app", }: @@ -62,12 +59,6 @@ buildDotnetModule (finalAttrs: { runtimeInputs = [ desktop-file-utils ]; - runtimeDeps = [ - libICE - libSM - libX11 - ]; - executables = [ "NexusMods.App" ]; doCheck = true; diff --git a/pkgs/by-name/re/retrospy/package.nix b/pkgs/by-name/re/retrospy/package.nix index 869b6debfb1a1..a207150e1e472 100644 --- a/pkgs/by-name/re/retrospy/package.nix +++ b/pkgs/by-name/re/retrospy/package.nix @@ -4,10 +4,6 @@ , copyDesktopItems , makeDesktopItem , lib -, libX11 -, libXcursor -, libICE -, libSM , runCommandLocal }: let @@ -42,13 +38,6 @@ buildDotnetModule { copyDesktopItems ]; - runtimeDeps = [ - libX11 - libICE - libXcursor - libSM - ]; - projectFile = [ "RetroSpyX/RetroSpyX.csproj" "GBPemuX/GBPemuX.csproj" diff --git a/pkgs/by-name/ry/ryujinx/package.nix b/pkgs/by-name/ry/ryujinx/package.nix index cbf8e52810087..5ff91a281cd4b 100644 --- a/pkgs/by-name/ry/ryujinx/package.nix +++ b/pkgs/by-name/ry/ryujinx/package.nix @@ -10,12 +10,6 @@ , sndio , pulseaudio , vulkan-loader -, libICE -, libSM -, libXi -, libXcursor -, libXext -, libXrandr , glew , libGL , udev @@ -54,12 +48,6 @@ buildDotnetModule rec { udev # Avalonia UI - libICE - libSM - libXi - libXcursor - libXext - libXrandr glew # Headless executable diff --git a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix index 909b57277f61c..10dfea3d7dee5 100644 --- a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix +++ b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix @@ -6,13 +6,6 @@ , iconConvTools , copyDesktopItems , makeDesktopItem -, libX11 -, libICE -, libSM -, libXi -, libXcursor -, libXext -, libXrandr , glew , SDL2 , glfw @@ -94,13 +87,6 @@ buildDotnetModule rec { gdk-pixbuf # Avalonia UI dependencies. - libX11 - libICE - libSM - libXi - libXcursor - libXext - libXrandr glew ]; diff --git a/pkgs/tools/games/scarab/default.nix b/pkgs/tools/games/scarab/default.nix index e3bce4d7e574c..02dec25949e08 100644 --- a/pkgs/tools/games/scarab/default.nix +++ b/pkgs/tools/games/scarab/default.nix @@ -3,9 +3,6 @@ , fetchFromGitHub , glibc , zlib -, libX11 -, libICE -, libSM , gtk3 , copyDesktopItems , icoutils @@ -31,9 +28,6 @@ buildDotnetModule rec { runtimeDeps = [ glibc zlib - libX11 - libICE - libSM gtk3 ]; diff --git a/pkgs/tools/networking/mqttmultimeter/default.nix b/pkgs/tools/networking/mqttmultimeter/default.nix index a265f1dfa4724..29990cbc83a89 100644 --- a/pkgs/tools/networking/mqttmultimeter/default.nix +++ b/pkgs/tools/networking/mqttmultimeter/default.nix @@ -4,7 +4,6 @@ , dotnet-runtime_8 , buildDotnetModule , fetchFromGitHub -, xorg , libglvnd , makeDesktopItem , copyDesktopItems @@ -41,9 +40,6 @@ buildDotnetModule rec { runtimeDeps = [ libglvnd - xorg.libSM - xorg.libICE - xorg.libX11 ]; desktopItems = makeDesktopItem { From 14c908cdc9aa64916232ba2684871845747ccdb2 Mon Sep 17 00:00:00 2001 From: David McFarland Date: Fri, 6 Sep 2024 13:37:42 -0300 Subject: [PATCH 19/19] tests.dotnet: add test for supported nugetDeps values --- pkgs/test/dotnet/default.nix | 1 + pkgs/test/dotnet/nuget-deps/default.nix | 44 ++++++++++++++++++++++ pkgs/test/dotnet/nuget-deps/nuget-deps.nix | 6 +++ 3 files changed, 51 insertions(+) create mode 100644 pkgs/test/dotnet/nuget-deps/default.nix create mode 100644 pkgs/test/dotnet/nuget-deps/nuget-deps.nix diff --git a/pkgs/test/dotnet/default.nix b/pkgs/test/dotnet/default.nix index 72c2f5a64def8..601cf5c15e4e8 100644 --- a/pkgs/test/dotnet/default.nix +++ b/pkgs/test/dotnet/default.nix @@ -5,4 +5,5 @@ use-dotnet-from-env = lib.recurseIntoAttrs (callPackage ./use-dotnet-from-env { }); structured-attrs = lib.recurseIntoAttrs (callPackage ./structured-attrs { }); final-attrs = lib.recurseIntoAttrs (callPackage ./final-attrs { }); + nuget-deps = lib.recurseIntoAttrs (callPackage ./nuget-deps { }); } diff --git a/pkgs/test/dotnet/nuget-deps/default.nix b/pkgs/test/dotnet/nuget-deps/default.nix new file mode 100644 index 0000000000000..bf0e1445e93eb --- /dev/null +++ b/pkgs/test/dotnet/nuget-deps/default.nix @@ -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 ]; + } diff --git a/pkgs/test/dotnet/nuget-deps/nuget-deps.nix b/pkgs/test/dotnet/nuget-deps/nuget-deps.nix new file mode 100644 index 0000000000000..dbfecc1b26058 --- /dev/null +++ b/pkgs/test/dotnet/nuget-deps/nuget-deps.nix @@ -0,0 +1,6 @@ +# This file was automatically generated by passthru.fetch-deps. +# Please dont edit it manually, your changes might get overwritten! + +{ fetchNuGet }: +[ +]