Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package mftrace for openSUSE:Factory checked 
in at 2021-01-30 13:56:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mftrace (Old)
 and      /work/SRC/openSUSE:Factory/.mftrace.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mftrace"

Sat Jan 30 13:56:57 2021 rev:19 rq:867894 version:1.2.20

Changes:
--------
--- /work/SRC/openSUSE:Factory/mftrace/mftrace.changes  2018-10-31 
13:21:49.319036007 +0100
+++ /work/SRC/openSUSE:Factory/.mftrace.new.28504/mftrace.changes       
2021-01-30 13:57:54.994412149 +0100
@@ -1,0 +2,11 @@
+Tue Jan 05 04:24:13 UTC 2021 - Wang Jun <[email protected]>
+
+- Update to version 1.2.20
+  * Fix p.add_option() issue
+  * Fix parsing of italic correction
+  * Fix FTP_DIR.
+  * Migrate package to python3
+  * Add manpage for gf2pbm
+  * Quieten fontforge invocation
+
+-------------------------------------------------------------------

Old:
----
  mftrace-1.2.18.tar.gz

New:
----
  gf2pbm.1
  mftrace-1.2.20.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mftrace.spec ++++++
--- /var/tmp/diff_new_pack.jK6oCz/_old  2021-01-30 13:57:55.690413322 +0100
+++ /var/tmp/diff_new_pack.jK6oCz/_new  2021-01-30 13:57:55.690413322 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package mftrace
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,13 +17,14 @@
 
 
 Name:           mftrace
-Version:        1.2.18
+Version:        1.2.20
 Release:        0
 Summary:        Scalable PostScript Fonts for MetaFont
 License:        GPL-2.0-only
 Group:          Productivity/Publishing/TeX/Utilities
-Url:            http://lilypond.org/mftrace/
+URL:            http://lilypond.org/mftrace/
 Source0:        
http://lilypond.org/download/sources/mftrace/%{name}-%{version}.tar.gz
+Source1:        gf2pbm.1
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  potrace
@@ -44,6 +45,7 @@
 %setup -q
 
 %build
+cp %{SOURCE1} .
 autoreconf -fi
 %configure \
        --with-pic
@@ -56,7 +58,8 @@
 
 %files
 %defattr(-, root, root)
