From 7e25ff7106f00bdca9957b1109e2fd9beca86ea1 Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Sat, 24 Mar 2018 11:36:10 -0400 Subject: [PATCH] docs: Build with a makefile --- doc/Makefile | 69 +++++++++++++++++++++++ doc/default.nix | 129 ++++++++----------------------------------- doc/shell.section.md | 2 + 3 files changed, 95 insertions(+), 105 deletions(-) create mode 100644 doc/Makefile diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 000000000000..366d971d7819 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,69 @@ +MD_TARGETS=$(addsuffix .xml, $(basename $(wildcard ./*.md ./**/*.md))) + +.PHONY: all +all: out/html/index.html out/epub/manual.epub + +.PHONY: clean +clean: + rm -f ${MD_TARGETS} .version manual-full.xml + rm -rf ./out/ + +validate: manual-full.xml + jing "$$RNG" manual-full.xml + +out/html/index.html: manual-full.xml style.css + mkdir -p out/html + xsltproc $$xsltFlags \ + --nonet --xinclude \ + --output $@ \ + "$$XSL/docbook/xhtml/docbook.xsl" \ + ./manual-full.xml + + cp ./style.css out/html/style.css + + mkdir -p out/html/images/callouts + cp "$$XSL/docbook/images/callouts/"*.gif out/html/images/callouts/ + +out/epub/manual.epub: manual-full.xml + mkdir -p out/epub/scratch + xsltproc $$xsltFlags --nonet \ + --output out/epub/scratch/ \ + "$$XSL/docbook/epub/docbook.xsl" \ + ./manual-full.xml + + cp "$$XSL/docbook/images/callouts/"*.gif out/epub/scratch/OEBPS + echo "application/epub+zip" > mimetype + zip -0Xq "out/epub/manual.epub" mimetype + rm mimetype + cd "out/epub/scratch/" && zip -Xr9D "../manual.epub" * + rm -rf "out/epub/scratch/" + +manual-full.xml: ${MD_TARGETS} .version *.xml + xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml + +.version: + nix-instantiate --eval \ + -E '(import ../lib).nixpkgsVersion' > .version + +%.section.xml: %.section.md + pandoc $^ -w docbook+smart \ + -f markdown+smart \ + | sed -e 's|||' \ + -e 's|||' \ + -e '1s| id=| xml:id=|' \ + -e '1s|\(<[^ ]* \)|\1xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" |' \ + | cat > $@ + +%.chapter.xml: %.chapter.md + pandoc $^ -w docbook+smart \ + --top-level-division=chapter \ + -f markdown+smart \ + | sed -e 's|||' \ + -e 's|||' \ + -e '1s| id=| xml:id=|' \ + -e '1s|\(<[^ ]* \)|\1|' \ + | cat > $@ diff --git a/doc/default.nix b/doc/default.nix index 1adcd7968204..b04c9c1b5566 100644 --- a/doc/default.nix +++ b/doc/default.nix @@ -7,116 +7,35 @@ in pkgs.stdenv.mkDerivation { name = "nixpkgs-manual"; - buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ]; - xsltFlags = '' - --param section.autolabel 1 - --param section.label.includes.component.label 1 - --param html.stylesheet 'style.css' - --param xref.with.number.and.title 1 - --param toc.section.depth 3 - --param admon.style ''' - --param callout.graphics.extension '.gif' + src = ./.; + + XSL = "${pkgs.docbook5_xsl}/xml/xsl"; + RNG = "${pkgs.docbook5}/xml/rng/docbook/docbook.rng"; + xsltFlags = lib.concatStringsSep " " [ + "--param section.autolabel 1" + "--param section.label.includes.component.label 1" + "--param html.stylesheet 'style.css'" + "--param xref.with.number.and.title 1" + "--param toc.section.depth 3" + "--param admon.style ''" + "--param callout.graphics.extension '.gif'" + ]; + + postPatch = '' + echo ${lib.nixpkgsVersion} > .version ''; + installPhase = '' + dest="$out/share/doc/nixpkgs" + mkdir -p "$(dirname "$dest")" + mv out/html "$dest" + mv "$dest/index.html" "$dest/manual.html" - buildCommand = let toDocbook = { useChapters ? false, inputFile, outputFile }: - let - extraHeader = lib.optionalString (!useChapters) - ''xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" ''; - in '' - { - pandoc '${inputFile}' -w docbook+smart ${lib.optionalString useChapters "--top-level-division=chapter"} \ - -f markdown+smart \ - | sed -e 's|||' \ - -e 's|||' \ - -e '1s| id=| xml:id=|' \ - -e '1s|\(<[^ ]* \)|\1${extraHeader}|' - } > '${outputFile}' - ''; - in + mv out/epub/manual.epub "$dest/nixpkgs-manual.epub" - '' - ln -s '${sources}/'*.xml . - mkdir ./languages-frameworks - cp -s '${sources-langs}'/* ./languages-frameworks - '' - + toDocbook { - inputFile = ./introduction.chapter.md; - outputFile = "introduction.chapter.xml"; - useChapters = true; - } - + toDocbook { - inputFile = ./shell.section.md; - outputFile = "shell.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/python.section.md; - outputFile = "./languages-frameworks/python.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/haskell.section.md; - outputFile = "./languages-frameworks/haskell.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/idris.section.md; - outputFile = "languages-frameworks/idris.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/node.section.md; - outputFile = "languages-frameworks/node.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/r.section.md; - outputFile = "languages-frameworks/r.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/rust.section.md; - outputFile = "./languages-frameworks/rust.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/vim.section.md; - outputFile = "./languages-frameworks/vim.section.xml"; - } - + toDocbook { - inputFile = ./languages-frameworks/emscripten.section.md; - outputFile = "./languages-frameworks/emscripten.section.xml"; - } - + '' - echo ${lib.nixpkgsVersion} > .version - - # validate against relaxng schema - xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml - ${pkgs.jing}/bin/jing ${pkgs.docbook5}/xml/rng/docbook/docbook.rng manual-full.xml - - dst=$out/share/doc/nixpkgs - mkdir -p $dst - xsltproc $xsltFlags --nonet --xinclude \ - --output $dst/manual.html \ - ${pkgs.docbook5_xsl}/xml/xsl/docbook/xhtml/docbook.xsl \ - ./manual.xml - - cp ${./style.css} $dst/style.css - - mkdir -p $dst/images/callouts - cp "${pkgs.docbook5_xsl}/xml/xsl/docbook/images/callouts/"*.gif $dst/images/callouts/ - - mkdir -p $out/nix-support - echo "doc manual $dst manual.html" >> $out/nix-support/hydra-build-products - - xsltproc $xsltFlags --nonet --xinclude \ - --output $dst/epub/ \ - ${pkgs.docbook5_xsl}/xml/xsl/docbook/epub/docbook.xsl \ - ./manual.xml - - cp -r $dst/images $dst/epub/OEBPS - echo "application/epub+zip" > mimetype - manual="$dst/nixpkgs-manual.epub" - zip -0Xq "$manual" mimetype - cd $dst/epub && zip -Xr9D "$manual" * - rm -rf $dst/epub + mkdir -p $out/nix-support/ + echo "doc manual $dest manual.html" >> $out/nix-support/hydra-build-products ''; } diff --git a/doc/shell.section.md b/doc/shell.section.md index 079574d4ae86..cb8832a814fc 100644 --- a/doc/shell.section.md +++ b/doc/shell.section.md @@ -4,6 +4,8 @@ author: zimbatm date: 2017-10-30 --- +# mkShell + pkgs.mkShell is a special kind of derivation that is only useful when using it combined with nix-shell. It will in fact fail to instantiate when invoked with nix-build.