2022-12-28 21:21:41 +00:00
|
|
|
{ pkgs, nixpkgs ? { }, libsets }:
|
2020-04-24 23:36:52 +00:00
|
|
|
let
|
|
|
|
revision = pkgs.lib.trivial.revisionWithDefault (nixpkgs.revision or "master");
|
|
|
|
|
2023-01-11 07:51:40 +00:00
|
|
|
libDefPos = prefix: set:
|
|
|
|
builtins.concatMap
|
|
|
|
(name: [{
|
|
|
|
name = builtins.concatStringsSep "." (prefix ++ [name]);
|
2020-04-24 23:36:52 +00:00
|
|
|
location = builtins.unsafeGetAttrPos name set;
|
2023-01-11 07:51:40 +00:00
|
|
|
}] ++ nixpkgsLib.optionals
|
|
|
|
(builtins.length prefix == 0 && builtins.isAttrs set.${name})
|
|
|
|
(libDefPos (prefix ++ [name]) set.${name})
|
|
|
|
) (builtins.attrNames set);
|
2020-04-24 23:36:52 +00:00
|
|
|
|
|
|
|
libset = toplib:
|
|
|
|
builtins.map
|
|
|
|
(subsetname: {
|
|
|
|
subsetname = subsetname;
|
2023-01-11 07:51:40 +00:00
|
|
|
functions = libDefPos [] toplib.${subsetname};
|
2020-04-24 23:36:52 +00:00
|
|
|
})
|
2022-12-28 21:21:41 +00:00
|
|
|
(builtins.map (x: x.name) libsets);
|
2020-04-24 23:36:52 +00:00
|
|
|
|
|
|
|
nixpkgsLib = pkgs.lib;
|
|
|
|
|
|
|
|
flattenedLibSubset = { subsetname, functions }:
|
|
|
|
builtins.map
|
|
|
|
(fn: {
|
|
|
|
name = "lib.${subsetname}.${fn.name}";
|
|
|
|
value = fn.location;
|
|
|
|
})
|
|
|
|
functions;
|
|
|
|
|
|
|
|
locatedlibsets = libs: builtins.map flattenedLibSubset (libset libs);
|
|
|
|
removeFilenamePrefix = prefix: filename:
|
|
|
|
let
|
|
|
|
prefixLen = (builtins.stringLength prefix) + 1; # +1 to remove the leading /
|
|
|
|
filenameLen = builtins.stringLength filename;
|
|
|
|
substr = builtins.substring prefixLen filenameLen filename;
|
|
|
|
in substr;
|
|
|
|
|
|
|
|
removeNixpkgs = removeFilenamePrefix (builtins.toString pkgs.path);
|
|
|
|
|
|
|
|
liblocations =
|
|
|
|
builtins.filter
|
|
|
|
(elem: elem.value != null)
|
|
|
|
(nixpkgsLib.lists.flatten
|
|
|
|
(locatedlibsets nixpkgsLib));
|
|
|
|
|
|
|
|
fnLocationRelative = { name, value }:
|
|
|
|
{
|
|
|
|
inherit name;
|
|
|
|
value = value // { file = removeNixpkgs value.file; };
|
|
|
|
};
|
|
|
|
|
|
|
|
relativeLocs = (builtins.map fnLocationRelative liblocations);
|
|
|
|
sanitizeId = builtins.replaceStrings
|
|
|
|
[ "'" ]
|
|
|
|
[ "-prime" ];
|
|
|
|
|
|
|
|
urlPrefix = "https://github.com/NixOS/nixpkgs/blob/${revision}";
|
|
|
|
xmlstrings = (nixpkgsLib.strings.concatMapStrings
|
|
|
|
({ name, value }:
|
|
|
|
''
|
|
|
|
<section><title>${name}</title>
|
|
|
|
<para xml:id="${sanitizeId name}">
|
|
|
|
Located at
|
|
|
|
<link
|
|
|
|
xlink:href="${urlPrefix}/${value.file}#L${builtins.toString value.line}">${value.file}:${builtins.toString value.line}</link>
|
|
|
|
in <literal><nixpkgs></literal>.
|
|
|
|
</para>
|
|
|
|
</section>
|
|
|
|
'')
|
|
|
|
relativeLocs);
|
|
|
|
|
|
|
|
in pkgs.writeText
|
|
|
|
"locations.xml"
|
|
|
|
''
|
|
|
|
<section xmlns="http://docbook.org/ns/docbook"
|
|
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
|
version="5">
|
|
|
|
<title>All the locations for every lib function</title>
|
|
|
|
<para>This file is only for inclusion by other files.</para>
|
|
|
|
${xmlstrings}
|
|
|
|
</section>
|
|
|
|
''
|