-%doc ChangeLog COPYING README.txt
+%license COPYING
+%doc ChangeLog README.txt
 %{_bindir}/*
 %{_datadir}/mftrace
 %{_mandir}/man1/*

++++++ gf2pbm.1 ++++++
.TH gf2pbm 1 "February 11, 2002"
.SH NAME
gf2pbm \- convert a character from a GF font file to PBM format
.SH SYNOPSIS
.B gf2pbm
.RI [ options ] " GF-file"
.SH DESCRIPTION
This manual page documents briefly the
.B gf2pbm
command.
.B gf2pbm
is a program that converts a single character from a METAFONT-produced
GF font file to PBM format.  It is used internally by
.BR mftrace (1)
to feed to
.BR autotrace (1)
to create a Postscript outline description of the character.
.SH OPTIONS
.TP
.B \-b
Dump a bitmap file.
.TP
.B \-s
Show glyph size.
.TP
.BI \-n " NUM"
Process glyph number
.IR NUM .
.TP
.BI \-o " FILE"
Output to
.I FILE
instead of
.IR stdout .
.TP
.B \-h
Show summary of options.
.TP
.B \-d
Display debugging information.
.SH "EXIT STATUS"
.B gf2pbm
exits with status 0 if successful, status 1 if the requested glyph did
not exist and status 2 if there was some other error.
.SH SEE ALSO
.BR mf (1),
.BR pktrace (1).
.br
.SH AUTHOR
.B gf2pbm
is based on Paul Vojta's Xdvi, and was munged by Han-Wen Nienhuys
<[email protected]>.  This manual page was written by Julian Gilbey
<[email protected]>, for the Debian GNU/Linux system (but may be used by
others).
++++++ mftrace-1.2.18.tar.gz -> mftrace-1.2.20.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/GNUmakefile.in 
new/mftrace-1.2.20/GNUmakefile.in
--- old/mftrace-1.2.18/GNUmakefile.in   2011-12-06 01:54:20.000000000 +0100
+++ new/mftrace-1.2.20/GNUmakefile.in   2019-09-16 10:16:45.000000000 +0200
@@ -14,7 +14,7 @@
 srcdir=@srcdir@
 VPATH=$(srcdir)
 NAME=mftrace
-MANPAGES=mftrace.1
+MANPAGES=mftrace.1 gf2pbm.1
 VERSION=@VERSION@
 distdir=$(NAME)-$(VERSION)
 prefix=@prefix@
@@ -27,8 +27,8 @@
 
 
 ## up/download.
[email protected]:www/download/sources/mftrace/
[email protected]:www/mftrace/
[email protected]:www/downloads/sources/mftrace/
[email protected]:www/mftrace/
 GIT_MASTER_SITE=git+ssh://[email protected]/hanwen/mftrace.git
 
 all: compile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/README.texi 
new/mftrace-1.2.20/README.texi
--- old/mftrace-1.2.18/README.texi      2011-12-06 01:52:57.000000000 +0100
+++ new/mftrace-1.2.20/README.texi      2019-09-16 10:05:39.000000000 +0200
@@ -41,7 +41,7 @@
 @section Download
 
 @itemize
-@item 
@uref{http://lilypond.org/download/sources/mftrace/mftrace-@mftversion{}.tar.gz}
+@item 
@uref{http://lilypond.org/downloads/sources/mftrace/mftrace-@mftversion{}.tar.gz}
 @item GIT at @uref{https://github.com/hanwen/mftrace}
 @end itemize
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/README.txt 
new/mftrace-1.2.20/README.txt
--- old/mftrace-1.2.18/README.txt       2011-12-06 01:54:31.000000000 +0100
+++ new/mftrace-1.2.20/README.txt       2019-09-16 10:17:38.000000000 +0200
@@ -7,64 +7,59 @@
 1.1 Introduction
 ================
 
-`mftrace' is a small Python program that lets you trace a TeX bitmap
+'mftrace' is a small Python program that lets you trace a TeX bitmap
 font into a PFA or PFB font (A PostScript Type1 Scalable Font) or TTF
 (TrueType) font.  It is licensed under the GNU GPL.
 
    Scalable fonts offer many advantages over bitmaps, as they allow
-documents to render correctly at many printer resolutions. Moreover,
+documents to render correctly at many printer resolutions.  Moreover,
 Ghostscript can generate much better PDF, if given scalable PostScript
 fonts.
 
-   Versions prior to 1.0.5 were called `pktrace'.
+   Versions prior to 1.0.5 were called 'pktrace'.
 
 1.2 Download
 ============
 
-   *
-     `http://lilypond.org/download/sources/mftrace/mftrace-1.2.18.tar.gz'
-
-   * GIT at `https://github.com/hanwen/mftrace'
+   * 
+     <http://lilypond.org/downloads/sources/mftrace/mftrace-1.2.20.tar.gz>
+   * GIT at <https://github.com/hanwen/mftrace>
 
 1.3 Required
 ============
 
-`mftrace' is a thin Python wrapper around some other programs that do
+'mftrace' is a thin Python wrapper around some other programs that do
 the real work: a tracing program and t1asm.  To run mftrace you need:
-   * A tracing program:       autotrace >= 0.30 (see
-     `http://autotrace.sourceforge.net'       or potrace (see
-     `http://potrace.sourceforge.net').
+   * A tracing program: autotrace >= 0.30 (see
+     <http://autotrace.sourceforge.net> or potrace (see
+     <http://potrace.sourceforge.net>).
 
      Potrace is recommended as it runs quicker than autotrace.
 
-   * Python-2.2 or later. See `http://www.python.org/'
-
-   * t1utils. See `http://www.lcdf.org/~eddietwo/type/'
-
+   * Python-2.2 or later.  See <http://www.python.org/>
+   * t1utils.  See <http://www.lcdf.org/~eddietwo/type/>
    * TeX-your tex installation should include
         * kpsewhich,
-
         * MetaFont
 
 1.4 Recommended
 ===============
 
    * A recent version (040215 or newer) of FontForge
-     (http://fontforge.sourceforge.net). Some of `mftrace'
+     (http://fontforge.sourceforge.net).  Some of 'mftrace'
      functionality requires FontForge to be present on user's system.
-     This includes rounding to integer, simplifying and autohinting
-     font outlines, as well as generating any output formats except
-     PFA, PFB and AFM. You should not request any of these features
-     using `mftrace' options if you don't like your font to be run
-     through FontForge (note that in this case you also have to
-     explicitly specify `--noround' to disable rounding to integer).
+     This includes rounding to integer, simplifying and autohinting font
+     outlines, as well as generating any output formats except PFA, PFB
+     and AFM. You should not request any of these features using
+     'mftrace' options if you don't like your font to be run through
+     FontForge (note that in this case you also have to explicitly
+     specify '--noround' to disable rounding to integer).
 
-   * Alternatively, you need GhostScript with its `printafm' utility,
-     available somethere in your PATH. `mftrace' uses `printafm' to
+   * Alternatively, you need GhostScript with its 'printafm' utility,
+     available somethere in your PATH. 'mftrace' uses 'printafm' to
      generate AFM files in case there is no need to process the font
      with FontForge.
 
-
 1.5 Red Hat
 ===========
 
@@ -72,6 +67,7 @@
 
              rpmbuild -tb mftrace-VERSION.tar.gz
 
+
 1.6 Debian GNU/Linux
 ====================
 
@@ -79,77 +75,73 @@
 install all requirements by running (as root):
 
          apt-get install mftrace
+
    If you wish to also install the FontForge package to simplify and
 autohint the font, then run the command
 
          apt-get install fontforge
 
+
 1.7 Install
 ===========
 
-Install the prerequite packages. Then run
+Install the prerequite packages.  Then run
 
          ./configure
          make install
-   in the mftrace directory. Run as follows:
+
+   in the mftrace directory.  Run as follows:
 
      mftrace cmr10
 
+
 1.8 Invoking mftrace.
 =====================
 
 Command line options:
-`--formats=LIST'
-     A comma-separated list of formats to generate. Choices include:
-     AFM,  PFA, PFB, TTF and SVG. Default is to generate a PFA file.
-     Note that  `fontforge' (formerly called `pfaedit') needs to be
-     installed  in order to generate any format except PFA or PFB. For
-     generating AFM  you need either `fontforge' or `ghostscript'.
-
-`-e,--encoding=ENC'
-     Use encoding file ENC. Encoding files used by `mftrace' are
-     basically in the  GhostScript/dvips format, but you may use a
-     special  `.notavail' glyph name in order to tell mftrace not to
-     process  a specific glyph. If this option is not specified,
-     mftrace will try to  determine the encoding file automatically,
-     from the encoding specified  in the TFM file.
-
-`--glyphs=LIST'
-     Only process glyphs in LIST, which is a  comma-delimited  list of
+'--formats=LIST'
+     A comma-separated list of formats to generate.  Choices include:
+     AFM, PFA, PFB, TTF and SVG. Default is to generate a PFA file.
+     Note that 'fontforge' (formerly called 'pfaedit') needs to be
+     installed in order to generate any format except PFA or PFB. For
+     generating AFM you need either 'fontforge' or 'ghostscript'.
+'-e,--encoding=ENC'
+     Use encoding file ENC.  Encoding files used by 'mftrace' are
+     basically in the GhostScript/dvips format, but you may use a
+     special '.notavail' glyph name in order to tell mftrace not to
+     process a specific glyph.  If this option is not specified, mftrace
+     will try to determine the encoding file automatically, from the
+     encoding specified in the TFM file.
+'--glyphs=LIST'
+     Only process glyphs in LIST, which is a comma-delimited list of
      decimal numbers or ranges.
             --glyphs 1-10,50,55,90-100
-
-`--gffile=NAME'
-     =  Take glyphs from file NAME.
-
-`--grid GRIDSIZE'
+'--gffile=NAME'
+     = Take glyphs from file NAME.
+'--grid GRIDSIZE'
      Set reciprocal grid size in em units multiplied by ratio
-     magnification/1000.  For example `--grid 10 --magnification 1000'
+     magnification/1000.  For example '--grid 10 --magnification 1000'
      will round coordinates of control points to 1/10 of em unit.
-     Useful simultaneously with `--noround'  option. Default GRIDSIZE
-     value is 1, i. e. round to integer.
-
-`-h,--help'
+     Useful simultaneously with '--noround' option.  Default GRIDSIZE
+     value is 1, i.  e.  round to integer.
+'-h,--help'
      help on options.
-
-`-k,--keep'
-     Retain all temporary files in the directory `mftrace.dir/'. This
+'-k,--keep'
+     Retain all temporary files in the directory 'mftrace.dir/'.  This
      is useful for debugging problems.
-
-`--keep-trying'
-     Try to continue if external programs called by mftrace fail. If
-     METAFONT  crashes with overflow errors, but nevertheless outputs a
-     GF file, try to  process its output as is (useful for some buggy
-     fonts, see below). If  potrace/autotrace fails to trace a specific
-     character, first try it with  a less smoothed curve, and if that
+'--keep-trying'
+     Try to continue if external programs called by mftrace fail.  If
+     METAFONT crashes with overflow errors, but nevertheless outputs a
+     GF file, try to process its output as is (useful for some buggy
+     fonts, see below).  If potrace/autotrace fails to trace a specific
+     character, first try it with a less smoothed curve, and if that
      fails, skip the character.
 
-     By default mftrace outputs `trace-bug-FONTNAME-NUMBER.pbm' and
+     By default mftrace outputs 'trace-bug-FONTNAME-NUMBER.pbm' and
      stops the process with a request to file a bugreport.
-
-`--magnification'
-     The magnification to use for the PFA file. The default is 1000. The
-     larger the more precise the PFA file will be. However, when
+'--magnification'
+     The magnification to use for the PFA file.  The default is 1000.
+     The larger the more precise the PFA file will be.  However, when
      magnification is too large METAFONT can crash with overflow errors.
 
      Sadly, many MF fonts contain resolution checks
@@ -160,81 +152,72 @@
             if dots_per_inch > (1500 / design_size):
               ...
 
-`--noround'
+'--noround'
      Don't round coordinates of control points to integer values.
-     Useful simultaneously  with `--grid' option. Disabled by default.
+     Useful simultaneously with '--grid' option.  Disabled by default.
 
-`-o,--output-base=FILE'
+'-o,--output-base=FILE'
      Output to FILE.pfa or FILE.pfb.
-
-`--simplify'
-     Pass the font through FontForge for automatic  simplification and
+'--simplify'
+     Pass the font through FontForge for automatic simplification and
      hinting.
-
-`--tfmfile=FILE'
+'--tfmfile=FILE'
      Use FILE for the TFM file.  This file is needed to determine at
      what resolution to run MetaFont.
-
-`-V,--verbose'
-     Be verbose: print all commands as they are invoked. This is useful
+'-V,--verbose'
+     Be verbose: print all commands as they are invoked.  This is useful
      for debugging.
-
-`-v,--version'
+'-v,--version'
      Print version number
-
-`--dos-kpath'
+'--dos-kpath'
      Try to kludge up the paths coming from MikTeX for a cygwin
-     environment. If this doesn't work, specify `--tfmfile' and
-     `--encoding' manually.
-
-`-w,--warranty'
+     environment.  If this doesn't work, specify '--tfmfile' and
+     '--encoding' manually.
+'-w,--warranty'
      show warranty and copyright
-
-`--potrace'
+'--potrace'
      use Potrace (default).
-
-`--autotrace'
+'--autotrace'
      use AutoTrace.
 
-`-D,--define=SYMBOL=VALUE'
-     Set the font info SYMBOL to the given VALUE. For example
-     `-DFamilyName=Foo' sets the font family name to `Foo'.
+'-D,--define=SYMBOL=VALUE'
+     Set the font info SYMBOL to the given VALUE.  For example
+     '-DFamilyName=Foo' sets the font family name to 'Foo'.
 
      Mftrace tries to fill in sensible values for the FontName,
-     FamilyName, FullName and Weight fields. It does so by guessing
-     values for the CM font series. For other fonts, it tries to read
-     an AFM file (which is not likely to exist). Suggestions for a more
+     FamilyName, FullName and Weight fields.  It does so by guessing
+     values for the CM font series.  For other fonts, it tries to read
+     an AFM file (which is not likely to exist).  Suggestions for a more
      generic way to handle this are welcome.
 
-
    Mftrace uses kpathsea for finding fonts, so any kpathsea variable can
-be used to fine-tune which files should be loaded.  For example, you
-can set `MFINPUTS' to specify which paths to search for `.mf' files.
+be used to fine-tune which files should be loaded.  For example, you can
+set 'MFINPUTS' to specify which paths to search for '.mf' files.
 
    Additional options may be passed to the backend program (potrace or
-autotrace) with the `MFTRACE_BACKEND_OPTIONS' environment variable.
+autotrace) with the 'MFTRACE_BACKEND_OPTIONS' environment variable.
 
 1.9 Discussion
 ==============
 
-Why use `mftrace' over textrace (http://textrace.sourceforge.net)?
-Textrace and mftrace are functionally similar. However, mftrace is
+Why use 'mftrace' over textrace (http://textrace.sourceforge.net)?
+Textrace and mftrace are functionally similar.  However, mftrace is
 quicker, more cleanly written and can be installed using standard
-methods. Additionally, textrace requires perl, ghostscript and dvips.
+methods.  Additionally, textrace requires perl, ghostscript and dvips.
 
-   How about MetaFog (http://www.truetex.com)? MetaFog operates
+   How about MetaFog (http://www.truetex.com)?  MetaFog operates
 directly on the curves that generate the bitmap font, its outlines will
-probably be smaller and better. However, MetaFog is a proprietary
+probably be smaller and better.  However, MetaFog is a proprietary
 product: its source code is not available, and it will only run on a
 limited number of platforms.
 
-   How about MetaType1 (ftp://bop.eps.gda.pl/pub/metatype1/)?
-MetaType1 is an approach that puts severe constraints on what may be
-done in a font program. It does not work for fonts containing overlaps
-and shaped pens.
+   How about MetaType1 (ftp://bop.eps.gda.pl/pub/metatype1/)?  MetaType1
+is an approach that puts severe constraints on what may be done in a
+font program.  It does not work for fonts containing overlaps and shaped
+pens.
 
    How about FontForge (http://fontforge.sourceforge.net/) itself?
-FontForge is an interactive editor, but it can be scripted. Since it
+FontForge is an interactive editor, but it can be scripted.  Since it
 supports bitmap tracing and TeX bitmap fonts, it is possible to
 duplicate the functionality of mftrace.  However, out of the box,
 FontForge does not recognize TeX encodings.
@@ -242,13 +225,12 @@
 1.10 Bugs and todo
 ==================
 
-   * Environment variables containing relative directories,   such as
+   * Environment variables containing relative directories, such as
      MFINPUTS or TFMINPUTS, are not handled correctly.
 
    * Discuss fonts & copyright.
-
-   * Submit `tfm.py' to www.python.org. `tfm.py'  is a python   module
-     to parse Tex Font Metric file.
+   * Submit 'tfm.py' to www.python.org.  'tfm.py' is a python module to
+     parse Tex Font Metric file.
 
    Should you encounter any bug or problem, then please send a bugreport
 to Han-Wen Nienhuys <[email protected]>.
@@ -262,14 +244,14 @@
 ============
 
 Gf2pbm, the utility to convert a MetaFont GF file to a PBM file was
-based on Paul Vojta's Xdvi. The license notice is reproduced below.
+based on Paul Vojta's Xdvi.  The license notice is reproduced below.
 
    Thanks to all bughunters and contributors: Andrey V. Panov, Geoffrey
 Alan Washburn, Julian Gilbey (http://www.maths.qmul.ac.uk/~jdg/)
 Gu"nther Spahlinger, Richard Mahoney, Stanislav Brabec, and Thomas
 Bushnell BSG.
 
-     Copyright (c) 1990-1999  Paul Vojta
+     Copyright (c) 1990-1999 Paul Vojta
 
      Permission is hereby granted, free of charge, to any person
      obtaining a copy of this software and associated documentation
@@ -285,12 +267,12 @@
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-     NONINFRINGEMENT.  IN NO EVENT SHALL PAUL VOJTA BE LIABLE FOR ANY
+     NONINFRINGEMENT. IN NO EVENT SHALL PAUL VOJTA BE LIABLE FOR ANY
      CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
      CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-   The rest of the package mftrace  script itself is licensed under the
+   The rest of the package mftrace script itself is licensed under the
 GNU General Public License (http://www.gnu.org/licenses/gpl.txt).
 
 1.13 See also
@@ -298,7 +280,6 @@
 
    * Type1 font specification
      (http://partners.adobe.com/asn/developer/pdfs/tn/T1Format.pdf)
-
    * Supplement to the Type1 specification
      (http://partners.adobe.com/asn/developer/pdfs/tn/5015.Type1_Supp.pdf).
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/afm.py new/mftrace-1.2.20/afm.py
--- old/mftrace-1.2.18/afm.py   2006-12-21 01:55:38.000000000 +0100
+++ new/mftrace-1.2.20/afm.py   2019-09-16 10:05:39.000000000 +0200
@@ -48,5 +48,5 @@
 
 if __name__ == '__main__':
     i = read_afm_file  (sys.argv[1])
-    print i, i.FullName, i.FontName
+    print(i, i.FullName, i.FontName)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/configure new/mftrace-1.2.20/configure
--- old/mftrace-1.2.18/configure        2011-12-06 01:49:10.000000000 +0100
+++ new/mftrace-1.2.20/configure        2019-09-16 10:14:24.000000000 +0200
@@ -1,11 +1,9 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.69.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -134,6 +132,31 @@
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) 
>/dev/null 2>&1; then :
   emulate sh
@@ -167,7 +190,8 @@
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  
as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" 
as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" 
as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -212,21 +236,25 @@
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -328,6 +356,14 @@
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -449,6 +485,10 @@
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX 
shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -483,16 +523,16 @@
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -504,28 +544,8 @@
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -1121,8 +1141,6 @@
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't 
use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1348,9 +1366,9 @@
 if $ac_init_version; then
   cat <<\_ACEOF
 configure
-generated by GNU Autoconf 2.68
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1513,7 +1531,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -1863,8 +1881,8 @@
 ac_config_headers="$ac_config_headers config.h:config.h.in"
 
 
-# Extract the first word of "${PYTHON:-python}", so it can be a program name 
with args.
-set dummy ${PYTHON:-python}; ac_word=$2
+# Extract the first word of "${PYTHON3:-python3}", so it can be a program name 
with args.
+set dummy ${PYTHON3:-python3}; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_path_PYTHON+:} false; then :
@@ -1881,7 +1899,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -1890,7 +1908,7 @@
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="-echo no python"
+  test -z "$ac_cv_path_PYTHON" && ac_cv_path_PYTHON="-echo no python3"
   ;;
 esac
 fi
@@ -1922,7 +1940,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_AUTOTRACE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -1963,7 +1981,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_POTRACE="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -1988,7 +2006,7 @@
 
 
 
-export VERSION="1.2.18"
+export VERSION="1.2.20"
 
 
 
@@ -2015,7 +2033,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -2055,7 +2073,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -2108,7 +2126,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -2149,7 +2167,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -2207,7 +2225,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -2251,7 +2269,7 @@
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x 
"$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" 
>&5
     break 2
@@ -2697,8 +2715,7 @@
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -2938,7 +2955,7 @@
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -3004,7 +3021,7 @@
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -3816,16 +3833,16 @@
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -3885,28 +3902,16 @@
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -3928,7 +3933,7 @@
 # values after options handling.
 ac_log="
 This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -3990,10 +3995,10 @@
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.68,
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -4081,7 +4086,7 @@
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create 
--no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create 
--no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/configure.in 
new/mftrace-1.2.20/configure.in
--- old/mftrace-1.2.18/configure.in     2011-12-06 01:48:57.000000000 +0100
+++ new/mftrace-1.2.20/configure.in     2019-09-16 10:14:11.000000000 +0200
@@ -1,12 +1,12 @@
 AC_INIT(mftrace.py)
 AC_CONFIG_HEADER(config.h:config.h.in)
 
-AC_PATH_PROG(PYTHON, ${PYTHON:-python}, -echo no python)
+AC_PATH_PROG(PYTHON, ${PYTHON3:-python3}, -echo no python3)
 AC_PATH_PROG(AUTOTRACE, autotrace, none)
 AC_PATH_PROG(POTRACE, potrace, none)
 AC_SUBST(PYTHON)
 
-export VERSION="1.2.18"
+export VERSION="1.2.20"
 
 AC_SUBST(VERSION)
 AC_SUBST(EXEEXT)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/mftrace.py 
new/mftrace-1.2.20/mftrace.py
--- old/mftrace-1.2.18/mftrace.py       2011-03-12 16:00:52.000000000 +0100
+++ new/mftrace-1.2.20/mftrace.py       2019-09-16 10:11:14.000000000 +0200
@@ -21,7 +21,6 @@
 # Copyright (c)  2001--2006 by
 #  Han-Wen Nienhuys, Jan Nieuwenhuizen
 
-import string
 import os
 import optparse
 import sys
@@ -36,11 +35,11 @@
 libdir = '@libdir@'
 exec_prefix = '@exec_prefix@'
 
-def interpolate (str):
-    str = string.replace (str, '{', '(')
-    str = string.replace (str, '}', ')s')
-    str = string.replace (str, '$', '%')
-    return str
+def interpolate (strng):
+    strng = strng.replace ('{', '(')
+    strng = strng.replace ('}', ')s')
+    strng = strng.replace ('$', '%')
+    return strng
 
 if prefix != '@' + 'prefix@':
     exec_prefix = interpolate (exec_prefix) % vars ()
@@ -73,9 +72,9 @@
     def _ (s):
         return s
 
-def shell_escape_filename (str):
-    str = re.sub ('([\'" ])', r'\\\1', str)
-    return str
+def shell_escape_filename (strng):
+    strng = re.sub ('([\'" ])', r'\\\1', strng)
+    return strng
 
 def identify (port):
     port.write ('%s %s\n' % (program_name, program_version))
@@ -227,7 +226,7 @@
     
     if options.dos_kpath:
         orig = p
-        p = string.lower (p)
+        p = p.lower ()
         p = re.sub ('^([a-z]):', '/cygdrive/\\1', p)
         p = re.sub ('\\\\', '/', p)
         sys.stderr.write ("Got `%s' from kpsewhich, using `%s'\n" % (orig, p))
@@ -310,17 +309,17 @@
 def read_encoding (file):
     sys.stderr.write (_ ("Using encoding file: `%s'\n") % file)
 
-    str = open (file).read ()
-    str = re.sub ("%.*", '', str)
-    str = re.sub ("[\n\t \f]+", ' ', str)
-    m = re.search ('/([^ ]+) \[([^\]]+)\] def', str)
+    strng = open (file).read ()
+    strng = re.sub ("%.*", '', strng)
+    strng = re.sub ("[\n\t \f]+", ' ', strng)
+    m = re.search ('/([^ ]+) \[([^\]]+)\] def', strng)
     if not m:
         error ("Encoding file is invalid")
 
     name = m.group (1)
     cod = m.group (2)
     cod = re.sub ('[ /]+', ' ', cod)
-    cods = string.split (cod)
+    cods = cod.split ()
 
     return (name, cods)
 
@@ -341,8 +340,8 @@
 def autotrace_path_to_type1_ops (at_file, bitmap_metrics, tfm_wid, 
magnification):
     inv_scale = 1000.0 / magnification
 
-    (size_y, size_x, off_x, off_y) = map (lambda m, s = inv_scale: m * s,
-                       bitmap_metrics)
+    (size_y, size_x, off_x, off_y) = list(map (lambda m, s = inv_scale: m * s,
+                       bitmap_metrics))
     ls = open (at_file).readlines ()
     bbox = (10000, 10000, -10000, -10000)
 
@@ -361,15 +360,15 @@
         ell = ls[0]
         ls = ls[1:]
 
-        toks = string.split (ell)
+        toks = ell.split ()
 
         if len (toks) < 1:
             continue
         cmd = toks[-1]
-        args = map (lambda m, s = inv_scale: s * float (m),
-              toks[:-1])
+        args = list(map (lambda m, s = inv_scale: s * float (m),
+              toks[:-1]))
         if options.round_to_int:
-            args = zip_to_pairs (map (round, args))
+            args = zip_to_pairs (list(map (round, args)))
         else:
             args = zip_to_pairs (args)
         commands.append ((cmd, args))
@@ -402,15 +401,13 @@
         a = na
         c = expand[c]
         if options.round_to_int:
-            a = map (lambda x: '%d' % int (round (x)),
-                unzip_pairs (a))
+            a = ['%d' % int (round (x)) for x in unzip_pairs (a)]
         else:
-            a = map (lambda x: '%d %d div' \
+            a = ['%d %d div' \
                 % (int (round (x * options.grid_scale/inv_scale)),
-                  int (round (options.grid_scale/inv_scale))),
-                unzip_pairs (a))
+                  int (round (options.grid_scale/inv_scale))) for x in 
unzip_pairs (a)]
 
-        t1_outline = t1_outline + ' %s %s\n' % (string.join (a), c)
+        t1_outline = t1_outline + ' %s %s\n' % (' '.join (a), c)
 
     t1_outline = t1_outline + ' endchar '
     t1_outline = '{\n %s } |- \n' % t1_outline
@@ -421,9 +418,9 @@
 def potrace_path_to_type1_ops (at_file, bitmap_metrics, tfm_wid, 
magnification):
     inv_scale = 1000.0 / magnification
 
-    (size_y, size_x, off_x, off_y) = map (lambda m,
+    (size_y, size_x, off_x, off_y) = list(map (lambda m,
                        s = inv_scale: m * s,
-                       bitmap_metrics)
+                       bitmap_metrics))
     ls = open (at_file).readlines ()
     bbox =  (10000, 10000, -10000, -10000)
 
@@ -442,13 +439,13 @@
         if ell == 'fill\n':
             continue
 
-        toks = string.split (ell)
+        toks = ell.split ()
 
         if len (toks) < 1:
             continue
         cmd = toks[-1]
-        args = map (lambda m, s = inv_scale: s * float (m),
-              toks[:-1])
+        args = list(map (lambda m, s = inv_scale: s * float (m),
+              toks[:-1]))
         args = zip_to_pairs (args)
         commands.append ((cmd, args))
 
@@ -461,8 +458,8 @@
 
     z = (0.0, size_y - off_y - 1.0)
     for (c, args) in commands:
-        args = map (lambda x: (x[0] * (1.0 / options.grid_scale),
-                   x[1] * (1.0 / options.grid_scale)), args)
+        args = [(x[0] * (1.0 / options.grid_scale),
+                   x[1] * (1.0 / options.grid_scale)) for x in args]
 
         if c == 'moveto':
             args = [(args[0][0] - z[0], args[0][1] - z[1])]
@@ -505,15 +502,13 @@
             t1_outline += ' closepath '
 
         if options.round_to_int:
-            args = map (lambda x: '%d' % int (round (x)),
-                  unzip_pairs (args))
+            args = ['%d' % int (round (x)) for x in unzip_pairs (args)]
         else:
-            args = map (lambda x: '%d %d div' \
+            args = ['%d %d div' \
                   % (int (round (x*options.grid_scale/inv_scale)),
-                   int (round (options.grid_scale/inv_scale))),
-                  unzip_pairs (args))
+                   int (round (options.grid_scale/inv_scale))) for x in 
unzip_pairs (args)]
 
-        t1_outline = t1_outline + '  %s %s\n' % (string.join (args), c)
+        t1_outline = t1_outline + '  %s %s\n' % (' '.join (args), c)
 
     t1_outline = t1_outline + ' endchar '
     t1_outline = '{\n %s } |- \n' % t1_outline
@@ -521,8 +516,8 @@
     return (bbox, t1_outline)
 
 def read_gf_dims (name, c):
-    str = popen ('%s/gf2pbm -n %d -s %s' % (bindir, c, name)).read ()
-    m = re.search ('size: ([0-9]+)+x([0-9]+), offset: 
\(([0-9-]+),([0-9-]+)\)', str)
+    strng = popen ('%s/gf2pbm -n %d -s %s' % (bindir, c, name)).read ()
+    m = re.search ('size: ([0-9]+)+x([0-9]+), offset: 
\(([0-9-]+),([0-9-]+)\)', strng)
 
     return tuple (map (int, m.groups ()))
 
@@ -588,14 +583,14 @@
     to_type1 (t1os, font_bbox, fontname, encoding, magnification, fontinfo)
 
 def ps_encode_encoding (encoding):
-    str = ' %d array\n0 1 %d {1 index exch /.notdef put} for\n' \
+    strng = ' %d array\n0 1 %d {1 index exch /.notdef put} for\n' \
        % (len (encoding), len (encoding)-1)
 
     for i in range (0, len (encoding)):
         if encoding[i] != ".notavail":
-            str = str + 'dup %d /%s put\n' % (i, encoding[i])
+            strng = strng + 'dup %d /%s put\n' % (i, encoding[i])
 
-    return str
+    return strng
 
 
 def gen_unique_id (dict):
@@ -677,7 +672,7 @@
 
         # need one extra entry for .notdef
         'CharStringsLen': len (outlines) + 1,
-        'CharStrings': string.join (outlines),
+        'CharStrings': ' '.join (outlines),
         'CharBBox': '0 0 0 0',
     }
 
@@ -705,7 +700,7 @@
     return (llx, lly, urx, ury)
 
 def get_binary (name):
-    search_path = string.split (os.environ['PATH'], ':')
+    search_path = os.environ['PATH'].split (':')
     for p in search_path:
         nm = os.path.join (p, name)
         if os.path.exists (nm):
@@ -721,11 +716,11 @@
 
     stat = 1
     if fontforge_cmd:
-        stat = system ("%s -usage > pfv 2>&1 " % fontforge_cmd,
+        stat = system ("%s --help > pfv 2>&1 " % fontforge_cmd,
                ignore_error = 1)
 
         if stat != 0:
-            warning ("Command `%s -usage' failed.  Cannot simplify or convert 
to TTF.\n" % fontforge_cmd)
+            warning ("Command `%s --help' failed.  Cannot simplify or convert 
to TTF.\n" % fontforge_cmd)
             return ''
 
     if fontforge_cmd == 'pfaedit' \
@@ -864,8 +859,8 @@
 
         open ('to-ttf.pe', 'w').write (pe_script)
         if options.verbose:
-            print 'Fontforge script', pe_script
-        system ("%s -script to-ttf.pe %s %s" % (ff_command,
+            print ('Fontforge script', pe_script)
+        system ("%s -quiet -script to-ttf.pe %s %s" % (ff_command,
               shell_escape_filename (raw_name), shell_escape_filename 
(options.tfm_file)))
     elif ff_needed and (options.simplify or options.round_to_int or 'ttf' in 
formats or 'svg' in formats):
         error(_ ("fontforge is not installed; could not perform requested 
command"))
@@ -882,11 +877,11 @@
             if get_binary("printafm"):
                 get_afm (t1_path, options.tfm_file, encoding, fontname + 
'.afm')
             else:
-                error(_ ("Neither fontforge nor ghostscript is not installed; 
could not perform requested command"))
+                error(_ ("Neither fontforge nor ghostscript is installed; 
could not perform requested command"))
 
 
 def getenv (var, default):
-    if os.environ.has_key (var):
+    if var in os.environ:
         return os.environ[var]
     else:
         return default
@@ -974,7 +969,7 @@
                   action="store_true",
                   dest="keep_temp_dir",
                   help=_ ("Keep all output in directory %s.dir") % 
program_name)
-    p.add_option ('','--magnification',
+    p.add_option ('--magnification',
                   dest="magnification",
                   metavar="MAG",
                   default=1000.0,
@@ -989,11 +984,12 @@
                   dest="formats",
                   default=[],
                   help=_("Which formats to generate (choices: AFM, PFA, PFB, 
TTF, SVG)"))
-    p.add_option ('', '--simplify',
+    p.add_option ('--simplify',
                   action="store_true",
                   dest="simplify",
+                  default=False,
                   help=_ ("Simplify using fontforge"))
-    p.add_option ('', '--gffile',
+    p.add_option ('--gffile',
                   dest="gffile",
                   help= _("Use gf FILE instead of running Metafont"))
     p.add_option ('-I', '--include',
@@ -1001,24 +997,23 @@
                   action="append",
                   default=[],
                   help=_("Add to path for searching files"))
-    p.add_option ('','--glyphs',
+    p.add_option ('--glyphs',
                   default=[],
                   action="append",
                   dest="glyphs",
                   metavar="LIST",
                   help= _('Process only these glyphs.  LIST is comma 
separated'))
-    p.add_option ('', '--tfmfile',
+    p.add_option ('--tfmfile',
                   metavar='FILE',
                   action='store',
                   dest='tfm_file')
-    
     p.add_option ('-e', '--encoding',
                   metavar="FILE",
                   action='store',
                   dest="encoding_file",
                   default="",
                   help= _ ("Use encoding file FILE"))
-    p.add_option ('','--keep-trying',
+    p.add_option ('--keep-trying',
                   dest='keep_trying',
                   default=False,
                   action="store_true",
@@ -1026,26 +1021,29 @@
     p.add_option ('-w', '--warranty',
                   action="store_true",
                   help=_ ("show warranty and copyright"))
-    p.add_option ('','--dos-kpath',
+    p.add_option ('--dos-kpath',
+                  action='store_true',
                   dest="dos_kpath",
                   help=_("try to use Miktex kpsewhich"))
-    p.add_option ('', '--potrace',
+    p.add_option ('--potrace',
+                  action='store_true',
                   dest='potrace',
                   help=_ ("Use potrace"))
-    p.add_option ('', '--autotrace',
+    p.add_option ('--autotrace',
+                  action='store_true',
                   dest='autotrace',
                   help=_ ("Use autotrace"))
-    p.add_option ('', '--no-afm',
+    p.add_option ('--no-afm',
                   action='store_false',
                   dest="read_afm",
                   default=True,
                   help=_("Don't read AFM file"))
-    p.add_option ('','--noround',
-                  action="store_false",
+    p.add_option ('--noround',
+                  action='store_false',
                   dest='round_to_int',
                   default=True,
-                  help= ("Do not round coordinates of control points to 
integer values (use with --grid)"))
-    p.add_option ('','--grid',
+                  help=_("Do not round coordinates of control points to 
integer values (use with --grid)"))
+    p.add_option ('--grid',
                   metavar='SCALE',
                   dest='grid_scale',
                   type='float',
@@ -1059,7 +1057,7 @@
     
     global options
     (options, files) = p.parse_args ()
-
+    
     if not files:
         sys.stderr.write ('Need argument on command line \n')
         p.print_help ()
@@ -1092,9 +1090,9 @@
     
     glyph_range = []
     for r in options.glyphs: 
-        glyph_subrange = map (int, string.split (r, '-'))
+        glyph_subrange = list(map (int, r.split('-')))
         if len (glyph_subrange) == 2 and glyph_subrange[0] < glyph_subrange[1] 
+ 1:
-            glyph_range += range (glyph_subrange[0], glyph_subrange[1] + 1)
+            glyph_range += list(range(glyph_subrange[0], glyph_subrange[1] + 
1))
         else:
             glyph_range.append (glyph_subrange[0])
 
@@ -1346,7 +1344,7 @@
         if tfm_try:
             options.tfm_file = tfm_try
 
-    if not os.environ.has_key ("MFINPUTS"):
+    if "MFINPUTS" not in os.environ:
          os.environ["MFINPUTS"] = os.getcwd () + ":"
 
     ## must change dir before calling mktextfm.
@@ -1377,7 +1375,7 @@
 
     if not encoding_file:
         codingfile = 'tex256.enc'
-        if not coding_dict.has_key (metric.coding):
+        if metric.coding not in coding_dict:
             sys.stderr.write ("Unknown encoding `%s'; assuming tex256.\n" % 
metric.coding)
         else:
             codingfile = coding_dict[metric.coding]
@@ -1389,7 +1387,7 @@
     (enc_name, encoding) = read_encoding (encoding_file)
 
     if not len (options.glyphs):
-        options.glyphs = range (0, len (encoding))
+        options.glyphs = list(range(0, len (encoding)))
 
     if not options.gffile:
         # run mf
@@ -1415,11 +1413,15 @@
 afmfile = ''
 backend_options = getenv ('MFTRACE_BACKEND_OPTIONS', '')
 def main ():
+    global temp_dir
+
     files = parse_command_line ()
     identify (sys.stderr)
     
     for filename in files:
         do_file (filename)
+    if temp_dir:
+        del temp_dir
     sys.exit (exit_value)
 
 if __name__ =='__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/mftrace.spec 
new/mftrace-1.2.20/mftrace.spec
--- old/mftrace-1.2.18/mftrace.spec     2011-12-06 01:54:31.000000000 +0100
+++ new/mftrace-1.2.20/mftrace.spec     2019-09-16 10:17:37.000000000 +0200
@@ -1,7 +1,7 @@
 #-*-RPM-SPEC-*-
 Summary: Generate scalable fonts for TeX
 Name: mftrace
-Version: 1.2.18
+Version: 1.2.20
 Release: 1
 URL: http://www.cs.uu.nl/~hanwen/mftrace
 Source0: %{name}-%{version}.tar.gz
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mftrace-1.2.18/tfm.py new/mftrace-1.2.20/tfm.py
--- old/mftrace-1.2.18/tfm.py   2006-12-21 01:55:38.000000000 +0100
+++ new/mftrace-1.2.20/tfm.py   2019-09-16 10:05:39.000000000 +0200
@@ -21,9 +21,9 @@
 def compose_tfm_number (seq):
     shift = (len (seq)-1)*8
 
-    cs = 0L
+    cs = 0
     for b in seq:
-        cs = cs  + (long (ord (b)) << shift)
+        cs = cs  + (int (b) << shift)
         shift = shift - 8
     return cs
 
@@ -34,15 +34,15 @@
 #
 class Tfm_reader:
     def get_string (self):
-        b = ord (self.left[0])
-        s =self.left[1:1 + b]
+        b = self.left[0]
+        s = (self.left[1:1 + b]).decode('ascii')
         self.left = self.left[1+b:]
         
         return s
     def get_byte (self):
         b = self.left [0]
         self.left= self.left[1:]
-        return ord(b)
+        return b
 
     def extract_fixps (self, count):
         fs = [0.0] * count
@@ -63,10 +63,9 @@
             d = (b & 0x0f)
 
             b = self.get_byte ()
-
-            # huh? why >> 6 ? 
-            i = (b & 0xfc) >> 6
+            i = (b & 0xfc) >> 2
             tag = (b & 0x3)
+
             rem = self.get_byte ()
 
             # rem is used as index for the ligature table.
@@ -83,7 +82,6 @@
         return None
     
     def __init__ (self, f):
-        self.string = f
         self.left = f
 
         self.file_length = self.get_number (2);
@@ -159,7 +157,7 @@
             return 0
         
         tup = self.chars[code - self.start_code]
-        return tup[0] <> 0
+        return tup[0] != 0
     
     def get_char (self,code):
         tup = self.chars[code - self.start_code]
@@ -176,10 +174,10 @@
 
 
 def read_tfm_file (fn):
-    reader =Tfm_reader (open (fn).read ())
+    reader =Tfm_reader (open (fn, 'rb').read ())
     return reader.get_tfm ()
 
 if __name__=='__main__':
     t = read_tfm_file  (sys.argv[1])
-    print t, t.design_size,  t.coding
+    print(t, t.design_size,  t.coding)
 

Reply via email to