X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fconfigure.py;h=a8515f30e6ed5c4dccd2851becd2107b80414336;hb=0c7bd9a57f2a308bb9659200eda3b7e45f8d5d3c;hp=9a817c8ea0600139f1cfdbdeacdef8c3bac57662;hpb=78252f1f6a2450a7609b1f671102b9d389a7b2bf;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 9a817c8ea0..a8515f30e6 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -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) @@ -166,7 +169,7 @@ def checkUpgrade(): logger.debug('previous = ' + previous) if os.path.isdir( previous ): logger.info('Found directory "%s".', previous) - copy_tree( previous, cwd ) + copy_tree( previous, cwd, True ) logger.info('Content copied to directory "%s".', cwd) return @@ -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)) @@ -229,7 +235,7 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): for searching but the whole string is used to replace %% for a rc_entry. So, feel free to add '$$i' etc for programs. - path: additional pathes + path: additional paths (will be prepended to the program name) rc_entry: entry to outfile, can be 1. emtpy: no rc entry will be added @@ -250,6 +256,11 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): sys.exit(2) logger.info('checking for ' + description + '...') ## print '(' + ','.join(progs) + ')', + additional_path = path + path = os.environ["PATH"].split(os.pathsep) + additional_path + extlist = [''] + if "PATHEXT" in os.environ: + extlist = extlist + os.environ["PATHEXT"].split(os.pathsep) global java, perl for idx in range(len(progs)): # ac_prog may have options, ac_word is the command name @@ -260,10 +271,6 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): if ac_word.endswith('.pl') and perl == '': continue msg = '+checking for "' + ac_word + '"... ' - path = os.environ["PATH"].split(os.pathsep) + path - extlist = [''] - if "PATHEXT" in os.environ: - extlist = extlist + os.environ["PATHEXT"].split(os.pathsep) for ac_dir in path: if hasattr(os, "access") and not os.access(ac_dir, os.F_OK): continue @@ -277,6 +284,8 @@ def checkProg(description, progs, rc_entry = [], path = [], not_found = ''): ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word))) elif ac_word.endswith('.pl'): ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word))) + elif ac_dir in additional_path: + ac_prog = ac_prog.replace(ac_word, r'\"%s\"' % (os.path.join(ac_dir, ac_word))) # write rc entries for this command if len(rc_entry) == 1: addToRC(rc_entry[0].replace('%%', ac_prog)) @@ -302,6 +311,11 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], sys.exit(2) logger.info('checking for ' + description + '...') ## print '(' + ','.join(progs) + ')', + additional_path = path + path = os.environ["PATH"].split(os.pathsep) + additional_path + extlist = [''] + if "PATHEXT" in os.environ: + extlist = extlist + os.environ["PATHEXT"].split(os.pathsep) found_prime = False real_ac_dir = '' real_ac_word = not_found @@ -315,10 +329,6 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], if ac_word.endswith('.pl') and perl == '': continue msg = '+checking for "' + ac_word + '"... ' - path = os.environ["PATH"].split(os.pathsep) + path - extlist = [''] - if "PATHEXT" in os.environ: - extlist = extlist + os.environ["PATHEXT"].split(os.pathsep) found_alt = False for ac_dir in path: if hasattr(os, "access") and not os.access(ac_dir, os.F_OK): @@ -335,6 +345,8 @@ def checkProgAlternatives(description, progs, rc_entry = [], alt_rc_entry = [], ac_prog = ac_prog.replace(ac_word, r'%s -jar \"%s\"' % (java, os.path.join(ac_dir, ac_word))) elif ac_word.endswith('.pl'): ac_prog = ac_prog.replace(ac_word, r'%s -w \"%s\"' % (perl, os.path.join(ac_dir, ac_word))) + elif ac_dir in additional_path: + ac_prog = ac_prog.replace(ac_word, r'\"%s\"' % (os.path.join(ac_dir, ac_word))) # write rc entries for this command if found_prime == False: if len(rc_entry) == 1: @@ -387,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]) @@ -466,6 +478,26 @@ def checkDTLtools(): dtl_tools = False return dtl_tools +def checkInkscape(): + ''' Check whether Inkscape is available and return the full path (Windows only) ''' + if os.name != 'nt': + return 'inkscape' + 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, "") + 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, "") + return str(val[0]).split('"')[1].replace('.exe', '') + except EnvironmentError: + return 'inkscape' def checkLatex(dtl_tools): ''' Check latex, return lyx_check_config ''' @@ -516,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): @@ -581,8 +589,10 @@ def checkFormatEntries(dtl_tools): checkViewerEditor('a FEN viewer and editor', ['xboard -lpf $$i -mode EditPosition'], rc_entry = [r'\Format fen fen FEN "" "%%" "%%" "" ""']) # - checkViewerEditor('a SVG viewer and editor', ['inkscape'], - rc_entry = [r'\Format svg "svg, svgz" SVG "" "%%" "%%" "vector,zipped=native" "image/svg+xml"']) + checkViewerEditor('a SVG viewer and editor', [inkscape_name], + 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" \Format gif gif GIF "" "%s" "%s" "" "image/gif" @@ -602,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" @@ -678,16 +685,18 @@ def checkFormatEntries(dtl_tools): rc_entry = [r'\Format noteedit not Noteedit "" "%%" "%%" "vector" ""']) # checkViewerEditor('an OpenDocument viewer', ['libreoffice', 'lwriter', 'lowriter', 'oowriter', 'swriter', 'abiword'], - rc_entry = [r'''\Format odt odt "OpenDocument" "" "%%" "%%" "document,vector,menu=export" "application/vnd.oasis.opendocument.text" + rc_entry = [r'''\Format odt odt "OpenDocument (tex4ht)" "" "%%" "%%" "document,vector,menu=export" "application/vnd.oasis.opendocument.text" +\Format odt2 odt "OpenDocument (eLyXer)" "" "%%" "%%" "document,vector,menu=export" "application/vnd.oasis.opendocument.text" +\Format odt3 odt "OpenDocument (Pandoc)" "" "%%" "%%" "document,vector,menu=export" "application/vnd.oasis.opendocument.text" \Format sxw sxw "OpenOffice.Org (sxw)" "" "" "" "document,vector" "application/vnd.sun.xml.writer"''']) # checkViewerEditor('a Rich Text and Word viewer', ['libreoffice', 'lwriter', 'lowriter', 'oowriter', 'swriter', 'abiword'], rc_entry = [r'''\Format rtf rtf "Rich Text Format" "" "%%" "%%" "document,vector,menu=export" "application/rtf" -\Format word doc "MS Word" W "%%" "%%" "document,vector,menu=export" "application/msword"''']) +\Format word doc "MS Word" W "%%" "%%" "document,vector,menu=export" "application/msword" +\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" "" @@ -695,7 +704,8 @@ 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" "" @@ -779,11 +789,17 @@ def checkConverterEntries(): # eLyXer: search as an executable (elyxer.py, elyxer) path, elyxer = checkProg('a LyX -> HTML converter', - ['elyxer.py --nofooter --directory $$r $$i $$o'], + ['elyxer.py --nofooter --directory $$r $$i $$o', 'elyxer --nofooter --directory $$r $$i $$o'], rc_entry = [ r'\converter lyx html "%%" ""' ]) path, elyxer = checkProg('a LyX -> HTML (MS Word) converter', - ['elyxer.py --nofooter --html --directory $$r $$i $$o'], + ['elyxer.py --nofooter --html --directory $$r $$i $$o', 'elyxer --nofooter --html --directory $$r $$i $$o'], rc_entry = [ r'\converter lyx wordhtml "%%" ""' ]) + path, elyxer = checkProg('a LyX -> OpenDocument (eLyXer) converter', + ['elyxer.py --html --nofooter --unicode --directory $$r $$i $$o', 'elyxer --html --nofooter --unicode --directory $$r $$i $$o'], + rc_entry = [ r'\converter lyx odt2 "%%" ""' ]) + path, elyxer = checkProg('a LyX -> Word converter', + ['elyxer.py --html --nofooter --unicode --directory $$r $$i $$o', 'elyxer --html --nofooter --unicode --directory $$r $$i $$o'], + rc_entry = [ r'\converter lyx word "%%" ""' ]) if elyxer.find('elyxer') >= 0: addToRC(r'''\copier html "python -tt $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''') addToRC(r'''\copier wordhtml "python -tt $$s/scripts/ext_copy.py -e html,png,jpg,jpeg,css $$i $$o"''') @@ -820,6 +836,12 @@ def checkConverterEntries(): # checkProg('an OpenDocument -> LaTeX converter', ['w2l -clean $$i'], rc_entry = [ r'\converter odt latex "%%" ""' ]) + # + checkProg('an Open Document (Pandoc) -> LaTeX converter', ['pandoc -s -f odt -o $$o -t latex $$i'], + rc_entry = [ r'\converter odt3 latex "%%" ""' ]) + # + checkProg('a MS Word Office Open XML converter -> LaTeX', ['pandoc -s -f docx -o $$o -t latex $$i'], + rc_entry = [ r'\converter word2 latex "%%" ""' ]) # Only define a converter to pdf6, otherwise the odt format could be # used as an intermediate step for export to pdf, which is not wanted. checkProg('an OpenDocument -> PDF converter', ['unoconv -f pdf --stdout $$i > $$o'], @@ -830,7 +852,7 @@ def checkConverterEntries(): # directly available as application. # On SuSE the scripts have a .sh suffix, and on debian they are in /usr/share/tex4ht/ # Both SuSE and debian have oolatex - checkProg('a LaTeX -> Open Document converter', [ + checkProg('a LaTeX -> Open Document (tex4ht) converter', [ 'oolatex $$i', 'mk4ht oolatex $$i', 'oolatex.sh $$i', '/usr/share/tex4ht/oolatex $$i', 'htlatex $$i \'xhtml,ooffice\' \'ooffice/! -cmozhtf\' \'-coo\' \'-cvalidate\''], rc_entry = [ r'\converter latex odt "%%" "needaux"' ]) @@ -838,6 +860,12 @@ def checkConverterEntries(): checkProg('a LaTeX -> RTF converter', ['latex2rtf -p -S -o $$o $$i', 'latex2rt -p -S -o $$o $$i'], rc_entry = [ r'\converter latex rtf "%%" "needaux"' ]) # + checkProg('a LaTeX -> Open Document (Pandoc) converter', ['pandoc -s -f latex -o $$o -t odt $$i'], + rc_entry = [ r'\converter latex odt3 "%%" ""' ]) + # + checkProg('a LaTeX -> MS Word Office Open XML converter', ['pandoc -s -f latex -o $$o -t docx $$i'], + rc_entry = [ r'\converter latex word2 "%%" ""' ]) + # checkProg('a RTF -> HTML converter', ['unrtf --html $$i > $$o'], rc_entry = [ r'\converter rtf html "%%" ""' ]) # Do not define a converter to pdf6, ps is a pure export format @@ -859,7 +887,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'], @@ -912,16 +940,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 @@ -951,15 +985,28 @@ def checkConverterEntries(): # 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 - checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-pdf=$$o'], - rc_entry = [ r'\converter svg pdf6 "%%" ""']) + # 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 "%%" "" +\converter svgz pdf6 "%%" ""'''], + path = ['', inkscape_path]) # - checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', 'inkscape --file=$$i --export-area-drawing --without-gui --export-eps=$$o'], - rc_entry = [ r'\converter svg eps "%%" ""']) + 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 "%%" "" +\converter svgz eps "%%" ""'''], + path = ['', inkscape_path]) # - checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', 'inkscape --without-gui --file=$$i --export-png=$$o'], - rc_entry = [ r'\converter svg png "%%" ""']) + 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 "%%" "", +\converter svgz png "%%" ""'''], + path = ['', inkscape_path]) # # gnumeric/xls/ods to tex @@ -1037,21 +1084,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" "" ''') @@ -1143,8 +1190,8 @@ def processLayoutFile(file, bool_docbook): return x.strip() classname = file.split(os.sep)[-1].split('.')[0] # return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article} - p = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - q = re.compile(r'\DeclareCategory{(.*)}') + p = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + q = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') classdeclaration = "" categorydeclaration = '""' for line in open(file).readlines(): @@ -1158,7 +1205,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] @@ -1239,8 +1286,8 @@ def checkLatexConfig(check_config, bool_docbook): # Construct the list of classes to test for. # build the list of available layout files and convert it to commands # for chkconfig.ltx - declare = re.compile(r'\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}') - category = re.compile(r'\DeclareCategory{(.*)}') + declare = re.compile(r'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + category = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$') empty = re.compile(r'^\s*$') testclasses = list() for file in glob.glob( os.path.join('layouts', '*.layout') ) + \ @@ -1467,7 +1514,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") @@ -1492,7 +1542,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) @@ -1500,7 +1550,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 @@ -1513,7 +1563,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 @@ -1544,6 +1594,7 @@ Format %i # check java and perl before any checkProg that may require them java = checkProg('a java interpreter', ['java'])[1] perl = checkProg('a perl interpreter', ['perl'])[1] + (inkscape_path, inkscape_name) = os.path.split(checkInkscape()) checkFormatEntries(dtl_tools) checkConverterEntries() (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()