]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
Add three new files from Andrew Parsloe. These do for AMS-type
[lyx.git] / lib / configure.py
index dcf34c91f8c21b1b03dfe3691a133eb635c78c3d..a11050fb915ae5d0fe6d0bf852f72c193c8032a2 100644 (file)
@@ -8,6 +8,7 @@
 # \author Bo Peng
 # Full author contact details are available in file CREDITS.
 
+from __future__ import print_function
 import glob, logging, os, re, shutil, subprocess, sys, stat
 
 # set up logging
@@ -65,7 +66,10 @@ def cmdOutput(cmd, async = False):
     '''
     if os.name == 'nt':
         b = False
-        cmd = 'cmd /d /c pushd ' + shortPath(os.getcwdu()) + '&' + cmd
+        if sys.version_info[0] < 3:
+            cmd = 'cmd /d /c pushd ' + shortPath(os.getcwdu()) + '&' + cmd
+        else:
+            cmd = 'cmd /d /c pushd ' + shortPath(os.getcwd()) + '&' + cmd
     else:
         b = True
     pipe = subprocess.Popen(cmd, shell=b, close_fds=b, stdin=subprocess.PIPE, \
@@ -117,13 +121,12 @@ def copy_tree(src, dst, preserve_symlinks=False, level=0):
     '''
  
     if not os.path.isdir(src):
-        raise FileError, \
-              "cannot copy tree '%s': not a directory" % src
+        raise FileError("cannot copy tree '%s': not a directory" % src)
     try:
         names = os.listdir(src)
-    except os.error, (errno, errstr):
-        raise FileError, \
-              "error listing files in '%s': %s" % (src, errstr)
+    except os.error as oserror:
+        (errno, errstr) = oserror.args
+        raise FileError("error listing files in '%s': %s" % (src, errstr))
  
     if not os.path.isdir(dst):
         os.makedirs(dst)
@@ -197,7 +200,10 @@ def checkTeXPaths():
             language, encoding = getdefaultlocale()
             if encoding == None:
                 encoding = 'latin1'
-            inpname = shortPath(unicode(tmpfname, encoding)).replace('\\', '/')
+            if sys.version_info[0] < 3:
+                inpname = shortPath(unicode(tmpfname, encoding)).replace('\\', '/')
+            else:
+                inpname = shortPath(str(tmpfname, encoding)).replace('\\', '/')
         else:
             inpname = cmdOutput('cygpath -m ' + tmpfname)
         logname = os.path.basename(re.sub("(?i).ltx", ".log", inpname))
@@ -393,7 +399,7 @@ def addAlternatives(rcs, alt_type):
     if isinstance(alt_type, str):
         alt_tokens = [alt_token % alt_type]
     else:
-        alt_tokens = map(lambda s: alt_token % s, alt_type)
+        alt_tokens = [alt_token % s for s in alt_type]
     for idxx in range(len(rcs)):
         if len(rcs) == 1:
             m = r.match(rcs[0])
@@ -476,16 +482,19 @@ def checkInkscape():
     ''' Check whether Inkscape is available and return the full path (Windows only) '''
     if os.name != 'nt':
         return 'inkscape'
-    import _winreg
-    aReg = _winreg.ConnectRegistry(None, _winreg.HKEY_CLASSES_ROOT)
+    if sys.version_info[0] < 3:
+        import _winreg as winreg
+    else:
+        import winreg
+    aReg = winreg.ConnectRegistry(None, winreg.HKEY_CLASSES_ROOT)
     try:
-        aKey = _winreg.OpenKey(aReg, r"inkscape.svg\DefaultIcon")
-        val = _winreg.QueryValueEx(aKey, "")
+        aKey = winreg.OpenKey(aReg, r"inkscape.svg\DefaultIcon")
+        val = winreg.QueryValueEx(aKey, "")
         return str(val[0]).split('"')[1].replace('.exe', '')
     except EnvironmentError:
         try:
-            aKey = _winreg.OpenKey(aReg, r"Applications\inkscape.exe\shell\open\command")
-            val = _winreg.QueryValueEx(aKey, "")
+            aKey = winreg.OpenKey(aReg, r"Applications\inkscape.exe\shell\open\command")
+            val = winreg.QueryValueEx(aKey, "")
             return str(val[0]).split('"')[1].replace('.exe', '')
         except EnvironmentError:
             return 'inkscape'
@@ -539,37 +548,13 @@ def checkLatex(dtl_tools):
 
 
 def checkLuatex():
