All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: marcandre.lureau@redhat.com
Subject: [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin'
Date: Wed,  6 Feb 2019 19:17:12 +0100	[thread overview]
Message-ID: <20190206181725.14337-5-armbru@redhat.com> (raw)
In-Reply-To: <20190206181725.14337-1-armbru@redhat.com>

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 <armbru@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-06 18:18 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-06 18:17 [Qemu-devel] [PATCH v3 00/17] qapi: add #if pre-processor conditions to generated code (part 3) Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 01/17] qapi: Belatedly document modular code generation Markus Armbruster
2019-02-06 18:26   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 02/17] qapi: Fix up documentation for recent commit a95291007b2 Markus Armbruster
2019-02-06 18:19   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 03/17] qapi: Clean up modular built-in code generation a bit Markus Armbruster
2019-02-07 11:15   ` Marc-André Lureau
2019-02-07 12:46     ` Markus Armbruster
2019-02-06 18:17 ` Markus Armbruster [this message]
2019-02-07 11:16   ` [Qemu-devel] [PATCH v3 04/17] qapi: Prepare for system modules other than 'builtin' Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 05/17] qapi: Generate QAPIEvent stuff into separate files Markus Armbruster
2019-02-07 11:16   ` Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 06/17] build-sys: move qmp-introspect per target Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 07/17] qapi: New module target.json Markus Armbruster
2019-02-07 11:16   ` Marc-André Lureau
2019-02-07 14:58   ` Eric Blake
2019-02-07 16:32     ` Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 08/17] qapi: make rtc-reset-reinjection and SEV depend on TARGET_I386 Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 09/17] qapi: make s390 commands depend on TARGET_S390X Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 10/17] target.json: add a note about query-cpu* not being s390x-specific Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 11/17] qapi: make query-gic-capabilities depend on TARGET_ARM Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 12/17] qapi: make query-cpu-model-expansion depend on s390 or x86 Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 13/17] qapi: make query-cpu-definitions depend on specific targets Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 14/17] qapi: remove qmp_unregister_command() Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 15/17] Revert "qapi-events: add 'if' condition to implicit event enum" Markus Armbruster
2019-02-06 18:30   ` Marc-André Lureau
2019-02-06 20:08     ` Markus Armbruster
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 16/17] qmp: Deprecate query-events in favor of query-qmp-schema Markus Armbruster
2019-02-06 18:42   ` Eric Blake
2019-02-07 12:29     ` [Qemu-devel] [libvirt] " Peter Krempa
2019-02-07 13:46       ` Markus Armbruster
2019-02-08 11:17         ` Peter Krempa
2019-02-07 11:19   ` [Qemu-devel] " Marc-André Lureau
2019-02-06 18:17 ` [Qemu-devel] [PATCH v3 17/17] qapi: move RTC_CHANGE to the target schema Markus Armbruster
2019-02-06 18:40   ` Eric Blake
2019-02-06 20:09     ` 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=20190206181725.14337-5-armbru@redhat.com \
    --to=armbru@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.