Accepting request 537544 from GNOME:Next
Let's use python3 for gtk-doc OBS-URL: https://build.opensuse.org/request/show/537544 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gtk-doc?expand=0&rev=54
This commit is contained in:
parent
f6ebdac743
commit
512cb7f8cc
626
gtk-doc-open-docs-as-utf8.patch
Normal file
626
gtk-doc-open-docs-as-utf8.patch
Normal file
@ -0,0 +1,626 @@
|
||||
commit 8ad03e164f3091df68a9fed5492b54cd61d0ac51
|
||||
Author: Stefan Sauer <ensonic@users.sf.net>
|
||||
Date: Thu Oct 26 22:16:57 2017 +0200
|
||||
|
||||
mkdb: don't uses sys.exit in library
|
||||
|
||||
Just print a warning and go on.
|
||||
|
||||
diff --git a/gtkdoc/mkdb.py b/gtkdoc/mkdb.py
|
||||
index 3b0bc15..d89d078 100644
|
||||
--- a/gtkdoc/mkdb.py
|
||||
+++ b/gtkdoc/mkdb.py
|
||||
@@ -31,7 +31,6 @@ import logging
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
-import sys
|
||||
|
||||
from . import common, md_to_db
|
||||
|
||||
@@ -1123,7 +1122,8 @@ def OutputDeclaration(symbol, declaration):
|
||||
elif dtype == 'USER_FUNCTION':
|
||||
return OutputFunction(symbol, declaration, dtype)
|
||||
else:
|
||||
- sys.exit("Unknown symbol type " + dtype)
|
||||
+ logging.warning("Unknown symbol type %s for symbol %s", dtype, symbol)
|
||||
+ return ('', '')
|
||||
|
||||
|
||||
def OutputSymbolTraits(symbol):
|
||||
|
||||
commit a4a719606bfa0abdea794f6a7d4f46b3e3fcb77e
|
||||
Author: Stefan Sauer <ensonic@users.sf.net>
|
||||
Date: Thu Oct 26 21:06:17 2017 +0200
|
||||
|
||||
mkdb: fix missing info on typedefs
|
||||
|
||||
This was a regression from the perl->python port.
|
||||
|
||||
diff --git a/gtkdoc/mkdb.py b/gtkdoc/mkdb.py
|
||||
index 7bb6d3e..3b0bc15 100644
|
||||
--- a/gtkdoc/mkdb.py
|
||||
+++ b/gtkdoc/mkdb.py
|
||||
@@ -1281,7 +1281,7 @@ def OutputTypedef(symbol, declaration):
|
||||
desc += "\n"
|
||||
desc += OutputSymbolExtraLinks(symbol)
|
||||
|
||||
- if symbol in DeclarationConditional:
|
||||
+ if symbol not in DeclarationConditional:
|
||||
decl_out = CreateValidSGML(declaration)
|
||||
desc += "<programlisting language=\"C\">%s</programlisting>\n" % decl_out
|
||||
|
||||
|
||||
commit 21358879180c9e988fc0473840ab8ab673f69513
|
||||
Author: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Wed Oct 25 21:27:05 2017 +0200
|
||||
|
||||
mkdb: Mark multiple Unicode strings as such
|
||||
|
||||
These are utf-8 encoded byte strings under Python 2 and when concatonated
|
||||
with unicode objects get auto-decoded using the default ascii encoding,
|
||||
which fails as they are not ascii.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=787862
|
||||
|
||||
diff --git a/gtkdoc/mkdb.py b/gtkdoc/mkdb.py
|
||||
index 6c1538f..7bb6d3e 100644
|
||||
--- a/gtkdoc/mkdb.py
|
||||
+++ b/gtkdoc/mkdb.py
|
||||
@@ -2784,14 +2784,14 @@ def MakeHashXRef(symbol, tag):
|
||||
if '::' in symbol:
|
||||
o, s = symbol.split('::', 1)
|
||||
symbol = '%s-%s' % (o, s)
|
||||
- text = '“' + s + '”'
|
||||
+ text = u'“' + s + u'”'
|
||||
|
||||
# If the symbol is in the form "Object:property", then change the symbol to
|
||||
# "Object--property" and use "property" as the text.
|
||||
if ':' in symbol:
|
||||
o, p = symbol.split(':', 1)
|
||||
symbol = '%s--%s' % (o, p)
|
||||
- text = '“' + p + '”'
|
||||
+ text = u'“' + p + u'”'
|
||||
|
||||
if tag != '':
|
||||
text = tagify(text, tag)
|
||||
@@ -3311,7 +3311,7 @@ def GetSignals(gobject):
|
||||
symbol = '%s::%s' % (gobject, name)
|
||||
sid = common.CreateValidSGMLID('%s-%s' % (gobject, name))
|
||||
|
||||
- desc += "<refsect2 id=\"%s\" role=\"signal\"><title>The <literal>“%s”</literal> signal</title>\n" % (
|
||||
+ desc += u"<refsect2 id=\"%s\" role=\"signal\"><title>The <literal>“%s”</literal> signal</title>\n" % (
|
||||
sid, name)
|
||||
desc += MakeIndexterms(symbol, sid)
|
||||
desc += "\n"
|
||||
@@ -3546,13 +3546,13 @@ def GetArgs(gobject):
|
||||
|
||||
arg_synop = "<row><entry role=\"property_type\">%s</entry><entry role=\"property_name\"><link linkend=\"%s\">%s</link></entry><entry role=\"property_flags\">%s</entry></row>\n" % (
|
||||
type_output, sid, name, flags_string)
|
||||
- arg_desc = "<refsect2 id=\"%s\" role=\"property\"><title>The <literal>“%s”</literal> %s</title>\n" % (
|
||||
+ arg_desc = u"<refsect2 id=\"%s\" role=\"property\"><title>The <literal>“%s”</literal> %s</title>\n" % (
|
||||
sid, name, kind)
|
||||
arg_desc += MakeIndexterms(symbol, sid)
|
||||
arg_desc += "\n"
|
||||
arg_desc += OutputSymbolExtraLinks(symbol)
|
||||
|
||||
- arg_desc += "<programlisting> “%s”%s %s</programlisting>\n" % (name, pad1, type_output)
|
||||
+ arg_desc += u"<programlisting> “%s”%s %s</programlisting>\n" % (name, pad1, type_output)
|
||||
arg_desc += blurb
|
||||
if symbol in SymbolAnnotations:
|
||||
param_desc = SymbolAnnotations[symbol]
|
||||
|
||||
commit 1eeec38a9a06a9956cdab9789cbd2ea105866198
|
||||
Author: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Mon Sep 18 22:49:09 2017 +0200
|
||||
|
||||
Always open files in text mode and always use utf-8
|
||||
|
||||
Introduces a common.open_text() helper with saner defaults for opening
|
||||
text files across Python versions.
|
||||
|
||||
open() defaults to the locale encoding which on a properly configured
|
||||
Unix is utf-8, but cp-1252 on Windows which can't handle all of Unicode.
|
||||
Instead of using the default always use utf-8 for text files.
|
||||
|
||||
To reduce the difference of types processed by Python 2 vs 3 use
|
||||
codecs.open() to open text files in text mode on Python 2. The
|
||||
resulting file object will return unicode like on Python 3, but still
|
||||
allows passing in ASCII only str.
|
||||
|
||||
Also fixes a few missing file.close() operations, which is important on
|
||||
Windows as non-closed files can't be renamed/deleted on Windows.
|
||||
|
||||
https://bugzilla.gnome.org/show_bug.cgi?id=787862
|
||||
|
||||
diff --git a/gtkdoc/check.py b/gtkdoc/check.py
|
||||
index 0a58b0c..7f32b60 100755
|
||||
--- a/gtkdoc/check.py
|
||||
+++ b/gtkdoc/check.py
|
||||
@@ -32,6 +32,8 @@ import os
|
||||
import re
|
||||
from glob import glob
|
||||
|
||||
+from . import common
|
||||
+
|
||||
|
||||
class FileFormatError(Exception):
|
||||
pass
|
||||
@@ -46,14 +48,14 @@ def grep(regexp, lines, what):
|
||||
|
||||
|
||||
def check_empty(filename):
|
||||
- with open(filename) as f:
|
||||
+ with open(filename, "rb") as f:
|
||||
count = sum(1 for line in f if line.strip())
|
||||
return count
|
||||
|
||||
|
||||
def check_includes(filename):
|
||||
# Check that each XML file in the xml directory is included in doc_main_file
|
||||
- with open(filename) as f:
|
||||
+ with common.open_text(filename) as f:
|
||||
lines = f.read().splitlines()
|
||||
num_missing = 0
|
||||
for include in glob('xml/*.xml'):
|
||||
@@ -73,7 +75,7 @@ def get_variable(env, lines, variable):
|
||||
|
||||
|
||||
def read_file(filename):
|
||||
- with open(filename) as f:
|
||||
+ with common.open_text(filename) as f:
|
||||
return f.read().splitlines()
|
||||
|
||||
|
||||
diff --git a/gtkdoc/common.py b/gtkdoc/common.py
|
||||
index 50c9f5f..9dfebef 100644
|
||||
--- a/gtkdoc/common.py
|
||||
+++ b/gtkdoc/common.py
|
||||
@@ -28,10 +28,35 @@ import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
+import six
|
||||
+import codecs
|
||||
|
||||
from . import config
|
||||
|
||||
|
||||
+def open_text(filename, mode="r", encoding="utf-8"):
|
||||
+ """An open() which removes some differences between Python 2 and 3 and
|
||||
+ has saner defaults.
|
||||
+
|
||||
+ Unlike the builtin open by default utf-8 is use and not the locale
|
||||
+ encoding (which is ANSI on Windows for example, not very helpful)
|
||||
+
|
||||
+ For Python 2, files are opened in text mode like with Python 3.
|
||||
+ """
|
||||
+
|
||||
+ if mode not in ("r", "w"):
|
||||
+ raise ValueError("mode %r not supported, must be 'r' or 'w'" % mode)
|
||||
+
|
||||
+ if six.PY3:
|
||||
+ return open(filename, mode, encoding=encoding)
|
||||
+ else:
|
||||
+ # We can't use io.open() here as its write method is too strict and
|
||||
+ # only allows unicode instances and not everything in the codebase
|
||||
+ # forces unicode at the moment. codecs.open() on the other hand
|
||||
+ # happily takes ASCII str and decodes it.
|
||||
+ return codecs.open(filename, mode, encoding=encoding)
|
||||
+
|
||||
+
|
||||
def setup_logging():
|
||||
"""Check GTKDOC_TRACE environment variable.
|
||||
|
||||
diff --git a/gtkdoc/fixxref.py b/gtkdoc/fixxref.py
|
||||
index 3027c10..164b008 100755
|
||||
--- a/gtkdoc/fixxref.py
|
||||
+++ b/gtkdoc/fixxref.py
|
||||
@@ -175,7 +175,7 @@ def ReadDevhelp(file, use_absolute_links):
|
||||
|
||||
logging.info('Scanning index file=%s, absolute=%d, dir=%s', file, use_absolute_links, dir)
|
||||
|
||||
- for line in open(file):
|
||||
+ for line in common.open_text(file):
|
||||
m = re.search(r' link="([^#]*)#([^"]*)"', line)
|
||||
if m:
|
||||
link = m.group(1) + '#' + m.group(2)
|
||||
@@ -184,7 +184,7 @@ def ReadDevhelp(file, use_absolute_links):
|
||||
|
||||
|
||||
def ReadSections(options):
|
||||
- for line in open(options.module + '-sections.txt'):
|
||||
+ for line in common.open_text(options.module + '-sections.txt'):
|
||||
m1 = re.search(r'^<SUBSECTION\s*(.*)>', line)
|
||||
if line.startswith('#') or line.strip() == '':
|
||||
continue
|
||||
@@ -220,9 +220,7 @@ def FixCrossReferences(options):
|
||||
def FixHTMLFile(options, file):
|
||||
logging.info('Fixing file: %s', file)
|
||||
|
||||
- content = open(file).read()
|
||||
- if sys.version_info < (3,):
|
||||
- content = content.decode('utf-8')
|
||||
+ content = common.open_text(file).read()
|
||||
|
||||
if config.highlight:
|
||||
# FIXME: ideally we'd pass a clue about the example language to the highligher
|
||||
@@ -266,9 +264,8 @@ def FixHTMLFile(options, file):
|
||||
|
||||
new_file = file + '.new'
|
||||
content = '\n'.join(lines)
|
||||
- if sys.version_info < (3,):
|
||||
- content = content.encode('utf-8')
|
||||
- open(new_file, 'w').write(content)
|
||||
+ with common.open_text(new_file, 'w') as h:
|
||||
+ h.write(content)
|
||||
|
||||
os.unlink(file)
|
||||
os.rename(new_file, file)
|
||||
@@ -381,7 +378,7 @@ def HighlightSourceVim(options, type, source):
|
||||
script += "%s -n -e -u NONE -T xterm >/dev/null" % config.highlight
|
||||
subprocess.check_call([script], shell=True)
|
||||
|
||||
- highlighted_source = open(temp_source_file + ".html").read()
|
||||
+ highlighted_source = common.open_text(temp_source_file + ".html").read()
|
||||
highlighted_source = re.sub(r'.*<pre\b[^>]*>\n', '', highlighted_source, flags=re.MULTILINE)
|
||||
highlighted_source = re.sub(r'</pre>.*', '', highlighted_source, flags=re.MULTILINE)
|
||||
|
||||
diff --git a/gtkdoc/mkdb.py b/gtkdoc/mkdb.py
|
||||
index e103138..6c1538f 100644
|
||||
--- a/gtkdoc/mkdb.py
|
||||
+++ b/gtkdoc/mkdb.py
|
||||
@@ -302,7 +302,8 @@ def Run(options):
|
||||
OutputSinceIndexes()
|
||||
OutputAnnotationGlossary()
|
||||
|
||||
- open(os.path.join(ROOT_DIR, 'sgml.stamp'), 'w').write('timestamp')
|
||||
+ with open(os.path.join(ROOT_DIR, 'sgml.stamp'), 'w') as h:
|
||||
+ h.write('timestamp')
|
||||
|
||||
|
||||
def OutputObjectList():
|
||||
@@ -315,7 +316,7 @@ def OutputObjectList():
|
||||
old_object_index = os.path.join(DB_OUTPUT_DIR, "object_index.sgml")
|
||||
new_object_index = os.path.join(DB_OUTPUT_DIR, "object_index.new")
|
||||
|
||||
- OUTPUT = open(new_object_index, 'w')
|
||||
+ OUTPUT = common.open_text(new_object_index, 'w')
|
||||
|
||||
OUTPUT.write('''%s
|
||||
<informaltable pgwide="1" frame="none">
|
||||
@@ -377,7 +378,7 @@ def OutputDB(file, options):
|
||||
"""
|
||||
|
||||
logging.info("Reading: %s", file)
|
||||
- INPUT = open(file)
|
||||
+ INPUT = common.open_text(file)
|
||||
filename = ''
|
||||
book_top = ''
|
||||
book_bottom = ''
|
||||
@@ -1001,7 +1002,7 @@ def OutputAnnotationGlossary():
|
||||
rerun = True
|
||||
break
|
||||
|
||||
- OUTPUT = open(new_glossary, 'w')
|
||||
+ OUTPUT = common.open_text(new_glossary, 'w')
|
||||
|
||||
OUTPUT.write('''%s
|
||||
<glossary id="annotation-glossary">
|
||||
@@ -1049,7 +1050,7 @@ def ReadKnownSymbols(file):
|
||||
subsection = ''
|
||||
|
||||
logging.info("Reading: %s", file)
|
||||
- INPUT = open(file)
|
||||
+ INPUT = common.open_text(file)
|
||||
for line in INPUT:
|
||||
if line.startswith('#'):
|
||||
continue
|
||||
@@ -2157,7 +2158,7 @@ def OutputDBFile(file, title, section_id, includes, functions_synop, other_synop
|
||||
old_db_file = os.path.join(DB_OUTPUT_DIR, file + '.xml')
|
||||
new_db_file = os.path.join(DB_OUTPUT_DIR, file + '.xml.new')
|
||||
|
||||
- OUTPUT = open(new_db_file, 'w')
|
||||
+ OUTPUT = common.open_text(new_db_file, 'w')
|
||||
|
||||
object_anchors = ''
|
||||
for fobject in file_objects:
|
||||
@@ -2324,7 +2325,7 @@ def OutputProgramDBFile(program, section_id):
|
||||
old_db_file = os.path.join(DB_OUTPUT_DIR, program + ".xml")
|
||||
new_db_file = os.path.join(DB_OUTPUT_DIR, program + ".xml.new")
|
||||
|
||||
- OUTPUT = open(new_db_file, 'w')
|
||||
+ OUTPUT = common.open_text(new_db_file, 'w')
|
||||
|
||||
OUTPUT.write('''%s
|
||||
<refentry id="%s">
|
||||
@@ -2367,9 +2368,9 @@ def OutputExtraFile(file):
|
||||
old_db_file = os.path.join(DB_OUTPUT_DIR, basename)
|
||||
new_db_file = os.path.join(DB_OUTPUT_DIR, basename + ".new")
|
||||
|
||||
- contents = open(file).read()
|
||||
+ contents = common.open_text(file).read()
|
||||
|
||||
- OUTPUT = open(new_db_file, 'w')
|
||||
+ OUTPUT = common.open_text(new_db_file, 'w')
|
||||
OUTPUT.write(ExpandAbbreviations(basename + " file", contents))
|
||||
OUTPUT.close()
|
||||
|
||||
@@ -2378,7 +2379,7 @@ def OutputExtraFile(file):
|
||||
|
||||
def GetDocbookHeader(main_file):
|
||||
if os.path.exists(main_file):
|
||||
- INPUT = open(main_file)
|
||||
+ INPUT = common.open_text(main_file)
|
||||
header = ''
|
||||
for line in INPUT:
|
||||
if re.search(r'^\s*<(book|chapter|article)', line):
|
||||
@@ -2421,7 +2422,7 @@ def OutputBook(main_file, book_top, book_bottom):
|
||||
old_file = os.path.join(DB_OUTPUT_DIR, MODULE + "-doc.top")
|
||||
new_file = os.path.join(DB_OUTPUT_DIR, MODULE + "-doc.top.new")
|
||||
|
||||
- OUTPUT = open(new_file, 'w')
|
||||
+ OUTPUT = common.open_text(new_file, 'w')
|
||||
OUTPUT.write(book_top)
|
||||
OUTPUT.close()
|
||||
|
||||
@@ -2430,7 +2431,7 @@ def OutputBook(main_file, book_top, book_bottom):
|
||||
old_file = os.path.join(DB_OUTPUT_DIR, MODULE + "-doc.bottom")
|
||||
new_file = os.path.join(DB_OUTPUT_DIR, MODULE + "-doc.bottom.new")
|
||||
|
||||
- OUTPUT = open(new_file, 'w')
|
||||
+ OUTPUT = common.open_text(new_file, 'w')
|
||||
OUTPUT.write(book_bottom)
|
||||
OUTPUT.close()
|
||||
|
||||
@@ -2439,7 +2440,7 @@ def OutputBook(main_file, book_top, book_bottom):
|
||||
# If the main docbook file hasn't been created yet, we create it here.
|
||||
# The user can tweak it later.
|
||||
if main_file and not os.path.exists(main_file):
|
||||
- OUTPUT = open(main_file, 'w')
|
||||
+ OUTPUT = common.open_text(main_file, 'w')
|
||||
|
||||
logging.info("no master doc, create default one at: " + main_file)
|
||||
|
||||
@@ -3665,7 +3666,7 @@ def ScanSourceFile(ifile, ignore_files):
|
||||
|
||||
logging.info("Scanning source file: %s", ifile)
|
||||
|
||||
- SRCFILE = open(ifile)
|
||||
+ SRCFILE = common.open_text(ifile)
|
||||
in_comment_block = False
|
||||
symbol = None
|
||||
in_part = ''
|
||||
@@ -3983,7 +3984,7 @@ def OutputMissingDocumentation():
|
||||
buffer_deprecated = ''
|
||||
buffer_descriptions = ''
|
||||
|
||||
- UNDOCUMENTED = open(new_undocumented_file, 'w')
|
||||
+ UNDOCUMENTED = common.open_text(new_undocumented_file, 'w')
|
||||
|
||||
for symbol in sorted(iterkeys(AllSymbols)):
|
||||
# FIXME: should we print common.LogWarnings for undocumented stuff?
|
||||
@@ -4064,7 +4065,7 @@ def OutputUndeclaredSymbols():
|
||||
old_undeclared_file = os.path.join(ROOT_DIR, MODULE + "-undeclared.txt")
|
||||
new_undeclared_file = os.path.join(ROOT_DIR, MODULE + "-undeclared.new")
|
||||
|
||||
- UNDECLARED = open(new_undeclared_file, 'w')
|
||||
+ UNDECLARED = common.open_text(new_undeclared_file, 'w')
|
||||
|
||||
if UndeclaredSymbols:
|
||||
UNDECLARED.write("\n".join(sorted(iterkeys(UndeclaredSymbols))))
|
||||
@@ -4089,7 +4090,7 @@ def OutputUnusedSymbols():
|
||||
old_unused_file = os.path.join(ROOT_DIR, MODULE + "-unused.txt")
|
||||
new_unused_file = os.path.join(ROOT_DIR, MODULE + "-unused.new")
|
||||
|
||||
- UNUSED = open(new_unused_file, 'w')
|
||||
+ UNUSED = common.open_text(new_unused_file, 'w')
|
||||
|
||||
for symbol in sorted(iterkeys(Declarations)):
|
||||
if not symbol in DeclarationOutput:
|
||||
@@ -4110,7 +4111,7 @@ def OutputUnusedSymbols():
|
||||
|
||||
def OutputAllSymbols():
|
||||
"""Outputs list of all symbols to a file."""
|
||||
- SYMBOLS = open(os.path.join(ROOT_DIR, MODULE + "-symbols.txt"), 'w')
|
||||
+ SYMBOLS = common.open_text(os.path.join(ROOT_DIR, MODULE + "-symbols.txt"), 'w')
|
||||
|
||||
for symbol in sorted(iterkeys(AllSymbols)):
|
||||
SYMBOLS.write(symbol + "\n")
|
||||
@@ -4119,7 +4120,7 @@ def OutputAllSymbols():
|
||||
|
||||
def OutputSymbolsWithoutSince():
|
||||
"""Outputs list of all symbols without a since tag to a file."""
|
||||
- SYMBOLS = open(os.path.join(ROOT_DIR, MODULE + "-nosince.txt"), 'w')
|
||||
+ SYMBOLS = common.open_text(os.path.join(ROOT_DIR, MODULE + "-nosince.txt"), 'w')
|
||||
|
||||
for symbol in sorted(iterkeys(SourceSymbolDocs)):
|
||||
if symbol in Since:
|
||||
@@ -4257,7 +4258,7 @@ def ReadDeclarationsFile(ifile, override):
|
||||
DeclarationConditional.clear()
|
||||
DeclarationOutput.clear()
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
declaration_type = ''
|
||||
declaration_name = None
|
||||
declaration = None
|
||||
@@ -4371,7 +4372,7 @@ def ReadSignalsFile(ifile):
|
||||
if not os.path.isfile(ifile):
|
||||
return
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
line_number = 0
|
||||
for line in INPUT:
|
||||
line_number += 1
|
||||
@@ -4437,7 +4438,7 @@ def ReadObjectHierarchy(ifile):
|
||||
logging.debug('no *-hierarchy.tx')
|
||||
return
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
|
||||
# Only emit objects if they are supposed to be documented, or if
|
||||
# they have documented children. To implement this, we maintain a
|
||||
@@ -4488,7 +4489,7 @@ def ReadObjectHierarchy(ifile):
|
||||
|
||||
logging.debug('got %d entries for hierarchy', len(tree))
|
||||
|
||||
- OUTPUT = open(new_tree_index, 'w')
|
||||
+ OUTPUT = common.open_text(new_tree_index, 'w')
|
||||
OUTPUT.write(MakeDocHeader("screen") + "\n<screen>\n" + AddTreeLineArt(tree) + "\n</screen>\n")
|
||||
OUTPUT.close()
|
||||
|
||||
@@ -4509,7 +4510,7 @@ def ReadInterfaces(ifile):
|
||||
if not os.path.isfile(ifile):
|
||||
return
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
|
||||
for line in INPUT:
|
||||
line = line.strip()
|
||||
@@ -4542,7 +4543,7 @@ def ReadPrerequisites(ifile):
|
||||
if not os.path.isfile(ifile):
|
||||
return
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
|
||||
for line in INPUT:
|
||||
line = line.strip()
|
||||
@@ -4593,7 +4594,7 @@ def ReadArgsFile(ifile):
|
||||
if not os.path.isfile(ifile):
|
||||
return
|
||||
|
||||
- INPUT = open(ifile)
|
||||
+ INPUT = common.open_text(ifile)
|
||||
line_number = 0
|
||||
for line in INPUT:
|
||||
line_number += 1
|
||||
diff --git a/gtkdoc/mkhtml.py b/gtkdoc/mkhtml.py
|
||||
index 80ddadf..3d03e0a 100644
|
||||
--- a/gtkdoc/mkhtml.py
|
||||
+++ b/gtkdoc/mkhtml.py
|
||||
@@ -90,5 +90,6 @@ def run(options):
|
||||
for f in glob(styledir + '/*.png') + glob(styledir + '/*.css'):
|
||||
shutil.copy(f, '.')
|
||||
|
||||
- open('../html.stamp', 'w').write('timestamp')
|
||||
+ with open('../html.stamp', 'w') as h:
|
||||
+ h.write('timestamp')
|
||||
return res
|
||||
diff --git a/gtkdoc/mkpdf.py b/gtkdoc/mkpdf.py
|
||||
index 5fd9ecb..485b487 100755
|
||||
--- a/gtkdoc/mkpdf.py
|
||||
+++ b/gtkdoc/mkpdf.py
|
||||
@@ -37,7 +37,8 @@ def run_xsltproc(options, args):
|
||||
command += ['--path', path]
|
||||
pc = subprocess.Popen(command + args, stderr=subprocess.PIPE)
|
||||
(o, stde) = pc.communicate()
|
||||
- open('profile.txt', 'wb').write(stde)
|
||||
+ with open('profile.txt', 'wb') as h:
|
||||
+ h.write(stde)
|
||||
return pc.returncode
|
||||
|
||||
|
||||
@@ -118,5 +119,6 @@ def run(options):
|
||||
print("dblatex or fop must be installed to use gtkdoc-mkpdf.")
|
||||
res = 1
|
||||
|
||||
- open('pdf.stamp', 'w').write('timestamp')
|
||||
+ with open('pdf.stamp', 'w') as h:
|
||||
+ h.write('timestamp')
|
||||
return res
|
||||
diff --git a/gtkdoc/rebase.py b/gtkdoc/rebase.py
|
||||
index e518586..b329c51 100755
|
||||
--- a/gtkdoc/rebase.py
|
||||
+++ b/gtkdoc/rebase.py
|
||||
@@ -136,7 +136,7 @@ gunzip %s/%s
|
||||
def ReadDevhelp(dir, file):
|
||||
onlinedir = None
|
||||
|
||||
- for line in open(os.path.join(dir, file)):
|
||||
+ for line in common.open_text(os.path.join(dir, file)):
|
||||
# online must come before chapter/functions
|
||||
if '<chapters' in line or '<functions' in line:
|
||||
break
|
||||
@@ -150,7 +150,7 @@ def ReadDevhelp(dir, file):
|
||||
def ReadIndex(dir, file):
|
||||
onlinedir = None
|
||||
|
||||
- for line in open(os.path.join(dir, file)):
|
||||
+ for line in common.open_text(os.path.join(dir, file)):
|
||||
# ONLINE must come before any ANCHORs
|
||||
if '<ANCHOR' in line:
|
||||
break
|
||||
@@ -207,10 +207,11 @@ def RebaseFile(filename, options):
|
||||
def repl_func(match):
|
||||
return match.group(1) + RebaseLink(match.group(2), options) + match.group(3)
|
||||
|
||||
- contents = open(filename).read()
|
||||
+ contents = common.open_text(filename).read()
|
||||
processed = re.sub(regex, repl_func, contents)
|
||||
newfilename = filename + '.new'
|
||||
- open(newfilename, 'w').write(processed)
|
||||
+ with common.open_text(newfilename, 'w') as h:
|
||||
+ h.write(processed)
|
||||
os.unlink(filename)
|
||||
os.rename(newfilename, filename)
|
||||
|
||||
diff --git a/gtkdoc/scan.py b/gtkdoc/scan.py
|
||||
index 0843519..a106e48 100644
|
||||
--- a/gtkdoc/scan.py
|
||||
+++ b/gtkdoc/scan.py
|
||||
@@ -77,16 +77,16 @@ def Run(options):
|
||||
for dir in options.source_dir:
|
||||
ScanHeaders(dir, section_list, decl_list, get_types, options)
|
||||
|
||||
- with open(new_decl_list, 'w') as f:
|
||||
+ with common.open_text(new_decl_list, 'w') as f:
|
||||
for section in sorted(iterkeys(section_list)):
|
||||
f.write(section_list[section])
|
||||
|
||||
- with open(new_decl, 'w') as f:
|
||||
+ with common.open_text(new_decl, 'w') as f:
|
||||
for decl in decl_list:
|
||||
f.write(decl)
|
||||
|
||||
if options.rebuild_types:
|
||||
- with open(new_types, 'w') as f:
|
||||
+ with common.open_text(new_types, 'w') as f:
|
||||
for func in sorted(get_types):
|
||||
f.write(func + '\n')
|
||||
|
||||
@@ -226,7 +226,7 @@ def ScanHeader(input_file, section_list, decl_list, get_types, options):
|
||||
|
||||
logging.info('Scanning %s', input_file)
|
||||
|
||||
- for line in open(input_file):
|
||||
+ for line in common.open_text(input_file):
|
||||
# If this is a private header, skip it.
|
||||
if re.search(r'%^\s*/\*\s*<\s*private_header\s*>\s*\*/', line):
|
||||
return
|
||||
diff --git a/gtkdoc/scangobj.py b/gtkdoc/scangobj.py
|
||||
index e6db6cd..116270a 100644
|
||||
--- a/gtkdoc/scangobj.py
|
||||
+++ b/gtkdoc/scangobj.py
|
||||
@@ -1185,7 +1185,7 @@ MAIN_CODE_END = """
|
||||
def run(options):
|
||||
|
||||
c_file = options.module + '-scan.c'
|
||||
- output = open(c_file, 'w')
|
||||
+ output = common.open_text(c_file, 'w')
|
||||
|
||||
base_filename = os.path.join(options.output_dir, options.module)
|
||||
old_signals_filename = base_filename + '.signals'
|
||||
@@ -1206,7 +1206,7 @@ def run(options):
|
||||
get_types = ""
|
||||
ntypes = 1
|
||||
|
||||
- for line in open(options.types):
|
||||
+ for line in common.open_text(options.types):
|
||||
if line.startswith('#include'):
|
||||
includes += line
|
||||
elif line.startswith('%') or line.strip() == '':
|
@ -1,3 +1,11 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Oct 24 14:40:59 UTC 2017 - dimstar@opensuse.org
|
||||
|
||||
- Switch to python3: add PYTHON=%{_bindir}/python3 to configure.
|
||||
- Add: gtk-doc-open-docs-as-utf8.patch: Always open files using
|
||||
utf-8. In python3, strings are differently represented
|
||||
internally.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Oct 20 09:08:01 UTC 2017 - dimstar@opensuse.org
|
||||
|
||||
|
@ -27,6 +27,8 @@ Url: http://www.gtk.org/gtk-doc/
|
||||
Source: https://download.gnome.org/sources/gtk-doc/1.26/%{name}-%{version}.tar.xz
|
||||
# PATCH-FIX-UPSTREAM gtk-doc-Generate-main-sgml.patch bgo#786174 -- Generate main sgml file by waiting on mkdb
|
||||
Patch0: gtk-doc-Generate-main-sgml.patch
|
||||
# PATCH-FIX-UPSTREAM gtk-doc-open-docs-as-utf8.patch dimstar@opensuse.org -- Always open files using utf-8
|
||||
Patch1: gtk-doc-open-docs-as-utf8.patch
|
||||
BuildRequires: docbook-xsl-stylesheets
|
||||
BuildRequires: libtool
|
||||
BuildRequires: libxml2-tools
|
||||
@ -61,10 +63,11 @@ generate the documentation for GLib, Gtk+, and GNOME.
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
|
||||
%build
|
||||
autoreconf -fiv
|
||||
%configure
|
||||
%configure PYTHON=%{_bindir}/python3
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
|
Loading…
Reference in New Issue
Block a user