X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=lib%2Fconfigure.py;h=95203fcb6ea0628474806abc3d13090cfdab750d;hb=8ad7b0caead9f58b5ab40626af144adb3d059f01;hp=6c32a80f842b30c5d844906923fa60f682497462;hpb=908afb8e971d210202b883480968305e30ae0699;p=lyx.git diff --git a/lib/configure.py b/lib/configure.py index 6c32a80f84..95203fcb6e 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -513,12 +513,12 @@ def checkInkscape(): try: aKey = winreg.OpenKey(aReg, r"inkscape.svg\DefaultIcon") val = winreg.QueryValueEx(aKey, "") - return str(val[0]).split('"')[1].replace('.exe', '') + return str(val[0]).split('"')[1] 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', '') + return str(val[0]).split('"')[1] except EnvironmentError: return 'inkscape' @@ -612,7 +612,7 @@ 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_name], + checkViewerEditor('a SVG viewer and editor', [inkscape_gui], rc_entry = [r'''\Format svg "svg" SVG "" "%%" "%%" "vector" "image/svg+xml" \Format svgz "svgz" "SVG (compressed)" "" "%%" "%%" "vector,zipped=native" ""'''], path = [inkscape_path]) @@ -993,11 +993,11 @@ def checkConverterEntries(): \converter fig pdftex "python -tt $$s/scripts/fig2pdftex.py $$i $$o" "" \converter fig pstex "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""''') # - checkProg('a SVG -> PDFTeX converter', [inkscape_name], + checkProg('a SVG -> PDFTeX converter', [inkscape_cl], rc_entry = [ r'\converter svg pdftex "python -tt $$s/scripts/svg2pdftex.py %% $$p$$i $$p$$o" ""'], path = [inkscape_path]) # - checkProg('a SVG -> PSTeX converter', [inkscape_name], + checkProg('a SVG -> PSTeX converter', [inkscape_cl], rc_entry = [ r'\converter svg pstex "python -tt $$s/scripts/svg2pstex.py %% $$p$$i $$p$$o" ""'], path = [inkscape_path]) # @@ -1010,18 +1010,18 @@ 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', inkscape_name + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' + checkProg('a WMF -> EPS converter', ['metafile2eps $$i $$o', 'wmf2eps -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], rc_entry = [ r'\converter wmf eps "%%" ""']) # - checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_name + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' + checkProg('an EMF -> EPS converter', ['metafile2eps $$i $$o', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], rc_entry = [ r'\converter emf eps "%%" ""']) # - checkProg('a WMF -> PDF converter', [inkscape_name + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], + checkProg('a WMF -> PDF converter', [inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], rc_entry = [ r'\converter wmf pdf6 "%%" ""']) # - checkProg('an EMF -> PDF converter', [inkscape_name + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], + checkProg('an EMF -> PDF converter', [inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], rc_entry = [ r'\converter emf pdf6 "%%" ""']) # Only define a converter to pdf6 for graphics checkProg('an EPS -> PDF converter', ['epstopdf'], @@ -1067,19 +1067,19 @@ def checkConverterEntries(): 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=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' + checkProg('a SVG -> PDF converter', ['rsvg-convert -f pdf -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-pdf=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], 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=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' + checkProg('a SVG -> EPS converter', ['rsvg-convert -f ps -o $$o $$i', inkscape_cl + ' --file=%s$$i --export-area-drawing --without-gui --export-eps=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], 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=%s$$i --export-png=%s$$o' + checkProg('a SVG -> PNG converter', ['rsvg-convert -f png -o $$o $$i', inkscape_cl + ' --without-gui --file=%s$$i --export-png=%s$$o' % (inkscape_fileprefix, inkscape_fileprefix)], rc_entry = [ r'''\converter svg png "%%" "", \converter svgz png "%%" ""'''], @@ -1279,43 +1279,43 @@ def processLayoutFile(file, bool_docbook): def checkForClassExtension(x): '''if the extension for a latex class is not provided, add .cls to the classname''' - if not '.' in x: - return x.strip() + '.cls' + if not b'.' in x: + return x.strip() + b'.cls' else: 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'^\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(): + p = re.compile(b'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$') + q = re.compile(b'^\s*#\s*\\DeclareCategory{(.*)}\s*$') + classdeclaration = b"" + categorydeclaration = b'""' + for line in open(file, 'rb').readlines(): res = p.search(line) qres = q.search(line) if res != None: (classtype, optAll, opt, opt1, desc) = res.groups() - avai = {'LaTeX':'false', 'DocBook':bool_docbook}[classtype] + avai = {b'LaTeX':b'false', b'DocBook':bool_docbook.encode('ascii')}[classtype] if opt == None: - opt = classname - prereq_latex = checkForClassExtension(classname) + opt = classname.encode('ascii') + prereq_latex = checkForClassExtension(classname.encode('ascii')) else: - prereq_list = optAll[1:-1].split(',') + prereq_list = optAll[1:-1].split(b',') 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] - classdeclaration = ('"%s" "%s" "%s" "%s" "%s"' + prereq_latex = b','.join(prereq_list) + prereq_docbook = {'true':b'', 'false':b'docbook'}[bool_docbook] + prereq = {b'LaTeX':prereq_latex, b'DocBook':prereq_docbook}[classtype] + classdeclaration = (b'"%s" "%s" "%s" "%s" "%s"' % (classname, opt, desc, avai, prereq)) - if categorydeclaration != '""': - return classdeclaration + " " + categorydeclaration + if categorydeclaration != b'""': + return classdeclaration + b" " + categorydeclaration if qres != None: - categorydeclaration = '"%s"' % (qres.groups()[0]) - if classdeclaration != "": - return classdeclaration + " " + categorydeclaration - if classdeclaration != "": - return classdeclaration + " " + categorydeclaration + categorydeclaration = b'"%s"' % (qres.groups()[0]) + if classdeclaration != b"": + return classdeclaration + b" " + categorydeclaration + if classdeclaration != b"": + return classdeclaration + b" " + categorydeclaration logger.warning("Layout file " + file + " has no \DeclareXXClass line. ") - return "" + return b"" def checkLatexConfig(check_config, bool_docbook): @@ -1333,8 +1333,8 @@ def checkLatexConfig(check_config, bool_docbook): # fails, we still have something to start lyx. logger.info(msg + ' default values') logger.info('+checking list of textclasses... ') - tx = open('textclass.lst', 'w') - tx.write(''' + tx = open('textclass.lst', 'wb') + tx.write(b''' # This file declares layouts and their associated definition files # (include dir. relative to the place where this file is). # It contains only default values, since chkconfig.ltx could not be run @@ -1358,7 +1358,7 @@ def checkLatexConfig(check_config, bool_docbook): if foundClasses.count(cleanclass) == 0: # not found before foundClasses.append(cleanclass) retval = processLayoutFile(file, bool_docbook) - if retval != "": + if retval != b"": tx.write(retval) tx.close() logger.info('\tdone') @@ -1464,8 +1464,8 @@ def checkModulesConfig(): removeFiles(['lyxmodules.lst', 'chkmodules.tex']) logger.info('+checking list of modules... ') - tx = open('lyxmodules.lst', 'w') - tx.write('''## This file declares modules and their associated definition files. + tx = open('lyxmodules.lst', 'wb') + tx.write(b'''## This file declares modules and their associated definition files. ## It has been automatically generated by configure ## Use "Options/Reconfigure" if you need to update it after a ## configuration change. @@ -1489,8 +1489,8 @@ def checkModulesConfig(): continue seen.append(filename) - retval = processModuleFile(file, filename, bool_docbook) - if retval != "": + retval = processModuleFile(file, filename.encode('ascii'), bool_docbook) + if retval != b"": tx.write(retval) tx.close() logger.info('\tdone') @@ -1511,25 +1511,25 @@ def processModuleFile(file, filename, bool_docbook): We expect output: "ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category" ''' - remods = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}') - rereqs = re.compile(r'#+\s*Requires: (.*)') - reexcs = re.compile(r'#+\s*Excludes: (.*)') - recaty = re.compile(r'#+\s*Category: (.*)') - redbeg = re.compile(r'#+\s*DescriptionBegin\s*$') - redend = re.compile(r'#+\s*DescriptionEnd\s*$') - - modname = desc = pkgs = req = excl = catgy = "" + remods = re.compile(b'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}') + rereqs = re.compile(b'#+\s*Requires: (.*)') + reexcs = re.compile(b'#+\s*Excludes: (.*)') + recaty = re.compile(b'#+\s*Category: (.*)') + redbeg = re.compile(b'#+\s*DescriptionBegin\s*$') + redend = re.compile(b'#+\s*DescriptionEnd\s*$') + + modname = desc = pkgs = req = excl = catgy = b"" readingDescription = False descLines = [] - for line in open(file).readlines(): + for line in open(file, 'rb').readlines(): if readingDescription: res = redend.search(line) if res != None: readingDescription = False - desc = " ".join(descLines) + desc = b" ".join(descLines) # Escape quotes. - desc = desc.replace('"', '\\"') + desc = desc.replace(b'"', b'\\"') continue descLines.append(line[1:].strip()) continue @@ -1541,50 +1541,50 @@ def processModuleFile(file, filename, bool_docbook): if res != None: (pkgs, modname) = res.groups() if pkgs == None: - pkgs = "" + pkgs = b"" else: - tmp = [s.strip() for s in pkgs.split(",")] - pkgs = ",".join(tmp) + tmp = [s.strip() for s in pkgs.split(b",")] + pkgs = b",".join(tmp) continue res = rereqs.search(line) if res != None: req = res.group(1) - tmp = [s.strip() for s in req.split("|")] - req = "|".join(tmp) + tmp = [s.strip() for s in req.split(b"|")] + req = b"|".join(tmp) continue res = reexcs.search(line) if res != None: excl = res.group(1) - tmp = [s.strip() for s in excl.split("|")] - excl = "|".join(tmp) + tmp = [s.strip() for s in excl.split(b"|")] + excl = b"|".join(tmp) continue res = recaty.search(line) if res != None: catgy = res.group(1) continue - if modname == "": + if modname == b"": logger.warning("Module file without \DeclareLyXModule line. ") - return "" + return b"" - if pkgs != "": + if pkgs != b"": # this module has some latex dependencies: # append the dependencies to chkmodules.tex, # which is \input'ed by chkconfig.ltx testpackages = list() - for pkg in pkgs.split(","): - if "->" in pkg: + for pkg in pkgs.split(b","): + if b"->" in pkg: # this is a converter dependency: skip continue - if pkg.endswith(".sty"): + if pkg.endswith(b".sty"): pkg = pkg[:-4] - testpackages.append("\\TestPackage{%s}" % (pkg,)) + testpackages.append("\\TestPackage{%s}" % (pkg.decode('ascii'),)) cm = open('chkmodules.tex', 'a') for line in testpackages: cm.write(line + '\n') cm.close() - return ('"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' + return (b'"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, desc, pkgs, req, excl, catgy)) @@ -1592,8 +1592,8 @@ def checkCiteEnginesConfig(): removeFiles(['lyxciteengines.lst', 'chkciteengines.tex']) logger.info('+checking list of cite engines... ') - tx = open('lyxciteengines.lst', 'w') - tx.write('''## This file declares cite engines and their associated definition files. + tx = open('lyxciteengines.lst', 'wb') + tx.write(b'''## This file declares cite engines and their associated definition files. ## It has been automatically generated by configure ## Use "Options/Reconfigure" if you need to update it after a ## configuration change. @@ -1617,8 +1617,8 @@ def checkCiteEnginesConfig(): continue seen.append(filename) - retval = processCiteEngineFile(file, filename, bool_docbook) - if retval != "": + retval = processCiteEngineFile(file, filename.encode('ascii'), bool_docbook) + if retval != b"": tx.write(retval) tx.close() logger.info('\tdone') @@ -1635,25 +1635,25 @@ def processCiteEngineFile(file, filename, bool_docbook): We expect output: "CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages" ''' - remods = re.compile(r'\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}') - redbeg = re.compile(r'#+\s*DescriptionBegin\s*$') - redend = re.compile(r'#+\s*DescriptionEnd\s*$') - recet = re.compile(r'\s*CiteEngineType\s*(.*)') - redb = re.compile(r'\s*DefaultBiblio\s*(.*)') - resfm = re.compile(r'\s*CiteFramework\s*(.*)') + remods = re.compile(b'\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}') + redbeg = re.compile(b'#+\s*DescriptionBegin\s*$') + redend = re.compile(b'#+\s*DescriptionEnd\s*$') + recet = re.compile(b'\s*CiteEngineType\s*(.*)') + redb = re.compile(b'\s*DefaultBiblio\s*(.*)') + resfm = re.compile(b'\s*CiteFramework\s*(.*)') modname = desc = pkgs = cet = db = cfm = "" readingDescription = False descLines = [] - for line in open(file).readlines(): + for line in open(file, 'rb').readlines(): if readingDescription: res = redend.search(line) if res != None: readingDescription = False - desc = " ".join(descLines) + desc = b" ".join(descLines) # Escape quotes. - desc = desc.replace('"', '\\"') + desc = desc.replace(b'"', b'\\"') continue descLines.append(line[1:].strip()) continue @@ -1665,10 +1665,10 @@ def processCiteEngineFile(file, filename, bool_docbook): if res != None: (pkgs, modname) = res.groups() if pkgs == None: - pkgs = "" + pkgs = b"" else: - tmp = [s.strip() for s in pkgs.split(",")] - pkgs = ",".join(tmp) + tmp = [s.strip() for s in pkgs.split(b",")] + pkgs = b",".join(tmp) continue res = recet.search(line) if res != None: @@ -1683,28 +1683,28 @@ def processCiteEngineFile(file, filename, bool_docbook): cfm = res.group(1) continue - if modname == "": + if modname == b"": logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ") - return "" + return b"" - if pkgs != "": + if pkgs != b"": # this cite engine has some latex dependencies: # append the dependencies to chkciteengines.tex, # which is \input'ed by chkconfig.ltx testpackages = list() - for pkg in pkgs.split(","): - if "->" in pkg: + for pkg in pkgs.split(b","): + if b"->" in pkg: # this is a converter dependency: skip continue - if pkg.endswith(".sty"): + if pkg.endswith(b".sty"): pkg = pkg[:-4] - testpackages.append("\\TestPackage{%s}" % (pkg,)) + testpackages.append("\\TestPackage{%s}" % (pkg.decode('ascii'),)) cm = open('chkciteengines.tex', 'a') for line in testpackages: cm.write(line + '\n') cm.close() - return '"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, cet, cfm, db, desc, pkgs) + return (b'"%s" "%s" "%s" "%s" "%s" "%s" "%s"\n' % (modname, filename, cet, cfm, db, desc, pkgs)) def checkXTemplates(): @@ -1790,7 +1790,7 @@ if __name__ == '__main__': lyx_check_config = True lyx_kpsewhich = True outfile = 'lyxrc.defaults' - lyxrc_fileformat = 23 + lyxrc_fileformat = 24 rc_entries = '' lyx_keep_temps = False version_suffix = '' @@ -1850,7 +1850,12 @@ 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()) + (inkscape_path, inkscape_gui) = os.path.split(checkInkscape()) + # On Windows, we need to call the "inkscape.com" wrapper + # for command line purposes. Other OSes do not differentiate. + inkscape_cl = inkscape_gui + if os.name == 'nt': + inkscape_cl = inkscape_gui.replace('.exe', '.com') # On MacOSX, Inkscape requires full path file arguments. This # is not needed on Linux and Win and even breaks the latter. inkscape_fileprefix = ""