]> git.lyx.org Git - lyx.git/blobdiff - lib/configure.py
Fix typo
[lyx.git] / lib / configure.py
index 8cc1a0c84e578652a3ae483743a0a203e2e9adc1..627591298ae04634dccdafcea038e48e39af7f28 100644 (file)
@@ -163,14 +163,14 @@ def checkUpgrade():
         logger.info('Checking for upgrade from previous version.')
         parent = os.path.dirname(cwd)
         appname = basename[:(-len(version_suffix))]
-        for version in ['-2.1', '-2.0', '-1.6' ]:
+        for version in ['-2.2', '-2.1', '-2.0', '-1.6' ]:
             logger.debug('Checking for upgrade from previous version ' + version)
             previous = os.path.join(parent, appname + version)
             logger.debug('previous = ' + previous)
             if os.path.isdir( previous ):
                 logger.info('Found directory "%s".', previous)
                 copy_tree( previous, cwd, True )
-                logger.info('Content copied to directory "%s".', cwd)
+                logger.info('Content copied from directory "%s".', previous)
                 return
 
 
@@ -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])
@@ -768,10 +768,10 @@ def checkFormatEntries(dtl_tools):
 def checkConverterEntries():
     ''' Check all converters (\converter entries) '''
     checkProg('the pdflatex program', ['pdflatex $$i'],
-        rc_entry = [ r'\converter pdflatex   pdf2       "%%"   "latex=pdflatex"' ])
+        rc_entry = [ r'\converter pdflatex   pdf2       "%%"   "latex=pdflatex,hyperref-driver=pdftex"' ])
 
     checkProg('XeTeX', ['xelatex $$i'],
-        rc_entry = [ r'\converter xetex      pdf4       "%%"   "latex=xelatex"' ])
+        rc_entry = [ r'\converter xetex      pdf4       "%%"   "latex=xelatex,hyperref-driver=xetex"' ])
 
     checkLuatex()
 
@@ -823,12 +823,12 @@ def checkConverterEntries():
 \converter knitr   dviluatex  "%%"     "needauth"'''])
     #
     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      "%%"    "needauth"',
-                     r'\converter sweave-ja   r      "%%"    "needauth"' ])
+        rc_entry = [ r'\converter sweave      r      "%%"    ""',
+                     r'\converter sweave-ja   r      "%%"    ""' ])
     #
     checkProg('a knitr -> R/S code converter', ['Rscript --verbose --no-save --no-restore $$s/scripts/lyxknitr.R $$p$$i $$p$$o $$e $$r tangle'],
-        rc_entry = [ r'\converter knitr      r      "%%"    "needauth"',
-                     r'\converter knitr-ja   r      "%%"    "needauth"' ])
+        rc_entry = [ r'\converter knitr      r      "%%"    ""',
+                     r'\converter knitr-ja   r      "%%"    ""' ])
     #
     checkProg('an HTML -> LaTeX converter', ['html2latex $$i', 'gnuhtml2latex',
         'htmltolatex -input $$i -output $$o', 'htmltolatex.jar -input $$i -output $$o'],
@@ -923,7 +923,7 @@ def checkConverterEntries():
         rc_entry = [ r'\converter rtf      html        "%%"    ""' ])
     # Do not define a converter to pdf6, ps is a pure export format
     checkProg('a PS to PDF converter', ['ps2pdf $$i $$o'],
-        rc_entry = [ r'\converter ps         pdf        "%%"   ""' ])
+        rc_entry = [ r'\converter ps         pdf        "%%"   "hyperref-driver=dvips"' ])
     #
     checkProg('a PS to TXT converter', ['pstotext $$i > $$o'],
         rc_entry = [ r'\converter ps         text2      "%%"   ""' ])
@@ -973,13 +973,13 @@ def checkConverterEntries():
         rc_entry = [ r'\converter dvi        text4      "%%"   ""' ])
     #
     checkProg('a DVI to PS converter', ['dvips -o $$o $$i'],
-        rc_entry = [ r'\converter dvi        ps         "%%"   ""' ])
+        rc_entry = [ r'\converter dvi        ps         "%%"   "hyperref-driver=dvips"' ])
     #
     checkProg('a DVI to cropped EPS converter', ['dvips -E -o $$o $$i'],
         rc_entry = [ r'\converter dvi        eps3         "%%" ""' ])
     #
-    checkProg('a DVI to PDF converter', ['dvipdfmx -o $$o $$i', 'dvipdfm -o $$o $$i'],
-        rc_entry = [ r'\converter dvi        pdf3       "%%"   ""' ])
+    checkProg('a DVI to PDF converter', ['dvipdfmx', 'dvipdfm'],
+        rc_entry = [ r'\converter dvi        pdf3       "%%  -o $$o $$i"       "hyperref-driver=%%"' ])
     #
     checkProg('a fax program', ['kdeprintfax $$i', 'ksendfax $$i', 'hylapex $$i'],
         rc_entry = [ r'\converter ps         fax        "%%"   ""'])
@@ -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,16 +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=$$p$$i --export-area-drawing --without-gui --export-eps=$$p$$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', 'wmf2eps -o $$o $$i', inkscape_name + ' --file=$$p$$i --export-area-drawing --without-gui --export-eps=$$p$$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=$$p$$i --export-area-drawing --without-gui --export-pdf=$$p$$o'],
+    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=$$p$$i --export-area-drawing --without-gui --export-pdf=$$p$$o'],
+    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'],
@@ -1065,17 +1067,20 @@ 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=$$p$$i --export-area-drawing --without-gui --export-pdf=$$p$$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=$$p$$i --export-area-drawing --without-gui --export-eps=$$p$$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=$$i --export-png=$$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        "%%"    ""'''],
         path = ['', inkscape_path])
