qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: marcandre.lureau@redhat.com, eblake@redhat.com
Subject: [Qemu-devel] [PATCH v5 04/18] qapi: Prepare for system modules other than 'builtin'
Date: Thu, 14 Feb 2019 16:22:37 +0100	[thread overview]
Message-ID: <20190214152251.2073-5-armbru@redhat.com> (raw)
In-Reply-To: <20190214152251.2073-1-armbru@redhat.com>

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>
---
 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

  parent reply	other threads:[~2019-02-14 15:23 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-14 15:22 [Qemu-devel] [PATCH v5 00/18] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 01/18] qapi: Belatedly document modular code generation Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 02/18] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 03/18] qapi: Clean up modular built-in code generation a bit Markus Armbruster
2019-02-14 15:22 ` Markus Armbruster [this message]
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 05/18] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 06/18] build-sys: move qmp-introspect per target Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 07/18] build: Deal with all of QAPI's .o in qapi/Makefile.objs Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 08/18] qapi: New module target.json Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 09/18] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386 Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 10/18] qapi: make s390 commands depend on TARGET_S390X Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 11/18] target.json: add a note about query-cpu* not being s390x-specific Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 12/18] qapi: make query-gic-capabilities depend on TARGET_ARM Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 13/18] qapi: make query-cpu-model-expansion depend on s390 or x86 Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 14/18] qapi: make query-cpu-definitions depend on specific targets Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 15/18] qapi: remove qmp_unregister_command() Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 16/18] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 17/18] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
2019-02-14 15:22 ` [Qemu-devel] [PATCH v5 18/18] qapi: move RTC_CHANGE to the target schema Markus Armbruster
2019-02-14 15:24 ` [Qemu-devel] [PATCH v5 00/18] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
2019-02-14 16:01   ` Eric Blake
2019-02-15  7:53     ` [Qemu-devel] Proper use of unnest-vars (was: [PATCH v5 00/18] qapi: add #if pre-processor conditions to generated code (part 3)) Markus Armbruster
2019-02-15  8:29       ` Paolo Bonzini
2019-02-15  9:26         ` [Qemu-devel] Proper use of unnest-vars Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190214152251.2073-5-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=eblake@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).