docs: Build with a makefile
This commit is contained in:
parent
8c7be5927e
commit
7e25ff7106
69
doc/Makefile
Normal file
69
doc/Makefile
Normal file
@ -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 > $@
|
125
doc/default.nix
125
doc/default.nix
@ -7,116 +7,35 @@ in
|
|||||||
pkgs.stdenv.mkDerivation {
|
pkgs.stdenv.mkDerivation {
|
||||||
name = "nixpkgs-manual";
|
name = "nixpkgs-manual";
|
||||||
|
|
||||||
|
|
||||||
buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ];
|
buildInputs = with pkgs; [ pandoc libxml2 libxslt zip ];
|
||||||
|
|
||||||
xsltFlags = ''
|
src = ./.;
|
||||||
--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'
|
|
||||||
'';
|
|
||||||
|
|
||||||
|
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'"
|
||||||
|
];
|
||||||
|
|
||||||
buildCommand = let toDocbook = { useChapters ? false, inputFile, outputFile }:
|
postPatch = ''
|
||||||
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";
|
|
||||||
}
|
|
||||||
+ ''
|
|
||||||
echo ${lib.nixpkgsVersion} > .version
|
echo ${lib.nixpkgsVersion} > .version
|
||||||
|
'';
|
||||||
|
|
||||||
# validate against relaxng schema
|
installPhase = ''
|
||||||
xmllint --nonet --xinclude --noxincludenode manual.xml --output manual-full.xml
|
dest="$out/share/doc/nixpkgs"
|
||||||
${pkgs.jing}/bin/jing ${pkgs.docbook5}/xml/rng/docbook/docbook.rng manual-full.xml
|
mkdir -p "$(dirname "$dest")"
|
||||||
|
mv out/html "$dest"
|
||||||
|
mv "$dest/index.html" "$dest/manual.html"
|
||||||
|
|
||||||
dst=$out/share/doc/nixpkgs
|
mv out/epub/manual.epub "$dest/nixpkgs-manual.epub"
|
||||||
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 $out/nix-support/
|
||||||
|
echo "doc manual $dest manual.html" >> $out/nix-support/hydra-build-products
|
||||||
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
|
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ author: zimbatm
|
|||||||
date: 2017-10-30
|
date: 2017-10-30
|
||||||
---
|
---
|
||||||
|
|
||||||
|
# mkShell
|
||||||
|
|
||||||
pkgs.mkShell is a special kind of derivation that is only useful when using
|
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
|
it combined with nix-shell. It will in fact fail to instantiate when invoked
|
||||||
with nix-build.
|
with nix-build.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user