git » texlive-texmf.git » main » tree

[main] / PKGBUILD

# Maintainer: Antonio Rojas <arojas@archlinux.org>
# Maintainer: Caleb Maclennan <caleb@alerque.com>
# Contributor: Rémy Oudompheng <remy@archlinux.org>

pkgbase=texlive-texmf
pkgname=(texlive-doc texlive-meta)
# generate collections with ./list-collections
_collections=( basic bibtexextra binextra context fontsextra fontsrecommended fontutils formatsextra games humanities langarabic langchinese langcjk langcyrillic langczechslovak langenglish langeuropean langfrench langgerman langgreek langitalian langjapanese langkorean langother langpolish langportuguese langspanish latex latexextra latexrecommended luatex mathscience metapost music pictures plaingeneric pstricks publishers xetex )
for _coll in ${_collections[@]}; do
  pkgname+=(texlive-$_coll)
done
_rev=70897
pkgver=2024.2
pkgrel=1
pkgdesc='TeX Live - '
license=(GPL)
arch=(any)
depends=(texlive-bin)
makedepends=(subversion)
url='https://tug.org/texlive/'
source=(texmf-dist-$pkgver::svn://tug.org/texlive/tags/texlive-$pkgver/Master/texmf-dist#revision=$_rev
        tlpkg-$pkgver::svn://tug.org/texlive/tags/texlive-$pkgver/Master/tlpkg#revision=$_rev
        x86_64-linux-$pkgver::svn://tug.org/texlive/tags/texlive-$pkgver/Master/bin/x86_64-linux#revision=$_rev
        09-texlive-fonts.conf
        texmf.cnf.patch
        texmfcnf.lua.patch
        70-mktexlsr.hook
        71-texlive-language.hook
        texlive-language.script
        72-texlive-fmtutil.hook
        texlive-fmtutil.script
        73-texlive-updmap.hook
        texlive-updmap.script
        80-mtxrun.hook
        mtxrun.script)
sha256sums=('SKIP'
            'SKIP'
            'SKIP'
            '5e79c40cf3ab93348fc89e97890198601767ea2c8fea89ea76088c17a2b35962'
            '204245fb6f72091c72ad78727ce970a9d03795ef6cab35b9e5d7cf69630ed171'
            '13932156d6c46cd8d2c19d92f574d92a7aa461928fce793fc06835714b768bc9'
            '95f6540c49b11f1ece8010d76b53ca90efd61e1831530562bfcde4350f6c1db1'
            'e6d399faee55ba461cf7e617f2369f5c516de292b28afc6665c9e3fe2b821973'
            'c64c2a6371e94b0f67799c0ac84ea74d8edbc181b26672aa15b8132ec5fbabc3'
            '9b99f197c71149b03355f7c24ee1e07f54a1262bb030756fe660b9aa715a184f'
            'f96e9f815fa0a4b85e677f2a9215d9106b8abe46eceb3f3e36a6c76eda3e4a85'
            '2141c0842668fb937fd21ca2fae39b642c9665656e404a0d4ee7bdc477bf51fe'
            'ee6e76192a5ad880a2152cd7900b86c8465239fb228045a2f8360b0d7a449f4a'
            'f6bb67db32d37ca15eba88bd15d8b9882c61915f98bc8d7c3c21a66c8cf8f019'
            '98b730e917281227e29077ba5689ad78baee0af3859b55966b2604c6a85f1305')
options=(!strip) # Nothing to strip, save packaging time

