]> xenbits.xensource.com Git - libvirt.git/commitdiff
esx: Generate implicit _this macros
authorMatthias Bolte <matthias.bolte@googlemail.com>
Sun, 1 May 2011 06:05:58 +0000 (08:05 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Sat, 14 May 2011 09:45:08 +0000 (11:45 +0200)
Several vSphere API methods are called on global objects like the
FileManager, the PerformanceManager or the SearchIndex. The generator
input file allows to mark such methods and the generator generates
such method in a way that automatically handles marked parameter. This
is done by some special macros. Those were manually written and this
patch moves them to the generator.

src/Makefile.am
src/esx/esx_vi_generator.py
src/esx/esx_vi_methods.c

index 75ece494cfe4fed8c3a13861cb0d0bccc6a96101..58e9f825ddcfde53a4af72f8d357e6523cac3cfa 100644 (file)
@@ -347,6 +347,7 @@ ESX_DRIVER_SOURCES =                                                \
 ESX_DRIVER_GENERATED =                                                 \
                esx/esx_vi_methods.generated.c                          \
                esx/esx_vi_methods.generated.h                          \
+               esx/esx_vi_methods.generated.macro                      \
                esx/esx_vi_types.generated.c                            \
                esx/esx_vi_types.generated.h                            \
                esx/esx_vi_types.generated.typedef                      \
index ac15c7f852e170ab6c087bc517858d05002d515a..0c1c9e07811cd9339559d17f4b7ac815c84fe76a 100755 (executable)
@@ -26,7 +26,6 @@ import os.path
 
 
 
-
 OCCURRENCE__REQUIRED_ITEM = "r"
 OCCURRENCE__REQUIRED_LIST = "rl"
 OCCURRENCE__OPTIONAL_ITEM = "o"
@@ -39,10 +38,19 @@ valid_occurrences = [OCCURRENCE__REQUIRED_ITEM,
                      OCCURRENCE__OPTIONAL_LIST,
                      OCCURRENCE__IGNORED]
 
+autobind_map = { "FileManager"        : "fileManager",
+                 "PerformanceManager" : "perfManager",
+                 "PropertyCollector"  : "propertyCollector",
+                 "SearchIndex"        : "searchIndex",
+                 "SessionManager"     : "sessionManager",
+                 "VirtualDiskManager" : "virtualDiskManager" }
+
+autobind_map_usage = set()
+
 
 
-def aligned(left, right):
-    while len(left) < 59:
+def aligned(left, right, length=59):
+    while len(left) < length:
         left += " "
 
     return left + right
@@ -50,13 +58,6 @@ def aligned(left, right):
 
 
 class Parameter:
-    autobind_map = { "FileManager"        : "fileManager",
-                     "PerformanceManager" : "perfManager",
-                     "PropertyCollector"  : "propertyCollector",
-                     "SearchIndex"        : "searchIndex",
-                     "SessionManager"     : "sessionManager",
-                     "VirtualDiskManager" : "virtualDiskManager" }
-
     def __init__(self, type, name, occurrence):
         self.type = type
         self.occurrence = occurrence
@@ -212,7 +213,8 @@ class Method:
         source += "ESX_VI__METHOD(%s," % self.name
 
         if self.autobind_parameter is not None:
-            source += " %s,\n" % Parameter.autobind_map[self.autobind_parameter.autobind_type]
+            autobind_map_usage.add(self.autobind_parameter.autobind_type)
+            source += " %s,\n" % autobind_map[self.autobind_parameter.autobind_type]
         else:
             source += " /* explicit _this */,\n"
 
@@ -1482,6 +1484,7 @@ types_header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generat
 types_source = open_and_print(os.path.join(output_dirname, "esx_vi_types.generated.c"))
 methods_header = open_and_print(os.path.join(output_dirname, "esx_vi_methods.generated.h"))
 methods_source = open_and_print(os.path.join(output_dirname, "esx_vi_methods.generated.c"))
+methods_macro = open_and_print(os.path.join(output_dirname, "esx_vi_methods.generated.macro"))
 helpers_header = open_and_print(os.path.join(output_dirname, "esx_vi.generated.h"))
 helpers_source = open_and_print(os.path.join(output_dirname, "esx_vi.generated.c"))
 
@@ -1586,8 +1589,6 @@ for obj in objects_by_name.values():
 
 
 
-
-
 for obj in managed_objects_by_name.values():
     for property in obj.properties:
         if property.occurrence != OCCURRENCE__IGNORED and \
@@ -1610,15 +1611,11 @@ for obj in managed_objects_by_name.values():
 
 
 
-
-
 for obj in objects_by_name.values():
     inherit_features(obj)
 
 
 
-
-
 types_typedef.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 types_typeenum.write("/* Generated by esx_vi_generator.py */\n\n")
 types_typetostring.write("/* Generated by esx_vi_generator.py */\n\n")
@@ -1627,10 +1624,12 @@ types_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 types_source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 methods_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 methods_source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
+methods_macro.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 helpers_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 helpers_source.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
 
 
+
 # output enums
 types_typedef.write("/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n" +
                     " * VI Enums\n" +
@@ -1658,8 +1657,6 @@ types_typeenum.write("\n")
 types_typetostring.write("\n")
 types_typefromstring.write("\n")
 
-
-
 names = objects_by_name.keys()
 names.sort()
 
@@ -1682,8 +1679,6 @@ types_typeenum.write("\n")
 types_typetostring.write("\n")
 types_typefromstring.write("\n")
 
-
-
 names = managed_objects_by_name.keys()
 names.sort()
 
@@ -1705,6 +1700,17 @@ for name in names:
     methods_header.write(methods_by_name[name].generate_header())
     methods_source.write(methods_by_name[name].generate_source())
 
+sorted_usage = list(autobind_map_usage)
+sorted_usage.sort()
+
+for usage in sorted_usage:
+    name = autobind_map[usage]
+    string = aligned("#define ESX_VI__METHOD__PARAMETER__THIS__%s " % name, "\\\n", 78)
+    string += "    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \\\n"
+    string += aligned("", "%s)\n\n\n\n" % name, 49)
+
+    methods_macro.write(string)
+
 
 
 # output helpers
index 5967088cbcc7d921286fb500888005721c572a76..1f1780fc566b15a8330622968e79fdd58d01118d 100644 (file)
 
 
 
-#define ESX_VI__METHOD__PARAMETER__THIS__fileManager                          \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 fileManager)
-
-
-
-#define ESX_VI__METHOD__PARAMETER__THIS__perfManager                          \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 perfManager)
-
-
-
-#define ESX_VI__METHOD__PARAMETER__THIS__propertyCollector                    \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 propertyCollector)
-
-
-
-#define ESX_VI__METHOD__PARAMETER__THIS__searchIndex                          \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 searchIndex)
-
-
-
-#define ESX_VI__METHOD__PARAMETER__THIS__sessionManager                       \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 sessionManager)
-
-
-
-#define ESX_VI__METHOD__PARAMETER__THIS__virtualDiskManager                   \
-    ESX_VI__METHOD__PARAMETER__THIS_FROM_SERVICE(ManagedObjectReference,      \
-                                                 virtualDiskManager)
-
-
-
 /*
  * A required parameter must be != 0 (NULL for pointers, "undefined" == 0 for
  * enumeration values).
 
 
 
+#include "esx_vi_methods.generated.macro"
+
+
+
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * VI Methods
  */