diff options
-rw-r--r-- | office/texlive/doinst.sh | 3 | ||||
-rw-r--r-- | office/texlive/prep/texmf_get.sh | 1006 | ||||
-rw-r--r-- | office/texlive/texlive.SlackBuild | 66 | ||||
-rw-r--r-- | office/texlive/texlive.info | 6 |
4 files changed, 686 insertions, 395 deletions
diff --git a/office/texlive/doinst.sh b/office/texlive/doinst.sh index 5839d51680..2a6c92bace 100644 --- a/office/texlive/doinst.sh +++ b/office/texlive/doinst.sh @@ -1,3 +1,4 @@ chroot . /usr/bin/mktexlsr 1>/dev/null 2>/dev/null -printf "y\n" | chroot . /usr/bin/updmap-sys --nohash --syncwithtrees 1>/dev/null 2>/dev/null +printf "y\n" | chroot . /usr/bin/updmap-sys --syncwithtrees 1>/dev/null 2>/dev/null chroot . /usr/bin/fmtutil-sys --all 1>/dev/null 2>/dev/null +chroot . /usr/bin/mtxrun --generate 1>/dev/null 2>/dev/null diff --git a/office/texlive/prep/texmf_get.sh b/office/texlive/prep/texmf_get.sh index 045b570224..396fdcebf8 100644 --- a/office/texlive/prep/texmf_get.sh +++ b/office/texlive/prep/texmf_get.sh @@ -20,99 +20,187 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# V 0.9 +# 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 # -# Policy from texlive-netarchive: Every package is included as dependency in exactly one collection. A package may have dependecies on other packages from any collection. +# texlive netarchive policy: Every package is included as dependency +# in exactly one collection. A package may have dependencies on other +# packages from any collection. -# packages source: http://mirror.ctan.org/systems/texlive/tlnet/archive/ +# package source: http://mirror.ctan.org/systems/texlive/tlnet/archive/ #set -e MAJORVERSION=2017 -# 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/texlive.packages -output_doc=$TMP/texlive.doc.packages -errorlog=$TMP/error.log -texmf=$TMP/texmf -db=texlive.tlpdb -tmpfile=$(mktemp) -collections_done=$TMP/done -collections_tobedone=$TMP/tobedone -packages () { -# fonts-package first to make sure that big fonts like cm-super are not included elsewhere as dependency +# 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 - sanskrit-t1 - uhc - fonts-tlwg - ethiop-t1 ipaex wadalab + ethiop-t1 + fonts-tlwg + uhc fandol arphic - mxedruli - skaknew - padauk - japanese-otf - musixtex-fonts - unfonts-extra - baekmuk arphic-ttf - unfonts-core nanumtype1 - " texmfget fonts + baekmuk + unfonts-extra + unfonts-core + " texmfget fonts || exit 1 -# put some stuff in "extra" to before it makes its way into base -PACKAGES=" + # 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 - " \ - texmfget extra + xcharter + fonts-churchslavonic + japanese-otf + sanskrit-t1 + skaknew + padauk + " texmfget extra || exit 1 -# The base. some notes: -# cs needed by fmtutil-sys --all, 2017-06-24 + # Completing the base PACKAGES=" - $(cat $TMP/corepackages) - collection-basic - collection-latex - collection-latexrecommended + 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-metapost - collection-fontutils - collection-luatex - collection-fontsrecommended collection-humanities - collection-context collection-mathscience - collection-plaingeneric + 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 - xindy barcodes qrcode lastpage - datetime2 - texdoc appendix changebar footmisc multirow overpic - stmaryrd subfigure titlesec siunitx @@ -120,8 +208,6 @@ PACKAGES=" csquotes etoolbox etextools - glossaries - imakeidx idxlayout bidi filecontents @@ -130,365 +216,537 @@ PACKAGES=" mltex lollipop moreverb - collection-langcyrillic - collection-langeuropean - collection-langenglish - collection-langfrench - collection-langgerman - collection-langgreek - collection-langitalian - collection-langpolish - collection-langportuguese - collection-langspanish - " texmfget base - -# Call "fonts"-tarball again to add remaining fonts -PACKAGES=" - collection-fontsextra - " texmfget fonts + 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 the "extra" tarball + # Put all remaining stuff in "extra" + # Pull some bin-packages from tlnet, which aren't provided by the texlive source tarball PACKAGES=" - biber.x86_64-linux - biber.i386-linux - collection-formatsextra - collection-latexextra - collection-pictures - collection-games - collection-publishers - collection-bibtexextra - collection-music - collection-pstricks collection-texworks collection-wintools - collection-langczechslovak - collection-langjapanese - collection-langkorean - collection-langarabic - collection-langchinese - collection-langcjk - collection-langother - " texmfget extra - -# The docs-tarball - very big (about 1300 MB) - texmfget docs + wasy2-ps + " texmfget extra || exit 1 - if [ "$TARBALL" != docs ] - then - echo "Packages-list: $output.meta.$TARBALL" - while read collection - do - grep -w "$collection" $collections_done &> /dev/null - [ $? != 0 ] && echo "WARNING: $collection was not processed, please edit packages-function." - done < $TMP/allcollections - fi + # Call "fonts" at the end to add remaining fonts + PACKAGES=" + collection-fontsextra + " texmfget fonts || exit 1 } -# ==== Nothing to edit beyond this line (hopefully) ==== +# ==== Nothing to edit beyond this line ==== usage () { - echo "Prepare texmf trees based on collections and packages and their dependencies." - echo "./texmf_get.sh [base|docs|extra|fonts]" - exit + 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 } -package_meta () { - echo "collection/package $collection" - # collection start linenumer - start_n="$(grep -n ^"name ${collection}$" $TMP/$db | cut -d':' -f1)" - [ -z "$start_n" ] && echo "$collection was not found in $TMP/$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 - - sed "${start_n},${end_n}!d" $TMP/$db > $tmpfile +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_list () { - -# Remove outputfile if already present -[ -s "$output" ] && rm $output - -# 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 - sed -i "/^$collection$/d" $collections_tobedone - continue - fi - fi - - if [ -s "$texmf/$collection.meta" ] - then - cp $texmf/$collection.meta $tmpfile - else - package_meta - fi - - # Don't handle collections as dependency of other collections, as this adds far too much and therefore reduces controll over what packages to be added - sed -i "/^depend collection/d" $tmpfile - # If $collection is a singel package, add it here - if [ -n "$(head -n1 $tmpfile | fgrep -v "name collection" )" ] - then - packagelist="$TMP/run.tlpkg" - if [ -z "$(grep -w "^${collection}$" $packagelist)" ] - then - sed -i "/^$collection$/d" $collections_tobedone - echo "$collection" >> $collections_done - continue - fi - echo "$collection" >> $output - fi - # add dependend packages - grep ^"depend " $tmpfile | grep -v "ARCH$" | cut -d' ' -f2- >> $collections_tobedone - echo "$collection" >> $collections_done - sed -i "/^${collection}$/d" $collections_tobedone -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 () { - # Download packages, if not already available. Not every packages has a corresponding .doc package. - [ -f $output.meta ] && rm $output.meta - while read package - do - # untar all packages, check for relocation, "relocate 1" -> untar in texmf-dist - if [ "$flavour" = ".doc" ] - then - sha512="$(grep ^doccontainerchecksum $texmf/$package.meta | cut -d' ' -f2 )" - else - sha512="$(grep ^containerchecksum $texmf/$package.meta | cut -d' ' -f2 )" - fi - # try two times if package isn't present, with -t1 to get another mirror the second time - [ ! -s ${package}${flavour}.tar.xz ] && wget -t1 -c ${mirror}archive/${package}${flavour}.tar.xz - [ ! -s ${package}${flavour}.tar.xz ] && wget -t1 -c ${mirror}archive/${package}${flavour}.tar.xz - [ ! -s ${package}${flavour}.tar.xz ] && echo "Downloading ${package}${flavour}.tar.xz did not work, writing to $errorlog" && echo "Error downloading ${package}${flavour}.tar.xz" >> $errorlog && exit 1 - # check sha512, give three tries for downloading aggain(diffrent mirrors are used automatically) - for tillthree in 1 2 3 - do - if [ "$(sha512sum ${package}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ] - then - # Download (hopefully) newer file - rm ${package}${flavour}.tar.xz - wget -t1 -c ${mirror}archive/${package}${flavour}.tar.xz - else - break - fi - done - # check sha512 again, exit if it fails - if [ "$(sha512sum ${package}${flavour}.tar.xz | cut -d' ' -f1 )" != "$sha512" ] - then - echo "sha512sum $(sha512sum ${package}${flavour}.tar.xz | cut -d' ' -f1 ) of" - echo "${package}${flavour}.tar.xz doesn't match with $TMP/$db" - echo "sha512sum $sha512" - echo "Delete $TMP/${db}* and try again." - exit 1 - fi - - # Exclude the tlpkg-stuff, TLUtils.pm(needed tu run texlive) is provided by texlive-source - grep -w ^"relocated 1" $texmf/$package.meta &>/dev/null - if [ $? = 0 ] - then - tar vxf ${package}${flavour}.tar.xz --exclude tlpkg -C texmf-dist || exit 1 - else - tar vxf ${package}${flavour}.tar.xz --exclude tlpkg || exit 1 - fi - # In case a binary package was decompressed, put it 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: $shortdesc" >> $output.meta - done < $1 - # Copy packages-list to texmf-dist, so included packages are known in later installation - sort -n $output.meta > $output.meta.$TARBALL - cp $output.meta.$TARBALL texmf-dist/ - rm $output.meta - + # 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 '*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 + # 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 () { - -# Check all content to make sure no package is added more than once. Docs contain every docfile -if [ $TARBALL != docs ] -then - echo "Preparing list of packages to be added to ${1}-tarball ..." - echo "$PACKAGES" | sed "s/[[:space:]]//g;/^$/d" >> $collections_tobedone - package_list -fi - -# Process only the one named($1) tarball -if [ "$1" = $TARBALL ] -then - -cd $texmf - -# Cleanup tar-directory, just in case -[ -d texmf-dist ] && rm -rf texmf-dist -mkdir texmf-dist &> /dev/null - -# Make tarball/checksum reproducible by setting mtime(clamp-mtime), owner, group and sort content -# Doesn't work with tar 1.13, when makepkg creates the tarball: -# tar-1.13: time_t value 9223372036854775808 too large (max=68719476735) -VERSION=$(cat $TMP/VERSION) -case $TARBALL in - docs) - export flavour=".doc" - untar $output_doc - remove_cruft - #tar vrf $TMP/texlive-$TARBALL-$VERSION.tar --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1 - tar vrf $TMP/texlive-$TARBALL-$VERSION.tar --owner=0 --group=0 --sort=name texmf-dist || exit 1 - echo "Packages-list: $output_doc" - rm -rf texmf-dist - ;; - base|extra|fonts) - untar $output - remove_cruft - #tar vrf $TMP/texlive-$TARBALL-$VERSION.tar --clamp-mtime --mtime --owner=0 --group=0 --sort=name texmf-dist || exit 1 - tar vrf $TMP/texlive-$TARBALL-$VERSION.tar --owner=0 --group=0 --sort=name texmf-dist || exit 1 - rm -rf texmf-dist - ;; -esac - -fi - + # 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) TARBALL=$1; echo "Building $TARBALL tarball ..." ;; - *) usage ;; + base|docs|extra|fonts) edition=$1; echo "Building $edition tarball ...";; + *) usage; exit 0 ;; esac - + mkdir -p $texmf cd $TMP -# Create run.tlpkg and doc.tlpkg only if $db.orig isn't there yet/was deleted -if [ ! -s $TMP/${db}.orig -o ! -s $TMP/${db} ] +# 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 $TMP/${db}.orig -c ${mirror}tlpkg/$db - # shrink db to be faster on later processing - sed "/^ \+./d;/^longdesc \+./d;/^rev\+./d;/^exe\+./d;/^bin\+./d;/^src\+./d" $TMP/${db}.orig > $TMP/$db - - # As $db (might be)is new, remove the meta-files, might created again with (pontentionally) new content - rm -rf $texmf/*.meta - rm $TMP/run.tlpkg - [ -f "$output_doc" ] && rm "$output_doc" - - # Make a list of all packages available, but exclude binary and installer/configuration packages. - # It turns out that packagenames without '.' are what we want. Packages with '.' are all binarie-packages, which are build from source. - grep ^name $TMP/$db | grep -v ^"name collection-" | grep -v ^"name scheme-" | grep -v '\.' | cut -d' ' -f2 > $TMP/allpackages - - # Make a list of all collections - grep ^"name collection-" $TMP/$db | cut -d' ' -f2 > $TMP/allcollections - - # Provide TLCore packages for the base-tarball, as these packages(and their dependencies) should be present in any case. - grep -B1 ^'category TLCore' $TMP/$db | grep -v ^'category TLCore' | grep -v ^-- | grep -v '\.' | cut -d' ' -f2 > $TMP/corepackages - - # add biber (perl)binaries as special exception as it is not fun to build - cat <<- EOF >> $TMP/allpackages - biber.x86_64-linux - biber.i386-linux - EOF - + 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 -# globaly excluded packages, which does not make sense without tlpkg-installer, or are non-linux specific, or are already covered by the sourcebuild, -# or are covered by an external package(asymptote), or obsolete packages(datetime replaced by datetime2, anysize replaced by geometry) - -cat << EOF > $TMP/global_exclude -tlcockpit -tlshell -texosquery -asymptote -asymptote-by-example-zh-cn -asymptote-faq-zh-cn -asymptote-manual-zh-cn -EOF +# 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 -while read exlude +# 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 "/^${i}$/d" $TMP/allpackages - [ -s $TMP/run.tlpkg ] && sed -i "/^${exclude}$/d" $TMP/run.tlpkg - [ -s $output_doc ] && sed -i "/^${exclude}$/d" $output_doc -done < $TMP/global_exclude - -# Get linenumbers of empty lines -[ -z "$emptylines" ] && emptylines="$(grep -n ^$ $TMP/$db | cut -d':' -f1)" -# Sort doc- and run- packages out to avoid binfiles and sourcfile in the texmf-tree + 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 - if [ ! -s $texmf/$collection.meta ] - then - package_meta - grep ^runfiles $tmpfile &>/dev/null - if [ $? = 0 ] - then - echo $collection >> $TMP/run.tlpkg - fi - grep ^docfiles $tmpfile &>/dev/null && echo $collection >> $output_doc - mv $tmpfile $texmf/$collection.meta - fi -done < $TMP/allpackages - -# Handle biber binaries to be add-able -cat << EOF >> $TMP/run.tlpkg -biber.x86_64-linux -biber.i386-linux -EOF - -[ -f "$collections_done" ] && rm "$collections_done" -[ -f "$collections_tobedone" ] && rm "$collections_tobedone" - -packages + 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 -# Now the demanded packages are in the tarball, compress it. -echo "Compressing $TMP/texlive-$TARBALL-$VERSION.tar ..." -if [ -s $TMP/texlive-$TARBALL-$VERSION.tar ] -then - [ -f $TMP/texlive-$TARBALL-$VERSION.tar.xz ] && rm $TMP/texlive-$TARBALL-$VERSION.tar.xz - xz -9 -T0 $TMP/texlive-$TARBALL-$VERSION.tar || exit 1 - md5sum $TMP/texlive-$TARBALL-$VERSION.tar.xz - ls -lah $TMP/texlive-$TARBALL-$VERSION.tar.xz -fi +# 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 -# cleanup -rm $tmpfile +# 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" diff --git a/office/texlive/texlive.SlackBuild b/office/texlive/texlive.SlackBuild index dad028499e..a140c9d9c8 100644 --- a/office/texlive/texlive.SlackBuild +++ b/office/texlive/texlive.SlackBuild @@ -2,7 +2,7 @@ # TeXLive build script for Slackware -# Copyright 2009 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009, 2017 Patrick J. Volkerding, Sebeka, MN, USA # Copyright 2009-2014 Robby Workman, Northport, AL, USA # Copyright 2016-2017 Johannes Schoepfer, Germany # All rights reserved. @@ -29,7 +29,7 @@ PRGNAM=texlive SOURCEVERSION=20170520 -VERSION=${VERSION:-2017.170622} +VERSION=${VERSION:-2017.171108} BUILD=${BUILD:-1} TAG=${TAG:-_SBo} @@ -89,6 +89,9 @@ sed -i \ -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \ texk/kpathsea/texmf.cnf +# prevent compiling Xdvi with libXp +sed -i 's|-lXp ||' texk/xdvik/configure + # Thanks to the lfs-folks ... patch -Np1 -i $CWD/patches/texlive-20170524-source-gcc7-1.patch || exit 1 patch -Np1 -i $CWD/patches/texlive-20170524-source-upstream_fixes-2.patch || exit 1 @@ -137,30 +140,31 @@ cd build --with-system-fontconfig \ --with-system-ncurses \ --without-system-harfbuzz \ + --disable-aleph \ + --disable-dump-share \ $POPPLER \ --build=$ARCH-slackware-linux || exit 1 make || exit 1 # make check || exit 1 make install-strip DESTDIR=$PKG || exit 1 - # Create symlinks - make texlinks DESTDIR=$PKG || exit 1 -cd .. -# Don't ship .la files: -rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la + # Don't ship .la files: + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la -# install the texmf stuff, overwrite partly stuff coming from the source build; -# don't remove/separate koma-script docs as this is the wish of the author -mkdir -p $PKG/usr/share -tar xvf $CWD/texlive-base-$VERSION.tar.xz -C $PKG/usr/share || exit 1 -chown -R root:root $PKG -chmod -R u+w,go-w,a+rX-st $PKG + # Remove all files which are covered by tlnet + rm -rf $PKG/usr/share $PKG/usr/man $PKG/usr/info -# Remove mpost from shell_escape_commands, http://tug.org/pipermail/tldistro/2016q4/000277.html -sed -i \ - -e '/^mpost/d' \ - $PKG/usr/share/texmf-dist/web2c/texmf.cnf + # install the tlnet stuff + mkdir -p $PKG/usr/share + tar xvf $CWD/texlive-base-$VERSION.tar.xz -C $PKG/usr/share || exit 1 + chown -R root:root $PKG + chmod -R u+w,go-w,a+rX-st $PKG + + # Create symlinks + make texlinks DESTDIR=$PKG || exit 1 + +cd .. # set some paths sed -i \ @@ -170,6 +174,14 @@ sed -i \ -e 's|texlive20[0-9][0-9]|texlive|g' \ $PKG/usr/share/texmf-dist/web2c/texmf.cnf +# disable obsolete aleph/lamed/cslatex/pdfcslatex +sed -i \ + -e 's|^aleph|#! aleph|' \ + -e 's|^lamed|#! lamed|' \ + -e 's|^cslatex|#! cslatex|' \ + -e 's|^pdfcslatex|#! pdfcslatex|' \ + $PKG/usr/share/texmf-dist/web2c/fmtutil.cnf + # make ConTeXt work, and remove unused settings sed -i \ -e 's|selfautoparent:|/usr/share/|g' \ @@ -179,9 +191,22 @@ sed -i \ -e '/texmflocal/d' \ $PKG/usr/share/texmf-dist/web2c/texmfcnf.lua +# provide texlive fonts optionally for other system apps +mkdir -p $PKG/etc/fonts/conf.avail +cat > $PKG/etc/fonts/conf.avail/09-texlive.conf << EOF +<?xml version='1.0'?> +<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> +<fontconfig> + <dir>/usr/share/texmf-dist/fonts/opentype</dir> + <dir>/usr/share/texmf-dist/fonts/truetype</dir> +</fontconfig> +EOF + # Install the docs while we're still here mkdir -p $PKG/usr/doc/texlive-$VERSION cp -a ChangeLog README* $PKG/usr/doc/texlive-$VERSION +# Install index of provided tex packages to the docs +mv $PKG/usr/share/texmf-dist/packages.base.gz $PKG/usr/doc/texlive-$VERSION # Put a symlink to /usr/share/texmf-dist/doc in our Slackware docdir ln -s ../../share/texmf-dist/doc $PKG/usr/doc/texlive-$VERSION/doc @@ -198,6 +223,13 @@ mkdir -p $PKG/usr/share/{texmf-config,texmf-var,texmf-local} mkdir -p $PKG/usr/share/perl5 mv texk/tests/TeXLive $PKG/usr/share/perl5/ +# Move manual pages to the correct place +mkdir $PKG/usr/man +mv $PKG/usr/share/texmf-dist/doc/man/man1 $PKG/usr/man +mv $PKG/usr/share/texmf-dist/doc/man/man5 $PKG/usr/man +rmdir $PKG/usr/share/texmf-dist/doc/man +mv $PKG/usr/share/texmf-dist/doc/info $PKG/usr + # Handle the man pages find $PKG/usr/man -type f -exec gzip -9 {} \; for i in $(find $PKG/usr/man -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done diff --git a/office/texlive/texlive.info b/office/texlive/texlive.info index 06c1343a3e..13185eec80 100644 --- a/office/texlive/texlive.info +++ b/office/texlive/texlive.info @@ -1,10 +1,10 @@ PRGNAM="texlive" -VERSION="2017.170622" +VERSION="2017.171108" HOMEPAGE="http://tug.org/texlive/" DOWNLOAD="http://mirrors.ctan.org/systems/texlive/Source/texlive-20170520-source.tar.xz \ - http://slackware.schoepfer.info/slackbuilds/texlive/2017/texlive/texlive-base-2017.170622.tar.xz" + http://slackware.schoepfer.info/slackbuilds/texlive/2017/texlive/texlive-base-2017.171108.tar.xz" MD5SUM="5456dfd7858fe53cdd0fda5f0eb4fd35 \ - 29bee4e0671431334fc1dcae3e0087c0" + a6cb0fdd5fbc870f3b728ec717d3a092" DOWNLOAD_x86_64="" MD5SUM_x86_64="" REQUIRES="" |