-    ''' Check if luatex is there and usable '''
+    ''' Check if luatex is there '''
     path, LUATEX = checkProg('LuaTeX', ['lualatex $$i'])
     path, DVILUATEX = checkProg('LuaTeX (DVI)', ['dvilualatex $$i'])
     if LUATEX != '':
-    # luatex binary is there
-        msg = "checking if LuaTeX is usable ..."
-        # Check if luatex is usable
-        writeToFile('luatest.tex', r'''
-\nonstopmode
-\documentclass{minimal}
-\usepackage{fontspec}
-\begin{document}
-.
-\end{document}
-''')
-        # run lualatex on luatest.tex and check result
-        luatest = cmdOutput(LUATEX + ' luatest.tex')
-        if luatest.find('XeTeX is required to compile this document') != -1:
-            # fontspec/luatex too old! We do not support this version.
-            logger.info(msg + ' no (probably not recent enough)')
-        elif luatest.find('! LaTeX Error: File `fontspec.sty\' not found') != -1:
-            # fontspec missing
-            logger.info(msg + ' no (missing fontspec)')
-        else:
-            # working luatex
-            logger.info(msg + ' yes')
-            addToRC(r'\converter luatex      pdf5       "%s"   "latex=lualatex"' % LUATEX)
-            if DVILUATEX != '':
-                addToRC(r'\converter luatex      dvi3        "%s"      "latex=dvilualatex"' % DVILUATEX)
-        # remove temporary files
-        removeFiles(['luatest.tex', 'luatest.log', 'luatest.aux', 'luatest.pdf'])
+        addToRC(r'\converter luatex      pdf5       "%s"       "latex=lualatex"' % LUATEX)
+    if DVILUATEX != '':
+        addToRC(r'\converter dviluatex   dvi3        "%s"      "latex=dvilualatex"' % DVILUATEX)
 
 
 def checkModule(module):
@@ -605,7 +590,8 @@ def checkFormatEntries(dtl_tools):
         rc_entry = [r'\Format fen        fen     FEN                    "" "%%"        "%%"    ""      ""'])
     #
     checkViewerEditor('a SVG viewer and editor', [inkscape_name],
-        rc_entry = [r'\Format svg        "svg, svgz" SVG                "" "%%" "%%"   "vector,zipped=native"  "image/svg+xml"'],
+        rc_entry = [r'''\Format svg        "svg" SVG                "" "%%" "%%"       "vector"        "image/svg+xml"
+\Format svgz       "svgz" "SVG (compressed)" "" "%%" "%%"      "vector,zipped=native"  ""'''],
         path = [inkscape_path])
     #
     imageformats = r'''\Format bmp        bmp     BMP                    "" "%s"       "%s"    ""      "image/x-bmp"
@@ -626,9 +612,6 @@ def checkFormatEntries(dtl_tools):
     checkViewerEditor('a text editor', ['xemacs', 'gvim', 'kedit', 'kwrite', 'kate', \
         'nedit', 'gedit', 'notepad', 'geany', 'leafpad', 'mousepad'],
         rc_entry = [r'''\Format asciichess asc    "Plain text (chess output)"  "" ""   "%%"    ""      ""
-\Format asciiimage asc    "Plain text (image)"         "" ""   "%%"    ""      ""
-\Format asciixfig  asc    "Plain text (Xfig output)"   "" ""   "%%"    ""      ""
-\Format dateout    tmp    "date (output)"         "" ""        "%%"    ""      ""
 \Format docbook    sgml    DocBook                B  ""        "%%"    "document,menu=export"  ""
 \Format docbook-xml xml   "DocBook (XML)"         "" ""        "%%"    "document,menu=export"  "application/docbook+xml"
 \Format dot        dot    "Graphviz Dot"          "" ""        "%%"    "vector"        "text/vnd.graphviz"
