diff options
Diffstat (limited to 'pkgs/tools/typesetting/tex/texlive/bin.nix')
-rw-r--r-- | pkgs/tools/typesetting/tex/texlive/bin.nix | 163 |
1 files changed, 120 insertions, 43 deletions
diff --git a/pkgs/tools/typesetting/tex/texlive/bin.nix b/pkgs/tools/typesetting/tex/texlive/bin.nix index f250dfb69de..9eaa81e144b 100644 --- a/pkgs/tools/typesetting/tex/texlive/bin.nix +++ b/pkgs/tools/typesetting/tex/texlive/bin.nix @@ -1,10 +1,10 @@ -{ stdenv, fetchurl +{ stdenv, fetchurl, fetchpatch, patchutils , texlive , zlib, libiconv, libpng, libX11 , freetype, gd, libXaw, icu, ghostscript, libXpm, libXmu, libXext -, perl, perlPackages, pkgconfig, autoreconfHook +, perl, perlPackages, python2Packages, pkgconfig, autoreconfHook , poppler, libpaper, graphite2, zziplib, harfbuzz, potrace, gmp, mpfr -, cairo, pixman, xorg, clisp, biber +, cairo, pixman, xorg, clisp, biber, xxHash , makeWrapper, shortenPerlShebang }: @@ -14,49 +14,60 @@ let withSystemLibs = map (libname: "--with-system-${libname}"); - year = "2018"; + year = "2019"; version = year; # keep names simple for now common = { src = fetchurl { urls = [ - "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0414-source.tar.xz" - "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0414-source.tar.xz" + "http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/${year}/texlive-${year}0410-source.tar.xz" + "ftp://tug.ctan.org/pub/tex/historic/systems/texlive/${year}/texlive-${year}0410-source.tar.xz" ]; - sha256 = "0khyi6h015r2zfqgg0a44a2j7vmr1cy42knw7jbss237yvakc07y"; + sha256 = "1dfps39q6bdr1zsbp9p74mvalmy3bycihv19sb9c6kg30kprz8nj"; }; patches = [ - (fetchurl { - name = "poppler-compat-fixes-up-to-0.70.patch"; - url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/poppler-compat-fixes-up-to-0.70.patch?h=packages/texlive-bin&id=85ee0539525d8012f134b76c18dfb10d0837a7e2; - sha256 = "0a8bvyl7v6zlyyg3ycl0dmg2g2qahxlq3qmc1nv33r24anzb8xhs"; - }) - (fetchurl { - name = "luatex-poppler-0.70-const-fixes.patch"; - url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/luatex-poppler-0.70-const-fixes.patch?h=packages/texlive-bin&id=85ee0539525d8012f134b76c18dfb10d0837a7e2; - sha256 = "0yiw2x97whdi23dc10xnqpxqj3aja15alir1byp1y03j60zv5n7i"; - }) - (fetchurl { - name = "texlive-poppler-0.71.patch"; - url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/texlive-poppler-0.71.patch?h=packages/texlive-bin&id=85ee0539525d8012f134b76c18dfb10d0837a7e2; - sha256 = "164wibyf786gdcb0ij4svsmyi13wvcx0cpdr4flki0lpy3igvlnq"; - }) - (fetchurl { - name = "synctex-missing-header.patch"; - url = https://git.archlinux.org/svntogit/packages.git/plain/trunk/synctex-missing-header.patch?h=packages/texlive-bin&id=da56abf0f8a1e85daca0ec0f031b8fa268519e6b; - sha256 = "1c4aq8lk8g3mlfq3mdjnxvmhss3qs7nni5rmw0k054dmj6q1xj5n"; - }) ]; - postPatch = '' + postPatch = let + # The source compatible with Poppler ${popplerVersion} not yet available in TeXLive ${year} + # so we need to use files introduced in https://www.tug.org/svn/texlive?view=revision&revision=52959 + popplerVersion = "0.83.0"; + pdftoepdf = let + revert-pdfmajorversion = fetchpatch { + name = "pdftoepdf-revert-pdfmajorversion.patch"; + url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftoepdf.cc?view=patch&r1=52953&r2=52952&pathrev=52953"; + sha256 = "19jiv5xbvnfdk8lj6yd6mdxgs8f313a4dwg8svjj90dd35kjcfh8"; + revert = true; + postFetch = '' + # The default file, changed by this patch, contains a branch for vendored Poppler + # The version-specific file replaces the section with an error, so we need to drop that part from the patch. + # Fortunately, there is not anything else in the patch after #else. + sed '/ #else/q' $out > "$tmpfile" + ${patchutils}/bin/recountdiff "$tmpfile" > "$out" + ''; + }; + in fetchurl { + name = "pdftoepdf-poppler${popplerVersion}.cc"; + url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftoepdf-poppler${popplerVersion}.cc?revision=52959&view=co"; + sha256 = "0pngvw1jgnm4cqskrzf5a3z8rj4ssl10007n3wbblj50hvvzjph3"; + postFetch = '' + # The trunk added some extra arguments to certain functions so we need to revert that + # https://www.tug.org/svn/texlive?view=revision&revision=52953 + patch $out < ${revert-pdfmajorversion} + ''; + }; + pdftosrc = fetchurl { + name = "pdftosrc-poppler${popplerVersion}.cc"; + url = "https://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/pdftexdir/pdftosrc-poppler${popplerVersion}.cc?revision=52959&view=co"; + sha256 = "0iq2cmwvf2lxy32sygrafwqgcwvvbdnvxm5l3mrg9cb2a1g06380"; + }; + in '' for i in texk/kpathsea/mktex*; do sed -i '/^mydir=/d' "$i" done - cp -pv texk/web2c/pdftexdir/pdftoepdf{-poppler0.70.0,}.cc - cp -pv texk/web2c/pdftexdir/pdftosrc{-newpoppler,}.cc - # fix build with poppler 0.71 - find texk/web2c/{lua,pdf}texdir -type f | xargs sed -e 's|gTrue|true|g' -e 's|gFalse|false|g' -e 's|GBool|bool|g' -e 's|getCString|c_str|g' -e 's|Gulong|unsigned long|g' -e 's|Guint|unsigned int|g' -e 's|Gushort|unsigned short|g' -e 's|Guchar|unsigned char|g' -i + cp -pv ${pdftoepdf} texk/web2c/pdftexdir/pdftoepdf.cc + cp -pv ${pdftosrc} texk/web2c/pdftexdir/pdftosrc.cc ''; # remove when removing synctex-missing-header.patch @@ -101,7 +112,7 @@ core = stdenv.mkDerivation rec { nativeBuildInputs = [ pkgconfig autoreconfHook ]; buildInputs = [ /*teckit*/ zziplib poppler mpfr gmp - pixman potrace gd freetype libpng libpaper zlib + pixman gd freetype libpng libpaper zlib perl ]; @@ -109,7 +120,7 @@ core = stdenv.mkDerivation rec { preConfigure = '' rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \ - libs/{mpfr,pixman,poppler,potrace,xpdf,zlib,zziplib} + libs/{mpfr,pixman,poppler,xpdf,zlib,zziplib} mkdir WorkDir cd WorkDir ''; @@ -167,7 +178,7 @@ core = stdenv.mkDerivation rec { '' + cleanBrokenLinks; # needed for poppler and xpdf - CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++11"; + CXXFLAGS = stdenv.lib.optionalString stdenv.cc.isClang "-std=c++14"; setupHook = ./setup-hook.sh; # TODO: maybe texmf-nix -> texmf (and all references) passthru = { inherit version buildInputs; }; @@ -199,8 +210,6 @@ core-big = stdenv.mkDerivation { #TODO: upmendex ++ map (prog: "--disable-${prog}") # don't build things we already have [ "tex" "ptex" "eptex" "uptex" "euptex" "aleph" "pdftex" "web-progs" "synctex" - # build fails on Darwin with luatex53 - "luatex53" # TODO probably can be removed when TexLive 2019 is out # luajittex is mostly not needed, see: # http://tex.stackexchange.com/questions/97999/when-to-use-luajittex-in-favour-of-luatex "luajittex" "mfluajit" @@ -211,8 +220,7 @@ core-big = stdenv.mkDerivation { #TODO: upmendex # we use static libtexlua, because it's only used by a single binary postConfigure = '' mkdir ./WorkDir && cd ./WorkDir - # TODO add lua53 here when luatex53 is enabled again - for path in libs/{teckit,lua52} texk/web2c; do + for path in libs/{teckit,lua53} texk/web2c; do ( if [[ "$path" =~ "libs/lua5" ]]; then extraConfig="--enable-static --disable-shared" @@ -253,13 +261,33 @@ dvisvgm = stdenv.mkDerivation { inherit (common) src; + patches = [ + # Fix for ghostscript>=9.27 + # Backport of + # https://github.com/mgieseki/dvisvgm/commit/bc51951bc90b700c28ea018993bdb058e5271e9b + ./dvisvgm-fix.patch + + # Needed for ghostscript>=9.50 + (fetchpatch { + url = "https://github.com/mgieseki/dvisvgm/commit/7b93a9197b69305429183affd24fa40ee04a663a.patch"; + sha256 = "1gmj76ja9xng39wxckhs9q140abixgb8rkrcfv2cdgq786wm3vag"; + stripLen = 1; + extraPrefix = "texk/dvisvgm/dvisvgm-src/"; + }) + ]; + nativeBuildInputs = [ pkgconfig ]; - buildInputs = [ core/*kpathsea*/ ghostscript zlib freetype potrace ]; + # TODO: dvisvgm still uses vendored dependencies + buildInputs = [ core/*kpathsea*/ ghostscript zlib freetype /*potrace xxHash*/ ]; preConfigure = "cd texk/dvisvgm"; + # configure script has a bug: it refers to $HAVE_LIBGS but sets $have_libgs + # TODO: remove for texlive 2020? + HAVE_LIBGS = 1; + configureFlags = common.configureFlags - ++ [ "--with-system-kpathsea" "--with-system-libgs" ]; + ++ [ "--with-system-kpathsea" ]; enableParallelBuilding = true; }; @@ -271,10 +299,22 @@ dvipng = stdenv.mkDerivation { inherit (common) src; - nativeBuildInputs = [ pkgconfig ]; + nativeBuildInputs = [ perl pkgconfig ]; buildInputs = [ core/*kpathsea*/ zlib libpng freetype gd ghostscript makeWrapper ]; - preConfigure = "cd texk/dvipng"; + patches = [ + (fetchpatch { + url = "http://git.savannah.nongnu.org/cgit/dvipng.git/patch/?id=f3ff241827a587e3d39eda477041fd3280f5b245"; + sha256 = "1a0ixl9mga24p6xk8dy3v60yifvbzd27vs0hv8996rfkp8jqa7is"; + stripLen = 1; + extraPrefix = "texk/dvipng/dvipng-src/"; + }) + ]; + + preConfigure = '' + cd texk/dvipng + patchShebangs doc/texi2pod.pl + ''; configureFlags = common.configureFlags ++ [ "--with-system-kpathsea" "--with-gs=yes" "--disable-debug" ]; @@ -319,6 +359,43 @@ latexindent = perlPackages.buildPerlPackage rec { }; +pygmentex = python2Packages.buildPythonApplication rec { + pname = "pygmentex"; + inherit (src) version; + + src = stdenv.lib.head (builtins.filter (p: p.tlType == "run") texlive.pygmentex.pkgs); + + propagatedBuildInputs = with python2Packages; [ pygments chardet ]; + + dontBuild = true; + + doCheck = false; + + installPhase = '' + runHook preInstall + + install -D ./scripts/pygmentex/pygmentex.py "$out"/bin/pygmentex + + runHook postInstall + ''; + + meta = with stdenv.lib; { + homepage = https://www.ctan.org/pkg/pygmentex; + description = "Auxiliary tool for typesetting code listings in LaTeX documents using Pygments"; + longDescription = '' + PygmenTeX is a Python-based LaTeX package that can be used for + typesetting code listings in a LaTeX document using Pygments. + + Pygments is a generic syntax highlighter for general use in all kinds of + software such as forum systems, wikis or other applications that need to + prettify source code. + ''; + license = licenses.lppl13c; + maintainers = with maintainers; [ romildo ]; + }; +}; + + inherit biber; bibtexu = bibtex8; bibtex8 = stdenv.mkDerivation { |