kernel_abi.py (4f2c0a4acffbec01079c28f839422e64ddeff004) kernel_abi.py (1d64a1029884f7bfbf00f5c04f7ef04a437fe8a4)
1# -*- coding: utf-8; mode: python -*-
2# coding=utf-8
3# SPDX-License-Identifier: GPL-2.0
4#
5u"""
6 kernel-abi
7 ~~~~~~~~~~
8

--- 25 unchanged lines hidden (view full) ---

34
35import codecs
36import os
37import subprocess
38import sys
39import re
40import kernellog
41
1# -*- coding: utf-8; mode: python -*-
2# coding=utf-8
3# SPDX-License-Identifier: GPL-2.0
4#
5u"""
6 kernel-abi
7 ~~~~~~~~~~
8

--- 25 unchanged lines hidden (view full) ---

34
35import codecs
36import os
37import subprocess
38import sys
39import re
40import kernellog
41
42from os import path
43
44from docutils import nodes, statemachine
45from docutils.statemachine import ViewList
46from docutils.parsers.rst import directives, Directive
47from docutils.utils.error_reporting import ErrorString
48from sphinx.util.docutils import switch_source_input
49
50__version__ = '1.0'
51

--- 16 unchanged lines hidden (view full) ---

68 final_argument_whitespace = True
69
70 option_spec = {
71 "debug" : directives.flag,
72 "rst" : directives.unchanged
73 }
74
75 def run(self):
42from docutils import nodes, statemachine
43from docutils.statemachine import ViewList
44from docutils.parsers.rst import directives, Directive
45from docutils.utils.error_reporting import ErrorString
46from sphinx.util.docutils import switch_source_input
47
48__version__ = '1.0'
49

--- 16 unchanged lines hidden (view full) ---

66 final_argument_whitespace = True
67
68 option_spec = {
69 "debug" : directives.flag,
70 "rst" : directives.unchanged
71 }
72
73 def run(self):
76
77 doc = self.state.document
78 if not doc.settings.file_insertion_enabled:
79 raise self.warning("docutils: file insertion disabled")
80
74 doc = self.state.document
75 if not doc.settings.file_insertion_enabled:
76 raise self.warning("docutils: file insertion disabled")
77
81 env = doc.settings.env
82 cwd = path.dirname(doc.current_source)
83 cmd = "get_abi.pl rest --enable-lineno --dir "
84 cmd += self.arguments[0]
78 srctree = os.path.abspath(os.environ["srctree"])
85
79
80 args = [
81 os.path.join(srctree, 'scripts/get_abi.pl'),
82 'rest',
83 '--enable-lineno',
84 '--dir', os.path.join(srctree, 'Documentation', self.arguments[0]),
85 ]
86
86 if 'rst' in self.options:
87 if 'rst' in self.options:
87 cmd += " --rst-source"
88 args.append('--rst-source')
88
89
89 srctree = path.abspath(os.environ["srctree"])
90
91 fname = cmd
92
93 # extend PATH with $(srctree)/scripts
94 path_env = os.pathsep.join([
95 srctree + os.sep + "scripts",
96 os.environ["PATH"]
97 ])
98 shell_env = os.environ.copy()
99 shell_env["PATH"] = path_env
100 shell_env["srctree"] = srctree
101
102 lines = self.runCmd(cmd, shell=True, cwd=cwd, env=shell_env)
90 lines = subprocess.check_output(args, cwd=os.path.dirname(doc.current_source)).decode('utf-8')
103 nodeList = self.nestedParse(lines, self.arguments[0])
104 return nodeList
105
91 nodeList = self.nestedParse(lines, self.arguments[0])
92 return nodeList
93
106 def runCmd(self, cmd, **kwargs):
107 u"""Run command ``cmd`` and return its stdout as unicode."""
108
109 try:
110 proc = subprocess.Popen(
111 cmd
112 , stdout = subprocess.PIPE
113 , stderr = subprocess.PIPE
114 , **kwargs
115 )
116 out, err = proc.communicate()
117
118 out, err = codecs.decode(out, 'utf-8'), codecs.decode(err, 'utf-8')
119
120 if proc.returncode != 0:
121 raise self.severe(
122 u"command '%s' failed with return code %d"
123 % (cmd, proc.returncode)
124 )
125 except OSError as exc:
126 raise self.severe(u"problems with '%s' directive: %s."
127 % (self.name, ErrorString(exc)))
128 return out
129
130 def nestedParse(self, lines, fname):
131 env = self.state.document.settings.env
132 content = ViewList()
133 node = nodes.section()
134
135 if "debug" in self.options:
136 code_block = "\n\n.. code-block:: rst\n :linenos:\n"
137 for l in lines.split("\n"):

--- 40 unchanged lines hidden ---
94 def nestedParse(self, lines, fname):
95 env = self.state.document.settings.env
96 content = ViewList()
97 node = nodes.section()
98
99 if "debug" in self.options:
100 code_block = "\n\n.. code-block:: rst\n :linenos:\n"
101 for l in lines.split("\n"):

--- 40 unchanged lines hidden ---