@@ -1274,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):
@@ -1328,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
@@ -1353,8 +1358,8 @@ def checkLatexConfig(check_config, bool_docbook):
             if foundClasses.count(cleanclass) == 0: # not found before
                 foundClasses.append(cleanclass)
                 retval = processLayoutFile(file, bool_docbook)
-                if retval != "":
-                    tx.write(retval)
+                if retval != b"":
+                    tx.write(retval + os.linesep)
         tx.close()
         logger.info('\tdone')
     if not os.path.isfile('packages.lst') or not check_config:
@@ -1459,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.
@@ -1484,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')
@@ -1506,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
@@ -1536,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))
 
 
@@ -1587,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.
@@ -1612,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')
@@ -1630,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
@@ -1660,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:
@@ -1678,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():
@@ -1761,14 +1766,14 @@ def checkTeXAllowSpaces():
 def rescanTeXFiles():
     ''' Run kpsewhich to update information about TeX files '''
     logger.info("+Indexing TeX files... ")
-    if not os.path.isfile( os.path.join(srcdir, 'scripts', 'TeXFiles.py') ):
+    tfscript = os.path.join(srcdir, 'scripts', 'TeXFiles.py')
+    if not os.path.isfile(tfscript):
         logger.error("configure: error: cannot find TeXFiles.py script")
         sys.exit(1)
     interpreter = sys.executable
     if interpreter == '':
         interpreter = "python"
-    tfp = cmdOutput(interpreter + " -tt " + '"'
-                    + os.path.join(srcdir, 'scripts', 'TeXFiles.py') + '"')
+    tfp = cmdOutput('"%s" -tt "%s"' % (interpreter, tfscript))
     logger.info(tfp)
     logger.info("\tdone")
 
@@ -1785,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 = ''
@@ -1845,7 +1850,17 @@ 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 = ""
+    if sys.platform == 'darwin':
+        inkscape_fileprefix = "$$p"
     checkFormatEntries(dtl_tools)
     checkConverterEntries()
     (chk_docbook, bool_docbook, docbook_cmd) = checkDocBook()