summary refs log tree commit diff
path: root/pkgs/tools/typesetting/tex/texlive/aggregate.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/typesetting/tex/texlive/aggregate.nix')
-rw-r--r--pkgs/tools/typesetting/tex/texlive/aggregate.nix70
1 files changed, 70 insertions, 0 deletions
diff --git a/pkgs/tools/typesetting/tex/texlive/aggregate.nix b/pkgs/tools/typesetting/tex/texlive/aggregate.nix
new file mode 100644
index 000000000000..1723f4819062
--- /dev/null
+++ b/pkgs/tools/typesetting/tex/texlive/aggregate.nix
@@ -0,0 +1,70 @@
+args : with args;
+rec {
+  phaseNames = ["doAggregate"];
+  name = "TeXLive-linkdir";
+
+  buildInputs = lib.closePropagation paths;
+
+  doAggregate = fullDepEntry (''
+
+    ensureDir $out/bin
+    for currentPath in ${lib.concatStringsSep " " buildInputs}; do
+        echo Symlinking "$currentPath"
+        find $currentPath/share/info $currentPath/share/man $(echo $currentPath/texmf*/) ! -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
+
+        for i in "$currentPath/bin/"* :; do
+            test "$i" != : || continue
+            echo -ne "#! $SHELL\\nexec $i \"\$@\"" > "$out/bin/$(basename "$i")" && \
+            chmod a+x "$out/bin/$(basename "$i")"
+        done
+
+        echo
+
+        cp -Trfp $currentPath/libexec $out/libexec || true
+    done
+
+    ln -s $out/texmf* $out/share/
+
+    rm -r $out/texmf-config
+    find $out/texmf/ -type d | while read; do
+      REPLY="''${REPLY#$out/texmf}"
+      ensureDir $out/texmf-config/"$REPLY"
+    done
+
+    for i in $out/libexec/*/* :; do
+        test "$i" = : && continue;
+        test -f "$i" && \
+        test -x "$i" && \
+        echo -ne "#! $SHELL\\nexec $i \"\$@\"" >$out/bin/$(basename $i) && \
+        chmod a+x $out/bin/$(basename $i)
+    done
+
+    rm $out/texmf*/ls-R
+    for i in web2c texconfig fonts/map; do
+        cp -r $out/texmf/$i/* $out/texmf-config/$i || true
+    done
+
+    TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
+    PATH=$PATH:$out/bin mktexlsr $out/texmf*
+    TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
+    PATH=$PATH:$out/bin mktexlsr $out/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.
+    '';
+  };
+}