forked from mirrors/nixpkgs
Merge pull request #3811 from nbp/options-json
Export the list of options to XML & JSON, such that external tools can use it.
This commit is contained in:
commit
a4e60ebacf
|
@ -6,12 +6,21 @@ with pkgs.lib;
|
||||||
let
|
let
|
||||||
|
|
||||||
# Remove invisible and internal options.
|
# Remove invisible and internal options.
|
||||||
options' = filter (opt: opt.visible && !opt.internal) (optionAttrSetToDocList options);
|
optionsList = filter (opt: opt.visible && !opt.internal) (optionAttrSetToDocList options);
|
||||||
|
|
||||||
|
# Replace functions by the string <function>
|
||||||
|
substFunction = x:
|
||||||
|
if builtins.isAttrs x then mapAttrs (name: substFunction) x
|
||||||
|
else if builtins.isList x then map substFunction x
|
||||||
|
else if builtins.isFunction x then "<function>"
|
||||||
|
else x;
|
||||||
|
|
||||||
# Clean up declaration sites to not refer to the NixOS source tree.
|
# Clean up declaration sites to not refer to the NixOS source tree.
|
||||||
options'' = flip map options' (opt: opt // {
|
optionsList' = flip map optionsList (opt: opt // {
|
||||||
declarations = map (fn: stripPrefix fn) opt.declarations;
|
declarations = map (fn: stripPrefix fn) opt.declarations;
|
||||||
});
|
}
|
||||||
|
// optionalAttrs (opt ? example) { example = substFunction opt.example; }
|
||||||
|
// optionalAttrs (opt ? default) { default = substFunction opt.default; });
|
||||||
|
|
||||||
prefix = toString ../../..;
|
prefix = toString ../../..;
|
||||||
|
|
||||||
|
@ -21,10 +30,35 @@ let
|
||||||
else
|
else
|
||||||
fn;
|
fn;
|
||||||
|
|
||||||
optionsXML = builtins.toFile "options.xml" (builtins.unsafeDiscardStringContext (builtins.toXML options''));
|
# Convert the list of options into an XML file and a JSON file. The builtin
|
||||||
|
# unsafeDiscardStringContext is used to prevent the realisation of the store
|
||||||
|
# paths which are used in options definitions.
|
||||||
|
optionsXML = builtins.toFile "options.xml" (builtins.unsafeDiscardStringContext (builtins.toXML optionsList'));
|
||||||
|
optionsJSON = builtins.toFile "options.json" (builtins.unsafeDiscardStringContext (builtins.toJSON optionsList'));
|
||||||
|
|
||||||
|
# Tools-friendly version of the list of NixOS options.
|
||||||
|
options' = stdenv.mkDerivation {
|
||||||
|
name = "options";
|
||||||
|
|
||||||
|
buildCommand = ''
|
||||||
|
# Export list of options in different format.
|
||||||
|
dst=$out/share/doc/nixos
|
||||||
|
mkdir -p $dst
|
||||||
|
|
||||||
|
cp ${optionsJSON} $dst/options.json
|
||||||
|
cp ${optionsXML} $dst/options.xml
|
||||||
|
|
||||||
|
mkdir -p $out/nix-support
|
||||||
|
echo "file json $dst/options.json" >> $out/nix-support/hydra-build-products
|
||||||
|
echo "file xml $dst/options.xml" >> $out/nix-support/hydra-build-products
|
||||||
|
''; # */
|
||||||
|
|
||||||
|
meta.description = "List of NixOS options in various formats.";
|
||||||
|
};
|
||||||
|
|
||||||
optionsDocBook = runCommand "options-db.xml" {} ''
|
optionsDocBook = runCommand "options-db.xml" {} ''
|
||||||
if grep /nixpkgs/nixos/modules ${optionsXML}; then
|
optionsXML=${options'}/doc/share/nixos/options.xml
|
||||||
|
if grep /nixpkgs/nixos/modules $optionsXML; then
|
||||||
echo "The manual appears to depend on the location of Nixpkgs, which is bad"
|
echo "The manual appears to depend on the location of Nixpkgs, which is bad"
|
||||||
echo "since this prevents sharing via the NixOS channel. This is typically"
|
echo "since this prevents sharing via the NixOS channel. This is typically"
|
||||||
echo "caused by an option default that refers to a relative path (see above"
|
echo "caused by an option default that refers to a relative path (see above"
|
||||||
|
@ -33,7 +67,7 @@ let
|
||||||
fi
|
fi
|
||||||
${libxslt}/bin/xsltproc \
|
${libxslt}/bin/xsltproc \
|
||||||
--stringparam revision '${revision}' \
|
--stringparam revision '${revision}' \
|
||||||
-o $out ${./options-to-docbook.xsl} ${optionsXML}
|
-o $out ${./options-to-docbook.xsl} $optionsXML
|
||||||
'';
|
'';
|
||||||
|
|
||||||
sources = sourceFilesBySuffices ./. [".xml"];
|
sources = sourceFilesBySuffices ./. [".xml"];
|
||||||
|
@ -49,6 +83,9 @@ let
|
||||||
|
|
||||||
in rec {
|
in rec {
|
||||||
|
|
||||||
|
# Tools-friendly version of the list of NixOS options.
|
||||||
|
options = options';
|
||||||
|
|
||||||
# Generate the NixOS manual.
|
# Generate the NixOS manual.
|
||||||
manual = stdenv.mkDerivation {
|
manual = stdenv.mkDerivation {
|
||||||
name = "nixos-manual";
|
name = "nixos-manual";
|
||||||
|
|
|
@ -41,7 +41,7 @@ in {
|
||||||
|
|
||||||
output = mkOption {
|
output = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
default = /var/cache/locatedb;
|
default = "/var/cache/locatedb";
|
||||||
description = ''
|
description = ''
|
||||||
The database file to build.
|
The database file to build.
|
||||||
'';
|
'';
|
||||||
|
|
Loading…
Reference in a new issue