python scripts: Generate file header with #include statements
diff --git a/tools/enum-create-valstr.py b/tools/enum-create-valstr.py
index 1e78a40..ac24095 100755
--- a/tools/enum-create-valstr.py
+++ b/tools/enum-create-valstr.py
@@ -20,7 +20,7 @@
 from optparse import OptionParser
 import pprint
 from pycparser import c_parser, c_ast, parse_file
-from value_string import export_value_str
+from value_string import *
 
 class EnumValStrVisitor(c_ast.NodeVisitor):
     "Generate a 'struct value_string' from an enum"
@@ -30,7 +30,7 @@
         vdict = {}
         for val in elist.enumerators:
             vdict[val.name] = val.name
-        export_value_str(name, vdict, sort_key=None)
+        wr.export_value_str(name, vdict, sort_key=None)
 
 class EnumValuePrinter(c_ast.NodeVisitor):
     def visit_Enum(self, node):
@@ -49,11 +49,19 @@
 
 
 parser = OptionParser()
+parser.add_option("-f", "--flavor", dest="flavor", default='osmocom',
+                  help="Flavor of generated C (osmocom, wireshark)")
+parser.add_option("-w", "--weak-symbol", dest="weak", default=True,
+                  help="Generate weak symbols")
 (options, args) = parser.parse_args()
 filename = args[0]
 
 ast = parse_file(filename, use_cpp=True)
 
+wr = ValueStringWriter(flavor=options.flavor, weak=options.weak,
+        includes=[filename])
+wr.export_header()
+
 v = EnumValStrVisitor()
 #v = EnumValuePrinter()
 v.visit(ast)
diff --git a/tools/value_string.py b/tools/value_string.py
index 2bdc499..31db752 100644
--- a/tools/value_string.py
+++ b/tools/value_string.py
@@ -17,13 +17,28 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
+class ValueStringWriter(object):
+    def __init__(self, flavor='osmocom', weak=False, includes=[]):
+        self.flavor = flavor
+        self.weak = weak
+        self.includes = includes
 
-def export_value_str(name, vals, flavor='osmocom', sort_key=int):
-    if flavor == 'osmocom':
-        print("const struct value_string %s[] = {" % name);
-    elif flavor == 'wireshark':
-        print("const value_string %s[] = {" % name);
-    for v in sorted(vals.iterkeys(), key=sort_key):
-        print("\t{ %s, \"%s\" }," % (v, vals[v]));
-    print("\t{ 0, NULL }")
-    print("};");
+    def export_value_str(self, name, vals, sort_key=int):
+        if self.weak:
+            print("__attribute__((weak))")
+        if self.flavor == 'osmocom':
+            print("const struct value_string %s[] = {" % name);
+        elif self.flavor == 'wireshark':
+            print("const value_string %s[] = {" % name);
+        for v in sorted(vals.iterkeys(), key=sort_key):
+            print("\t{ %s, \"%s\" }," % (v, vals[v]));
+        print("\t{ 0, NULL }")
+        print("};");
+
+    def export_header(self):
+        print("/* GENERATED FILE, DO NOT EDIT */")
+        if self.flavor == 'osmocom':
+            print("#include <osmocom/core/utils.h>")
+        for i in self.includes:
+            print('#include "%s"' % i)
+        print("")