@@ -655,6 +638,8 @@ def checkFormatEntries(dtl_tools):
     checkViewer('gnumeric spreadsheet software', ['gnumeric'],
       rc_entry = [r'''\Format gnumeric gnumeric "Gnumeric spreadsheet" "" ""    "%%"   "document"      "application/x-gnumeric"
 \Format excel      xls    "Excel spreadsheet"      "" "" "%%"    "document"    "application/vnd.ms-excel"
+\Format excel2     xlsx   "MS Excel Office Open XML" "" "" "%%" "document"     "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+\Format html_table html   "HTML Table (for spreadsheets)"      "" "" "%%"    "document"        "text/html"
 \Format oocalc     ods    "OpenDocument spreadsheet" "" "" "%%"    "document"  "application/vnd.oasis.opendocument.spreadsheet"'''])
  #
     checkViewer('an HTML previewer', ['firefox', 'mozilla file://$$p$$i', 'netscape'],
@@ -713,8 +698,7 @@ def checkFormatEntries(dtl_tools):
 \Format word2      docx    "MS Word Office Open XML"               O  "%%"     "%%"    "document,vector,menu=export"   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"'''])
     #
     # entries that do not need checkProg
-    addToRC(r'''\Format date       ""     "date command"          "" ""        ""      ""      ""
-\Format csv        csv    "Table (CSV)"           "" ""        ""      "document"      "text/csv"
+    addToRC(r'''\Format csv        csv    "Table (CSV)"           "" ""        ""      "document"      "text/csv"
 \Format fax        ""      Fax                    "" ""        ""      "document"      ""
 \Format lyx        lyx     LyX                    "" ""        ""      ""      "application/x-lyx"
 \Format lyx13x     13.lyx "LyX 1.3.x"             "" ""        ""      "document"      ""
@@ -722,14 +706,15 @@ def checkFormatEntries(dtl_tools):
 \Format lyx15x     15.lyx "LyX 1.5.x"             "" ""        ""      "document"      ""
 \Format lyx16x     16.lyx "LyX 1.6.x"             "" ""        ""      "document"      ""
 \Format lyx20x     20.lyx "LyX 2.0.x"             "" ""        ""      "document"      ""
-\Format lyx21x     21.lyx "LyX 2.1.x"             "" ""        ""      "document,menu=export"  ""
+\Format lyx21x     21.lyx "LyX 2.1.x"             "" ""        ""      "document"      ""
+\Format lyx22x     22.lyx "LyX 2.2.x"             "" ""        ""      "document,menu=export"  ""
 \Format clyx       cjklyx "CJK LyX 1.4.x (big5)"  "" ""        ""      "document"      ""
 \Format jlyx       cjklyx "CJK LyX 1.4.x (euc-jp)" "" ""       ""      "document"      ""
 \Format klyx       cjklyx "CJK LyX 1.4.x (euc-kr)" "" ""       ""      "document"      ""
 \Format lyxpreview lyxpreview "LyX Preview"       "" ""        ""      ""      ""
-\Format pdftex     pdftex_t PDFTEX                "" ""        ""      ""      ""
+\Format pdftex     "pdftex_t, pdf_tex" PDFTEX                "" ""     ""      ""      ""
 \Format program    ""      Program                "" ""        ""      ""      ""
-\Format pstex      pstex_t PSTEX                  "" ""        ""      ""      ""
+\Format pstex      "pstex_t, ps_tex" PSTEX                  "" ""      ""      ""      ""
 \Format wmf        wmf    "Windows Metafile"      "" ""        ""      "vector"        "image/x-wmf"
 \Format emf        emf    "Enhanced Metafile"     "" ""        ""      "vector"        "image/x-emf"
 \Format wordhtml  "html, htm" "HTML (MS Word)"    "" "" ""     "document"      ""
@@ -774,19 +759,22 @@ def checkConverterEntries():
         rc_entry = [r'''\converter literate   latex      "%%"  ""
 \converter literate   pdflatex      "%%"       ""
 \converter literate   xetex         "%%"       ""
-\converter literate   luatex        "%%"       ""'''])
+\converter literate   luatex        "%%"       ""
+\converter literate   dviluatex     "%%"       ""'''])
     #
     checkProg('a Sweave -> LaTeX converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxsweave.R $$p$$i $$p$$o $$e $$r'],
         rc_entry = [r'''\converter sweave   latex      "%%"    ""
 \converter sweave   pdflatex   "%%"    ""
 \converter sweave   xetex      "%%"    ""
-\converter sweave   luatex     "%%"    ""'''])
+\converter sweave   luatex     "%%"    ""
+\converter sweave   dviluatex  "%%"    ""'''])
     #
     checkProg('a knitr -> LaTeX converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r'],
         rc_entry = [r'''\converter knitr   latex      "%%"     ""
 \converter knitr   pdflatex   "%%"     ""
 \converter knitr   xetex      "%%"     ""
-\converter knitr   luatex     "%%"     ""'''])
+\converter knitr   luatex     "%%"     ""
+\converter knitr   dviluatex  "%%"     ""'''])
     #
     checkProg('a Sweave -> R/S code converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxstangle.R $$i $$e $$r'], 
         rc_entry = [ r'\converter sweave      r      "%%"    ""' ])
@@ -904,7 +892,7 @@ def checkConverterEntries():
     checkProg('a PS to EPS converter', ['ps2eps -- < $$i > $$o'],
         rc_entry = [ r'\converter eps2       eps      "%%"     ""' ])
     #
-    checkProg('a PDF to PS converter', ['pdf2ps $$i $$o', 'pdftops $$i $$o'],
+    checkProg('a PDF to PS converter', ['pdftops $$i $$o', 'pdf2ps $$i $$o'],
         rc_entry = [ r'\converter pdf         ps        "%%"   ""' ])
     # Only define a converter from pdf6 for graphics
     checkProg('a PDF to EPS converter', ['pdftops -eps -f 1 -l 1 $$i $$o'],
@@ -944,7 +932,10 @@ def checkConverterEntries():
     if fig2dev == "fig2dev":
         addToRC(r'''\converter fig        eps        "fig2dev -L eps $$i $$o"  ""
 \converter fig        ppm        "fig2dev -L ppm $$i $$o"      ""
