QEMU main repository: Please see https://www.qemu.org/docs/master/devel/submitting-a-patch.html for how to submit changes to QEMU. Pull Requests are ignored. Please only use release tarballs from the QEMU website. http://www.qemu.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
1.4 KiB

"""
QAPI features generator
Copyright 2024 Red Hat
This work is licensed under the terms of the GNU GPL, version 2.
# See the COPYING file in the top-level directory.
"""
from typing import ValuesView
from .common import c_enum_const, c_name
from .gen import QAPISchemaMonolithicCVisitor
from .schema import QAPISchema, QAPISchemaFeature
class QAPISchemaGenFeatureVisitor(QAPISchemaMonolithicCVisitor):
def __init__(self, prefix: str):
super().__init__(
prefix, 'qapi-features',
' * Schema-defined QAPI features',
__doc__)
self.features: ValuesView[QAPISchemaFeature]
def visit_begin(self, schema: QAPISchema) -> None:
self.features = schema.features()
self._genh.add("#include \"qapi/util.h\"\n\n")
def visit_end(self) -> None:
self._genh.add("typedef enum {\n")
for f in self.features:
self._genh.add(f" {c_enum_const('qapi_feature', f.name)}")
if f.name in QAPISchemaFeature.SPECIAL_NAMES:
self._genh.add(f" = {c_enum_const('qapi', f.name)},\n")
else:
self._genh.add(",\n")
self._genh.add("} " + c_name('QapiFeature') + ";\n")
def gen_features(schema: QAPISchema,
output_dir: str,
prefix: str) -> None:
vis = QAPISchemaGenFeatureVisitor(prefix)
schema.visit(vis)
vis.write(output_dir)