Skip to content

Commit

Permalink
qapi: Prepare for system modules other than 'builtin'
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Markus Armbruster committed Feb 18, 2019
1 parent dcac647 commit c2e196a
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 12 deletions.
35 changes: 25 additions & 10 deletions scripts/qapi/common.py
Expand Up @@ -2327,27 +2327,42 @@ def __init__(self, prefix, what, blurb, pydoc):
self._module = {}
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]

Expand All @@ -2372,7 +2387,7 @@ def visit_module(self, name):
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):
Expand Down
2 changes: 1 addition & 1 deletion scripts/qapi/types.py
Expand Up @@ -183,7 +183,7 @@ def __init__(self, prefix):
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"
Expand Down
2 changes: 1 addition & 1 deletion scripts/qapi/visit.py
Expand Up @@ -284,7 +284,7 @@ def __init__(self, prefix):
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"
Expand Down

0 comments on commit c2e196a

Please sign in to comment.