Add support for elog callback

Added support for "callback: elog" in PDM.
templates/elog.mako.cpp is used to generate the Elog call.
templates/errors.mako.hpp is used to generate the errors.hpp
used by generated.hpp to include any error.hpp files like
"xyz/openbmc_project/Common/error.hpp"

Change-Id: Id0ae3aca4282095f58a8939b70e398bec706d7f5
Signed-off-by: Gunnar Mills <gmills@us.ibm.com>
diff --git a/src/pdmgen.py b/src/pdmgen.py
index ac2b8e0..dc2c704 100755
--- a/src/pdmgen.py
+++ b/src/pdmgen.py
@@ -660,6 +660,28 @@
             indent=indent)
 
 
+class Elog(Callback, Renderer):
+    '''Handle the elog callback config file directive.'''
+
+    def __init__(self, *a, **kw):
+        self.error = kw.pop('error')
+        super(Elog, self).__init__(**kw)
+
+    def construct(self, loader, indent):
+
+        with open('errors.hpp', 'a') as fd:
+            fd.write(
+                self.render(
+                    loader,
+                    'errors.mako.hpp',
+                    c=self))
+        return self.render(
+            loader,
+            'elog.mako.cpp',
+            c=self,
+            indent=indent)
+
+
 class Method(ConfigEntry, Renderer):
     '''Handle the method callback config file directive.'''
 
@@ -827,6 +849,7 @@
             },
             'callback': {
                 'journal': Journal,
+                'elog': Elog,
                 'group': GroupOfCallbacks,
                 'method': Method,
             },
@@ -930,6 +953,9 @@
 
     def generate_cpp(self, loader):
         '''Render the template with the provided data.'''
+        # errors.hpp is used by generated.hpp to included any error.hpp files
+        open('errors.hpp', 'w+')
+
         with open(args.output, 'w') as fd:
             fd.write(
                 self.render(