226 lines
6.6 KiB
Nix
226 lines
6.6 KiB
Nix
{ stdenv, lib, fetchurl
|
|
, config
|
|
, zlib, bzip2, ncurses, libpng, flex, bison, libX11, libICE, xproto
|
|
, freetype, t1lib, gd, libXaw, icu, ghostscript, ed, libXt, libXpm, libXmu, libXext
|
|
, xextproto, perl, libSM, ruby, expat, curl, libjpeg, python, fontconfig, pkgconfig
|
|
, poppler, libpaper, graphite2, lesstif, zziplib, harfbuzz, texinfo, potrace, gmp, mpfr
|
|
, xpdf, cairo, pixman, xorg
|
|
, makeWrapper
|
|
}:
|
|
|
|
|
|
let
|
|
withSystemLibs = map (libname: "--with-system-${libname}");
|
|
|
|
year = "2015";
|
|
version = year; # keep names simple for now
|
|
|
|
common = rec {
|
|
src = fetchurl {
|
|
url = "ftp://tug.org/historic/systems/texlive/${year}/texlive-20150521-source.tar.xz";
|
|
sha256 = "ed9bcd7bdce899c3c27c16a8c5c3017c4f09e1d7fd097038351b72497e9d4669";
|
|
};
|
|
|
|
configureFlags = [
|
|
"--with-banner-add=/NixOS.org"
|
|
"--disable-missing" "--disable-native-texlive-build"
|
|
"--enable-shared" # "--enable-cxx-runtime-hack" # static runtime
|
|
"--enable-tex-synctex"
|
|
"-C" # use configure cache to speed up
|
|
]
|
|
++ withSystemLibs [
|
|
# see "from TL tree" vs. "Using installed" in configure output
|
|
"zziplib" "xpdf" "poppler" "mpfr" "gmp"
|
|
"pixman" "potrace" "gd" "freetype2" "libpng" "libpaper" "zlib"
|
|
# beware: xpdf means to use stuff from poppler :-/
|
|
];
|
|
|
|
# clean broken links to stuff not built
|
|
cleanBrokenLinks = ''
|
|
for f in "$out"/bin/*; do
|
|
if [[ ! -x "$f" ]]; then rm "$f"; fi
|
|
done
|
|
'';
|
|
};
|
|
in rec { # un-indented
|
|
|
|
inherit (common) cleanBrokenLinks;
|
|
texliveYear = year;
|
|
|
|
|
|
core = stdenv.mkDerivation rec {
|
|
name = "texlive-bin-${version}";
|
|
|
|
inherit (common) src;
|
|
|
|
outputs = [ "out" "doc" ];
|
|
|
|
buildInputs = [
|
|
pkgconfig
|
|
/*teckit*/ zziplib poppler mpfr gmp
|
|
pixman potrace gd freetype libpng libpaper zlib
|
|
perl
|
|
];
|
|
|
|
preConfigure = ''
|
|
rm -r libs/{cairo,freetype2,gd,gmp,graphite2,harfbuzz,icu,libpaper,libpng} \
|
|
libs/{mpfr,pixman,poppler,potrace,xpdf,zlib,zziplib}
|
|
mkdir Work
|
|
cd Work
|
|
'';
|
|
configureScript = "../configure";
|
|
|
|
configureFlags = common.configureFlags
|
|
++ [ "--without-x" ] # disable xdvik and xpdfopen
|
|
++ map (what: "--disable-${what}") [
|
|
"dvisvgm" "dvipng" # ghostscript dependency
|
|
"luatex" "luajittex" "mp" "pmp" "upmp" "mf" # cairo would bring in X and more
|
|
"xetex" "bibtexu" "bibtex8" "bibtex-x" # ICU isn't small
|
|
]
|
|
++ [ "--without-system-harfbuzz" "--without-system-icu" ] # bogus configure
|
|
;
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
doCheck = false; # triptest fails, likely due to missing TEXMF tree
|
|
preCheck = "patchShebangs ../texk/web2c";
|
|
|
|
installTargets = [ "install" "texlinks" ];
|
|
|
|
# TODO: perhaps improve texmf.cnf search locations
|
|
postInstall = /* a few texmf-dist files are useful; take the rest from pkgs */ ''
|
|
mv "$out/share/texmf-dist/web2c/texmf.cnf" .
|
|
rm -r "$out/share/texmf-dist"
|
|
mkdir -p "$out"/share/texmf-dist/{web2c,scripts/texlive/TeXLive}
|
|
mv ./texmf.cnf "$out/share/texmf-dist/web2c/"
|
|
cp ../texk/tests/TeXLive/*.pm "$out/share/texmf-dist/scripts/texlive/TeXLive/"
|
|
cp ../texk/texlive/linked_scripts/scripts.lst "$out/share/texmf-dist/scripts/texlive/"
|
|
'' + /* doc location identical with individual TeX pkgs */ ''
|
|
mkdir -p "$doc/doc"
|
|
mv "$out"/share/{man,info} "$doc"/doc
|
|
'' + cleanBrokenLinks;
|
|
|
|
setupHook = ./setup-hook.sh; # TODO: maybe texmf-nix -> texmf (and all references)
|
|
passthru = { inherit version buildInputs; };
|
|
|
|
meta = with stdenv.lib; {
|
|
description = "Basic binaries for TeX Live";
|
|
homepage = http://www.tug.org/texlive;
|
|
license = stdenv.lib.licenses.gpl2;
|
|
maintainers = with maintainers; [ vcunat lovek323 raskin jwiegley ];
|
|
platforms = platforms.all;
|
|
};
|
|
};
|
|
|
|
|
|
inherit (core-big) metafont metapost luatex xetex;
|
|
core-big = stdenv.mkDerivation {
|
|
name = "texlive-core-big.bin-${version}";
|
|
|
|
inherit (common) src;
|
|
|
|
buildInputs = core.buildInputs ++ [ core cairo harfbuzz icu graphite2 ];
|
|
|
|
configureFlags = common.configureFlags
|
|
++ withSystemLibs [ "kpathsea" "ptexenc" "cairo" "harfbuzz" "icu" "graphite2" ]
|
|
++ map (prog: "--disable-${prog}") # don't build things we already have
|
|
[ "tex" "ptex" "eptex" "uptex" "euptex" "aleph" "pdftex"
|
|
"web-progs" "synctex" "luajittex" # luajittex is mostly not needed, see:
|
|
# http://tex.stackexchange.com/questions/97999/when-to-use-luajittex-in-favour-of-luatex
|
|
];
|
|
|
|
configureScript = ":";
|
|
|
|
# we use static libtexlua, because it's only used by a single binary
|
|
postConfigure = ''
|
|
mkdir ./Work && cd ./Work
|
|
for path in libs/{teckit,lua52} texk/web2c; do
|
|
(
|
|
if [[ "$path" == "libs/lua52" ]]; then
|
|
extraConfig="--enable-static --disable-shared"
|
|
else
|
|
extraConfig=""
|
|
fi
|
|
|
|
mkdir -p "$path" && cd "$path"
|
|
"../../../$path/configure" $configureFlags $extraConfig
|
|
)
|
|
done
|
|
'';
|
|
|
|
preBuild = "cd texk/web2c";
|
|
enableParallelBuilding = true;
|
|
|
|
# now distribute stuff into outputs, roughly as upstream TL
|
|
# (uninteresting stuff remains in $out, typically duplicates from `core`)
|
|
outputs = [ "out" "metafont" "metapost" "luatex" "xetex" ];
|
|
postInstall = ''
|
|
for output in $outputs; do
|
|
mkdir -p "''${!output}/bin"
|
|
done
|
|
|
|
mv "$out/bin"/{inimf,mf,mf-nowin} "$metafont/bin/"
|
|
mv "$out/bin"/{*tomp,mfplain,*mpost} "$metapost/bin/"
|
|
mv "$out/bin"/{luatex,texlua*} "$luatex/bin/"
|
|
mv "$out/bin"/xetex "$xetex/bin/"
|
|
'';
|
|
};
|
|
|
|
|
|
dvisvgm = stdenv.mkDerivation {
|
|
name = "texlive-dvisvgm.bin-${version}";
|
|
|
|
inherit (common) src;
|
|
|
|
buildInputs = [ pkgconfig core/*kpathsea*/ ghostscript zlib freetype potrace ];
|
|
|
|
preConfigure = "cd texk/dvisvgm";
|
|
|
|
configureFlags = common.configureFlags
|
|
++ [ "--with-system-kpathsea" "--with-system-libgs" ];
|
|
|
|
enableParallelBuilding = true;
|
|
};
|
|
|
|
|
|
dvipng = stdenv.mkDerivation {
|
|
name = "texlive-dvipng.bin-${version}";
|
|
|
|
inherit (common) src;
|
|
|
|
buildInputs = [ pkgconfig core/*kpathsea*/ zlib libpng freetype gd ghostscript makeWrapper ];
|
|
|
|
preConfigure = "cd texk/dvipng";
|
|
|
|
configureFlags = common.configureFlags
|
|
++ [ "--with-system-kpathsea" "--with-gs=yes" "--disable-debug" ];
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
# I didn't manage to hardcode gs location by configureFlags
|
|
postInstall = ''
|
|
wrapProgram "$out/bin/dvipng" --prefix PATH : '${ghostscript}/bin'
|
|
'';
|
|
};
|
|
|
|
|
|
bibtexu = bibtex8;
|
|
bibtex8 = stdenv.mkDerivation {
|
|
name = "texlive-bibtex-x.bin-${version}";
|
|
|
|
inherit (common) src;
|
|
|
|
buildInputs = [ pkgconfig core/*kpathsea*/ icu ];
|
|
|
|
preConfigure = "cd texk/bibtex-x";
|
|
|
|
configureFlags = common.configureFlags
|
|
++ [ "--with-system-kpathsea" "--with-system-icu" ];
|
|
|
|
enableParallelBuilding = true;
|
|
};
|
|
|
|
|
|
} # un-indented
|
|
|