diff --git a/Makefile.am b/Makefile.am
index 59963f8..4009061 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,11 +1,30 @@
 # export these headers
 include_HEADERS = log.hpp elog.hpp
 
+# Generate this header, don't export in a distro
+nodist_include_HEADERS = elog-gen.hpp
+
 # Application test which runs in obmc env (qemu, real hardware)
 bin_PROGRAMS = logging-test
 logging_test_SOURCES = logging_test.cpp
 
+# Be sure to build elog-gen.hpp before compiling
+BUILT_SOURCES = elog-gen.hpp
+
+CLEANFILES=elog-gen.hpp
+
 # systemd required for journal interfaces
 logging_test_LDFLAGS = $(SYSTEMD_LIBS)
 
+ELOG_YAML ?= ${srcdir}/elog.yaml
+ELOG_MAKO ?= ${srcdir}/elog-gen-template.mako.hpp
+REQ_FILES_TO_GEN ?= ${srcdir}/elog-gen.py $(ELOG_YAML) $(ELOG_MAKO)
+
+# Be sure to package up the required script, yaml, and mako template to
+# generate the header file
+EXTRA_DIST = $(REQ_FILES_TO_GEN)
+
+elog-gen.hpp: $(REQ_FILES_TO_GEN)
+	$(AM_V_at)${srcdir}/elog-gen.py -e $(ELOG_YAML) -m $(ELOG_MAKO) -o ${srcdir}/elog-gen.hpp
+
 SUBDIRS = test
