mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-26 11:16:55 +00:00
configure.py: read layout and module files in binary mode
This prevents encoding issues with Python3 that manifested for a user
on the Mac.
Fixes: #10671
(cherry picked from commit 731c9fb401
)
This commit is contained in:
parent
01cf79e04b
commit
576b941389
158
lib/configure.py
158
lib/configure.py
@ -1279,43 +1279,43 @@ def processLayoutFile(file, bool_docbook):
|
|||||||
def checkForClassExtension(x):
|
def checkForClassExtension(x):
|
||||||
'''if the extension for a latex class is not
|
'''if the extension for a latex class is not
|
||||||
provided, add .cls to the classname'''
|
provided, add .cls to the classname'''
|
||||||
if not '.' in x:
|
if not b'.' in x:
|
||||||
return x.strip() + '.cls'
|
return x.strip() + b'.cls'
|
||||||
else:
|
else:
|
||||||
return x.strip()
|
return x.strip()
|
||||||
classname = file.split(os.sep)[-1].split('.')[0]
|
classname = file.split(os.sep)[-1].split('.')[0]
|
||||||
# return ('LaTeX', '[a,b]', 'a', ',b,c', 'article') for \DeclareLaTeXClass[a,b,c]{article}
|
# 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*$')
|
p = re.compile(b'^\s*#\s*\\Declare(LaTeX|DocBook)Class\s*(\[([^,]*)(,.*)*\])*\s*{(.*)}\s*$')
|
||||||
q = re.compile(r'^\s*#\s*\\DeclareCategory{(.*)}\s*$')
|
q = re.compile(b'^\s*#\s*\\DeclareCategory{(.*)}\s*$')
|
||||||
classdeclaration = ""
|
classdeclaration = b""
|
||||||
categorydeclaration = '""'
|
categorydeclaration = b'""'
|
||||||
for line in open(file).readlines():
|
for line in open(file, 'rb').readlines():
|
||||||
res = p.search(line)
|
res = p.search(line)
|
||||||
qres = q.search(line)
|
qres = q.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
(classtype, optAll, opt, opt1, desc) = res.groups()
|
(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:
|
if opt == None:
|
||||||
opt = classname
|
opt = classname.encode('ascii')
|
||||||
prereq_latex = checkForClassExtension(classname)
|
prereq_latex = checkForClassExtension(classname.encode('ascii'))
|
||||||
else:
|
else:
|
||||||
prereq_list = optAll[1:-1].split(',')
|
prereq_list = optAll[1:-1].split(b',')
|
||||||
prereq_list = list(map(checkForClassExtension, prereq_list))
|
prereq_list = list(map(checkForClassExtension, prereq_list))
|
||||||
prereq_latex = ','.join(prereq_list)
|
prereq_latex = b','.join(prereq_list)
|
||||||
prereq_docbook = {'true':'', 'false':'docbook'}[bool_docbook]
|
prereq_docbook = {'true':b'', 'false':b'docbook'}[bool_docbook]
|
||||||
prereq = {'LaTeX':prereq_latex, 'DocBook':prereq_docbook}[classtype]
|
prereq = {b'LaTeX':prereq_latex, b'DocBook':prereq_docbook}[classtype]
|
||||||
classdeclaration = ('"%s" "%s" "%s" "%s" "%s"'
|
classdeclaration = (b'"%s" "%s" "%s" "%s" "%s"'
|
||||||
% (classname, opt, desc, avai, prereq))
|
% (classname, opt, desc, avai, prereq))
|
||||||
if categorydeclaration != '""':
|
if categorydeclaration != b'""':
|
||||||
return classdeclaration + " " + categorydeclaration
|
return classdeclaration + b" " + categorydeclaration
|
||||||
if qres != None:
|
if qres != None:
|
||||||
categorydeclaration = '"%s"' % (qres.groups()[0])
|
categorydeclaration = b'"%s"' % (qres.groups()[0])
|
||||||
if classdeclaration != "":
|
if classdeclaration != b"":
|
||||||
return classdeclaration + " " + categorydeclaration
|
return classdeclaration + b" " + categorydeclaration
|
||||||
if classdeclaration != "":
|
if classdeclaration != b"":
|
||||||
return classdeclaration + " " + categorydeclaration
|
return classdeclaration + b" " + categorydeclaration
|
||||||
logger.warning("Layout file " + file + " has no \DeclareXXClass line. ")
|
logger.warning("Layout file " + file + " has no \DeclareXXClass line. ")
|
||||||
return ""
|
return b""
|
||||||
|
|
||||||
|
|
||||||
def checkLatexConfig(check_config, bool_docbook):
|
def checkLatexConfig(check_config, bool_docbook):
|
||||||
@ -1333,8 +1333,8 @@ def checkLatexConfig(check_config, bool_docbook):
|
|||||||
# fails, we still have something to start lyx.
|
# fails, we still have something to start lyx.
|
||||||
logger.info(msg + ' default values')
|
logger.info(msg + ' default values')
|
||||||
logger.info('+checking list of textclasses... ')
|
logger.info('+checking list of textclasses... ')
|
||||||
tx = open('textclass.lst', 'w')
|
tx = open('textclass.lst', 'wb')
|
||||||
tx.write('''
|
tx.write(b'''
|
||||||
# This file declares layouts and their associated definition files
|
# This file declares layouts and their associated definition files
|
||||||
# (include dir. relative to the place where this file is).
|
# (include dir. relative to the place where this file is).
|
||||||
# It contains only default values, since chkconfig.ltx could not be run
|
# 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
|
if foundClasses.count(cleanclass) == 0: # not found before
|
||||||
foundClasses.append(cleanclass)
|
foundClasses.append(cleanclass)
|
||||||
retval = processLayoutFile(file, bool_docbook)
|
retval = processLayoutFile(file, bool_docbook)
|
||||||
if retval != "":
|
if retval != b"":
|
||||||
tx.write(retval)
|
tx.write(retval)
|
||||||
tx.close()
|
tx.close()
|
||||||
logger.info('\tdone')
|
logger.info('\tdone')
|
||||||
@ -1464,8 +1464,8 @@ def checkModulesConfig():
|
|||||||
removeFiles(['lyxmodules.lst', 'chkmodules.tex'])
|
removeFiles(['lyxmodules.lst', 'chkmodules.tex'])
|
||||||
|
|
||||||
logger.info('+checking list of modules... ')
|
logger.info('+checking list of modules... ')
|
||||||
tx = open('lyxmodules.lst', 'w')
|
tx = open('lyxmodules.lst', 'wb')
|
||||||
tx.write('''## This file declares modules and their associated definition files.
|
tx.write(b'''## This file declares modules and their associated definition files.
|
||||||
## It has been automatically generated by configure
|
## It has been automatically generated by configure
|
||||||
## Use "Options/Reconfigure" if you need to update it after a
|
## Use "Options/Reconfigure" if you need to update it after a
|
||||||
## configuration change.
|
## configuration change.
|
||||||
@ -1489,8 +1489,8 @@ def checkModulesConfig():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
seen.append(filename)
|
seen.append(filename)
|
||||||
retval = processModuleFile(file, filename, bool_docbook)
|
retval = processModuleFile(file, filename.encode('ascii'), bool_docbook)
|
||||||
if retval != "":
|
if retval != b"":
|
||||||
tx.write(retval)
|
tx.write(retval)
|
||||||
tx.close()
|
tx.close()
|
||||||
logger.info('\tdone')
|
logger.info('\tdone')
|
||||||
@ -1511,25 +1511,25 @@ def processModuleFile(file, filename, bool_docbook):
|
|||||||
We expect output:
|
We expect output:
|
||||||
"ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
|
"ModuleName" "filename" "Description" "Packages" "Requires" "Excludes" "Category"
|
||||||
'''
|
'''
|
||||||
remods = re.compile(r'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
|
remods = re.compile(b'\DeclareLyXModule\s*(?:\[([^]]*?)\])?{(.*)}')
|
||||||
rereqs = re.compile(r'#+\s*Requires: (.*)')
|
rereqs = re.compile(b'#+\s*Requires: (.*)')
|
||||||
reexcs = re.compile(r'#+\s*Excludes: (.*)')
|
reexcs = re.compile(b'#+\s*Excludes: (.*)')
|
||||||
recaty = re.compile(r'#+\s*Category: (.*)')
|
recaty = re.compile(b'#+\s*Category: (.*)')
|
||||||
redbeg = re.compile(r'#+\s*DescriptionBegin\s*$')
|
redbeg = re.compile(b'#+\s*DescriptionBegin\s*$')
|
||||||
redend = re.compile(r'#+\s*DescriptionEnd\s*$')
|
redend = re.compile(b'#+\s*DescriptionEnd\s*$')
|
||||||
|
|
||||||
modname = desc = pkgs = req = excl = catgy = ""
|
modname = desc = pkgs = req = excl = catgy = b""
|
||||||
readingDescription = False
|
readingDescription = False
|
||||||
descLines = []
|
descLines = []
|
||||||
|
|
||||||
for line in open(file).readlines():
|
for line in open(file, 'rb').readlines():
|
||||||
if readingDescription:
|
if readingDescription:
|
||||||
res = redend.search(line)
|
res = redend.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
readingDescription = False
|
readingDescription = False
|
||||||
desc = " ".join(descLines)
|
desc = b" ".join(descLines)
|
||||||
# Escape quotes.
|
# Escape quotes.
|
||||||
desc = desc.replace('"', '\\"')
|
desc = desc.replace(b'"', b'\\"')
|
||||||
continue
|
continue
|
||||||
descLines.append(line[1:].strip())
|
descLines.append(line[1:].strip())
|
||||||
continue
|
continue
|
||||||
@ -1541,50 +1541,50 @@ def processModuleFile(file, filename, bool_docbook):
|
|||||||
if res != None:
|
if res != None:
|
||||||
(pkgs, modname) = res.groups()
|
(pkgs, modname) = res.groups()
|
||||||
if pkgs == None:
|
if pkgs == None:
|
||||||
pkgs = ""
|
pkgs = b""
|
||||||
else:
|
else:
|
||||||
tmp = [s.strip() for s in pkgs.split(",")]
|
tmp = [s.strip() for s in pkgs.split(b",")]
|
||||||
pkgs = ",".join(tmp)
|
pkgs = b",".join(tmp)
|
||||||
continue
|
continue
|
||||||
res = rereqs.search(line)
|
res = rereqs.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
req = res.group(1)
|
req = res.group(1)
|
||||||
tmp = [s.strip() for s in req.split("|")]
|
tmp = [s.strip() for s in req.split(b"|")]
|
||||||
req = "|".join(tmp)
|
req = b"|".join(tmp)
|
||||||
continue
|
continue
|
||||||
res = reexcs.search(line)
|
res = reexcs.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
excl = res.group(1)
|
excl = res.group(1)
|
||||||
tmp = [s.strip() for s in excl.split("|")]
|
tmp = [s.strip() for s in excl.split(b"|")]
|
||||||
excl = "|".join(tmp)
|
excl = b"|".join(tmp)
|
||||||
continue
|
continue
|
||||||
res = recaty.search(line)
|
res = recaty.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
catgy = res.group(1)
|
catgy = res.group(1)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if modname == "":
|
if modname == b"":
|
||||||
logger.warning("Module file without \DeclareLyXModule line. ")
|
logger.warning("Module file without \DeclareLyXModule line. ")
|
||||||
return ""
|
return b""
|
||||||
|
|
||||||
if pkgs != "":
|
if pkgs != b"":
|
||||||
# this module has some latex dependencies:
|
# this module has some latex dependencies:
|
||||||
# append the dependencies to chkmodules.tex,
|
# append the dependencies to chkmodules.tex,
|
||||||
# which is \input'ed by chkconfig.ltx
|
# which is \input'ed by chkconfig.ltx
|
||||||
testpackages = list()
|
testpackages = list()
|
||||||
for pkg in pkgs.split(","):
|
for pkg in pkgs.split(b","):
|
||||||
if "->" in pkg:
|
if b"->" in pkg:
|
||||||
# this is a converter dependency: skip
|
# this is a converter dependency: skip
|
||||||
continue
|
continue
|
||||||
if pkg.endswith(".sty"):
|
if pkg.endswith(b".sty"):
|
||||||
pkg = pkg[:-4]
|
pkg = pkg[:-4]
|
||||||
testpackages.append("\\TestPackage{%s}" % (pkg,))
|
testpackages.append("\\TestPackage{%s}" % (pkg.decode('ascii'),))
|
||||||
cm = open('chkmodules.tex', 'a')
|
cm = open('chkmodules.tex', 'a')
|
||||||
for line in testpackages:
|
for line in testpackages:
|
||||||
cm.write(line + '\n')
|
cm.write(line + '\n')
|
||||||
cm.close()
|
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))
|
% (modname, filename, desc, pkgs, req, excl, catgy))
|
||||||
|
|
||||||
|
|
||||||
@ -1592,8 +1592,8 @@ def checkCiteEnginesConfig():
|
|||||||
removeFiles(['lyxciteengines.lst', 'chkciteengines.tex'])
|
removeFiles(['lyxciteengines.lst', 'chkciteengines.tex'])
|
||||||
|
|
||||||
logger.info('+checking list of cite engines... ')
|
logger.info('+checking list of cite engines... ')
|
||||||
tx = open('lyxciteengines.lst', 'w')
|
tx = open('lyxciteengines.lst', 'wb')
|
||||||
tx.write('''## This file declares cite engines and their associated definition files.
|
tx.write(b'''## This file declares cite engines and their associated definition files.
|
||||||
## It has been automatically generated by configure
|
## It has been automatically generated by configure
|
||||||
## Use "Options/Reconfigure" if you need to update it after a
|
## Use "Options/Reconfigure" if you need to update it after a
|
||||||
## configuration change.
|
## configuration change.
|
||||||
@ -1617,8 +1617,8 @@ def checkCiteEnginesConfig():
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
seen.append(filename)
|
seen.append(filename)
|
||||||
retval = processCiteEngineFile(file, filename, bool_docbook)
|
retval = processCiteEngineFile(file, filename.encode('ascii'), bool_docbook)
|
||||||
if retval != "":
|
if retval != b"":
|
||||||
tx.write(retval)
|
tx.write(retval)
|
||||||
tx.close()
|
tx.close()
|
||||||
logger.info('\tdone')
|
logger.info('\tdone')
|
||||||
@ -1635,25 +1635,25 @@ def processCiteEngineFile(file, filename, bool_docbook):
|
|||||||
We expect output:
|
We expect output:
|
||||||
"CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
|
"CiteEngineName" "filename" "CiteEngineType" "CiteFramework" "DefaultBiblio" "Description" "Packages"
|
||||||
'''
|
'''
|
||||||
remods = re.compile(r'\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}')
|
remods = re.compile(b'\DeclareLyXCiteEngine\s*(?:\[([^]]*?)\])?{(.*)}')
|
||||||
redbeg = re.compile(r'#+\s*DescriptionBegin\s*$')
|
redbeg = re.compile(b'#+\s*DescriptionBegin\s*$')
|
||||||
redend = re.compile(r'#+\s*DescriptionEnd\s*$')
|
redend = re.compile(b'#+\s*DescriptionEnd\s*$')
|
||||||
recet = re.compile(r'\s*CiteEngineType\s*(.*)')
|
recet = re.compile(b'\s*CiteEngineType\s*(.*)')
|
||||||
redb = re.compile(r'\s*DefaultBiblio\s*(.*)')
|
redb = re.compile(b'\s*DefaultBiblio\s*(.*)')
|
||||||
resfm = re.compile(r'\s*CiteFramework\s*(.*)')
|
resfm = re.compile(b'\s*CiteFramework\s*(.*)')
|
||||||
|
|
||||||
modname = desc = pkgs = cet = db = cfm = ""
|
modname = desc = pkgs = cet = db = cfm = ""
|
||||||
readingDescription = False
|
readingDescription = False
|
||||||
descLines = []
|
descLines = []
|
||||||
|
|
||||||
for line in open(file).readlines():
|
for line in open(file, 'rb').readlines():
|
||||||
if readingDescription:
|
if readingDescription:
|
||||||
res = redend.search(line)
|
res = redend.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
readingDescription = False
|
readingDescription = False
|
||||||
desc = " ".join(descLines)
|
desc = b" ".join(descLines)
|
||||||
# Escape quotes.
|
# Escape quotes.
|
||||||
desc = desc.replace('"', '\\"')
|
desc = desc.replace(b'"', b'\\"')
|
||||||
continue
|
continue
|
||||||
descLines.append(line[1:].strip())
|
descLines.append(line[1:].strip())
|
||||||
continue
|
continue
|
||||||
@ -1665,10 +1665,10 @@ def processCiteEngineFile(file, filename, bool_docbook):
|
|||||||
if res != None:
|
if res != None:
|
||||||
(pkgs, modname) = res.groups()
|
(pkgs, modname) = res.groups()
|
||||||
if pkgs == None:
|
if pkgs == None:
|
||||||
pkgs = ""
|
pkgs = b""
|
||||||
else:
|
else:
|
||||||
tmp = [s.strip() for s in pkgs.split(",")]
|
tmp = [s.strip() for s in pkgs.split(b",")]
|
||||||
pkgs = ",".join(tmp)
|
pkgs = b",".join(tmp)
|
||||||
continue
|
continue
|
||||||
res = recet.search(line)
|
res = recet.search(line)
|
||||||
if res != None:
|
if res != None:
|
||||||
@ -1683,28 +1683,28 @@ def processCiteEngineFile(file, filename, bool_docbook):
|
|||||||
cfm = res.group(1)
|
cfm = res.group(1)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if modname == "":
|
if modname == b"":
|
||||||
logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ")
|
logger.warning("Cite Engine File file without \DeclareLyXCiteEngine line. ")
|
||||||
return ""
|
return b""
|
||||||
|
|
||||||
if pkgs != "":
|
if pkgs != b"":
|
||||||
# this cite engine has some latex dependencies:
|
# this cite engine has some latex dependencies:
|
||||||
# append the dependencies to chkciteengines.tex,
|
# append the dependencies to chkciteengines.tex,
|
||||||
# which is \input'ed by chkconfig.ltx
|
# which is \input'ed by chkconfig.ltx
|
||||||
testpackages = list()
|
testpackages = list()
|
||||||
for pkg in pkgs.split(","):
|
for pkg in pkgs.split(b","):
|
||||||
if "->" in pkg:
|
if b"->" in pkg:
|
||||||
# this is a converter dependency: skip
|
# this is a converter dependency: skip
|
||||||
continue
|
continue
|
||||||
if pkg.endswith(".sty"):
|
if pkg.endswith(b".sty"):
|
||||||
pkg = pkg[:-4]
|
pkg = pkg[:-4]
|
||||||
testpackages.append("\\TestPackage{%s}" % (pkg,))
|
testpackages.append("\\TestPackage{%s}" % (pkg.decode('ascii'),))
|
||||||
cm = open('chkciteengines.tex', 'a')
|
cm = open('chkciteengines.tex', 'a')
|
||||||
for line in testpackages:
|
for line in testpackages:
|
||||||
cm.write(line + '\n')
|
cm.write(line + '\n')
|
||||||
cm.close()
|
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():
|
def checkXTemplates():
|
||||||
|
Loading…
Reference in New Issue
Block a user