On Wed, Feb 6, 2019 at 7:17 PM Markus Armbruster <arm...@redhat.com> wrote: > > The next commit wants to generate qapi-emit-events.{c.h}. To support > 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 <arm...@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > scripts/qapi/common.py | 35 +++++++++++++++++++++++++---------- > scripts/qapi/types.py | 2 +- > 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 > @@ -2327,27 +2327,42 @@ class QAPISchemaModularCVisitor(QAPISchemaVisitor): > 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] > > @@ -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" > -- > 2.17.2 >