You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qemu/scripts/qapi/features.py

49 lines
1.4 KiB
Python

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