nixpkgs/pkgs/tools/typesetting/tex/texlive/aggregate.nix
2015-09-14 22:27:19 -06:00

88 lines
2.9 KiB
Nix

args @ {poppler, perl, makeWrapper, ... }: with args;
rec {
name = "TeXLive-linkdir";
buildInputs = lib.closePropagation paths
++ [perl]
++ stdenv.lib.optional stdenv.isDarwin makeWrapper;
phaseNames = [ "doAggregate" ];
doAggregate = fullDepEntry (''
set +o pipefail
mkdir -p $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}"
mkdir -p $out/"$REPLY"
done
find $currentPath/share/info $currentPath/share/man $(echo $currentPath/texmf*/) ! -type d | while read; do
REPLY="''${REPLY#$currentPath}"
ln -fs $currentPath/"$REPLY" $out/"$REPLY"
echo
done | while read; do head -n 999 >/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 -rf $out/texmf-config
find $out/texmf*/ -type d | while read; do
REPLY="''${REPLY#$out/texmf}"
mkdir -p $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 -f $out/texmf*/ls-R
for i in web2c texconfig fonts/map; do
mkdir -p $out/texmf-config/$i
cp -Lr $out/texmf*/$i/* $out/texmf-config/$i || true
done
chmod -R u+w $out/texmf-config
yes | TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
yes | PATH=$PATH:$out/bin mktexlsr $out/texmf*
yes | TEXMFCONFIG=$out/texmf-config HOME=$PWD PATH=$PATH:$out/bin updmap --syncwithtrees
yes | PATH=$PATH:$out/bin mktexlsr $out/texmf*
'' + stdenv.lib.optionalString stdenv.isDarwin ''
# did the same thing in texLive, but couldn't get it to carry to the
# binaries installed by texLiveFull
for prog in $out/bin/*; do
wrapProgram "$prog" --prefix DYLD_LIBRARY_PATH : "${poppler}/lib"
done
'' ) [ "minInit" "defEnsureDir" "addInputs" ];
preferLocalBuild = true;
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.
'';
};
}