From b7ee7d199908d97ecb4c9fabd41c11b39370c6c3 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Sat, 22 Mar 2008 13:04:04 +0000 Subject: [PATCH] TeXLive. Now more configurable, and more options included. Beamer class for conference slides added. Before asking questions, look in configurations/misc/raskin.nix or in all-packages.nix . svn path=/nixpkgs/trunk/; revision=11257 --- pkgs/misc/tex/texlive/aggregate.nix | 58 +++++++++++++++++++++++++++++ pkgs/misc/tex/texlive/beamer.nix | 20 ++++++++++ pkgs/misc/tex/texlive/cm-super.nix | 27 ++++++++++++++ pkgs/misc/tex/texlive/default.nix | 21 +---------- pkgs/misc/tex/texlive/extra.nix | 19 ++++++++++ pkgs/misc/tex/texlive/pgf.nix | 20 ++++++++++ pkgs/misc/tex/texlive/xcolor.nix | 34 +++++++++++++++++ pkgs/top-level/all-packages.nix | 35 +++++++++++++++++ pkgs/top-level/builder-defs.nix | 8 +++- 9 files changed, 221 insertions(+), 21 deletions(-) create mode 100644 pkgs/misc/tex/texlive/aggregate.nix create mode 100644 pkgs/misc/tex/texlive/beamer.nix create mode 100644 pkgs/misc/tex/texlive/cm-super.nix create mode 100644 pkgs/misc/tex/texlive/extra.nix create mode 100644 pkgs/misc/tex/texlive/pgf.nix create mode 100644 pkgs/misc/tex/texlive/xcolor.nix diff --git a/pkgs/misc/tex/texlive/aggregate.nix b/pkgs/misc/tex/texlive/aggregate.nix new file mode 100644 index 000000000000..5a6df800451f --- /dev/null +++ b/pkgs/misc/tex/texlive/aggregate.nix @@ -0,0 +1,58 @@ +args : with args; +rec { + phaseNames = ["doAggregate"]; + name = "TeXLive-linkdir"; + + buildInputs = lib.closePropagation paths; + + doAggregate = FullDepEntry ('' + + for currentPath in ${lib.concatStringsSep " " buildInputs}; do + echo Symlinking "$currentPath" + find $currentPath/share ! -type d | while read; do + REPLY="''${REPLY#$currentPath}" + ensureDir $out/"$(dirname "$REPLY")" + ln -fs $currentPath/"$REPLY" $out/"$REPLY" + echo + done | while read; do head -n 99 >/dev/null; echo -n .; done + echo + + cp -Trfp $currentPath/libexec $out/libexec || true + done + + rm -r $out/share/texmf-config + find $out/share/texmf -type d | while read; do + REPLY="''${REPLY#$out/share/texmf}" + ensureDir $out/share/texmf-config/"$REPLY" + done + + ensureDir $out/bin + for i in $out/libexec/*/*; do + echo -ne "#! /bin/sh\\n$i \"\$@\"" >$out/bin/$(basename $i) + chmod a+x $out/bin/$(basename $i) + done + + rm $out/share/texmf*/ls-R + for i in web2c texconfig fonts/map; do + cp -r $out/share/texmf/$i/* $out/share/texmf-config/$i || true + done + + TEXMFCONFIG=$out/share/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees + PATH=$PATH:$out/bin mktexlsr $out/share/texmf* + TEXMFCONFIG=$out/share/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees + PATH=$PATH:$out/bin mktexlsr $out/share/texmf* + '') ["minInit" "defEnsureDir" "addInputs"]; + + meta = { + description = "TeX distribution directory"; + longDescription = '' + Here all the files from different TeX-related + packages are collected in one directory. Of + course, mktexlsr is called. Later placed + directories take precedence. It is supposed that + share and libexec are symlinked, and bin is + recreated with wrappers for libexec-located + linked binaries. + ''; + }; +} diff --git a/pkgs/misc/tex/texlive/beamer.nix b/pkgs/misc/tex/texlive/beamer.nix new file mode 100644 index 000000000000..ab960a5ca762 --- /dev/null +++ b/pkgs/misc/tex/texlive/beamer.nix @@ -0,0 +1,20 @@ +args: with args; +rec { + name = "texlive-beamer-2007"; + src = fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/l/latex-beamer/latex-beamer_3.07.orig.tar.gz; + sha256 = "07ldhg5f0hcnhjgzg5g8ailqacn8zhqc8nl2jkxc43c2qxbvswbv"; + }; + + buildInputs = [texLive]; + propagatedBuildInputs = [texLiveLatexXColor texLivePGF]; + phaseNames = ["doCopy"]; + doCopy = FullDepEntry ('' + ensureDir $out/share/texmf-dist/tex/latex/beamer + cp -r * $out/share/texmf-dist/tex/latex/beamer + '') ["minInit" "doUnpack" "defEnsureDir" "addInputs"]; + + meta = { + description = "Extra components for TeXLive: beamer class"; + }; +} diff --git a/pkgs/misc/tex/texlive/cm-super.nix b/pkgs/misc/tex/texlive/cm-super.nix new file mode 100644 index 000000000000..1844f2672255 --- /dev/null +++ b/pkgs/misc/tex/texlive/cm-super.nix @@ -0,0 +1,27 @@ +args: with args; +rec { + name = "texlive-cm-super-2007"; + src = fetchurl { + url = ftp://195.178.192.118/debian/pool/main/c/cm-super/cm-super_0.3.3.orig.tar.gz; + sha256 = "1lxvnhqds2zi6ssz66r1b7s6p855lab7cgp0hdg247zkacbjxcfg"; + }; + + phaseNames = ["doCopy"]; + doCopy = FullDepEntry ('' + ensureDir $out/share/texmf/fonts/enc + ensureDir $out/share/texmf/fonts/map + ensureDir $out/share/texmf/fonts/type1/public/cm-super + cp pfb/*.pfb $out/share/texmf/fonts/type1/public/cm-super + ensureDir $out/share/texmf/dvips/cm-super + cp dvips/*.{map,enc} $out/share/texmf/dvips/cm-super + cp dvips/*.enc $out/share/texmf/fonts/enc + cp dvips/*.map $out/share/texmf/fonts/map + ensureDir $out/share/texmf/dvipdfm/config + cp dvipdfm/*.map $out/share/texmf/dvipdfm/config + '') ["minInit" "doUnpack" "defEnsureDir" "addInputs"]; + buildInputs = [texLive]; + + meta = { + description = "Extra components for TeXLive: CM-Super fonts"; + }; +} diff --git a/pkgs/misc/tex/texlive/default.nix b/pkgs/misc/tex/texlive/default.nix index a25910ccac9d..d515a4521983 100644 --- a/pkgs/misc/tex/texlive/default.nix +++ b/pkgs/misc/tex/texlive/default.nix @@ -15,11 +15,6 @@ rec { sha256 = "0cmd9ryd57rzzg7g2gm3qn4ijakkacy810h5zncqd39p3i1yn6nx"; }; - cmSuperSrc = fetchurl { - url = ftp://195.178.192.118/debian/pool/main/c/cm-super/cm-super_0.3.3.orig.tar.gz; - sha256 = "1lxvnhqds2zi6ssz66r1b7s6p855lab7cgp0hdg247zkacbjxcfg"; - }; - setupHook = ./setup-hook.sh; doPreConfigure = FullDepEntry ('' @@ -39,18 +34,6 @@ rec { NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${icu}/include/layout"; '') ["minInit" "doUnpack" "addInputs" "defEnsureDir"]; - doInstallCMSuper = FullDepEntry ('' - tar xf ${cmSuperSrc} - ensureDir $out/share/texmf/fonts/type1/public/cm-super - cp cm-super-*/pfb/*.pfb $out/share/texmf/fonts/type1/public/cm-super - ensureDir $out/share/texmf/dvips/cm-super - cp cm-super-*/dvips/*.{map,enc} $out/share/texmf/dvips/cm-super - cp cm-super-*/dvips/*.enc $out/share/texmf/fonts/enc - cp cm-super-*/dvips/*.map $out/share/texmf/fonts/map - ensureDir $out/share/texmf/dvipdfm/config - cp cm-super-*/dvipdfm/*.map $out/share/texmf/dvipdfm/config - '') ["minInit" "defEnsureDir" "doPreConfigure"]; - doPostInstall = FullDepEntry('' mv $out/bin $out/libexec ensureDir $out/bin @@ -90,11 +73,11 @@ rec { ]; phaseNames = ["doPreConfigure" "doConfigure" - "doInstallCMSuper" "doMakeInstall" "doPostInstall"]; + "doMakeInstall" "doPostInstall"]; name = "texlive-core-2007"; meta = { description = "A TeX distribution"; - srcs = [texmfSrc langTexmfSrc cmSuperSrc]; + srcs = [texmfSrc langTexmfSrc]; }; } diff --git a/pkgs/misc/tex/texlive/extra.nix b/pkgs/misc/tex/texlive/extra.nix new file mode 100644 index 000000000000..d67c02e7d929 --- /dev/null +++ b/pkgs/misc/tex/texlive/extra.nix @@ -0,0 +1,19 @@ +args: with args; +rec { + name = "texlive-extra-2007"; + src = fetchurl { + url = ftp://ftp.ru.debian.org/debian/pool/main/t/texlive-extra/texlive-extra_2007.dfsg.1.orig.tar.gz; + sha256 = "1440495dcsrwhnz1p1prs4rf84ca0v7fjwg7sdw7isnprnpiq7w5"; + }; + + buildInputs = [texLive]; + phaseNames = ["doCopy"]; + doCopy = FullDepEntry ('' + ensureDir $out/share + cp -r texmf* $out/share/ + '') ["minInit" "doUnpack" "defEnsureDir" "addInputs"]; + + meta = { + description = "Extra components for TeXLive"; + }; +} diff --git a/pkgs/misc/tex/texlive/pgf.nix b/pkgs/misc/tex/texlive/pgf.nix new file mode 100644 index 000000000000..3e7b5fc7fbcc --- /dev/null +++ b/pkgs/misc/tex/texlive/pgf.nix @@ -0,0 +1,20 @@ +args: with args; +rec { + name = "texlive-pgf-2007"; + src = fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/p/pgf/pgf_1.18.orig.tar.gz; + sha256 = "1fk0m3rqsgdrxp2n6mbhh92819g1133w67lbgk66pqgspbrnk6h2"; + }; + + propagatedBuildInputs = [texLiveLatexXColor texLive]; + + phaseNames = ["doCopy"]; + doCopy = FullDepEntry ('' + ensureDir $out/share/texmf/tex/generic/pgf + cp -r * $out/share/texmf/tex/generic/pgf + '') ["minInit" "doUnpack" "defEnsureDir" "addInputs"]; + + meta = { + description = "Extra components for TeXLive: graphics package"; + }; +} diff --git a/pkgs/misc/tex/texlive/xcolor.nix b/pkgs/misc/tex/texlive/xcolor.nix new file mode 100644 index 000000000000..df9eb70689f8 --- /dev/null +++ b/pkgs/misc/tex/texlive/xcolor.nix @@ -0,0 +1,34 @@ +args: with args; +rec { + name = "texlive-latex-xcolor-2007"; + src = fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/l/latex-xcolor/latex-xcolor_2.11.orig.tar.gz; + sha256 = "0z78xfn5iq5ncg82sd6v2qrxs8p9hs3m4agaz90p4db5dvk2w0mn"; + }; + + buildInputs = [texLive]; + phaseNames = ["doCopy"]; + doCopy = FullDepEntry ('' + export HOME=$PWD + + ensureDir $out/share/texmf/tex/latex/xcolor + ensureDir $out/share/texmf/dvips/xcolor + latex xcolor.ins + cp *.sty *.def $out/share/texmf/tex/latex/xcolor + cp *.pro $out/share/texmf/dvips/xcolor + + latex xcolor.dtx + latex xcolor.dtx + makeindex -s gind.ist xcolor.idx + latex xcolor.dtx + latex xcolor.dtx + + rm *.sty *.pro *.ins *.def *.dtx + ensureDir $out/share/texmf/doc/latex-xcolor + cp * $out/share/texmf/doc/latex-xcolor + '') ["minInit" "doUnpack" "defEnsureDir" "addInputs"]; + + meta = { + description = "Extra components for TeXLive: LaTeX color support"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1d6418b76f56..d7e636ba367c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6167,7 +6167,42 @@ let pkgs = rec { ghostscript = ghostscriptX; }; + /* Look in configurations/misc/raskin.nix for usage example (around revisions + where TeXLive was added) + + (texLiveAggregationFun { + paths = [texLive texLiveExtra texLiveCMSuper + texLiveBeamer + ]; + } null) + */ texLive = texLiveFun null; + texLiveAggregationFun = builderDefsPackage (import ../misc/tex/texlive/aggregate.nix); + + texLiveExtraFun = builderDefsPackage (import ../misc/tex/texlive/extra.nix) { + inherit texLive; + }; + texLiveExtra = texLiveExtraFun null; + + texLiveCMSuperFun = builderDefsPackage (import ../misc/tex/texlive/cm-super.nix) { + inherit texLive; + }; + texLiveCMSuper = texLiveCMSuperFun null; + + texLiveLatexXColorFun = builderDefsPackage (import ../misc/tex/texlive/xcolor.nix) { + inherit texLive; + }; + texLiveLatexXColor = texLiveLatexXColorFun null; + + texLivePGFFun = builderDefsPackage (import ../misc/tex/texlive/pgf.nix) { + inherit texLiveLatexXColor texLive; + }; + texLivePGF = texLivePGFFun null; + + texLiveBeamerFun = builderDefsPackage (import ../misc/tex/texlive/beamer.nix) { + inherit texLiveLatexXColor texLivePGF texLive; + }; + texLiveBeamer = texLiveBeamerFun null; toolbuslib = import ../development/libraries/toolbuslib { inherit stdenv fetchurl aterm; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index cd86ba67f384..5a58f14d09f2 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -389,16 +389,20 @@ args: with args; with stringsWithDeps; with lib; phaseNames = args.phaseNames ++ ["doForceShare" "doPropagate"]; + + extraDerivationAttrs = lib.getAttr ["extraDerivationAttrs"] {} args; builderDefsPackage = bd: func: args: ( let localDefs = bd (func ((bd null) // args)) args null; in - stdenv.mkDerivation (rec { + stdenv.mkDerivation ((rec { inherit (localDefs) name; builder = writeScript (name + "-builder") (textClosure localDefs localDefs.phaseNames); meta = localDefs.meta // {inherit src;}; - }) + }) // (if localDefs ? propagatedBuildInputs then { + inherit (localDefs) propagatedBuildInputs; + } else {}) // extraDerivationAttrs) ); }) // args