summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/Makefile69
-rw-r--r--doc/default.nix129
-rw-r--r--doc/shell.section.md2
3 files changed, 95 insertions, 105 deletions
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 00000000000..366d971d781
--- /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|<ulink url=|<link xlink:href=|' \
+	      -e 's|</ulink>|</link>|' \
+	      -e 's|<sect. id=|<section xml:id=|' \
+	      -e 's|</sect[0-9]>|</section>|' \
+	      -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|<ulink url=|<link xlink:href=|' \
+	      -e 's|</ulink>|</link>|' \
+	      -e 's|<sect. id=|<section xml:id=|' \
+	      -e 's|</sect[0-9]>|</section>|' \
+	      -e '1s| id=| xml:id=|' \
+	      -e '1s|\(<[^ ]* \)|\1|' \
+	| cat  > $@
diff --git a/doc/default.nix b/doc/default.nix
index 1adcd796820..b04c9c1b556 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'
-  '';
-
-
-  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|<ulink url=|<link xlink:href=|' \
-              -e 's|</ulink>|</link>|' \
-              -e 's|<sect. id=|<section xml:id=|' \
-              -e 's|</sect[0-9]>|</section>|' \
-              -e '1s| id=| xml:id=|' \
-              -e '1s|\(<[^ ]* \)|\1${extraHeader}|'
-      } > '${outputFile}'
-    '';
-  in
-
-  ''
-    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";
-    }
-  + ''
+  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
+  '';
 
-    # 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
+  installPhase = ''
+    dest="$out/share/doc/nixpkgs"
+    mkdir -p "$(dirname "$dest")"
+    mv out/html "$dest"
+    mv "$dest/index.html" "$dest/manual.html"
 
-    xsltproc $xsltFlags --nonet --xinclude \
-      --output $dst/epub/ \
-      ${pkgs.docbook5_xsl}/xml/xsl/docbook/epub/docbook.xsl \
-      ./manual.xml
+    mv out/epub/manual.epub "$dest/nixpkgs-manual.epub"
 
-    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 079574d4ae8..cb8832a814f 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.