asciidoc: add missing dependencies

The current asciidoc expression is impure; it relies on several tools to
be found in PATH at runtime. This commit adds a enableStandardFeatures
parameter that pulls in all dependencies and patches asciidoc to contain
full paths to the tools.

enableStandardFeatures defaults to true because asciidoc may attempt to
call all tools in its default configuration. With all standard features,
the closure size increases from 255 MiB to 1.5 GiB. Set
enableStandardFeatures = false if you want a minimal asciidoc.
This commit is contained in:
Bjørn Forsman 2013-09-23 21:26:44 +02:00
parent face28ea3d
commit aef81d6eb6
2 changed files with 81 additions and 2 deletions

View File

@ -1,4 +1,25 @@
{ fetchurl, stdenv, python
, enableStandardFeatures ? true
, sourceHighlight ? null
, highlight ? null
, pygments ? null
, graphviz ? null
, tetex ? null
, dblatex ? null
, libxslt ? null
, w3m ? null
, lynx ? null
, imagemagick ? null
, lilypond ? null
, libxml2 ? null
, docbook_xml_dtd_45 ? null
, docbook5_xsl ? null
, docbook_xsl ? null
, fop ? null
# TODO: Package this:
#, epubcheck ? null
, unzip ? null
# filters
, enableDitaaFilter ? false, jre ? null
@ -12,6 +33,26 @@
, enableOdfBackend ? false
}:
assert enableStandardFeatures ->
sourceHighlight != null &&
highlight != null &&
pygments != null &&
graphviz != null &&
tetex != null &&
dblatex != null &&
libxslt != null &&
w3m != null &&
lynx != null &&
imagemagick != null &&
lilypond != null &&
libxml2 != null &&
docbook_xml_dtd_45 != null &&
docbook5_xsl != null &&
docbook_xsl != null &&
fop != null;
# TODO: Package this:
# epubcheck != null;
# filters
assert (enableDitaaFilter || enableMscgenFilter || enableDiagFilter || enableQrcodeFilter || enableAafigureFilter) -> unzip != null;
assert enableDitaaFilter -> jre != null;
@ -49,7 +90,7 @@ let
sha256 = "0h4bql1nb4y4fmg2yvlpfjhvy22ln8jsaxdr10f8bfcg5lr0zkxs";
};
# latest commit in master branch as per 2013-09-22
# there are no archives or tags, using latest commit in master branch as per 2013-09-22
matplotlibFilterSrc = let commit = "75f0d009629f93f33fab04b83faca20cc35dd358"; in fetchurl rec {
name = "mplw-${commit}.tar.gz";
url = "https://api.github.com/repos/lvv/mplw/tarball/${commit}";
@ -151,11 +192,48 @@ stdenv.mkDerivation rec {
# the odp backend already has that fix. Copy it here until fixed upstream.
sed -i "s|'/etc/asciidoc/backends/odt/asciidoc.ott'|os.path.dirname(__file__),'asciidoc.ott'|" \
"$out/etc/asciidoc/backends/odt/a2x-backend.py"
'' + optionalString enableStandardFeatures ''
sed -e "s|dot|${graphviz}/bin/dot|g" \
-e "s|neato|${graphviz}/bin/neato|g" \
-e "s|twopi|${graphviz}/bin/circo|g" \
-e "s|circo|${graphviz}/bin/circo|g" \
-e "s|fdp|${graphviz}/bin/fdp|g" \
-i "filters/graphviz/graphviz2png.py"
sed -e "s|run('latex|run('${tetex}/bin/latex|g" \
-e "s|cmd = 'dvipng'|cmd = '${tetex}/bin/dvipng'|g" \
-i "filters/latex/latex2png.py"
sed -e "s|run('abc2ly|run('${lilypond}/bin/abc2ly|g" \
-e "s|run('lilypond|run('${lilypond}/bin/lilypond|g" \
-e "s|run('convert|run('${imagemagick}/bin/convert|g" \
-i "filters/music/music2png.py"
sed -e 's|filter="source-highlight|filter="${sourceHighlight}/bin/source-highlight|' \
-e 's|filter="highlight|filter="${highlight}/bin/highlight|' \
-e 's|filter="pygmentize|filter="${pygments}/bin/pygmentize|' \
-i "filters/source/source-highlight-filter.conf"
# ENV is custom environment passed to programs that a2x invokes. Here we
# use it to work around an impurity in the tetex package; tetex tools
# cannot find their neighbours (e.g. pdflatex doesn't find mktextfm).
# We can remove PATH= when those impurities are fixed.
sed -e "s|^ENV =.*|ENV = dict(XML_CATALOG_FILES='${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml ${docbook5_xsl}/xml/xsl/docbook/catalog.xml ${docbook_xsl}/xml/xsl/docbook/catalog.xml', PATH='${tetex}/bin')|" \
-e "s|^ASCIIDOC =.*|ASCIIDOC = '$out/bin/asciidoc'|" \
-e "s|^XSLTPROC =.*|XSLTPROC = '${libxslt}/bin/xsltproc'|" \
-e "s|^DBLATEX =.*|DBLATEX = '${dblatex}/bin/dblatex'|" \
-e "s|^FOP =.*|FOP = '${fop}/bin/fop'|" \
-e "s|^W3M =.*|W3M = '${w3m}/bin/w3m'|" \
-e "s|^LYNX =.*|LYNX = '${lynx}/bin/lynx'|" \
-e "s|^XMLLINT =.*|XMLLINT = '${libxml2}/bin/xmllint'|" \
-e "s|^EPUBCHECK =.*|EPUBCHECK = 'nixpkgs_is_missing_epubcheck'|" \
-i a2x.py
'' + ''
for n in $(find "$out" . -name \*.py); do
sed -i -e "s,^#![[:space:]]*.*/bin/env python,#!${python}/bin/python,g" "$n"
chmod +x "$n"
done
sed -i -e "s,/etc/vim,,g" Makefile.in
'';

View File

@ -567,7 +567,8 @@ let
mcelog = callPackage ../os-specific/linux/mcelog { };
asciidoc = callPackage ../tools/typesetting/asciidoc {
inherit (pythonPackages) matplotlib numpy aafigure recursivePthLoader;
inherit (pythonPackages) matplotlib numpy aafigure recursivePthLoader
pygments;
};
autossh = callPackage ../tools/networking/autossh { };