diff options
author | Markus Armbruster <armbru@redhat.com> | 2019-02-14 16:22:37 +0100 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2019-02-18 14:44:04 +0100 |
commit | c2e196a9b41235a308fb6d1c516aa91ba0a807c8 (patch) | |
tree | 53908c99db599f1e5c4bcb8c6b74aa1174ca0062 /scripts | |
parent | dcac64711ea906e844ae60a5927e5580f7252c1e (diff) |
qapi: Prepare for system modules other than 'builtin'
The next commit wants to generate qapi-emit-events.{c.h}. To enable
that, extend QAPISchemaModularCVisitor to support additional "system
modules", i.e. modules that don't correspond to a (user-defined) QAPI
schema module.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20190214152251.2073-5-armbru@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/qapi/common.py | 35 | ||||
-rw-r--r-- | scripts/qapi/types.py | 2 | ||||
-rw-r--r-- | scripts/qapi/visit.py | 2 |
3 files changed, 27 insertions, 12 deletions
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 0e3ec598a4..c327ae5036 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -2328,26 +2328,41 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): self._main_module = None @staticmethod + def _is_user_module(name): + return name and not name.startswith('./') + + @staticmethod def _is_builtin_module(name): return not name def _module_basename(self, what, name): - if name is None: - return re.sub(r'-', '-builtin-', what) - basename = os.path.join(os.path.dirname(name), - self._prefix + what) - if name == self._main_module: - return basename - return basename + '-' + os.path.splitext(os.path.basename(name))[0] + ret = '' if self._is_builtin_module(name) else self._prefix + if self._is_user_module(name): + dirname, basename = os.path.split(name) + ret += what + if name != self._main_module: + ret += '-' + os.path.splitext(basename)[0] + ret = os.path.join(dirname, ret) + else: + name = name[2:] if name else 'builtin' + ret += re.sub(r'-', '-' + name + '-', what) + return ret def _add_module(self, name, blurb): - if self._main_module is None and not self._is_builtin_module(name): - self._main_module = name genc = QAPIGenC(blurb, self._pydoc) genh = QAPIGenH(blurb, self._pydoc) self._module[name] = (genc, genh) self._set_module(name) + def _add_user_module(self, name, blurb): + assert self._is_user_module(name) + if self._main_module is None: + self._main_module = name + self._add_module(name, blurb) + + def _add_system_module(self, name, blurb): + self._add_module(name and './' + name, blurb) + def _set_module(self, name): self._genc, self._genh = self._module[name] @@ -2372,7 +2387,7 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): self._genc = None self._genh = None else: - self._add_module(name, self._blurb) + self._add_user_module(name, self._blurb) self._begin_user_module(name) def visit_include(self, name, info): diff --git a/scripts/qapi/types.py b/scripts/qapi/types.py index 9fa510f7df..2bd6fcd44f 100644 --- a/scripts/qapi/types.py +++ b/scripts/qapi/types.py @@ -183,7 +183,7 @@ class QAPISchemaGenTypeVisitor(QAPISchemaModularCVisitor): QAPISchemaModularCVisitor.__init__( self, prefix, 'qapi-types', ' * Schema-defined QAPI types', __doc__) - self._add_module(None, ' * Built-in QAPI types') + self._add_system_module(None, ' * Built-in QAPI types') self._genc.preamble_add(mcgen(''' #include "qemu/osdep.h" #include "qapi/dealloc-visitor.h" diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py index ca86009398..826b8066e1 100644 --- a/scripts/qapi/visit.py +++ b/scripts/qapi/visit.py @@ -284,7 +284,7 @@ class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor): QAPISchemaModularCVisitor.__init__( self, prefix, 'qapi-visit', ' * Schema-defined QAPI visitors', __doc__) - self._add_module(None, ' * Built-in QAPI visitors') + self._add_system_module(None, ' * Built-in QAPI visitors') self._genc.preamble_add(mcgen(''' #include "qemu/osdep.h" #include "qemu-common.h" |