[libvirt] [PATCH 02/16] hyperv: add cim types support to code generator
John Ferlan
jferlan at redhat.com
Wed Sep 14 21:16:28 UTC 2016
On 08/09/2016 08:39 AM, Jason Miesionczek wrote:
> ---
> src/hyperv/hyperv_wmi_generator.py | 57 ++++++++++++++++++++++++++++++++++++--
> 1 file changed, 54 insertions(+), 3 deletions(-)
>
Not that familiar with the needs here. I assume it's fine, but your
commit message should describe what's going on. As in what these
changes do.
John
> diff --git a/src/hyperv/hyperv_wmi_generator.py b/src/hyperv/hyperv_wmi_generator.py
> index f767d54..8384634 100755
> --- a/src/hyperv/hyperv_wmi_generator.py
> +++ b/src/hyperv/hyperv_wmi_generator.py
> @@ -68,7 +68,7 @@ class Class:
> header += "\n"
> header += "#define %s_RESOURCE_URI \\\n" % name_upper
>
> - if self.name.startswith("Win32_"):
> + if self.name.startswith("Win32_") or self.name.startswith("CIM_DataFile"):
> header += " \"http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/%s\"\n" % self.name
> else:
> header += " \"http://schemas.microsoft.com/wbem/wsman/1/wmi/root/virtualization/%s\"\n" % self.name
> @@ -100,6 +100,25 @@ class Class:
>
> return header
>
> + def generate_cimtypes_header2(self):
> + header = separator
> + header += " * %s\n" % self.name
> + header += " */\n"
> + header += "\n"
> + header += "CimTypes cimTypes_%s[] = {\n" % self.name
> + for property in self.properties:
> + header += property.generate_cimtypes_header2()
> + header += ",\n"
> + header += "\t{ \"\", \"\", 0 },\n};\n\n"
> +
> + return header
> +
> + def generate_cimtypes_header3(self):
> + header = " { \"%s" % self.name
> + header += "\", cimTypes_%s" % self.name
> + header += " },\n"
> +
> + return header
>
> def generate_source(self):
> name_upper = self.name.upper()
> @@ -113,7 +132,7 @@ class Class:
> % (self.name.replace("_", ""), self.name)
> source += "{\n"
>
> - if self.name.startswith("Win32_"):
> + if self.name.startswith("Win32_") or self.name.startswith("CIM_DataFile"):
> source += " return hypervEnumAndPull(priv, query, ROOT_CIMV2,\n"
> else:
> source += " return hypervEnumAndPull(priv, query, ROOT_VIRTUALIZATION,\n"
> @@ -189,6 +208,16 @@ class Property:
> return " SER_NS_%s(%s_RESOURCE_URI, \"%s\", 1),\n" \
> % (Property.typemap[self.type], class_name.upper(), self.name)
>
> + def generate_cimtypes_header2(self):
> + header = " { \"%s" % self.name
> + header += "\", \"%s\", " % self.type
> + if self.is_array:
> + header += "true"
> + else:
> + header += "false"
> + header += " }"
> + return header
> +
>
>
> def open_and_print(filename):
> @@ -238,7 +267,20 @@ def parse_class(block):
>
> return Class(name=name, properties=properties)
>
> -
> +def generate_cimtypes_header1():
> + header = "struct cimTypes{\n"
> + header += " const char *name;\n"
> + header += " const char *type;\n"
> + header += " bool isArray;\n"
> + header += "};\n"
> + header += "typedef struct cimTypes CimTypes;\n\n"
> + header += "struct cimClasses{\n"
> + header += " const char *name;\n"
> + header += " CimTypes *cimTypesPtr;\n"
> + header += "};\n"
> + header += "typedef struct cimClasses CimClasses;\n\n"
> +
> + return header
>
> def main():
> if "srcdir" in os.environ:
> @@ -253,6 +295,7 @@ def main():
> classes_typedef = open_and_print(os.path.join(output_dirname, "hyperv_wmi_classes.generated.typedef"))
> classes_header = open_and_print(os.path.join(output_dirname, "hyperv_wmi_classes.generated.h"))
> classes_source = open_and_print(os.path.join(output_dirname, "hyperv_wmi_classes.generated.c"))
> + cimtypes_header = open_and_print(os.path.join(output_dirname, "hyperv_wmi_cimtypes.generated.h"))
>
> # parse input file
> number = 0
> @@ -294,6 +337,8 @@ def main():
> classes_typedef.write(notice)
> classes_header.write(notice)
> classes_source.write(notice)
> + cimtypes_header.write(notice)
> + cimtypes_header.write(generate_cimtypes_header1())
>
> names = classes_by_name.keys()
> names.sort()
> @@ -304,6 +349,12 @@ def main():
> classes_typedef.write(classes_by_name[name].generate_classes_typedef())
> classes_header.write(classes_by_name[name].generate_classes_header())
> classes_source.write(classes_by_name[name].generate_classes_source())
> + cimtypes_header.write(classes_by_name[name].generate_cimtypes_header2())
> +
> + cimtypes_header.write("CimClasses cimClasses[] = {\n")
> + for name in names:
> + cimtypes_header.write(classes_by_name[name].generate_cimtypes_header3())
> + cimtypes_header.write("\t{ \"\", NULL },\n};\n")
>
>
>
>
More information about the libvir-list
mailing list