[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