diff options
Diffstat (limited to 'source')
-rwxr-xr-x | source/t/texlive/dump.unused.internal.libraries.from.sources.sh | 4 | ||||
-rw-r--r-- | source/t/texlive/patches/20180625.diff | 688 | ||||
-rw-r--r-- | source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch | 33 | ||||
-rw-r--r-- | source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch | 451 | ||||
-rw-r--r-- | source/t/texlive/patches/texlive-poppler-0.59.patch | 1142 | ||||
-rwxr-xr-x[-rw-r--r--] | source/t/texlive/prep/texmf_get.sh | 856 | ||||
-rwxr-xr-x | source/t/texlive/texlive.SlackBuild | 53 | ||||
-rw-r--r-- | source/t/texlive/texlive.url | 8 | ||||
-rw-r--r-- | source/x/x11/build/libXScrnSaver | 2 | ||||
-rw-r--r-- | source/x/x11/build/libXinerama | 2 | ||||
-rw-r--r-- | source/x/x11/build/libXxf86misc | 2 |
11 files changed, 1302 insertions, 1939 deletions
diff --git a/source/t/texlive/dump.unused.internal.libraries.from.sources.sh b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh index 71ab0b53..015b34c5 100755 --- a/source/t/texlive/dump.unused.internal.libraries.from.sources.sh +++ b/source/t/texlive/dump.unused.internal.libraries.from.sources.sh @@ -7,9 +7,9 @@ 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 ) +( cd texlive-${VERSION}-source/texk/texlive && rm -rf w*_wrapper ) 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 +xz -9 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/20180625.diff b/source/t/texlive/patches/20180625.diff new file mode 100644 index 00000000..583d9948 --- /dev/null +++ b/source/t/texlive/patches/20180625.diff @@ -0,0 +1,688 @@ +diff -ur ./texk/dvipdfm-x/ChangeLog ../b18/texk/dvipdfm-x/ChangeLog +--- ./texk/dvipdfm-x/ChangeLog 2018-03-03 11:27:37.000000000 +0100 ++++ ../b18/texk/dvipdfm-x/ChangeLog 2018-06-25 22:07:46.343277185 +0200 +@@ -1,3 +1,16 @@ ++2018-05-06 Akira Kakuto <kakuto@fuk.kindai.ac.jp> ++ ++ * tt_cmap.c: Revert a part of changes in 2017-12-09, ++ which breaks to give tounicode entries for ligatures. ++ http://tug.org/pipermail/tex-live/2018-May/041608.html. ++ * configure.ac: Version 20180506. ++ ++ 2018-04-28 Stefan Br\"uns <stefan.bruens@rwth-aachen.de> ++ ++ * pngimage.c: Fix a bug which causes a segfault with 1/2/4-bit ++ transparent indexed PNGs. ++ * configure.ac: Version 20180428. ++ + 2018-03-03 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + * xbb.c: Remove unused lines. +diff -ur ./texk/dvipdfm-x/configure ../b18/texk/dvipdfm-x/configure +--- ./texk/dvipdfm-x/configure 2018-02-17 09:41:35.000000000 +0100 ++++ ../b18/texk/dvipdfm-x/configure 2018-06-25 22:07:47.183276612 +0200 +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20180217. ++# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20180506. + # + # Report bugs to <tex-k@tug.org>. + # +@@ -590,8 +590,8 @@ + # Identity of this package. + PACKAGE_NAME='dvipdfm-x (TeX Live)' + PACKAGE_TARNAME='dvipdfm-x--tex-live-' +-PACKAGE_VERSION='20180217' +-PACKAGE_STRING='dvipdfm-x (TeX Live) 20180217' ++PACKAGE_VERSION='20180506' ++PACKAGE_STRING='dvipdfm-x (TeX Live) 20180506' + PACKAGE_BUGREPORT='tex-k@tug.org' + PACKAGE_URL='' + +@@ -1350,7 +1350,7 @@ + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures dvipdfm-x (TeX Live) 20180217 to adapt to many kinds of systems. ++\`configure' configures dvipdfm-x (TeX Live) 20180506 to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1421,7 +1421,7 @@ + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20180217:";; ++ short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20180506:";; + esac + cat <<\_ACEOF + +@@ -1551,7 +1551,7 @@ + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-dvipdfm-x (TeX Live) configure 20180217 ++dvipdfm-x (TeX Live) configure 20180506 + generated by GNU Autoconf 2.69 + + Copyright (C) 2012 Free Software Foundation, Inc. +@@ -2390,7 +2390,7 @@ + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by dvipdfm-x (TeX Live) $as_me 20180217, which was ++It was created by dvipdfm-x (TeX Live) $as_me 20180506, which was + generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ +@@ -8075,7 +8075,7 @@ + + # Define the identity of the package. + PACKAGE='dvipdfm-x--tex-live-' +- VERSION='20180217' ++ VERSION='20180506' + + + cat >>confdefs.h <<_ACEOF +@@ -14744,7 +14744,7 @@ + Report bugs to <bug-libtool@gnu.org>." + + lt_cl_version="\ +-dvipdfm-x (TeX Live) config.lt 20180217 ++dvipdfm-x (TeX Live) config.lt 20180506 + configured by $0, generated by GNU Autoconf 2.69. + + Copyright (C) 2011 Free Software Foundation, Inc. +@@ -16624,7 +16624,7 @@ + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by dvipdfm-x (TeX Live) $as_me 20180217, which was ++This file was extended by dvipdfm-x (TeX Live) $as_me 20180506, which was + generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -16694,7 +16694,7 @@ + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ +-dvipdfm-x (TeX Live) config.status 20180217 ++dvipdfm-x (TeX Live) config.status 20180506 + configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +diff -ur ./texk/dvipdfm-x/configure.ac ../b18/texk/dvipdfm-x/configure.ac +--- ./texk/dvipdfm-x/configure.ac 2018-02-28 00:14:55.000000000 +0100 ++++ ../b18/texk/dvipdfm-x/configure.ac 2018-06-25 22:07:47.183276612 +0200 +@@ -7,7 +7,7 @@ + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + dnl +-AC_INIT([dvipdfm-x (TeX Live)], [20180217], [tex-k@tug.org]) ++AC_INIT([dvipdfm-x (TeX Live)], [20180506], [tex-k@tug.org]) + AC_PREREQ([2.65]) + AC_CONFIG_SRCDIR([agl.c]) + AC_CONFIG_AUX_DIR([../../build-aux]) +diff -ur ./texk/dvipdfm-x/pngimage.c ../b18/texk/dvipdfm-x/pngimage.c +--- ./texk/dvipdfm-x/pngimage.c 2018-02-17 09:41:35.000000000 +0100 ++++ ../b18/texk/dvipdfm-x/pngimage.c 2018-06-25 22:07:49.306275165 +0200 +@@ -964,12 +964,16 @@ + png_bytep trans; + int num_trans; + png_uint_32 i; ++ png_byte bpc, mask, shift; + + if (!png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) || + !png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL)) { + WARN("%s: PNG does not have valid tRNS chunk but tRNS is requested.", PNG_DEBUG_STR); + return NULL; + } ++ bpc = png_get_bit_depth(png_ptr, info_ptr); ++ mask = 0xff >> (8 - bpc); ++ shift = 8 - bpc; + + smask = pdf_new_stream(STREAM_COMPRESS); + dict = pdf_stream_dict(smask); +@@ -981,7 +985,8 @@ + pdf_add_dict(dict, pdf_new_name("ColorSpace"), pdf_new_name("DeviceGray")); + pdf_add_dict(dict, pdf_new_name("BitsPerComponent"), pdf_new_number(8)); + for (i = 0; i < width*height; i++) { +- png_byte idx = image_data_ptr[i]; ++ /* data is packed for 1/2/4 bpc formats, msb first */ ++ png_byte idx = (image_data_ptr[bpc * i / 8] >> (shift - bpc * i % 8)) & mask; + smask_data_ptr[i] = (idx < num_trans) ? trans[idx] : 0xff; + } + pdf_add_stream(smask, (char *)smask_data_ptr, width*height); +diff -ur ./texk/dvipdfm-x/tt_cmap.c ../b18/texk/dvipdfm-x/tt_cmap.c +--- ./texk/dvipdfm-x/tt_cmap.c 2017-12-09 15:07:09.000000000 +0100 ++++ ../b18/texk/dvipdfm-x/tt_cmap.c 2018-06-25 22:07:49.617274953 +0200 +@@ -1,6 +1,6 @@ + /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. + +- Copyright (C) 2007-2017 by Jin-Hwan Cho and Shunsaku Hirata, ++ Copyright (C) 2007-2018 by Jin-Hwan Cho and Shunsaku Hirata, + the dvipdfmx project team. + + This program is free software; you can redistribute it and/or modify +@@ -928,19 +928,12 @@ + } + #undef MAX_UNICODES + if (unicode_count == -1) { +-#if defined(LIBDPX) + if(verbose > VERBOSE_LEVEL_MIN) { + if (name) + MESG("No Unicode mapping available: GID=%u, name=%s\n", gid, name); + else + MESG("No Unicode mapping available: GID=%u\n", gid); + } +-#else +- if (name) +- MESG("No Unicode mapping available: GID=%u, name=%s\n", gid, name); +- else +- MESG("No Unicode mapping available: GID=%u\n", gid); +-#endif /* LIBDPX */ + } else { + /* the Unicode characters go into wbuf[2] and following, in UTF16BE */ + /* we rely on WBUF_SIZE being more than adequate for MAX_UNICODES */ +@@ -1021,13 +1014,7 @@ + { + USHORT count = 0; + USHORT cid = cffont ? cff_charsets_lookup_inverse(cffont, gid) : gid; +- +- /* Skip PUA characters and alphabetic presentation forms, allowing +- * handle_subst_glyphs() as it might find better mapping. Fixes the +- * mapping of ligatures encoded in PUA in fonts like Linux Libertine +- * and old Adobe fonts. +- */ +- if (is_used_char2(used_chars, cid) && !is_PUA_or_presentation(ch)) { ++ if (is_used_char2(used_chars, cid)) { + int len; + unsigned char *p = wbuf + 2; + +@@ -1038,11 +1025,18 @@ + len = UC_UTF16BE_encode_char((int32_t) ch, &p, wbuf + WBUF_SIZE); + CMap_add_bfchar(cmap, wbuf, 2, wbuf + 2, len); + +- /* Avoid duplicate entry +- * There are problem when two Unicode code is mapped to +- * single glyph... ++ /* Skip PUA characters and alphabetic presentation forms, allowing ++ * handle_subst_glyphs() as it might find better mapping. Fixes the ++ * mapping of ligatures encoded in PUA in fonts like Linux Libertine ++ * and old Adobe fonts. + */ +- used_chars[cid / 8] &= ~(1 << (7 - (cid % 8))); ++ if (!is_PUA_or_presentation(ch)) { ++ /* Avoid duplicate entry ++ * There are problem when two Unicode code is mapped to ++ * single glyph... ++ */ ++ used_chars[cid / 8] &= ~(1 << (7 - (cid % 8))); ++ } + } + + return count; +diff -ur ./texk/web2c/ptexdir/ChangeLog ../b18/texk/web2c/ptexdir/ChangeLog +--- ./texk/web2c/ptexdir/ChangeLog 2018-02-05 13:35:05.000000000 +0100 ++++ ../b18/texk/web2c/ptexdir/ChangeLog 2018-06-25 22:08:39.566240911 +0200 +@@ -1,3 +1,16 @@ ++2018-05-06 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> ++ ++ * kanji.c: More strict check kanji token. ++ ++2018-04-14 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp> ++ ++ * ptex-base.ch: Fix issue GitHub:texjporg/tex-jp-build#57 ++ that discontinuous KINSOKU/INHIBIT table cannot be ++ searched properly. ++ (regression caused by a commmit of 2017-09-11) ++ * tests/free_pena.tex, tests/free_ixsp.tex: Added. ++ * ptex_version.h: pTeX version p3.8.1. ++ + 2018-02-05 Hironobu Yamashita <h.y.acetaminophen@gmail.com> + + * ptex-base.ch: Set subtype for JFM glue in math list. +diff -ur ./texk/web2c/ptexdir/kanji.c ../b18/texk/web2c/ptexdir/kanji.c +--- ./texk/web2c/ptexdir/kanji.c 2016-11-25 19:24:38.000000000 +0100 ++++ ../b18/texk/web2c/ptexdir/kanji.c 2018-06-25 22:08:39.675240837 +0200 +@@ -4,6 +4,7 @@ + */ + + #include "kanji.h" ++#define CS_TOKEN_FLAG 0xFFFF + + #if !defined(WIN32) + int sjisterminal; +@@ -12,7 +13,8 @@ + /* TOKEN */ + boolean check_kanji(integer c) + { +- return is_char_kanji(c); ++ if (c >= CS_TOKEN_FLAG) return false; ++ else return is_char_kanji(c); + } + + boolean is_char_ascii(integer c) +diff -ur ./texk/web2c/ptexdir/ptex-base.ch ../b18/texk/web2c/ptexdir/ptex-base.ch +--- ./texk/web2c/ptexdir/ptex-base.ch 2018-02-05 13:35:05.000000000 +0100 ++++ ../b18/texk/web2c/ptexdir/ptex-base.ch 2018-06-25 22:08:39.677240836 +0200 +@@ -58,6 +58,7 @@ + % pTeX p3.7.1. + % (2017-09-07) HK pTeX p3.7.2 More restrictions on direction change commands. + % (2018-01-21) HK Added \ptexversion primitive and co. pTeX p3.8. ++% (2018-04-14) HK pTeX p3.8.1 Bug fix for discontinuous KINSOKU table. + % + + @x +@@ -73,8 +74,8 @@ + @y + @d pTeX_version=3 + @d pTeX_minor_version=8 +-@d pTeX_revision==".0" +-@d pTeX_version_string=='-p3.8.0' {current \pTeX\ version} ++@d pTeX_revision==".1" ++@d pTeX_version_string=='-p3.8.1' {current \pTeX\ version} + @# + @d pTeX_banner=='This is pTeX, Version 3.14159265',pTeX_version_string + @d pTeX_banner_k==pTeX_banner +@@ -6397,6 +6398,8 @@ + @d inhibit_both=0 {disable to insert space before 2byte-char and after it} + @d inhibit_previous=1 {disable to insert space before 2byte-char} + @d inhibit_after=2 {disable to insert space after 2byte-char} ++@d inhibit_none=3 {enable to insert space before/after 2byte-char} ++@d inhibit_unused=4 {unused entry} + @d no_entry=1000 + @d new_pos=0 + @d cur_pos=1 +@@ -6427,14 +6430,15 @@ + begin s:=calc_pos(c); p:=s; + if n=new_pos then + begin repeat +- if (inhibit_xsp_code(p)=0)or(inhibit_xsp_code(p)=c) then goto done; ++ if (inhibit_xsp_type(p)=inhibit_unused)or(inhibit_xsp_code(p)=0) ++ or(inhibit_xsp_code(p)=c) then goto done; + incr(p); if p>255 then p:=0; + until s=p; p:=no_entry; + end + else + begin repeat +- if inhibit_xsp_code(p)=0 then goto done1; +- if inhibit_xsp_code(p)=c then goto done; ++ if inhibit_xsp_code(p)=0 then goto done1 ++ else if (inhibit_xsp_type(p)<>inhibit_unused)and(inhibit_xsp_code(p)=c) then goto done; + incr(p); if p>255 then p:=0; + until s=p; + done1: p:=no_entry; +@@ -6447,9 +6451,10 @@ + begin p:=cur_chr; scan_int; n:=cur_val; scan_optional_equals; scan_int; + if is_char_kanji(n) then + begin j:=get_inhibit_pos(tokanji(n),new_pos); +- if (j<>no_entry)and(cur_val>inhibit_after)and(global or cur_level=level_one) then +- begin n:=0; cur_val:=0 end +- { remove the entry from inhibit table } ++ if (j<>no_entry)and(cur_val>inhibit_after) then ++ begin if global or(cur_level=level_one) then cur_val:=inhibit_unused ++ { remove the entry from inhibit table } ++ else cur_val:=inhibit_none; end + else if j=no_entry then + begin print_err("Inhibit table is full!!"); + help1("I'm skipping this control sequences.");@/ +@@ -6466,7 +6471,7 @@ + + @ @<Fetch inhibit type from some table@>= + begin scan_int; q:=get_inhibit_pos(tokanji(cur_val),cur_pos); +-cur_val_level:=int_val; cur_val:=3; ++cur_val_level:=int_val; cur_val:=inhibit_none; + if q<>no_entry then cur_val:=inhibit_xsp_type(q); + end + +@@ -6476,6 +6481,7 @@ + + @d pre_break_penalty_code=1 + @d post_break_penalty_code=2 ++@d kinsoku_unused_code=3 + + @<Put each...@>= + primitive("prebreakpenalty",assign_kinsoku,pre_break_penalty_code); +@@ -6502,15 +6508,16 @@ + gubed + if n=new_pos then + begin repeat +- if (kinsoku_type(p)=0)or(kinsoku_code(p)=c) then goto done; ++ if (kinsoku_type(p)=0)or(kinsoku_type(p)=kinsoku_unused_code) ++ or(kinsoku_code(p)=c) then goto done; + incr(p); if p>255 then p:=0; + until s=p; + p:=no_entry; + end + else + begin repeat +- if kinsoku_type(p)=0 then goto done1; +- if kinsoku_code(p)=c then goto done; ++ if kinsoku_type(p)=0 then goto done1 ++ else if (kinsoku_type(p)<>kinsoku_unused_code)and(kinsoku_code(p)=c) then goto done; + incr(p); if p>255 then p:=0; + until s=p; + done1: p:=no_entry; +@@ -6523,8 +6530,8 @@ + begin p:=cur_chr; scan_int; n:=cur_val; scan_optional_equals; scan_int; + if is_char_ascii(n) or is_char_kanji(n) then + begin j:=get_kinsoku_pos(tokanji(n),new_pos); +- if (j<>no_entry)and(cur_val=0)and(global or cur_level=level_one) then +- define(kinsoku_base+j,0,0) { remove the entry from KINSOKU table } ++ if (j<>no_entry)and(cur_val=0)and(global or(cur_level=level_one)) then ++ define(kinsoku_base+j,kinsoku_unused_code,0) { remove the entry from KINSOKU table } + else begin + if j=no_entry then begin + print_err("KINSOKU table is full!!"); +diff -ur ./texk/web2c/ptexdir/ptex_version.h ../b18/texk/web2c/ptexdir/ptex_version.h +--- ./texk/web2c/ptexdir/ptex_version.h 2018-01-21 04:48:06.000000000 +0100 ++++ ../b18/texk/web2c/ptexdir/ptex_version.h 2018-06-25 22:08:39.678240835 +0200 +@@ -1 +1 @@ +-#define PTEX_VERSION "p3.8.0" ++#define PTEX_VERSION "p3.8.1" +diff -ur ./texk/web2c/uptexdir/kanji.c ../b18/texk/web2c/uptexdir/kanji.c +--- ./texk/web2c/uptexdir/kanji.c 2018-02-25 01:31:25.000000000 +0100 ++++ ../b18/texk/web2c/uptexdir/kanji.c 2018-06-25 22:08:41.864239345 +0200 +@@ -18,7 +18,7 @@ + /* TOKEN */ + boolean check_kanji (integer c) + { +- if (c > CS_TOKEN_FLAG) return false; ++ if (c >= CS_TOKEN_FLAG) return false; + else if (!(XXHi(c)>=KCAT_KANJI && XXHi(c)<=KCAT_HANGUL)) return false; + else return is_char_kanji(c); + } +diff -ur ./utils/README ../b18/utils/README +--- ./utils/README 2018-04-08 22:08:33.000000000 +0200 ++++ ../b18/utils/README 2018-06-25 22:08:45.738236705 +0200 +@@ -1,4 +1,4 @@ +-$Id: README 47384 2018-04-08 20:08:33Z karl $ ++$Id: README 47642 2018-05-08 16:06:43Z karl $ + Public domain. Originally written 2005 by Karl Berry. + + Extra utilities we (optionally) compile for TeX Live. +@@ -16,7 +16,7 @@ + + lacheck - maintained here, by us + +-m-tx 0.63 - checked 09jan18 ++m-tx 0.63a - checked 29apr18 + http://ctan.org/pkg/m-tx/ + + pmx 2.8.4 - checked 14feb18 +diff -ur ./utils/m-tx/ChangeLog ../b18/utils/m-tx/ChangeLog +--- ./utils/m-tx/ChangeLog 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/ChangeLog 2018-06-25 22:08:49.771233956 +0200 +@@ -1,3 +1,7 @@ ++2018-04-29 Akira Kakuto <kakuto@fuk.kindai.ac.jp> ++ ++ * Import m-tx 0.63a. ++ + 2018-01-09 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + * Import m-tx 0.63. +diff -ur ./utils/m-tx/TLpatches/ChangeLog ../b18/utils/m-tx/TLpatches/ChangeLog +--- ./utils/m-tx/TLpatches/ChangeLog 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/TLpatches/ChangeLog 2018-06-25 22:08:49.772233956 +0200 +@@ -1,3 +1,7 @@ ++2018-04-29 Akira Kakuto <kakuto@fuk.kindai.ac.jp> ++ ++ * patch-01-write-bin: Update for 0.63a. ++ + 2018-01-09 Akira Kakuto <kakuto@fuk.kindai.ac.jp> + + * patch-01-write-bin: Update for 0.63. +diff -ur ./utils/m-tx/TLpatches/TL-Changes ../b18/utils/m-tx/TLpatches/TL-Changes +--- ./utils/m-tx/TLpatches/TL-Changes 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/TLpatches/TL-Changes 2018-06-25 22:08:49.772233956 +0200 +@@ -1,4 +1,4 @@ +-Changes applied to the mtx-0.63 tree as obtained from: ++Changes applied to the mtx-0.63a tree as obtained from: + http://www.ctan.org/tex-archive/support/m-tx/ + + Remove: +diff -ur ./utils/m-tx/TLpatches/patch-01-write-bin ../b18/utils/m-tx/TLpatches/patch-01-write-bin +--- ./utils/m-tx/TLpatches/patch-01-write-bin 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/TLpatches/patch-01-write-bin 2018-06-25 22:08:49.772233956 +0200 +@@ -1,6 +1,21 @@ +-diff -ur mtx-0.63.orig/globals.c mtx-0.63/globals.c +---- mtx-0.63.orig/globals.c Tue Jan 09 01:39:42 2018 +-+++ mtx-0.63/globals.c Tue Jan 09 08:46:40 2018 ++diff -ur mtx-0.63a/files.c mtx-src/files.c ++--- mtx-0.63a/files.c Tue Jan 09 01:39:42 2018 +++++ mtx-src/files.c Wed Apr 25 18:07:12 2018 ++@@ -289,9 +289,9 @@ ++ pushFile(infilename); ++ strcpy(outfile_NAME, outfilename); ++ if (outfile != NULL) ++- outfile = freopen(outfile_NAME, "w", outfile); +++ outfile = freopen(outfile_NAME, "wb", outfile); ++ else ++- outfile = fopen(outfile_NAME, "w"); +++ outfile = fopen(outfile_NAME, "wb"); ++ _SETIO(outfile != NULL, FileNotFound); ++ strcpy(stylefile_NAME, stylefilename); ++ if (stylefile != NULL) ++diff -ur mtx-0.63a/globals.c mtx-src/globals.c ++--- mtx-0.63a/globals.c Tue Jan 09 01:39:42 2018 +++++ mtx-src/globals.c Wed Apr 25 18:07:37 2018 + @@ -230,7 +230,7 @@ + if (outfile != NULL) + fclose(outfile); +diff -ur ./utils/m-tx/configure ../b18/utils/m-tx/configure +--- ./utils/m-tx/configure 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/configure 2018-06-25 22:08:49.879233883 +0200 +@@ -1,6 +1,6 @@ + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. +-# Generated by GNU Autoconf 2.69 for m-tx (TeX Live) 0.63. ++# Generated by GNU Autoconf 2.69 for m-tx (TeX Live) 0.63a. + # + # Report bugs to <tex-k@tug.org>. + # +@@ -580,8 +580,8 @@ + # Identity of this package. + PACKAGE_NAME='m-tx (TeX Live)' + PACKAGE_TARNAME='m-tx--tex-live-' +-PACKAGE_VERSION='0.63' +-PACKAGE_STRING='m-tx (TeX Live) 0.63' ++PACKAGE_VERSION='0.63a' ++PACKAGE_STRING='m-tx (TeX Live) 0.63a' + PACKAGE_BUGREPORT='tex-k@tug.org' + PACKAGE_URL='' + +@@ -1275,7 +1275,7 @@ + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +-\`configure' configures m-tx (TeX Live) 0.63 to adapt to many kinds of systems. ++\`configure' configures m-tx (TeX Live) 0.63a to adapt to many kinds of systems. + + Usage: $0 [OPTION]... [VAR=VALUE]... + +@@ -1341,7 +1341,7 @@ + + if test -n "$ac_init_help"; then + case $ac_init_help in +- short | recursive ) echo "Configuration of m-tx (TeX Live) 0.63:";; ++ short | recursive ) echo "Configuration of m-tx (TeX Live) 0.63a:";; + esac + cat <<\_ACEOF + +@@ -1438,7 +1438,7 @@ + test -n "$ac_init_help" && exit $ac_status + if $ac_init_version; then + cat <<\_ACEOF +-m-tx (TeX Live) configure 0.63 ++m-tx (TeX Live) configure 0.63a + generated by GNU Autoconf 2.69 + + Copyright (C) 2012 Free Software Foundation, Inc. +@@ -1861,7 +1861,7 @@ + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + +-It was created by m-tx (TeX Live) $as_me 0.63, which was ++It was created by m-tx (TeX Live) $as_me 0.63a, which was + generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ +@@ -3784,7 +3784,7 @@ + + # Define the identity of the package. + PACKAGE='m-tx--tex-live-' +- VERSION='0.63' ++ VERSION='0.63a' + + + cat >>confdefs.h <<_ACEOF +@@ -5868,7 +5868,7 @@ + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. + ac_log=" +-This file was extended by m-tx (TeX Live) $as_me 0.63, which was ++This file was extended by m-tx (TeX Live) $as_me 0.63a, which was + generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES +@@ -5925,7 +5925,7 @@ + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" + ac_cs_version="\\ +-m-tx (TeX Live) config.status 0.63 ++m-tx (TeX Live) config.status 0.63a + configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +diff -ur ./utils/m-tx/mtx-src/Corrections ../b18/utils/m-tx/mtx-src/Corrections +--- ./utils/m-tx/mtx-src/Corrections 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/Corrections 2018-06-25 22:08:49.880233882 +0200 +@@ -3,6 +3,12 @@ + + Newest items at top. You might also want to look at file `MAINTENANCE`. + ++Version 0.63a ++------------- ++ ++Commented out apparently spurious begin...end block in preambleDefaults ++in preamble.pas. (RDT) ++ + Version 0.63 + ------------ + +diff -ur ./utils/m-tx/mtx-src/files.c ../b18/utils/m-tx/mtx-src/files.c +--- ./utils/m-tx/mtx-src/files.c 2016-11-25 19:24:43.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/files.c 2018-06-25 22:08:49.882233881 +0200 +@@ -289,9 +289,9 @@ + pushFile(infilename); + strcpy(outfile_NAME, outfilename); + if (outfile != NULL) +- outfile = freopen(outfile_NAME, "w", outfile); ++ outfile = freopen(outfile_NAME, "wb", outfile); + else +- outfile = fopen(outfile_NAME, "w"); ++ outfile = fopen(outfile_NAME, "wb"); + _SETIO(outfile != NULL, FileNotFound); + strcpy(stylefile_NAME, stylefilename); + if (stylefile != NULL) +diff -ur ./utils/m-tx/mtx-src/libp2c/p2clib.c ../b18/utils/m-tx/mtx-src/libp2c/p2clib.c +--- ./utils/m-tx/mtx-src/libp2c/p2clib.c 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/libp2c/p2clib.c 2018-06-25 22:08:49.883233880 +0200 +@@ -73,8 +73,8 @@ + { + register char *dd = (char *)d, *ss = (char *)s; + if (dd < ss || dd - ss >= n) { +-#if defined(bcopy) && defined(memcpy) +- my_memcpy(dd, ss, n); ++#if defined(bcopy) && defined(memcpy) ++ Anyptr my_memcpy(Anyptr d, Const Anyptr s, size_t n); + #else + memcpy(dd, ss, n); + #endif +diff -ur ./utils/m-tx/mtx-src/preamble.c ../b18/utils/m-tx/mtx-src/preamble.c +--- ./utils/m-tx/mtx-src/preamble.c 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/preamble.c 2018-06-25 22:08:49.953233832 +0200 +@@ -801,8 +801,8 @@ + stave_size[i] = unspec; + for (i = 0; i <= maxstaves; i++) + nspace[i] = unspec; +- nspace[i] = unspec; +- stave_size[i-1] = unspec; ++ /* next line seems to be spurious. 0.63a RDT */ ++ /* begin nspace[i]:=unspec; stave_size[i]:=unspec; end; */ + n_pages = 1; + n_systems = 1; + readStyles(); +diff -ur ./utils/m-tx/mtx-src/preamble.pas ../b18/utils/m-tx/mtx-src/preamble.pas +--- ./utils/m-tx/mtx-src/preamble.pas 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/preamble.pas 2018-06-25 22:08:49.953233832 +0200 +@@ -501,7 +501,8 @@ + for i:=1 to maxvoices do setVocal(i,false); + for i:=1 to maxstaves do stave_size[i]:=unspec; + for i:=0 to maxstaves do nspace[i]:=unspec; +- begin nspace[i]:=unspec; stave_size[i]:=unspec; end; ++ { next line seems to be spurious. 0.63a RDT } ++ { begin nspace[i]:=unspec; stave_size[i]:=unspec; end; } + n_pages:=1; n_systems:=1; + readStyles; old_known_styles := known_styles; + for i:=1 to lines_in_paragraph do omit_line[i]:=false; +diff -ur ./utils/m-tx/mtx-src/prepmx.c ../b18/utils/m-tx/mtx-src/prepmx.c +--- ./utils/m-tx/mtx-src/prepmx.c 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/prepmx.c 2018-06-25 22:08:49.954233832 +0200 +@@ -66,8 +66,8 @@ + + /** M-Tx preprocessor to PMX Dirk Laurie */ + +-#define version "0.63" +-#define version_date "<7 January 2018>" ++#define version "0.63a" ++#define version_date "<8 April 2018>" + + /** See file "Corrections" for updates */ + +@@ -758,7 +758,7 @@ + Static void topOfPMXfile(void) + { + Char STR2[24]; +- Char STR3[32]; ++ Char STR3[30]; + + putLine("---"); + sprintf(STR2, "\\def\\mtxversion{%s}", version); +diff -ur ./utils/m-tx/mtx-src/prepmx.pas ../b18/utils/m-tx/mtx-src/prepmx.pas +--- ./utils/m-tx/mtx-src/prepmx.pas 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/mtx-src/prepmx.pas 2018-06-25 22:08:49.954233832 +0200 +@@ -5,8 +5,8 @@ + { CMO: addition/change by Christian Mondrup } + + {* M-Tx preprocessor to PMX Dirk Laurie } +-const version = '0.63'; +- version_date = '<7 January 2018>'; ++const version = '0.63a'; ++ version_date = '<8 April 2018>'; + + {* See file "Corrections" for updates } + +diff -ur ./utils/m-tx/tests/mozart.pmx ../b18/utils/m-tx/tests/mozart.pmx +--- ./utils/m-tx/tests/mozart.pmx 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/tests/mozart.pmx 2018-06-25 22:08:50.059233760 +0200 +@@ -1,6 +1,6 @@ + --- +-\def\mtxversion{0.63} +-\def\mtxdate{<7 January 2018>} ++\def\mtxversion{0.63a} ++\def\mtxdate{<8 April 2018>} + \input mtx + \mtxComposerLine{}{W. A. Mozart (1756--1791)} + \mtxTitleLine{Riff in C} +diff -ur ./utils/m-tx/version.ac ../b18/utils/m-tx/version.ac +--- ./utils/m-tx/version.ac 2018-01-09 04:41:12.000000000 +0100 ++++ ../b18/utils/m-tx/version.ac 2018-06-25 22:08:50.059233760 +0200 +@@ -8,4 +8,4 @@ + dnl -------------------------------------------------------- + dnl + dnl m4-include this file to define the current mtx version +-m4_define([mtx_version], [0.63]) ++m4_define([mtx_version], [0.63a]) diff --git a/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch b/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch deleted file mode 100644 index c2d3521a..00000000 --- a/source/t/texlive/patches/texlive-20170524-source-gcc7-1.patch +++ /dev/null @@ -1,33 +0,0 @@ -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 deleted file mode 100644 index e4ea52e2..00000000 --- a/source/t/texlive/patches/texlive-20170524-source-upstream_fixes-2.patch +++ /dev/null @@ -1,451 +0,0 @@ -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 deleted file mode 100644 index 401315a6..00000000 --- a/source/t/texlive/patches/texlive-poppler-0.59.patch +++ /dev/null @@ -1,1142 +0,0 @@ -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/texmf_get.sh b/source/t/texlive/prep/texmf_get.sh index 396fdceb..fab74ce5 100644..100755 --- a/source/t/texlive/prep/texmf_get.sh +++ b/source/t/texlive/prep/texmf_get.sh @@ -1,6 +1,6 @@ #!/bin/bash -# texmf_get.sh (c) 2016-2017 Johannes Schoepfer, Germany, slackbuilds[at]schoepfer[dot]info +# texmf_get.sh (c) 2016-2018 Johannes Schoepfer, Germany, slackbuilds[at]schoepfer[dot]info # All rights reserved. # # Redistribution and use of this script, with or without modification, is @@ -20,16 +20,15 @@ # 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 +# V 15.0.0 # # 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 +# 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/docs) should contain no binaries(exception biber) +# -base: the most usefull stuff, most binaries/scripts, +# manpages for compiled binaries 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 @@ -39,231 +38,244 @@ # package source: http://mirror.ctan.org/systems/texlive/tlnet/archive/ #set -e -MAJORVERSION=2017 +MAJORVERSION=2018 -# globally excluded packages, which e.g. are +# -excluded packages, which are # -useless without tlmgr-installer # -non-linux -# -covered by an external package -# -obsolete +# -covered by an external package e.g. asymptote on SBo +# -obsolete +# -binaries provided already by texlive.Slackbuild +# -does only contain sources, or hyphen directives, e.g. metatype1, patch, ... +# -does only contain hyphen directives, e.g. hyphen-farsi ... global_exclude=" + hyphen-farsi + hyphen-arabic asymptote tlcockpit tlshell + texlive.infra + texlive-docindex + texlive-scripts + texlive-msg-translations texosquery + texliveonfly + texworks aleph omega antomega omegaware lambda otibet + ocherokee + oinuit cslatex + bibarts + metatype1 + patch + wintools.win32 + dviout.win32 + " + + # special packages, move their type1 fonts(if metfonts are present) + # and/or docs to -extra +special_packages=" + koma-script + velthuis + armtex + montex + vntex + pl + cc-pl + cs + musixtex-fonts + tipa + cbfonts + ptex-fonts + uptex-fonts + " +#Todo: split type1 fonts, or keep subset of type1 fonts in base +# cm-super + +# keep precompiled binaries, list binary, not package name +keep_precompiled=" + biber " texmf_editions () { - # At first, $corepackages for the base, and other essentials + + # "excludes from -base", also dependencies are excluded + PACKAGES=" + cm-super + biber + bib2gls + knitting + pgfornament + pgfplots + pst-cox + pst-poker + pst-vectorian + pst-geo + bclogo + $(grep ^"name .*biblatex" $db | cut -d' ' -f2 ) + " texmfget extra || exit 1 + + # packages/collections and their dependencies for -base PACKAGES=" $(cat $corepackages) + etoolbox + xcolor + memoir + velthuis + wasy + ptex + platex + revtex + uptex + uplatex collection-basic collection-latex collection-metapost collection-plaingeneric - collection-fontutils collection-luatex collection-context - cbfonts-fd - xetex-devanagari - " texmfget base || exit 1 + collection-fontutils + collection-langczechslovak + collection-langeuropean + collection-langenglish + collection-langfrench + collection-langitalian + collection-langpolish + collection-langportuguese + collection-langspanish + collection-latexrecommended + $(collection_by_size fontsextra 70000 || exit 1) + $(collection_by_size publishers 10000 || exit 1) + " texmfget base - # 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/collections and their dependencies for -extra 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 + amiri arabi - nwejm - uantwerpendocs - sduthesis - stellenbosch + arabi-add + arara + arev + bangorcsthesis + beamer2thesis + beamertheme-detlevcm + beamertheme-epyt + beamertheme-saintpetersburg + beebe + bhcexam + bxtexlogo + churchslavonic + collection-fontsextra + collection-langchinese + collection-langcjk + collection-langjapanese + collection-langkorean + collection-publishers + collection-texworks + collection-wintools + ctan-o-mat + ctanify + ctanupload + dad + ethiop-t1 + fibeamer fithesis + ghsystem gregoriotex + hustthesis + ijsra + iwhdp + jpsj + kerkis + ketcindy + kpfonts + langsci + latex2nemeth + libertine lilyglyphs - musixtex-fonts - beebe - velthuis + lni + luatexko + media9 + musuos mwe + newtx + nwejm + padauk + pdfwin pdfx - media9 - pst-cox - pst-poker - pst-vectorian - pst-geo + powerdot-tuliplab + powerdot-FUBerlin quran - ijsra - fibeamer - udesoftec - xduthesis - hustthesis - bangorcsthesis - sapthesis - uowthesis - cs - pl - cc-pl - tipa - kerkis - amiri - cns - vntex - montex - xcharter - fonts-churchslavonic - japanese-otf + resumecls sanskrit-t1 + sapthesis + sduthesis + seuthesix + simurgh skaknew - padauk + stellenbosch + suanpan + tudscr + uantwerpendocs + ucs + udesoftec + universalis + uowthesis + wasy2-ps + xduthesis + xetexko + xq " texmfget extra || exit 1 - - # Completing the base + + # What's left, for base again PACKAGES=" + collection-fontsrecommended + collection-xetex collection-langcyrillic - collection-langczechslovak - collection-langeuropean - collection-langenglish - collection-langfrench + collection-langarabic 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-pstricks 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 "Generate texmf trees/editions based on collections/packages" + echo "and their (hard)dependencies." + echo "./texmf_get.sh [base|docs|extra|lint]" echo echo "-base: texfiles, no docs" echo "-docs: docs of -base" echo "-extra: remaining texfiles and docs" - echo "-fonts: fonts and docs" + echo "[lint]: compare filename contents of all generated editions," + echo " to detect overlapping files" 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 "need to be downloaded." 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 "A new ascii index file/database(texlive.tlpdb) is will be" + echo "pulled on the next run, and a new version yymmdd will be set." echo echo "All generated tarballs, logs etc. are going to" echo "$TMP" @@ -362,36 +374,116 @@ download () { } untar () { - # leave if $1 has no content. Therea collections with basically no used package, e.g. texworks + # leave if $1 has no content if [ -s "$1" ] then while read package do + echo "untar $package" # 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 + # untar the tex package, relocate to texmf-dist if necessary, binpackages always need relocation + relocated='.' + [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" -o -n "$(grep ^"binfiles " $texmf/$package.meta)" ] && relocated="texmf-dist" + # if not .doc package, investigate files for dependencies/provides + if [ -n "$flavour" ] + then + tar xf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated || exit 1 + else + #tar vxf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated + tar vxf ${package}${flavour}.tar.xz --exclude tlpkg -C $relocated | egrep '\.sty$|\.bbx$|\.cls$' > $texmf/$package.deps + if [ -n "$texmf/$package.deps" ] + then + unset provide + unset depends + for depfile in $(cat $texmf/$package.deps) + do + filename="$( echo $depfile | rev | cut -d'.' -f2- | cut -d'/' -f1 | rev)" + # always add $filename as "ProvidesPackage", if it's a .sty + echo $depfile | grep '\.sty'$ &>/dev/null + [ $? = 0 ] && provide+="${filename}," + # remove comments, if there are backslashes ignore that content, except it is \filename + #provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\\\ProvidesPackage{\([^}]*\)}.*/\1/p" | sed "s/\\\filename/$filename/g;/\\\/d" | sort -u | tr '\n' ',')" + #sed -z "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\)*.\n//g" | sed "s/[[:space:]]// + #provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -z "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\)*.\n//g" | sed "s/[[:space:]]// | sed -n "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\){\([^}]*\)}.*/\2/p" | sed "s/\\\filename/$filename/g;s/\\\ExplFileName/$filename/g;/\\\/d" | sed "s/\(\.sty$\|\.cls$\)//g" | sort -u | tr '\n' ',')" + provide+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -z "s/\(Package\|ExplPackage\|File\|Class\)\n/\1/g" | sed "s/[[:space:]]//" | sed -n "s/.*\\\Provides\(Package\|ExplPackage\|File\|Class\){\([^}]*\)}.*/\2/p" | sed "s/\\\filename/$filename/g;s/\\\ExplFileName/$filename/g" | sed "s/\(\.sty$\|\.cls$\)//g" | sort -u | tr '\n' ',')" + #depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\(\\\require\|\\\use\)package{\([^}]*\)}.*/\2/p" | sed "/\\\/d" | sort -u | tr '\n' ',')" + depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\(\\\require\|\\\use\)package{\([^}]*\)}.*/\2/p" | sort -u | tr '\n' ',')" + #depends+="$(sed "s/%.*//g" $texmf/$relocated/$depfile | sed -n "s/.*\\\\(require\|use\)package{\([^}]*\)}.*/\2/p" | sed "/\\\/d" | sort -u | tr '\n' ',')" + done + if [ -n "$provide" ] + then + #echo "$package $provide | sort -u | tr '\n' ',' " >> $TMP/provides.run.$edition + echo "$package $provide" >> $TMP/provides.run.$edition + fi + if [ -n "$depends" ] + then + echo "$package $depends" >> $TMP/depends.run.$edition + fi + fi + fi + + # Check for binaries, delete them as these should be provided + # by texlive.Slackbuild, keep symlinks and scripts - # if binaries are present, put them in texmf-dist - [ -d bin ] && cp -a bin texmf-dist && rm -rf bin + unset binaries + unset scripts + for arch in $platforms + do + if [ -d $texmf/texmf-dist/bin/$arch ] + then + [ ! -d $texmf/texmf-dist/linked_scripts ] \ + && mkdir $texmf/texmf-dist/linked_scripts + # rewrite link target to fit systemwide installation + for link in $(find $texmf/texmf-dist/bin/$arch -type l) + do + ln -sf $(readlink $link | sed "s/^..\/..\(.*\)/..\/share\1/" ) $link || exit 1 + done + # move symlinks/scripts to linked_scripts + find $texmf/texmf-dist/bin/$arch -type l -exec mv '{}' $texmf/texmf-dist/linked_scripts/ \; + + binaries="$(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : )" + for bin in $binaries + do + # keep binaries of special packages + for binary in $keep_precompiled + do + if [ "$(echo $bin | rev | cut -d'/' -f1 | rev )" != "$binary" ] + then + rm $bin + echo $bin | rev | cut -d'/' -f1 | rev >> $binary_removed.$edition + fi + done + done + # move scripts to linked-scripts + scripts="$(find $texmf/texmf-dist/bin/$arch -type f -exec file '{}' + | grep -wv ELF | cut -f 1 -d : )" + for script in $scripts + do + mv $script $texmf/texmf-dist/linked_scripts/ + done + fi + done + if [ "$flavour" = ".doc" ] then - size=$(( $(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 )) + size=$(grep ^doccontainersize $texmf/$package.meta | cut -d' ' -f2) else - size=$(( $(grep ^containersize $texmf/$package.meta | cut -d' ' -f2 ) / 1024 )) + size=$(grep ^containersize $texmf/$package.meta | cut -d' ' -f2) 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 + echo "$size byte, $package$flavour: $shortdesc" >> $output.meta + # make index of uncompressed size of each package + echo "$(xz -l --verbose ${package}${flavour}.tar.xz | grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 ) byte, $package$flavour: $shortdesc" >> $output.meta.uncompressed done < $1 # copy packages index to texmf-dist, so included packages are known in later installation - cat $output.meta >> $output.$edition.meta + # don't list binary packages, as the binaries itself are not contained, only the symlinks. + cat $output.meta | grep -v '\-linux:' >> $output.$edition.meta + cat $output.meta.uncompressed | grep -v '\-linux:' >> $output.$edition.meta.uncompressed # cleanup [ -f $output.meta ] && rm $output.meta + [ -f $output.meta.uncompressed ] && rm $output.meta.uncompressed fi } @@ -399,19 +491,24 @@ 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 + 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 'uninstall*.sh' -delete + 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 '*man1.pdf' -delete + find texmf-dist/ -type f -name '*man5.pdf' -delete # Remove zero-length files, as these appear e.g. in hyph-utf8 tex-package. - find . -type f -size 0c -delete + # find texmf-dist/ -type f -size 0c -delete + find texmf-dist/ -type f -empty -delete + # Remove empty directories recursively + find texmf-dist/ -type d -empty -delete } texmfget () { @@ -444,31 +541,64 @@ texmfget () { 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)" ] + addpackage=no + # if package contains docs, add to docpackages + if [ -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 + echo "$collection added to docs $1" >> $logfile + addpackage=yes fi - # if package contains also docs, add also to docpackages - if [ -n "$(grep ^docfiles $texmf/$collection.meta)" ] + if [ -n "$(grep ^runfiles $texmf/$collection.meta)" -o -n "$(grep ^binfiles $texmf/$collection.meta)" ] then - echo "$collection" >> $output_doc - echo "$collection added to -docs $1" >> $logfile + echo "$collection" >> $output + echo "$collection added to -$1" >> $logfile + addpackage=yes + fi + # very package should be added to one edition, abort if that didn't work + if [ $addpackage = no ] + then + echo "$collection doesn't contain any docfiles/runfiles/binfiles" + echo "Please exclude package/report to upstream mailinglist tex-live@tug.org, bye." + exit 1 fi - echo "$collection" >> $output - echo "$collection added to -$1" >> $logfile fi + + # Don't handle collections as dependency of other collections, as this destroys control over what packages to be added # 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 + + grep ^"depend " $texmf/$collection.meta | cut -d' ' -f2- > $dependencies + + if [ -s "$dependencies" ] + then + # check for .ARCH packages which may be binaries, scripts or links + # Binaries should all come from the sourcebuild(exception biber) + for dependency in $(cat $dependencies) + do + echo $dependency | grep '\.ARCH'$ &>/dev/null + if [ $? = 0 ] + then + for arch in $platforms + do + archpackage="$(echo $dependency | sed "s/\.ARCH$/\.$arch/")" + grep ^"name $archpackage"$ $db &>/dev/null && echo "$archpackage" >> $dependencies.verified_arch + done + else + echo $dependency >> $dependencies.verified_arch + fi + done + if [ -f $dependencies.verified_arch ] + then + mv $dependencies.verified_arch $dependencies + else + rm $dependencies + fi + fi + if [ -s "$dependencies" ] then echo "----------------" >> $logfile @@ -502,7 +632,7 @@ texmfget () { # 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 + # untar only one $edition, untar docs together with -extra edition if [ "$1" = $edition -o docs = $edition ] then cd $texmf @@ -514,22 +644,23 @@ texmfget () { # 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) + echo "Adding files to $( echo $tarball | rev | cut -d'/' -f1 | rev ) ..." 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 + tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1 rm -rf texmf-dist ;; - extra|fonts) + extra) 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 + tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1 rm -rf texmf-dist ;; docs) @@ -540,7 +671,7 @@ texmfget () { 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 + tar rf $tarball --owner=0 --group=0 --sort=name texmf-dist || exit 1 rm -rf texmf-dist fi ;; @@ -548,6 +679,48 @@ texmfget () { fi } +lint () { + +echo "Comparing content of all editions, this may take a while ..."; +cd $TMP +# check if all editions of same VERSION are there, take -base as reference +lint_version=$( ls texlive-base-*tar.xz | head -n1 | cut -d'.' -f2 || exit 1) +if [ -s texlive-extra-$MAJORVERSION.$lint_version.tar.xz \ + -a -s texlive-docs-$MAJORVERSION.$lint_version.tar.xz ] +then + for edition in base extra docs + do + echo "Extracting index of texlive-${edition}-$MAJORVERSION.$lint_version.tar.xz ..." + # don't list directories + tar tf texlive-${edition}-$MAJORVERSION.$lint_version.tar.xz | grep -v '/'$ > $TMP/packages.$edition.lint + done + + # compare content + for edition in base extra docs + do + >$TMP/packages.$edition.lint.dup + case $edition in + base) + echo "check if files of base are present in another edition" + while read line + do + grep ^"$line"$ $TMP/packages.extra.lint >> $TMP/packages.base.lint.dup + grep ^"$line"$ $TMP/packages.docs.lint >> $TMP/packages.base.lint.dup + done < $TMP/packages.$edition.lint + ;; + esac + done +else + echo "Not all editions are present to lint them. Create them first by" + echo "$0 [base|docs|extra]" + echo "bye." + exit 1 +fi + +exit 0 + +} + # Main # release mirror @@ -566,31 +739,36 @@ collections_done=$TMP/done collections_tobedone=$TMP/tobedone corepackages=$TMP/corepackages allcollections=$TMP/allcollections -metafonts=$TMP/metafonts +binary_removed=$TMP/binaries.removed 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 +files_split=$TMP/files.split +platforms="x86_64-linux i386-linux" + +mkdir -p $texmf +cd $TMP case "$1" in - base|docs|extra|fonts) edition=$1; echo "Building $edition tarball ...";; + base|docs|extra) edition=$1;; + lint) lint ;; *) usage; exit 0 ;; esac - -mkdir -p $texmf -cd $TMP + +echo "Building $edition tarball ..." # Set VERSION, get texlive.tlpdb and keep unshorten $db.orig -if [ ! -s ${db}.orig -o ! -s $db ] +if [ ! -s ${db}.orig -o ! -s $db -o ! -s VERSION ] 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 + # keep dependencies/manpages/binfiles/shortdesc/sizes + egrep \ + '^\S|^ RELOC/doc/man|^ texmf-dist/doc/man/man|^ RELOC/doc/info/|^ texmf-dist/doc/info/|^ 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 @@ -604,7 +782,19 @@ grep -B1 ^'category TLCore' $db | grep -v ^'category TLCore' | grep -v ^-- | gr # Make a list of all collections grep ^"name collection-" $db | cut -d' ' -f2 > $allcollections - + +# translate .ARCH to platforms in excludes, to make .ARCH packages excludeable by $global_exclude +for exclude in $global_exclude +do + if [ -n "$(echo $exclude | grep '\.ARCH'$ )" ] + then + for arch in $platforms + do + global_exclude+=" $(echo $exclude | sed "s/\.ARCH$/\.$arch/")" + done + global_exclude=${global_exclude/$exclude/} + fi +done # globally exclude from $corepackages for exclude in $global_exclude do @@ -620,36 +810,34 @@ logfile=$TMP/$VERSION.log >$logfile >$tarball >$collections_done ->$metafonts +>$files_split >$manpages ->$packages_metafont >$packages_manpages >$packages_base >$packages_extra ->$packages_fonts >$packages_base.doc >$packages_extra.doc ->$packages_fonts.doc >$TMP/packages.$edition.meta +>$TMP/packages.$edition.meta.uncompressed +>$TMP/provides.run.$edition +>$TMP/depends.run.$edition +>$binary_removed.$edition -# put the editions base/extra/fonts together +# put the editions base/extra together texmf_editions || exit 1 -# Check if all collections ar part in at least one edition +# Check if all collections are 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 + echo "Error: $collection was not handled." + echo "Edit packages/collections in the texmfget function." | 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 @@ -659,89 +847,203 @@ rm $output rm $output_doc rm $dependencies +# untar special- and manpage packages to be splitted/moved to other editions +# splitting special packages, files index +echo "Prepare index of to be splitted/moved files from -base" [ ! -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 ) +for package in $special_packages do - if [ -n "$(egrep "(fonts/source/public/)" $texmf/$metafont.meta )" ] + echo "Splitting $package" + # special packages have to be in -base, as only here are special + # tasks done to reduce size of -base edition + if [ -z "$( grep ^"$package"$ $packages_base )" ] 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 + echo "$package was not found to be part of -base" + echo "Edit \$special_packages in $0" + echo "to contain only packages from -base, bye." + exit 1 fi + unset relocated + pathprefix="texmf-dist/" + [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] && \ + relocated="-C texmf-dist" && unset pathprefix + # avoid big pdf docs which are also present as html + # move (big)type1 fonts to -extra + # $files_split lists files to be moved from -base -extra + if [ $package = "cm-super" ] + then + # cm-super minimal for -base, create index of extended cm-super + tar tf $texmf/$package.tar.xz | sed \ + "/1000\.pfb$/d;/^tlpkg/d;/\.sty$/d;/\.enc$/d;/\.GS$/d" \ + | tee -a $files_split > $files_split.tmp + else + tar tf $texmf/${package}.tar.xz | sed \ + -ne "/.*doc\/latex\/.*\.pdf$/p" \ + -ne "/.*fonts\/map\/.*\.map$/p" \ + -ne "/.*fonts\/enc\/.*\.enc$/p" \ + -ne "/.*fonts\/afm\/.*\.\(afm\|afm\.gz\)$/p" \ + -ne "/.*fonts\/type1\/.*\.pfb$/p" \ + -ne "/.*fonts\/vf\/.*\.vf$/p" \ + | tee -a $files_split > $files_split.tmp + fi + + if [ $edition = base ] + then + # Calculate package-minimal size, uncompressed and compressed + mkdir -p calculate/texmf-dist + tar xf $texmf/$package.tar.xz -C calculate/texmf-dist --exclude-from=$files_split.tmp + tar cf calculate/calc.tar.xz -I 'xz -9' calculate/texmf-dist + size_minimal=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//") + size_minimal_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )" + sed -i \ + -e "s/^[0-9]* byte, $package: /$size_minimal byte, $package-minimal: /" \ + $output.base.meta + sed -i \ + -e "s/^[0-9]* byte, $package: /$size_minimal_uncompressed byte, $package-minimal: /" \ + $output.base.meta.uncompressed + rm -rf calculate + fi + + if [ $edition = extra ] + then + mkdir -p calculate/texmf-dist + tar xf $texmf/${package}.tar.xz -C calculate/texmf-dist $(paste $files_split.tmp) + tar cf calculate/calc.tar.xz -I 'xz -9' calculate/texmf-dist + size_extended=$(du -bc calculate/calc.tar.xz | tail -n1 | sed "s/[[:space:]].*//") + size_extended_uncompressed="$(xz -l --verbose calculate/calc.tar.xz | \ + grep "Uncompressed size" | cut -d'(' -f2 | cut -d' ' -f1 )" + + # put new sizes in package index uncompressed + sed -i \ + -e "s/^[0-9]* byte, $package: /$size_extended byte, $package-extended: /" \ + $output.extra.meta + sed -i \ + -e "s/^[0-9]* byte, $package: /$size_extended_uncompressed byte, $package-extended: /" \ + $output.extra.meta.uncompressed + rm -rf calculate + fi + + # untar to provide files for -extra + tar xf $texmf/${package}.tar.xz $relocated $(paste $files_split.tmp) + if [ $package = "cm-super" ] + then + # create cm-super- minimal config/maps with 10pt glyphs only + sed "s/cm-super/cm-super-minimal/g" $texmf/texmf-dist/dvips/cm-super/config.cm-super \ + > $texmf/texmf-dist/dvips/cm-super/config-minimal.cm-super + for map in t1 t2a t2b t2c ts1 x2 + do + grep 1000 $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-$map.map \ + > $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-$map.map + sed -i "/.*1000\.pfb/d" $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-$map.map + done + fi + done + +# cleanup +rm $files_split.tmp +# fix relocation in index for splitted packages +sed -i \ + -e "s|^doc|texmf-dist\/doc|g" \ + -e "s|^fonts|texmf-dist\/fonts|g" \ + -e "s|^dvips|texmf-dist\/dvips|g" \ + $files_split + +# sort meta data about added packages +sort -n $output.$edition.meta > $tmpfile +mv $tmpfile $output.$edition.meta +sort -n $output.$edition.meta.uncompressed > $tmpfile +mv $tmpfile $output.$edition.meta.uncompressed + +sort -u $binary_removed.$edition > $tmpfile +mv $tmpfile $binary_removed.$edition + # include manpages/GNU infofiles in -base, write index for later exclution from other editions. -# In -extra there should not be any manpage left. +# In -extra/-docs 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) +for package in $(paste -s $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" + echo "Adding manpage from $package.doc 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 + [ -n "$(grep -w ^"relocated 1" $texmf/$package.meta)" ] \ + && relocated="-C texmf-dist" && unset pathprefix + tar tf $texmf/${package}.doc.tar.xz | sed \ + -ne "/.*doc\/man\/.*\.1$/p" \ + -ne "/.*doc\/man\/.*\.5$/p" \ + -ne "/.*doc\/info\/.*\.info$/p" \ + | tee -a $manpages > $manpages.tmp + # untar to provide files for -/extra/-docs + tar xf $texmf/${package}.doc.tar.xz $relocated $(paste $manpages.tmp) echo "$package" >> $packages_manpages fi done +# cleanup +rm $manpages.tmp +sed -i \ + -e "s/^doc/texmf-dist\/doc/g" \ + $manpages 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) +$(sed "/-linux$/d" $packages_base | sort) 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) +#Splitted packages, type1 fonts/docs moved to -extra: +#$(echo $special_packages) +#EOF + +# add manpages/GNU infofiles to the tarball + tar rf $tarball --owner=0 --group=0 --sort=name \ + texmf-dist/doc/man/ texmf-dist/doc/info/ \ + texmf-dist/packages.$edition.gz \ + || exit 1 +# # add cm-super minimal maps/config +# tar rf $tarball --owner=0 --group=0 --sort=name \ +# texmf-dist/dvips/cm-super/config-minimal.cm-super \ +# --wildcards texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-*.map \ +# || exit 1 + echo "Removing files -from base, splitted from special packages to be included in -extra" + tar f $tarball --delete $(paste $files_split) || exit 1 ;; - 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 + extra) + echo "Removing manpages from $edition which now reside in -base" + tar f $tarball --delete $(paste $manpages) 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 + sed "/-linux$/d" $TMP/packages.$edition | sort >> $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 +# # remove cm-super minimal config, which resides in -base +# rm \ +# $texmf/texmf-dist/dvips/cm-super/config-minimal.cm-super \ +# $texmf/texmf-dist/fonts/map/dvips/cm-super/cm-super-minimal-*.map + tar rf $tarball --owner=0 --group=0 --sort=name \ + --exclude texmf-dist/doc \ + 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 + # add docs splittet from base from special packages, add packages index + # content info, this edition contains all docs from -base 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 + tar rf $tarball --owner=0 --group=0 --sort=name \ + texmf-dist/doc/ \ + texmf-dist/packages.$edition.gz \ + || exit 1 + echo "Removing manpages from $edition which now reside in -base" + tar f $tarball --delete $(paste $manpages) || exit 1 ;; esac + +rm -rf texmf-dist # compress the tarball as everything is in place now echo "Compressing $tarball ..." diff --git a/source/t/texlive/texlive.SlackBuild b/source/t/texlive/texlive.SlackBuild index f68f4608..805b9858 100755 --- a/source/t/texlive/texlive.SlackBuild +++ b/source/t/texlive/texlive.SlackBuild @@ -2,7 +2,7 @@ # TeXLive build script for Slackware -# Copyright 2009, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA +# 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. @@ -26,13 +26,14 @@ # URL: ftp://tug.org/historic/systems/texlive/ # Testrelease: ftp://tug.org/texlive/Images/test/ +# Upstream stable fixes: svn://tug.org/texlive/branches/branch2018/Build/source cd $(dirname $0) ; CWD=$(pwd) PKGNAM=texlive -SOURCEVERSION=${SOURCEVERSION:-20170520} -VERSION=${VERSION:-2017.171108} -BUILD=${BUILD:-7} +SOURCEVERSION=${SOURCEVERSION:-20180414} +VERSION=${VERSION:-2018.180630} +BUILD=${BUILD:-1} TMP=${TMP:-/tmp} PKG=$TMP/package-texlive @@ -99,13 +100,15 @@ sed -i \ # 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 +# Upstream stable fixes +patch -Np0 -i $CWD/patches/20180625.diff || exit 1 -# Thanks to archlinux for the poppler-0.59 API fixup patch: +# The 2018 version of texlive ships with support for poppler-0.57.0 and older, +# but it includes alternative newpoppler files which enable building with +# poppler-0.62.0 or newer. if [ ! "$SYSTEMPOPPLER" = "NO" ]; then - patch -Np1 -i $CWD/patches/texlive-poppler-0.59.patch || exit 1 + mv -v texk/web2c/pdftexdir/pdftoepdf{-newpoppler,}.cc || exit 1 + mv -v texk/web2c/pdftexdir/pdftosrc{-newpoppler,}.cc || exit 1 fi # --with-system-harfbuzz requires graphite2 (and harfbuzz linked to it) @@ -148,36 +151,37 @@ cd build --without-system-harfbuzz \ --disable-aleph \ --disable-dump-share \ + --disable-linked-scripts \ $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 +cd .. - # 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 +# Don't ship .la files: +rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la -cd .. +# 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 + +# use symlinks/scripts from tlnet +mv $PKG/usr/share/texmf-dist/linked_scripts/* $PKG/usr/bin +rmdir $PKG/usr/share/texmf-dist/linked_scripts # 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 @@ -192,7 +196,6 @@ sed -i \ 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 diff --git a/source/t/texlive/texlive.url b/source/t/texlive/texlive.url index 5ff52d66..05024a48 100644 --- a/source/t/texlive/texlive.url +++ b/source/t/texlive/texlive.url @@ -1,6 +1,2 @@ -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 - +http://mirrors.ctan.org/systems/texlive/Source/texlive-20180414-source.tar.xz +http://slackware.schoepfer.info/slackbuilds/texlive/2018/texlive/texlive-base-2018.180630.tar.xz diff --git a/source/x/x11/build/libXScrnSaver b/source/x/x11/build/libXScrnSaver index 00750edc..d00491fd 100644 --- a/source/x/x11/build/libXScrnSaver +++ b/source/x/x11/build/libXScrnSaver @@ -1 +1 @@ -3 +1 diff --git a/source/x/x11/build/libXinerama b/source/x/x11/build/libXinerama index 00750edc..d00491fd 100644 --- a/source/x/x11/build/libXinerama +++ b/source/x/x11/build/libXinerama @@ -1 +1 @@ -3 +1 diff --git a/source/x/x11/build/libXxf86misc b/source/x/x11/build/libXxf86misc index 00750edc..d00491fd 100644 --- a/source/x/x11/build/libXxf86misc +++ b/source/x/x11/build/libXxf86misc @@ -1 +1 @@ -3 +1 |