 2ebb09f34f
			
		
	
	
		2ebb09f34f
		
	
	
	
	
		
			
			This replaces use of the constants from the QapiSpecialFeatures enum, with constants from the auto-generate QapiFeatures enum in qapi-features.h The 'deprecated' and 'unstable' features still have a little bit of special handling, being force defined to be the 1st + 2nd features in the enum, regardless of whether they're used in the schema. This retains compatibility with common code that references the features via the QapiSpecialFeatures constants. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20250205123550.2754387-5-berrange@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> [Imports tidied up with isort] Signed-off-by: Markus Armbruster <armbru@redhat.com>
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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)
 |