prepare() {
  mv texmf-dist-$pkgver texmf-dist
  mv tlpkg-$pkgver tlpkg
  mv x86_64-linux-$pkgver x86_64-linux

# Customize configuration
  patch -d texmf-dist/web2c -p0 < texmf.cnf.patch
  patch -d texmf-dist/web2c -p0 < texmfcnf.lua.patch

  # Copy files where format and maps will be extracted from
  cp texmf-dist/web2c/{fmtutil.cnf,updmap.cfg,texmf.cnf} .
  cp texmf-dist/tex/generic/config/language.{dat,dat.lua,def} .
  
  # Split files per package
  for _coll in ${_collections[@]}; do
    echo -ne "splitting collection ${_coll}"
    # extract description
    _desc=`sed -e "0,/^name collection-${_coll}$/d;/^$/Q" tlpkg/texlive.tlpdb | sed -ne 's|^shortdesc ||p'`
    echo $_desc > pkgdesc-$_coll
    # extract depends
    _pkgs=`sed -e "0,/^name collection-${_coll}$/d;/^$/Q" tlpkg/texlive.tlpdb | sed -ne 's|^depend ||p'`
    _prog=0
    _total=`echo $_pkgs | wc -w`
    for _pkg in $_pkgs; do
      _prog=$(($_prog+1))
      echo -ne "\rsplitting collection ${_coll} ($_prog/$_total)"
      # collection depends are added as dependencies
      if [[ $_pkg == collection-* ]]; then
        echo ${_pkg/collection-/texlive-} >> depends-$_coll
      else
        echo $_pkg >> packages-$_coll
        # move files to the corresponding subdir
        _split=`sed -e "0,/^name ${_pkg}$/d;/^$/Q" tlpkg/texlive.tlpdb`
        _files=`echo "$_split" | sed -e "0,/^runfiles/d;/^[a-z]/Q" | grep texmf-dist` || true
        for _file in $_files; do
          # some modules include docs in runfiles
          [[ $_file == texmf-dist/doc/* ]] && continue
          mkdir -p texlive-$_coll/$(dirname $_file)
          mv $_file texlive-$_coll/$(dirname $_file)
        done
        # extract formats
        _fmts=`echo "$_split" | grep "execute AddFormat"` || true
        if [[ ! -z "$_fmts" ]]; then
          echo "$_fmts" | while read -r _fmt; do
            _name=`echo $_fmt | sed 's|.* name=\(\S*\).*|\1|'`
            _engine=`echo $_fmt | sed 's|.* engine=\(\S*\).*|\1|'`
            grep -E "(^| )$_name $_engine" fmtutil.cnf >> $_coll.fmts
          done
        fi
        # extract maps
        _maps=`echo "$_split" | grep -E "execute add(Kanji|Mixed|)Map"` || true
        if [[ ! -z "$_maps" ]]; then
          echo "$_maps" | while read -r _map; do
            grep "${_map/execute add/}" updmap.cfg >> $_coll.maps
          done
        fi
        # extract hyphen rules
        _langs=`echo "$_split" | grep "execute AddHyphen"` || true
        if [[ ! -z "$_langs" ]]; then
          sed -e "0,/from ${_pkg}:/d;/\%/Q" language.dat >> $_coll.dat
          sed -re "0,/from ${_pkg}:/d;/(^--|^})/Q" language.dat.lua >> $_coll.dat.lua
          sed -e "0,/from ${_pkg}:/d;/\%/Q" language.def >> $_coll.def
        fi
        # extract linked scripts
        if [[ ${_pkg} != psutils && "$_split" == *${_pkg}.ARCH* ]]; then
          _links=`sed -e "0,/^name ${_pkg}.x86_64-linux$/d;/^$/Q" tlpkg/texlive.tlpdb | grep "bin/x86_64-linux" | sed -e 's|bin/x86_64-linux||g'`
          for _link in $_links; do
            if [[ $(readlink -m x86_64-linux/$_link) == */scripts/* ]]; then
              mkdir -p ${_coll}-bin
              cp -P x86_64-linux/$_link ${_coll}-bin
              ln -sfn "$(readlink ${_coll}-bin/$_link | sed 's|..\/..|..\/share|')" ${_coll}-bin/$_link
            fi
          done
        fi
      fi
    done
    echo
  done
}

_package() {
  pkgdesc+="`cat pkgdesc-$1`"
  [[ -s depends-$1 ]] && depends+=(`cat depends-$1`)
# jadetex depends on ulem and marvosym
  [[ $1 == formatsextra ]] && depends+=(texlive-plaingeneric texlive-fontsrecommended texlive-latexrecommended)
  [[ $1 == latex || $1 == binextra ]] && depends+=(dvisvgm)
  [[ $1 == context ]] && optdepends+=('luametatex: LuaMetaTeX engine')
  [[ $1 == fontutils ]] && optdepends+=('ghostscript: for epstopdf')
  [[ $1 == pictures ]] && optdepends+=('ghostscript: for epspdf')
  [[ $1 == latexextra ]] && optdepends+=('java-runtime: for pdfannotextractor'
                                         'python-pygments: for pygmentex')
  [[ $1 == music ]] && optdepends+=('fontforge: for scripts from the lilyglyphs package')
  if [[ $1 == basic ]]; then
    depends+=(perl) # needed by fmtutil which runs from install hook
    optdepends+=('perl-tk: for the tlmgr GUI'
                 'biber: for bibliography processing')
    conflicts=(texlive-core)
    provides=(texlive-core)
    replaces=(texlive-core)
  fi
  if [[ $1 == binextra ]]; then
    optdepends+=('ed: for texconfig'
                 'dialog: for texconfig'
                 'java-runtime: for utilities like arara, texplate'
                 'perl-tk: for texdoctk'
                 'perl-yaml-tiny: for latexindent'
                 'perl-file-homedir: for latexindent'
                 'perl-ipc-system-simple: for latex-git-log'
                 'python: for de-macro, dviasm, pythontex'
                 'texlive-latexrecommended: for pdfjam'
                 'wdiff: for texdiff')
    conflicts=(git-latexdiff)
    provides=(git-latexdiff)
    replaces=(git-latexdiff)
  fi
  if [[ $1 == mathscience ]]; then
    conflicts=(texlive-science)
    provides=(texlive-science)
    replaces=(texlive-science)
  fi
  if [[ $1 == langother ]]; then
    conflicts=(texlive-langextra)
    provides=(texlive-langextra)
    replaces=(texlive-langextra)
  fi
  if [[ $1 == lang* ]]; then
    groups=(texlive-lang)
  else
    groups=(texlive)
  fi
  for _pkg in `cat packages-$1`; do
    [[ ! ${_collections[@]} =~ (^| )$_pkg($| ) ]] && provides+=(texlive-$_pkg)
  done

  mkdir -p "$pkgdir"/usr/share
  mv texlive-$1/texmf-dist "$pkgdir"/usr/share
  
  [[ -d $1-bin ]] && mv $1-bin "$pkgdir"/usr/bin

  [[ -s $1.fmts ]] && install -Dm644 $1.fmts -t "$pkgdir"/var/lib/texmf/arch/installedpkgs
  [[ -s $1.maps ]] && install -Dm644 $1.maps -t "$pkgdir"/var/lib/texmf/arch/installedpkgs
  [[ -s $1.dat ]] && install -Dm644 $1.dat -t "$pkgdir"/var/lib/texmf/arch/installedpkgs
  [[ -s $1.dat.lua ]] && install -Dm644 $1.dat.lua -t "$pkgdir"/var/lib/texmf/arch/installedpkgs
  [[ -s $1.def ]] && install -Dm644 $1.def -t "$pkgdir"/var/lib/texmf/arch/installedpkgs
  
  if [[ $1 == basic ]]; then
    backup=(etc/texmf/dvipdfmx/dvipdfmx.cfg
            etc/texmf/dvips/config/config.ps
            etc/texmf/tex/generic/tex-ini-files/pdftexconfig.tex
            etc/texmf/web2c/fmtutil.cnf
            etc/texmf/web2c/mktex.cnf
            etc/texmf/web2c/texmf.cnf
            etc/texmf/web2c/updmap-hdr.cfg
            etc/texmf/xdvi/XDvi)
    install -Dm644 09-texlive-fonts.conf -t "$pkgdir"/usr/share/fontconfig/conf.avail/
  # install pacman hooks
    install -Dm644 7*.hook -t "$pkgdir"/usr/share/libalpm/hooks/
    install -Dm755 texlive-fmtutil.script "$pkgdir"/usr/share/libalpm/scripts/texlive-fmtutil
    install -Dm755 texlive-language.script "$pkgdir"/usr/share/libalpm/scripts/texlive-language
    install -Dm755 texlive-updmap.script "$pkgdir"/usr/share/libalpm/scripts/texlive-updmap
  # install tlpkg files needed by tlmgr and texconfig
    install -Dm644 "$srcdir"/tlpkg/TeXLive/* -t "$pkgdir"/usr/share/perl5/vendor_perl/TeXLive/
    install -Dm644 "$srcdir"/tlpkg/texlive.tlpdb -t "$pkgdir"/usr/share/tlpkg
    install -Dm644 "$srcdir"/tlpkg/installer/config.guess -t "$pkgdir"/usr/share/tlpkg/installer
  # remove files that will be autogenerated
    rm "$pkgdir"/usr/share/texmf-dist/web2c/updmap.cfg
    rm "$pkgdir"/usr/share/texmf-dist/web2c/fmtutil.cnf
    rm "$pkgdir"/usr/share/texmf-dist/tex/generic/config/language.{dat,dat.lua,def}
  # copy config files to $TEXMFCONFIG tree
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/dvipdfmx/dvipdfmx.cfg -t "$pkgdir"/etc/texmf/dvipdfmx/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/dvips/config/config.ps -t "$pkgdir"/etc/texmf/dvips/config/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/tex/generic/config/language.us "$pkgdir"/etc/texmf/tex/generic/config/language.dat
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/tex/generic/config/language.us.lua "$pkgdir"/etc/texmf/tex/generic/config/language.dat.lua
    echo "}" >> "$pkgdir"/etc/texmf/tex/generic/config/language.dat.lua
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/tex/generic/config/language.us.def "$pkgdir"/etc/texmf/tex/generic/config/language.def
    echo "\uselanguage {USenglish} %%% This MUST be the last line of the file." >> "$pkgdir"/etc/texmf/tex/generic/config/language.def
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/tex/generic/tex-ini-files/pdftexconfig.tex -t "$pkgdir"/etc/texmf/tex/generic/tex-ini-files/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/web2c/fmtutil-hdr.cnf "$pkgdir"/etc/texmf/web2c/fmtutil.cnf
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/web2c/mktex.cnf -t "$pkgdir"/etc/texmf/web2c/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/web2c/texmf.cnf -t "$pkgdir"/etc/texmf/web2c/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/web2c/updmap-hdr.cfg -t "$pkgdir"/etc/texmf/web2c/
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/xdvi/XDvi -t "$pkgdir"/etc/texmf/xdvi/
  fi

  if [[ $1 == binextra ]]; then
    backup=(etc/texmf/chktex/chktexrc)
  # copy config files to $TEXMFCONFIG tree
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/chktex/chktexrc -t "$pkgdir"/etc/texmf/chktex/
  # install zsh completions
    mkdir -p "$pkgdir"/usr/share/zsh/site-functions
    TEXMFCNF="$srcdir" \
    "$pkgdir"/usr/bin/texdoc --print-completion zsh > "$pkgdir"/usr/share/zsh/site-functions/_texdoc 2>/dev/null
  fi

  if [[ $1 == context ]]; then
  # install pacman hooks
    install -Dm644 80-mtxrun.hook -t "$pkgdir"/usr/share/libalpm/hooks/
    install -Dm755 mtxrun.script "$pkgdir"/usr/share/libalpm/scripts/mtxrun
    chmod +x "$pkgdir"/usr/share/texmf-dist/scripts/context/lua/mtxrun.lua
  fi

  if [[ $1 == fontutils ]]; then
    backup=(etc/texmf/ttf2pk/ttf2pk.cfg)
  # copy config files to $TEXMFCONFIG tree
    install -Dm644 "$pkgdir"/usr/share/texmf-dist/ttf2pk/ttf2pk.cfg -t "$pkgdir"/etc/texmf/ttf2pk/
  fi
}
  
for _coll in ${_collections[@]}; do
  eval "package_texlive-$_coll() {
    _package $_coll
  }"
done

package_texlive-doc() {
  pkgdesc+='documentation'

  mkdir -p "$pkgdir"/usr/share/doc
  mv texmf-dist/doc/{info,man} "$pkgdir"/usr/share
  mv texmf-dist/doc "$pkgdir"/usr/share/doc/texlive
# Symlink so texdoc can find it
  mkdir -p "$pkgdir"/usr/share/texmf-dist
  ln -s /usr/share/doc/texlive "$pkgdir"/usr/share/texmf-dist/doc
# Fix conflicts with asymptote, psutils, dvisvgm, t1utils
  rm "$pkgdir"/usr/share/info/asy-faq.info
  rm "$pkgdir"/usr/share/man/man1/{asy,dvisvgm,epsffit,extractres,includeres,psbook,psjoin,psnup,psresize,psselect,pstops,psutils,t1ascii,t1asm,t1binary,t1disasm,t1mac,t1unmac}.1
  rm -f "$pkgdir"/usr/share/man{,/man*}/{Makefile,*.pdf}
}
 
package_texlive-meta() {
  pkgdesc='Metapackage to install Tex Live'
  for _coll in ${_collections[@]}; do
    [[ $_coll != lang* ]] && depends+=(texlive-$_coll)
  done
}