]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/enums.py
C++: Declare namespace in enums.hpp so it can be used independently.
[libsigrok.git] / bindings / cxx / enums.py
index 90120d7f9fe85c43146a300ba17901c692657b8d..3ce73bc43f4eaab3fcc9706b70306870e89544ed 100644 (file)
@@ -27,9 +27,11 @@ index_file = sys.argv[1]
 # Get directory this script is in.
 dirname = os.path.dirname(os.path.realpath(__file__))
 
-outdirname = "bindings/cxx"
-if not os.path.exists(os.path.join(outdirname, 'include/libsigrokcxx')):
-    os.makedirs(os.path.join(outdirname, 'include/libsigrokcxx'))
+outdirname = "bindings"
+if not os.path.exists(os.path.join(outdirname, 'cxx/include/libsigrokcxx')):
+    os.makedirs(os.path.join(outdirname, 'cxx/include/libsigrokcxx'))
+if not os.path.exists(os.path.join(outdirname, 'swig')):
+    os.makedirs(os.path.join(outdirname, 'swig'))
 
 mapping = dict([
     ('sr_loglevel', ('LogLevel', 'Log verbosity level')),
@@ -66,13 +68,15 @@ for compound in index.findall('compound'):
             if name in mapping:
                 classes[member] = mapping[name]
 
-header = open(os.path.join(outdirname, 'include/libsigrokcxx/enums.hpp'), 'w')
-code = open(os.path.join(outdirname, 'enums.cpp'), 'w')
-swig = open(os.path.join(dirname, '../swig/enums.i'), 'w')
+header = open(os.path.join(outdirname, 'cxx/include/libsigrokcxx/enums.hpp'), 'w')
+code = open(os.path.join(outdirname, 'cxx/enums.cpp'), 'w')
+swig = open(os.path.join(outdirname, 'swig/enums.i'), 'w')
 
 for file in (header, code):
     print("/* Generated file - edit enums.py instead! */", file=file)
 
+print("namespace sigrok {", file=header)
+
 # Template for beginning of class declaration and public members.
 header_public_template = """
 /** {brief} */
@@ -132,11 +136,19 @@ for enum, (classname, classbrief) in classes.items():
             classname, classname, trimmed_name, classname, name, trimmed_name),
             file=code)
 
+    print('%%typemap(javacode) sigrok::%s %%{' % classname, file=swig)
+
     # Define public pointers for each enum value
     for trimmed_name in trimmed_names:
         print('const %s * const %s::%s = &%s::_%s;' % (
             classname, classname, trimmed_name, classname, trimmed_name),
             file=code)
+        print('public static final %s %s = new %s(classesJNI.%s_%s_get(), false);' % (
+            classname, trimmed_name, classname, classname, trimmed_name),
+            file=swig)
+
+    print ('%}', file=swig)
+
 
     # Define map of enum values to constants
     print('template<> const SR_API std::map<const enum %s, const %s * const> EnumValue<%s, enum %s>::_values = {' % (
@@ -166,3 +178,5 @@ for enum, (classname, classbrief) in classes.items():
     filename = os.path.join(dirname, "%s_methods.i" % classname)
     if os.path.exists(filename):
         print(str.join('', open(filename).readlines()), file=swig)
+
+print("}", file=header)