+\converter fig        svg        "fig2dev -L svg $$i $$o"      ""
 \converter fig        png        "fig2dev -L png $$i $$o"      ""
+\converter svg        pdftex     "python -tt $$s/scripts/svg2pdftex.py $$i $$o" ""
+\converter svg        pstex      "python -tt $$s/scripts/svg2pstex.py $$i $$o" ""
 \converter fig        pdftex     "python -tt $$s/scripts/fig2pdftex.py $$i $$o"        ""
 \converter fig        pstex      "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""''')
     #
@@ -957,16 +948,22 @@ def checkConverterEntries():
 \converter tgif       png        "tgif -print -color -png -o $$d $$i"  ""
 \converter tgif       pdf6       "tgif -print -color -pdf -stdout $$i > $$o"   ""'''])
     #
-    checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'],
+    checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
         rc_entry = [ r'\converter wmf        eps        "%%"   ""'])
     #
-    checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i'],
+    checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
         rc_entry = [ r'\converter emf        eps        "%%"   ""'])
+    #
+    checkProg('a WMF -> PDF converter', [inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
+        rc_entry = [ r'\converter wmf        pdf6        "%%"  ""'])
+    #
+    checkProg('an EMF -> PDF converter', [inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
+        rc_entry = [ r'\converter emf        pdf6        "%%"  ""'])
     # Only define a converter to pdf6 for graphics
     checkProg('an EPS -> PDF converter', ['epstopdf'],
         rc_entry = [ r'\converter eps        pdf6       "epstopdf --outfile=$$o $$i"   ""'])
     #
-    checkProg('an EPS -> PNG converter', ['convert $$i $$o'],
+    checkProg('an EPS -> PNG converter', ['magick $$i $$o', 'convert $$i $$o'],
         rc_entry = [ r'\converter eps        png        "%%"   ""'])
     #
     # no agr -> pdf6 converter, since the pdf library used by gracebat is not
@@ -985,28 +982,40 @@ def checkConverterEntries():
             r'''\converter dot        eps        "dot -Teps $$i -o $$o"        ""
 \converter dot        png        "dot -Tpng $$i -o $$o"        ""'''])
     #
-    checkProg('a Dia -> PNG converter', ['dia -e $$o -t png $$i'],
-        rc_entry = [ r'\converter dia        png        "%%"   ""'])
+    path, dia = checkProg('a Dia -> Image converter', ['dia'])
+    if dia == 'dia':
+        addToRC(r'''\converter dia        png        "dia -e $$o -t png $$i"   ""
+\converter dia        eps        "dia -e $$o -t eps $$i"       ""
+\converter dia        svg        "dia -e $$o -t svg $$i"       ""''')
+
     #
-    checkProg('a Dia -> EPS converter', ['dia -e $$o -t eps $$i'],
-        rc_entry = [ r'\converter dia        eps        "%%"   ""'])
     # Actually, this produces EPS, but with a wrong bounding box (usually A4 or letter).
     # The eps2->eps converter then fixes the bounding box by cropping.
     # Although unoconv can convert to png and pdf as well, do not define
     # odg->png and odg->pdf converters, since the bb would be too large as well.
     checkProg('an OpenDocument -> EPS converter', ['libreoffice -headless -nologo -convert-to eps $$i', 'unoconv -f eps --stdout $$i > $$o'],
         rc_entry = [ r'\converter odg        eps2       "%%"   ""'])
+    #
+    checkProg('a SVG (compressed) -> SVG converter', ['gunzip -c $$i > $$o'],
+        rc_entry = [ r'\converter svgz       svg        "%%"   ""'])
+    #
+    checkProg('a SVG -> SVG (compressed) converter', ['gzip -c $$i > $$o'],
+        rc_entry = [ r'\converter svg        svgz       "%%"   ""'])
     # Only define a converter to pdf6 for graphics
+    # Prefer rsvg-convert over inkscape since it is faster (see http://www.lyx.org/trac/ticket/9891)
     checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'],
-        rc_entry = [ r'\converter svg        pdf6       "%%"    ""'],
+        rc_entry = [ r'''\converter svg        pdf6       "%%"    ""
+\converter svgz       pdf6       "%%"    ""'''],
         path = ['', inkscape_path])
     #
     checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_name + ' --file=$$i --export-area-drawing --without-gui --export-eps=$$o'],
-        rc_entry = [ r'\converter svg        eps        "%%"    ""'],
+        rc_entry = [ r'''\converter svg        eps        "%%"    ""
+\converter svgz       eps        "%%"    ""'''],
         path = ['', inkscape_path])
     #
     checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_name + ' --without-gui --file=$$i --export-png=$$o'],
-        rc_entry = [ r'\converter svg        png        "%%"    ""'],
+        rc_entry = [ r'''\converter svg        png        "%%"    "",
+\converter svgz       png        "%%"    ""'''],
         path = ['', inkscape_path])
 
     #
@@ -1014,7 +1023,13 @@ def checkConverterEntries():
     checkProg('a spreadsheet -> latex converter', ['ssconvert'],
        rc_entry = [ r'''\converter gnumeric latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
 \converter oocalc latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