\ No newline at end of file
diff --git a/elog-gen.hpp b/elog-gen.hpp
deleted file mode 100644
index 07d0757..0000000
--- a/elog-gen.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-// This file was autogenerated.  Do not edit!
-// See elog-gen.py for more details
-#pragma once
-
-#include <tuple>
-#include <type_traits>
-#include "log.hpp"
-
-namespace phosphor
-{
-
-namespace logging
-{
-
-namespace _GETSCOM
-{
-struct DEV_ADDR
-{
-    static constexpr auto str = "DEV_ADDR=0x%.8X";
-    static constexpr auto str_short = "DEV_ADDR";
-    using type = std::tuple<std::decay_t<decltype(str)>,int>;
-    explicit constexpr DEV_ADDR(int a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-struct DEV_ID
-{
-    static constexpr auto str = "DEV_ID=%u";
-    static constexpr auto str_short = "DEV_ID";
-    using type = std::tuple<std::decay_t<decltype(str)>,int>;
-    explicit constexpr DEV_ID(int a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-struct DEV_NAME
-{
-    static constexpr auto str = "DEV_NAME=%s";
-    static constexpr auto str_short = "DEV_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char *>;
-    explicit constexpr DEV_NAME(const char * a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-
-}  // namespace _GETSCOM
-
-struct GETSCOM
-{
-    static constexpr auto err_code = "xyz.openbmc_project.logging.GETSCOM";
-    static constexpr auto err_msg = "Getscom call failed";
-    static constexpr auto L = level::ERR;
-    using DEV_ADDR = _GETSCOM::DEV_ADDR;
-    using DEV_ID = _GETSCOM::DEV_ID;
-    using DEV_NAME = _GETSCOM::DEV_NAME;
-    using metadata_types = std::tuple<DEV_ADDR, DEV_ID, DEV_NAME>;
-};
-
-namespace _FILE_NOT_FOUND
-{
-struct ERRNUM
-{
-    static constexpr auto str = "ERRNUM=0x%.4X";
-    static constexpr auto str_short = "ERRNUM";
-    using type = std::tuple<std::decay_t<decltype(str)>,int>;
-    explicit constexpr ERRNUM(int a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-struct FILE_PATH
-{
-    static constexpr auto str = "FILE_PATH=%s";
-    static constexpr auto str_short = "FILE_PATH";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char *>;
-    explicit constexpr FILE_PATH(const char * a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-struct FILE_NAME
-{
-    static constexpr auto str = "FILE_NAME=%s";
-    static constexpr auto str_short = "FILE_NAME";
-    using type = std::tuple<std::decay_t<decltype(str)>,const char *>;
-    explicit constexpr FILE_NAME(const char * a) : _entry(entry(str, a)) {};
-    type _entry;
-};
-
-}  // namespace _FILE_NOT_FOUND
-
-struct FILE_NOT_FOUND
-{
-    static constexpr auto err_code = "xyz.openbmc_project.logging.FILE_NOT_FOUND";
-    static constexpr auto err_msg = "A required file was not found";
-    static constexpr auto L = level::INFO;
-    using ERRNUM = _FILE_NOT_FOUND::ERRNUM;
-    using FILE_PATH = _FILE_NOT_FOUND::FILE_PATH;
-    using FILE_NAME = _FILE_NOT_FOUND::FILE_NAME;
-    using metadata_types = std::tuple<ERRNUM, FILE_PATH, FILE_NAME>;
-};
-
-
-} // namespace logging
-
-} // namespace phosphor
diff --git a/elog-gen.py b/elog-gen.py
old mode 100644
new mode 100755
index 61cceac..25f40f0
--- a/elog-gen.py
+++ b/elog-gen.py
@@ -18,7 +18,8 @@
 import sys
 import os
 
-def gen_elog_hpp(i_elog_yaml, i_output_hpp):
+
+def gen_elog_hpp(i_elog_yaml, i_input_mako, i_output_hpp):
     r"""
     Read the input yaml file, grab the relevant data and call the mako
     template to generate the header file.
@@ -29,10 +30,10 @@
     """
 
     # Input parameters to mako template
-    errors = dict()     # Main error codes
+    errors = dict()  # Main error codes
     error_msg = dict()  # Error msg that corresponds to error code
     error_lvl = dict()  # Error code log level (debug, info, error, ...)
-    meta = list()       # The meta data names associated (ERRNO, FILE_NAME, ...)
+    meta = list()  # The meta data names associated (ERRNO, FILE_NAME, ...)
     meta_data = dict()  # The meta data info (type, format)
 
     # see elog.yaml for reference
@@ -45,7 +46,7 @@
         prop = ifile['SW'][i]
         error_msg[i] = prop['msg']
         error_lvl[i] = prop['level']
-        tmp_meta=[]
+        tmp_meta = []
         # grab all the meta data fields and info
         for j in prop['meta']:
             str_short = j['str'].split('=')[0]
@@ -55,10 +56,10 @@
             meta_data[str_short]['str_short'] = str_short
             meta_data[str_short]['type'] = j['type']
         meta.append(tmp_meta)
-        err_count+=1
+        err_count += 1
 
     # Debug
-    #for i in errors:
+    # for i in errors:
     #    print "ERROR: " + errors[i]
     #    print " MSG:  " + error_msg[errors[i]]
     #    print " LVL:  " + error_lvl[errors[i]]
@@ -66,21 +67,26 @@
     #    print meta[i]
 
     # Load the mako template and call it with the required data
-    mytemplate = Template(filename='elog-gen-template.mako.hpp')
-    f = open(i_output_hpp,'w')
-    f.write(mytemplate.render(errors=errors,error_msg=error_msg,
-                            error_lvl=error_lvl,meta=meta,
-                            meta_data=meta_data))
+    mytemplate = Template(filename=i_input_mako)
+    f = open(i_output_hpp, 'w')
+    f.write(mytemplate.render(errors=errors, error_msg=error_msg,
+                              error_lvl=error_lvl, meta=meta,
+                              meta_data=meta_data))
     f.close()
 
 
 def main(i_args):
     parser = OptionParser()
 
-    parser.add_option("-e","--elog",dest="elog_yaml",default="elog.yaml",
+    parser.add_option("-e", "--elog", dest="elog_yaml", default="elog.yaml",
                       help="input error yaml file to parse");
 
-    parser.add_option("-o","--output",dest="output_hpp", default="elog-gen.hpp",
+    parser.add_option("-m", "--mako", dest="elog_mako",
+                      default="elog-gen-template.mako.hpp",
+                      help="input mako template file to use");
+
+    parser.add_option("-o", "--output", dest="output_hpp",
+                      default="elog-gen.hpp",
                       help="output hpp to generate, elog-gen.hpp is default");
 
     (options, args) = parser.parse_args(i_args)
@@ -89,8 +95,9 @@
         print "Can not find input yaml file " + options.elog_yaml
         exit(1);
 
-    gen_elog_hpp(options.elog_yaml,options.output_hpp)
+    gen_elog_hpp(options.elog_yaml, options.elog_mako,
+                 options.output_hpp)
 
 # Only run if it's a script
 if __name__ == '__main__':
-    main(sys.argv[1:])
\ No newline at end of file
+    main(sys.argv[1:])
