diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2018-05-28 19:12:29 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2018-05-31 23:39:35 +0200 |
commit | 646a5c1cbfd95873950a87b5f75d52073a967023 (patch) | |
tree | b8b8d2ab3b0d432ea69ad1a64d1c789649d65020 /source/t | |
parent | d31c50870d0bee042ce660e445c9294a59a3a65b (diff) | |
download | current-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')
43 files changed, 2806 insertions, 1394 deletions
diff --git a/source/t/FTBFSlog b/source/t/FTBFSlog new file mode 100644 index 00000000..2c79e5ba --- /dev/null +++ b/source/t/FTBFSlog @@ -0,0 +1,2 @@ +Thu Feb 1 03:15:18 UTC 2018 + All packages tested and found to compile properly. diff --git a/source/t/transfig/transfig.SlackBuild b/source/t/fig2dev/fig2dev.SlackBuild index 58bd7b45..bad061fb 100755 --- a/source/t/transfig/transfig.SlackBuild +++ b/source/t/fig2dev/fig2dev.SlackBuild @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash -# Copyright 2006, 2007, 2009, 2010, 2013 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2006, 2007, 2009, 2010, 2013, 2018 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,31 +20,39 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +cd $(dirname $0) ; CWD=$(pwd) -PKGNAM=transfig -VERSION=${VERSION:-3.2.5e} -BUILD=${BUILD:-3} +PKGNAM=fig2dev +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + NUMJOBS=${NUMJOBS:-" -j7 "} -CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-${PKGNAM} rm -rf $PKG mkdir -p $PKG $TMP -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" LIBDIRSUFFIX="" elif [ "$ARCH" = "s390" ]; then SLKCFLAGS="-O2" @@ -56,8 +64,8 @@ fi cd $TMP rm -rf ${PKGNAM}-${VERSION} -tar xvf $CWD/${PKGNAM}.$VERSION.tar.xz || exit 1 -cd ${PKGNAM}.$VERSION || exit 1 +tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1 +cd ${PKGNAM}-$VERSION || exit 1 find . -name "*.orig" -exec rm "{}" \; @@ -71,18 +79,20 @@ find . \ \( -perm 700 -type f \) \ -exec chmod 644 {} \; -zcat $CWD/transfig.diff.gz | sed -e "s#/usr/lib/#/usr/lib${LIBDIRSUFFIX}/#" \ - | patch -p1 --verbose || exit 1 - -xmkmf || exit 1 -make Makefiles || exit 1 +# Configure: +CFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --enable-transfig \ + --build=$ARCH-slackware-linux || exit 1 # Build and install: make $NUMJOBS || make || exit 1 - -mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/X11/fig2dev make install DESTDIR=$PKG || exit 1 -make install.man DESTDIR=$PKG || exit 1 # Strip binaries: find $PKG | xargs file | grep -e "executable" -e "shared object" \ @@ -103,20 +113,20 @@ if [ -d $PKG/usr/man ]; then ) fi -# Compress info files, if any: -if [ -d $PKG/usr/info ]; then - ( cd $PKG/usr/info - rm -f dir - gzip -9 * - ) -fi - # Add a documentation directory: mkdir -p $PKG/usr/doc/${PKGNAM}-$VERSION cp -a \ - CHANGES LATEX.AND.XFIG NOTES README doc/manual \ + CHANGES COPYING INSTALL NOTES README \ $PKG/usr/doc/${PKGNAM}-$VERSION +# If there's a CHANGES file, installing at least part of the recent history +# is useful, but don't let it get totally out of control: +if [ -r CHANGES ]; then + DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION) + cat CHANGES | head -n 1000 > $DOCSDIR/CHANGES + touch -r CHANGES $DOCSDIR/CHANGES +fi + mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc diff --git a/source/t/fig2dev/slack-desc b/source/t/fig2dev/slack-desc new file mode 100644 index 00000000..67c2ebef --- /dev/null +++ b/source/t/fig2dev/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. Line +# up the first '|' above the ':' following the base package name, and the '|' +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':'. + + |-----handy-ruler------------------------------------------------------| +fig2dev: fig2dev (transform .fig files) +fig2dev: +fig2dev: This package contains the binaries to transform .fig files (created by +fig2dev: xfig) to some other formats like epsf and LaTeX. If you have installed +fig2dev: xfig, you should also install this package if you want to use xfig to +fig2dev: create other files than .fig files, which can then be included in your +fig2dev: LaTeX documents. +fig2dev: +fig2dev: Homepage: https://sourceforge.net/projects/mcj/files/ +fig2dev: +fig2dev: diff --git a/source/t/tetex/jadetex.build b/source/t/tetex/jadetex.build deleted file mode 100755 index 0d76f7e9..00000000 --- a/source/t/tetex/jadetex.build +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/sh -# jadetex build/install script taken from Stuart Winter's build -# script for linuxdoc-tools. - -# Sanity check: -if [ -z "$SLKCFLAGS" ]; then - echo "This script is only meant to be run from tetex.SlackBuild," - echo "so I hope you know what you are doing." - echo -n "Hit Enter to continue anyway... " - read junk -fi - -JADETEXVER=3.13 - -# sgmltools-lite's POSTINSTALL document suggests that if jadetex -# is eating huge amounts of RAM, we need to configure it thusly: -# Slackware's t/tetex package contains this config file (without the -# .jadetext config) so I won't overwrite it here. However, we may -# wish to append this configuration to an install script for -# this package; but it'd get overwritten by new versions of -# t/tetex. Perhaps this configuration could be added to the tetex package? - - cat << EOF >> /usr/share/texmf/web2c/texmf.cnf - -% options for jadetex: -hash_extra.jadetex = 15000 -pool_size.jadetex = 200000 -max_strings.jadetex = 50000 -save_size.jadetex = 15000 -EOF -chmod 644 /usr/share/texmf/web2c/texmf.cnf - -# Extract source: -cd $TMP -rm -rf jadetex-$JADETEXVER -tar xvf $CWD/jadetex-$JADETEXVER.tar.gz || exit 1 -cd jadetex-$JADETEXVER -chown -R root:root . -find . \ - \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \ - -exec chmod 755 {} \; -o \ - \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \ - -exec chmod 644 {} \; - -# Build: -# The install phase breaks if we use tex or etex, so we use latex instead: -sed -ie "s?tex -ini?latex -ini?" Makefile -make $NUMJOBS || make || exit 1 - -# Install onto filesystem: -make install || exit 1 - -# Create jadetex symlinks to the TeTex binaries: -( cd /usr/share/texmf/bin - rm -f jadetex pdfjadetex - ln -sf latex jadetex - ln -sf pdfetex pdfjadetex -) - -# Update the references to jadetex & pdfjadetex: -mktexlsr - -# Install man pages - these are missed by the Makefile: -mkdir -p /usr/share/texmf/man/man1 -install -m644 jadetex.1 pdfjadetex.1 /usr/share/texmf/man/man1 -gzip -9 /usr/share/texmf/man/man1/jadetex.1 -gzip -9 /usr/share/texmf/man/man1/pdfjadetex.1 - diff --git a/source/t/tetex/profile.d/tetex.csh b/source/t/tetex/profile.d/tetex.csh deleted file mode 100755 index 30496c4c..00000000 --- a/source/t/tetex/profile.d/tetex.csh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/csh -# Add path and MANPATH for teTeX: -set path = ( $path /usr/share/texmf/bin ) -setenv MANPATH ${MANPATH}:/usr/share/texmf/man diff --git a/source/t/tetex/profile.d/tetex.sh b/source/t/tetex/profile.d/tetex.sh deleted file mode 100755 index 8987135e..00000000 --- a/source/t/tetex/profile.d/tetex.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -# Add PATH and MANPATH for teTeX: -PATH="$PATH:/usr/share/texmf/bin" -MANPATH="$MANPATH:/usr/share/texmf/man" diff --git a/source/t/tetex/slack-desc.tetex b/source/t/tetex/slack-desc.tetex deleted file mode 100644 index ce66d03f..00000000 --- a/source/t/tetex/slack-desc.tetex +++ /dev/null @@ -1,20 +0,0 @@ -# HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line -# up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also -# customary to leave one space after the ':'. - - |-----handy-ruler------------------------------------------------------| -tetex: tetex (teTeX binaries and support files) -tetex: -tetex: This package contains the binaries and support files required for the -tetex: teTeX TeX distribution, such as input files for TeX, runtime -tetex: configuration files, hyphenation tables, manpages, and the computer -tetex: modern fonts. -tetex: -tetex: -tetex: -tetex: -tetex: -tetex: diff --git a/source/t/tetex/slack-desc.tetex-doc b/source/t/tetex/slack-desc.tetex-doc deleted file mode 100644 index 7486398f..00000000 --- a/source/t/tetex/slack-desc.tetex-doc +++ /dev/null @@ -1,19 +0,0 @@ -# HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line -# up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also -# customary to leave one space after the ':'. - - |-----handy-ruler------------------------------------------------------| -tetex-doc: tetex-doc (Documentation for teTeX) -tetex-doc: -tetex-doc: This package contains documentation for AMSTeX, BibTeX, extended plain -tetex-doc: format, font packages, format files (babel, texdraw, pstricks, xypic), -tetex-doc: LaTeX, MetaPost, Makeindex, pdftex, the Kpathsea library, as well as -tetex-doc: general information about TeX such as a list of ftp servers, a draft -tetex-doc: for the TeX Directory Standard (TDS), The TeX and LaTeX Catalogue, -tetex-doc: TeX FAQs, and more. -tetex-doc: -tetex-doc: -tetex-doc: diff --git a/source/t/tetex/tetex.CVE-2005-3193.diff b/source/t/tetex/tetex.CVE-2005-3193.diff deleted file mode 100644 index b8f2fad5..00000000 --- a/source/t/tetex/tetex.CVE-2005-3193.diff +++ /dev/null @@ -1,169 +0,0 @@ ---- tetex-src-3.0/libs/xpdf/goo/gmem.c.CVE-2005-3193 2004-01-22 02:26:44.000000000 +0100 -+++ tetex-src-3.0/libs/xpdf/goo/gmem.c 2006-01-16 15:41:04.000000000 +0100 -@@ -135,6 +135,28 @@ void *grealloc(void *p, int size) { - #endif - } - -+void *gmallocn(int nObjs, int objSize) { -+ int n; -+ -+ n = nObjs * objSize; -+ if (objSize == 0 || n / objSize != nObjs) { -+ fprintf(stderr, "Bogus memory allocation size\n"); -+ exit(1); -+ } -+ return gmalloc(n); -+} -+ -+void *greallocn(void *p, int nObjs, int objSize) { -+ int n; -+ -+ n = nObjs * objSize; -+ if (objSize == 0 || n / objSize != nObjs) { -+ fprintf(stderr, "Bogus memory allocation size\n"); -+ exit(1); -+ } -+ return grealloc(p, n); -+} -+ - void gfree(void *p) { - #ifdef DEBUG_MEM - int size; ---- tetex-src-3.0/libs/xpdf/goo/gmem.h.CVE-2005-3193 2004-01-22 02:26:44.000000000 +0100 -+++ tetex-src-3.0/libs/xpdf/goo/gmem.h 2006-01-16 15:41:04.000000000 +0100 -@@ -28,6 +28,15 @@ extern void *gmalloc(int size); - extern void *grealloc(void *p, int size); - - /* -+ * These are similar to gmalloc and grealloc, but take an object count -+ * and size. The result is similar to allocating nObjs * objSize -+ * bytes, but there is an additional error check that the total size -+ * doesn't overflow an int. -+ */ -+extern void *gmallocn(int nObjs, int objSize); -+extern void *greallocn(void *p, int nObjs, int objSize); -+ -+/* - * Same as free, but checks for and ignores NULL pointers. - */ - extern void gfree(void *p); ---- tetex-src-3.0/libs/xpdf/xpdf/JPXStream.cc.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100 -+++ tetex-src-3.0/libs/xpdf/xpdf/JPXStream.cc 2006-01-16 15:41:04.000000000 +0100 -@@ -666,7 +666,7 @@ GBool JPXStream::readCodestream(Guint le - int segType; - GBool haveSIZ, haveCOD, haveQCD, haveSOT; - Guint precinctSize, style; -- Guint segLen, capabilities, comp, i, j, r; -+ Guint segLen, capabilities, nTiles, comp, i, j, r; - - //----- main header - haveSIZ = haveCOD = haveQCD = haveSOT = gFalse; -@@ -701,8 +701,13 @@ GBool JPXStream::readCodestream(Guint le - / img.xTileSize; - img.nYTiles = (img.ySize - img.yTileOffset + img.yTileSize - 1) - / img.yTileSize; -- img.tiles = (JPXTile *)gmalloc(img.nXTiles * img.nYTiles * -- sizeof(JPXTile)); -+ nTiles = img.nXTiles * img.nYTiles; -+ // check for overflow before allocating memory -+ if (nTiles == 0 || nTiles / img.nXTiles != img.nYTiles) { -+ error(getPos(), "Bad tile count in JPX SIZ marker segment"); -+ return gFalse; -+ } -+ img.tiles = (JPXTile *)gmallocn(nTiles, sizeof(JPXTile)); - for (i = 0; i < img.nXTiles * img.nYTiles; ++i) { - img.tiles[i].tileComps = (JPXTileComp *)gmalloc(img.nComps * - sizeof(JPXTileComp)); ---- tetex-src-3.0/libs/xpdf/xpdf/Stream.h.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100 -+++ tetex-src-3.0/libs/xpdf/xpdf/Stream.h 2006-01-16 15:41:04.000000000 +0100 -@@ -233,6 +233,8 @@ public: - - ~StreamPredictor(); - -+ GBool isOk() { return ok; } -+ - int lookChar(); - int getChar(); - -@@ -250,6 +252,7 @@ private: - int rowBytes; // bytes per line - Guchar *predLine; // line buffer - int predIdx; // current index in predLine -+ GBool ok; - }; - - //------------------------------------------------------------------------ ---- tetex-src-3.0/libs/xpdf/xpdf/Stream.cc.CVE-2005-3193 2004-01-22 02:26:45.000000000 +0100 -+++ tetex-src-3.0/libs/xpdf/xpdf/Stream.cc 2006-01-16 15:41:04.000000000 +0100 -@@ -407,18 +407,33 @@ void ImageStream::skipLine() { - - StreamPredictor::StreamPredictor(Stream *strA, int predictorA, - int widthA, int nCompsA, int nBitsA) { -+ int totalBits; -+ - str = strA; - predictor = predictorA; - width = widthA; - nComps = nCompsA; - nBits = nBitsA; -+ predLine = NULL; -+ ok = gFalse; - - nVals = width * nComps; -+ totalBits = nVals * nBits; -+ if (totalBits == 0 || -+ (totalBits / nBits) / nComps != width || -+ totalBits + 7 < 0) { -+ return; -+ } - pixBytes = (nComps * nBits + 7) >> 3; -- rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; -+ rowBytes = ((totalBits + 7) >> 3) + pixBytes; -+ if (rowBytes < 0) { -+ return; -+ } - predLine = (Guchar *)gmalloc(rowBytes); - memset(predLine, 0, rowBytes); - predIdx = rowBytes; -+ -+ ok = gTrue; - } - - StreamPredictor::~StreamPredictor() { -@@ -1012,6 +1027,10 @@ LZWStream::LZWStream(Stream *strA, int p - FilterStream(strA) { - if (predictor != 1) { - pred = new StreamPredictor(this, predictor, columns, colors, bits); -+ if (!pred->isOk()) { -+ delete pred; -+ pred = NULL; -+ } - } else { - pred = NULL; - } -@@ -2897,6 +2916,14 @@ GBool DCTStream::readBaselineSOF() { - height = read16(); - width = read16(); - numComps = str->getChar(); -+ if (numComps <= 0 || numComps > 4) { -+ error(getPos(), "Bad number of components in DCT stream", prec); -+ return gFalse; -+ } -+ if (numComps <= 0 || numComps > 4) { -+ error(getPos(), "Bad number of components in DCT stream", prec); -+ return gFalse; -+ } - if (prec != 8) { - error(getPos(), "Bad DCT precision %d", prec); - return gFalse; -@@ -3255,6 +3282,10 @@ FlateStream::FlateStream(Stream *strA, i - FilterStream(strA) { - if (predictor != 1) { - pred = new StreamPredictor(this, predictor, columns, colors, bits); -+ if (!pred->isOk()) { -+ delete pred; -+ pred = NULL; -+ } - } else { - pred = NULL; - } diff --git a/source/t/tetex/tetex.SlackBuild b/source/t/tetex/tetex.SlackBuild deleted file mode 100755 index ac6ccf43..00000000 --- a/source/t/tetex/tetex.SlackBuild +++ /dev/null @@ -1,281 +0,0 @@ -#!/bin/sh - -# Copyright 2008, 2009, 2010, 2015 Patrick J. Volkerding, Sebeka, Minnesota, USA -# 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. - - -VERSION=3.0 -BUILD=${BUILD:-10} - -# Automatically determine the architecture we're building on: -if [ -z "$ARCH" ]; then - case "$( uname -m )" in - i?86) export ARCH=i486 ;; - arm*) export ARCH=arm ;; - # Unless $ARCH is already set, use uname -m for all other archs: - *) export ARCH=$( uname -m ) ;; - esac -fi - -NUMJOBS=${NUMJOBS:-" -j7 "} - -CWD=$(pwd) -TMP=${TMP:-/tmp} - -if [ "$ARCH" = "i486" ]; then - SLKCFLAGS="-O2 -march=i486 -mtune=i686" -elif [ "$ARCH" = "s390" ]; then - SLKCFLAGS="-O2" -elif [ "$ARCH" = "x86_64" ]; then - SLKCFLAGS="-O2 -fPIC" -else - SLKCFLAGS="-O2" -fi - -# There were so many local security problems with this shared fontcache -# scheme that it's not worth trying to support. It was not enabled by -# default, and newer versions of teTeX don't seem to recongnize it any -# longer either. -#export fontcache=/var/cache/fonts -#export vartexfonts=$fontcache -#mkdir -p /var/cache/fonts/pk /var/cache/fonts/source /var/cache/fonts/tfm -#chmod 1777 /var/cache/fonts /var/cache/fonts/pk \ -# /var/cache/fonts/source /var/cache/fonts/tfm - -# Safer to purge this first: -rm -rf /usr/share/texmf -rm -rf /usr/share/texmf-var -rm -rf /usr/share/texi2html - -# Make a clean new directory: -mkdir -p /usr/share/texmf -( cd /usr/share/texmf - tar xvf $CWD/tetex-texmf-$VERSION.tar.xz - chown -R root:root . - find . -type f -perm 666 -exec chmod 644 {} \; - # Change the sell-by date: - zcat $CWD/tetex.leet.diff.gz | patch -p1 --verbose || exit 1 -) -cd $TMP -rm -rf tetex-src-$VERSION -tar xvf $CWD/tetex-src-$VERSION.tar.xz -cd tetex-src-$VERSION -chown -R root:root . -find . -type f -perm 666 -exec chmod 644 {} \; - -# Fix possible xpdf overflows: -zcat $CWD/tetex.CVE-2005-3193.diff.gz | patch -p1 --verbose || exit 1 - -# /var/lib/texmf is a better font location than /var/tmp/texfonts: -zcat $CWD/tetex.var.fonts.diff.gz | patch -p1 --verbose || exit 1 - -# Even better is something in your $HOME directory: -zcat $CWD/tetex.fontcachedirinhome.diff.gz | patch -p1 --verbose || exit 1 - -# Use mkstemp() in dvipdfm: -zcat $CWD/tetex.dvipdfm.mkstemp.diff.gz | patch -p1 --verbose || exit 1 - -# Use mktemp in scripts: -zcat $CWD/tetex.scripts.mktemp.diff.gz | patch -p1 --verbose || exit 1 - -# Try to use more modern browsers. -# Attempt to use them in this order: firefox, seamonkey, mozilla, links, lynx. -zcat $CWD/tetex.browsers.diff.gz | patch -p1 --verbose || exit 1 - -# Add bplain and bamstex info to fmtutil.cnf: -zcat $CWD/tetex.amstex.fmtutil.diff.gz | patch -p1 --verbose || exit 1 - -# Don't leave texconfig junk in $TMP: -zcat $CWD/tetex.tmp.cleanup.diff.gz | patch -p1 --verbose || exit 1 - -# Fix the cpascal header so there's no conflict with getline() in the -# generated C code: -zcat $CWD/tetex.cpascal.getline.posix.2008.diff.gz | patch -p1 --verbose || exit 1 - -# Patch for libpng-1.4.0: -#zcat $CWD/tetex.png14.diff.gz | patch -p1 --verbose || exit 1 - -# Patch for libpng16: (currently causing a segfault... feel free to help :-) -#zcat $CWD/tetex.png16.diff.gz | patch -p1 --verbose || exit 1 - -# Another problem caused by getline() in glibc: -zcat $CWD/tetex.afm2tfm.getline.diff.gz | patch -p1 --verbose || exit 1 - -CFLAGS="$SLKCFLAGS" \ -CXXFLAGS="$SLKCFLAGS" \ -./configure --prefix=/usr/share/texmf \ - --datadir=/usr/share \ - --disable-multiplatform \ - --disable-a4 \ - --without-dialog \ - --without-texinfo \ - --with-system-ncurses \ - --with-system-t1lib \ - --with-system-tifflib \ - --with-system-zlib \ - --with-ps=gs \ - --enable-ipc \ - --enable-freetype \ - --with-etex -# --without-texinfo # Really, it doesn't hurt to include these twice... - -# This was reported to fix a problem with newer GNU sources and "make dvi". -# It does, in fact, fix a bug where the etex binary/engine really should be -# used when etex and dvi output are requested, but the example given to me -# (which was "make dvi" in GNU binutils) also has some problems that have to -# be fixed. This confused me for a good long time. ;-) -# BTW, the fix for the binutils docs is to edit bfd.texinfo and remove that -# @tex through @end tex section near the top. Then build twice. Hit enter -# if it "sticks". -zcat $CWD/tetex.etex.diff.gz | patch -p1 --verbose || exit 1 - -make all $NUMJOBS || make all || exit 1 -make install strip || exit 1 - -if ! echo $PATH | grep /usr/share/texmf/bin ; then - PATH=$PATH:/usr/share/texmf/bin -fi -# ... [don't] make links to all binaries in /usr/bin for the final package. -# [that would be really pointless... $PATH should work, period. ] - -# If latex isn't there, maybe we need to do this: -if [ ! -r /usr/share/texmf/bin/latex ]; then - texconfig init -fi - -# Let's start with these defaults: -texconfig confall -texconfig dvips paper letter -texconfig xdvi paper us - -# These *might* be useful... -# Some are known to be not-so-useful, though, as they put the config files -# into /root/.texmf-config, which we're simply going to throw away anyway -# so it won't interfere with server testing. If you need these options, -# you'll probably have to run texconfig yourself in your own user (or root) -# account. -texconfig mode ljfour -#texconfig xdvi paper a4 -texconfig dvips mode ljfour -#texconfig dvips paper a4 -texconfig dvips printcmd - -texconfig dvips add bjc600 -texconfig dvips add stcolor -texconfig dvips add deskjet -texconfig dvips add ljet4 -texconfig dvips -P bjc600 mode canonbjc -texconfig dvips -P stcolor mode epstylus -texconfig dvips -P deskjet mode deskjet -texconfig dvips -P ljet4 mode ljfour -texconfig font ro -texconfig rehash - -# Add jadetex to the package: -. $CWD/jadetex.build - -# Toss redundant docs: -( cd /usr/share/texmf/doc - for file in $(find . -name "*.dvi") ; do - rm -f $(dirname $file)/$(basename $file .dvi).pdf - done -) - -# Discard local configurations: -if [ -e /root/.texmf-config ]; then - mv /root/.texmf-config /root/.texmf-config-$(mcookie) - echo "/root/.texmf-config moved out of the way... you may wish" - echo "to purge any /root/.texmf-config-* directories if the" - echo "cruft heap gets too large." -fi - -# Now, package the /usr/share/texmf/ and /usr/share/texi2html trees. -# Package tetex-doc.txz and tetex-bin.txz seperately. - -PKG1=$TMP/package-tetex -PKG2=$TMP/package-tetex-doc -rm -rf $PKG1 $PKG2 -mkdir -p $PKG1 $PKG2 - -mkdir -p $PKG1/usr/share -mv /usr/share/texmf $PKG1/usr/share -mv /usr/share/texmf-var $PKG1/usr/share -mv /usr/share/texi2html $PKG1/usr/share - -# The tetex.txz file will need an installation script to add -# /usr/share/texmf/bin to the $PATH and /usr/share/texmf/man to the $MANPATH: -mkdir -p $PKG1/etc/profile.d -cp -a $CWD/profile.d/tetex.* $PKG1/etc/profile.d -chown root:root $PKG1/etc/profile.d/tetex.* -chmod 755 $PKG1/etc/profile.d/tetex.* - -mkdir -p $PKG1/install -cp $CWD/slack-desc.tetex $PKG1/install/slack-desc -mkdir -p $PKG2/install -cp $CWD/slack-desc.tetex-doc $PKG2/install/slack-desc - -# Strip everything: -find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ - | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null - -# Gzip man pages: -gzip -9 $PKG1/usr/share/texmf/man/man?/*.? - -# Fix manpage symlinks: -( cd $PKG1/usr/share/texmf/man - for dir in man? ; do - ( cd $dir - for file in *.? ; do - if [ -L $file ]; then - LINK=$(readlink $file) - rm $file - ln -sf ${LINK}.gz ${file}.gz - fi - done - ) - done -) - -# Move some of the files into the docs package: -mkdir -p $PKG2/usr/share/texmf/doc -mv $PKG1/usr/share/texmf/doc/* $PKG2/usr/share/texmf/doc -mkdir -p $PKG2/usr/share/texinfo -mv /usr/share/texinfo/html $PKG2/usr/share/texinfo -mv $PKG1/usr/share/texmf/info $PKG2/usr -( cd $PKG1/usr/share/texmf ; ln -sf /usr/info . ) - -# Compress info pages and purge "dir" file from the package: -if [ -d $PKG2/usr/info ]; then - ( cd $PKG2/usr/info - rm -f dir - gzip -9 * - ) -fi - -# Make docs link in /usr/doc/: -mkdir -p $PKG2/usr/doc -( cd $PKG2/usr/doc ; rm -rf tetex-$VERSION ) -( cd $PKG2/usr/doc ; ln -sf /usr/share/texmf/doc tetex-$VERSION ) - -# Build the packages: -cd $PKG1 -/sbin/makepkg -l y -c n $TMP/tetex-$VERSION-$ARCH-$BUILD.txz -cd $PKG2 -/sbin/makepkg -l y -c n $TMP/tetex-doc-$VERSION-$ARCH-$BUILD.txz - diff --git a/source/t/tetex/tetex.afm2tfm.getline.diff b/source/t/tetex/tetex.afm2tfm.getline.diff deleted file mode 100644 index 8406aa89..00000000 --- a/source/t/tetex/tetex.afm2tfm.getline.diff +++ /dev/null @@ -1,38 +0,0 @@ ---- ./texk/dvipsk/afm2tfm.c.orig 2005-01-30 07:17:09.000000000 -0600 -+++ ./texk/dvipsk/afm2tfm.c 2010-02-19 11:56:12.000000000 -0600 -@@ -257,7 +257,7 @@ - } - - int --getline P1H(void) { -+afm_int_getline P1H(void) { - register char *p ; - register int c ; - -@@ -606,7 +606,7 @@ - ai = newchar() ; - ai->adobenum = -1 ; - ai->adobename = "||" ; /* boundary character name */ -- while (getline()) { -+ while (afm_int_getline()) { - switch(interest(paramstring())) { - case FontName: - fontname = paramnewstring() ; -@@ -1882,7 +1882,7 @@ - - while (1) { - while (param == 0 || *param == 0) { -- if (getline() == 0) -+ if (afm_int_getline() == 0) - error("! premature end in encoding file") ; - for (p=buffer; *p; p++) - if (*p == '%') { -@@ -1973,7 +1973,7 @@ - p = gettoken() ; - if (strcmp(p, "]")) - error("! token 258 in encoding must be make-array (])") ; -- while (getline()) { -+ while (afm_int_getline()) { - for (p=buffer; *p; p++) - if (*p == '%') { - if (ignoreligkern == 0) diff --git a/source/t/tetex/tetex.amstex.fmtutil.diff b/source/t/tetex/tetex.amstex.fmtutil.diff deleted file mode 100644 index 6ae5c1f9..00000000 --- a/source/t/tetex/tetex.amstex.fmtutil.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- tetex-src-3.0/texk/web2c/fmtutil.in.fmtutil 2005-02-06 09:27:46.000000000 +0900 -+++ tetex-src-3.0/texk/web2c/fmtutil.in 2005-02-07 15:22:31.828492229 +0900 -@@ -55,7 +55,9 @@ - - # Change "amstex.ini -> bamstex.ini" and "- -> language.dat" - # if you want babel support in amstex: --#! amstex pdfetex - -translate-file=cp227.tcx *amstex.ini -+amstex pdfetex - -translate-file=cp227.tcx *amstex.ini -+bplain pdfetex language.dat -translate-file=cp227.tcx bplain.ini -+bamstex pdfetex language.dat -translate-file=cp227.tcx bamstex.ini - - # Change "pdfamstex.ini -> pdfbamstex.ini" and "- -> language.dat" - # if you want babel support in pdfamstex: diff --git a/source/t/tetex/tetex.browsers.diff b/source/t/tetex/tetex.browsers.diff deleted file mode 100644 index 42052aa0..00000000 --- a/source/t/tetex/tetex.browsers.diff +++ /dev/null @@ -1,39 +0,0 @@ ---- ./texk/xdvik/gui/xm_prefsP.h.orig 2004-04-21 16:12:09.000000000 -0500 -+++ ./texk/xdvik/gui/xm_prefsP.h 2006-05-16 16:39:38.000000000 -0500 -@@ -96,8 +96,10 @@ - #define Xdvi_APPLY_STR "Apply" - - #define Xdvi_PREFS_BROWSER_DEFAULTS \ -+ "firefox -remote 'openURL(%s,new-window)'\n" \ -+ "seamonkey -remote 'openURL(%s,new-window)'\n" \ - "mozilla -remote 'openURL(%s,new-window)'\n" \ -- "netscape -raise -remote 'openURL(%s,new-window)'\n" \ -+ "xterm -e links %s\n" \ - "xterm -e lynx %s\n" \ - Xdvi_ADD_COMMAND_STR - #define Xdvi_PREFS_EDITOR_DEFAULTS \ ---- ./texk/xdvik/browser.c.orig 2004-11-11 19:25:26.000000000 -0600 -+++ ./texk/xdvik/browser.c 2006-05-16 16:39:52.000000000 -0500 -@@ -39,7 +39,10 @@ - #include "statusline.h" - - static const char *const default_browser_cmd = -- "netscape -raise -remote \"openURL(%s,new-window)\"" -+ ":firefox -remote \"openURL(%s,new-window)\"" -+ ":seamonkey -remote \"openURL(%s,new-window)\"" -+ ":mozilla -remote \"openURL(%s,new-window)\"" -+ ":xterm -e links %s" - ":xterm -e lynx %s" - ":xterm -e wget %s"; - ---- ./texk/xdvik/xdvi.1.in.orig 2005-01-20 10:51:45.000000000 -0600 -+++ ./texk/xdvik/xdvi.1.in 2006-05-16 16:40:25.000000000 -0500 -@@ -365,7 +365,7 @@ - .B WWWBROWSER - (in that order) are used to determine the browser command. If these are - not set either, the following default value is used: --.SB netscape -raise -remote "openURL(%s,new-window)":xterm -e lynx %s:xterm -e wget %s -+.SB firefox -remote -remote "openURL(%s,new-window)":seamonkey -remote "openURL(%s,new-window)":mozilla -remote "openURL(%s,new-window)":xterm -e links %s:xterm -e lynx %s:xterm -e wget %s - .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - .TP - .BI \-bw " width" diff --git a/source/t/tetex/tetex.cpascal.getline.posix.2008.diff b/source/t/tetex/tetex.cpascal.getline.posix.2008.diff deleted file mode 100644 index 879adc44..00000000 --- a/source/t/tetex/tetex.cpascal.getline.posix.2008.diff +++ /dev/null @@ -1,17 +0,0 @@ ---- ./texk/web2c/cpascal.h.orig 2004-08-28 15:49:59.000000000 -0500 -+++ ./texk/web2c/cpascal.h 2010-02-19 11:27:04.000000000 -0600 -@@ -241,6 +241,14 @@ - #define getname vms_getname - #endif - -+/* Apparently POSIX 2008 has getline and glibc 2.9.90 exports it. -+ tangle, weave, et al. use that symbol; try to define it away so -+ something that a standard won't usurp. */ -+#ifdef getline -+#undef getline -+#endif -+#define getline web2c_getline -+ - /* Declarations for the routines we provide ourselves in lib/. */ - - extern string basenamechangesuffix P3H(const_string,const_string,const_string); diff --git a/source/t/tetex/tetex.dvipdfm.mkstemp.diff b/source/t/tetex/tetex.dvipdfm.mkstemp.diff deleted file mode 100644 index 5cae1bf2..00000000 --- a/source/t/tetex/tetex.dvipdfm.mkstemp.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- tetex-src-2.0.2/texk/dvipdfm/psimage.c.dvipdfm-security 2001-06-28 20:55:26.000000000 +0100 -+++ tetex-src-2.0.2/texk/dvipdfm/psimage.c 2003-03-12 18:12:56.000000000 +0000 -@@ -113,10 +113,15 @@ - { - #ifdef HAVE_SYSTEM - pdf_obj *result = NULL; -- char *tmp, *cmd; -+ char tmp[] = "/tmp/dvipdfm.XXXXXX", *cmd; -+ int tfd; - FILE *pdf_file = NULL; - /* Get a full qualified tmp name */ -- tmp = tmpnam (NULL); -+ tfd = mkstemp (tmp); -+ if (tfd == -1) { -+ fprintf (stderr, "\nCouldn't create temporary file for output\n"); -+ return NULL; -+ } else close (tfd); - if ((cmd = build_command_line (file_name, tmp))) { - if (!system (cmd) && (pdf_file = MFOPEN (tmp, FOPEN_RBIN_MODE))) { - result = pdf_include_page (pdf_file, p, res_name); diff --git a/source/t/tetex/tetex.etex.diff b/source/t/tetex/tetex.etex.diff deleted file mode 100644 index 0f96a17a..00000000 --- a/source/t/tetex/tetex.etex.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./texk/web2c/fmtutil.cnf.orig 2005-07-17 17:09:33.000000000 -0700 -+++ ./texk/web2c/fmtutil.cnf 2005-07-17 17:11:20.000000000 -0700 -@@ -40,7 +40,7 @@ - # if you want babel support in tex: - tex tex - -translate-file=cp227.tcx tex.ini - latex pdfetex language.dat -translate-file=cp227.tcx *latex.ini --etex pdfetex language.def -translate-file=cp227.tcx *etex.ini -+etex etex language.def -translate-file=cp227.tcx *etex.ini - pdftex pdfetex - -translate-file=cp227.tcx *pdftex.ini - pdflatex pdfetex language.dat -translate-file=cp227.tcx *pdflatex.ini - pdfetex pdfetex language.def -translate-file=cp227.tcx *pdfetex.ini diff --git a/source/t/tetex/tetex.fontcachedirinhome.diff b/source/t/tetex/tetex.fontcachedirinhome.diff deleted file mode 100644 index 11760a4c..00000000 --- a/source/t/tetex/tetex.fontcachedirinhome.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- ./texk/kpathsea/texmf.in-teTeX.orig 2005-02-05 18:04:35.000000000 -0600 -+++ ./texk/kpathsea/texmf.in-teTeX 2007-06-27 21:44:36.000000000 -0500 -@@ -119,7 +119,7 @@ - % Where generated fonts may be written. This tree is used when the sources - % were found in a system tree and either that tree wasn't writable, or the - % varfonts feature was enabled in MT_FEATURES in mktex.cnf. --VARTEXFONTS = @vartexfonts@ -+VARTEXFONTS = $TEXMFVAR - - % Where to look for ls-R files. There need not be an ls-R in the - % directories in this path, but if there is one, Kpathsea will use it. diff --git a/source/t/tetex/tetex.leet.diff b/source/t/tetex/tetex.leet.diff deleted file mode 100644 index fe251893..00000000 --- a/source/t/tetex/tetex.leet.diff +++ /dev/null @@ -1,25 +0,0 @@ ---- ./tex/latex/base/latex.ltx.orig 2004-03-13 20:19:52.000000000 -0600 -+++ ./tex/latex/base/latex.ltx 2010-05-17 12:59:23.000000000 -0500 -@@ -525,11 +525,11 @@ - \advance\count@\month - \advance\count@-#2\relax} - \expandafter\reserved@a\fmtversion\@nil --\ifnum\count@>65 -+\ifnum\count@>16044 - \typeout{^^J% - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% - ! You are attempting to make a LaTeX format from a source file^^J% --! That is more than five years old.^^J% -+! That is more than 1337 years old.^^J% - !^^J% - ! If you enter <return> to scroll past this message then the format^^J% - ! will be built, but please consider obtaining newer source files^^J% -@@ -537,7 +537,7 @@ - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% - } - \errhelp{To avoid this error message, obtain new LaTeX sources.} -- \errmessage{LaTeX source files more than 5 years old!} -+ \errmessage{LaTeX source files more than 1337 years old!} - \fi - \let\reserved@a\relax - \fi diff --git a/source/t/tetex/tetex.png14.diff b/source/t/tetex/tetex.png14.diff deleted file mode 100644 index 4f6548ac..00000000 --- a/source/t/tetex/tetex.png14.diff +++ /dev/null @@ -1,33 +0,0 @@ ---- ./texk/dvipdfm/pngimage.c.orig 2002-12-25 11:51:16.000000000 -0600 -+++ ./texk/dvipdfm/pngimage.c 2010-02-19 11:43:18.000000000 -0600 -@@ -42,7 +42,7 @@ - rewind (png_file); - if (fread (sigbytes, 1, sizeof(sigbytes), png_file) != - sizeof(sigbytes) || -- (!png_check_sig (sigbytes, sizeof(sigbytes)))) -+ (!(png_sig_cmp(sigbytes, 0, sizeof(sigbytes)) == 0))) - return 0; - else - return 1; ---- ./texk/dvipdfm/thumbnail.c.orig 2002-12-25 11:51:16.000000000 -0600 -+++ ./texk/dvipdfm/thumbnail.c 2010-02-19 11:42:41.000000000 -0600 -@@ -79,7 +79,7 @@ - } - if (fread (sigbytes, 1, sizeof(sigbytes), thumb_file) != - sizeof(sigbytes) || -- (!png_check_sig (sigbytes, sizeof(sigbytes)))) { -+ (!(png_sig_cmp(sigbytes, 0, sizeof(sigbytes)) == 0))) { - fprintf (stderr, "\nThumbnail not a png file! Skipping\n"); - return NULL; - } ---- ./libs/gd/gd_png.c.orig 2004-10-28 13:09:52.000000000 -0500 -+++ ./libs/gd/gd_png.c 2010-02-19 11:52:06.000000000 -0600 -@@ -143,7 +143,7 @@ - /* first do a quick check that the file really is a PNG image; could - * have used slightly more general png_sig_cmp() function instead */ - gdGetBuf (sig, 8, infile); -- if (!png_check_sig (sig, 8)) -+ if (!(png_sig_cmp(sig, 0, 8) == 0)) - return NULL; /* bad signature */ - - #ifndef PNG_SETJMP_NOT_SUPPORTED diff --git a/source/t/tetex/tetex.png16.diff b/source/t/tetex/tetex.png16.diff deleted file mode 100644 index f2465233..00000000 --- a/source/t/tetex/tetex.png16.diff +++ /dev/null @@ -1,167 +0,0 @@ ---- ./texk/web2c/pdftexdir/writeimg.c.orig 2015-03-23 13:18:35.471056383 -0500 -+++ ./texk/web2c/pdftexdir/writeimg.c 2015-03-23 13:30:32.157115740 -0500 -@@ -126,7 +126,7 @@ - { - switch (img_type(img)) { - case IMAGE_TYPE_PNG: -- return png_info(img)->bit_depth; -+ return png_get_bit_depth(png_ptr(img), png_info(img)); - case IMAGE_TYPE_JPG: - return jpg_ptr(img)->bits_per_component; - case IMAGE_TYPE_PDF: -@@ -346,7 +346,7 @@ - epdf_delete(); - break; - case IMAGE_TYPE_PNG: -- xfclose(png_ptr(img)->io_ptr, cur_file_name); -+ xfclose(png_get_io_ptr(png_ptr(img)), cur_file_name); - png_destroy_read_struct(&(png_ptr(img)), &(png_info(img)), NULL); - break; - case IMAGE_TYPE_JPG: ---- ./texk/web2c/pdftexdir/writepng.c.orig 2015-03-23 13:18:35.471056383 -0500 -+++ ./texk/web2c/pdftexdir/writepng.c 2015-03-23 13:27:58.053102977 -0500 -@@ -34,24 +34,24 @@ - pdftex_fail("libpng: png_create_read_struct() failed"); - if ((png_info(img) = png_create_info_struct(png_ptr(img))) == NULL) - pdftex_fail("libpng: png_create_info_struct() failed"); -- if (setjmp(png_ptr(img)->jmpbuf)) -+ if (setjmp(png_jmpbuf(png_ptr(img)))) - pdftex_fail("libpng: internal error"); - png_init_io(png_ptr(img), png_file); - png_read_info(png_ptr(img), png_info(img)); -- if (png_info(img)->color_type & PNG_COLOR_MASK_ALPHA) -+ if (png_get_color_type(png_ptr(img), png_info(img)) & PNG_COLOR_MASK_ALPHA) - png_set_strip_alpha(png_ptr(img)); -- if (png_info(img)->bit_depth == 16) -+ if (png_get_bit_depth(png_ptr(img), png_info(img)) == 16) - png_set_strip_16(png_ptr(img)); - png_read_update_info(png_ptr(img), png_info(img)); -- img_width(img) = png_info(img)->width; -- img_height(img) = png_info(img)->height; -- if (png_info(img)->valid & PNG_INFO_pHYs) { -+ img_width(img) = png_get_image_width(png_ptr(img), png_info(img)); -+ img_height(img) = png_get_image_height(png_ptr(img), png_info(img)); -+ if (png_get_valid(png_ptr(img), png_info(img), PNG_INFO_pHYs)) { - img_xres(img) = - round(0.0254*png_get_x_pixels_per_meter(png_ptr(img), png_info(img))); - img_yres(img) = - round(0.0254*png_get_y_pixels_per_meter(png_ptr(img), png_info(img))); - } -- switch (png_info(img)->color_type) { -+ switch (png_get_color_type(png_ptr(img), png_info(img))) { - case PNG_COLOR_TYPE_PALETTE: - img_color(img) = IMAGE_COLOR_C | IMAGE_COLOR_I; - break; -@@ -64,7 +64,7 @@ - img_color(img) = IMAGE_COLOR_C; - break; - default: -- pdftex_fail("unsupported type of color_type <%i>", png_info(img)->color_type); -+ pdftex_fail("unsupported type of color_type <%i>", png_get_color_type(png_ptr(img), png_info(img))); - } - } - -@@ -73,23 +73,26 @@ - int i, j, k, l; - integer palette_objnum = 0; - png_bytep row, r, *rows; -+ png_colorp png_palette; -+ int num_palette; -+ png_get_PLTE(png_ptr(img), png_info(img), &png_palette, &num_palette); - pdf_puts("/Type /XObject\n/Subtype /Image\n"); - pdf_printf("/Width %i\n/Height %i\n/BitsPerComponent %i\n", -- (int)png_info(img)->width, -- (int)png_info(img)->height, -- (int)png_info(img)->bit_depth); -+ (int)png_get_image_width(png_ptr(img), png_info(img)), -+ (int)png_get_image_height(png_ptr(img), png_info(img)), -+ (int)png_get_bit_depth(png_ptr(img), png_info(img))); - pdf_puts("/ColorSpace "); - if (img_colorspace_ref(img) != 0) { - pdf_printf("%i 0 R\n", (int)img_colorspace_ref(img)); - } - else { -- switch (png_info(img)->color_type) { -+ switch (png_get_color_type(png_ptr(img), png_info(img))) { - case PNG_COLOR_TYPE_PALETTE: - pdfcreateobj(0, 0); - palette_objnum = objptr; - pdf_printf("[/Indexed /DeviceRGB %i %i 0 R]\n", -- (int)(png_info(img)->num_palette - 1), -- (int)palette_objnum); -+ num_palette - 1), -+ (int)palette_objnum; - break; - case PNG_COLOR_TYPE_GRAY: - case PNG_COLOR_TYPE_GRAY_ALPHA: -@@ -100,20 +103,20 @@ - pdf_puts("/DeviceRGB\n"); - break; - default: -- pdftex_fail("unsupported type of color_type <%i>", png_info(img)->color_type); -+ pdftex_fail("unsupported type of color_type <%i>", png_get_color_type(png_ptr(img), png_info(img))); - } - } - pdfbeginstream(); -- if (png_info(img)->interlace_type == PNG_INTERLACE_NONE) { -- row = xtalloc(png_info(img)->rowbytes, png_byte); -- for (i = 0; i < (int)png_info(img)->height; i++) { -+ if (png_get_interlace_type(png_ptr(img), png_info(img)) == PNG_INTERLACE_NONE) { -+ row = xtalloc(png_get_rowbytes(png_ptr(img), png_info(img)), png_byte); -+ for (i = 0; i < (int)png_get_image_height(png_ptr(img), png_info(img)); i++) { - png_read_row(png_ptr(img), row, NULL); - r = row; -- k = png_info(img)->rowbytes; -+ k = png_get_rowbytes(png_ptr(img), png_info(img)); - while(k > 0) { - l = (k > pdfbufsize)? pdfbufsize : k; - pdfroom(l); -- for (j = 0; j < l; j++) -+ for (j = 0; j < (int)png_get_rowbytes(png_ptr(img), png_info(img)); j++) - pdfbuf[pdfptr++] = *r++; - k -= l; - } -@@ -121,19 +124,19 @@ - xfree(row); - } - else { -- if (png_info(img)->height*png_info(img)->rowbytes >= 10240000L) -+ if (png_get_image_height(png_ptr(img), png_info(img))*png_get_rowbytes(png_ptr(img), png_info(img)) >= 10240000L) - pdftex_warn("large interlaced PNG might cause out of memory (use non-interlaced PNG to fix this)"); -- rows = xtalloc(png_info(img)->height, png_bytep); -- for (i = 0; i < png_info(img)->height; i++) -- rows[i] = xtalloc(png_info(img)->rowbytes, png_byte); -+ rows = xtalloc(png_get_image_height(png_ptr(img), png_info(img)), png_bytep); -+ for (i = 0; i < png_get_image_height(png_ptr(img), png_info(img)); i++) -+ rows[i] = xtalloc(png_get_rowbytes(png_ptr(img), png_info(img)), png_byte); - png_read_image(png_ptr(img), rows); -- for (i = 0; i < (int)png_info(img)->height; i++) { -+ for (i = 0; i < (int)png_get_image_height(png_ptr(img), png_info(img)); i++) { - row = rows[i]; -- k = png_info(img)->rowbytes; -+ k = png_get_rowbytes(png_ptr(img), png_info(img)); - while(k > 0) { - l = (k > pdfbufsize)? pdfbufsize : k; -- pdfroom(l); -- for (j = 0; j < l; j++) -+ pdfroom(png_get_rowbytes(png_ptr(img), png_info(img))); -+ for (j = 0; j < (int)png_get_rowbytes(png_ptr(img), png_info(img)); j++) - pdfbuf[pdfptr++] = *row++; - k -= l; - } -@@ -145,11 +148,11 @@ - if (palette_objnum > 0) { - pdfbegindict(palette_objnum); - pdfbeginstream(); -- for (i = 0; i < png_info(img)->num_palette; i++) { -+ for (i = 0; i < num_palette; i++) { - pdfroom(3); -- pdfbuf[pdfptr++] = png_info(img)->palette[i].red; -- pdfbuf[pdfptr++] = png_info(img)->palette[i].green; -- pdfbuf[pdfptr++] = png_info(img)->palette[i].blue; -+ pdfbuf[pdfptr++] = png_palette[i].red; -+ pdfbuf[pdfptr++] = png_palette[i].green; -+ pdfbuf[pdfptr++] = png_palette[i].blue; - } - pdfendstream(); - } diff --git a/source/t/tetex/tetex.scripts.mktemp.diff b/source/t/tetex/tetex.scripts.mktemp.diff deleted file mode 100644 index 7d38869c..00000000 --- a/source/t/tetex/tetex.scripts.mktemp.diff +++ /dev/null @@ -1,244 +0,0 @@ ---- tetex-src-3.0/texk/tetex/allcm.badscript 2004-06-20 21:38:02.000000000 +0900 -+++ tetex-src-3.0/texk/tetex/allcm 2005-02-07 15:31:32.578141611 +0900 -@@ -14,7 +14,7 @@ - test -n "${ZSH_VERSION+set}" && alias -g '${1+"$@"}'='"$@"' - - progname=`basename $0` --tmpdir=${TMP-/tmp}/$progname.$$ -+tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` - - case "$progname" in - allec) -@@ -81,11 +81,6 @@ - exit 1 - ' 1 2 3 7 13 15 - --(umask 077; mkdir "$tmpdir") || { -- echo "$progname: failed to create temp directory." >&2 -- exit 1 --} -- - cd $tmpdir || exit 1 - echo >&2 - echo "---------------------------------------------------------------------" >&2 ---- tetex-src-3.0/texk/tetex/fmtutil.badscript 2005-01-30 18:12:16.000000000 +0900 -+++ tetex-src-3.0/texk/tetex/fmtutil 2005-02-07 15:31:32.579141429 +0900 -@@ -105,8 +105,6 @@ - - trap 'cleanup' 1 2 3 7 13 15 - needsCleanup=true -- (umask 077; mkdir "$tmpdir") \ -- || abort "could not create directory \`$tmpdir'" - } - - ############################################################################### -@@ -357,7 +355,7 @@ - need_find_hyphenfile=false - cfgparam= - cfgmaint= -- tmpdir=${TMP-/tmp}/$progname.$$ -+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` - verboseFlag=true - - # mktexfmtMode: if called as mktexfmt, set to true. Will echo the generated ---- tetex-src-3.0/texk/tetex/texconfig.badscript 2005-02-07 03:20:53.000000000 +0900 -+++ tetex-src-3.0/texk/tetex/texconfig 2005-02-07 15:31:32.581141065 +0900 -@@ -35,7 +35,7 @@ - TEXMFDBS TEXMFINI TEXMFSCRIPTS TEXPICTS TEXPKS TEXPOOL TEXPSHEADERS - TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS - " --tmpdir=${TMP-/tmp}/tctmp.$$ -+tmpdir=`mktemp -d "${TMP-/tmp}/$progname.XXXXXX"` || exit 1 - needsCleanup=false - lastUpdatedFile= - -@@ -214,8 +214,6 @@ - - trap 'cleanup' 1 2 3 7 13 15 - needsCleanup=true -- (umask 077; mkdir "$tmpdir") \ -- || abort "could not create directory \`$tmpdir'" - } - - ############################################################################### ---- tetex-src-3.0/texk/tetex/texlinks.badscript 2004-05-11 03:53:38.000000000 +0900 -+++ tetex-src-3.0/texk/tetex/texlinks 2005-02-07 15:31:32.583140701 +0900 -@@ -92,8 +92,6 @@ - - trap 'cleanup' 1 2 3 7 13 15 - needsCleanup=true -- (umask 077; mkdir "$tmpdir") \ -- || abort "could not create directory \`$tmpdir'" - } - - -@@ -209,7 +207,7 @@ - upd_symlinkdir() - { - search_symlinkdir || return 0 -- for i in `sed 's@ .*@@' cnf_file_ln.$$`; do -+ for i in `sed 's@ .*@@' $tmpdir/cnf_file_ln`; do - install_link "$selfautoloc/$i" "$symlinkdir/$i" - done - } -@@ -253,7 +251,7 @@ - test -f "$cnf_file" || abort "config file \`$cnf' not found" - - -- tmpdir=${TMP-/tmp}/texlinks.$$ -+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || exit 1 - setupTmpDir - cd "$tmpdir" || { - false # some systems need this to set nonzero $? -@@ -261,7 +259,7 @@ - } - - sed '/^[ ]*#/d; /^[ ]*$/d' $cnf_file \ -- | awk '{print $1, $2}' > cnf_file_ln.$$ -+ | awk '{print $1, $2}' > $tmpdir/cnf_file_ln - - if test -z "$dirs"; then - if test $multiplatform = true; then -@@ -279,8 +277,8 @@ - for d in $dirs; do - kpseaccess -w $d \ - || { errmsg "$d: no write permissions. Skipping..."; continue; } -- # cnf_file_ln.$$ has lines with "format engine" pairs -- set x `cat cnf_file_ln.$$`; shift -+ # $tmpdir/cnf_file_ln has lines with "format engine" pairs -+ set x `cat $tmpdir/cnf_file_ln`; shift - while test $# != 0; do - fmt=$1; engine=$2; shift; shift - ---- tetex-src-3.0/texk/tetex/updmap.badscript 2005-02-05 06:34:26.000000000 +0900 -+++ tetex-src-3.0/texk/tetex/updmap 2005-02-07 15:31:32.585140338 +0900 -@@ -761,7 +761,6 @@ - - trap 'cleanup' 1 2 3 7 13 15 - needsCleanup=true -- mkdir "$tmpdir" || abort "could not create directory \`$tmpdir'" - } - - ############################################################################### -@@ -1282,7 +1281,8 @@ - dvipsoutputdir=; pdftexoutputdir=; dvipdfmoutputdir= - : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`} - -- tmpdir=${TMP-/tmp}/$progname.$$ -+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \ -+ abort "could not create directory" - tmp1=$tmpdir/a - tmp2=$tmpdir/b - tmp3=$tmpdir/c ---- tetex-src-3.0/texk/kpathsea/mktexlsr.badscript 2005-01-22 04:13:57.000000000 +0900 -+++ tetex-src-3.0/texk/kpathsea/mktexlsr 2005-02-07 15:31:32.586140156 +0900 -@@ -119,9 +119,8 @@ - # Skip if we cannot write the file: - kpseaccess -w "$db_file" || { echo "$progname: $db_file: no write permission. Skipping..." >&2; continue; } - -- db_dir_tmp="$db_dir/lsR$$.tmp" -- (umask 077 && mkdir "$db_dir_tmp" ) \ -- || { echo "$progname: could not create directory '$db_dir_tmp'. Skipping..." >&2; continue; } -+ db_dir_tmp=`mktemp -d "$db_dir/lsR.XXXXXX"` \ -+ || { echo "$progname: could not create secure temporary directory. Skipping..." >&2; continue; } - db_file_tmp="$db_dir_tmp/lsR$$.tmp" - rm -f "$db_file_tmp" - ---- tetex-src-3.0/texk/kpathsea/mktexmf.badscript 2005-01-26 02:39:21.000000000 +0900 -+++ tetex-src-3.0/texk/kpathsea/mktexmf 2005-02-07 15:31:32.587139974 +0900 -@@ -87,50 +87,52 @@ - exit 0 - fi - -+tmpfile=`mktemp mf.XXXXXX` -+ - case "$name" in - ec*|tc*) -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - if unknown exbase: input exbase fi; - gensize:=$realsize; - generate $rootname; - END - ;; - dc*) -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - if unknown dxbase: input dxbase fi; - gensize:=$realsize; - generate $rootname; - END - ;; - cs*|lcsss*|icscsc*|icstt*|ilcsss*) -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - input cscode - use_driver; - END - ;; - wn[bcdfirstuv]*|rx[bcdfiorstuvx][bcfhilmostx]*|l[abcdhl][bcdfiorstuvx]*) -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - input fikparm; - END - ;; - g[lmorst][ijmtwx][cilnoru]*) - # A small superset of the names of the cbgreek fonts. -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - gensize:=$realsize; - input $rootname; - END - ;; - *) -- cat > "mf$$.tmp" <<END -+ cat > "$tmpfile" <<END - design_size := $realsize; - input $rootname; - END - ;; - esac - --chmod `kpsestat -xst,go-w .` "mf$$.tmp" -+chmod `kpsestat -xst,go-w .` "$tmpfile" - rm -f "$mfname" --mv "mf$$.tmp" "$mfname" -+mv "$tmpfile" "$mfname" - - echo "$destdir/$mfname" >$STDOUT - echo "$progname: $destdir/$mfname: successfully generated." >&2 ---- tetex-src-3.0/texk/dviljk/dvihp.badscript 2002-07-08 02:49:09.000000000 +0900 -+++ tetex-src-3.0/texk/dviljk/dvihp 2005-02-07 15:31:32.588139792 +0900 -@@ -7,9 +7,7 @@ - : ${SPOOL=lpr} # used to print an LJ file - : ${TMP=/tmp} # for the dvicopy output - --TMPDIR="${TMP}"/dvihp$$ --(umask 077; mkdir "$TMPDIR") \ -- || { echo "cannot create directory \`$TMPDIR'."; exit 1; } -+TMPDIR=`mktemp -d ${TMPDIR}/dvihp.XXXXXX` || { echo "cannot create secure temporary directory."; exit 1; } - - trap ' - cd "${TMP}" ---- tetex-src-3.0/texk/dvipdfm/dvipdft.badscript 2004-11-19 06:26:19.000000000 +0900 -+++ tetex-src-3.0/texk/dvipdfm/dvipdft 2005-02-07 15:31:32.589139610 +0900 -@@ -31,7 +31,7 @@ - $progname --help - $progname --version" - --tmpdir=${TMP-/tmp}/$progname.$$ -+tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` - - quoteit() - { ---- tetex-src-3.0/texk/xdvik/xdvizilla.badscript 2004-02-25 08:08:56.000000000 +0900 -+++ tetex-src-3.0/texk/xdvik/xdvizilla 2005-02-07 15:31:32.590139429 +0900 -@@ -61,7 +61,7 @@ - trap 'do_cleanup' 1 2 3 7 13 15 - - ### create a temporary directory only read/writable by user --TMP_DIR=${TMP-/tmp}/$progname.$$ -+TMP_DIR=`mktmp -d ${TMP-/tmp}/$progname.XXXXXX` - (umask 077; mkdir "$TMP_DIR") || do_abort "Could not create directory \`$TMP_DIR'" - - if [ $# -gt 1 -a "x$1" = "x-no-rm" ]; then diff --git a/source/t/tetex/tetex.tmp.cleanup.diff b/source/t/tetex/tetex.tmp.cleanup.diff deleted file mode 100644 index e2fb56ea..00000000 --- a/source/t/tetex/tetex.tmp.cleanup.diff +++ /dev/null @@ -1,51 +0,0 @@ ---- tetex-src-3.0/texk/tetex/texconfig.tmpcleanup 2005-11-04 11:19:47.000000000 +0100 -+++ tetex-src-3.0/texk/tetex/texconfig 2005-11-04 14:22:18.000000000 +0100 -@@ -36,7 +36,8 @@ - TEXSOURCES TFMFONTS TRFONTS TTFONTS VFFONTS WEB2C WEBINPUTS - " - tmpdir=`mktemp -d "${TMP-/tmp}/$progname.XXXXXX"` || exit 1 --needsCleanup=false -+trap -- "cleanup;" EXIT 1 2 3 7 13 15 -+needsCleanup=true - lastUpdatedFile= - - ############################################################################### ---- tetex-src-3.0/texk/tetex/updmap.tmpcleanup 2005-11-04 11:19:47.000000000 +0100 -+++ tetex-src-3.0/texk/tetex/updmap 2005-11-04 14:22:18.000000000 +0100 -@@ -1274,7 +1274,7 @@ - texhashEnabled=true - mkmapEnabled=true - verbose=true -- needsCleanup=false -+ needsCleanup=true - - cnfFileShort=updmap.cfg - cnfFile= -@@ -1282,7 +1282,8 @@ - : ${TEXMFMAIN=`kpsewhich -var-value=TEXMFMAIN`} - - tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \ -- abort "could not create directory" -+ abort "could not create temporary directory" -+ trap -- "cleanup;" EXIT 1 2 3 7 13 15 - tmp1=$tmpdir/a - tmp2=$tmpdir/b - tmp3=$tmpdir/c ---- tetex-src-3.0/texk/tetex/fmtutil.tmpcleanup 2005-11-04 11:19:47.000000000 +0100 -+++ tetex-src-3.0/texk/tetex/fmtutil 2005-11-04 14:22:18.000000000 +0100 -@@ -351,11 +351,13 @@ - destdir= # global variable: where do we put the format files? - cnf_file= # global variable: full name of the config file - cmd= # desired action from command line -- needsCleanup=false -+ needsCleanup=true - need_find_hyphenfile=false - cfgparam= - cfgmaint= -- tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` -+ tmpdir=`mktemp -d ${TMP-/tmp}/$progname.XXXXXX` || \ -+ abort "could not create temporary directory" -+ trap -- "cleanup;" EXIT 1 2 3 7 13 15 - verboseFlag=true - - # mktexfmtMode: if called as mktexfmt, set to true. Will echo the generated diff --git a/source/t/tetex/tetex.var.fonts.diff b/source/t/tetex/tetex.var.fonts.diff deleted file mode 100644 index 9535ac6f..00000000 --- a/source/t/tetex/tetex.var.fonts.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- teTeX-1.0/texk/make/paths.mk.varconfig Sun Jan 10 16:42:53 1999 -+++ teTeX-1.0/texk/make/paths.mk Wed Aug 25 19:18:13 1999 -@@ -46,7 +46,7 @@ - texmf = @texmfmain@ - - # The directory used by varfonts. --vartexfonts = /var/tmp/texfonts -+vartexfonts = /var/lib/texmf - - # Regular input files. - texinputdir = $(texmf)/tex diff --git a/source/t/texlive/README.tlpkg b/source/t/texlive/README.tlpkg new file mode 100644 index 00000000..35c25dd2 --- /dev/null +++ b/source/t/texlive/README.tlpkg @@ -0,0 +1,18 @@ +The TeXLive Package Manager, i.e. tlmgr(1), is not shipped with this +TeXLive package, as it's not expected to work properly (if at all). +The general consensus from the TeXLive users mailing list is that +distributions should not be shipping tlpkg. + +The *proper* way to upgrade the TeXLive Slackware package (or any +part of it) is through your Slackware's package manager. If you +elect to try tlmgr(1), and it doesn't work at all, or worse, it messes +up part of your TeXLive installation, too bad. On the other hand, +if you are able to document exactly what we need to do in order to +make it: + 1) work + 2) put updates and such in a user-specific directory, i.e. + *not* alter/replace system package contents +then we would love to hear from you. :-) + +--rworkman :-) + diff --git a/source/t/texlive/doinst.sh b/source/t/texlive/doinst.sh new file mode 100644 index 00000000..f864e767 --- /dev/null +++ b/source/t/texlive/doinst.sh @@ -0,0 +1,5 @@ +chroot . /usr/bin/mktexlsr 1>/dev/null 2>/dev/null +printf "y\n" | chroot . /usr/bin/updmap-sys --syncwithtrees 1>/dev/null 2>/dev/null +chroot . /usr/bin/updmap-sys 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/source/t/texlive/dump.unused.internal.libraries.from.sources.sh b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh new file mode 100755 index 00000000..71ab0b53 --- /dev/null +++ b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# Repacks the texlive tarball to remove unused sources. + +VERSION=${VERSION:-$(echo texlive-*source.tar.?z* | rev | cut -f 2 -d - | cut -f 1 -d - | rev)} + +tar xf texlive-${VERSION}-source.tar.xz || exit 1 +mv texlive-${VERSION}-source.tar.xz texlive-${VERSION}-source.tar.xz.orig +( cd texlive-${VERSION}-source/libs && rm -rf cairo freetype2 gd gmp mpfr icu libpng pixman zlib ) +( cd texlive-${VERSION}-source/utils && rm -rf asymptote ) +tar cf texlive-${VERSION}-source.tar texlive-${VERSION}-source +rm -r texlive-${VERSION}-source +#xz -9 texlive-${VERSION}-source.tar +xz texlive-${VERSION}-source.tar +touch -r texlive-${VERSION}-source.tar.xz.orig texlive-${VERSION}-source.tar.xz +rm texlive-${VERSION}-source.tar.xz.orig diff --git a/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch b/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch new file mode 100644 index 00000000..c2d3521a --- /dev/null +++ b/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch @@ -0,0 +1,33 @@ +Submitted By: Ken Moffat <ken at linuxfromscratch dot org> +Date: 2017-06-05 +Initial Package Version: 20170524 +Upstream Status: Unknown +Origin: http://tug.org/pipermail/tex-live/2017-June/040192.html +Description: From Dr. Werner Fink of SuSe, fixes compilation with gcc-7.1 + +diff -Naur texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ctype.c texlive-20170524-source/texk/web2c/luatexdir/luaffi/ctype.c +--- texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ctype.c 2017-02-10 01:03:59.000000000 +0000 ++++ texlive-20170524-source/texk/web2c/luatexdir/luaffi/ctype.c 2017-06-05 02:32:34.548531839 +0100 +@@ -245,6 +245,10 @@ + + lua_pop(L, 1); /* mt */ + cd = (struct cdata*) lua_touserdata(L, idx); ++ if (!cd) { ++ lua_pushnil(L); ++ return NULL; ++ } + *ct = cd->type; + lua_getuservalue(L, idx); + +diff -Naur texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ffi.h texlive-20170524-source/texk/web2c/luatexdir/luaffi/ffi.h +--- texlive-20170524-source.orig/texk/web2c/luatexdir/luaffi/ffi.h 2017-03-11 01:04:06.000000000 +0000 ++++ texlive-20170524-source/texk/web2c/luatexdir/luaffi/ffi.h 2017-06-05 02:32:34.548531839 +0100 +@@ -370,7 +370,7 @@ + #endif + struct cdata { + const struct ctype type +-#ifdef __GNUC__ ++#if 0 /* def __GNUC__ */ + __attribute__ ((aligned(16))) + #endif + ; diff --git a/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch b/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch new file mode 100644 index 00000000..e4ea52e2 --- /dev/null +++ b/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch @@ -0,0 +1,451 @@ +Submitted By: Ken Moffat <ken at linuxfromscratch dot org> +Date: 2017-06-13 +Initial Package Version: 2017-05-25 +Upstream Status: Applied +Origin: Upstream +Description: Consolidated fixes for luatex. + +1. Removes debugging code which was accidentally left in +luatex, which made the (infrequently needed) io.popen useless. Also +disables io.saved_popen and changes the reported date of the luatex +version. + +2. Fix for io.lines (fixed in r44572). + +diff -Naur a/texk/web2c/luatexdir/lua/liolibext.c b/texk/web2c/luatexdir/lua/liolibext.c +--- a/texk/web2c/luatexdir/lua/liolibext.c 2017-03-11 01:04:06.000000000 +0000 ++++ b/texk/web2c/luatexdir/lua/liolibext.c 2017-06-11 01:49:11.813308882 +0100 +@@ -365,7 +365,7 @@ + lua_pushliteral(L,"all command execution is disabled"); + } else if (restrictedshell == 0) { + lua_pushboolean(L,1); +- lua_pushliteral(L,"all commands are permitted"); ++ lua_pushstring(L,filename); + } else { + char *safecmd = NULL; + char *cmdname = NULL; +@@ -374,10 +374,6 @@ + lua_pushboolean(L,0); + lua_pushliteral(L, "specific command execution disabled"); + break; +- case 1: +- lua_pushboolean(L,1); +- lua_pushstring(L,filename); +- break; + case 2: + lua_pushboolean(L,1); + lua_pushstring(L,safecmd); +diff -Naur a/texk/web2c/luatexdir/lua/luatex-core.c b/texk/web2c/luatexdir/lua/luatex-core.c +--- a/texk/web2c/luatexdir/lua/luatex-core.c 2017-04-19 11:07:10.000000000 +0100 ++++ b/texk/web2c/luatexdir/lua/luatex-core.c 2017-06-12 19:34:37.320003411 +0100 +@@ -52,7 +52,7 @@ + 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x6f, 0x5f, + 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x6c, 0x6f, 0x63, 0x61, +- 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x6c, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, + 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, + 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x66, 0x69, +@@ -84,169 +84,175 @@ + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x2d, 0x2d, 0x20, + 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, +- 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, +- 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, +- 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, +- 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, +- 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, +- 0x79, 0x0a, 0x6d, 0x74, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74, +- 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, +- 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, +- 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, +- 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, +- 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x6f, +- 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, +- 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, +- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, ++ 0x0a, 0x2d, 0x2d, 0x20, 0x28, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, ++ 0x20, 0x74, 0x6c, 0x31, 0x37, 0x20, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x29, 0x20, 0x69, ++ 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x70, 0x6f, ++ 0x70, 0x65, 0x6e, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, ++ 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x0a, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, ++ 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20, ++ 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, ++ 0x6d, 0x74, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x74, 0x5f, 0x6c, ++ 0x69, 0x6e, 0x65, 0x73, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x72, ++ 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, ++ 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, + 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, +- 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x68, +- 0x6f, 0x77, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, +- 0x61, 0x6e, 0x64, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x77, 0x27, +- 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, +- 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, +- 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, +- 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, +- 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, +- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, +- 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, +- 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, +- 0x6c, 0x79, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, +- 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, +- 0x5b, 0x5e, 0x72, 0x62, 0x5d, 0x27, 0x2c, 0x27, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, +- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x68, 0x6f, 0x77, 0x20, ++ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, ++ 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, +- 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27, +- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, +- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, +- 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, +- 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, +- 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, +- 0x6b, 0x61, 0x79, 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f, +- 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, +- 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x6b, +- 0x61, 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, +- 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, +- 0x20, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2c, +- 0x2e, 0x2e, 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, +- 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, +- 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, +- 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, +- 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, +- 0x65, 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, +- 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, +- 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x68, 0x6f, 0x77, ++ 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x27, 0x20, 0x61, 0x6e, ++ 0x64, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x20, ++ 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e, ++ 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x77, 0x27, 0x29, 0x0a, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, ++ 0x64, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, ++ 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, ++ 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, ++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, ++ 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, ++ 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, ++ 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, 0x6f, ++ 0x77, 0x20, 0x3d, 0x20, 0x67, 0x73, 0x75, 0x62, 0x28, 0x68, 0x6f, 0x77, 0x2c, 0x27, 0x5b, 0x5e, ++ 0x72, 0x62, 0x5d, 0x27, 0x2c, 0x27, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x69, 0x66, 0x20, 0x68, 0x6f, 0x77, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x74, 0x68, ++ 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x68, ++ 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x27, 0x72, 0x27, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, 0x70, ++ 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x69, 0x66, 0x20, 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x66, 0x69, 0x6c, ++ 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x27, 0x72, 0x27, 0x29, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, ++ 0x72, 0x6e, 0x20, 0x66, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, ++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, ++ 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x2e, 0x2e, ++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x6b, 0x61, ++ 0x79, 0x2c, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x3d, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x63, ++ 0x68, 0x65, 0x63, 0x6b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x28, 0x6e, ++ 0x61, 0x6d, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6f, 0x6b, 0x61, 0x79, ++ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x69, ++ 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x28, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x2c, 0x2e, 0x2e, ++ 0x2e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, ++ 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, ++ 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x28, 0x6e, ++ 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, ++ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x69, 0x6f, 0x5f, 0x6f, ++ 0x70, 0x65, 0x6e, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x68, 0x6f, 0x77, 0x20, 0x6f, 0x72, 0x20, ++ 0x27, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, ++ 0x66, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, ++ 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f, ++ 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, ++ 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, ++ 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x75, ++ 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, ++ 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, ++ 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, + 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, +- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, +- 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, +- 0x5f, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x28, 0x66, 0x29, 0x0a, +- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, +- 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, +- 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x69, 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, +- 0x65, 0x28, 0x66, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, +- 0x0a, 0x0a, 0x69, 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, +- 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x6d, 0x74, 0x2e, +- 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, +- 0x6f, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x57, +- 0x65, 0x20, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, +- 0x65, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, +- 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, +- 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x20, 0x54, +- 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x61, +- 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x54, 0x65, 0x58, 0x74, 0x2e, 0x0a, 0x0a, +- 0x69, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x31, +- 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, +- 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, +- 0x6f, 0x70, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, +- 0x6e, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, +- 0x70, 0x65, 0x6e, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, +- 0x65, 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, +- 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, +- 0x74, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, +- 0x73, 0x70, 0x61, 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, +- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, +- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x74, +- 0x65, 0x6d, 0x70, 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, +- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, +- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, +- 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, +- 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69, +- 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, +- 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, +- 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, +- 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, +- 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, +- 0x2e, 0x74, 0x6f, 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e, +- 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, +- 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, +- 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x6e, 0x69, +- 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, 0x65, 0x64, 0x5f, 0x6f, +- 0x70, 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, +- 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x0a, +- 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f, 0x70, 0x74, +- 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x68, 0x65, 0x6c, +- 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x7e, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, 0x65, +- 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x71, +- 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x66, 0x69, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, +- 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x6e, 0x65, 0x78, 0x74, +- 0x2c, 0x20, 0x66, 0x66, 0x69, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x69, 0x66, 0x20, 0x6b, 0x20, 0x7e, 0x3d, 0x20, 0x27, 0x67, 0x63, 0x27, 0x20, 0x74, 0x68, +- 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, +- 0x66, 0x69, 0x5b, 0x6b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, +- 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x65, +- 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6f, 0x73, 0x2e, 0x5b, 0x65, 0x78, 0x65, 0x63, 0x75, +- 0x74, 0x65, 0x7c, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x7c, 0x6f, 0x73, 0x2e, 0x65, +- 0x78, 0x65, 0x63, 0x5d, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x72, 0x65, +- 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x61, 0x77, 0x61, +- 0x72, 0x65, 0x29, 0x0a, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6d, 0x64, 0x35, 0x20, 0x74, 0x68, 0x65, +- 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x75, 0x6d, +- 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x73, 0x75, 0x62, 0x20, 0x20, 0x20, 0x3d, +- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x3d, 0x20, +- 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, 0x20, 0x20, 0x20, 0x3d, +- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x79, 0x74, 0x65, 0x0a, 0x0a, 0x20, 0x20, +- 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, +- 0x75, 0x6d, 0x68, 0x65, 0x78, 0x61, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, +- 0x75, 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, +- 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, +- 0x74, 0x28, 0x22, 0x25, 0x30, 0x32, 0x78, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, +- 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, +- 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, +- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x48, 0x45, 0x58, +- 0x41, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, +- 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x75, 0x6d, 0x28, 0x6b, 0x29, +- 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, +- 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, +- 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x30, +- 0x32, 0x58, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, +- 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, +- 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00 ++ 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, ++ 0x6f, 0x2e, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, ++ 0x5f, 0x69, 0x6f, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x0a, 0x6d, 0x74, 0x2e, 0x6c, 0x69, 0x6e, ++ 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x72, ++ 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x57, 0x65, 0x20, 0x61, ++ 0x73, 0x73, 0x75, 0x6d, 0x65, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, ++ 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, ++ 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, ++ 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6b, 0x70, 0x73, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, ++ 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x2d, 0x2d, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, ++ 0x69, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x54, 0x65, 0x58, 0x74, 0x2e, 0x0a, 0x0a, 0x69, 0x66, 0x20, ++ 0x6b, 0x70, 0x73, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, ++ 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, ++ 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, ++ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x3d, ++ 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x65, 0x6e, ++ 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65, 0x72, 0x6f, ++ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x20, ++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, ++ 0x77, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, ++ 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x73, 0x65, 0x74, 0x65, 0x6e, 0x76, 0x20, 0x20, 0x3d, ++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x74, 0x65, 0x6d, 0x70, ++ 0x64, 0x69, 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, ++ 0x6f, 0x2e, 0x70, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x20, 0x20, 0x3d, ++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x73, 0x2e, 0x72, 0x65, 0x6e, ++ 0x61, 0x6d, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, ++ 0x73, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x74, 0x6d, 0x70, 0x66, 0x69, 0x6c, 0x65, 0x20, ++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x6f, 0x75, 0x74, ++ 0x70, 0x75, 0x74, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x6c, 0x66, 0x73, 0x2e, 0x63, 0x68, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6c, 0x6f, 0x63, 0x6b, 0x20, 0x20, 0x20, ++ 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x74, 0x6f, ++ 0x75, 0x63, 0x68, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, ++ 0x66, 0x73, 0x2e, 0x72, 0x6d, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x6c, 0x66, 0x73, 0x2e, 0x6d, 0x6b, 0x64, 0x69, 0x72, 0x20, 0x20, 0x3d, ++ 0x20, 0x6e, 0x69, 0x6c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6f, 0x2e, 0x73, 0x61, 0x76, ++ 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x20, 0x3d, 0x20, 0x6c, 0x75, 0x61, 0x74, 0x65, ++ 0x78, 0x5f, 0x69, 0x6f, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x6f, 0x6e, ++ 0x6c, 0x79, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x73, 0x61, 0x66, 0x65, ++ 0x72, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x6f, 0x72, 0x20, ++ 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x7e, 0x3d, 0x20, 0x31, ++ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, ++ 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x27, 0x66, 0x66, 0x69, 0x27, 0x29, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20, ++ 0x6e, 0x65, 0x78, 0x74, 0x2c, 0x20, 0x66, 0x66, 0x69, 0x20, 0x64, 0x6f, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x20, 0x7e, 0x3d, 0x20, 0x27, 0x67, 0x63, ++ 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x5b, 0x6b, 0x5d, 0x20, 0x3d, 0x20, 0x6e, 0x69, 0x6c, 0x0a, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x66, 0x69, 0x20, 0x3d, 0x20, 0x6e, 0x69, ++ 0x6c, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x2d, 0x2d, 0x20, 0x6f, 0x73, 0x2e, 0x5b, 0x65, ++ 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x7c, 0x6f, 0x73, 0x2e, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x7c, ++ 0x6f, 0x73, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x5d, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, ++ 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x68, 0x65, 0x6c, 0x6c, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, ++ 0x20, 0x61, 0x77, 0x61, 0x72, 0x65, 0x29, 0x0a, 0x0a, 0x0a, 0x69, 0x66, 0x20, 0x6d, 0x64, 0x35, ++ 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, ++ 0x20, 0x73, 0x75, 0x6d, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, ++ 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x73, 0x75, 0x62, ++ 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, ++ 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, ++ 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x62, 0x79, 0x74, 0x65, ++ 0x20, 0x20, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x79, 0x74, 0x65, ++ 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, ++ 0x64, 0x35, 0x2e, 0x73, 0x75, 0x6d, 0x68, 0x65, 0x78, 0x61, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, ++ 0x75, 0x62, 0x28, 0x73, 0x75, 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, ++ 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, ++ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x25, 0x30, 0x32, 0x78, 0x22, 0x2c, 0x62, 0x79, 0x74, ++ 0x65, 0x28, 0x63, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, ++ 0x64, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x20, 0x20, 0x20, ++ 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x64, 0x35, 0x2e, 0x73, 0x75, ++ 0x6d, 0x48, 0x45, 0x58, 0x41, 0x28, 0x6b, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x67, 0x73, 0x75, 0x62, 0x28, 0x73, 0x75, ++ 0x6d, 0x28, 0x6b, 0x29, 0x2c, 0x20, 0x22, 0x2e, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, ++ 0x69, 0x6f, 0x6e, 0x28, 0x63, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, ++ 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, ++ 0x28, 0x22, 0x25, 0x30, 0x32, 0x58, 0x22, 0x2c, 0x62, 0x79, 0x74, 0x65, 0x28, 0x63, 0x29, 0x29, ++ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x29, 0x29, 0x0a, 0x20, ++ 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x0a, 0x0a, 0x00 + }; + return luaL_dostring(L, (const char*) luatex_core_lua); + } +\ No newline at end of file +diff -Naur a/texk/web2c/luatexdir/lua/luatex-core.lua b/texk/web2c/luatexdir/lua/luatex-core.lua +--- a/texk/web2c/luatexdir/lua/luatex-core.lua 2017-04-19 11:07:10.000000000 +0100 ++++ b/texk/web2c/luatexdir/lua/luatex-core.lua 2017-06-12 19:34:37.320003411 +0100 +@@ -16,7 +16,7 @@ +
+ local io_open = io.open
+ local io_popen = io.popen
+-local io_line = io.lines
++local io_lines = io.lines
+
+ local fio_readline = fio.readline
+ local fio_checkpermission = fio.checkpermission
+@@ -29,7 +29,7 @@ + local kpseused = status.kpse_used -- 0 1
+
+ io.saved_open = io_open -- can be protected
+-io.saved_popen = io_popen -- can be protected
++-- (deleted for tl17 rebuild) io.saved_popen = io_popen -- can be protected
+ io.saved_lines = io_lines -- always readonly
+ mt.saved_lines = mt_lines -- always readonly
+
+@@ -71,12 +71,16 @@ + end
+ end
+
+-local function luatex_io_lines(name)
+- local f = io_open(name,'r')
+- if f then
+- return function()
+- return fio_readline(f)
++local function luatex_io_lines(name,how)
++ if name then
++ local f = io_open(name,how or 'r')
++ if f then
++ return function()
++ return fio_readline(f)
++ end
+ end
++ else
++ return io_lines()
+ end
+ end
+
+@@ -122,7 +126,6 @@ + lfs.rmdir = nil
+ lfs.mkdir = nil
+
+- io.saved_popen = nil
+ io.saved_open = luatex_io_open_readonly
+
+ end
+diff -Naur a/texk/web2c/luatexdir/luatex.c b/texk/web2c/luatexdir/luatex.c +--- a/texk/web2c/luatexdir/luatex.c 2017-03-31 14:27:09.000000000 +0100 ++++ b/texk/web2c/luatexdir/luatex.c 2017-06-11 01:49:11.813308882 +0100 +@@ -28,9 +28,11 @@ + + #define TeX + ++/* for tl17 update, change luatex_date_info but nothing else, ++ as context depends on the numeric version number. */ + int luatex_version = 100; /* \.{\\luatexversion} */ + int luatex_revision = '4'; /* \.{\\luatexrevision} */ +-int luatex_date_info = 2017033109; /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/ ++int luatex_date_info = 2017060901; /* the compile date is now hardwired :YEAR MONTH DAY HOUR*/ + const char *luatex_version_string = "1.0.4"; + const char *engine_name = my_name; /* the name of this engine */ + diff --git a/source/t/texlive/patches/texlive-poppler-0.59.patch b/source/t/texlive/patches/texlive-poppler-0.59.patch new file mode 100644 index 00000000..401315a6 --- /dev/null +++ b/source/t/texlive/patches/texlive-poppler-0.59.patch @@ -0,0 +1,1142 @@ +diff -ur source.orig/texk/web2c/luatexdir/image/pdftoepdf.w source/texk/web2c/luatexdir/image/pdftoepdf.w +--- source.orig/texk/web2c/luatexdir/image/pdftoepdf.w 2017-05-08 22:39:36.639375783 +0200 ++++ source/texk/web2c/luatexdir/image/pdftoepdf.w 2017-09-19 11:23:36.586768739 +0200 +@@ -224,7 +224,7 @@ + free(checksum); + } + if (pdf_doc->doc == NULL) { +- docmemstream = new MemStream( docstream,0,streamsize, obj.initNull() ); ++ docmemstream = new MemStream( docstream,0,streamsize, Object(objNull) ); + doc = new PDFDoc(docmemstream); /* takes ownership of docmemstream */ + pdf_doc->pc++; + if (!doc->isOk() || !doc->okToPrint()) { +@@ -408,9 +408,8 @@ + Object obj1; + pdf_begin_array(pdf); + for (i = 0, l = array->getLength(); i < l; ++i) { +- array->getNF(i, &obj1); ++ obj1 = array->getNF(i); + copyObject(pdf, pdf_doc, &obj1); +- obj1.free(); + } + pdf_end_array(pdf); + } +@@ -422,9 +421,8 @@ + pdf_begin_dict(pdf); + for (i = 0, l = dict->getLength(); i < l; ++i) { + copyName(pdf, dict->getKey(i)); +- dict->getValNF(i, &obj1); ++ obj1 = dict->getValNF(i); + copyObject(pdf, pdf_doc, &obj1); +- obj1.free(); + } + pdf_end_dict(pdf); + } +@@ -510,13 +508,12 @@ + PDFDoc *doc = pdf_doc->doc; + xref = doc->getXRef(); + for (r = pdf_doc->inObjList; r != NULL;) { +- xref->fetch(r->ref.num, r->ref.gen, &obj1); ++ obj1 = xref->fetch(r->ref.num, r->ref.gen); + if (obj1.isStream()) + pdf_begin_obj(pdf, r->num, OBJSTM_NEVER); + else + pdf_begin_obj(pdf, r->num, 2); + copyObject(pdf, pdf_doc, &obj1); +- obj1.free(); + pdf_end_obj(pdf); + n = r->next; + delete r; +@@ -740,7 +737,7 @@ + catalog = doc->getCatalog(); + page = catalog->getPage(img_pagenum(idict)); + pageref = catalog->getPageRef(img_pagenum(idict)); +- doc->getXRef()->fetch(pageref->num, pageref->gen, &pageobj); ++ pageobj = doc->getXRef()->fetch(pageref->num, pageref->gen); + pageDict = pageobj.getDict(); + /* write the Page header */ + pdf_begin_obj(pdf, img_objnum(idict), OBJSTM_NEVER); +@@ -757,12 +754,11 @@ + pdf_dict_add_int(pdf, "PTEX.PageNumber", (int) img_pagenum(idict)); + } + if ((suppress_optional_info & 8) == 0) { +- doc->getDocInfoNF(&obj1); ++ obj1 = doc->getDocInfoNF(); + if (obj1.isRef()) { + /* the info dict must be indirect (PDF Ref p. 61) */ + pdf_dict_add_ref(pdf, "PTEX.InfoDict", addInObj(pdf, pdf_doc, obj1.getRef())); + } +- obj1.free(); + } + if (img_is_bbox(idict)) { + bbox[0] = sp2bp(img_bbox(idict)[0]); +@@ -788,19 +784,17 @@ + Now all relevant parts of the Page dictionary are copied. Metadata validity + check is needed(as a stream it must be indirect). + */ +- pageDict->lookupNF("Metadata", &obj1); ++ obj1 = pageDict->lookupNF("Metadata"); + if (!obj1.isNull() && !obj1.isRef()) + formatted_warning("pdf inclusion","/Metadata must be indirect object"); +- obj1.free(); + /* copy selected items in Page dictionary */ + for (i = 0; pagedictkeys[i] != NULL; i++) { +- pageDict->lookupNF(pagedictkeys[i], &obj1); ++ obj1 = pageDict->lookupNF(pagedictkeys[i]); + if (!obj1.isNull()) { + pdf_add_name(pdf, pagedictkeys[i]); + /* preserves indirection */ + copyObject(pdf, pdf_doc, &obj1); + } +- obj1.free(); + } + /* + If there are no Resources in the Page dict of the embedded page, +@@ -808,32 +802,28 @@ + PDF file, climbing up the tree until the Resources are found. + (This fixes a problem with Scribus 1.3.3.14.) + */ +- pageDict->lookupNF("Resources", &obj1); ++ obj1 = pageDict->lookupNF("Resources"); + if (obj1.isNull()) { + op1 = &pagesobj1; + op2 = &pagesobj2; +- pageDict->lookup("Parent", op1); ++ *op1 = pageDict->lookup("Parent"); + while (op1->isDict()) { +- obj1.free(); +- op1->dictLookupNF("Resources", &obj1); ++ obj1 = op1->dictLookupNF("Resources"); + if (!obj1.isNull()) { + pdf_add_name(pdf, "Resources"); + copyObject(pdf, pdf_doc, &obj1); + break; + } +- op1->dictLookup("Parent", op2); ++ *op2 = op1->dictLookup("Parent"); + optmp = op1; + op1 = op2; + op2 = optmp; +- op2->free(); + }; + if (!op1->isDict()) + formatted_warning("pdf inclusion","Page /Resources missing"); +- op1->free(); + } +- obj1.free(); + /* Write the Page contents. */ +- page->getContents(&contents); ++ contents = page->getContents(); + if (contents.isStream()) { + /* + Variant A: get stream and recompress under control of \pdfcompresslevel +@@ -844,27 +834,23 @@ + + Variant B: copy stream without recompressing + */ +- contents.streamGetDict()->lookup("F", &obj1); ++ obj1 = contents.streamGetDict()->lookup("F"); + if (!obj1.isNull()) { + normal_error("pdf inclusion","unsupported external stream"); + } +- obj1.free(); +- contents.streamGetDict()->lookup("Length", &obj1); ++ obj1 = contents.streamGetDict()->lookup("Length"); + pdf_add_name(pdf, "Length"); + copyObject(pdf, pdf_doc, &obj1); +- obj1.free(); +- contents.streamGetDict()->lookup("Filter", &obj1); ++ obj1 = contents.streamGetDict()->lookup("Filter"); + if (!obj1.isNull()) { + pdf_add_name(pdf, "Filter"); + copyObject(pdf, pdf_doc, &obj1); +- obj1.free(); +- contents.streamGetDict()->lookup("DecodeParms", &obj1); ++ obj1 = contents.streamGetDict()->lookup("DecodeParms"); + if (!obj1.isNull()) { + pdf_add_name(pdf, "DecodeParms"); + copyObject(pdf, pdf_doc, &obj1); + } + } +- obj1.free(); + pdf_end_dict(pdf); + pdf_begin_stream(pdf); + copyStreamStream(pdf, contents.getStream()->getUndecodedStream()); +@@ -875,8 +861,8 @@ + pdf_end_dict(pdf); + pdf_begin_stream(pdf); + for (i = 0, l = contents.arrayGetLength(); i < l; ++i) { +- copyStreamStream(pdf, (contents.arrayGet(i, &obj1))->getStream()); +- obj1.free(); ++ obj1 = contents.arrayGet(i); ++ copyStreamStream(pdf, obj1.getStream()); + if (i < (l - 1)) { + /* + Put a space between streams to be on the safe side (streams +@@ -897,8 +883,6 @@ + } + /* write out all indirect objects */ + writeRefs(pdf, pdf_doc); +- contents.free(); +- pageobj.free(); + /* + unrefPdfDocument() must come after contents.free() and pageobj.free()! + TH: The next line makes repeated pdf inclusion unacceptably slow +diff -ur source.orig/texk/web2c/luatexdir/lua/lepdflib.cc source/texk/web2c/luatexdir/lua/lepdflib.cc +--- source.orig/texk/web2c/luatexdir/lua/lepdflib.cc 2017-05-08 22:39:36.689375107 +0200 ++++ source/texk/web2c/luatexdir/lua/lepdflib.cc 2017-09-19 09:48:19.658021769 +0200 +@@ -538,7 +538,7 @@ + pdfdoc_changed_error(L); \ + uout = new_Object_userdata(L); \ + uout->d = new Object(); \ +- ((in *) uin->d)->function((Object *) uout->d); \ ++ *((Object *)uout->d) = ((in *) uin->d)->function(); \ + uout->atype = ALLOC_LEPDF; \ + uout->pc = uin->pc; \ + uout->pd = uin->pd; \ +@@ -668,13 +668,11 @@ + + static int m_Array_incRef(lua_State * L) + { +- int i; + udstruct *uin; + uin = (udstruct *) luaL_checkudata(L, 1, M_Array); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- i = ((Array *) uin->d)->incRef(); +- lua_pushinteger(L, i); ++ lua_pushinteger(L, 1); + return 1; + } + +@@ -685,8 +683,7 @@ + uin = (udstruct *) luaL_checkudata(L, 1, M_Array); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- i = ((Array *) uin->d)->decRef(); +- lua_pushinteger(L, i); ++ lua_pushinteger(L, 1); + return 1; + } + +@@ -702,7 +699,7 @@ + if ((uin->pd != NULL && uin->pd->pc != uin->pc) + || (uobj->pd != NULL && uobj->pd->pc != uobj->pc)) + pdfdoc_changed_error(L); +- ((Array *) uin->d)->add(((Object *) uobj->d)); ++ ((Array *) uin->d)->add(std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -718,7 +715,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Array *) uin->d)->get(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Array *) uin->d)->get(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -739,7 +736,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Array *) uin->d)->getNF(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Array *) uin->d)->getNF(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -953,25 +950,21 @@ + + static int m_Dict_incRef(lua_State * L) + { +- int i; + udstruct *uin; + uin = (udstruct *) luaL_checkudata(L, 1, M_Dict); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- i = ((Dict *) uin->d)->incRef(); +- lua_pushinteger(L, i); ++ lua_pushinteger(L, 1); + return 1; + } + + static int m_Dict_decRef(lua_State * L) + { +- int i; + udstruct *uin; + uin = (udstruct *) luaL_checkudata(L, 1, M_Dict); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- i = ((Dict *) uin->d)->decRef(); +- lua_pushinteger(L, i); ++ lua_pushinteger(L, 1); + return 1; + } + +@@ -986,7 +979,7 @@ + pdfdoc_changed_error(L); + s = copyString(luaL_checkstring(L, 2)); + uobj = (udstruct *) luaL_checkudata(L, 3, M_Object); +- ((Dict *) uin->d)->add(s, ((Object *) uobj->d)); ++ ((Dict *) uin->d)->add(s, std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -999,7 +992,7 @@ + pdfdoc_changed_error(L); + s = luaL_checkstring(L, 2); + uobj = (udstruct *) luaL_checkudata(L, 3, M_Object); +- ((Dict *) uin->d)->set(s, ((Object *) uobj->d)); ++ ((Dict *) uin->d)->set(s, std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -1027,7 +1020,7 @@ + s = luaL_checkstring(L, 2); + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Dict *) uin->d)->lookup(s, (Object *) uout->d); ++ *((Object *) uout->d) = ((Dict *) uin->d)->lookup(s); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1044,7 +1037,7 @@ + s = luaL_checkstring(L, 2); + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Dict *) uin->d)->lookupNF(s, (Object *) uout->d); ++ *((Object *) uout->d) = ((Dict *) uin->d)->lookupNF(s); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1096,7 +1089,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Dict *) uin->d)->getVal(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Dict *) uin->d)->getVal(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1117,7 +1110,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Dict *) uin->d)->getValNF(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Dict *) uin->d)->getValNF(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1381,9 +1374,9 @@ + pdfdoc_changed_error(L); + luaL_checktype(L, 2, LUA_TBOOLEAN); + if (lua_toboolean(L, 2) != 0) +- ((Object *) uin->d)->initBool(gTrue); ++ *((Object *) uin->d) = Object(gTrue); + else +- ((Object *) uin->d)->initBool(gFalse); ++ *((Object *) uin->d) = Object(gFalse); + return 0; + } + +@@ -1395,7 +1388,7 @@ + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); + i = luaL_checkint(L, 2); +- ((Object *) uin->d)->initInt(i); ++ *((Object *) uin->d) = Object(i); + return 0; + } + +@@ -1407,7 +1400,7 @@ + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); + d = luaL_checknumber(L, 2); +- ((Object *) uin->d)->initReal(d); ++ *((Object *) uin->d) = Object(d); + return 0; + } + +@@ -1422,7 +1415,7 @@ + pdfdoc_changed_error(L); + s = luaL_checklstring(L, 2, &len); + gs = new GooString(s, len); +- ((Object *) uin->d)->initString(gs); ++ *((Object *) uin->d) = Object(gs); + return 0; + } + +@@ -1434,7 +1427,7 @@ + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); + s = luaL_checkstring(L, 2); +- ((Object *) uin->d)->initName(s); ++ *((Object *) uin->d) = Object(objName, s); + return 0; + } + +@@ -1444,13 +1437,14 @@ + uin = (udstruct *) luaL_checkudata(L, 1, M_Object); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initNull(); ++ *((Object *) uin->d) = Object(objNull); + return 0; + } + + static int m_Object_initArray(lua_State * L) + { + udstruct *uin, *uxref; ++ Array *a; + uin = (udstruct *) luaL_checkudata(L, 1, M_Object); + uxref = (udstruct *) luaL_checkudata(L, 2, M_XRef); + if (uin->pd != NULL && uxref->pd != NULL && uin->pd != uxref->pd) +@@ -1458,7 +1452,8 @@ + if ((uin->pd != NULL && uin->pd->pc != uin->pc) + || (uxref->pd != NULL && uxref->pd->pc != uxref->pc)) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initArray((XRef *) uxref->d); ++ a = new Array((XRef *) uxref->d); ++ *((Object *) uin->d) = Object(a); + return 0; + } + +@@ -1469,6 +1464,7 @@ + static int m_Object_initDict(lua_State * L) + { + udstruct *uin, *uxref; ++ Dict *d; + uin = (udstruct *) luaL_checkudata(L, 1, M_Object); + uxref = (udstruct *) luaL_checkudata(L, 2, M_XRef); + if (uin->pd != NULL && uxref->pd != NULL && uin->pd != uxref->pd) +@@ -1476,7 +1472,8 @@ + if ((uin->pd != NULL && uin->pd->pc != uin->pc) + || (uxref->pd != NULL && uxref->pd->pc != uxref->pc)) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initDict((XRef *) uxref->d); ++ d = new Dict((XRef *) uxref->d); ++ *((Object *) uin->d) = Object(d); + return 0; + } + +@@ -1490,7 +1487,7 @@ + if ((uin->pd != NULL && uin->pd->pc != uin->pc) + || (ustream->pd != NULL && ustream->pd->pc != ustream->pc)) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initStream((Stream *) ustream->d); ++ *((Object *) uin->d) = Object((Stream *) ustream->d); + return 0; + } + +@@ -1503,7 +1500,7 @@ + pdfdoc_changed_error(L); + num = luaL_checkint(L, 2); + gen = luaL_checkint(L, 3); +- ((Object *) uin->d)->initRef(num, gen); ++ *((Object *) uin->d) = Object(num, gen); + return 0; + } + +@@ -1515,7 +1512,7 @@ + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); + s = luaL_checkstring(L, 2); +- ((Object *) uin->d)->initCmd(CHARP_CAST s); ++ *((Object *) uin->d) = Object(objCmd, CHARP_CAST s); + return 0; + } + +@@ -1525,7 +1522,7 @@ + uin = (udstruct *) luaL_checkudata(L, 1, M_Object); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initError(); ++ *((Object *) uin->d) = Object(objError); + return 0; + } + +@@ -1535,7 +1532,7 @@ + uin = (udstruct *) luaL_checkudata(L, 1, M_Object); + if (uin->pd != NULL && uin->pd->pc != uin->pc) + pdfdoc_changed_error(L); +- ((Object *) uin->d)->initEOF(); ++ *((Object *) uin->d) = Object(objEOF); + return 0; + } + +@@ -1551,7 +1548,7 @@ + pdfdoc_changed_error(L); + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->fetch((XRef *) uxref->d, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->fetch((XRef *) uxref->d); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1816,7 +1813,7 @@ + pdfdoc_changed_error(L); + if (!((Object *) uin->d)->isArray()) + luaL_error(L, "Object is not an Array"); +- ((Object *) uin->d)->arrayAdd((Object *) uobj->d); ++ ((Object *) uin->d)->arrayAdd(std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -1833,7 +1830,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->arrayGet(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->arrayGet(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1857,7 +1854,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->arrayGetNF(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->arrayGetNF(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1897,7 +1894,7 @@ + pdfdoc_changed_error(L); + if (!((Object *) uin->d)->isDict()) + luaL_error(L, "Object is not a Dict"); +- ((Object *) uin->d)->dictAdd(copyString(s), (Object *) uobj->d); ++ ((Object *) uin->d)->dictAdd(copyString(s), std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -1915,7 +1912,7 @@ + pdfdoc_changed_error(L); + if (!((Object *) uin->d)->isDict()) + luaL_error(L, "Object is not a Dict"); +- ((Object *) uin->d)->dictSet(s, (Object *) uobj->d); ++ ((Object *) uin->d)->dictSet(s, std::move(*((Object *) uobj->d))); + return 0; + } + +@@ -1930,7 +1927,7 @@ + if (((Object *) uin->d)->isDict()) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->dictLookup(s, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictLookup(s); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1950,7 +1947,7 @@ + if (((Object *) uin->d)->isDict()) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->dictLookupNF(s, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictLookupNF(s); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -1991,7 +1988,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->dictGetVal(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictGetVal(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2015,7 +2012,7 @@ + if (i > 0 && i <= len) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((Object *) uin->d)->dictGetValNF(i - 1, (Object *) uout->d); ++ *((Object *) uout->d) = ((Object *) uin->d)->dictGetValNF(i - 1); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2243,7 +2240,7 @@ + m_poppler_get_poppler(Page, Dict, getPieceInfo); + m_poppler_get_poppler(Page, Dict, getSeparationInfo); + m_poppler_get_poppler(Page, Dict, getResourceDict); +-m_poppler_get_OBJECT(Page, getAnnots); ++m_poppler_get_OBJECT(Page, getAnnotsObject); + + m_poppler_get_OBJECT(Page, getContents); + +@@ -2270,7 +2267,7 @@ + {"getPieceInfo", m_Page_getPieceInfo}, + {"getSeparationInfo", m_Page_getSeparationInfo}, + {"getResourceDict", m_Page_getResourceDict}, +- {"getAnnots", m_Page_getAnnots}, ++ {"getAnnots", m_Page_getAnnotsObject}, + {"getContents", m_Page_getContents}, + {"__tostring", m_Page__tostring}, + {NULL, NULL} // sentinel +@@ -2520,7 +2517,7 @@ + if (((PdfDocument *) uin->d)->doc->getXRef()->isOk()) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((PdfDocument *) uin->d)->doc->getDocInfo((Object *) uout->d); ++ *((Object *) uout->d) = ((PdfDocument *) uin->d)->doc->getDocInfo(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2538,7 +2535,7 @@ + if (((PdfDocument *) uin->d)->doc->getXRef()->isOk()) { + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((PdfDocument *) uin->d)->doc->getDocInfoNF((Object *) uout->d); ++ *((Object *) uout->d) = ((PdfDocument *) uin->d)->doc->getDocInfoNF(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -2841,7 +2838,7 @@ + uout = new_Object_userdata(L); + uout->d = new Object(); + origin = (Object *) (((Attribute *) uin->d)->getValue()); +- origin->copy ( ((Object *)uout->d) ); ++ *((Object *) uout->d) = origin->copy(); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -3320,7 +3317,7 @@ + parent = root->findParentElement(i-1); + if (parent != NULL) { + uout = new_StructElement_userdata(L); +- uout->d = new StructElement( *parent ); ++ uout->d = (StructElement *) parent; + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +@@ -3370,7 +3367,7 @@ + gen = luaL_checkint(L, 3); + uout = new_Object_userdata(L); + uout->d = new Object(); +- ((XRef *) uin->d)->fetch(num, gen, (Object *) uout->d); ++ *((Object *) uout->d) = ((XRef *) uin->d)->fetch(num, gen); + uout->atype = ALLOC_LEPDF; + uout->pc = uin->pc; + uout->pd = uin->pd; +diff -ur source.orig/texk/web2c/luatexdir/lua/lpdfscannerlib.cc source/texk/web2c/luatexdir/lua/lpdfscannerlib.cc +--- source.orig/texk/web2c/luatexdir/lua/lpdfscannerlib.cc 2017-05-08 22:39:36.692708395 +0200 ++++ source/texk/web2c/luatexdir/lua/lpdfscannerlib.cc 2017-09-19 09:48:19.658021769 +0200 +@@ -634,7 +634,7 @@ + int i; + for (i=0;i<count;i++) { + Object *val = new Object(); +- arrayref->get(i, val); ++ *val = arrayref->get(i); + if (val->isStream()) { + ObjectList *rover = self->_streams; + ObjectList *item = (ObjectList *)priv_xmalloc (sizeof(ObjectList)); +diff -ur source.orig/texk/web2c/pdftexdir/pdftoepdf.cc source/texk/web2c/pdftexdir/pdftoepdf.cc +--- source.orig/texk/web2c/pdftexdir/pdftoepdf.cc 2017-06-16 21:49:09.293857387 +0200 ++++ source/texk/web2c/pdftexdir/pdftoepdf.cc 2017-09-19 09:48:19.661355046 +0200 +@@ -84,31 +84,6 @@ + #define MASK_SUPPRESS_PTEX_PAGENUMBER 0x04 + #define MASK_SUPPRESS_PTEX_INFODICT 0x08 + +-// PdfObject encapsulates the xpdf Object type, +-// and properly frees its resources on destruction. +-// Use obj-> to access members of the Object, +-// and &obj to get a pointer to the object. +-// It is no longer necessary to call Object::free explicitely. +- +-class PdfObject { +- public: +- PdfObject() { // nothing +- } ~PdfObject() { +- iObject.free(); +- } +- Object *operator->() { +- return &iObject; +- } +- Object *operator&() { +- return &iObject; +- } +- private: // no copying or assigning +- PdfObject(const PdfObject &); +- void operator=(const PdfObject &); +- public: +- Object iObject; +-}; +- + // When copying the Resources of the selected page, all objects are copied + // recusively top-down. Indirect objects however are not fetched during + // copying, but get a new object number from pdfTeX and then will be +@@ -212,18 +187,6 @@ + delete pdf_doc; + } + +-// Replacement for +-// Object *initDict(Dict *dict1){ initObj(objDict); dict = dict1; return this; } +- +-static void initDictFromDict(PdfObject & obj, Dict * dict) +-{ +- obj->initDict(xref); +- for (int i = 0, l = dict->getLength(); i < l; i++) { +- Object obj1; +- obj->dictAdd(copyString(dict->getKey(i)), dict->getValNF(i, &obj1)); +- } +-} +- + // -------------------------------------------------------------------- + + static int addEncoding(GfxFont * gfont) +@@ -320,10 +283,10 @@ + + static void copyDictEntry(Object * obj, int i) + { +- PdfObject obj1; ++ Object obj1; + copyName(obj->dictGetKey(i)); + pdf_puts(" "); +- obj->dictGetValNF(i, &obj1); ++ obj1 = obj->dictGetValNF(i); + copyObject(&obj1); + pdf_puts("\n"); + } +@@ -376,17 +339,17 @@ + static void copyProcSet(Object * obj) + { + int i, l; +- PdfObject procset; ++ Object procset; + if (!obj->isArray()) + pdftex_fail("PDF inclusion: invalid ProcSet array type <%s>", + obj->getTypeName()); + pdf_puts("/ProcSet [ "); + for (i = 0, l = obj->arrayGetLength(); i < l; ++i) { +- obj->arrayGetNF(i, &procset); +- if (!procset->isName()) ++ procset = obj->arrayGetNF(i); ++ if (!procset.isName()) + pdftex_fail("PDF inclusion: invalid ProcSet entry type <%s>", +- procset->getTypeName()); +- copyName(procset->getName()); ++ procset.getTypeName()); ++ copyName(procset.getName()); + pdf_puts(" "); + } + pdf_puts("]\n"); +@@ -394,10 +357,29 @@ + + #define REPLACE_TYPE1C true + ++static bool embeddableFont(Object * fontdesc) ++{ ++ Object fontfile, ffsubtype; ++ ++ if (!fontdesc->isDict()) ++ return false; ++ fontfile = fontdesc->dictLookup("FontFile"); ++ if (fontfile.isStream()) ++ return true; ++ if (REPLACE_TYPE1C) { ++ fontfile = fontdesc->dictLookup("FontFile3"); ++ if (!fontfile.isStream()) ++ return false; ++ ffsubtype = fontfile.streamGetDict()->lookup("Subtype"); ++ return ffsubtype.isName() && !strcmp(ffsubtype.getName(), "Type1C"); ++ } ++ return false; ++} ++ + static void copyFont(char *tag, Object * fontRef) + { +- PdfObject fontdict, subtype, basefont, fontdescRef, fontdesc, charset, +- fontfile, ffsubtype, stemV; ++ Object fontdict, subtype, basefont, fontdescRef, fontdesc, charset, ++ stemV; + GfxFont *gfont; + fd_entry *fd; + fm_entry *fontmap; +@@ -413,33 +395,39 @@ + } + // Only handle included Type1 (and Type1C) fonts; anything else will be copied. + // Type1C fonts are replaced by Type1 fonts, if REPLACE_TYPE1C is true. +- if (!fixedinclusioncopyfont && fontRef->fetch(xref, &fontdict)->isDict() +- && fontdict->dictLookup("Subtype", &subtype)->isName() +- && !strcmp(subtype->getName(), "Type1") +- && fontdict->dictLookup("BaseFont", &basefont)->isName() +- && fontdict->dictLookupNF("FontDescriptor", &fontdescRef)->isRef() +- && fontdescRef->fetch(xref, &fontdesc)->isDict() +- && (fontdesc->dictLookup("FontFile", &fontfile)->isStream() +- || (REPLACE_TYPE1C +- && fontdesc->dictLookup("FontFile3", &fontfile)->isStream() +- && fontfile->streamGetDict()->lookup("Subtype", +- &ffsubtype)->isName() +- && !strcmp(ffsubtype->getName(), "Type1C"))) +- && (fontmap = lookup_fontmap(basefont->getName())) != NULL) { ++ fontdict = fontRef->fetch(xref); ++ fontdesc = Object(objNull); ++ if (fontdict.isDict()) { ++ subtype = fontdict.dictLookup("Subtype"); ++ basefont = fontdict.dictLookup("BaseFont"); ++ fontdescRef = fontdict.dictLookupNF("FontDescriptor"); ++ if (fontdescRef.isRef()) { ++ fontdesc = fontdescRef.fetch(xref); ++ } ++ } ++ if (!fixedinclusioncopyfont && fontdict.isDict() ++ && subtype.isName() ++ && !strcmp(subtype.getName(), "Type1") ++ && basefont.isName() ++ && fontdescRef.isRef() ++ && fontdesc.isDict() ++ && embeddableFont(&fontdesc) ++ && (fontmap = lookup_fontmap(basefont.getName())) != NULL) { + // round /StemV value, since the PDF input is a float + // (see Font Descriptors in PDF reference), but we only store an + // integer, since we don't want to change the struct. +- fontdesc->dictLookup("StemV", &stemV); +- fd = epdf_create_fontdescriptor(fontmap, zround(stemV->getNum())); +- if (fontdesc->dictLookup("CharSet", &charset) && +- charset->isString() && is_subsetable(fontmap)) +- epdf_mark_glyphs(fd, charset->getString()->getCString()); ++ stemV = fontdesc.dictLookup("StemV"); ++ fd = epdf_create_fontdescriptor(fontmap, zround(stemV.getNum())); ++ charset = fontdesc.dictLookup("CharSet"); ++ if (!charset.isNull() && ++ charset.isString() && is_subsetable(fontmap)) ++ epdf_mark_glyphs(fd, charset.getString()->getCString()); + else + embed_whole_font(fd); +- addFontDesc(fontdescRef->getRef(), fd); ++ addFontDesc(fontdescRef.getRef(), fd); + copyName(tag); + gfont = GfxFont::makeFont(xref, tag, fontRef->getRef(), +- fontdict->getDict()); ++ fontdict.getDict()); + pdf_printf(" %d 0 R ", addFont(fontRef->getRef(), fd, + addEncoding(gfont))); + } else { +@@ -451,24 +439,24 @@ + + static void copyFontResources(Object * obj) + { +- PdfObject fontRef; ++ Object fontRef; + int i, l; + if (!obj->isDict()) + pdftex_fail("PDF inclusion: invalid font resources dict type <%s>", + obj->getTypeName()); + pdf_puts("/Font << "); + for (i = 0, l = obj->dictGetLength(); i < l; ++i) { +- obj->dictGetValNF(i, &fontRef); +- if (fontRef->isRef()) ++ fontRef = obj->dictGetValNF(i); ++ if (fontRef.isRef()) + copyFont(obj->dictGetKey(i), &fontRef); +- else if (fontRef->isDict()) { // some programs generate pdf with embedded font object ++ else if (fontRef.isDict()) { // some programs generate pdf with embedded font object + copyName(obj->dictGetKey(i)); + pdf_puts(" "); + copyObject(&fontRef); + } + else + pdftex_fail("PDF inclusion: invalid font in reference type <%s>", +- fontRef->getTypeName()); ++ fontRef.getTypeName()); + } + pdf_puts(">>\n"); + } +@@ -557,7 +545,7 @@ + + static void copyObject(Object * obj) + { +- PdfObject obj1; ++ Object obj1; + int i, l, c; + Ref ref; + char *p; +@@ -601,8 +589,8 @@ + } else if (obj->isArray()) { + pdf_puts("["); + for (i = 0, l = obj->arrayGetLength(); i < l; ++i) { +- obj->arrayGetNF(i, &obj1); +- if (!obj1->isName()) ++ obj1 = obj->arrayGetNF(i); ++ if (!obj1.isName()) + pdf_puts(" "); + copyObject(&obj1); + } +@@ -612,9 +600,8 @@ + copyDict(obj); + pdf_puts(">>"); + } else if (obj->isStream()) { +- initDictFromDict(obj1, obj->streamGetDict()); + pdf_puts("<<\n"); +- copyDict(&obj1); ++ copyDict(obj->getStream()->getDictObject()); + pdf_puts(">>\n"); + pdf_puts("stream\n"); + copyStream(obj->getStream()->getUndecodedStream()); +@@ -638,9 +625,8 @@ + InObj *r; + for (r = inObjList; r != 0; r = r->next) { + if (!r->written) { +- Object obj1; + r->written = 1; +- xref->fetch(r->ref.num, r->ref.gen, &obj1); ++ Object obj1 = xref->fetch(r->ref.num, r->ref.gen); + if (r->type == objFont) { + assert(!obj1.isStream()); + pdfbeginobj(r->num, 2); // \pdfobjcompresslevel = 2 is for this +@@ -656,7 +642,6 @@ + pdf_puts("\n"); + pdfendobj(); + } +- obj1.free(); + } + } + } +@@ -839,8 +824,8 @@ + Page *page; + Ref *pageRef; + Dict *pageDict; +- PdfObject contents, obj1, obj2, pageObj, dictObj; +- PdfObject groupDict; ++ Object contents, obj1, obj2, pageObj, dictObj; ++ Object groupDict; + bool writeSepGroup = false; + Object info; + char *key; +@@ -867,8 +852,8 @@ + encodingList = 0; + page = pdf_doc->doc->getCatalog()->getPage(epdf_selected_page); + pageRef = pdf_doc->doc->getCatalog()->getPageRef(epdf_selected_page); +- xref->fetch(pageRef->num, pageRef->gen, &pageObj); +- pageDict = pageObj->getDict(); ++ pageObj = xref->fetch(pageRef->num, pageRef->gen); ++ pageDict = pageObj.getDict(); + rotate = page->getRotate(); + PDFRectangle *pagebox; + // write the Page header +@@ -886,7 +871,7 @@ + pdf_printf("/%s.PageNumber %i\n", pdfkeyprefix, (int) epdf_selected_page); + } + if ((suppress_ptex_info & MASK_SUPPRESS_PTEX_INFODICT) == 0) { +- pdf_doc->doc->getDocInfoNF(&info); ++ info = pdf_doc->doc->getDocInfoNF(); + if (info.isRef()) { + // the info dict must be indirect (PDF Ref p. 61) + pdf_printf("/%s.InfoDict ", pdfkeyprefix); +@@ -942,14 +927,14 @@ + pdf_puts(stripzeros(s)); + + // Metadata validity check (as a stream it must be indirect) +- pageDict->lookupNF("Metadata", &dictObj); +- if (!dictObj->isNull() && !dictObj->isRef()) ++ dictObj = pageDict->lookupNF("Metadata"); ++ if (!dictObj.isNull() && !dictObj.isRef()) + pdftex_warn("PDF inclusion: /Metadata must be indirect object"); + + // copy selected items in Page dictionary except Resources & Group + for (i = 0; pageDictKeys[i] != NULL; i++) { +- pageDict->lookupNF(pageDictKeys[i], &dictObj); +- if (!dictObj->isNull()) { ++ dictObj = pageDict->lookupNF(pageDictKeys[i]); ++ if (!dictObj.isNull()) { + pdf_newline(); + pdf_printf("/%s ", pageDictKeys[i]); + copyObject(&dictObj); // preserves indirection +@@ -957,8 +942,8 @@ + } + + // handle page group +- pageDict->lookupNF("Group", &dictObj); +- if (!dictObj->isNull()) { ++ dictObj = pageDict->lookupNF("Group"); ++ if (!dictObj.isNull()) { + if (pdfpagegroupval == 0) { + // another pdf with page group was included earlier on the + // same page; copy the Group entry as is. See manual for +@@ -972,11 +957,11 @@ + copyObject(&dictObj); + } else { + // write Group dict as a separate object, since the Page dict also refers to it +- pageDict->lookup("Group", &dictObj); +- if (!dictObj->isDict()) ++ dictObj = pageDict->lookup("Group"); ++ if (!dictObj.isDict()) + pdftex_fail("PDF inclusion: /Group dict missing"); + writeSepGroup = true; +- initDictFromDict(groupDict, page->getGroup()); ++ groupDict = Object(page->getGroup()); + pdf_printf("/Group %ld 0 R\n", (long)pdfpagegroupval); + } + } +@@ -989,14 +974,14 @@ + pdftex_warn + ("PDF inclusion: /Resources missing. 'This practice is not recommended' (PDF Ref)"); + } else { +- initDictFromDict(obj1, page->getResourceDict()); ++ Object *obj1 = page->getResourceDictObject(); + if (!obj1->isDict()) + pdftex_fail("PDF inclusion: invalid resources dict type <%s>", + obj1->getTypeName()); + pdf_newline(); + pdf_puts("/Resources <<\n"); + for (i = 0, l = obj1->dictGetLength(); i < l; ++i) { +- obj1->dictGetVal(i, &obj2); ++ obj2 = obj1->dictGetVal(i); + key = obj1->dictGetKey(i); + if (strcmp("Font", key) == 0) + copyFontResources(&obj2); +@@ -1009,8 +994,8 @@ + } + + // write the page contents +- page->getContents(&contents); +- if (contents->isStream()) { ++ contents = page->getContents(); ++ if (contents.isStream()) { + + // Variant A: get stream and recompress under control + // of \pdfcompresslevel +@@ -1021,36 +1006,35 @@ + + // Variant B: copy stream without recompressing + // +- contents->streamGetDict()->lookup("F", &obj1); +- if (!obj1->isNull()) { ++ obj1 = contents.streamGetDict()->lookup("F"); ++ if (!obj1.isNull()) { + pdftex_fail("PDF inclusion: Unsupported external stream"); + } +- contents->streamGetDict()->lookup("Length", &obj1); +- assert(!obj1->isNull()); ++ obj1 = contents.streamGetDict()->lookup("Length"); ++ assert(!obj1.isNull()); + pdf_puts("/Length "); + copyObject(&obj1); + pdf_puts("\n"); +- contents->streamGetDict()->lookup("Filter", &obj1); +- if (!obj1->isNull()) { ++ obj1 = contents.streamGetDict()->lookup("Filter"); ++ if (!obj1.isNull()) { + pdf_puts("/Filter "); + copyObject(&obj1); + pdf_puts("\n"); +- contents->streamGetDict()->lookup("DecodeParms", &obj1); +- if (!obj1->isNull()) { ++ obj1 = contents.streamGetDict()->lookup("DecodeParms"); ++ if (!obj1.isNull()) { + pdf_puts("/DecodeParms "); + copyObject(&obj1); + pdf_puts("\n"); + } + } + pdf_puts(">>\nstream\n"); +- copyStream(contents->getStream()->getUndecodedStream()); ++ copyStream(contents.getStream()->getUndecodedStream()); + pdfendstream(); +- } else if (contents->isArray()) { ++ } else if (contents.isArray()) { + pdfbeginstream(); +- for (i = 0, l = contents->arrayGetLength(); i < l; ++i) { +- Object contentsobj; +- copyStream((contents->arrayGet(i, &contentsobj))->getStream()); +- contentsobj.free(); ++ for (i = 0, l = contents.arrayGetLength(); i < l; ++i) { ++ Object contentsobj = contents.arrayGet(i); ++ copyStream(contentsobj.getStream()); + if (i < l - 1) + pdf_newline(); // add a newline after each stream except the last + } +diff -ur source.orig/texk/web2c/pdftexdir/pdftosrc.cc source/texk/web2c/pdftexdir/pdftosrc.cc +--- source.orig/texk/web2c/pdftexdir/pdftosrc.cc 2017-06-16 21:49:09.297190679 +0200 ++++ source/texk/web2c/pdftexdir/pdftosrc.cc 2017-09-19 09:48:19.661355046 +0200 +@@ -86,22 +86,20 @@ + objgen = atoi(argv[3]); + } + xref = doc->getXRef(); +- catalogDict.initNull(); +- xref->getCatalog(&catalogDict); ++ catalogDict = xref->getCatalog(); + if (!catalogDict.isDict("Catalog")) { + fprintf(stderr, "No Catalog found\n"); + exit(1); + } +- srcStream.initNull(); ++ srcStream = Object(objNull); + if (objnum == 0) { +- catalogDict.dictLookup("SourceObject", &srcStream); ++ srcStream = catalogDict.dictLookup("SourceObject"); + static char const_SourceFile[] = "SourceFile"; + if (!srcStream.isStream(const_SourceFile)) { + fprintf(stderr, "No SourceObject found\n"); + exit(1); + } +- srcName.initNull(); +- srcStream.getStream()->getDict()->lookup("SourceName", &srcName); ++ srcName = srcStream.getStream()->getDict()->lookup("SourceName"); + if (!srcName.isString()) { + fprintf(stderr, "No SourceName found\n"); + exit(1); +@@ -110,7 +108,7 @@ + // We cannot free srcName, as objname shares its string. + // srcName.free(); + } else if (objnum > 0) { +- xref->fetch(objnum, objgen, &srcStream); ++ srcStream = xref->fetch(objnum, objgen); + if (!srcStream.isStream()) { + fprintf(stderr, "Not a Stream object\n"); + exit(1); +@@ -159,29 +157,26 @@ + int localOffset = 0; + Guint firstOffset; + +- assert(xref->fetch(e->offset, 0, &objStr)->isStream()); +- nObjects = objStr.streamGetDict()->lookup("N", &obj1)->getInt(); +- obj1.free(); +- first = objStr.streamGetDict()->lookup("First", &obj1)->getInt(); +- obj1.free(); ++ objStr = xref->fetch(e->offset, 0); ++ assert(objStr.isStream()); ++ obj1 = objStr.streamGetDict()->lookup("N"); ++ nObjects = obj1.getInt(); ++ obj1 = objStr.streamGetDict()->lookup("First"); ++ first = obj1.getInt(); + firstOffset = objStr.getStream()->getBaseStream()->getStart() + first; + + // parse the header: object numbers and offsets + objStr.streamReset(); +- obj1.initNull(); +- str = new EmbedStream(objStr.getStream(), &obj1, gTrue, first); ++ str = new EmbedStream(objStr.getStream(), Object(objNull), gTrue, first); + parser = new Parser(xref, new Lexer(xref, str), gFalse); + for (n = 0; n < nObjects; ++n) { +- parser->getObj(&obj1); +- parser->getObj(&obj2); ++ obj1 = parser->getObj(); ++ obj2 = parser->getObj(); + if (n == e->gen) + localOffset = obj2.getInt(); +- obj1.free(); +- obj2.free(); + } + while (str->getChar() != EOF) ; + delete parser; +- objStr.free(); + + fprintf(outfile, "%.10lu 00000 n\n", + (long unsigned)(firstOffset + localOffset)); +@@ -192,7 +187,6 @@ + s->reset(); + while ((c = s->getChar()) != EOF) + fputc(c, outfile); +- srcStream.free(); + } + if (objnum == 0) + fprintf(stderr, "Source file extracted to %s\n", outname); +@@ -201,7 +195,6 @@ + else + fprintf(stderr, "Cross-reference table extracted to %s\n", outname); + fclose(outfile); +- catalogDict.free(); + delete doc; + delete globalParams; + } diff --git a/source/t/texlive/prep/README b/source/t/texlive/prep/README new file mode 100644 index 00000000..479e834d --- /dev/null +++ b/source/t/texlive/prep/README @@ -0,0 +1,2 @@ +The script(s) in this directory are used to create the texmf archives +from the original Texlive netarchives. 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" diff --git a/source/t/texlive/slack-desc b/source/t/texlive/slack-desc new file mode 100644 index 00000000..d004be14 --- /dev/null +++ b/source/t/texlive/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +texlive: texlive (TeX binaries, support files, and formats) +texlive: +texlive: This package contains binaries, support files, TeX formats and +texlive: packages, and other files from the TeXLive TeX distribution. +texlive: Included are input files for TeX, runtime configuration files, +texlive: hyphenation tables, manpages, and the computer modern fonts. +texlive: +texlive: SlackBuilds.org has more texmf files and documentation in the +texlive: texlive-extra, texlive-fonts, and texlive-docs packages. +texlive: +texlive: diff --git a/source/t/texlive/texlive.SlackBuild b/source/t/texlive/texlive.SlackBuild new file mode 100755 index 00000000..f41e9fa6 --- /dev/null +++ b/source/t/texlive/texlive.SlackBuild @@ -0,0 +1,252 @@ +#!/bin/bash + +# TeXLive build script for Slackware + +# Copyright 2009, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2009-2014 Robby Workman, Northport, AL, USA +# Copyright 2016-2017 Johannes Schoepfer, Germany +# 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. + +# URL: ftp://tug.org/historic/systems/texlive/ +# Testrelease: ftp://tug.org/texlive/Images/test/ + +cd $(dirname $0) ; CWD=$(pwd) + +PKGNAM=texlive +SOURCEVERSION=${SOURCEVERSION:-20170520} +VERSION=${VERSION:-2017.171108} +BUILD=${BUILD:-6} + +TMP=${TMP:-/tmp} +PKG=$TMP/package-texlive + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + +NUMJOBS=${NUMJOBS:-" -j7 "} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +# NOTE: Using the system version of poppler will require texlive to be +# recompiled with pretty much every poppler update, as they almost always +# bump the shared library version. But sometimes you do what you have +# to do... +SYSTEMPOPPLER=${SYSTEMPOPPLER:-YES} +if [ "$SYSTEMPOPPLER" = "NO" ]; then + POPPLER="--without-system-poppler --without-system-xpdf" +else + POPPLER="--with-system-poppler --with-system-xpdf" +fi + +rm -rf $PKG +mkdir -p $TMP $PKG +cd $TMP +rm -rf texlive-$SOURCEVERSION-source +tar xvf $CWD/texlive-${SOURCEVERSION}-source.tar.xz || exit 1 +cd texlive-$SOURCEVERSION-source || exit 1 +chown -R root:root . +chmod -R u+w,go-w,a+rX-st . + +export LANG=C +export PATH="$PKG/usr/bin:$PATH" +export LD_LIBRARY_PATH="$PKG/usr/lib${LIBDIRSUFFIX}:$LD_LIBRARY_PATH" + +# set TEXMFROOT and TEXMFLOCAL +sed -i \ + -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \ + -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 + +# Thanks to archlinux for the poppler-0.59 API fixup patch: +if [ ! "$SYSTEMPOPPLER" = "NO" ]; then + patch -Np1 -i $CWD/patches/texlive-poppler-0.59.patch || exit 1 +fi + +# --with-system-harfbuzz requires graphite2 (and harfbuzz linked to it) +mkdir build +cd build + CFLAGS="$SLKCFLAGS" \ + CXXFLAGS="$SLKCFLAGS -fpermissive" \ + ../configure \ + --prefix=/usr \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --with-banner-add=' on Slackware' \ + --disable-native-texlive-build \ + --enable-largefile \ + --enable-shared \ + --disable-static \ + --disable-missing \ + --disable-multiplatform \ + --disable-debug \ + --with-x \ + --enable-xindy \ + --disable-xindy-docs \ + --disable-xindy-rules \ + --with-clisp-runtime=system \ + --enable-gc=system \ + --with-system-zlib \ + --with-system-libpng \ + --with-system-t1lib \ + --with-system-gd \ + --with-system-freetype2 \ + --with-system-libgs \ + --with-system-icu \ + --with-system-pixman \ + --with-system-cairo \ + --with-system-gmp \ + --with-system-mpfr \ + --with-system-fontconfig \ + --with-system-ncurses \ + --without-system-harfbuzz \ + --disable-aleph \ + --disable-dump-share \ + $POPPLER \ + --build=$ARCH-slackware-linux || exit 1 + + make $NUMJOBS || make || exit 1 + # make check || exit 1 + make install-strip DESTDIR=$PKG || exit 1 + + # Don't ship .la files: + rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la + + # Remove all files which are covered by tlnet + rm -rf $PKG/usr/share $PKG/usr/man $PKG/usr/info + + # 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 \ + -e 's|^TEXMFROOT.*|TEXMFROOT = $SELFAUTODIR/share|' \ + -e 's|^TEXMFLOCAL.*|TEXMFLOCAL = $TEXMFROOT/texmf-local|' \ + -e 's|^OSFONTDIR.*|OSFONTDIR = ~/.fonts:/usr/share/fonts|' \ + -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' \ + -e 's|\(TEXMFLOCAL[ ]*=[ ]*\)[^,]*|\1"/usr/share/texmf-local"|' \ + -e 's|texlive20[0-9][0-9]|texlive|g' \ + -e '/selfautodir/d' \ + -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 + +# We won't make tlmgr easily available; it's still there, but +# we'll make it harder to void the warranty :-) +rm -f $PKG/usr/bin/tlmgr +cat $CWD/README.tlpkg > $PKG/usr/doc/texlive-$VERSION/README.tlpkg + +# Create some directories to make it clear that they're owned by this package +mkdir -p $PKG/usr/share/{texmf-config,texmf-var,texmf-local} + +# Add some perl modules, at least one of which is required by updmap +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 + +# Handle the GNU info pages +rm -f $PKG/usr/info/dir +gzip -9 $PKG/usr/info/* + +mkdir -p $PKG/install +zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -p -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz diff --git a/source/t/texlive/texlive.url b/source/t/texlive/texlive.url new file mode 100644 index 00000000..5ff52d66 --- /dev/null +++ b/source/t/texlive/texlive.url @@ -0,0 +1,6 @@ +http://mirrors.ctan.org/systems/texlive/Source/texlive-20170520-source.tar.xz +5456dfd7858fe53cdd0fda5f0eb4fd35 + +http://slackware.schoepfer.info/slackbuilds/texlive/2017/texlive/texlive-base-2017.170622.tar.xz +29bee4e0671431334fc1dcae3e0087c0 + diff --git a/source/t/transfig/slack-desc b/source/t/transfig/slack-desc deleted file mode 100644 index e4ee4e7e..00000000 --- a/source/t/transfig/slack-desc +++ /dev/null @@ -1,19 +0,0 @@ -# HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line -# up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also -# customary to leave one space after the ':'. - - |-----handy-ruler------------------------------------------------------| -transfig: transfig (transform .fig files) -transfig: -transfig: This package contains the binaries to transform .fig files (created by -transfig: xfig) to some other formats like epsf and LaTeX. If you have -transfig: installed xfig, you should also install this package if you want to -transfig: use xfig to create other files than .fig files, which can then be -transfig: included in your LaTeX documents. -transfig: -transfig: -transfig: -transfig: diff --git a/source/t/transfig/transfig.diff b/source/t/transfig/transfig.diff deleted file mode 100644 index 02722cf6..00000000 --- a/source/t/transfig/transfig.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- ./fig2dev/Imakefile.orig 2010-06-02 14:18:16.000000000 -0500 -+++ ./fig2dev/Imakefile 2013-09-18 21:09:04.657010139 -0500 -@@ -34,7 +34,7 @@ - XCOMM You should point XFIGLIBDIR to the same directory you did when you compiled - XCOMM and installed xfig. - --XFIGLIBDIR = /usr/local/lib/X11/xfig -+XFIGLIBDIR = /usr/lib/X11/xfig - - XCOMM ****** - XCOMM If your system doesn't have the strerror() function (has sys_errlist) then -@@ -141,7 +141,7 @@ - - #ifdef I18N - I18N_DEFS = -DI18N --FIG2DEV_LIBDIR = /usr/local/lib/fig2dev -+FIG2DEV_LIBDIR = /usr/lib/X11/fig2dev - I18N_DEV_DEFS = $(I18N_DEFS) -DFIG2DEV_LIBDIR=$(FIG2DEV_LIBDIR) -DFIG2DEV_LIBDIR_STR=\\\"$(FIG2DEV_LIBDIR)\\\" - - #endif /* I18N */ diff --git a/source/t/xfig/slack-desc b/source/t/xfig/slack-desc index 387dd255..06d6e4ef 100644 --- a/source/t/xfig/slack-desc +++ b/source/t/xfig/slack-desc @@ -1,19 +1,19 @@ # HOW TO EDIT THIS FILE: -# The "handy ruler" below makes it easier to edit a package description. Line +# The "handy ruler" below makes it easier to edit a package description. Line # up the first '|' above the ':' following the base package name, and the '|' -# on the right side marks the last column you can put a character in. You must -# make exactly 11 lines for the formatting to be correct. It's also +# on the right side marks the last column you can put a character in. You must +# make exactly 11 lines for the formatting to be correct. It's also # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| xfig: xfig (interactive drawing tool) xfig: xfig: This package contains the binary for xfig, an interactive drawing tool -xfig: under X. Xfig can create fig, epsf, and LaTeX files with various -xfig: options. You will also need the transfig package so that xfig can -xfig: export fig files as epsf and LaTeX files. This package also contains -xfig: a set of basic examples of fig files. -xfig: +xfig: under X. Xfig can create fig, epsf, and LaTeX files with various +xfig: options. You will also need the transfig package so that xfig can +xfig: export fig files as epsf and LaTeX files. This package also contains +xfig: a large set of example fig files. xfig: +xfig: Homepage: https://sourceforge.net/projects/mcj/files/ xfig: xfig: diff --git a/source/t/xfig/xfig-3.2.5c.paths.diff b/source/t/xfig/xfig-3.2.5c.paths.diff deleted file mode 100644 index 7c998c6d..00000000 --- a/source/t/xfig/xfig-3.2.5c.paths.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- ./Imakefile.orig 2012-08-09 12:14:15.000000000 -0500 -+++ ./Imakefile 2013-09-18 17:26:47.819436479 -0500 -@@ -45,7 +45,7 @@ - XCOMM different tree than the "correct" tree that your X system expects. The usual - XCOMM purpose of DESTDIR is to test an install process by installing in a benign area. - --XCOMM XAPPLOADDIR = /home/user/xfig -+XAPPLOADDIR = /etc/X11/app-defaults - - XCOMM Comment out the following definition for XAW3D if you don't to want to use - XCOMM the 3d Athena Widget Set -@@ -174,7 +174,7 @@ - - XCOMM XFIGDOCDIR tells where the html and pdf documentation should go - XCOMM XFIGDOCDIR = $(DOCDIR)/xfig --XFIGDOCDIR = /usr/local/xfig/doc -+XFIGDOCDIR = /usr/doc/xfig-3.2.5c - - XCOMM MANDIR tells where the standard man pages should go (no need to change it - XCOMM if you want the man pages installed in the standard place on your system diff --git a/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff b/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff deleted file mode 100644 index a09cbe43..00000000 --- a/source/t/xfig/xfig-3.2.5c.skip.missing.html.manpage.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- ./Imakefile.orig 2012-08-09 12:14:15.000000000 -0500 -+++ ./Imakefile 2013-09-18 17:20:15.875449009 -0500 -@@ -428,7 +428,6 @@ - echo Copying pdf and html files to $(DESTDIR)$(XFIGDOCDIR) ; \ - if [ -d $(DESTDIR)$(XFIGDOCDIR)/html ]; then set +x; \ - else (set -x; $(MKDIRHIER) $(DESTDIR)$(XFIGDOCDIR)/html ); fi ; \ -- $(INSTALL) -m 644 -c xfig_man.html $(DESTDIR)$(XFIGDOCDIR) ; \ - $(INSTALL) -m 644 -c xfig_ref_en.pdf $(DESTDIR)$(XFIGDOCDIR) ; \ - $(INSTALL) -m 644 -c xfig-howto.pdf $(DESTDIR)$(XFIGDOCDIR) ; \ - if [ -d html ]; then \ diff --git a/source/t/xfig/xfig.SlackBuild b/source/t/xfig/xfig.SlackBuild index 097d4a1d..307fe0d4 100755 --- a/source/t/xfig/xfig.SlackBuild +++ b/source/t/xfig/xfig.SlackBuild @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash -# Copyright 2007, 2008, 2009, 2010, 2013, 2015 Patrick J. Volkerding, Sebeka, MN, USA +# Copyright 2007, 2008, 2009, 2010, 2013, 2015, 2018 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,20 +20,30 @@ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +cd $(dirname $0) ; CWD=$(pwd) -VERSION=3.2.5c -BUILD=${BUILD:-3} +PKGNAM=xfig +VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)} +BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in - i?86) export ARCH=i486 ;; + i?86) export ARCH=i586 ;; arm*) export ARCH=arm ;; # Unless $ARCH is already set, use uname -m for all other archs: *) export ARCH=$( uname -m ) ;; esac fi +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then + echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz" + exit 0 +fi + NUMJOBS=${NUMJOBS:-" -j7 "} if [ "$ARCH" = "x86_64" ]; then @@ -42,7 +52,6 @@ else LIBDIRSUFFIX="" fi -CWD=$(pwd) TMP=${TMP:-/tmp} PKG=$TMP/package-xfig rm -rf $PKG @@ -50,8 +59,8 @@ mkdir -p $PKG $TMP cd $TMP rm -rf xfig.$VERSION -tar xvf $CWD/xfig.$VERSION.full.tar.xz || exit 1 -cd xfig.$VERSION || exit 1 +tar xvf $CWD/xfig-$VERSION.tar.?z || exit 1 +cd xfig-$VERSION || exit 1 chown -R root:root . find . \ @@ -62,40 +71,41 @@ find . \ \( -perm 700 -type f \) \ -exec chmod 644 {} \; -zcat $CWD/xfig-3.2.5c.skip.missing.html.manpage.diff.gz | patch -p1 --verbose || exit 1 -zcat $CWD/xfig-3.2.5c.paths.diff.gz | patch -p1 --verbose || exit 1 # Eliminate menu choice for non-distributed (redundant) PDF documentation: zcat $CWD/xfig.no.pdf.ref.diff.gz | patch -E -p1 --verbose || exit 1 -# Don't install PDF reference manual because the HTML manual is the same thing -# (and also includes a Japanese translation): -zcat $CWD/xfig.no.xfig_ref_en.pdf.diff.gz | patch -E -p1 --verbose || exit 1 +# Use aspell as a spell checker: zcat $CWD/xfig.fig.ad.diff.gz | patch -E -p1 --verbose || exit 1 -xmkmf || exit 1 -make all $NUMJOBS || make || exit 1 +# Configure: +CFLAGS="$SLKCFLAGS" \ +./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --with-appdefaultdir=/etc/X11/app-defaults \ + --docdir=/usr/doc/$PKGNAM-$VERSION \ + --libdir=/usr/lib${LIBDIRSUFFIX} \ + --mandir=/usr/man \ + --build=$ARCH-slackware-linux || exit 1 + +# Build and install: +make $NUMJOBS || make || exit 1 make install DESTDIR=$PKG || exit 1 -make install.man DESTDIR=$PKG || exit 1 -make install.libs DESTDIR=$PKG || exit 1 -make install.html DESTDIR=$PKG || exit 1 + +# Don't install PDF reference manual because the HTML manual is the same thing +# (and also includes a Japanese translation): +rm -f $PKG/usr/doc/$PKGNAM-$VERSION/xfig_ref_en.pdf find $PKG | xargs file | grep -e "executable" -e "shared object" \ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null -# Move man page to the correct place: -if [ -d $PKG/usr/man/man1x ]; then - mv $PKG/usr/man/man1x $PKG/usr/man/man1 - mv $PKG/usr/man/man1/xfig.1x $PKG/usr/man/man1/xfig.1 -fi - +# Compress man page: gzip -9 $PKG/usr/man/man1/* +# Add additional documentation: mkdir -p $PKG/usr/doc/xfig-$VERSION cp -a \ - FIGAPPS LATEX.AND.XFIG README \ + CHANGES FIGAPPS INSTALL README \ $PKG/usr/doc/xfig-$VERSION -( cd $PKG/usr/doc/xfig-$VERSION - ln -sf /usr/lib${LIBDIRSUFFIX}/X11/xfig/Libraries Libraries -) # If there's a CHANGES file, installing at least part of the recent history # is useful, but don't let it get totally out of control: diff --git a/source/t/xfig/xfig.fig.ad.diff b/source/t/xfig/xfig.fig.ad.diff index a6082acc..f4aa2927 100644 --- a/source/t/xfig/xfig.fig.ad.diff +++ b/source/t/xfig/xfig.fig.ad.diff @@ -1,11 +1,11 @@ ---- ./Fig.ad.orig 2012-02-16 14:21:34.000000000 -0600 -+++ ./Fig.ad 2013-09-18 17:39:13.523412641 -0500 +--- ./app-defaults/Fig.in.orig 2016-07-23 16:12:46.000000000 -0500 ++++ ./app-defaults/Fig.in 2018-02-24 13:38:31.916604761 -0600 @@ -34,7 +34,7 @@ ! Spell check program - put your favorite spelling check program here. ! It must write the misspelled words to standard output. --Fig.spellcheckcommand: spell %f -+Fig.spellcheckcommand: aspell -a %f +-Fig.spellcheckcommand: spell %f ++Fig.spellcheckcommand: aspell -a %f ! delay before spinner automatically counts when pressed (milliseconds) Fig.spinner_delay: 1000 diff --git a/source/t/xfig/xfig.no.pdf.ref.diff b/source/t/xfig/xfig.no.pdf.ref.diff index ab6c80b6..d25789ee 100644 --- a/source/t/xfig/xfig.no.pdf.ref.diff +++ b/source/t/xfig/xfig.no.pdf.ref.diff @@ -1,5 +1,5 @@ ---- ./w_cmdpanel.c.orig 2013-06-14 17:39:29.000000000 -0500 -+++ ./w_cmdpanel.c 2013-09-18 17:32:05.187426334 -0500 +--- ./src/w_cmdpanel.c.orig 2016-07-23 16:10:28.000000000 -0500 ++++ ./src/w_cmdpanel.c 2018-02-24 13:36:05.267592616 -0600 @@ -215,7 +215,9 @@ menu_def help_menu_items[] = { {"Xfig Reference (HTML)...", 0, launch_refman, False}, diff --git a/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff b/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff deleted file mode 100644 index 360ba6a3..00000000 --- a/source/t/xfig/xfig.no.xfig_ref_en.pdf.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- ./Imakefile.orig 2013-09-18 17:32:24.193425727 -0500 -+++ ./Imakefile 2013-09-18 17:33:38.835423340 -0500 -@@ -428,7 +428,6 @@ - echo Copying pdf and html files to $(DESTDIR)$(XFIGDOCDIR) ; \ - if [ -d $(DESTDIR)$(XFIGDOCDIR)/html ]; then set +x; \ - else (set -x; $(MKDIRHIER) $(DESTDIR)$(XFIGDOCDIR)/html ); fi ; \ -- $(INSTALL) -m 644 -c xfig_ref_en.pdf $(DESTDIR)$(XFIGDOCDIR) ; \ - $(INSTALL) -m 644 -c xfig-howto.pdf $(DESTDIR)$(XFIGDOCDIR) ; \ - if [ -d html ]; then \ - ( cd html ; tar cf - *.* images ) | ( cd $(DESTDIR)$(XFIGDOCDIR)/html ; tar xf - ) ; fi ; \ |