From f01573b6ee8236636696c4b916065dbded60ff0f Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Thu, 18 Jul 2024 23:33:29 +0200 Subject: [PATCH] doc: Prevent evaluation warnings Problem: `nix-build doc` gives a bunch of warnings because it inspects `lib` to figure out where all the symbols are. Solution: Move the step of figuring out where the symbols are to a Nix evaluation inside a derivation instead. --- doc/doc-support/lib-function-docs.nix | 23 ++++++++++++++-------- doc/doc-support/lib-function-locations.nix | 17 ++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/doc/doc-support/lib-function-docs.nix b/doc/doc-support/lib-function-docs.nix index 5faa99b3e89e0..9e1fdedd2cb9f 100644 --- a/doc/doc-support/lib-function-docs.nix +++ b/doc/doc-support/lib-function-docs.nix @@ -4,24 +4,31 @@ with pkgs; -let - locationsJSON = import ./lib-function-locations.nix { inherit pkgs nixpkgs libsets; }; -in stdenv.mkDerivation { name = "nixpkgs-lib-docs"; - src = ../../lib; + src = pkgs.lib.fileset.toSource { + root = ../..; + fileset = ../../lib; + }; - buildInputs = [ nixdoc ]; + buildInputs = [ nixdoc nix ]; installPhase = '' + export NIX_STATE_DIR=$(mktemp -d) + nix-instantiate --eval --strict --json ${./lib-function-locations.nix} \ + --arg nixpkgsPath "./." \ + --argstr revision ${nixpkgs.rev or "master"} \ + --argstr libsetsJSON ${pkgs.lib.escapeShellArg (builtins.toJSON libsets)} \ + > locations.json + function docgen { name=$1 baseName=$2 description=$3 # TODO: wrap lib.$name in , make nixdoc not escape it - if [[ -e "../lib/$baseName.nix" ]]; then - nixdoc -c "$name" -d "lib.$name: $description" -l ${locationsJSON} -f "$baseName.nix" > "$out/$name.md" + if [[ -e "lib/$baseName.nix" ]]; then + nixdoc -c "$name" -d "lib.$name: $description" -l locations.json -f "lib/$baseName.nix" > "$out/$name.md" else - nixdoc -c "$name" -d "lib.$name: $description" -l ${locationsJSON} -f "$baseName/default.nix" > "$out/$name.md" + nixdoc -c "$name" -d "lib.$name: $description" -l locations.json -f "lib/$baseName/default.nix" > "$out/$name.md" fi echo "$out/$name.md" >> "$out/index.md" } diff --git a/doc/doc-support/lib-function-locations.nix b/doc/doc-support/lib-function-locations.nix index e6794617fdd89..feab0bce0b245 100644 --- a/doc/doc-support/lib-function-locations.nix +++ b/doc/doc-support/lib-function-locations.nix @@ -1,13 +1,14 @@ -{ pkgs, nixpkgs ? { }, libsets }: +{ nixpkgsPath, revision, libsetsJSON }: let - revision = pkgs.lib.trivial.revisionWithDefault (nixpkgs.rev or "master"); + lib = import (nixpkgsPath + "/lib"); + libsets = builtins.fromJSON libsetsJSON; libDefPos = prefix: set: builtins.concatMap (name: [{ name = builtins.concatStringsSep "." (prefix ++ [name]); location = builtins.unsafeGetAttrPos name set; - }] ++ nixpkgsLib.optionals + }] ++ lib.optionals (builtins.length prefix == 0 && builtins.isAttrs set.${name}) (libDefPos (prefix ++ [name]) set.${name}) ) (builtins.attrNames set); @@ -20,8 +21,6 @@ let }) (builtins.map (x: x.name) libsets); - nixpkgsLib = pkgs.lib; - flattenedLibSubset = { subsetname, functions }: builtins.map (fn: { @@ -38,13 +37,13 @@ let substr = builtins.substring prefixLen filenameLen filename; in substr; - removeNixpkgs = removeFilenamePrefix (builtins.toString pkgs.path); + removeNixpkgs = removeFilenamePrefix (builtins.toString nixpkgsPath); liblocations = builtins.filter (elem: elem.value != null) - (nixpkgsLib.lists.flatten - (locatedlibsets nixpkgsLib)); + (lib.lists.flatten + (locatedlibsets lib)); fnLocationRelative = { name, value }: { @@ -72,4 +71,4 @@ let relativeLocs); in -pkgs.writeText "locations.json" (builtins.toJSON jsonLocs) +jsonLocs