From 9eebb5af4aeb9cdeac2b7f21f305c3a06811e0d2 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 20 Feb 2025 00:38:20 +0100 Subject: [PATCH 01/13] nixVersions.nix_2_26: Update and improve packaging (cherry picked from commit ab7ba5b36bf65249f69a848f2c9039dd4b1880a5) --- .../nix/2_26/componentized.nix | 5 +- .../nix/2_26/dependencies.nix | 136 -------- .../nix/2_26/packaging/components.nix | 311 +++++++++++++++++- .../nix/2_26/packaging/everything.nix | 300 ++++++++++------- .../nix/2_26/src/libcmd/package.nix | 8 - .../nix/2_26/src/libexpr-c/package.nix | 8 - .../2_26/src/libexpr-test-support/package.nix | 8 - .../nix/2_26/src/libexpr-tests/package.nix | 8 - .../nix/2_26/src/libexpr/package.nix | 8 - .../2_26/src/libfetchers-tests/package.nix | 8 - .../nix/2_26/src/libfetchers/package.nix | 8 - .../nix/2_26/src/libflake-c/package.nix | 8 - .../nix/2_26/src/libflake-tests/package.nix | 8 - .../nix/2_26/src/libflake/package.nix | 8 - .../nix/2_26/src/libmain-c/package.nix | 8 - .../nix/2_26/src/libmain/package.nix | 8 - .../nix/2_26/src/libstore-c/package.nix | 8 - .../src/libstore-test-support/package.nix | 8 - .../nix/2_26/src/libstore-tests/package.nix | 8 - .../nix/2_26/src/libstore/package.nix | 8 - .../nix/2_26/src/libutil-c/package.nix | 8 - .../2_26/src/libutil-test-support/package.nix | 8 - .../nix/2_26/src/libutil-tests/package.nix | 8 - .../nix/2_26/src/libutil/package.nix | 11 - .../nix/2_26/src/nix/package.nix | 9 +- .../nix/2_26/tests/functional/package.nix | 9 +- pkgs/tools/package-management/nix/default.nix | 36 +- 27 files changed, 514 insertions(+), 455 deletions(-) diff --git a/pkgs/tools/package-management/nix/2_26/componentized.nix b/pkgs/tools/package-management/nix/2_26/componentized.nix index 9dbf54392fb4e..5759b4dc277cd 100644 --- a/pkgs/tools/package-management/nix/2_26/componentized.nix +++ b/pkgs/tools/package-management/nix/2_26/componentized.nix @@ -26,7 +26,7 @@ let { otherSplices = generateSplicesForMkScope "nixComponents"; f = import ./packaging/components.nix { - inherit lib officialRelease src; + inherit lib officialRelease pkgs src stdenv; }; }; @@ -43,9 +43,8 @@ let f = import ./dependencies.nix { inherit pkgs; inherit stdenv; - inherit src; inherit libgit2-thin-packfile; }; }; in -nixComponents.nix-everything +(nixComponents.overrideSource src).nix-everything diff --git a/pkgs/tools/package-management/nix/2_26/dependencies.nix b/pkgs/tools/package-management/nix/2_26/dependencies.nix index fddcf228e7cb2..ca8d928cad560 100644 --- a/pkgs/tools/package-management/nix/2_26/dependencies.nix +++ b/pkgs/tools/package-management/nix/2_26/dependencies.nix @@ -1,8 +1,6 @@ # These overrides are applied to the dependencies of the Nix components. { - src, - # The raw Nixpkgs, not affected by this scope pkgs, @@ -15,10 +13,6 @@ let in let - inherit (pkgs) lib; - - root = ./.; - stdenv = if prevStdenv.isDarwin && prevStdenv.isx86_64 then darwinStdenv else prevStdenv; # Fix the following error with the default x86_64-darwin SDK: @@ -29,113 +23,6 @@ let # allocation function Clang uses with this setting actually works # all the way back to 10.6. darwinStdenv = pkgs.overrideSDK prevStdenv { darwinMinVersion = "10.13"; }; - - resolveRelPath = p: lib.path.removePrefix root p; - resolvePath = p: src + "/${resolveRelPath p}"; - - # Indirection for Nixpkgs to override when package.nix files are vendored - # fileset filtering is not possible without IFD on src, so we ignore the fileset - # and produce a path containing _more_, but the extra files generally won't be - # accessed. - # The Nix flake uses fileset.toSource for this. - filesetToSource = { root, fileset }: resolvePath root; - - /** - Given a set of layers, create a mkDerivation-like function - */ - mkPackageBuilder = - exts: userFn: stdenv.mkDerivation (lib.extends (lib.composeManyExtensions exts) userFn); - - localSourceLayer = - finalAttrs: prevAttrs: - let - workDirPath = - # Ideally we'd pick finalAttrs.workDir, but for now `mkDerivation` has - # the requirement that everything except passthru and meta must be - # serialized by mkDerivation, which doesn't work for this. - prevAttrs.workDir; - - workDirSubpath = resolveRelPath workDirPath; - # sources = assert prevAttrs.fileset._type == "fileset"; prevAttrs.fileset; - # src = lib.fileset.toSource { fileset = sources; inherit root; }; - - in - { - sourceRoot = "${src.name}/" + workDirSubpath; - inherit src; - - # Clear what `derivation` can't/shouldn't serialize; see prevAttrs.workDir. - fileset = null; - workDir = null; - }; - - mesonLayer = finalAttrs: prevAttrs: { - # NOTE: - # As of https://github.com/NixOS/nixpkgs/blob/8baf8241cea0c7b30e0b8ae73474cb3de83c1a30/pkgs/by-name/me/meson/setup-hook.sh#L26, - # `mesonBuildType` defaults to `plain` if not specified. We want our Nix-built binaries to be optimized by default. - # More on build types here: https://mesonbuild.com/Builtin-options.html#details-for-buildtype. - mesonBuildType = "release"; - # NOTE: - # Users who are debugging Nix builds are expected to set the environment variable `mesonBuildType`, per the - # guidance in https://github.com/NixOS/nix/blob/8a3fc27f1b63a08ac983ee46435a56cf49ebaf4a/doc/manual/source/development/debugging.md?plain=1#L10. - # For this reason, we don't want to refer to `finalAttrs.mesonBuildType` here, but rather use the environment variable. - preConfigure = - prevAttrs.preConfigure or "" - + - lib.optionalString - ( - !stdenv.hostPlatform.isWindows - # build failure - && !stdenv.hostPlatform.isStatic - # LTO breaks exception handling on x86-64-darwin. - && stdenv.system != "x86_64-darwin" - ) - '' - case "$mesonBuildType" in - release|minsize) appendToVar mesonFlags "-Db_lto=true" ;; - *) appendToVar mesonFlags "-Db_lto=false" ;; - esac - ''; - nativeBuildInputs = [ - pkgs.buildPackages.meson - pkgs.buildPackages.ninja - ] ++ prevAttrs.nativeBuildInputs or [ ]; - mesonCheckFlags = prevAttrs.mesonCheckFlags or [ ] ++ [ - "--print-errorlogs" - ]; - }; - - mesonBuildLayer = finalAttrs: prevAttrs: { - nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ - pkgs.buildPackages.pkg-config - ]; - separateDebugInfo = !stdenv.hostPlatform.isStatic; - hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie"; - env = - prevAttrs.env or { } - // lib.optionalAttrs ( - stdenv.isLinux - && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux") - && !(stdenv.hostPlatform.useLLVM or false) - ) { LDFLAGS = "-fuse-ld=gold"; }; - }; - - mesonLibraryLayer = finalAttrs: prevAttrs: { - outputs = prevAttrs.outputs or [ "out" ] ++ [ "dev" ]; - }; - - # Work around weird `--as-needed` linker behavior with BSD, see - # https://github.com/mesonbuild/meson/issues/3593 - bsdNoLinkAsNeeded = - finalAttrs: prevAttrs: - lib.optionalAttrs stdenv.hostPlatform.isBSD { - mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ]; - }; - - miscGoodPractice = finalAttrs: prevAttrs: { - strictDeps = prevAttrs.strictDeps or true; - enableParallelBuilding = true; - }; in scope: { inherit stdenv; @@ -160,27 +47,4 @@ scope: { }; libgit2 = libgit2-thin-packfile; - - inherit resolvePath filesetToSource; - - mkMesonDerivation = mkPackageBuilder [ - miscGoodPractice - localSourceLayer - mesonLayer - ]; - mkMesonExecutable = mkPackageBuilder [ - miscGoodPractice - bsdNoLinkAsNeeded - localSourceLayer - mesonLayer - mesonBuildLayer - ]; - mkMesonLibrary = mkPackageBuilder [ - miscGoodPractice - bsdNoLinkAsNeeded - localSourceLayer - mesonLayer - mesonBuildLayer - mesonLibraryLayer - ]; } diff --git a/pkgs/tools/package-management/nix/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/2_26/packaging/components.nix index 57932617f827e..8b027591e6ed8 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/components.nix @@ -1,13 +1,22 @@ { lib, + pkgs, src, + stdenv, officialRelease, }: scope: let - inherit (scope) callPackage; + inherit (scope) + callPackage + ; + inherit (pkgs.buildPackages) + meson + ninja + pkg-config + ; baseVersion = lib.fileContents ../.version; @@ -20,6 +29,165 @@ let }_${src.shortRev or "dirty"}"; fineVersion = baseVersion + fineVersionSuffix; + + root = ../.; + + # Indirection for Nixpkgs to override when package.nix files are vendored + filesetToSource = lib.fileset.toSource; + + /** + Given a set of layers, create a mkDerivation-like function + */ + mkPackageBuilder = + exts: userFn: stdenv.mkDerivation (lib.extends (lib.composeManyExtensions exts) userFn); + + setVersionLayer = finalAttrs: prevAttrs: { + preConfigure = + prevAttrs.prevAttrs or "" + + + # Update the repo-global .version file. + # Symlink ./.version points there, but by default only workDir is writable. + '' + chmod u+w ./.version + echo ${finalAttrs.version} > ./.version + ''; + }; + + localSourceLayer = + finalAttrs: prevAttrs: + let + workDirPath = + # Ideally we'd pick finalAttrs.workDir, but for now `mkDerivation` has + # the requirement that everything except passthru and meta must be + # serialized by mkDerivation, which doesn't work for this. + prevAttrs.workDir; + + workDirSubpath = lib.path.removePrefix root workDirPath; + sources = + assert prevAttrs.fileset._type == "fileset"; + prevAttrs.fileset; + src = lib.fileset.toSource { + fileset = sources; + inherit root; + }; + + in + { + sourceRoot = "${src.name}/" + workDirSubpath; + inherit src; + + # Clear what `derivation` can't/shouldn't serialize; see prevAttrs.workDir. + fileset = null; + workDir = null; + }; + + resolveRelPath = p: lib.path.removePrefix root p; + + makeFetchedSourceLayer = + finalScope: finalAttrs: prevAttrs: + let + workDirPath = + # Ideally we'd pick finalAttrs.workDir, but for now `mkDerivation` has + # the requirement that everything except passthru and meta must be + # serialized by mkDerivation, which doesn't work for this. + prevAttrs.workDir; + + workDirSubpath = resolveRelPath workDirPath; + + in + { + sourceRoot = "${finalScope.patchedSrc.name}/" + workDirSubpath; + src = finalScope.patchedSrc; + version = + let + n = lib.length finalScope.patches; + in + if n == 0 then prevAttrs.version else prevAttrs.version + "+${toString n}"; + + # Clear what `derivation` can't/shouldn't serialize; see prevAttrs.workDir. + fileset = null; + workDir = null; + }; + + mesonLayer = finalAttrs: prevAttrs: { + # NOTE: + # As of https://github.com/NixOS/nixpkgs/blob/8baf8241cea0c7b30e0b8ae73474cb3de83c1a30/pkgs/by-name/me/meson/setup-hook.sh#L26, + # `mesonBuildType` defaults to `plain` if not specified. We want our Nix-built binaries to be optimized by default. + # More on build types here: https://mesonbuild.com/Builtin-options.html#details-for-buildtype. + mesonBuildType = "release"; + # NOTE: + # Users who are debugging Nix builds are expected to set the environment variable `mesonBuildType`, per the + # guidance in https://github.com/NixOS/nix/blob/8a3fc27f1b63a08ac983ee46435a56cf49ebaf4a/doc/manual/source/development/debugging.md?plain=1#L10. + # For this reason, we don't want to refer to `finalAttrs.mesonBuildType` here, but rather use the environment variable. + preConfigure = + prevAttrs.preConfigure or "" + + + lib.optionalString + ( + !stdenv.hostPlatform.isWindows + # build failure + && !stdenv.hostPlatform.isStatic + # LTO breaks exception handling on x86-64-darwin. + && stdenv.system != "x86_64-darwin" + ) + '' + case "$mesonBuildType" in + release|minsize) appendToVar mesonFlags "-Db_lto=true" ;; + *) appendToVar mesonFlags "-Db_lto=false" ;; + esac + ''; + nativeBuildInputs = [ + meson + ninja + ] ++ prevAttrs.nativeBuildInputs or [ ]; + mesonCheckFlags = prevAttrs.mesonCheckFlags or [ ] ++ [ + "--print-errorlogs" + ]; + }; + + mesonBuildLayer = finalAttrs: prevAttrs: { + nativeBuildInputs = prevAttrs.nativeBuildInputs or [ ] ++ [ + pkg-config + ]; + separateDebugInfo = !stdenv.hostPlatform.isStatic; + hardeningDisable = lib.optional stdenv.hostPlatform.isStatic "pie"; + env = + prevAttrs.env or { } + // lib.optionalAttrs ( + stdenv.isLinux + && !(stdenv.hostPlatform.isStatic && stdenv.system == "aarch64-linux") + && !(stdenv.hostPlatform.useLLVM or false) + ) { LDFLAGS = "-fuse-ld=gold"; }; + }; + + mesonLibraryLayer = finalAttrs: prevAttrs: { + outputs = prevAttrs.outputs or [ "out" ] ++ [ "dev" ]; + }; + + # Work around weird `--as-needed` linker behavior with BSD, see + # https://github.com/mesonbuild/meson/issues/3593 + bsdNoLinkAsNeeded = + finalAttrs: prevAttrs: + lib.optionalAttrs stdenv.hostPlatform.isBSD { + mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ]; + }; + + miscGoodPractice = finalAttrs: prevAttrs: { + strictDeps = prevAttrs.strictDeps or true; + enableParallelBuilding = true; + }; + + /** + Append patches to the source layer. + */ + appendPatches = + scope: patches: + scope.overrideScope ( + finalScope: prevScope: { + patches = prevScope.patches ++ patches; + } + ); + in # This becomes the pkgs.nixComponents attribute set @@ -27,6 +195,113 @@ in version = baseVersion + versionSuffix; inherit versionSuffix; + inherit filesetToSource; + + /** + A user-provided extension function to apply to each component derivation. + */ + mesonComponentOverrides = finalAttrs: prevAttrs: { }; + + /** + An overridable derivation layer for handling the sources. + */ + sourceLayer = localSourceLayer; + + /** + Resolve a path value to either itself or a path in the `src`, depending + whether `overrideSource` was called. + */ + resolvePath = p: p; + + /** + Apply an extension function (i.e. overlay-shaped) to all component derivations. + */ + overrideAllMesonComponents = + f: + scope.overrideScope ( + finalScope: prevScope: { + mesonComponentOverrides = lib.composeExtensions scope.mesonComponentOverrides f; + } + ); + + /** + Provide an alternate source. This allows the expressions to be vendored without copying the sources, + but it does make the build non-granular; all components will use a complete source. + + Packaging expressions will be ignored. + */ + overrideSource = + src: + scope.overrideScope ( + finalScope: prevScope: { + sourceLayer = makeFetchedSourceLayer finalScope; + /** + Unpatched source for the build of Nix. Packaging expressions will be ignored. + */ + src = src; + /** + Patches for the whole Nix source. Changes to packaging expressions will be ignored. + */ + patches = [ ]; + /** + Fetched and patched source to be used in component derivations. + */ + patchedSrc = + if finalScope.patches == [ ] then + src + else + pkgs.buildPackages.srcOnly ( + pkgs.buildPackages.stdenvNoCC.mkDerivation { + name = "${finalScope.src.name or "nix-source"}-patched"; + inherit (finalScope) src patches; + } + ); + + resolvePath = p: finalScope.patchedSrc + "/${resolveRelPath p}"; + filesetToSource = { root, fileset }: finalScope.resolvePath root; + + appendPatches = appendPatches finalScope; + } + ); + + /** + Append patches to be applied to the whole Nix source. + This affects all components. + + Changes to the packaging expressions will be ignored. + */ + appendPatches = + patches: + # switch to "fetched" source first, so that patches apply to the whole tree. + (scope.overrideSource "${./..}").appendPatches patches; + + mkMesonDerivation = mkPackageBuilder [ + miscGoodPractice + scope.sourceLayer + setVersionLayer + mesonLayer + scope.mesonComponentOverrides + ]; + mkMesonExecutable = mkPackageBuilder [ + miscGoodPractice + bsdNoLinkAsNeeded + scope.sourceLayer + setVersionLayer + mesonLayer + mesonBuildLayer + scope.mesonComponentOverrides + ]; + mkMesonLibrary = mkPackageBuilder [ + miscGoodPractice + bsdNoLinkAsNeeded + scope.sourceLayer + mesonLayer + setVersionLayer + mesonBuildLayer + mesonLibraryLayer + scope.mesonComponentOverrides + ]; + nix-util = callPackage ../src/libutil/package.nix { }; nix-util-c = callPackage ../src/libutil-c/package.nix { }; nix-util-test-support = callPackage ../src/libutil-test-support/package.nix { }; @@ -56,7 +331,9 @@ in nix-cli = callPackage ../src/nix/package.nix { version = fineVersion; }; - nix-functional-tests = callPackage ../tests/functional/package.nix { version = fineVersion; }; + nix-functional-tests = callPackage ../tests/functional/package.nix { + version = fineVersion; + }; nix-manual = callPackage ../doc/manual/package.nix { version = fineVersion; }; nix-internal-api-docs = callPackage ../src/internal-api-docs/package.nix { version = fineVersion; }; @@ -64,5 +341,33 @@ in nix-perl-bindings = callPackage ../src/perl/package.nix { }; - nix-everything = callPackage ../packaging/everything.nix { }; + nix-everything = callPackage ../packaging/everything.nix { } // { + # Note: no `passthru.overrideAllMesonComponents` + # This would propagate into `nix.overrideAttrs f`, but then discard + # `f` when `.overrideAllMesonComponents` is used. + # Both "methods" should be views on the same fixpoint overriding mechanism + # for that to work. For now, we intentionally don't support the broken + # two-fixpoint solution. + /** + Apply an extension function (i.e. overlay-shaped) to all component derivations, and return the nix package. + */ + overrideAllMesonComponents = f: (scope.overrideAllMesonComponents f).nix-everything; + + /** + Append patches to be applied to the whole Nix source. + This affects all components. + + Changes to the packaging expressions will be ignored. + */ + appendPatches = ps: (scope.appendPatches ps).nix-everything; + + /** + Provide an alternate source. This allows the expressions to be vendored without copying the sources, + but it does make the build non-granular; all components will use a complete source. + + Packaging expressions will be ignored. + */ + overrideSource = src: (scope.overrideSource src).nix-everything; + + }; } diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index 7ac7a156d2269..d8fc835f235d1 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -39,6 +39,8 @@ testers, runCommand, + + patchedSrc ? null, }: let @@ -68,52 +70,50 @@ let ; }; - dev = - nixAttrs: - stdenv.mkDerivation (finalAttrs: { - name = "nix-${nix-cli.version}-dev"; - pname = "nix"; - version = nix-cli.version; - dontUnpack = true; - dontBuild = true; - libs = map lib.getDev (lib.attrValues libs); - installPhase = '' - mkdir -p $out/nix-support - echo $libs >> $out/nix-support/propagated-build-inputs - echo ${nixAttrs.finalPackage} >> $out/nix-support/propagated-build-inputs - ''; - passthru = { - tests = { - # TODO: is this supposed to work for a dev output? - # pkg-config = testers.hasPkgConfigModules { - # package = finalAttrs.finalPackage; - # }; + dev = stdenv.mkDerivation (finalAttrs: { + name = "nix-${nix-cli.version}-dev"; + pname = "nix"; + version = nix-cli.version; + dontUnpack = true; + dontBuild = true; + libs = map lib.getDev (lib.attrValues libs); + nix = nix-cli; + installPhase = '' + mkdir -p $out/nix-support + echo $libs >> $out/nix-support/propagated-build-inputs + echo $nix >> $out/nix-support/propagated-build-inputs + ''; + passthru = { + tests = { + pkg-config = testers.hasPkgConfigModules { + package = finalAttrs.finalPackage; }; + }; - # If we were to fully emulate output selection here, we'd confuse the Nix CLIs, - # because they rely on `drvPath`. - dev = finalAttrs.finalPackage.out; - out = nixAttrs.finalPackage.out; + # If we were to fully emulate output selection here, we'd confuse the Nix CLIs, + # because they rely on `drvPath`. + dev = finalAttrs.finalPackage.out; - libs = throw "`nix.dev.libs` is not meant to be used; use `nix.libs` instead."; - }; - meta = { - pkgConfigModules = [ - "nix-cmd" - "nix-expr" - "nix-expr-c" - "nix-fetchers" - "nix-flake" - "nix-flake-c" - "nix-main" - "nix-main-c" - "nix-store" - "nix-store-c" - "nix-util" - "nix-util-c" - ]; - }; - }); + libs = throw "`nix.dev.libs` is not meant to be used; use `nix.libs` instead."; + }; + meta = { + mainProgram = "nix"; + pkgConfigModules = [ + "nix-cmd" + "nix-expr" + "nix-expr-c" + "nix-fetchers" + "nix-flake" + "nix-flake-c" + "nix-main" + "nix-main-c" + "nix-store" + "nix-store-c" + "nix-util" + "nix-util-c" + ]; + }; + }); devdoc = buildEnv { name = "nix-${nix-cli.version}-devdoc"; paths = [ @@ -122,87 +122,141 @@ let ]; }; + /** + Produce a set of derivation outputs that implement the multiple outputs interface. + + The multiple outputs interface was originally designed for derivations with + multiple outputs, but it can also be used for packages which do not correspond + 1:1 to a single derivation and whose outputs come from distinct derivations. + */ + makeOutputs = + { + outputs, + defaultOutput ? "out", + extraAttrs ? outputName: value: { }, + }: + + let + prepOutput = + outputName: value: + { + _type = "package"; + /** + For compatibility. The outputs of this package may not actually be implemented using a single derivation. + */ + type = "derivation"; + outputName = outputName; + outPath = value.outPath or value; + } + // extraAttrs outputName value; + + outputAttrs = lib.mapAttrs ( + outputName: value: { outputSpecified = true; } // prepOutput outputName value // commonAttrs + ) outputs; + + # This is without `outputSpecified`, but otherwise matches the `outputAttrs` above. + defaultOutputValue = prepOutput defaultOutput outputs.${defaultOutput} // commonAttrs; + + commonAttrs = { + outputs = builtins.attrNames outputs; + } // outputAttrs; + + in + defaultOutputValue; + in -(buildEnv { - name = "nix-${nix-cli.version}"; - paths = [ - nix-cli - nix-manual.man - ]; - - meta.mainProgram = "nix"; -}).overrideAttrs - ( - finalAttrs: prevAttrs: { - doCheck = true; - doInstallCheck = true; - - checkInputs = - [ - # Make sure the unit tests have passed - nix-util-tests.tests.run - nix-store-tests.tests.run - nix-expr-tests.tests.run - nix-fetchers-tests.tests.run - nix-flake-tests.tests.run - - # Make sure the functional tests have passed - nix-functional-tests - ] - ++ lib.optionals - (!stdenv.hostPlatform.isStatic && stdenv.buildPlatform.canExecute stdenv.hostPlatform) - [ - # Perl currently fails in static build - # TODO: Split out tests into a separate derivation? - nix-perl-bindings - ]; - passthru = prevAttrs.passthru // { - inherit (nix-cli) version; - - /** - These are the libraries that are part of the Nix project. They are used - by the Nix CLI and other tools. - - If you need to use these libraries in your project, we recommend to use - the `-c` C API libraries exclusively, if possible. - - We also recommend that you build the complete package to ensure that the unit tests pass. - You could do this in CI, or by passing it in an unused environment variable. e.g in a `mkDerivation` call: - - ```nix - buildInputs = [ nix.libs.nix-util-c nix.libs.nix-store-c ]; - # Make sure the nix libs we use are ok - unusedInputsForTests = [ nix ]; - disallowedReferences = nix.all; - ``` - */ - inherit libs; - - tests = prevAttrs.passthru.tests or { } // { - pkg-config = testers.hasPkgConfigModules { - package = finalAttrs.finalPackage; - }; - }; - /** - A derivation referencing the `dev` outputs of the Nix libraries. - */ - dev = dev finalAttrs; - inherit devdoc; - doc = nix-manual; - outputs = [ - "out" - "dev" - "devdoc" - "doc" +makeOutputs { + extraAttrs = outputName: drv: { + meta = drv.meta // { + description = "The Nix package manager"; + pkgConfigModules = dev.meta.pkgConfigModules; + outputsToInstall = [ + # man is symlinked + "out" + ]; + }; + internals = drv; + name = "nix"; + overrideAttrs = + _: + throw "The nix package does not support overrideAttrs, because it has been split into multiple derivations. Instead, you may call attributes such as overrideSource, appendPatches or overrideAllMesonComponents."; + inherit (nix-cli) version; + # Should not be required + inherit (drv) drvPath; + tests = drv.tests or {}; + src = patchedSrc; + }; + outputs = { + inherit dev devdoc; + doc = nix-manual; + out = + (buildEnv { + name = "nix-${nix-cli.version}"; + paths = [ + nix-cli + nix-manual.man ]; - all = lib.attrValues ( - lib.genAttrs finalAttrs.passthru.outputs (outName: finalAttrs.finalPackage.${outName}) + meta.mainProgram = "nix"; + }).overrideAttrs + ( + finalAttrs: prevAttrs: { + doCheck = true; + doInstallCheck = true; + + checkInputs = + [ + # Make sure the unit tests have passed + nix-util-tests.tests.run + nix-store-tests.tests.run + nix-expr-tests.tests.run + nix-fetchers-tests.tests.run + nix-flake-tests.tests.run + + # Make sure the functional tests have passed + nix-functional-tests + + # dev bundle is ok + # (checkInputs must be empty paths??) + (runCommand "check-pkg-config" { checked = dev.tests.pkg-config; } "mkdir $out") + ] + ++ lib.optionals + (!stdenv.hostPlatform.isStatic && stdenv.buildPlatform.canExecute stdenv.hostPlatform) + [ + # Perl currently fails in static build + # TODO: Split out tests into a separate derivation? + nix-perl-bindings + ]; + passthru = prevAttrs.passthru // { + inherit (nix-cli) version; + + /** + These are the libraries that are part of the Nix project. They are used + by the Nix CLI and other tools. + + If you need to use these libraries in your project, we recommend to use + the `-c` C API libraries exclusively, if possible. + + We also recommend that you build the complete package to ensure that the unit tests pass. + You could do this in CI, or by passing it in an unused environment variable. e.g in a `mkDerivation` call: + + ```nix + buildInputs = [ nix.libs.nix-util-c nix.libs.nix-store-c ]; + # Make sure the nix libs we use are ok + unusedInputsForTests = [ nix ]; + disallowedReferences = nix.all; + ``` + */ + inherit libs; + + tests = prevAttrs.passthru.tests or { } // { + # TODO: create a proper fixpoint and: + pkg-config = testers.hasPkgConfigModules { + package = finalAttrs.finalPackage; + }; + }; + }; + } ); - }; - meta = prevAttrs.meta // { - description = "The Nix package manager"; - pkgConfigModules = (dev finalAttrs).meta.pkgConfigModules; - }; - } - ) + }; +} diff --git a/pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix b/pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix index d155d9f1e620d..d459d1c20fb54 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix @@ -64,14 +64,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ (lib.mesonEnable "markdown" enableMarkdown) (lib.mesonOption "readline-flavor" readlineFlavor) diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix b/pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix index ad1ea371c2d7c..694fbc1fe7893 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix @@ -36,14 +36,6 @@ mkMesonLibrary (finalAttrs: { nix-expr ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix b/pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix index 5628d606a4524..44b0ff3863137 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix @@ -40,14 +40,6 @@ mkMesonLibrary (finalAttrs: { rapidcheck ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix b/pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix index bb5acb7c873da..51d52e935bf5c 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix @@ -46,14 +46,6 @@ mkMesonExecutable (finalAttrs: { gtest ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix b/pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix index afd01c3846e94..533dae9f253c7 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix @@ -77,14 +77,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ] ++ lib.optional enableGC boehmgc; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ (lib.mesonEnable "gc" enableGC) ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix b/pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix index f2680e9b3c1f7..1e379fc5ade24 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix @@ -44,14 +44,6 @@ mkMesonExecutable (finalAttrs: { gtest ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix b/pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix index b0aecd04979e2..3f52e987800e3 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix @@ -41,14 +41,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - meta = { platforms = lib.platforms.unix ++ lib.platforms.windows; }; diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix b/pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix index f0615a42798ee..1149508523e9f 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix @@ -38,14 +38,6 @@ mkMesonLibrary (finalAttrs: { nix-flake ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix b/pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix index f9d9b0bc0c6bd..714f3791ad904 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix @@ -46,14 +46,6 @@ mkMesonExecutable (finalAttrs: { gtest ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake/package.nix b/pkgs/tools/package-management/nix/2_26/src/libflake/package.nix index ebd38e140d302..5240ce5e39656 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libflake/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libflake/package.nix @@ -40,14 +40,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - meta = { platforms = lib.platforms.unix ++ lib.platforms.windows; }; diff --git a/pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix b/pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix index cf710e03b0d07..f019a917d360c 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix @@ -40,14 +40,6 @@ mkMesonLibrary (finalAttrs: { nix-main ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libmain/package.nix b/pkgs/tools/package-management/nix/2_26/src/libmain/package.nix index 046b505dfd46d..c03697c48dab6 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libmain/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libmain/package.nix @@ -37,14 +37,6 @@ mkMesonLibrary (finalAttrs: { openssl ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - meta = { platforms = lib.platforms.unix ++ lib.platforms.windows; }; diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix b/pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix index 89abeaab87063..fde17c78e0176 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix @@ -36,14 +36,6 @@ mkMesonLibrary (finalAttrs: { nix-store ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix b/pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix index 7cc29795c1903..ccac25ee16a21 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix @@ -40,14 +40,6 @@ mkMesonLibrary (finalAttrs: { rapidcheck ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix b/pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix index 670386c4a6ff3..b39ee7fa73c07 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix @@ -52,14 +52,6 @@ mkMesonExecutable (finalAttrs: { nix-store-test-support ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore/package.nix b/pkgs/tools/package-management/nix/2_26/src/libstore/package.nix index c982b44f0b738..31867d331b92b 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libstore/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libstore/package.nix @@ -69,14 +69,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ (lib.mesonEnable "seccomp-sandboxing" stdenv.hostPlatform.isLinux) diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix b/pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix index 72f57d6f9c62e..f26f57775d4f8 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix @@ -34,14 +34,6 @@ mkMesonLibrary (finalAttrs: { nix-util ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix b/pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix index 33cd5217defaf..fafd47c86c5e0 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix @@ -38,14 +38,6 @@ mkMesonLibrary (finalAttrs: { rapidcheck ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix b/pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix index d4eea3a8dc260..b8d54b76c42f5 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix @@ -46,14 +46,6 @@ mkMesonExecutable (finalAttrs: { gtest ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil/package.nix b/pkgs/tools/package-management/nix/2_26/src/libutil/package.nix index 586119a6e5d5e..47dcb54a26f85 100644 --- a/pkgs/tools/package-management/nix/2_26/src/libutil/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/libutil/package.nix @@ -52,17 +52,6 @@ mkMesonLibrary (finalAttrs: { nlohmann_json ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - # - # TODO: change release process to add `pre` in `.version`, remove it - # before tagging, and restore after. - '' - chmod u+w ./.version - echo ${version} > ../../.version - ''; - mesonFlags = [ (lib.mesonEnable "cpuid" stdenv.hostPlatform.isx86_64) ]; diff --git a/pkgs/tools/package-management/nix/2_26/src/nix/package.nix b/pkgs/tools/package-management/nix/2_26/src/nix/package.nix index 89c52c3bb0506..40a2804378504 100644 --- a/pkgs/tools/package-management/nix/2_26/src/nix/package.nix +++ b/pkgs/tools/package-management/nix/2_26/src/nix/package.nix @@ -91,18 +91,11 @@ mkMesonExecutable (finalAttrs: { nix-cmd ]; - preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../../.version - ''; - mesonFlags = [ ]; meta = { + mainProgram = "nix"; platforms = lib.platforms.unix ++ lib.platforms.windows; }; diff --git a/pkgs/tools/package-management/nix/2_26/tests/functional/package.nix b/pkgs/tools/package-management/nix/2_26/tests/functional/package.nix index 74c034196fde7..c479d6ca38d3a 100644 --- a/pkgs/tools/package-management/nix/2_26/tests/functional/package.nix +++ b/pkgs/tools/package-management/nix/2_26/tests/functional/package.nix @@ -75,16 +75,10 @@ mkMesonDerivation ( ]; preConfigure = - # "Inline" .version so it's not a symlink, and includes the suffix. - # Do the meson utils, without modification. - '' - chmod u+w ./.version - echo ${version} > ../../../.version - '' # TEMP hack for Meson before make is gone, where # `src/nix-functional-tests` is during the transition a symlink and # not the actual directory directory. - + '' + '' cd $(readlink -e $PWD) echo $PWD | grep tests/functional ''; @@ -106,5 +100,6 @@ mkMesonDerivation ( } // lib.optionalAttrs (test-daemon != null) { NIX_DAEMON_PACKAGE = test-daemon; + _NIX_TEST_CLIENT_VERSION = nix-cli.version; } ) diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index e44af2af21021..774b264abe1b3 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -162,6 +162,29 @@ let } pkg; + # (meson based packaging) + # Add passthru tests to the package, and re-expose package set overriding + # functions. This will not incorporate the tests into the package set. + # TODO (roberth): add package-set level overriding to the "everything" package. + addTests = selfAttributeName: pkg: + let + tests = + pkg.tests or {} + // import ./tests.nix { + inherit runCommand lib stdenv pkgs pkgsi686Linux pkgsStatic nixosTests; + inherit (pkg) version src; + nix = pkg; + self_attribute_name = selfAttributeName; + }; + in + # preserve old pkg, including overrideSource, etc + pkg // { + tests = pkg.tests or {} // tests; + passthru = pkg.passthru or {} // { + tests = lib.warn "nix.passthru.tests is deprecated. Use nix.tests instead." pkg.passthru.tests or {} // tests; + }; + }; + in lib.makeExtensible (self: ({ nix_2_3 = ((common { version = "2.3.18"; @@ -225,19 +248,8 @@ in lib.makeExtensible (self: ({ self_attribute_name = "nix_2_25"; }; - nix_2_26 = (callPackage ./2_26/componentized.nix { + nix_2_26 = addTests "nix_2_26" (callPackage ./2_26/componentized.nix { inherit libgit2-thin-packfile; - }).overrideAttrs (this: old: { - passthru = old.passthru or {} // { - tests = - old.passthru.tests or {} - // import ./tests.nix { - inherit runCommand lib stdenv pkgs pkgsi686Linux pkgsStatic nixosTests; - inherit (old) version src; - nix = this.finalPackage; - self_attribute_name = "nix_2_26"; - }; - }; }); git = common rec { From 0b47a5f6aa8bb61010c205b4277fe1580d802c92 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 20 Feb 2025 01:12:30 +0100 Subject: [PATCH 02/13] nixVersions.nix_2_26: Expose derivation system (cherry picked from commit 7402e825371fb1100fc6d18e2d1b6247bcb1fcfd) --- .../package-management/nix/2_26/packaging/everything.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index d8fc835f235d1..8eb5e71f59e7c 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -184,6 +184,12 @@ makeOutputs { inherit (nix-cli) version; # Should not be required inherit (drv) drvPath; + /** + The build platform's system string, used by Nix to dispatch derivations to the correct kinds of hosts. + + This particular attribute is _not_ used for that purpose, but it has the same value, and some other expressions expect it to be present. + */ + inherit (drv) system; tests = drv.tests or {}; src = patchedSrc; }; From 6435d054f629148e8bac3c029f45db9b04d3009a Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 20 Feb 2025 01:33:05 +0100 Subject: [PATCH 03/13] Format (cherry picked from commit 0812c9a321003c924868051d2b2e1934e8880f3f) --- pkgs/tools/package-management/nix/2_26/componentized.nix | 8 +++++++- .../package-management/nix/2_26/packaging/everything.nix | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/package-management/nix/2_26/componentized.nix b/pkgs/tools/package-management/nix/2_26/componentized.nix index 5759b4dc277cd..6889ff1edad08 100644 --- a/pkgs/tools/package-management/nix/2_26/componentized.nix +++ b/pkgs/tools/package-management/nix/2_26/componentized.nix @@ -26,7 +26,13 @@ let { otherSplices = generateSplicesForMkScope "nixComponents"; f = import ./packaging/components.nix { - inherit lib officialRelease pkgs src stdenv; + inherit + lib + officialRelease + pkgs + src + stdenv + ; }; }; diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index 8eb5e71f59e7c..317eb6166a31c 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -190,7 +190,7 @@ makeOutputs { This particular attribute is _not_ used for that purpose, but it has the same value, and some other expressions expect it to be present. */ inherit (drv) system; - tests = drv.tests or {}; + tests = drv.tests or { }; src = patchedSrc; }; outputs = { From bf9170e345bb70ae87a9bfd439a7a2973f483ad7 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 1 Mar 2025 12:14:14 +0100 Subject: [PATCH 04/13] nixVersions.nix_2_26: Use a multi-output derivation More or less https://github.com/NixOS/nix/pull/12582 and a few cleanups. (will upstream) (cherry picked from commit 2850cb73660db33ec3774fac4332b84a794cd3c8) --- .../nix/2_26/packaging/everything.nix | 317 ++++++++---------- 1 file changed, 142 insertions(+), 175 deletions(-) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index 317eb6166a31c..b1b53c4c885ca 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -1,6 +1,7 @@ { lib, stdenv, + lndir, buildEnv, nix-util, @@ -38,7 +39,6 @@ nix-perl-bindings, testers, - runCommand, patchedSrc ? null, }: @@ -70,50 +70,6 @@ let ; }; - dev = stdenv.mkDerivation (finalAttrs: { - name = "nix-${nix-cli.version}-dev"; - pname = "nix"; - version = nix-cli.version; - dontUnpack = true; - dontBuild = true; - libs = map lib.getDev (lib.attrValues libs); - nix = nix-cli; - installPhase = '' - mkdir -p $out/nix-support - echo $libs >> $out/nix-support/propagated-build-inputs - echo $nix >> $out/nix-support/propagated-build-inputs - ''; - passthru = { - tests = { - pkg-config = testers.hasPkgConfigModules { - package = finalAttrs.finalPackage; - }; - }; - - # If we were to fully emulate output selection here, we'd confuse the Nix CLIs, - # because they rely on `drvPath`. - dev = finalAttrs.finalPackage.out; - - libs = throw "`nix.dev.libs` is not meant to be used; use `nix.libs` instead."; - }; - meta = { - mainProgram = "nix"; - pkgConfigModules = [ - "nix-cmd" - "nix-expr" - "nix-expr-c" - "nix-fetchers" - "nix-flake" - "nix-flake-c" - "nix-main" - "nix-main-c" - "nix-store" - "nix-store-c" - "nix-util" - "nix-util-c" - ]; - }; - }); devdoc = buildEnv { name = "nix-${nix-cli.version}-devdoc"; paths = [ @@ -122,147 +78,158 @@ let ]; }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "nix"; + version = nix-cli.version; + /** - Produce a set of derivation outputs that implement the multiple outputs interface. + This package uses a multi-output derivation, even though some outputs could + have been provided directly by the constituent component that provides it. - The multiple outputs interface was originally designed for derivations with - multiple outputs, but it can also be used for packages which do not correspond - 1:1 to a single derivation and whose outputs come from distinct derivations. + This is because not all tooling handles packages composed of arbitrary + outputs yet. This includes nix itself, https://github.com/NixOS/nix/issues/6507. + + `devdoc` is also available, but not listed here, because this attribute is + not an output of the same derivation that provides `out`, `dev`, etc. */ - makeOutputs = - { - outputs, - defaultOutput ? "out", - extraAttrs ? outputName: value: { }, - }: + outputs = [ + "out" + "dev" + "doc" + "man" + ]; - let - prepOutput = - outputName: value: - { - _type = "package"; - /** - For compatibility. The outputs of this package may not actually be implemented using a single derivation. - */ - type = "derivation"; - outputName = outputName; - outPath = value.outPath or value; - } - // extraAttrs outputName value; - - outputAttrs = lib.mapAttrs ( - outputName: value: { outputSpecified = true; } // prepOutput outputName value // commonAttrs - ) outputs; - - # This is without `outputSpecified`, but otherwise matches the `outputAttrs` above. - defaultOutputValue = prepOutput defaultOutput outputs.${defaultOutput} // commonAttrs; - - commonAttrs = { - outputs = builtins.attrNames outputs; - } // outputAttrs; + /** + Unpacking is handled in this package's constituent components + */ + dontUnpack = true; + /** + Building is handled in this package's constituent components + */ + dontBuild = true; - in - defaultOutputValue; + /** + `doCheck` controles whether tests are added as build gate for the combined package. + This includes both the unit tests and the functional tests, but not the + integration tests that run in CI (the flake's `hydraJobs` and some of the `checks`). + */ + doCheck = true; -in + /** + `fixupPhase` currently doesn't understand that a symlink output isn't writable. -makeOutputs { - extraAttrs = outputName: drv: { - meta = drv.meta // { - description = "The Nix package manager"; - pkgConfigModules = dev.meta.pkgConfigModules; - outputsToInstall = [ - # man is symlinked - "out" + We don't compile or link anything in this derivation, so fixups aren't needed. + */ + dontFixup = true; + + checkInputs = + [ + # Make sure the unit tests have passed + nix-util-tests.tests.run + nix-store-tests.tests.run + nix-expr-tests.tests.run + nix-fetchers-tests.tests.run + nix-flake-tests.tests.run + + # Make sure the functional tests have passed + nix-functional-tests + ] + ++ lib.optionals + (!stdenv.hostPlatform.isStatic && stdenv.buildPlatform.canExecute stdenv.hostPlatform) + [ + # Perl currently fails in static build + # TODO: Split out tests into a separate derivation? + nix-perl-bindings ]; - }; - internals = drv; - name = "nix"; - overrideAttrs = - _: - throw "The nix package does not support overrideAttrs, because it has been split into multiple derivations. Instead, you may call attributes such as overrideSource, appendPatches or overrideAllMesonComponents."; + + nativeBuildInputs = [ + lndir + ]; + + installPhase = + let + devPaths = lib.mapAttrsToList (_k: lib.getDev) finalAttrs.finalPackage.libs; + in + '' + mkdir -p $out $dev/nix-support $doc $man + + # Custom files + echo $libs >> $dev/nix-support/propagated-build-inputs + echo ${nix-cli} >> $dev/nix-support/propagated-build-inputs + + # Merged outputs + lndir ${nix-cli} $out + ( + libs=( ${lib.escapeShellArgs devPaths} ) + for lib in $libs; do + lndir $lib $dev + done + ) + + # Forwarded outputs + ln -s ${nix-manual} $doc + ln -s ${nix-manual.man} $man + ''; + + passthru = { inherit (nix-cli) version; - # Should not be required - inherit (drv) drvPath; + src = patchedSrc; + /** - The build platform's system string, used by Nix to dispatch derivations to the correct kinds of hosts. + These are the libraries that are part of the Nix project. They are used + by the Nix CLI and other tools. + + If you need to use these libraries in your project, we recommend to use + the `-c` C API libraries exclusively, if possible. - This particular attribute is _not_ used for that purpose, but it has the same value, and some other expressions expect it to be present. + We also recommend that you build the complete package to ensure that the unit tests pass. + You could do this in CI, or by passing it in an unused environment variable. e.g in a `mkDerivation` call: + + ```nix + buildInputs = [ nix.libs.nix-util-c nix.libs.nix-store-c ]; + # Make sure the nix libs we use are ok + unusedInputsForTests = [ nix ]; + disallowedReferences = nix.all; + ``` */ - inherit (drv) system; - tests = drv.tests or { }; - src = patchedSrc; + inherit libs; + + /** + Developer documentation for `nix`, in `share/doc/nix/{internal,external}-api/`. + + This is not a proper output; see `outputs` for context. + */ + inherit devdoc; + + /** + Extra tests that test this package, but do not run as part of the build. + See + */ + tests = { + pkg-config = testers.hasPkgConfigModules { + package = finalAttrs.finalPackage; + }; + }; }; - outputs = { - inherit dev devdoc; - doc = nix-manual; - out = - (buildEnv { - name = "nix-${nix-cli.version}"; - paths = [ - nix-cli - nix-manual.man - ]; - meta.mainProgram = "nix"; - }).overrideAttrs - ( - finalAttrs: prevAttrs: { - doCheck = true; - doInstallCheck = true; - - checkInputs = - [ - # Make sure the unit tests have passed - nix-util-tests.tests.run - nix-store-tests.tests.run - nix-expr-tests.tests.run - nix-fetchers-tests.tests.run - nix-flake-tests.tests.run - - # Make sure the functional tests have passed - nix-functional-tests - - # dev bundle is ok - # (checkInputs must be empty paths??) - (runCommand "check-pkg-config" { checked = dev.tests.pkg-config; } "mkdir $out") - ] - ++ lib.optionals - (!stdenv.hostPlatform.isStatic && stdenv.buildPlatform.canExecute stdenv.hostPlatform) - [ - # Perl currently fails in static build - # TODO: Split out tests into a separate derivation? - nix-perl-bindings - ]; - passthru = prevAttrs.passthru // { - inherit (nix-cli) version; - - /** - These are the libraries that are part of the Nix project. They are used - by the Nix CLI and other tools. - - If you need to use these libraries in your project, we recommend to use - the `-c` C API libraries exclusively, if possible. - - We also recommend that you build the complete package to ensure that the unit tests pass. - You could do this in CI, or by passing it in an unused environment variable. e.g in a `mkDerivation` call: - - ```nix - buildInputs = [ nix.libs.nix-util-c nix.libs.nix-store-c ]; - # Make sure the nix libs we use are ok - unusedInputsForTests = [ nix ]; - disallowedReferences = nix.all; - ``` - */ - inherit libs; - - tests = prevAttrs.passthru.tests or { } // { - # TODO: create a proper fixpoint and: - pkg-config = testers.hasPkgConfigModules { - package = finalAttrs.finalPackage; - }; - }; - }; - } - ); + + meta = { + mainProgram = "nix"; + description = "The Nix package manager"; + pkgConfigModules = [ + "nix-cmd" + "nix-expr" + "nix-expr-c" + "nix-fetchers" + "nix-flake" + "nix-flake-c" + "nix-main" + "nix-main-c" + "nix-store" + "nix-store-c" + "nix-util" + "nix-util-c" + ]; }; -} + +}) From 20201d8f62dd3b2ae7e55c96fc817a3caf6ce026 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 1 Mar 2025 17:02:17 +0100 Subject: [PATCH 05/13] nixVersions.nix_2_26: Refactor rename nixDefaultsLayer (cherry picked from commit 965a81e391c91b6b242828752ed66bb4f99a2d0d) --- .../package-management/nix/2_26/packaging/components.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/2_26/packaging/components.nix index 8b027591e6ed8..c7bcce70d2e22 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/components.nix @@ -172,7 +172,7 @@ let mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ]; }; - miscGoodPractice = finalAttrs: prevAttrs: { + nixDefaultsLayer = finalAttrs: prevAttrs: { strictDeps = prevAttrs.strictDeps or true; enableParallelBuilding = true; }; @@ -276,14 +276,14 @@ in (scope.overrideSource "${./..}").appendPatches patches; mkMesonDerivation = mkPackageBuilder [ - miscGoodPractice + nixDefaultsLayer scope.sourceLayer setVersionLayer mesonLayer scope.mesonComponentOverrides ]; mkMesonExecutable = mkPackageBuilder [ - miscGoodPractice + nixDefaultsLayer bsdNoLinkAsNeeded scope.sourceLayer setVersionLayer @@ -292,7 +292,7 @@ in scope.mesonComponentOverrides ]; mkMesonLibrary = mkPackageBuilder [ - miscGoodPractice + nixDefaultsLayer bsdNoLinkAsNeeded scope.sourceLayer mesonLayer From 5cf73de71729c104ed87ecf32fab9a1191bd78f8 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 1 Mar 2025 17:29:44 +0100 Subject: [PATCH 06/13] nixVersions.nix_2_26: Improve meta (cherry picked from commit 677054fccb27b4ce1462395e805db76d03a71137) --- .../nix/2_26/packaging/components.nix | 16 ++++++++++++++++ .../nix/2_26/packaging/everything.nix | 9 +++++++++ 2 files changed, 25 insertions(+) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/2_26/packaging/components.nix index c7bcce70d2e22..b964bd3f28e61 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/components.nix @@ -175,6 +175,21 @@ let nixDefaultsLayer = finalAttrs: prevAttrs: { strictDeps = prevAttrs.strictDeps or true; enableParallelBuilding = true; + pos = builtins.unsafeGetAttrPos "pname" prevAttrs; + meta = prevAttrs.meta or { } // { + homepage = prevAttrs.meta.homepage or "https://nixos.org/nix"; + longDescription = + prevAttrs.longDescription or '' + Nix is a powerful package manager for mainly Linux and other Unix systems that + makes package management reliable and reproducible. It provides atomic + upgrades and rollbacks, side-by-side installation of multiple versions of + a package, multi-user package management and easy setup of build + environments. + ''; + license = prevAttrs.meta.license or lib.licenses.lgpl21Plus; + maintainers = prevAttrs.meta.maintainers or [ ] ++ lib.teams.nix.members; + platforms = prevAttrs.meta.platforms or (lib.platforms.unix ++ lib.platforms.windows); + }; }; /** @@ -194,6 +209,7 @@ in { version = baseVersion + versionSuffix; inherit versionSuffix; + maintainers = lib.teams.nix.members; inherit filesetToSource; diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index b1b53c4c885ca..e4edb4a1c19bf 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -216,6 +216,15 @@ stdenv.mkDerivation (finalAttrs: { meta = { mainProgram = "nix"; description = "The Nix package manager"; + longDescription = nix-cli.meta.longDescription; + homepage = nix-cli.meta.homepage; + license = nix-cli.meta.license; + maintainers = lib.teams.nix.members; + platforms = nix-cli.meta.platforms; + outputsToInstall = [ + "out" + "man" + ]; pkgConfigModules = [ "nix-cmd" "nix-expr" From 4aabb849fd6f41e1ba2e73507c0f20e7d3cba692 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 3 Mar 2025 15:23:30 +0100 Subject: [PATCH 07/13] nixVersions.nix_2_26: Fix lndir calls on darwin (cherry picked from commit 54c0d44805ee9f84a1cfb412fa43cd97f4c7928e) --- .../nix/2_26/packaging/everything.nix | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index e4edb4a1c19bf..354eeef8f57f0 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -160,12 +160,10 @@ stdenv.mkDerivation (finalAttrs: { # Merged outputs lndir ${nix-cli} $out - ( - libs=( ${lib.escapeShellArgs devPaths} ) - for lib in $libs; do - lndir $lib $dev - done - ) + + for lib in ${lib.escapeShellArgs devPaths}; do + lndir $lib $dev + done # Forwarded outputs ln -s ${nix-manual} $doc From fbe38e860e3adc013d9966ff538adef9b41a4d34 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 3 Mar 2025 15:24:18 +0100 Subject: [PATCH 08/13] nixVersions.nix_2_26: Add libs to propagated-build-inputs (cherry picked from commit 375ef884db98a8147896f2e623155b5dd8a72422) --- pkgs/tools/package-management/nix/2_26/packaging/everything.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix index 354eeef8f57f0..0ff50ab5862ce 100644 --- a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/2_26/packaging/everything.nix @@ -156,7 +156,7 @@ stdenv.mkDerivation (finalAttrs: { # Custom files echo $libs >> $dev/nix-support/propagated-build-inputs - echo ${nix-cli} >> $dev/nix-support/propagated-build-inputs + echo ${nix-cli} ${lib.escapeShellArgs devPaths} >> $dev/nix-support/propagated-build-inputs # Merged outputs lndir ${nix-cli} $out From 101239197c1c9b2bdcab0ff34a28849c5d833cb0 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 7 Mar 2025 14:28:01 +0100 Subject: [PATCH 09/13] Move nix/2_26 -> nix/vendor/2_26 (cherry picked from commit 56515d0f7783cd0dbd5e4a4919bd925da4a7cbf5) --- pkgs/tools/package-management/nix/{ => vendor}/2_26/.version | 0 .../package-management/nix/{ => vendor}/2_26/componentized.nix | 0 .../package-management/nix/{ => vendor}/2_26/dependencies.nix | 0 .../nix/{ => vendor}/2_26/doc/manual/package.nix | 0 .../nix/{ => vendor}/2_26/packaging/components.nix | 0 .../nix/{ => vendor}/2_26/packaging/everything.nix | 0 pkgs/tools/package-management/nix/{ => vendor}/2_26/source.json | 0 .../nix/{ => vendor}/2_26/src/external-api-docs/package.nix | 0 .../nix/{ => vendor}/2_26/src/internal-api-docs/package.nix | 0 .../nix/{ => vendor}/2_26/src/libcmd/package.nix | 0 .../nix/{ => vendor}/2_26/src/libexpr-c/package.nix | 0 .../nix/{ => vendor}/2_26/src/libexpr-test-support/package.nix | 0 .../nix/{ => vendor}/2_26/src/libexpr-tests/package.nix | 0 .../nix/{ => vendor}/2_26/src/libexpr/package.nix | 0 .../nix/{ => vendor}/2_26/src/libfetchers-tests/package.nix | 0 .../nix/{ => vendor}/2_26/src/libfetchers/package.nix | 0 .../nix/{ => vendor}/2_26/src/libflake-c/package.nix | 0 .../nix/{ => vendor}/2_26/src/libflake-tests/package.nix | 0 .../nix/{ => vendor}/2_26/src/libflake/package.nix | 0 .../nix/{ => vendor}/2_26/src/libmain-c/package.nix | 0 .../nix/{ => vendor}/2_26/src/libmain/package.nix | 0 .../nix/{ => vendor}/2_26/src/libstore-c/package.nix | 0 .../nix/{ => vendor}/2_26/src/libstore-test-support/package.nix | 0 .../nix/{ => vendor}/2_26/src/libstore-tests/package.nix | 0 .../nix/{ => vendor}/2_26/src/libstore/package.nix | 0 .../nix/{ => vendor}/2_26/src/libutil-c/package.nix | 0 .../nix/{ => vendor}/2_26/src/libutil-test-support/package.nix | 0 .../nix/{ => vendor}/2_26/src/libutil-tests/package.nix | 0 .../nix/{ => vendor}/2_26/src/libutil/package.nix | 0 .../package-management/nix/{ => vendor}/2_26/src/nix/package.nix | 0 .../package-management/nix/{ => vendor}/2_26/src/perl/package.nix | 0 .../nix/{ => vendor}/2_26/tests/functional/package.nix | 0 32 files changed, 0 insertions(+), 0 deletions(-) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/.version (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/componentized.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/dependencies.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/doc/manual/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/packaging/components.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/packaging/everything.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/source.json (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/external-api-docs/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/internal-api-docs/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libcmd/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libexpr-c/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libexpr-test-support/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libexpr-tests/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libexpr/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libfetchers-tests/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libfetchers/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libflake-c/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libflake-tests/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libflake/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libmain-c/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libmain/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libstore-c/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libstore-test-support/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libstore-tests/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libstore/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libutil-c/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libutil-test-support/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libutil-tests/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/libutil/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/nix/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/src/perl/package.nix (100%) rename pkgs/tools/package-management/nix/{ => vendor}/2_26/tests/functional/package.nix (100%) diff --git a/pkgs/tools/package-management/nix/2_26/.version b/pkgs/tools/package-management/nix/vendor/2_26/.version similarity index 100% rename from pkgs/tools/package-management/nix/2_26/.version rename to pkgs/tools/package-management/nix/vendor/2_26/.version diff --git a/pkgs/tools/package-management/nix/2_26/componentized.nix b/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/componentized.nix rename to pkgs/tools/package-management/nix/vendor/2_26/componentized.nix diff --git a/pkgs/tools/package-management/nix/2_26/dependencies.nix b/pkgs/tools/package-management/nix/vendor/2_26/dependencies.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/dependencies.nix rename to pkgs/tools/package-management/nix/vendor/2_26/dependencies.nix diff --git a/pkgs/tools/package-management/nix/2_26/doc/manual/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/doc/manual/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/doc/manual/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/doc/manual/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/packaging/components.nix rename to pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix diff --git a/pkgs/tools/package-management/nix/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/packaging/everything.nix rename to pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix diff --git a/pkgs/tools/package-management/nix/2_26/source.json b/pkgs/tools/package-management/nix/vendor/2_26/source.json similarity index 100% rename from pkgs/tools/package-management/nix/2_26/source.json rename to pkgs/tools/package-management/nix/vendor/2_26/source.json diff --git a/pkgs/tools/package-management/nix/2_26/src/external-api-docs/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/external-api-docs/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/external-api-docs/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/external-api-docs/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/internal-api-docs/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/internal-api-docs/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/internal-api-docs/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/internal-api-docs/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libcmd/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libcmd/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libcmd/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-c/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libexpr-c/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-c/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-test-support/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libexpr-test-support/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-test-support/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-tests/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libexpr-tests/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libexpr-tests/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libexpr/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libexpr/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libexpr/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libfetchers-tests/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libfetchers-tests/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libfetchers-tests/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libfetchers/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libfetchers/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libfetchers/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libflake-c/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libflake-c/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libflake-c/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libflake-tests/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libflake-tests/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libflake-tests/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libflake/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libflake/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libflake/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libflake/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libmain-c/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libmain-c/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libmain-c/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libmain/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libmain/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libmain/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libmain/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libstore-c/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libstore-c/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libstore-c/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libstore-test-support/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libstore-test-support/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libstore-test-support/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libstore-tests/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libstore-tests/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libstore-tests/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libstore/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libstore/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libstore/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libstore/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libutil-c/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libutil-c/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libutil-c/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libutil-test-support/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libutil-test-support/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libutil-test-support/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libutil-tests/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libutil-tests/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libutil-tests/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/libutil/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/libutil/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/libutil/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/libutil/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/nix/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/nix/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/nix/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/nix/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/src/perl/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/src/perl/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/src/perl/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/src/perl/package.nix diff --git a/pkgs/tools/package-management/nix/2_26/tests/functional/package.nix b/pkgs/tools/package-management/nix/vendor/2_26/tests/functional/package.nix similarity index 100% rename from pkgs/tools/package-management/nix/2_26/tests/functional/package.nix rename to pkgs/tools/package-management/nix/vendor/2_26/tests/functional/package.nix From 3bb3367baea8811b672b89b81f16724c8689c038 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 7 Mar 2025 14:33:16 +0100 Subject: [PATCH 10/13] nixVersions.nix_2_26: 2.26.1 -> 2.26.3 (cherry picked from commit 7be664a75c5ba2f03102965afa3890081456cd51) --- pkgs/tools/package-management/nix/default.nix | 2 +- pkgs/tools/package-management/nix/vendor/2_26/.version | 2 +- pkgs/tools/package-management/nix/vendor/2_26/source.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index 774b264abe1b3..3ea05880b31a3 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -248,7 +248,7 @@ in lib.makeExtensible (self: ({ self_attribute_name = "nix_2_25"; }; - nix_2_26 = addTests "nix_2_26" (callPackage ./2_26/componentized.nix { + nix_2_26 = addTests "nix_2_26" (callPackage ./vendor/2_26/componentized.nix { inherit libgit2-thin-packfile; }); diff --git a/pkgs/tools/package-management/nix/vendor/2_26/.version b/pkgs/tools/package-management/nix/vendor/2_26/.version index 53effa101a050..90f3e72b6118a 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/.version +++ b/pkgs/tools/package-management/nix/vendor/2_26/.version @@ -1 +1 @@ -2.26.1 \ No newline at end of file +2.26.3 \ No newline at end of file diff --git a/pkgs/tools/package-management/nix/vendor/2_26/source.json b/pkgs/tools/package-management/nix/vendor/2_26/source.json index 09afd9c0640ff..e8070d9b0dd19 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/source.json +++ b/pkgs/tools/package-management/nix/vendor/2_26/source.json @@ -1,6 +1,6 @@ { "owner": "NixOS", "repo": "nix", - "rev": "36bd92736faaf81c6af3dff8f560963eb4e76b14", - "hash": "sha256-1T7WRNfUMsiiNB77BuHElzjavguL8oJx+wBtfMcobq8=" + "rev": "42fc03dd1f12df2d9152303f3fb8bf22b746462c", + "hash": "sha256-5ZV8YqU8mfFmoAMiUEuBqNwk0T3vUR//x1D12BiYCeY=" } From 47a81db5e619e4271f105bb67e713f5d16e3e8a5 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 7 Mar 2025 14:45:29 +0100 Subject: [PATCH 11/13] nixVersions.nix_2_26: Apply nix#12557 use correct stdenv See https://github.com/NixOS/nix/pull/12557 (cherry picked from commit e4d9c996fb3b7598cbc302ee3c8517a0c315b7ec) --- .../nix/vendor/2_26/componentized.nix | 1 - .../nix/vendor/2_26/packaging/components.nix | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix b/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix index 6889ff1edad08..6ad95233f8792 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix @@ -31,7 +31,6 @@ let officialRelease pkgs src - stdenv ; }; }; diff --git a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix index b964bd3f28e61..38af5a5c6a1df 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix @@ -2,7 +2,6 @@ lib, pkgs, src, - stdenv, officialRelease, }: @@ -12,6 +11,15 @@ let inherit (scope) callPackage ; + inherit + (scope.callPackage ( + { stdenv }: + { + inherit stdenv; + } + ) { }) + stdenv + ; inherit (pkgs.buildPackages) meson ninja From 72f7256ad5b5093cd76f0a03097fdd7975b55895 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 7 Mar 2025 15:37:07 +0100 Subject: [PATCH 12/13] nixVersions.nix_2_26: Typo https://github.com/NixOS/nix/pull/12600 (cherry picked from commit 8f38b56e2000e18717fb69101c2c9c3c61fea0ec) --- .../package-management/nix/vendor/2_26/packaging/components.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix index 38af5a5c6a1df..98a2f1026bea4 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix @@ -51,7 +51,7 @@ let setVersionLayer = finalAttrs: prevAttrs: { preConfigure = - prevAttrs.prevAttrs or "" + prevAttrs.preConfigure or "" + # Update the repo-global .version file. # Symlink ./.version points there, but by default only workDir is writable. From a430022c7cae7f0bb2237e8be129ae2dbbe7c941 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Fri, 7 Mar 2025 16:09:17 +0100 Subject: [PATCH 13/13] nixVersions.nix_2_26: Add maintainers to scope, use nix_2_24 maintainers (cherry picked from commit 2be4c2c054af250afdcf1edc415ff5a593473695) --- pkgs/tools/package-management/nix/default.nix | 1 + .../package-management/nix/vendor/2_26/componentized.nix | 2 ++ .../nix/vendor/2_26/packaging/components.nix | 5 +++-- .../nix/vendor/2_26/packaging/everything.nix | 4 +++- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index 3ea05880b31a3..6dc26a527f378 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -249,6 +249,7 @@ in lib.makeExtensible (self: ({ }; nix_2_26 = addTests "nix_2_26" (callPackage ./vendor/2_26/componentized.nix { + inherit (self.nix_2_24.meta) maintainers; inherit libgit2-thin-packfile; }); diff --git a/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix b/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix index 6ad95233f8792..05eaffeccff35 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/componentized.nix @@ -7,6 +7,7 @@ pkgs, stdenv, libgit2-thin-packfile, + maintainers, ... }: let @@ -28,6 +29,7 @@ let f = import ./packaging/components.nix { inherit lib + maintainers officialRelease pkgs src diff --git a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix index 98a2f1026bea4..f65370e12490a 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/packaging/components.nix @@ -3,6 +3,7 @@ pkgs, src, officialRelease, + maintainers, }: scope: @@ -195,7 +196,7 @@ let environments. ''; license = prevAttrs.meta.license or lib.licenses.lgpl21Plus; - maintainers = prevAttrs.meta.maintainers or [ ] ++ lib.teams.nix.members; + maintainers = prevAttrs.meta.maintainers or [ ] ++ scope.maintainers; platforms = prevAttrs.meta.platforms or (lib.platforms.unix ++ lib.platforms.windows); }; }; @@ -217,7 +218,7 @@ in { version = baseVersion + versionSuffix; inherit versionSuffix; - maintainers = lib.teams.nix.members; + inherit maintainers; inherit filesetToSource; diff --git a/pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix b/pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix index 0ff50ab5862ce..aab58cc825097 100644 --- a/pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix +++ b/pkgs/tools/package-management/nix/vendor/2_26/packaging/everything.nix @@ -4,6 +4,8 @@ lndir, buildEnv, + maintainers, + nix-util, nix-util-c, nix-util-tests, @@ -217,7 +219,7 @@ stdenv.mkDerivation (finalAttrs: { longDescription = nix-cli.meta.longDescription; homepage = nix-cli.meta.homepage; license = nix-cli.meta.license; - maintainers = lib.teams.nix.members; + maintainers = maintainers; platforms = nix-cli.meta.platforms; outputsToInstall = [ "out"