summaryrefslogtreecommitdiff
path: root/source/t/texlive/prep/texmf_get.sh
diff options
context:
space:
mode:
authorPatrick J Volkerding <volkerdi@slackware.com>2018-05-28 19:12:29 +0000
committerEric Hameleers <alien@slackware.com>2018-05-31 23:39:35 +0200
commit646a5c1cbfd95873950a87b5f75d52073a967023 (patch)
treeb8b8d2ab3b0d432ea69ad1a64d1c789649d65020 /source/t/texlive/prep/texmf_get.sh
parentd31c50870d0bee042ce660e445c9294a59a3a65b (diff)
downloadcurrent-646a5c1cbfd95873950a87b5f75d52073a967023.tar.gz
Mon May 28 19:12:29 UTC 201820180528191229
a/pkgtools-15.0-noarch-13.txz: Rebuilt. installpkg: default line length for --terselength is the number of columns. removepkg: added --terse mode. upgradepkg: default line length for --terselength is the number of columns. upgradepkg: accept -option in addition to --option. ap/vim-8.1.0026-x86_64-1.txz: Upgraded. d/bison-3.0.5-x86_64-1.txz: Upgraded. e/emacs-26.1-x86_64-1.txz: Upgraded. kde/kopete-4.14.3-x86_64-8.txz: Rebuilt. Recompiled against libidn-1.35. n/conntrack-tools-1.4.5-x86_64-1.txz: Upgraded. n/libnetfilter_conntrack-1.0.7-x86_64-1.txz: Upgraded. n/libnftnl-1.1.0-x86_64-1.txz: Upgraded. n/links-2.16-x86_64-2.txz: Rebuilt. Rebuilt to enable X driver for -g mode. n/lynx-2.8.9dev.19-x86_64-1.txz: Upgraded. n/nftables-0.8.5-x86_64-1.txz: Upgraded. n/p11-kit-0.23.11-x86_64-1.txz: Upgraded. n/ulogd-2.0.7-x86_64-1.txz: Upgraded. n/whois-5.3.1-x86_64-1.txz: Upgraded. xap/network-manager-applet-1.8.12-x86_64-1.txz: Upgraded. xap/vim-gvim-8.1.0026-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/t/texlive/prep/texmf_get.sh')
-rw-r--r--source/t/texlive/prep/texmf_get.sh752
1 files changed, 752 insertions, 0 deletions
diff --git a/source/t/texlive/prep/texmf_get.sh b/source/t/texlive/prep/texmf_get.sh
new file mode 100644
index 00000000..396fdceb
--- /dev/null
+++ b/source/t/texlive/prep/texmf_get.sh
@@ -0,0 +1,752 @@
+#!/bin/bash
+
+# texmf_get.sh (c) 2016-2017 Johannes Schoepfer, Germany, slackbuilds[at]schoepfer[dot]info
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# V 0.14.2
+#
+# Prepare xz-compressed tarballs of texlive-texmf-trees based on texlive.tlpdb
+# This script takes care of dependencies(as far as these are present in texlive.tlpdb) of collections and packages,
+# and that every texlive-package is included only once.
+# The editions(base/extra/fonts/docs) should contain nobinaries(exception biber)
+# -base: the most usefull stuff, all metafonts, all manpages, the most
+# binaries/scripts, 65mb 2017-11-07
+# -docs: -base documentation only, no manpages/GNU infofiles
+# -fonts: fonts only, no metafonts
+# -extra: remaining stuff
+#
+# texlive netarchive policy: Every package is included as dependency
+# in exactly one collection. A package may have dependencies on other
+# packages from any collection.
+
+# package source: http://mirror.ctan.org/systems/texlive/tlnet/archive/
+
+#set -e
+MAJORVERSION=2017
+
+# globally excluded packages, which e.g. are
+# -useless without tlmgr-installer
+# -non-linux
+# -covered by an external package
+# -obsolete
+
+global_exclude="
+ asymptote
+ tlcockpit
+ tlshell
+ texosquery
+ aleph
+ omega
+ antomega
+ omegaware
+ lambda
+ otibet
+ cslatex
+ "
+
+texmf_editions () {
+ # At first, $corepackages for the base, and other essentials
+ PACKAGES="
+ $(cat $corepackages)
+ collection-basic
+ collection-latex
+ collection-metapost
+ collection-plaingeneric
+ collection-fontutils
+ collection-luatex
+ collection-context
+ cbfonts-fd
+ xetex-devanagari
+ " texmfget base || exit 1
+
+ # Now the fonts package to make sure that big fonts like cm-super are not included elsewhere as dependency
+ PACKAGES="
+ cm-super
+ cbfonts
+ ipaex
+ wadalab
+ ethiop-t1
+ fonts-tlwg
+ uhc
+ fandol
+ arphic
+ arphic-ttf
+ nanumtype1
+ baekmuk
+ unfonts-extra
+ unfonts-core
+ " texmfget fonts || exit 1
+
+ # put some stuff in "extra" to before these make their way into "base" as dependency
+ PACKAGES="
+ $(grep ^"name biblatex" $db | grep -v '\.' | cut -d' ' -f2 )
+ biber.x86_64-linux
+ biber.i386-linux
+ bib2gls
+ bibarts
+ arara
+ latex2nemeth
+ ghsystem
+ adobemapping
+ knitting
+ pgfornament
+ pgfplots
+ arabi
+ nwejm
+ uantwerpendocs
+ sduthesis
+ stellenbosch
+ fithesis
+ gregoriotex
+ lilyglyphs
+ musixtex-fonts
+ beebe
+ velthuis
+ mwe
+ pdfx
+ media9
+ pst-cox
+ pst-poker
+ pst-vectorian
+ pst-geo
+ quran
+ ijsra
+ fibeamer
+ udesoftec
+ xduthesis
+ hustthesis
+ bangorcsthesis
+ sapthesis
+ uowthesis
+ cs
+ pl
+ cc-pl
+ tipa
+ kerkis
+ amiri
+ cns
+ vntex
+ montex
+ xcharter
+ fonts-churchslavonic
+ japanese-otf
+ sanskrit-t1
+ skaknew
+ padauk
+ " texmfget extra || exit 1
+
+ # Completing the base
+ PACKAGES="
+ collection-langcyrillic
+ collection-langczechslovak
+ collection-langeuropean
+ collection-langenglish
+ collection-langfrench
+ collection-langgerman
+ collection-langgreek
+ collection-langitalian
+ collection-langpolish
+ collection-langportuguese
+ collection-langspanish
+ collection-langjapanese
+ collection-langkorean
+ collection-langarabic
+ collection-langchinese
+ collection-langcjk
+ collection-langother
+ collection-xetex
+ collection-humanities
+ collection-mathscience
+ collection-pictures
+ collection-publishers
+ collection-music
+ collection-games
+ collection-fontsrecommended
+ collection-latexrecommended
+ collection-binextra
+ collection-bibtexextra
+ collection-formatsextra
+ collection-latexextra
+ acro
+ acronym
+ acroterm
+ enumitem
+ enumitem-zref
+ yfonts
+ doublestroke
+ was
+ xypic
+ barcodes
+ qrcode
+ lastpage
+ appendix
+ changebar
+ footmisc
+ multirow
+ overpic
+ subfigure
+ titlesec
+ siunitx
+ combelow
+ csquotes
+ etoolbox
+ etextools
+ idxlayout
+ bidi
+ filecontents
+ eplain
+ texsis
+ mltex
+ lollipop
+ moreverb
+ indextools
+ splitindex
+ eepic
+ bigfoot
+ xstring
+ showexpl
+ cweb-latex
+ hypdvips
+ ptex
+ perltex
+ collection-pstricks
+ $(collection_by_size fontsextra 20000 || exit 1)
+ " texmfget base || exit 1
+
+ # Put all remaining stuff in "extra"
+ # Pull some bin-packages from tlnet, which aren't provided by the texlive source tarball
+ PACKAGES="
+ collection-texworks
+ collection-wintools
+ wasy2-ps
+ " texmfget extra || exit 1
+
+ # Call "fonts" at the end to add remaining fonts
+ PACKAGES="
+ collection-fontsextra
+ " texmfget fonts || exit 1
+
+}
+
+# ==== Nothing to edit beyond this line ====
+
+usage () {
+ echo
+ echo "Generate texmf trees/editions based on collections/packages and their dependencies."
+ echo "./texmf_get.sh [base|docs|extra|fonts]"
+ echo
+ echo "-base: texfiles, no docs"
+ echo "-docs: docs of -base"
+ echo "-extra: remaining texfiles and docs"
+ echo "-fonts: fonts and docs"
+ echo
+ echo "Only new/updated/missing tex packages are downloaded."
+ echo "The first run takes \"long\", tex packages(about 2500Mb)"
+ echo "need to be downloaded and metafiles are generated."
+ echo "To check out a new version/release, delete"
+ echo "$db"
+ echo "A new ascii database is pulled on the next run,"
+ echo "and a new version yymmdd is set."
+ echo
+ echo "All generated tarballs, logs etc. are going to"
+ echo "$TMP"
+ echo
+}
+
+collection_by_size () {
+ # from collection $1, pull packages smaller $2 bytes
+ start_n="$(grep -n ^"name collection-$1"$ $db | cut -d':' -f1)"
+ # find end of package/collection
+ for emptyline in $emptylines
+ do
+ if [ "$emptyline" -gt "$start_n" ]
+ then
+ end_n=$emptyline
+ break
+ fi
+ done
+ extrapackages="$(sed "${start_n},${end_n}!d" $db | grep ^"depend " | grep -v ^"depend collection" | sed "s/^depend//g" )"
+
+ # add if smaller than ...
+ for checksize in $extrapackages
+ do
+ package_meta $checksize || exit 1
+ size=$(grep ^"containersize " $texmf/$checksize.meta | cut -d' ' -f2)
+ # for $2, e.g. 3000 means 3kb
+ [ $size -lt $2 ] && echo $checksize
+ done
+}
+
+package_meta () {
+ if [ ! -s "$texmf/$1.meta" ]
+ then
+ # collection start linenumer
+ start_n="$(grep -n ^"name ${1}"$ $db | cut -d':' -f1)"
+ [ -z "$start_n" ] && echo "$1 was not found in $db, bye." && exit 1
+ # find end of package/collection
+ for emptyline in $emptylines
+ do
+ if [ "$emptyline" -gt "$start_n" ]
+ then
+ end_n=$emptyline
+ break
+ fi
+ done
+ # Don't handle collections as dependency of other collections
+ sed "${start_n},${end_n}!d;/^depend collection/d" $db > $texmf/$1.meta
+ fi
+}
+
+download () {
+ # Download packages, if not already available. Not every packages has a corresponding .doc package.
+ # Try three times if package isn't present, with -t1 to get another mirror the second time
+ cd $texmf
+ if [ ! -s "${1}${flavour}.tar.xz" ]
+ then
+ for run in {1..10}
+ do
+ wget -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
+ [ -s "${1}${flavour}.tar.xz" ] && break
+ done
+ fi
+ # If no success by downloading, write error log
+ [ ! -s ${1}${flavour}.tar.xz ] && echo "Downloading ${1}${flavour}.tar.xz did not work, writing to $errorlog" && echo "$VERSION" >> $errorlog && echo "Error downloading ${1}${flavour}.tar.xz" >> $errorlog && exit 1
+
+ # check sha512, give three tries for downloading again(diffrent mirrors are used automatically)
+ if [ "$flavour" = ".doc" ]
+ then
+ sha512="$(grep ^doccontainerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ else
+ sha512="$(grep ^containerchecksum $texmf/$1.meta | cut -d' ' -f2 )"
+ fi
+
+ for run in {1..10}
+ do
+ if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
+ then
+ # Download (hopefully) newer file
+ rm ${1}${flavour}.tar.xz
+ wget -t1 -c ${mirror}archive/${1}${flavour}.tar.xz
+ else
+ break
+ fi
+ done
+ # check sha512 again, exit if it fails
+ if [ "$(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ]
+ then
+ echo "sha512sum $(sha512sum ${1}${flavour}.tar.xz | cut -d' ' -f1 ) of"
+ echo "${package}${flavour}.tar.xz doesn't match with $db"
+ # delete metafile on failure to get generated again on next run, where new $db may be in use
+ rm $texmf/$1.meta
+ echo "sha512sum $sha512"
+ echo "Delete ${db}* to be current again, and try again."
+ exit 1
+ fi
+}
+
+untar () {
+ # leave if $1 has no content. Therea collections with basically no used package, e.g. texworks
+ if [ -s "$1" ]
+ then
+ while read package
+ do
+ # untar all packages, check for relocation, "relocate 1" -> untar in texmf-dist
+ download $package || exit 1
+ # untar the tex package
+ unset relocated
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && relocated="-C texmf-dist"
+ tar vxf ${package}${flavour}.tar.xz --exclude tlpkg $relocated || exit 1
+
+ # if binaries are present, put them in texmf-dist
+ [ -d bin ] && cp -a bin texmf-dist && rm -rf bin
+ if [ "$flavour" = ".doc" ]
+ then
+ size=$(( $(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 ))
+ else
+ size=$(( $(grep ^containersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 ))
+ fi
+ shortdesc="$(grep ^shortdesc $texmf/$package.meta | cut -d' ' -f2- )"
+ echo "$size Kb, $package$flavour: $shortdesc" >> $output.meta
+ #grep ^"execute addMap" $texmf/$package.meta | sed "s/^execute //g" >> $output.updmap.cfg
+ done < $1
+
+ # copy packages index to texmf-dist, so included packages are known in later installation
+ cat $output.meta >> $output.$edition.meta
+
+ # cleanup
+ [ -f $output.meta ] && rm $output.meta
+ fi
+}
+
+remove_cruft () {
+ # Remove m$-stuff, ConTeXt single-user-system stuff, source leftovers and pdf-versions of manpages
+ rm -rf texmf-dist/source
+ rm -rf texmf-dist/scripts/context/stubs/source/
+ find texmf-dist/ -type d -name 'win32' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'win64' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'mswin' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'win' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'setup' -exec rm -rf {} +
+ find texmf-dist/ -type d -name 'install' -exec rm -rf {} +
+ find texmf-dist/ -type f -name '*.bat' -delete
+ find texmf-dist/ -type f -name '*.bat.w95' -delete
+ find texmf-dist/ -type f -name '*win32*' -delete
+ find texmf-dist/ -type f -name 'winansi*' -delete
+ find texmf-dist/ -type f -name '*-man.pdf' -delete
+ # Remove zero-length files, as these appear e.g. in hyph-utf8 tex-package.
+ find . -type f -size 0c -delete
+}
+
+texmfget () {
+ # make sure no package is added more than once.
+ echo "Preparing index of packages to be added to -${1} ..."
+ echo "$PACKAGES" | sed "s/[[:space:]]//g;/^$/d" > $collections_tobedone
+ # Remove outputfile if already present
+ >$output
+ >$output_doc
+
+ # Only do something if $collection wasn't already done before
+ while [ -s $collections_tobedone ]
+ do
+ collection=$(tail -n1 $collections_tobedone)
+
+ # continue with next collection if collection was already done
+ if [ -s "$collections_done" ]
+ then
+ grep -w "^${collection}$" $collections_done &> /dev/null
+ if [ $? = 0 ]
+ then
+ # remove from $collections_tobedone
+ sed -i "/^$collection$/d" $collections_tobedone
+ if [ -n "$(grep "^${collection} added to" $logfile)" ]
+ then
+ echo "$collection already added " >> $logfile
+ fi
+ continue
+ fi
+ fi
+
+ package_meta $collection || exit 1
+
+ # Don't handle collections as dependency of other collections, as this destroys control over what packages to be added
+ # If $collection is a singel package(not a collection-), add it here
+ if [ -n "$(head -n1 $texmf/$collection.meta | fgrep -v "name collection" )" ]
+ then
+ # if package contains only docs, add to docpackages
+ if [ -z "$(grep ^runfiles $texmf/$collection.meta)" -a -n "$(grep ^docfiles $texmf/$collection.meta)" ]
+ then
+ sed -i "/^$collection$/d" $collections_tobedone
+ echo "$collection" >> $collections_done
+ echo "$collection" >> $output_doc
+ echo "$collection added to -docs $1" >> $logfile
+ continue
+ fi
+ # if package contains also docs, add also to docpackages
+ if [ -n "$(grep ^docfiles $texmf/$collection.meta)" ]
+ then
+ echo "$collection" >> $output_doc
+ echo "$collection added to -docs $1" >> $logfile
+ fi
+ echo "$collection" >> $output
+ echo "$collection added to -$1" >> $logfile
+ fi
+ # add dependend packages, but no binary(ARCH) and no packages conataining a '.'. Packges with dot indicate binary/texlive-manager/windows packages
+ grep ^"depend " $texmf/$collection.meta | grep -v "ARCH$" | grep -v '\.' | cut -d' ' -f2- > $dependencies
+ if [ -s "$dependencies" ]
+ then
+ echo "----------------" >> $logfile
+ echo "Dependencies of $collection: $(cat $dependencies | tr '\n' ' ')" >> $logfile
+ for dependency in $(cat $dependencies)
+ do
+ if [ -n "$(grep ^"${dependency}"$ $collections_done)" ]
+ then
+ sed -i "/^${dependency}$/d" $dependencies
+ continue
+ else
+ for exclude in $global_exclude
+ do
+ if [ "$exclude" = "$dependency" ]
+ then
+ sed -i "/^${exclude}$/d" $dependencies
+ echo "$exclude excluded, see \$global_exclude" >> $logfile
+ fi
+ done
+ fi
+ done
+ cat $dependencies >> $collections_tobedone
+ echo "----------------" >> $logfile
+ fi
+
+ sed -i "/^${collection}$/d" $collections_tobedone
+ echo "$collection" >> $collections_done
+ done
+ # handle package index list per edition
+ cat $output >> $TMP/packages.$1
+ # handle doc package index, one for each edition
+ cat $output_doc >> $TMP/packages.$1.doc
+
+ # untar only one $edition, untar docs together with -extra/-fonts edition
+ if [ "$1" = $edition -o docs = $edition ]
+ then
+ cd $texmf
+
+ # Cleanup tar-directory
+ [ -d $texmf/texmf-dist ] && rm -rf $texmf/texmf-dist
+ mkdir $texmf/texmf-dist
+
+ # Make tarball/checksum reproducible by setting mtime(clamp-mtime), owner, group and sort content
+ # --clamp-mtime --mtime doesn't work with tar 1.13, when makepkg creates the tarball:
+ # tar-1.13: time_t value 9223372036854775808 too large (max=68719476735)
+ case $edition in
+ base)
+ unset flavour
+ untar $output || exit 1
+ remove_cruft || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ ;;
+ extra|fonts)
+ unset flavour
+ untar $output || exit 1
+ export flavour=".doc"
+ untar $output_doc || exit 1
+ remove_cruft || exit 1
+ #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ ;;
+ docs)
+ export flavour=".doc"
+ # only add -base docs to -docs
+ if [ $1 = base ]
+ then
+ untar $output_doc || exit 1
+ remove_cruft || exit 1
+ #tar vrf $tarball --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ tar vrf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ rm -rf texmf-dist
+ fi
+ ;;
+ esac
+ fi
+}
+
+# Main
+
+# release mirror
+mirror="http://mirror.ctan.org/systems/texlive/tlnet/"
+# pre-test mirror 2016
+# mirror="http://ftp.cstug.cz/pub/tex/local/tlpretest/"
+LANG=C
+TMP=$PWD/tmp
+output=$TMP/packages
+output_doc=$TMP/packages.doc.tmp
+errorlog=$TMP/error.log
+texmf=$TMP/texmf
+db=$TMP/texlive.tlpdb
+tmpfile=$TMP/tmpfile
+collections_done=$TMP/done
+collections_tobedone=$TMP/tobedone
+corepackages=$TMP/corepackages
+allcollections=$TMP/allcollections
+metafonts=$TMP/metafonts
+manpages=$TMP/manpages
+dependencies=$TMP/deps
+packages_base=$TMP/packages.base
+packages_extra=$TMP/packages.extra
+packages_fonts=$TMP/packages.fonts
+packages_metafont=$TMP/packages.metafont
+packages_manpages=$TMP/packages.manpages
+
+case "$1" in
+ base|docs|extra|fonts) edition=$1; echo "Building $edition tarball ...";;
+ *) usage; exit 0 ;;
+esac
+
+mkdir -p $texmf
+cd $TMP
+
+# Set VERSION, get texlive.tlpdb and keep unshorten $db.orig
+if [ ! -s ${db}.orig -o ! -s $db ]
+then
+ echo $MAJORVERSION.$(date +%y%m%d) > VERSION
+ wget -c -O ${db}.orig ${mirror}tlpkg/texlive.tlpdb
+ # remove most content from $db to be faster on later processing.
+ # keep dependencies/manpages/metafonts/binfiles/shortdesc/sizes
+ egrep '^\S|^ RELOC/doc/man|^ texmf-dist/doc/man/man|^ RELOC/doc/info/|^ texmf-dist/doc/info/|^ texmf-dist/fonts/source/public/|^ RELOC/fonts/source/public|^ bin|^$' ${db}.orig | grep -v ^longdesc > $db
+
+ # As $db (might be)/is new, remove the meta-files, might created again with (pontentionally) new content
+ rm -rf $texmf/*.meta
+fi
+
+# Get linenumbers of empty lines from $db
+emptylines="$(grep -n ^$ $db | cut -d':' -f1)"
+
+# Provide TLCore packages for -base, as these packages(and their dependencies) should be present in any case.
+grep -B1 ^'category TLCore' $db | grep -v ^'category TLCore' | grep -v ^-- | grep -v '\.' | cut -d' ' -f2 > $corepackages
+
+# Make a list of all collections
+grep ^"name collection-" $db | cut -d' ' -f2 > $allcollections
+
+# globally exclude from $corepackages
+for exclude in $global_exclude
+do
+ sed -i "/^${exclude}$/d" $corepackages
+done
+
+VERSION=$(cat $TMP/VERSION)
+tarball=$TMP/texlive-$edition-$VERSION.tar
+# set logfile
+logfile=$TMP/$VERSION.log
+
+# reset some files
+>$logfile
+>$tarball
+>$collections_done
+>$metafonts
+>$manpages
+>$packages_metafont
+>$packages_manpages
+>$packages_base
+>$packages_extra
+>$packages_fonts
+>$packages_base.doc
+>$packages_extra.doc
+>$packages_fonts.doc
+>$TMP/packages.$edition.meta
+
+# put the editions base/extra/fonts together
+texmf_editions || exit 1
+
+# Check if all collections ar part in at least one edition
+while read collection
+do
+ grep -w "$collection" $collections_done &> /dev/null
+ if [ $? != 0 ]
+ then
+ echo "Error: $collection was not handled, edit packages/collections inthe texmfget function in $0." | tee -a $logfile
+ exit 1
+ fi
+done < $allcollections
+
+# meta data about added packages
+sort -n $output.$edition.meta > $tmpfile
+mv $tmpfile $output.$edition.meta
+
+# cleanup
+rm $allcollections
+rm $corepackages
+rm $collections_done
+rm $collections_tobedone
+rm $output
+rm $output_doc
+rm $dependencies
+
+[ ! -d texmf-dist ] && mkdir texmf-dist
+# include all metafonts in base package, plus packages which misses font-mf tag on CTAN
+echo "Looking for metafont files to be included in -base ..."
+for metafont in $(paste -s $packages_extra $packages_fonts )
+do
+ if [ -n "$(egrep "(fonts/source/public/)" $texmf/$metafont.meta )" ]
+ then
+ # include all metafonts in -base, write index for later exclution from other editions.
+ package_meta $metafont || exit 1
+ echo "Adding metafonts from $metafont to -base"
+ unset flavour
+ download $metafont || exit 1
+ unset relocated
+ pathprefix="texmf-dist/"
+ [ -n "$(grep -w ^"relocated 1" $texmf/$metafont.meta)" ] && relocated="-C texmf-dist" && unset pathprefix
+ tar vxf $texmf/$metafont.tar.xz $relocated ${pathprefix}fonts/source ${pathprefix}tex/latex 2>/dev/null | sed "s/^fonts/texmf-dist\/fonts/g;s/^tex\//texmf-dist\/tex\//g" >> $metafonts
+ echo $metafont >> $packages_metafont
+ fi
+done
+
+# include manpages/GNU infofiles in -base, write index for later exclution from other editions.
+# In -extra there should not be any manpage left.
+echo "Looking for manpages/GNU infofiles to be included in -base ..."
+for package in $(paste -s $packages_metafont $packages_base.doc | sort -u)
+do
+ if [ -n "$(egrep "(doc/man/man|doc/info/)" $texmf/$package.meta )" ]
+ then
+ echo "Adding manpage from $package to -base"
+ flavour=".doc" download $package || exit 1
+ unset relocated
+ pathprefix="texmf-dist/"
+ [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && relocated="-C texmf-dist" && unset pathprefix
+ tar vxf $texmf/${package}.doc.tar.xz --exclude "*.man[15].pdf" $relocated ${pathprefix}doc/man/ ${pathprefix}doc/info 2>/dev/null | sed "s/^doc/texmf-dist\/doc/g" >> $manpages
+ echo "$package" >> $packages_manpages
+ fi
+done
+
+case $edition in
+ base)
+ # Content info
+ cat << EOF | gzip -9 >> $texmf/texmf-dist/packages.$edition.gz
+Content of -$edition:
+$(sort $packages_base)
+
+Metafonts from packages:
+$(sort $packages_metafont)
+
+Manpages from packages:
+$(sort $packages_manpages)
+EOF
+
+ # add manpages/metafonts to the tarball
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ # handle koma-script docs, the author wants the docs to be shipped along, html doc seems sufficient
+ tar f $tarball --delete $(tar tf $tarball | grep /doc/.*koma-script.*pdf)
+ ;;
+ extra|fonts)
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ echo "Removing manpages/metafonts from -extra/-fonts/-docs which now reside in -base"
+ tar -f $tarball --delete $(paste $manpages $metafonts) 2>/dev/null
+ # content info
+ mkdir texmf-dist
+ echo "Content of -$edition, including documentation:" > $texmf/texmf-dist/packages.$edition
+ sort $TMP/packages.$edition >> $texmf/texmf-dist/packages.$edition
+ gzip -9 $texmf/texmf-dist/packages.$edition
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ ;;
+ docs)
+ # cleanup extracted metafonts/manpages
+ rm -rf texmf-dist
+ echo "Removing manpages/metafonts from -extra/-fonts/-docs which no reside in -base"
+ tar -f $tarball --delete $(paste $manpages $metafonts) 2>/dev/null
+ # content info, this edition conains all docs from -base
+ mkdir texmf-dist
+ echo "Content of -$edition, documentation for -base:" > $texmf/texmf-dist/packages.$edition
+ sort $packages_base.doc >> $texmf/texmf-dist/packages.$edition
+ gzip -9 $texmf/texmf-dist/packages.$edition
+ tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1
+ ;;
+esac
+
+# compress the tarball as everything is in place now
+echo "Compressing $tarball ..."
+[ -f $tarball.xz ] && rm $tarball.xz
+xz -9 -T0 $tarball || exit 1
+md5sum $tarball.xz
+ls -lh $tarball.xz
+echo "Logfile: $logfile"