3
0
Fork 0
forked from mirrors/nixpkgs

nixos manual: allow options from nix packages

This commit is contained in:
Ryan Artecona 2016-01-22 14:22:12 -05:00
parent 194168b722
commit e6cd147ae7

View file

@ -1,4 +1,4 @@
{ pkgs, options, version, revision }:
{ pkgs, options, version, revision, extraSources ? [] }:
with pkgs;
with pkgs.lib;
@ -17,19 +17,27 @@ let
# Clean up declaration sites to not refer to the NixOS source tree.
optionsList' = flip map optionsList (opt: opt // {
declarations = map (fn: stripPrefix fn) opt.declarations;
declarations = map (fn: stripAnyPrefixes fn) opt.declarations;
}
// optionalAttrs (opt ? example) { example = substFunction opt.example; }
// optionalAttrs (opt ? default) { default = substFunction opt.default; }
// optionalAttrs (opt ? type) { type = substFunction opt.type; });
prefix = toString ../../..;
# We need to strip references to /nix/store/* from options,
# including any `extraSources` if some modules came from elsewhere,
# or else the build will fail.
#
# E.g. if some `options` came from modules in ${pkgs.customModules}/nix,
# you'd need to include `extraSources = [ "#{pkgs.customModules}" ]`
herePrefix = toString ../../..;
prefixesToStrip = [ herePrefix ] ++ extraSources;
stripPrefix = fn:
if substring 0 (stringLength prefix) fn == prefix then
substring (stringLength prefix + 1) 1000 fn
else
fn;
stripAnyPrefixes = fn:
flip (flip fold fn) prefixesToStrip (fn: prefix:
if substring 0 (stringLength prefix) fn == prefix then
substring (stringLength prefix + 1) 1000 fn
else
fn);
# Convert the list of options into an XML file.
optionsXML = builtins.toFile "options.xml" (builtins.toXML optionsList');