1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-24 22:11:15 +02:00

Fix pkgs.nixVersions and installTests

... by moving our stuff out of the way from upstream's
`nixComponents` and `nixDependencies` attrsets.

(I prefer not to use overlays, but let's make it work this way
first)
This commit is contained in:
Robert Hensing 2025-04-20 22:20:52 +02:00
parent f6df573a91
commit b257ea94e3
5 changed files with 59 additions and 59 deletions

View file

@ -143,14 +143,14 @@
# without "polluting" the top level "`pkgs`" attrset. # without "polluting" the top level "`pkgs`" attrset.
# This also has the benefit of providing us with a distinct set of packages # This also has the benefit of providing us with a distinct set of packages
# we can iterate over. # we can iterate over.
nixComponents = nixComponents2 =
lib.makeScopeWithSplicing' lib.makeScopeWithSplicing'
{ {
inherit (final) splicePackages; inherit (final) splicePackages;
inherit (final.nixDependencies) newScope; inherit (final.nixDependencies2) newScope;
} }
{ {
otherSplices = final.generateSplicesForMkScope "nixComponents"; otherSplices = final.generateSplicesForMkScope "nixComponents2";
f = import ./packaging/components.nix { f = import ./packaging/components.nix {
inherit (final) lib; inherit (final) lib;
inherit officialRelease; inherit officialRelease;
@ -161,22 +161,22 @@
}; };
# The dependencies are in their own scope, so that they don't have to be # The dependencies are in their own scope, so that they don't have to be
# in Nixpkgs top level `pkgs` or `nixComponents`. # in Nixpkgs top level `pkgs` or `nixComponents2`.
nixDependencies = nixDependencies2 =
lib.makeScopeWithSplicing' lib.makeScopeWithSplicing'
{ {
inherit (final) splicePackages; inherit (final) splicePackages;
inherit (final) newScope; # layered directly on pkgs, unlike nixComponents above inherit (final) newScope; # layered directly on pkgs, unlike nixComponents2 above
} }
{ {
otherSplices = final.generateSplicesForMkScope "nixDependencies"; otherSplices = final.generateSplicesForMkScope "nixDependencies2";
f = import ./packaging/dependencies.nix { f = import ./packaging/dependencies.nix {
inherit inputs stdenv; inherit inputs stdenv;
pkgs = final; pkgs = final;
}; };
}; };
nix = final.nixComponents.nix-cli; nix = final.nixComponents2.nix-cli;
# See https://github.com/NixOS/nixpkgs/pull/214409 # See https://github.com/NixOS/nixpkgs/pull/214409
# Remove when fixed in this flake's nixpkgs # Remove when fixed in this flake's nixpkgs
@ -277,7 +277,7 @@
# memory leaks with detect_leaks=0. # memory leaks with detect_leaks=0.
"" = rec { "" = rec {
nixpkgs = nixpkgsFor.${system}.native; nixpkgs = nixpkgsFor.${system}.native;
nixComponents = nixpkgs.nixComponents.overrideScope ( nixComponents = nixpkgs.nixComponents2.overrideScope (
nixCompFinal: nixCompPrev: { nixCompFinal: nixCompPrev: {
mesonComponentOverrides = _finalAttrs: prevAttrs: { mesonComponentOverrides = _finalAttrs: prevAttrs: {
mesonFlags = mesonFlags =
@ -305,7 +305,7 @@
nixpkgsPrefix: nixpkgsPrefix:
{ {
nixpkgs, nixpkgs,
nixComponents ? nixpkgs.nixComponents, nixComponents ? nixpkgs.nixComponents2,
}: }:
flatMapAttrs nixComponents ( flatMapAttrs nixComponents (
pkgName: pkg: pkgName: pkg:
@ -335,9 +335,9 @@
binaryTarball = self.hydraJobs.binaryTarball.${system}; binaryTarball = self.hydraJobs.binaryTarball.${system};
# TODO probably should be `nix-cli` # TODO probably should be `nix-cli`
nix = self.packages.${system}.nix-everything; nix = self.packages.${system}.nix-everything;
nix-manual = nixpkgsFor.${system}.native.nixComponents.nix-manual; nix-manual = nixpkgsFor.${system}.native.nixComponents2.nix-manual;
nix-internal-api-docs = nixpkgsFor.${system}.native.nixComponents.nix-internal-api-docs; nix-internal-api-docs = nixpkgsFor.${system}.native.nixComponents2.nix-internal-api-docs;
nix-external-api-docs = nixpkgsFor.${system}.native.nixComponents.nix-external-api-docs; nix-external-api-docs = nixpkgsFor.${system}.native.nixComponents2.nix-external-api-docs;
} }
# We need to flatten recursive attribute sets of derivations to pass `flake check`. # We need to flatten recursive attribute sets of derivations to pass `flake check`.
// //
@ -391,9 +391,9 @@
}: }:
{ {
# These attributes go right into `packages.<system>`. # These attributes go right into `packages.<system>`.
"${pkgName}" = nixpkgsFor.${system}.native.nixComponents.${pkgName}; "${pkgName}" = nixpkgsFor.${system}.native.nixComponents2.${pkgName};
"${pkgName}-static" = nixpkgsFor.${system}.native.pkgsStatic.nixComponents.${pkgName}; "${pkgName}-static" = nixpkgsFor.${system}.native.pkgsStatic.nixComponents2.${pkgName};
"${pkgName}-llvm" = nixpkgsFor.${system}.native.pkgsLLVM.nixComponents.${pkgName}; "${pkgName}-llvm" = nixpkgsFor.${system}.native.pkgsLLVM.nixComponents2.${pkgName};
} }
// lib.optionalAttrs supportsCross ( // lib.optionalAttrs supportsCross (
flatMapAttrs (lib.genAttrs crossSystems (_: { })) ( flatMapAttrs (lib.genAttrs crossSystems (_: { })) (
@ -401,7 +401,7 @@
{ }: { }:
{ {
# These attributes go right into `packages.<system>`. # These attributes go right into `packages.<system>`.
"${pkgName}-${crossSystem}" = nixpkgsFor.${system}.cross.${crossSystem}.nixComponents.${pkgName}; "${pkgName}-${crossSystem}" = nixpkgsFor.${system}.cross.${crossSystem}.nixComponents2.${pkgName};
} }
) )
) )
@ -411,7 +411,7 @@
{ {
# These attributes go right into `packages.<system>`. # These attributes go right into `packages.<system>`.
"${pkgName}-${stdenvName}" = "${pkgName}-${stdenvName}" =
nixpkgsFor.${system}.nativeForStdenv.${stdenvName}.nixComponents.${pkgName}; nixpkgsFor.${system}.nativeForStdenv.${stdenvName}.nixComponents2.${pkgName};
} }
) )
) )

View file

@ -5,11 +5,11 @@
{ pkgs }: { pkgs }:
pkgs.nixComponents.nix-util.overrideAttrs ( pkgs.nixComponents2.nix-util.overrideAttrs (
attrs: attrs:
let let
stdenv = pkgs.nixDependencies.stdenv; stdenv = pkgs.nixDependencies2.stdenv;
buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform; buildCanExecuteHost = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
modular = devFlake.getSystem stdenv.buildPlatform.system; modular = devFlake.getSystem stdenv.buildPlatform.system;
transformFlag = transformFlag =
@ -84,26 +84,26 @@ pkgs.nixComponents.nix-util.overrideAttrs (
}; };
mesonFlags = mesonFlags =
map (transformFlag "libutil") (ignoreCrossFile pkgs.nixComponents.nix-util.mesonFlags) map (transformFlag "libutil") (ignoreCrossFile pkgs.nixComponents2.nix-util.mesonFlags)
++ map (transformFlag "libstore") (ignoreCrossFile pkgs.nixComponents.nix-store.mesonFlags) ++ map (transformFlag "libstore") (ignoreCrossFile pkgs.nixComponents2.nix-store.mesonFlags)
++ map (transformFlag "libfetchers") (ignoreCrossFile pkgs.nixComponents.nix-fetchers.mesonFlags) ++ map (transformFlag "libfetchers") (ignoreCrossFile pkgs.nixComponents2.nix-fetchers.mesonFlags)
++ lib.optionals havePerl ( ++ lib.optionals havePerl (
map (transformFlag "perl") (ignoreCrossFile pkgs.nixComponents.nix-perl-bindings.mesonFlags) map (transformFlag "perl") (ignoreCrossFile pkgs.nixComponents2.nix-perl-bindings.mesonFlags)
) )
++ map (transformFlag "libexpr") (ignoreCrossFile pkgs.nixComponents.nix-expr.mesonFlags) ++ map (transformFlag "libexpr") (ignoreCrossFile pkgs.nixComponents2.nix-expr.mesonFlags)
++ map (transformFlag "libcmd") (ignoreCrossFile pkgs.nixComponents.nix-cmd.mesonFlags); ++ map (transformFlag "libcmd") (ignoreCrossFile pkgs.nixComponents2.nix-cmd.mesonFlags);
nativeBuildInputs = nativeBuildInputs =
attrs.nativeBuildInputs or [ ] attrs.nativeBuildInputs or [ ]
++ pkgs.nixComponents.nix-util.nativeBuildInputs ++ pkgs.nixComponents2.nix-util.nativeBuildInputs
++ pkgs.nixComponents.nix-store.nativeBuildInputs ++ pkgs.nixComponents2.nix-store.nativeBuildInputs
++ pkgs.nixComponents.nix-fetchers.nativeBuildInputs ++ pkgs.nixComponents2.nix-fetchers.nativeBuildInputs
++ pkgs.nixComponents.nix-expr.nativeBuildInputs ++ pkgs.nixComponents2.nix-expr.nativeBuildInputs
++ lib.optionals havePerl pkgs.nixComponents.nix-perl-bindings.nativeBuildInputs ++ lib.optionals havePerl pkgs.nixComponents2.nix-perl-bindings.nativeBuildInputs
++ lib.optionals buildCanExecuteHost pkgs.nixComponents.nix-manual.externalNativeBuildInputs ++ lib.optionals buildCanExecuteHost pkgs.nixComponents2.nix-manual.externalNativeBuildInputs
++ pkgs.nixComponents.nix-internal-api-docs.nativeBuildInputs ++ pkgs.nixComponents2.nix-internal-api-docs.nativeBuildInputs
++ pkgs.nixComponents.nix-external-api-docs.nativeBuildInputs ++ pkgs.nixComponents2.nix-external-api-docs.nativeBuildInputs
++ pkgs.nixComponents.nix-functional-tests.externalNativeBuildInputs ++ pkgs.nixComponents2.nix-functional-tests.externalNativeBuildInputs
++ lib.optional ( ++ lib.optional (
!buildCanExecuteHost !buildCanExecuteHost
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479 # Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
@ -129,14 +129,14 @@ pkgs.nixComponents.nix-util.overrideAttrs (
buildInputs = buildInputs =
attrs.buildInputs or [ ] attrs.buildInputs or [ ]
++ pkgs.nixComponents.nix-util.buildInputs ++ pkgs.nixComponents2.nix-util.buildInputs
++ pkgs.nixComponents.nix-store.buildInputs ++ pkgs.nixComponents2.nix-store.buildInputs
++ pkgs.nixComponents.nix-store-tests.externalBuildInputs ++ pkgs.nixComponents2.nix-store-tests.externalBuildInputs
++ pkgs.nixComponents.nix-fetchers.buildInputs ++ pkgs.nixComponents2.nix-fetchers.buildInputs
++ pkgs.nixComponents.nix-expr.buildInputs ++ pkgs.nixComponents2.nix-expr.buildInputs
++ pkgs.nixComponents.nix-expr.externalPropagatedBuildInputs ++ pkgs.nixComponents2.nix-expr.externalPropagatedBuildInputs
++ pkgs.nixComponents.nix-cmd.buildInputs ++ pkgs.nixComponents2.nix-cmd.buildInputs
++ lib.optionals havePerl pkgs.nixComponents.nix-perl-bindings.externalBuildInputs ++ lib.optionals havePerl pkgs.nixComponents2.nix-perl-bindings.externalBuildInputs
++ lib.optional havePerl pkgs.perl; ++ lib.optional havePerl pkgs.perl;
} }
) )

View file

@ -19,14 +19,14 @@ let
testNixVersions = testNixVersions =
pkgs: daemon: pkgs: daemon:
pkgs.nixComponents.nix-functional-tests.override { pkgs.nixComponents2.nix-functional-tests.override {
pname = "nix-daemon-compat-tests"; pname = "nix-daemon-compat-tests";
version = "${pkgs.nix.version}-with-daemon-${daemon.version}"; version = "${pkgs.nix.version}-with-daemon-${daemon.version}";
test-daemon = daemon; test-daemon = daemon;
}; };
# Technically we could just return `pkgs.nixComponents`, but for Hydra it's # Technically we could just return `pkgs.nixComponents2`, but for Hydra it's
# convention to transpose it, and to transpose it efficiently, we need to # convention to transpose it, and to transpose it efficiently, we need to
# enumerate them manually, so that we don't evaluate unnecessary package sets. # enumerate them manually, so that we don't evaluate unnecessary package sets.
# See listingIsComplete below. # See listingIsComplete below.
@ -86,7 +86,7 @@ in
} (_: null); } (_: null);
actualPkgs = lib.concatMapAttrs ( actualPkgs = lib.concatMapAttrs (
k: v: if lib.strings.hasPrefix "nix-" k then { ${k} = null; } else { } k: v: if lib.strings.hasPrefix "nix-" k then { ${k} = null; } else { }
) nixpkgsFor.${arbitrarySystem}.native.nixComponents; ) nixpkgsFor.${arbitrarySystem}.native.nixComponents2;
diff = lib.concatStringsSep "\n" ( diff = lib.concatStringsSep "\n" (
lib.concatLists ( lib.concatLists (
lib.mapAttrsToList ( lib.mapAttrsToList (
@ -112,7 +112,7 @@ in
# Binary package for various platforms. # Binary package for various platforms.
build = forAllPackages ( build = forAllPackages (
pkgName: forAllSystems (system: nixpkgsFor.${system}.native.nixComponents.${pkgName}) pkgName: forAllSystems (system: nixpkgsFor.${system}.native.nixComponents2.${pkgName})
); );
shellInputs = removeAttrs (forAllSystems ( shellInputs = removeAttrs (forAllSystems (
@ -122,7 +122,7 @@ in
buildStatic = forAllPackages ( buildStatic = forAllPackages (
pkgName: pkgName:
lib.genAttrs linux64BitSystems ( lib.genAttrs linux64BitSystems (
system: nixpkgsFor.${system}.native.pkgsStatic.nixComponents.${pkgName} system: nixpkgsFor.${system}.native.pkgsStatic.nixComponents2.${pkgName}
) )
); );
@ -139,7 +139,7 @@ in
forAllCrossSystems ( forAllCrossSystems (
crossSystem: crossSystem:
lib.genAttrs [ "x86_64-linux" ] ( lib.genAttrs [ "x86_64-linux" ] (
system: nixpkgsFor.${system}.cross.${crossSystem}.nixComponents.${pkgName} system: nixpkgsFor.${system}.cross.${crossSystem}.nixComponents2.${pkgName}
) )
) )
) )
@ -149,7 +149,7 @@ in
let let
components = forAllSystems ( components = forAllSystems (
system: system:
nixpkgsFor.${system}.native.nixComponents.overrideScope ( nixpkgsFor.${system}.native.nixComponents2.overrideScope (
self: super: { self: super: {
nix-expr = super.nix-expr.override { enableGC = false; }; nix-expr = super.nix-expr.override { enableGC = false; };
} }
@ -158,7 +158,7 @@ in
in in
forAllPackages (pkgName: forAllSystems (system: components.${system}.${pkgName})); forAllPackages (pkgName: forAllSystems (system: components.${system}.${pkgName}));
buildNoTests = forAllSystems (system: nixpkgsFor.${system}.native.nixComponents.nix-cli); buildNoTests = forAllSystems (system: nixpkgsFor.${system}.native.nixComponents2.nix-cli);
# Toggles some settings for better coverage. Windows needs these # Toggles some settings for better coverage. Windows needs these
# library combinations, and Debian build Nix with GNU readline too. # library combinations, and Debian build Nix with GNU readline too.
@ -166,7 +166,7 @@ in
let let
components = forAllSystems ( components = forAllSystems (
system: system:
nixpkgsFor.${system}.native.nixComponents.overrideScope ( nixpkgsFor.${system}.native.nixComponents2.overrideScope (
self: super: { self: super: {
nix-cmd = super.nix-cmd.override { nix-cmd = super.nix-cmd.override {
enableMarkdown = false; enableMarkdown = false;
@ -179,7 +179,7 @@ in
forAllPackages (pkgName: forAllSystems (system: components.${system}.${pkgName})); forAllPackages (pkgName: forAllSystems (system: components.${system}.${pkgName}));
# Perl bindings for various platforms. # Perl bindings for various platforms.
perlBindings = forAllSystems (system: nixpkgsFor.${system}.native.nixComponents.nix-perl-bindings); perlBindings = forAllSystems (system: nixpkgsFor.${system}.native.nixComponents2.nix-perl-bindings);
# Binary tarball for various platforms, containing a Nix store # Binary tarball for various platforms, containing a Nix store
# with the closure of 'nix' package, and the second half of # with the closure of 'nix' package, and the second half of
@ -229,13 +229,13 @@ in
# }; # };
# Nix's manual # Nix's manual
manual = nixpkgsFor.x86_64-linux.native.nixComponents.nix-manual; manual = nixpkgsFor.x86_64-linux.native.nixComponents2.nix-manual;
# API docs for Nix's unstable internal C++ interfaces. # API docs for Nix's unstable internal C++ interfaces.
internal-api-docs = nixpkgsFor.x86_64-linux.native.nixComponents.nix-internal-api-docs; internal-api-docs = nixpkgsFor.x86_64-linux.native.nixComponents2.nix-internal-api-docs;
# API docs for Nix's C bindings. # API docs for Nix's C bindings.
external-api-docs = nixpkgsFor.x86_64-linux.native.nixComponents.nix-external-api-docs; external-api-docs = nixpkgsFor.x86_64-linux.native.nixComponents2.nix-external-api-docs;
# System tests. # System tests.
tests = tests =

View file

@ -31,7 +31,7 @@ let
nixpkgs.pkgs = nixpkgsFor.${system}.native; nixpkgs.pkgs = nixpkgsFor.${system}.native;
nix.checkAllErrors = false; nix.checkAllErrors = false;
# TODO: decide which packaging stage to use. `nix-cli` is efficient, but not the same as the user-facing `everything.nix` package (`default`). Perhaps a good compromise is `everything.nix` + `noTests` defined above? # TODO: decide which packaging stage to use. `nix-cli` is efficient, but not the same as the user-facing `everything.nix` package (`default`). Perhaps a good compromise is `everything.nix` + `noTests` defined above?
nix.package = nixpkgsFor.${system}.native.nixComponents.nix-cli; nix.package = nixpkgsFor.${system}.native.nixComponents2.nix-cli;
# Evaluate VMs faster # Evaluate VMs faster
documentation.enable = false; documentation.enable = false;

View file

@ -49,11 +49,11 @@ in
cd ~ cd ~
cp -r ${pkgs.nixComponents.nix-functional-tests.src} nix cp -r ${pkgs.nixComponents2.nix-functional-tests.src} nix
chmod -R +w nix chmod -R +w nix
chmod u+w nix/.version chmod u+w nix/.version
echo ${pkgs.nixComponents.version} > nix/.version echo ${pkgs.nixComponents2.version} > nix/.version
export isTestOnNixOS=1 export isTestOnNixOS=1