-\converter excel  latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""'''])
+\converter excel  latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
+\converter excel2 latex "ssconvert --export-type=Gnumeric_html:latex $$i $$o" ""
+\converter gnumeric html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
+\converter oocalc html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
+\converter excel  html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
+\converter excel2 html_table "ssconvert --export-type=Gnumeric_html:html40frag $$i $$o" ""
+'''])
 
     path, lilypond = checkProg('a LilyPond -> EPS/PDF/PNG converter', ['lilypond'])
     if (lilypond != ''):
@@ -1058,6 +1073,7 @@ def checkConverterEntries():
                 addToRC(r'\converter lilypond-book pdflatex "lilypond-book --safe --pdf --latex-program=pdflatex --lily-output-dir=ly-pdf $$i" ""')
                 addToRC(r'\converter lilypond-book xetex    "lilypond-book --safe --pdf --latex-program=xelatex --lily-output-dir=ly-pdf $$i"  ""')
                 addToRC(r'\converter lilypond-book luatex   "lilypond-book --safe --pdf --latex-program=lualatex --lily-output-dir=ly-pdf $$i" ""')
+                addToRC(r'\converter lilypond-book dviluatex "lilypond-book --safe --latex-program=dvilualatex --lily-output-dir=ly-eps $$i" ""')
                 logger.info('+  found LilyPond-book version %s.' % version_number)
             else:
                 logger.info('+  found LilyPond-book, but version %s is too old.' % version_number)
