From 7a09c6018d7fe07a1bb8e5f42d4b7ec918b2caee Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sat, 9 Aug 2014 16:30:44 +0200 Subject: [PATCH] Manual: Generate PDF Issue NixOS/nixos#237. --- nixos/doc/manual/default.nix | 49 ++++++++++++++++++++++++++++-------- nixos/release.nix | 1 + 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/nixos/doc/manual/default.nix b/nixos/doc/manual/default.nix index e118f8b89437..55533a05b066 100644 --- a/nixos/doc/manual/default.nix +++ b/nixos/doc/manual/default.nix @@ -1,5 +1,6 @@ { pkgs, options, version, revision }: +with pkgs; with pkgs.lib; let @@ -22,7 +23,7 @@ let optionsXML = builtins.toFile "options.xml" (builtins.unsafeDiscardStringContext (builtins.toXML options'')); - optionsDocBook = pkgs.runCommand "options-db.xml" {} '' + optionsDocBook = runCommand "options-db.xml" {} '' if grep /nixpkgs/nixos/modules ${optionsXML}; then 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" @@ -30,7 +31,7 @@ let echo "for hints about the offending path)." exit 1 fi - ${pkgs.libxslt}/bin/xsltproc \ + ${libxslt}/bin/xsltproc \ --stringparam revision '${revision}' \ -o $out ${./options-to-docbook.xsl} ${optionsXML} ''; @@ -38,12 +39,12 @@ let in rec { # Generate the NixOS manual. - manual = pkgs.stdenv.mkDerivation { + manual = stdenv.mkDerivation { name = "nixos-manual"; sources = sourceFilesBySuffices ./. [".xml"]; - buildInputs = [ pkgs.libxml2 pkgs.libxslt ]; + buildInputs = [ libxml2 libxslt ]; xsltFlags = '' --param section.autolabel 1 @@ -62,7 +63,7 @@ in rec { # Check the validity of the manual sources. xmllint --noout --nonet --xinclude --noxincludenode \ - --relaxng ${pkgs.docbook5}/xml/rng/docbook/docbook.rng \ + --relaxng ${docbook5}/xml/rng/docbook/docbook.rng \ manual.xml # Generate the HTML manual. @@ -70,11 +71,11 @@ in rec { mkdir -p $dst xsltproc $xsltFlags --nonet --xinclude \ --output $dst/manual.html \ - ${pkgs.docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \ + ${docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \ ./manual.xml mkdir -p $dst/images/callouts - cp ${pkgs.docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/images/callouts/ + cp ${docbook5_xsl}/xml/xsl/docbook/images/callouts/*.gif $dst/images/callouts/ cp ${./style.css} $dst/style.css @@ -86,13 +87,39 @@ in rec { meta.description = "The NixOS manual in HTML format"; }; + manualPDF = stdenv.mkDerivation { + name = "nixos-manual-pdf"; + + sources = sourceFilesBySuffices ./. [".xml"]; + + buildInputs = [ libxml2 libxslt dblatex tetex ]; + + buildCommand = '' + # TeX needs a writable font cache. + export VARTEXFONTS=$TMPDIR/texfonts + + ln -s $sources/*.xml . # */ + ln -s ${optionsDocBook} options-db.xml + echo "${version}" > version + + dst=$out/share/doc/nixos + mkdir -p $dst + xmllint --xinclude manual.xml | dblatex -o $dst/manual.pdf - \ + -P doc.collab.show=0 \ + -P latex.output.revhistory=0 + + mkdir -p $out/nix-support + echo "doc-pdf manual $dst/manual.pdf" >> $out/nix-support/hydra-build-products + ''; # */ + }; + # Generate the NixOS manpages. - manpages = pkgs.stdenv.mkDerivation { + manpages = stdenv.mkDerivation { name = "nixos-manpages"; sources = sourceFilesBySuffices ./. [".xml"]; - buildInputs = [ pkgs.libxml2 pkgs.libxslt ]; + buildInputs = [ libxml2 libxslt ]; buildCommand = '' ln -s $sources/*.xml . # */ @@ -100,7 +127,7 @@ in rec { # Check the validity of the manual sources. xmllint --noout --nonet --xinclude --noxincludenode \ - --relaxng ${pkgs.docbook5}/xml/rng/docbook/docbook.rng \ + --relaxng ${docbook5}/xml/rng/docbook/docbook.rng \ ./man-pages.xml # Generate manpages. @@ -109,7 +136,7 @@ in rec { --param man.output.in.separate.dir 1 \ --param man.output.base.dir "'$out/share/man/'" \ --param man.endnotes.are.numbered 0 \ - ${pkgs.docbook5_xsl}/xml/xsl/docbook/manpages/docbook.xsl \ + ${docbook5_xsl}/xml/xsl/docbook/manpages/docbook.xsl \ ./man-pages.xml ''; }; diff --git a/nixos/release.nix b/nixos/release.nix index 8a8b77de5a5b..ed413d3e928f 100644 --- a/nixos/release.nix +++ b/nixos/release.nix @@ -113,6 +113,7 @@ in rec { manual = forAllSystems (system: (builtins.getAttr system iso_minimal).config.system.build.manual.manual); + manualPDF = iso_minimal.x86_64-linux.config.system.build.manual.manualPDF; manpages = forAllSystems (system: (builtins.getAttr system iso_minimal).config.system.build.manual.manpages);