@@ -1085,21 +1101,21 @@ def checkConverterEntries():
     # Entries that do not need checkProg
     addToRC(r'''
 \converter csv        lyx        "python -tt $$s/scripts/csv2lyx.py $$i $$o"   ""
-\converter date       dateout    "python -tt $$s/scripts/date.py %d-%m-%Y > $$o"       ""
 \converter docbook    docbook-xml "cp $$i $$o" "xml"
 \converter fen        asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" ""
-\converter lyx        lyx13x     "python -tt $$s/lyx2lyx/lyx2lyx -t 221 $$i > $$o"     ""
-\converter lyx        lyx14x     "python -tt $$s/lyx2lyx/lyx2lyx -t 245 $$i > $$o"     ""
-\converter lyx        lyx15x     "python -tt $$s/lyx2lyx/lyx2lyx -t 276 $$i > $$o"     ""
-\converter lyx        lyx16x     "python -tt $$s/lyx2lyx/lyx2lyx -t 345 $$i > $$o"     ""
-\converter lyx        lyx20x     "python -tt $$s/lyx2lyx/lyx2lyx -t 413 $$i > $$o"     ""
-\converter lyx        lyx21x     "python -tt $$s/lyx2lyx/lyx2lyx -t 474 $$i > $$o"     ""
-\converter lyx        clyx       "python -tt $$s/lyx2lyx/lyx2lyx -c big5 -t 245 $$i > $$o"     ""
-\converter lyx        jlyx       "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp -t 245 $$i > $$o"   ""
-\converter lyx        klyx       "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr -t 245 $$i > $$o"   ""
-\converter clyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c big5 $$i > $$o"    ""
-\converter jlyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp $$i > $$o"  ""
-\converter klyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr $$i > $$o"  ""
+\converter lyx        lyx13x     "python -tt $$s/lyx2lyx/lyx2lyx -V 1.3 -o $$o $$i"    ""
+\converter lyx        lyx14x     "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o $$i"    ""
+\converter lyx        lyx15x     "python -tt $$s/lyx2lyx/lyx2lyx -V 1.5 -o $$o $$i"    ""
+\converter lyx        lyx16x     "python -tt $$s/lyx2lyx/lyx2lyx -V 1.6 -o $$o $$i"    ""
+\converter lyx        lyx20x     "python -tt $$s/lyx2lyx/lyx2lyx -V 2.0 -o $$o $$i"    ""
+\converter lyx        lyx21x     "python -tt $$s/lyx2lyx/lyx2lyx -V 2.1 -o $$o $$i"    ""
+\converter lyx        lyx22x     "python -tt $$s/lyx2lyx/lyx2lyx -V 2.2 -o $$o $$i"    ""
+\converter lyx        clyx       "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c big5   $$i"  ""
+\converter lyx        jlyx       "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_jp $$i"  ""
+\converter lyx        klyx       "python -tt $$s/lyx2lyx/lyx2lyx -V 1.4 -o $$o -c euc_kr $$i"  ""
+\converter clyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c big5   -o $$o $$i" ""
+\converter jlyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_jp -o $$o $$i" ""
+\converter klyx       lyx        "python -tt $$s/lyx2lyx/lyx2lyx -c euc_kr -o $$o $$i" ""
 \converter lyxpreview png        "python -tt $$s/scripts/lyxpreview2bitmap.py --png"   ""
 \converter lyxpreview ppm        "python -tt $$s/scripts/lyxpreview2bitmap.py --ppm"   ""
 ''')
@@ -1206,7 +1222,7 @@ def processLayoutFile(file, bool_docbook):
                 prereq_latex = checkForClassExtension(classname)
             else:
                 prereq_list = optAll[1:-1].split(',')
-                prereq_list = map(checkForClassExtension, prereq_list)
+                prereq_list = list(map(checkForClassExtension, prereq_list))
                 prereq_latex = ','.join(prereq_list)
             prereq_docbook = {'true':'', 'false':'docbook'}[bool_docbook]
             prereq = {'LaTeX':prereq_latex, 'DocBook':prereq_docbook}[classtype]
@@ -1515,7 +1531,10 @@ def rescanTeXFiles():
     if not os.path.isfile( os.path.join(srcdir, 'scripts', 'TeXFiles.py') ):
         logger.error("configure: error: cannot find TeXFiles.py script")
         sys.exit(1)
-    tfp = cmdOutput("python -tt " + '"' + os.path.join(srcdir, 'scripts', 'TeXFiles.py') + '"')
+    interpreter = sys.executable
+    if interpreter == '':
+        interpreter = "python"
+    tfp = cmdOutput(interpreter + " -tt " + '"' + os.path.join(srcdir, 'scripts', 'TeXFiles.py') + '"')
     logger.info(tfp)
     logger.info("\tdone")
 
@@ -1540,7 +1559,7 @@ if __name__ == '__main__':
     ## Parse the command line
     for op in sys.argv[1:]:   # default shell/for list is $*, the options
         if op in [ '-help', '--help', '-h' ]:
-            print '''Usage: configure [options]
+            print('''Usage: configure [options]
 Options:
     --help                   show this help lines
     --keep-temps             keep temporary files (for debug. purposes)
@@ -1548,7 +1567,7 @@ Options:
     --without-latex-config   do not run LaTeX to determine configuration
     --with-version-suffix=suffix suffix of binary installed files
     --binary-dir=directory   directory of binary installed files
-'''
+''')
             sys.exit(0)
         elif op == '--without-kpsewhich':
             lyx_kpsewhich = False
@@ -1561,7 +1580,7 @@ Options:
         elif op[0:13] == '--binary-dir=':
             lyx_binary_dir = op[13:]
         else:
-            print "Unknown option", op
+            print("Unknown option %s" % op)
             sys.exit(1)
     #
     # check if we run from the right directory